0 txs
0 calls
constructor
constructor()
functions
DATA_PROVIDER_ADMIN_ROLE
viewfunction DATA_PROVIDER_ADMIN_ROLE() view returns (bytes32)
getCashLens
viewfunction getCashLens() view returns (address)
getCashModule
viewfunction getCashModule() view returns (address)
getDefaultModules
viewfunction getDefaultModules() view returns (address[])
getEtherFiRecoverySigner
viewfunction getEtherFiRecoverySigner() view returns (address)
getEtherFiSafeFactory
viewfunction getEtherFiSafeFactory() view returns (address)
getHookAddress
viewfunction getHookAddress() view returns (address)
getPriceProvider
viewfunction getPriceProvider() view returns (address)
getRecoveryDelayPeriod
viewfunction getRecoveryDelayPeriod() view returns (uint256)
getRefundWallet
viewfunction getRefundWallet() view returns (address)
getThirdPartyRecoverySigner
viewfunction getThirdPartyRecoverySigner() view returns (address)
getWhitelistedModules
viewfunction getWhitelistedModules() view returns (address[])
isDefaultModule
viewfunction isDefaultModule(address module) view returns (bool)
isEtherFiSafe
viewfunction isEtherFiSafe(address account) view returns (bool)
isWhitelistedModule
viewfunction isWhitelistedModule(address module) view returns (bool)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
roleRegistry
viewfunction roleRegistry() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
configureDefaultModules
nonpayablefunction configureDefaultModules(address[] modules, bool[] shouldWhitelist)
configureModules
nonpayablefunction configureModules(address[] modules, bool[] shouldWhitelist)
initialize
nonpayablefunction initialize(tuple initParams)
pause
nonpayablefunction pause()
setCashLens
nonpayablefunction setCashLens(address cashLens)
setCashModule
nonpayablefunction setCashModule(address cashModule)
setEtherFiRecoverySigner
nonpayablefunction setEtherFiRecoverySigner(address signer)
setEtherFiSafeFactory
nonpayablefunction setEtherFiSafeFactory(address factory)
setHookAddress
nonpayablefunction setHookAddress(address hook)
setPriceProvider
nonpayablefunction setPriceProvider(address _priceProvider)
setRecoveryDelayPeriod
nonpayablefunction setRecoveryDelayPeriod(uint256 period)
setRefundWallet
nonpayablefunction setRefundWallet(address wallet)
setThirdPartyRecoverySigner
nonpayablefunction setThirdPartyRecoverySigner(address signer)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
CashLensConfigured
event CashLensConfigured(address oldCashLens, address newCashLens)
CashModuleConfigured
event CashModuleConfigured(address oldCashModule, address newCashModule)
DefaultModulesConfigured
event DefaultModulesConfigured(address[] modules, bool[] shouldWhitelist)
DefaultModulesSetup
event DefaultModulesSetup(address[] modules)
EtherFiRecoverySignerConfigured
event EtherFiRecoverySignerConfigured(address oldSigner, address newSigner)
EtherFiSafeFactoryConfigured
event EtherFiSafeFactoryConfigured(address oldFactory, address newFactory)
HookAddressUpdated
event HookAddressUpdated(address oldHookAddress, address newHookAddress)
Initialized
event Initialized(uint64 version)
ModulesConfigured
event ModulesConfigured(address[] modules, bool[] shouldWhitelist)
ModulesSetup
event ModulesSetup(address[] modules)
Paused
event Paused(address account)
PriceProviderUpdated
event PriceProviderUpdated(address oldPriceProvider, address newPriceProvider)
RecoveryDelayPeriodUpdated
event RecoveryDelayPeriodUpdated(uint256 oldPeriod, uint256 newPeriod)
RefundWalletAddressUpdated
event RefundWalletAddressUpdated(address oldWallet, address newWallet)
ThirdPartyRecoverySignerConfigured
event ThirdPartyRecoverySignerConfigured(address oldSigner, address newSigner)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ArrayLengthMismatch
error ArrayLengthMismatch()
DuplicateElementFound
error DuplicateElementFound()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidCashLens
error InvalidCashLens()
InvalidCashModule
error InvalidCashModule()
InvalidInitialization
error InvalidInitialization()
InvalidInput
error InvalidInput()
InvalidModule
error InvalidModule(uint256 index)
ModulesAlreadySetup
error ModulesAlreadySetup()
NotInitializing
error NotInitializing()
OnlyAdmin
error OnlyAdmin()
OnlyRoleRegistryOwner
error OnlyRoleRegistryOwner()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516129dc6100f95f395f818161138e015281816113b7015261156801526129dc5ff3fe6080604052600436106101f1575f3560e01c80638456cb5911610108578063ad3cb1cc1161009d578063c40bf77d1161006d578063c40bf77d1461057e578063cfe3404c14610592578063d42de6a2146105a6578063ed854dbe146105ba578063fa11f041146105ce575f5ffd5b8063ad3cb1cc146104ef578063b259fabb1461052c578063b7ca418b14610540578063b8659cb81461055f575f5ffd5b806396bf4064116100d857806396bf4064146104715780639eb032ae14610490578063a00e3e54146104af578063a8ebe3a8146104d0575f5ffd5b80638456cb591461040b5780638801115b1461041f578063882d16981461043e5780638fe76cd014610452575f5ffd5b8063372aa224116101895780634f1ef286116101595780634f1ef2861461038357806352d1902d1461039657806354ddbe26146103aa5780635c975abb146103c9578063841945a8146103ec575f5ffd5b8063372aa224146103125780633f4ba83a1461033157806345863322146103455780634cecf98114610364575f5ffd5b80631079e385116101c45780631079e3851461028a5780631c39124c146102a95780632a82afe2146102ea5780632ad20ae8146102fe575f5ffd5b806303f05517146101f55780630409cdd51461021657806308c732591461024a5780630a065fb614610276575b5f5ffd5b348015610200575f5ffd5b5061021461020f36600461257a565b6105e2565b005b348015610221575f5ffd5b5061023561023036600461257a565b6105f6565b60405190151581526020015b60405180910390f35b348015610255575f5ffd5b5061025e610612565b6040516001600160a01b039091168152602001610241565b348015610281575f5ffd5b5061025e610640565b348015610295575f5ffd5b506102146102a436600461257a565b61065b565b3480156102b4575f5ffd5b506102dc7f9db17f45d8f63e8c643a67e0b56f429774951f634bf00367e4b161c0797699d481565b604051908152602001610241565b3480156102f5575f5ffd5b5061025e61066c565b348015610309575f5ffd5b5061025e610687565b34801561031d575f5ffd5b5061021461032c36600461257a565b6106a2565b34801561033c575f5ffd5b506102146106b3565b348015610350575f5ffd5b5061021461035f36600461257a565b61071a565b34801561036f575f5ffd5b5061021461037e3660046125db565b61072b565b61021461039136600461265b565b610745565b3480156103a1575f5ffd5b506102dc610764565b3480156103b5575f5ffd5b506102146103c43660046125db565b61077f565b3480156103d4575f5ffd5b505f5160206129b05f395f51905f525460ff16610235565b3480156103f7575f5ffd5b5061021461040636600461257a565b610793565b348015610416575f5ffd5b506102146107a4565b34801561042a575f5ffd5b5061021461043936600461271f565b610809565b348015610449575f5ffd5b5061025e610a82565b34801561045d575f5ffd5b5061021461046c366004612757565b610a9d565b34801561047c575f5ffd5b5061023561048b36600461257a565b610b15565b34801561049b575f5ffd5b506102146104aa36600461257a565b610b28565b3480156104ba575f5ffd5b506104c3610b39565b604051610241919061276e565b3480156104db575f5ffd5b506102146104ea36600461257a565b610b50565b3480156104fa575f5ffd5b5061051f604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161024191906127b9565b348015610537575f5ffd5b5061025e610b61565b34801561054b575f5ffd5b5061023561055a36600461257a565b610b7c565b34801561056a575f5ffd5b5061021461057936600461257a565b610bf5565b348015610589575f5ffd5b5061025e610c06565b34801561059d575f5ffd5b5061025e610c21565b3480156105b1575f5ffd5b506102dc610c3c565b3480156105c5575f5ffd5b506104c3610c4e565b3480156105d9575f5ffd5b5061025e610c63565b6105ea610c7e565b6105f381610d31565b50565b5f61060c82610603610dcf565b60090190610df3565b92915050565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f500546001600160a01b031690565b5f610649610dcf565b600501546001600160a01b0316919050565b610663610c7e565b6105f381610e9c565b5f610675610dcf565b600a01546001600160a01b0316919050565b5f610690610dcf565b600401546001600160a01b0316919050565b6106aa610c7e565b6105f381610f3a565b6106bb610612565b6040516317bf301f60e21b81523360048201526001600160a01b039190911690635efcc07c906024015f6040518083038186803b1580156106fa575f5ffd5b505afa15801561070c573d5f5f3e3d5ffd5b50505050610718610fd7565b565b610722610c7e565b6105f381611036565b610733610c7e565b61073f848484846110d3565b50505050565b61074d611383565b61075682611427565b610760828261149c565b5050565b5f61076d61155d565b505f5160206129905f395f51905f5290565b610787610c7e565b61073f848484846115a6565b61079b610c7e565b6105f381611819565b6107ac610612565b604051632fd0067b60e21b81523360048201526001600160a01b03919091169063bf4019ec906024015f6040518083038186803b1580156107eb575f5ffd5b505afa1580156107fd573d5f5f3e3d5ffd5b505050506107186118b7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f8115801561084e5750825b90505f8267ffffffffffffffff16600114801561086a5750303b155b905081158015610878575080155b156108965760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156108c057845460ff60401b1916600160401b1785555b6108d56108d0602088018861257a565b6118ff565b6108ea6108e560608801886127ee565b611951565b6108ff6108fa60808801886127ee565b611aa3565b61091761091260e0880160c0890161257a565b611c1a565b61093061092b610100880160e0890161257a565b610f3a565b61094a6109456101208801610100890161257a565b610d31565b61096461095f6101408801610120890161257a565b611cb8565b61097e6109796101608801610140890161257a565b611d56565b6203f48061098a610dcf565b600801555f61099f60c0880160a0890161257a565b6001600160a01b0316146109c5576109c56109c060c0880160a0890161257a565b611036565b5f6109d6604088016020890161257a565b6001600160a01b0316146109fc576109fc6109f7604088016020890161257a565b611819565b5f610a0d606088016040890161257a565b6001600160a01b031614610a3357610a33610a2e606088016040890161257a565b610e9c565b8315610a7a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b505050505050565b5f610a8b610dcf565b600101546001600160a01b0316919050565b610aa5610c7e565b805f03610ac55760405163b4fa3fb360e01b815260040160405180910390fd5b5f610ace610dcf565b600881015460408051918252602082018590529192507fec77ea7826bbbe2fcea589cf083c5500ee41f29f106f3d618965e1b6b65da7f2910160405180910390a160080155565b5f61060c82610b22610dcf565b90610df3565b610b30610c7e565b6105f381611c1a565b6060610b4b610b46610dcf565b611df4565b905090565b610b58610c7e565b6105f381611d56565b5f610b6a610dcf565b600601546001600160a01b0316919050565b5f610b85610dcf565b60049081015460405163b7ca418b60e01b81526001600160a01b038581169382019390935291169063b7ca418b90602401602060405180830381865afa158015610bd1573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060c9190612841565b610bfd610c7e565b6105f381611cb8565b5f610c0f610dcf565b600201546001600160a01b0316919050565b5f610c2a610dcf565b600701546001600160a01b0316919050565b5f610c45610dcf565b60080154905090565b6060610b4b610c5b610dcf565b600901611df4565b5f610c6c610dcf565b600301546001600160a01b0316919050565b610c86610612565b604051632474521560e21b81527f9db17f45d8f63e8c643a67e0b56f429774951f634bf00367e4b161c0797699d460048201523360248201526001600160a01b0391909116906391d1485490604401602060405180830381865afa158015610cf0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d149190612841565b61071857604051634755657960e01b815260040160405180910390fd5b5f610d3a610dcf565b90506001600160a01b038216610d635760405163b4fa3fb360e01b815260040160405180910390fd5b60068101546040517f54f385fe437041a4079048d02b562ee4ab7335b5135e66b1784924c92d039fe791610da4916001600160a01b0390911690859061285c565b60405180910390a160060180546001600160a01b0319166001600160a01b0392909216919091179055565b7fb3086c0036ec0314dd613f04f2c0b41c0567e73b5b69f0a0d6acdbce48020e0090565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be198301610e2e5763f5a267f15f526004601cfd5b82610e405768fbb67fda52d4bfb8bf92505b80546001600160601b038116610e835760019250838160601c0315610e9457600182015460601c8414610e9457600282015460601c8414610e94575f9250610e94565b81602052835f5260405f2054151592505b505092915050565b5f610ea5610dcf565b90506001600160a01b038216610ece5760405163174ed43f60e01b815260040160405180910390fd5b60028101546040517f163381e4e650859a672703d6e16c44c3070a13d753712bda05769b713542ce7791610f0f916001600160a01b0390911690859061285c565b60405180910390a160020180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116610f615760405163b4fa3fb360e01b815260040160405180910390fd5b5f610f6a610dcf565b60058101546040519192507ff01c4ba47ffa16ddc86be088e27d891895d6944b4f1b88a7d30fedb0296de55c91610fac916001600160a01b031690859061285c565b60405180910390a160050180546001600160a01b0319166001600160a01b0392909216919091179055565b610fdf611ec8565b5f5160206129b05f395f51905f52805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b03811661105d5760405163b4fa3fb360e01b815260040160405180910390fd5b5f611066610dcf565b60038101546040519192507fd8e16b0405d2475f5f1929d7180cbc126b0c7447afdff6237714f6b1ad3f6fd8916110a8916001600160a01b031690859061285c565b60405180910390a160030180546001600160a01b0319166001600160a01b0392909216919091179055565b5f6110dc610dcf565b9050835f8190036111005760405163b4fa3fb360e01b815260040160405180910390fd5b8083146111205760405163512509d360e11b815260040160405180910390fd5b6001811115611164576111648686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611ef792505050565b5f5b8181101561134d575f87878381811061118157611181612876565b9050602002016020810190611196919061257a565b6001600160a01b0316036111c5576040516303414b0160e01b8152600481018290526024015b60405180910390fd5b8484828181106111d7576111d7612876565b90506020020160208101906111ec919061288a565b8015611226575061122487878381811061120857611208612876565b905060200201602081019061121d919061257a565b8490610df3565b155b1561125e5761125c87878381811061124057611240612876565b9050602002016020810190611255919061257a565b8490612007565b505b84848281811061127057611270612876565b9050602002016020810190611285919061288a565b6113455761129e87878381811061120857611208612876565b156112d6576112d48787838181106112b8576112b8612876565b90506020020160208101906112cd919061257a565b8490612163565b505b61130a8787838181106112eb576112eb612876565b9050602002016020810190611300919061257a565b6009850190610df3565b156113455761134387878381811061132457611324612876565b9050602002016020810190611339919061257a565b6009850190612163565b505b600101611166565b507feb11e8ccbe97d4a65bf30443d702bdaa76e75ddfc0fe83d3e29e1b52385fd62d86868686604051610a7194939291906128eb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061140957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113fd5f5160206129905f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156107185760405163703e46dd60e11b815260040160405180910390fd5b5f7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f5008054604051634766d28760e01b81523360048201529192506001600160a01b031690634766d287906024015f6040518083038186803b15801561148a575f5ffd5b505afa158015610a7a573d5f5f3e3d5ffd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114f6575060408051601f3d908101601f191682019092526114f391810190612947565b60015b61151e57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111bc565b5f5160206129905f395f51905f52811461154e57604051632a87526960e21b8152600481018290526024016111bc565b611558838361229c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107185760405163703e46dd60e11b815260040160405180910390fd5b5f6115af610dcf565b9050835f8190036115d35760405163b4fa3fb360e01b815260040160405180910390fd5b8083146115f35760405163512509d360e11b815260040160405180910390fd5b6001811115611637576116378686808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611ef792505050565b5f5b818110156117a6575f87878381811061165457611654612876565b9050602002016020810190611669919061257a565b6001600160a01b031603611693576040516303414b0160e01b8152600481018290526024016111bc565b8484828181106116a5576116a5612876565b90506020020160208101906116ba919061288a565b1561173e576116d487878381811061120857611208612876565b6116ef576116ed87878381811061124057611240612876565b505b6117048787838181106112eb576112eb612876565b61173e5761173c87878381811061171d5761171d612876565b9050602002016020810190611732919061257a565b6009850190612007565b505b84848281811061175057611750612876565b9050602002016020810190611765919061288a565b15801561178257506117828787838181106112eb576112eb612876565b1561179e5761179c87878381811061132457611324612876565b505b600101611639565b507feb11e8ccbe97d4a65bf30443d702bdaa76e75ddfc0fe83d3e29e1b52385fd62d868686866040516117dc94939291906128eb565b60405180910390a17f26ce9c37c4e70901b5ca66dae49ab0b7f86ab9daaa28c971fef6d0d43d0e6e3386868686604051610a7194939291906128eb565b5f611822610dcf565b90506001600160a01b03821661184b57604051634884e07b60e11b815260040160405180910390fd5b60018101546040517f2fc555f6dcc93d677afd3ae4c6ace67b36e79a9acac486efb3730c4eae9f56469161188c916001600160a01b0390911690859061285c565b60405180910390a160010180546001600160a01b0319166001600160a01b0392909216919091179055565b6118bf6122f1565b5f5160206129b05f395f51905f52805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611018565b611907612321565b7fa5586bb7fe6c4d1a576fc53fefe6d5915940638d338769f6905020734977f50080546001600160a01b0319166001600160a01b03831617815561194961236a565b610760612372565b5f61195a610dcf565b905061196581612392565b1561198357604051630a53212d60e31b815260040160405180910390fd5b815f8190036119a55760405163b4fa3fb360e01b815260040160405180910390fd5b60018111156119e9576119e98484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611ef792505050565b5f5b81811015611a63575f858583818110611a0657611a06612876565b9050602002016020810190611a1b919061257a565b6001600160a01b031603611a45576040516303414b0160e01b8152600481018290526024016111bc565b611a5a85858381811061124057611240612876565b506001016119eb565b507fb5a63fa5098067ef2c54c579cc497500049a4c323feb49f9d704baf2040dbb0b8484604051611a9592919061295e565b60405180910390a150505050565b5f611aac610dcf565b9050611aba81600901612392565b15611ad857604051630a53212d60e31b815260040160405180910390fd5b815f819003611afa5760405163b4fa3fb360e01b815260040160405180910390fd5b6001811115611b3e57611b3e8484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250611ef792505050565b5f5b81811015611be8575f858583818110611b5b57611b5b612876565b9050602002016020810190611b70919061257a565b6001600160a01b031603611b9a576040516303414b0160e01b8152600481018290526024016111bc565b611baf85858381811061171d5761171d612876565b50611bc585858381811061120857611208612876565b611be057611bde85858381811061124057611240612876565b505b600101611b40565b507f80a75ad244ef7b446a2f9d894c1855a5109fea3d006d8cc90b43e8eceaf591438484604051611a9592919061295e565b5f611c23610dcf565b90506001600160a01b038216611c4c5760405163b4fa3fb360e01b815260040160405180910390fd5b60048101546040517f943ac019f4acd9ffd0851dc9ea4a290d55c2ddafc33fd89308c69ae8cb29f0be91611c8d916001600160a01b0390911690859061285c565b60405180910390a160040180546001600160a01b0319166001600160a01b0392909216919091179055565b5f611cc1610dcf565b90506001600160a01b038216611cea5760405163b4fa3fb360e01b815260040160405180910390fd5b60078101546040517f4149f16abf00d3cd9a243283e3c4ee3641af6c66b98783578f86a908ec08147a91611d2b916001600160a01b0390911690859061285c565b60405180910390a160070180546001600160a01b0319166001600160a01b0392909216919091179055565b5f611d5f610dcf565b90506001600160a01b038216611d885760405163b4fa3fb360e01b815260040160405180910390fd5b600a8101546040517f712fc2cd04ae61e22203fb5672f0fcc03fd74e13265341f749bff18895b6417491611dc9916001600160a01b0390911690859061285c565b60405180910390a1600a0180546001600160a01b0319166001600160a01b0392909216919091179055565b63978aab926004525f818152602481206060915068fbb67fda52d4bfb8bf81548060a01b60a01c6040519450846020018260601c9250838314158302815281611e82578215611e7d57600191508185015460601c92508215611e7d578284141590920260208301525060028381015460601c918215611e7d576003915083831415830260408201525b611eb2565b600191821c915b82811015611eb0578581015460601c858114158102600583901b8401529350600101611e89565b505b8186528160051b81016040525050505050919050565b5f5160206129b05f395f51905f525460ff1661071857604051638dfc202b60e01b815260040160405180910390fd5b805160018111611f05575050565b5f8167ffffffffffffffff811115611f1f57611f1f612647565b604051908082528060200260200182016040528015611f48578160200160208202803683370190505b5090505f5b8281101561073f575f848281518110611f6857611f68612876565b602002602001015190505f5f90505b82811015611fd257838181518110611f9157611f91612876565b60200260200101516001600160a01b0316826001600160a01b031603611fca57604051630e3e200f60e41b815260040160405180910390fd5b600101611f77565b5080838381518110611fe657611fe6612876565b6001600160a01b039092166020928302919091019091015250600101611f4d565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be1983016120425763f5a267f15f526004601cfd5b826120545768fbb67fda52d4bfb8bf92505b80546001600160601b0381168260205280612116578160601c80612082578560601b8455600194505061215a565b85810361208f575061215a565b600184015460601c806120b0578660601b600186015560019550505061215a565b8681036120be57505061215a565b600285015460601c806120e0578760601b60028701556001965050505061215a565b8781036120ef5750505061215a565b5f928352604080842060019055918352818320600290558252902060039055506007908117905b845f5260405f20805461215857600191821c808301825591945081612144578560601b60031784555061215a565b8560601b828501558260020184555061215a565b505b50505092915050565b63978aab926004525f828152602481206001600160a01b03929092169168fbb67fda52d4bfb8be19830161219e5763f5a267f15f526004601cfd5b826121b05768fbb67fda52d4bfb8bf92505b80546001600160601b0381168061222a5760019350848260601c036121e85760018301805484556002840180549091555f905561215a565b84600184015460601c036122095760028301805460018501555f905561215a565b84600284015460601c03612222575f600284015561215a565b5f935061215a565b82602052845f5260405f2080548061224357505061215a565b60018360011c039250826001820314612273578285015460601c8060601b60018303870155805f52508060405f20555b5083546bffffffffffffffffffffffff1916600192831b1782179093555f909255509392505050565b6122a5826123e3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156122e9576115588282612446565b6107606124b8565b5f5160206129b05f395f51905f525460ff16156107185760405163d93c066560e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661071857604051631afcd79f60e31b815260040160405180910390fd5b610718612321565b61237a612321565b5f5160206129b05f395f51905f52805460ff19169055565b63978aab926004525f8181526024812080548060a01b60a01c8060011c9350808260601c15176123db576001935083830154156123db576002935083830154156123db57600393505b505050919050565b806001600160a01b03163b5f0361241857604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111bc565b5f5160206129905f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516124629190612979565b5f60405180830381855af49150503d805f811461249a576040519150601f19603f3d011682016040523d82523d5f602084013e61249f565b606091505b50915091506124af8583836124d7565b95945050505050565b34156107185760405163b398979f60e01b815260040160405180910390fd5b6060826124ec576124e782612536565b61252f565b815115801561250357506001600160a01b0384163b155b1561252c57604051639996b31560e01b81526001600160a01b03851660048201526024016111bc565b50805b9392505050565b8051156125465780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b0381168114612575575f5ffd5b919050565b5f6020828403121561258a575f5ffd5b61252f8261255f565b5f5f83601f8401126125a3575f5ffd5b50813567ffffffffffffffff8111156125ba575f5ffd5b6020830191508360208260051b85010111156125d4575f5ffd5b9250929050565b5f5f5f5f604085870312156125ee575f5ffd5b843567ffffffffffffffff811115612604575f5ffd5b61261087828801612593565b909550935050602085013567ffffffffffffffff81111561262f575f5ffd5b61263b87828801612593565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561266c575f5ffd5b6126758361255f565b9150602083013567ffffffffffffffff811115612690575f5ffd5b8301601f810185136126a0575f5ffd5b803567ffffffffffffffff8111156126ba576126ba612647565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156126e9576126e9612647565b604052818152828201602001871015612700575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f6020828403121561272f575f5ffd5b813567ffffffffffffffff811115612745575f5ffd5b8201610160818503121561252f575f5ffd5b5f60208284031215612767575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156127ae5783516001600160a01b0316835260209384019390920191600101612787565b509095945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f8335601e19843603018112612803575f5ffd5b83018035915067ffffffffffffffff82111561281d575f5ffd5b6020019150600581901b36038213156125d4575f5ffd5b80151581146105f3575f5ffd5b5f60208284031215612851575f5ffd5b815161252f81612834565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561289a575f5ffd5b813561252f81612834565b8183526020830192505f815f5b848110156128e1576001600160a01b036128cb8361255f565b16865260209586019591909101906001016128b2565b5093949350505050565b604081525f6128fe6040830186886128a5565b8281036020808501919091528482528591015f5b8581101561293b57823561292581612834565b1515825260209283019290910190600101612912565b50979650505050505050565b5f60208284031215612957575f5ffd5b5051919050565b602081525f6129716020830184866128a5565b949350505050565b5f82518060208501845e5f92019182525091905056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a164736f6c634300081c000a