0 txs
4k calls
constructor
constructor(address _etherFiDataProvider)
functions
CASH_MODULE_CONTROLLER_ROLE
viewfunction CASH_MODULE_CONTROLLER_ROLE() view returns (bytes32)
ETH
viewfunction ETH() view returns (address)
ETHER_FI_WALLET_ROLE
viewfunction ETHER_FI_WALLET_ROLE() view returns (bytes32)
etherFiDataProvider
viewfunction etherFiDataProvider() view returns (address)
getCashEventEmitter
viewfunction getCashEventEmitter() view returns (address)
getCashModuleSetters
viewfunction getCashModuleSetters() view returns (address)
getData
viewfunction getData(address safe) view returns (tuple)
getDebtManager
viewfunction getDebtManager() view returns (address)
getDelays
viewfunction getDelays() view returns (uint64, uint64, uint64)
getMode
viewfunction getMode(address safe) view returns (uint8)
getNonce
viewfunction getNonce(address safe) view returns (uint256)
getPendingCashback
viewfunction getPendingCashback(address account, address[] tokens) view returns (tuple[] data, uint256 totalCashbackInUsd)
getPendingCashbackForToken
viewfunction getPendingCashbackForToken(address account, address token) view returns (uint256)
getPendingWithdrawalAmount
viewfunction getPendingWithdrawalAmount(address safe, address token) view returns (uint256)
getSafeTier
viewfunction getSafeTier(address safe) view returns (uint8)
getSettlementDispatcher
viewfunction getSettlementDispatcher(uint8 binSponsor) view returns (address settlementDispatcher)
getWhitelistedWithdrawAssets
viewfunction getWhitelistedWithdrawAssets() view returns (address[])
HUNDRED_PERCENT_IN_BPS
viewfunction HUNDRED_PERCENT_IN_BPS() view returns (uint256)
incomingCreditModeStartTime
viewfunction incomingCreditModeStartTime(address safe) view returns (uint256)
isWhitelistedWithdrawAsset
viewfunction isWhitelistedWithdrawAsset(address asset) view returns (bool)
MAX_CASHBACK_PERCENTAGE
viewfunction MAX_CASHBACK_PERCENTAGE() view returns (uint256)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
roleRegistry
viewfunction roleRegistry() view returns (address)
transactionCleared
viewfunction transactionCleared(address safe, bytes32 txId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
clearPendingCashback
nonpayablefunction clearPendingCashback(address[] users, address[] tokens)
initialize
nonpayablefunction initialize(address _roleRegistry, address _debtManager, address _settlementDispatcherReap, address _settlementDispatcherRain, address _cashbackDispatcher, address _cashEventEmitter, address _cashModuleSetters)
pause
nonpayablefunction pause()
postLiquidate
nonpayablefunction postLiquidate(address safe, address liquidator, tuple[] tokensToSend)
preLiquidate
nonpayablefunction preLiquidate(address safe)
processWithdrawal
nonpayablefunction processWithdrawal(address safe)
repay
nonpayablefunction repay(address safe, address token, uint256 amountInUsd)
setCashModuleSettersAddress
nonpayablefunction setCashModuleSettersAddress(address newCashModuleSetters)
setupModule
nonpayablefunction setupModule(bytes data)
spend
nonpayablefunction spend(address safe, bytes32 txId, uint8 binSponsor, address[] tokens, uint256[] amountsInUsd, tuple[] cashbacks)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyInSameTier
error AlreadyInSameTier(uint256 index)
AmountZero
error AmountZero()
ArrayLengthMismatch
error ArrayLengthMismatch()
BorrowingsExceedMaxBorrowAfterSpending
error BorrowingsExceedMaxBorrowAfterSpending()
CannotWithdrawYet
error CannotWithdrawYet()
CashbackPercentageGreaterThanMaxAllowed
error CashbackPercentageGreaterThanMaxAllowed()
DailyLimitCannotBeGreaterThanMonthlyLimit
error DailyLimitCannotBeGreaterThanMonthlyLimit()
DuplicateElementFound
error DuplicateElementFound()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExceededDailySpendingLimit
error ExceededDailySpendingLimit()
ExceededMonthlySpendingLimit
error ExceededMonthlySpendingLimit()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidSignature
error InvalidSignature()
InvalidSignatures
error InvalidSignatures()
InvalidTimezoneOffset
error InvalidTimezoneOffset()
InvalidWithdrawAsset
error InvalidWithdrawAsset(address asset)
ModeAlreadySet
error ModeAlreadySet()
NotInitializing
error NotInitializing()
OnlyBorrowToken
error OnlyBorrowToken()
OnlyCashModuleController
error OnlyCashModuleController()
OnlyDebtManager
error OnlyDebtManager()
OnlyEtherFiSafe
error OnlyEtherFiSafe()
OnlyEtherFiWallet
error OnlyEtherFiWallet()
OnlyOneTokenAllowedInCreditMode
error OnlyOneTokenAllowedInCreditMode()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
OnlySafeAdmin
error OnlySafeAdmin()
RecipientCannotBeAddressZero
error RecipientCannotBeAddressZero()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SettlementDispatcherNotSetForBinSponsor
error SettlementDispatcherNotSetForBinSponsor()
SplitAlreadyTheSame
error SplitAlreadyTheSame()
TransactionAlreadyCleared
error TransactionAlreadyCleared()
Unauthorized
error Unauthorized()
UnsupportedToken
error UnsupportedToken()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c060405230608052348015610013575f5ffd5b5060405161613038038061613083398101604081905261003291610130565b80806001600160a01b03811661005b5760405163b4fa3fb360e01b815260040160405180910390fd5b6001600160a01b031660a05261006f61007e565b5061007861007e565b5061015d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ce5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461012d5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610140575f5ffd5b81516001600160a01b0381168114610156575f5ffd5b9392505050565b60805160a051615f6c6101c45f395f818161078d01528181610bc001528181610f50015281816111ea015281816117670152818161183301528181611a7a01528181611cc8015261201101525f8181612c9101528181612cba0152612e730152615f6c5ff3fe608060405260043610610224575f3560e01c8063624653c8116101225780639b2ddc65116100aa578063ad3cb1cc1161006e578063ad3cb1cc146106e2578063c8d31d061461071f578063d69fd6051461073e578063e5a53ea71461075d578063f9fba81b1461077c57610224565b80639b2ddc651461064f5780639e74328b146106635780639f424602146106825780639fc8623914610697578063ac4b21ee146106c357610224565b80638456cb59116100f15780638456cb59146105b257806386e93728146105c65780638caf758f146105e5578063909030d51461061157806391f4d6a51461063057610224565b8063624653c8146105195780636bc07b2b146105385780637f12dc60146105765780638322fff21461058b57610224565b806338266b22116101b05780634f1ef286116101745780634f1ef2861461048e57806352d1902d146104a157806357a2219c146104b55780635ba3b816146104c95780635c975abb146104ea57610224565b806338266b22146103cf5780633c1a5012146103fb5780633d53e83f1461041a5780633f4ba83a1461044757806341d88bd31461045b57610224565b80632691f9ea116101f75780632691f9ea146102e95780632d0335ab146102fd5780632d81b95c1461035e57806332aa0f841461039157806335876476146103b057610224565b806308c732591461025b5780630a994e0e1461028c5780630bd735b7146102ab5780631da649cf146102ca575b34801561022f575f5ffd5b505f6102396107af565b9050365f5f375f5f365f845af43d5f5f3e808015610255573d5ff35b3d5ffd5b005b348015610266575f5ffd5b5061026f6107ca565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610297575f5ffd5b506102596102a6366004615002565b6107f8565b3480156102b6575f5ffd5b506102596102c53660046150a9565b61083d565b3480156102d5575f5ffd5b506102596102e4366004615196565b610adc565b3480156102f4575f5ffd5b5061026f610c94565b348015610308575f5ffd5b50610350610317366004615002565b6001600160a01b03165f9081527f9425b2e03e09da4c20ff7a465da264f7a02bf7079e1dbb47fce0436e1d206d00602052604090205490565b604051908152602001610283565b348015610369575f5ffd5b506103507f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206781565b34801561039c575f5ffd5b506103506103ab3660046151d0565b610caf565b3480156103bb575f5ffd5b506102596103ca366004615201565b610ceb565b3480156103da575f5ffd5b506103ee6103e9366004615002565b610f27565b6040516102839190615390565b348015610406575f5ffd5b50610259610415366004615002565b6111c9565b348015610425575f5ffd5b5061043961043436600461548b565b61128f565b604051610283929190615535565b348015610452575f5ffd5b506102596113fb565b348015610466575f5ffd5b506103507fa680e58cc621cb50e17ad287d74249ea09457a375ad70c4ef5243e4112d220d581565b61025961049c366004615596565b611462565b3480156104ac575f5ffd5b5061035061147d565b3480156104c0575f5ffd5b5061026f6107af565b3480156104d4575f5ffd5b506104dd611498565b6040516102839190615672565b3480156104f5575f5ffd5b505f516020615f405f395f51905f525460ff165b6040519015158152602001610283565b348015610524575f5ffd5b506102596105333660046156cb565b6114b2565b348015610543575f5ffd5b5061054c611695565b604080516001600160401b0394851681529284166020840152921691810191909152606001610283565b348015610581575f5ffd5b5061035061271081565b348015610596575f5ffd5b5061026f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b3480156105bd575f5ffd5b506102596116d5565b3480156105d1575f5ffd5b506105096105e0366004615002565b61173a565b3480156105f0575f5ffd5b506106046105ff366004615002565b611744565b6040516102839190615735565b34801561061c575f5ffd5b5061025961062b36600461574f565b61181b565b34801561063b575f5ffd5b5061026f61064a3660046157c9565b611913565b34801561065a575f5ffd5b5061026f61198d565b34801561066e575f5ffd5b5061025961067d3660046157e2565b611996565b34801561068d575f5ffd5b506103506103e881565b3480156106a2575f5ffd5b506106b66106b1366004615002565b611c26565b60405161028391906158a9565b3480156106ce575f5ffd5b506103506106dd366004615002565b611c7b565b3480156106ed575f5ffd5b50610712604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161028391906158e4565b34801561072a575f5ffd5b506103506107393660046151d0565b611ca5565b348015610749575f5ffd5b50610259610758366004615002565b611ee7565b348015610768575f5ffd5b506105096107773660046158f6565b611fee565b348015610787575f5ffd5b5061026f7f000000000000000000000000000000000000000000000000000000000000000081565b5f6107b86120ce565b600801546001600160a01b0316919050565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b61080061198d565b6001600160a01b0316336001600160a01b0316146108315760405163647018d360e11b815260040160405180910390fd5b61083a816120f2565b50565b61084561198d565b6001600160a01b0316336001600160a01b0316146108765760405163647018d360e11b815260040160405180910390fd5b80515f816001600160401b038111156108915761089161501b565b6040519080825280602002602001820160405280156108ba578160200160208202803683370190505b5090505f826001600160401b038111156108d6576108d661501b565b60405190808252806020026020018201604052801561090957816020015b60608152602001906001900390816108f45790505b5090505f805b84811015610a2e575f86828151811061092a5761092a61591e565b6020026020010151602001511115610a265785818151811061094e5761094e61591e565b60200260200101515f015184838151811061096b5761096b61591e565b60200260200101906001600160a01b031690816001600160a01b03168152505063a9059cbb60e01b878783815181106109a6576109a661591e565b60209081029190910181015101516040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050838381518110610a1457610a1461591e565b60200260200101819052508160010191505b60010161090f565b50808352808252866001600160a01b031663bcde317c84836001600160401b03811115610a5d57610a5d61501b565b604051908082528060200260200182016040528015610a86578160200160208202803683370190505b50856040518463ffffffff1660e01b8152600401610aa693929190615932565b5f604051808303815f87803b158015610abd575f5ffd5b505af1158015610acf573d5f5f3e3d5ffd5b5050505050505050505050565b610ae46121d0565b610aec612200565b610af46107ca565b604051632474521560e21b81527f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206760048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610b5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8291906159cb565b610b9f5760405163715cb61d60e11b815260040160405180910390fd5b60405163b7ca418b60e01b81526001600160a01b03808516600483015284917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610c07573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2b91906159cb565b610c48576040516334d0b49960e01b815260040160405180910390fd5b5f610c5161198d565b9050610c5d818561226d565b610c795760405162da3d4760e31b815260040160405180910390fd5b610c85858286866122df565b5050610c8f612695565b505050565b5f610c9d6120ce565b600701546001600160a01b0316919050565b5f610cb86120ce565b6001600160a01b038085165f908152600b9290920160209081526040808420928616845291905290205490505b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610d2f5750825b90505f826001600160401b03166001148015610d4a5750303b155b905081158015610d58575080155b15610d765760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610da057845460ff60401b1916600160401b1785555b610da98c6126bf565b5f610db26120ce565b90508b816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505f6001600160a01b03168b6001600160a01b03161480610e0357506001600160a01b038a16155b80610e1557506001600160a01b038916155b80610e2757506001600160a01b038816155b15610e455760405163b4fa3fb360e01b815260040160405180910390fd5b6002810180546009830180546001600160a01b038e81166001600160a01b0319928316179092556006850180548e84169083161790556007850180548d84169083161790556001600160e01b0319909216818f1617600160a01b1790925560038301805468010000000000000e106001600160801b031990911617905560089092018054918916919092161790558315610f1957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b610f2f614edf565b60405163b7ca418b60e01b81526001600160a01b03808416600483015283917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015610f97573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbb91906159cb565b610fd8576040516334d0b49960e01b815260040160405180910390fd5b5f610fe16120ce565b6001600160a01b0385165f90815260209182526040808220815161020081018352815460a0808301918252600184015460c0840152600284015460e084015260038401546101008401526004840154610120840152600584015461014084015260068401546001600160401b03808216610160860152600160401b82048116610180860152600160801b820481166101a0860152600160c01b909104166101c084015260078401546101e084015290825283516008840180548089028301840190965260808201868152949850959692959286019490938492909184918401828280156110f557602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116110d7575b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561114b57602002820191905f5260205f20905b815481526020019060010190808311611137575b5050509183525050600291909101546001600160a01b038116602080840191909152600160a01b9091046001600160601b0316604090920191909152908252600b85015491019060ff1660018111156111a6576111a661535f565b8152600c8401546020820152601090930154604090930192909252509392505050565b60405163b7ca418b60e01b81526001600160a01b03808316600483015282917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611231573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061125591906159cb565b611272576040516334d0b49960e01b815260040160405180910390fd5b61127a612200565b61128382612711565b61128b612695565b5050565b60605f5f61129b6120ce565b845190915060018111156112b2576112b285612b18565b806001600160401b038111156112ca576112ca61501b565b60405190808252806020026020018201604052801561130e57816020015b604080518082019091525f80825260208201528152602001906001900390816112e85790505b5093505f805b828110156113ed576001600160a01b0388165f908152600b850160205260408120885182908a908590811061134b5761134b61591e565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205490505f8111156113e457604051806040016040528089848151811061139a5761139a61591e565b60200260200101516001600160a01b03168152602001828152508784815181106113c6576113c661591e565b60209081029190910101526113db81876159f8565b95508260010192505b50600101611314565b508085525050509250929050565b6114036107ca565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b158015611442575f5ffd5b505afa158015611454573d5f5f3e3d5ffd5b50505050611460612c27565b565b61146a612c86565b61147382612d2a565b61128b8282612da7565b5f611486612e68565b505f516020615f205f395f51905f5290565b60606114ad6114a56120ce565b600a01612eb1565b905090565b6114ba612200565b6114c26121d0565b825f8190036114e45760405163b4fa3fb360e01b815260040160405180910390fd5b6001821115611528576115288383808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b1892505050565b600181111561156c5761156c8585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b1892505050565b5f5b81811015611685575f8686838181106115895761158961591e565b905060200201602081019061159e9190615002565b6001600160a01b0316036115c55760405163b4fa3fb360e01b815260040160405180910390fd5b5f5b8381101561167c575f8585838181106115e2576115e261591e565b90506020020160208101906115f79190615002565b6001600160a01b03160361161e5760405163b4fa3fb360e01b815260040160405180910390fd5b6116748787848181106116335761163361591e565b90506020020160208101906116489190615002565b86868481811061165a5761165a61591e565b905060200201602081019061166f9190615002565b612f85565b6001016115c7565b5060010161156e565b505061168f612695565b50505050565b5f5f5f5f6116a16120ce565b6002810154600390910154600160a01b9091046001600160401b03908116968183169650600160401b909204169350915050565b6116dd6107ca565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b15801561171c575f5ffd5b505afa15801561172e573d5f5f3e3d5ffd5b505050506114606130c0565b5f610ce582613108565b60405163b7ca418b60e01b81526001600160a01b0380831660048301525f9183917f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa1580156117ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117d091906159cb565b6117ed576040516334d0b49960e01b815260040160405180910390fd5b6117f56120ce565b6001600160a01b03939093165f908152602093909352505060409020600d015460ff1690565b60405163b7ca418b60e01b81523360048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b7ca418b90602401602060405180830381865afa158015611880573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118a491906159cb565b6118c1576040516334d0b49960e01b815260040160405180910390fd5b5f80806118d085870187615a0b565b9250925092505f6118df6120ce565b335f9081526020919091526040902090506118fc8185858561311e565b50600b01805460ff19166001179055505050505050565b5f60018260018111156119285761192861535f565b03611949576119356120ce565b600901546001600160a01b03169050611961565b6119516120ce565b600201546001600160a01b031690505b6001600160a01b03811661198857604051633bb72dd760e11b815260040160405180910390fd5b919050565b5f6114ad61328e565b61199e6121d0565b6119a6612200565b6119ae6107ca565b604051632474521560e21b81527f182c09b9a75f816507b9c63a8f7abb8b772664ed74508c2e3b084f4a604e206760048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611a18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3c91906159cb565b611a595760405163715cb61d60e11b815260040160405180910390fd5b60405163b7ca418b60e01b81526001600160a01b03808b1660048301528a917f00000000000000000000000000000000000000000000000000000000000000009091169063b7ca418b90602401602060405180830381865afa158015611ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae591906159cb565b611b02576040516334d0b49960e01b815260040160405180910390fd5b5f611b0b6120ce565b6001600160a01b038c165f90815260208290526040812091925090611b34908c8b8b8b8b6132a9565b90505f6001600160a01b038d165f908152602084905260409020600b015460ff166001811115611b6657611b6661535f565b03611bf257611bed828d8d8d8d8d808060200260200160405190810160405280939291908181526020018383602002808284375f81840152601f19601f820116905080830192505050505050508c8c808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508a9250613436915050565b611c03565b611c03828d8d8d8d8d8d8d89613835565b611c10828d838888613c24565b505050611c1b612695565b505050505050505050565b5f5f611c306120ce565b6001600160a01b0384165f90815260209190915260409020600c81015490915015801590611c61575080600c015442115b15611c6e57505f92915050565b600b015460ff1692915050565b5f611c846120ce565b6001600160a01b039092165f9081526020929092525060409020600c015490565b60405163b7ca418b60e01b81526001600160a01b0380841660048301525f9184917f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa158015611d0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3191906159cb565b611d4e576040516334d0b49960e01b815260040160405180910390fd5b5f611d576120ce565b6001600160a01b0386165f908152602091825260409081902081516008909101805460a0948102830185019093526080820183815291939092849291849190840182828015611dcd57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611daf575b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611e2357602002820191905f5260205f20905b815481526020019060010190808311611e0f575b5050509183525050600291909101546001600160a01b0381166020830152600160a01b90046001600160601b0316604090910152805151909150805f5b82811015611ead57866001600160a01b0316845f01518281518110611e8757611e8761591e565b60200260200101516001600160a01b031603611ea557809150611ead565b600101611e60565b50818103611ebb575f611eda565b82602001518181518110611ed157611ed161591e565b60200260200101515b94505050505b5092915050565b611eef6107ca565b604051632474521560e21b81527fa680e58cc621cb50e17ad287d74249ea09457a375ad70c4ef5243e4112d220d560048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015611f59573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7d91906159cb565b611f9a5760405163ebba563b60e01b815260040160405180910390fd5b6001600160a01b038116611fc15760405163b4fa3fb360e01b815260040160405180910390fd5b80611fca6120ce565b60080180546001600160a01b0319166001600160a01b039290921691909117905550565b60405163b7ca418b60e01b81526001600160a01b0380841660048301525f9184917f0000000000000000000000000000000000000000000000000000000000000000169063b7ca418b90602401602060405180830381865afa158015612056573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061207a91906159cb565b612097576040516334d0b49960e01b815260040160405180910390fd5b61209f6120ce565b6001600160a01b0385165f90815260209182526040808220868352600e01909252205460ff1691505092915050565b7fe000c7adec5855bcf51f74b73aa86172d0a325bc54c3f73cb406d259df90ea0090565b5f6120fb6120ce565b600701546001600160a01b031690505f6121136120ce565b6001600160a01b0384165f90815260209190915260409020600881015490915015610c8f57600a810154604051632b3b959160e01b81526001600160a01b0384811692632b3b9591926121789288926008880192600989019290911690600401615a34565b5f604051808303815f87803b15801561218f575f5ffd5b505af11580156121a1573d5f5f3e3d5ffd5b5050506008820190505f6121b58282614f4a565b6121c2600183015f614f4a565b505f60029190910155505050565b5f516020615f405f395f51905f525460ff16156114605760405163d93c066560e01b815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c1561224057604051633ee5aeb560e01b815260040160405180910390fd5b61146060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b90614005565b60405163497883cd60e11b81526001600160a01b0382811660048301525f91908416906392f1079a90602401602060405180830381865afa1580156122b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d891906159cb565b9392505050565b60405162afe6ab60e81b81526001600160a01b038381166004830152602482018390525f919085169063afe6ab0090604401602060405180830381865afa15801561232c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123509190615ae4565b9050805f03612372576040516365e52d5160e11b815260040160405180910390fd5b61237d85848361400c565b604080516003808252608082019092525f91602082016060803683375050604080516003808252608082019092529293505f929150602082015b60608152602001906001900390816123b7575050604080516003808252608082019092529192505f91906020820160608036833701905050905085835f815181106124045761240461591e565b60200260200101906001600160a01b031690816001600160a01b03168152505086836001815181106124385761243861591e565b60200260200101906001600160a01b031690816001600160a01b031681525050858360028151811061246c5761246c61591e565b6001600160a01b0392831660209182029290920181019190915260408051928a16602484015260448084018890528151808503909101815260649093019052810180516001600160e01b031663095ea7b360e01b179052825183905f906124d5576124d561591e565b6020026020010181905250631da649cf60e01b8887866040516024016124fd93929190615afb565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050826001815181106125435761254361591e565b60209081029190910101526040516001600160a01b03881660248201525f604482015263095ea7b360e01b90606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050826002815181106125b8576125b861591e565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b0389169063bcde317c906125f390869085908790600401615932565b5f604051808303815f87803b15801561260a575f5ffd5b505af115801561261c573d5f5f3e3d5ffd5b505050506126286120ce565b6007015460405162c18c2560e41b81526001600160a01b038a811660048301528881166024830152604482018790526064820188905290911690630c18c250906084015b5f604051808303815f87803b158015612683575f5ffd5b505af1158015610f19573d5f5f3e3d5ffd5b6114605f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00612267565b6126c76141d9565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f50080546001600160a01b0319166001600160a01b038316178155612709614222565b61128b61422a565b5f61271a6120ce565b90505f6127256120ce565b6001600160a01b0384165f90815260209190915260409020600a81015490915042600160a01b9091046001600160601b031611156127765760405163271c87d960e01b815260040160405180910390fd5b6127dc82826008015f018054806020026020016040519081016040528092919081815260200182805480156127d257602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116127b4575b505050505061424a565b600a81015460088201546001600160a01b03909116905f816001600160401b0381111561280b5761280b61501b565b604051908082528060200260200182016040528015612834578160200160208202803683370190505b5090505f826001600160401b038111156128505761285061501b565b60405190808252806020026020018201604052801561288357816020015b606081526020019060019003908161286e5790505b5090505f5b8381101561298a57600886018054829081106128a6576128a661591e565b905f5260205f20015f9054906101000a90046001600160a01b03168382815181106128d3576128d361591e565b6001600160a01b039092166020928302919091019091015260098601805463a9059cbb60e01b9187918490811061290c5761290c61591e565b5f918252602090912001546040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050508282815181106129775761297761591e565b6020908102919091010152600101612888565b50866001600160a01b031663bcde317c83856001600160401b038111156129b3576129b361501b565b6040519080825280602002602001820160405280156129dc578160200160208202803683370190505b50846040518463ffffffff1660e01b81526004016129fc93929190615932565b5f604051808303815f87803b158015612a13575f5ffd5b505af1158015612a25573d5f5f3e3d5ffd5b50505050612a316120ce565b600701546040516371aa1e0f60e01b81526001600160a01b03909116906371aa1e0f90612a6e908a9060088a019060098b01908a90600401615a34565b5f604051808303815f87803b158015612a85575f5ffd5b505af1158015612a97573d5f5f3e3d5ffd5b5050506008860190505f612aab8282614f4a565b612ab8600183015f614f4a565b505f600291909101556001860154604051630d3b088560e31b81526001600160a01b038981166004830152909116906369d84428906024015f6040518083038186803b158015612b06575f5ffd5b505afa158015610acf573d5f5f3e3d5ffd5b805160018111612b26575050565b5f816001600160401b03811115612b3f57612b3f61501b565b604051908082528060200260200182016040528015612b68578160200160208202803683370190505b5090505f5b8281101561168f575f848281518110612b8857612b8861591e565b602002602001015190505f5f90505b82811015612bf257838181518110612bb157612bb161591e565b60200260200101516001600160a01b0316826001600160a01b031603612bea57604051630e3e200f60e41b815260040160405180910390fd5b600101612b97565b5080838381518110612c0657612c0661591e565b6001600160a01b039092166020928302919091019091015250600101612b6d565b612c2f6142d4565b5f516020615f405f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612d0c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612d005f516020615f205f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156114605760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b158015612d8d575f5ffd5b505afa158015612d9f573d5f5f3e3d5ffd5b505050505050565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612e01575060408051601f3d908101601f19168201909252612dfe91810190615ae4565b60015b612e2e57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f516020615f205f395f51905f528114612e5e57604051632a87526960e21b815260048101829052602401612e25565b610c8f8383614303565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114605760405163703e46dd60e11b815260040160405180910390fd5b63978aab926004525f818152602481206060915068fbb67fda52d4bfb8bf81548060a01b60a01c6040519450846020018260601c9250838314158302815281612f3f578215612f3a57600191508185015460601c92508215612f3a578284141590920260208301525060028381015460601c918215612f3a576003915083831415830260408201525b612f6f565b600191821c915b82811015612f6d578581015460601c858114158102600583901b8401529350600101612f46565b505b8186528160051b81016040525050505050919050565b5f612f8e6120ce565b90505f612f9b8484610caf565b9050801561168f57600682015460405163013c17c160e71b81526001600160a01b0390911690639e0be08090612fd990879087908690600401615afb565b60408051808303815f875af1925050508015613012575060408051601f3d908101601f1916820190925261300f91810190615b1f565b60015b1561168f578015612d9f57600784015460405163cfd269ff60e01b81526001600160a01b038881166004830152878116602483015260448201859052606482018690529091169063cfd269ff906084015f604051808303815f87803b158015613079575f5ffd5b505af115801561308b573d5f5f3e3d5ffd5b5050506001600160a01b038088165f908152600b870160209081526040808320938a1683529290529081205550505050505050565b6130c86121d0565b5f516020615f405f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612c68565b5f610ce5826131156120ce565b600a0190614358565b613126614f65565b8383808211156131495760405163e2ed77a160e01b815260040160405180910390fd5b6201518084138061315d57506201517f1984125b1561317b57604051638fa93def60e01b815260040160405180910390fd5b85875560018701859055600787018490556131964285614401565b60068801805467ffffffffffffffff19166001600160401b039290921691909117905560078701546131c990429061444e565b6006880180546001600160401b03928316600160401b9081026fffffffffffffffff000000000000000019831681179384905560408051610160810182528d54815260018e0154602082015260028e01549181019190915260038d0154606082015260048d0154608082015260058d015460a08201529085169285169290921760c08301528204831660e0820152600160801b82048316610100820152600160c01b909104909116610120820152600788015461014082015292505050949350505050565b5f6132976120ce565b600101546001600160a01b0316919050565b5f8381036132ca5760405163b4fa3fb360e01b815260040160405180910390fd5b8382146132ea5760405163512509d360e11b815260040160405180910390fd5b600184111561332e5761332e8585808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250612b1892505050565b613337876144c8565b5f868152600e8801602052604090205460ff16156133685760405163767a99bf60e01b815260040160405180910390fd5b5f600b88015460ff1660018111156133825761338261535f565b14801561338f5750600184115b156133ad576040516310949f4d60e21b815260040160405180910390fd5b5f805b838110156133e6578484828181106133ca576133ca61591e565b90506020020135826133dc91906159f8565b91506001016133b0565b50805f03613407576040516365e52d5160e11b815260040160405180910390fd5b5f878152600e890160205260409020805460ff1916600117905561342b88826144f8565b979650505050505050565b60018701548351613468916001600160a01b03169085905f9061345b5761345b61591e565b602002602001015161226d565b6134855760405163350b944160e11b815260040160405180910390fd5b600187015483515f916001600160a01b03169063afe6ab0090869084906134ae576134ae61591e565b6020026020010151855f815181106134c8576134c861591e565b60200260200101516040518363ffffffff1660e01b81526004016135019291906001600160a01b03929092168252602082015260400190565b602060405180830381865afa15801561351c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135409190615ae4565b9050805f03613562576040516365e52d5160e11b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f929150602082015b606081526020019060019003908161359a5750506040805160018082528183019092529192505f91906020808301908036833750505060018c015484519192506001600160a01b03169084905f906135f4576135f461591e565b60200260200101906001600160a01b031690816001600160a01b03168152505063eda7fbcd60e01b88885f8151811061362f5761362f61591e565b60200260200101518660405160240161364a93929190615b40565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050825f8151811061368f5761368f61591e565b60200260200101819052505f815f815181106136ad576136ad61591e565b6020908102919091010152604051632f378c5f60e21b81526001600160a01b038b169063bcde317c906136e890869085908790600401615932565b5f604051808303815f87803b1580156136ff575f5ffd5b505af1925050508015613710575060015b61377b5761371d8a6120f2565b604051632f378c5f60e21b81526001600160a01b038b169063bcde317c9061374d90869085908790600401615932565b5f604051808303815f87803b158015613764575f5ffd5b505af1158015613776573d5f5f3e3d5ffd5b505050505b6040805160018082528183019092525f916020808301908036833701905050905084815f815181106137af576137af61591e565b602090810291909101015260078c015460405163239c8a9f60e11b81526001600160a01b0390911690634739153e906137fa908e908e908e908e9088908f908f905f90600401615b6a565b5f604051808303815f87803b158015613811575f5ffd5b505af1158015613823573d5f5f3e3d5ffd5b50505050505050505050505050505050565b5f846001600160401b0381111561384e5761384e61501b565b604051908082528060200260200182016040528015613877578160200160208202803683370190505b5090505f5b85811015613ad95760018b01546138c2906001600160a01b03168888848181106138a8576138a861591e565b90506020020160208101906138bd9190615002565b61226d565b6138df5760405163350b944160e11b815260040160405180910390fd5b60018b01546001600160a01b031663afe6ab008888848181106139045761390461591e565b90506020020160208101906139199190615002565b87878581811061392b5761392b61591e565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250604401602060405180830381865afa15801561397b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061399f9190615ae4565b8282815181106139b1576139b161591e565b6020026020010181815250508181815181106139cf576139cf61591e565b60200260200101518787838181106139e9576139e961591e565b90506020020160208101906139fe9190615002565b6040516370a0823160e01b81526001600160a01b038d8116600483015291909116906370a0823190602401602060405180830381865afa158015613a44573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a689190615ae4565b1015613a8757604051631e9acf1760e31b815260040160405180910390fd5b613ad18a888884818110613a9d57613a9d61591e565b9050602002016020810190613ab29190615002565b848481518110613ac457613ac461591e565b602002602001015161400c565b60010161387c565b50613ae7898888888561459c565b60078a015460405163239c8a9f60e11b81526001600160a01b0390911690634739153e90613b2c908c908c908c908c908c9089908d908d908d90600190600401615c1e565b5f604051808303815f87803b158015613b43575f5ffd5b505af1158015613b55573d5f5f3e3d5ffd5b5050505060018a0154604051630d3b088560e31b81526001600160a01b038b81166004830152909116906369d84428906024015f6040518083038186803b158015613b9e575f5ffd5b505afa925050508015613baf575060015b613c1857613bbc896120f2565b60018a0154604051630d3b088560e31b81526001600160a01b038b81166004830152909116906369d84428906024015f6040518083038186803b158015613c01575f5ffd5b505afa158015613c13573d5f5f3e3d5ffd5b505050505b50505050505050505050565b805f5b81811015613ffc575f848483818110613c4257613c4261591e565b9050602002810190613c549190615cd6565b613c62906020810190615002565b90506001600160a01b038116613c785750613c27565b5f858584818110613c8b57613c8b61591e565b9050602002810190613c9d9190615cd6565b613cab906020810190615cf4565b808060200260200160405190810160405280939291908181526020015f905b82821015613cf657613ce760608302860136819003810190615d38565b81526020019060010190613cca565b509394505f93505050505b8151811015613fee575f828281518110613d1d57613d1d61591e565b60200260200101515f01519050613d348482612f85565b5f838381518110613d4757613d4761591e565b6020026020010151602001519050808c5f015f876001600160a01b03166001600160a01b031681526020019081526020015f206010015f828254613d8b91906159f8565b90915550508015613fe45760068c0154604051634a3a249760e01b81526001600160a01b0390911690634a3a249790613dcc90889086908690600401615afb565b60408051808303815f875af1925050508015613e05575060408051601f3d908101601f19168201909252613e0291810190615b1f565b60015b613ee7576001600160a01b038086165f908152600b8e016020908152604080832093861683529290529081208054839290613e419084906159f8565b925050819055508b6007015f9054906101000a90046001600160a01b03166001600160a01b0316630ea9672b8c8c88865f878b8b81518110613e8557613e8561591e565b6020026020010151604001515f6040518963ffffffff1660e01b8152600401613eb5989796959493929190615d94565b5f604051808303815f87803b158015613ecc575f5ffd5b505af1158015613ede573d5f5f3e3d5ffd5b50505050613fe4565b80613f4757828e600b015f896001600160a01b03166001600160a01b031681526020019081526020015f205f866001600160a01b03166001600160a01b031681526020019081526020015f205f828254613f4191906159f8565b90915550505b8d6007015f9054906101000a90046001600160a01b03166001600160a01b0316630ea9672b8e8e8a8887898d8d81518110613f8457613f8461591e565b602002602001015160400151896040518963ffffffff1660e01b8152600401613fb4989796959493929190615d94565b5f604051808303815f87803b158015613fcb575f5ffd5b505af1158015613fdd573d5f5f3e3d5ffd5b5050505050505b5050600101613d01565b508260010192505050613c27565b50505050505050565b80825d5050565b5f6140156120ce565b600701546001600160a01b031690505f61402d6120ce565b6001600160a01b038681165f818152602093909352604080842090516370a0823160e01b815260048101929092529350908616906370a0823190602401602060405180830381865afa158015614085573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140a99190615ae4565b9050808411156140cc57604051631e9acf1760e31b815260040160405180910390fd5b6008820154805f5b8281101561412657876001600160a01b0316856008015f0182815481106140fd576140fd61591e565b5f918252602090912001546001600160a01b03160361411e57809150614126565b6001016140d4565b50818103614138575050505050505050565b828460080160010182815481106141515761415161591e565b905f5260205f2001548761416591906159f8565b11156141cf576141758684615dec565b6009850180548390811061418b5761418b61591e565b5f918252602090912001556001600160a01b03851663740242f289896141b18a88615dec565b6040518463ffffffff1660e01b815260040161266c93929190615afb565b5050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661146057604051631afcd79f60e31b815260040160405180910390fd5b6114606141d9565b6142326141d9565b5f516020615f405f395f51905f52805460ff19169055565b80515f5b8181101561168f5761428583828151811061426b5761426b61591e565b602002602001015185600a0161435890919063ffffffff16565b6142cc5782818151811061429b5761429b61591e565b6020026020010151604051635414a25b60e01b8152600401612e2591906001600160a01b0391909116815260200190565b60010161424e565b5f516020615f405f395f51905f525460ff1661146057604051638dfc202b60e01b815260040160405180910390fd5b61430c82614804565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561435057610c8f8282614867565b61128b6148d9565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016143935763f5a267f15f526004601cfd5b826143a55768fbb67fda52d4bfb8bf92505b80546001600160601b0381166143e85760019250838160601c03156143f957600182015460601c84146143f957600282015460601c84146143f9575f92506143f9565b81602052835f5260405f2054151592505b505092915050565b5f8061440d8385615dff565b90505f61441d6201518083615e32565b90505f61442b8260016159f8565b6144389062015180615e5e565b90506144448582615e75565b9695505050505050565b5f8061445a8385615dff565b90505f8061447361446e6201518085615e94565b6148f8565b509092509050614484600182615ea7565b9050600c8160ff1611156144a25750600161449f8183615ec0565b91505b5f6144af83836001614a66565b6144bc9062015180615e5e565b9050611eda8682615e75565b600c810154158015906144de575080600c015442115b1561083a57600b8101805460ff191690555f600c90910155565b61450182614b9c565b815460028301546145139083906159f8565b1115614532576040516398ba620f60e01b815260040160405180910390fd5b816001015481836003015461454791906159f8565b11156145665760405163e44dfa8d60e01b815260040160405180910390fd5b80826002015f82825461457991906159f8565b9250508190555080826003015f82825461459391906159f8565b90915550505050565b5f826001600160401b038111156145b5576145b561501b565b6040519080825280602002602001820160405280156145de578160200160208202803683370190505b5090505f836001600160401b038111156145fa576145fa61501b565b60405190808252806020026020018201604052801561462d57816020015b60608152602001906001900390816146185790505b5090505f846001600160401b038111156146495761464961501b565b604051908082528060200260200182016040528015614672578160200160208202803683370190505b5090505f61467f88611913565b90505f5b8681101561479b5787878281811061469d5761469d61591e565b90506020020160208101906146b29190615002565b8582815181106146c4576146c461591e565b60200260200101906001600160a01b031690816001600160a01b03168152505063a9059cbb60e01b828783815181106146ff576146ff61591e565b60209081029190910101516040516001600160a01b0390921660248301526044820152606401604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505084828151811061476a5761476a61591e565b60200260200101819052505f8382815181106147885761478861591e565b6020908102919091010152600101614683565b50604051632f378c5f60e21b81526001600160a01b038a169063bcde317c906147cc90879086908890600401615932565b5f604051808303815f87803b1580156147e3575f5ffd5b505af11580156147f5573d5f5f3e3d5ffd5b50505050505050505050505050565b806001600160a01b03163b5f0361483957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401612e25565b5f516020615f205f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516148839190615eda565b5f60405180830381855af49150503d805f81146148bb576040519150601f19603f3d011682016040523d82523d5f602084013e6148c0565b606091505b50915091506148d0858383614ceb565b95945050505050565b34156114605760405163b398979f60e01b815260040160405180910390fd5b5f8080838161490a8262010bd9615dff565b6149179062253d8c615dff565b90505f62023ab1614929836004615ef0565b6149339190615e32565b905060046149448262023ab1615ef0565b61494f906003615dff565b6149599190615e32565b6149639083615e75565b91505f62164b09614975846001615dff565b61498190610fa0615ef0565b61498b9190615e32565b9050600461499b826105b5615ef0565b6149a59190615e32565b6149af9084615e75565b6149ba90601f615dff565b92505f61098f6149cb856050615ef0565b6149d59190615e32565b90505f60506149e68361098f615ef0565b6149f09190615e32565b6149fa9086615e75565b9050614a07600b83615e32565b9450614a1485600c615ef0565b614a1f836002615dff565b614a299190615e75565b91508483614a38603187615e75565b614a43906064615ef0565b614a4d9190615dff565b614a579190615dff565b9a919950975095505050505050565b5f61ffff841660ff8085169084168362253d8c60046064600c614a8a600e88615e75565b614a949190615e32565b614aa088611324615dff565b614aaa9190615dff565b614ab49190615e32565b614abf906003615ef0565b614ac99190615e32565b600c80614ad7600e88615e75565b614ae19190615e32565b614aec90600c615ef0565b614af7600288615e75565b614b019190615e75565b614b0d9061016f615ef0565b614b179190615e32565b6004600c614b26600e89615e75565b614b309190615e32565b614b3c896112c0615dff565b614b469190615dff565b614b52906105b5615ef0565b614b5c9190615e32565b614b68617d4b87615e75565b614b729190615dff565b614b7c9190615dff565b614b869190615e75565b614b909190615e75565b98975050505050505050565b604080516101608101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a082015260068201546001600160401b0380821660c0840152600160401b8204811660e0840152600160801b82048116610100840152600160c01b9091041661012082015260078201546101408201525f90614c3690614d47565b805183556020810151600184015560408101516002840155606081015160038401556080810151600484015560a0810151600584015560c08101516006909301805460e0830151610100840151610120909401516001600160401b03908116600160c01b026001600160c01b03958216600160801b02959095166fffffffffffffffffffffffffffffffff928216600160401b026001600160801b031990941691909716179190911716939093171790915550565b606082614d0057614cfb82614e5a565b6122d8565b8151158015614d1757506001600160a01b0384163b155b15614d4057604051639996b31560e01b81526001600160a01b0385166004820152602401612e25565b50806122d8565b614d4f614f65565b6101008201516001600160401b031615801590614d7957508161010001516001600160401b031642115b15614d925760808201805183525f908190526101008301525b6101208201516001600160401b031615801590614dbc57508161012001516001600160401b031642115b15614dd85760a08201805160208401525f908190526101208301525b8160c001516001600160401b0316421115614e17575f604083015260c0820151610140830151614e089190614e83565b6001600160401b031660c08301525b8160e001516001600160401b0316421115614e56575f606083015260e0820151610140830151614e479190614eb1565b6001600160401b031660e08301525b5090565b805115614e6a5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5b614e986001600160401b03841683614401565b9250826001600160401b03164211614e85575090919050565b5f5b614ec66001600160401b0384168361444e565b9250826001600160401b03164211614eb3575090919050565b6040518060a00160405280614ef2614f65565b8152602001614f32604051806080016040528060608152602001606081526020015f6001600160a01b031681526020015f6001600160601b031681525090565b81526020015f81526020015f81526020015f81525090565b5080545f8255905f5260205f209081019061083a9190614fd8565b6040518061016001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f6001600160401b031681526020015f81525090565b5b80821115614e56575f8155600101614fd9565b80356001600160a01b0381168114611988575f5ffd5b5f60208284031215615012575f5ffd5b6122d882614fec565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156150515761505161501b565b60405290565b604051601f8201601f191681016001600160401b038111828210171561507f5761507f61501b565b604052919050565b5f6001600160401b0382111561509f5761509f61501b565b5060051b60200190565b5f5f5f606084860312156150bb575f5ffd5b6150c484614fec565b92506150d260208501614fec565b915060408401356001600160401b038111156150ec575f5ffd5b8401601f810186136150fc575f5ffd5b803561510f61510a82615087565b615057565b80828252602082019150602060608402850101925088831115615130575f5ffd5b6020840193505b82841015615188576060848a03121561514e575f5ffd5b61515661502f565b61515f85614fec565b815260208581013581830152604080870135908301529083526060909401939190910190615137565b809450505050509250925092565b5f5f5f606084860312156151a8575f5ffd5b6151b184614fec565b92506151bf60208501614fec565b929592945050506040919091013590565b5f5f604083850312156151e1575f5ffd5b6151ea83614fec565b91506151f860208401614fec565b90509250929050565b5f5f5f5f5f5f5f60e0888a031215615217575f5ffd5b61522088614fec565b965061522e60208901614fec565b955061523c60408901614fec565b945061524a60608901614fec565b935061525860808901614fec565b925061526660a08901614fec565b915061527460c08901614fec565b905092959891949750929550565b5f8151808452602084019350602083015f5b828110156152b2578151865260209586019590910190600101615294565b5093949350505050565b8051608080845281519084018190525f9160200190829060a08601905b808310156153045783516001600160a01b0316825260209384019360019390930192909101906152d9565b5060208501519250858103602087015261531e8184615282565b92505050604083015161533c60408601826001600160a01b03169052565b50606083015161535760608601826001600160601b03169052565b509392505050565b634e487b7160e01b5f52602160045260245ffd5b6002811061083a5761083a61535f565b61538c81615373565b9052565b602081525f825180516020840152602081015160408401526040810151606084015260608101516080840152608081015160a084015260a081015160c084015260c08101516153ea60e08501826001600160401b03169052565b5060e08101516001600160401b038116610100850152506101008101516001600160401b038116610120850152506101208101516001600160401b03811661014085015250610140015161016083015260208301516101e06101808401526154566102008401826152bc565b9050604084015161546b6101a0850182615383565b5060608401516101c08401526080909301516101e0909201919091525090565b5f5f6040838503121561549c575f5ffd5b6154a583614fec565b915060208301356001600160401b038111156154bf575f5ffd5b8301601f810185136154cf575f5ffd5b80356154dd61510a82615087565b8082825260208201915060208360051b8501019250878311156154fe575f5ffd5b6020840193505b828410156155275761551684614fec565b825260209384019390910190615505565b809450505050509250929050565b604080825283519082018190525f9060208501906060840190835b8181101561558357835180516001600160a01b031684526020908101518185015290930192604090920191600101615550565b5050602093909301939093525092915050565b5f5f604083850312156155a7575f5ffd5b6155b083614fec565b915060208301356001600160401b038111156155ca575f5ffd5b8301601f810185136155da575f5ffd5b80356001600160401b038111156155f3576155f361501b565b615606601f8201601f1916602001615057565b81815286602083850101111561561a575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f8151808452602084019350602083015f5b828110156152b25781516001600160a01b031686526020958601959091019060010161564b565b602081525f6122d86020830184615639565b5f5f83601f840112615694575f5ffd5b5081356001600160401b038111156156aa575f5ffd5b6020830191508360208260051b85010111156156c4575f5ffd5b9250929050565b5f5f5f5f604085870312156156de575f5ffd5b84356001600160401b038111156156f3575f5ffd5b6156ff87828801615684565b90955093505060208501356001600160401b0381111561571d575f5ffd5b61572987828801615684565b95989497509550505050565b60208101600583106157495761574961535f565b91905290565b5f5f60208385031215615760575f5ffd5b82356001600160401b03811115615775575f5ffd5b8301601f81018513615785575f5ffd5b80356001600160401b0381111561579a575f5ffd5b8560208284010111156157ab575f5ffd5b6020919091019590945092505050565b803560028110611988575f5ffd5b5f602082840312156157d9575f5ffd5b6122d8826157bb565b5f5f5f5f5f5f5f5f5f60c08a8c0312156157fa575f5ffd5b6158038a614fec565b985060208a0135975061581860408b016157bb565b965060608a01356001600160401b03811115615832575f5ffd5b61583e8c828d01615684565b90975095505060808a01356001600160401b0381111561585c575f5ffd5b6158688c828d01615684565b90955093505060a08a01356001600160401b03811115615886575f5ffd5b6158928c828d01615684565b915080935050809150509295985092959850929598565b6020810161574983615373565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6122d860208301846158b6565b5f5f60408385031215615907575f5ffd5b61591083614fec565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b606081525f6159446060830186615639565b82810360208401526159568186615282565b9050828103604084015280845180835260208301915060208160051b840101602087015f5b838110156159ad57601f198684030185526159978383516158b6565b602095860195909350919091019060010161597b565b50909998505050505050505050565b80518015158114611988575f5ffd5b5f602082840312156159db575f5ffd5b6122d8826159bc565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ce557610ce56159e4565b5f5f5f60608486031215615a1d575f5ffd5b505081359360208301359350604090920135919050565b6001600160a01b03851681526080602080830182905285549183018290525f868152908120909160a0840190835b81811015615a895783546001600160a01b0316835260019384019360209093019201615a62565b5050838103604085015285548082525f87815260208082209301935090815b81811015615ac6578354855260209094019360019384019301615aa8565b5050506001600160a01b038516606085015250905095945050505050565b5f60208284031215615af4575f5ffd5b5051919050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f5f60408385031215615b30575f5ffd5b825191506151f8602084016159bc565b60608101615b4d85615373565b9381526001600160a01b0392909216602083015260409091015290565b6001600160a01b038916815260208101889052615b8687615373565b86604082015261010060608201525f615ba3610100830188615639565b8281036080840152615bb58188615282565b905082810360a0840152615bc98187615282565b9150508360c0830152615bdb83615373565b8260e08301529998505050505050505050565b8183525f6001600160fb1b03831115615c05575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b038b168152602081018a90525f6101008201615c408b615373565b604083018b905261010060608401528890528861012083015f5b8a811015615c88576001600160a01b03615c7384614fec565b16825260209283019290910190600101615c5a565b508381036080850152615c9b818a615282565b91505082810360a0840152615cb1818789615bee565b9150508360c0830152615cc760e0830184615383565b9b9a5050505050505050505050565b5f8235603e19833603018112615cea575f5ffd5b9190910192915050565b5f5f8335601e19843603018112615d09575f5ffd5b8301803591506001600160401b03821115615d22575f5ffd5b60200191506060810236038213156156c4575f5ffd5b5f6060828403128015615d49575f5ffd5b50615d5261502f565b615d5b83614fec565b815260208381013590820152604083013560048110615d78575f5ffd5b60408201529392505050565b6004811061538c5761538c61535f565b6001600160a01b038981168252602082018990528781166040830152861660608201526080810185905260a081018490526101008101615dd760c0830185615d84565b82151560e08301529998505050505050505050565b81810381811115610ce557610ce56159e4565b8082018281125f8312801582168215821617156143f9576143f96159e4565b634e487b7160e01b5f52601260045260245ffd5b5f82615e4057615e40615e1e565b600160ff1b82145f1984141615615e5957615e596159e4565b500590565b8082028115828204841417610ce557610ce56159e4565b8181035f831280158383131683831282161715611ee057611ee06159e4565b5f82615ea257615ea2615e1e565b500490565b60ff8181168382160190811115610ce557610ce56159e4565b61ffff8181168382160190811115610ce557610ce56159e4565b5f82518060208501845e5f920191825250919050565b8082025f8212600160ff1b84141615615f0b57615f0b6159e4565b8181058314821517610ce557610ce56159e456fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081c000a0000000000000000000000004a9c44c97bbf6079db37c4769aebe425bbcdd09a