0 txs
0 calls
constructor
No constructor.
functions
ADMIN
viewfunction ADMIN() view returns (uint256)
AIDROP_MANAGER
viewfunction AIDROP_MANAGER() view returns (uint256)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
hasAllRoles
viewfunction hasAllRoles(address user, uint256 roles) view returns (bool)
hasAnyRole
viewfunction hasAnyRole(address user, uint256 roles) view returns (bool)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
rolesOf
viewfunction rolesOf(address user) view returns (uint256 roles)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
createDistributor
nonpayablefunction createDistributor(address _token, address _vault, address _signer, uint256 _fee, uint256 _deadline, bytes _signature) returns (address)
createVestedDistributor
nonpayablefunction createVestedDistributor(address _token, address _vault, address _signer, address _lock, uint256 _fee, uint256 _deadline, bytes _signature) returns (address)
grantRoles
payablefunction grantRoles(address user, uint256 roles) payable
initialize
nonpayablefunction initialize()
renounceOwnership
payablefunction renounceOwnership() payable
renounceRoles
payablefunction renounceRoles(uint256 roles) payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
revokeRoles
payablefunction revokeRoles(address user, uint256 roles) payable
setFee
nonpayablefunction setFee(address _distributor, uint256 _fee, uint256 _deadline, bytes _signature)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawFee
nonpayablefunction withdrawFee(address _distributor, address _recipient, uint256 _deadline, bytes _signature)
events
DistributorCreated
event DistributorCreated(address indexed _token, address indexed distributor, bytes signature)
Initialized
event Initialized(uint64 version)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
RolesUpdated
event RolesUpdated(address indexed user, uint256 indexed roles)
Upgraded
event Upgraded(address indexed implementation)
errors
AlreadyInitialized
error AlreadyInitialized()
DeadlineReached
error DeadlineReached()
InvalidInitialization
error InvalidInitialization()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoHandoverRequest
error NoHandoverRequest()
NotInitializing
error NotInitializing()
Unauthorized
error Unauthorized()
UnauthorizedCallContext
error UnauthorizedCallContext()
UpgradeFailed
error UpgradeFailed()
creation bytecode
0x610140806040523461005e57306080523060a0524660c0525f60e052610100905f82526101205f81526133a89283610063843960805183818161070401526107d3015260a05183505060c05183505060e0518350505182505051815050f35b5f80fdfe6080604081815260049182361015610015575f80fd5b5f9260e0905f35821c9283630762cf3f14610bdd57508263183a4f6e14610bc45782631c10893f14610b655782631cd64df414610b2c5782632569296214610ae357826329986d3914610ac85782632a0acc6a14610aad5782632de9480714610a7a57826338fa708d1461090b5782634a4ee7b1146108df5782634f1ef28614610797578263514e62fc1461075d57826352d1902d146106ef57826354d1f13d146106a9578263715018a6146106735782638129fc1c146105d157826384b0196e146105335782638da5cb5b14610505578263cfe0237714610402578263f04e283e14610395578263f2fde38b1461033b578263f5f9a8911461015857505063fee81cf414610122575f80fd5b346101545760203660031901126101545760209161013e610d97565b9063389a75e1600c525281600c20549051908152f35b5080fd5b849084346103375760c036600319011261033757610174610d97565b61017c610dad565b93610185610dc3565b608435949067ffffffffffffffff9060a435828111610333576101ab9036908501610dd9565b979095814211610323578798999a889798519060208201927fb0b468160dab1630ef0a2d69168f606bc3bbecdab6341435d57f1c8cf92ce931845260018060a01b03809e81809316809c8601521695866060850152169384608084015260643560a084015260c083015260c08252810181811086821117610310578a525190206102499061023890610ef0565b610243368c8b610e77565b90610f65565b638b78c6d8600c52855260026020600c2054161561030157875193610ed59081860194868610908611176102ee5750916080939185936110a3853982528660208301523389830152606082015203019082f09081156102e357506020957fce10738e35f78b97594969f2c098b909401ff425841c115dbff915f3dda7b32691169485936102da865192839283610ec9565b0390a351908152f35b8451903d90823e3d90fd5b634e487b7160e01b875260419052602486fd5b87516282b42960e81b81528490fd5b604187634e487b7160e01b5f525260245ffd5b875163b08ce5b360e01b81528590fd5b8480fd5b8280fd5b8490602036600319011261015457610351610d97565b9061035a610fed565b8160601b1561038a575060018060a01b0316638b78c6d8198181545f805160206133538339815191525f80a35580f35b637448fbae8352601cfd5b84906020366003190112610154576103ab610d97565b906103b4610fed565b63389a75e1600c528183526020600c2090815442116103f7575082905560018060a01b0316638b78c6d8198181545f805160206133538339815191525f80a35580f35b636f5e88188452601cfd5b849084346103375760803660031901126103375761041e610d97565b60643567ffffffffffffffff81116103335761043d9036908501610dd9565b90638b78c6d89283600c5233875260026020600c2054161561045d578680f35b60443542116104f5576104cd92916104c561024392875160208101917f2ca08f0c5e197b3141e5c2f954b97ca510e2cd93f13c8da4f670fb807882627c835260018060a01b0316898201526024356060820152606081526104bd81610e2b565b519020610ef0565b923691610e77565b90600c52835260026020600c205416156104e957808080808680f35b516282b42960e81b8152fd5b845163b08ce5b360e01b81528690fd5b50505034610154578160031936011261015457638b78c6d8195490516001600160a01b039091168152602090f35b838583346101545781600319360112610154576105759291610582610556611009565b85919551968796600f60f81b88526020968060208a0152880190610e07565b9186830390870152610e07565b4660608501523060808501528160a085015283810360c085015260206060519182815201926080925b8281106105ba57505050500390f35b8351855286955093810193928101926001016105ab565b84903461015457816003193601126101545763409feecd1980546003825590918161064e575b505033638b78c6d819558033835f805160206133538339815191528180a361061d575080f35b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a180f35b600182811c14303b1015610668575060ff1b1b82806105f7565b63f92ee8a98452601cfd5b84806003193601126106a657610687610fed565b5f638b78c6d8198181545f805160206133538339815191528280a35580f35b80fd5b84806003193601126106a65763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8385346106a657806003193601126106a657307f00000000000000000000000000000000000000000000000000000000000000000361075157602082517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b639f03a026915052601cfd5b5050503461015457806003193601126101545760209161077b610d97565b90638b78c6d8600c525260243582600c20541615159051908152f35b91505081600319360112610337576107ad610d97565b9160243567ffffffffffffffff8111610333576107cd9036908401610dd9565b919093307f0000000000000000000000000000000000000000000000000000000000000000146108d357638b78c6d8195433036108af575b60018060a01b0316923d86526352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90816020600183601d895afa51036108a3575090828480949388967fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8880a255610882578380f35b8190519485378338925af41561089a57818180808380f35b903d90823e3d90fd5b6355299b49600152601dfd5b638b78c6d8600c5233865260016020600c20541661080557836382b429008752601cfd5b83639f03a0268752601cfd5b5050503660031901126106a6576109086108f7610d97565b6108ff610fed565b6024359061105d565b80f35b849084346109da5760803660031901126109da57610927610d97565b91610930610dad565b67ffffffffffffffff906064358281116109da576109519036908501610dd9565b638b78c6d89182600c52335f5260026020600c205416156109de575b5050506001600160a01b0394851694853b156109da5760245f928387519889948593631ac3ddeb60e01b855216888401525af180156109d0576109ae578480f35b909192809450116109bd575052005b604190634e487b7160e01b5f525260245ffd5b83513d5f823e3d90fd5b5f80fd5b6044354211610a6a5790610243610a3f926104c5895160208101907fc55771f2ceabbd14f04a92fbf0fa8ac9e4e27a4cd03793a1a7a7b92d11677eb382528c60018060a01b038091168d83015289166060820152606081526104bd81610e2b565b90600c525f5260026020600c20541615610a5b5786808061096d565b83516282b42960e81b81528390fd5b865163b08ce5b360e01b81528690fd5b83346109da5760203660031901126109da57602090610a97610d97565b638b78c6d8600c525f5281600c20549051908152f35b83346109da575f3660031901126109da576020905160018152f35b83346109da575f3660031901126109da576020905160028152f35b5f3660031901126109da5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b83346109da57806003193601126109da57602090610b48610d97565b60243590638b78c6d8600c525f528083600c205416149051908152f35b836003193601126109da57610b78610d97565b610b80610fed565b638b78c6d8600c525f526020600c20602435815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3005b60203660031901126109da57610bdb90353361105d565b005b9084346109da57836003193601126109da57610bf7610d97565b92610c00610dad565b92610c09610dc3565b6001600160a01b03959060643587811691908290036109da5760a43560c4359367ffffffffffffffff948581116109da57610c479036908801610dd9565b999097834211610d8957508a9b8b8a9b9c8b9a9b51938160208601967fdf3d66efb7c7b992b7161de12143a7b1f114efa9fc1c50d3965d66dea088ba72885216809c860152169586606085015216938460808401528660a084015260843560c0840152818301528152610100810181811087821117610d76578a52519020610cd29061023890610ef0565b638b78c6d8600c525f5260026020600c20541615610d67578751946113db9081870195878710908711176109bd57509185939160a09593611f78863983528660208401523389840152606083015260808201520301905ff080156109d0576020957fce10738e35f78b97594969f2c098b909401ff425841c115dbff915f3dda7b32691169485936102da865192839283610ec9565b87516282b42960e81b81528590fd5b604188634e487b7160e01b5f525260245ffd5b63b08ce5b360e01b81528790fd5b600435906001600160a01b03821682036109da57565b602435906001600160a01b03821682036109da57565b604435906001600160a01b03821682036109da57565b9181601f840112156109da5782359167ffffffffffffffff83116109da57602083818601950101116109da57565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6080810190811067ffffffffffffffff821117610e4757604052565b634e487b7160e01b5f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610e4757604052565b92919267ffffffffffffffff91828111610e475760405192601f8201601f19908116603f0116840190811184821017610e47576040528294818452818301116109da578281602093845f960137010152565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b60a0610efa611009565b90602081519101209060208151910120604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301526040820152466060820152306080820152206719010000000000005f52601a52603a526042601820905f603a52565b91909160409260405191815180604014610fcc57604114610f935750505050505b638baa579f5f526004601cfd5b6060808301515f1a6020528583015190525b5f526020809101518452600160805f825afa51925f606052523d610fca575050610f86565b565b508185015160ff81901c601b016020526001600160ff1b0316606052610fa5565b638b78c6d819543303610ffc57565b6382b429005f526004601cfd5b60405161101581610e5b565b601881527f436c697175654469737472696275746f724d616e61676572000000000000000060208201529060405161104c81610e5b565b60018152603160f81b602082015290565b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a356fe60803461014457601f610ed538819003918201601f19168301916001600160401b0383118484101761014857808492608094604052833981010312610144576100478161015c565b906100546020820161015c565b61006c60606100656040850161015c565b930161015c565b600180545f80546001600160a01b03199081166001600160a01b039889161782556001600160a81b03199092169387169390931790915533638b78c6d819819055909493917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3638b78c6d8600c525f5260016020600c20556001600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a316908115610132576004541617600455604051610d6490816101718239f35b60405163d92e233d60e01b8152600490fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101445756fe6080806040526004361015610012575f80fd5b5f3560e01c90816302fb0c5e14610c5857508063183a4f6e14610c405780631ac3ddeb14610b835780631c10893f14610b235780631cd64df414610aea578063238ac93314610ac35780632569296214610a7a57806329c68dc114610a3f5780632de9480714610a0d5780634a4ee7b1146109e3578063514e62fc146109ab57806354d1f13d14610967578063584ebf761461049f5780635fc2f0361461044c5780636817031b146103e65780636c19e783146103a4578063715018a6146103605780638da5cb5b14610334578063dfcae622146102eb578063e7e79a1e146102c1578063f04e283e14610245578063f28a80b61461022a578063f2fde38b146101c0578063fbfa77cf14610198578063fc0c546a146101705763fee81cf41461013a575f80fd5b3461016c57602036600319011261016c57610153610c7a565b63389a75e1600c525f52602080600c2054604051908152f35b5f80fd5b3461016c575f36600319011261016c576004546040516001600160a01b039091168152602090f35b3461016c575f36600319011261016c576001546040516001600160a01b039091168152602090f35b602036600319011261016c576101d4610c7a565b6101dc610cb2565b8060601b1561021d5760018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355005b637448fbae5f526004601cfd5b3461016c575f36600319011261016c57602060405160018152f35b602036600319011261016c57610259610c7a565b610261610cb2565b63389a75e1600c52805f526020600c20805442116102b4575f905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355005b636f5e88185f526004601cfd5b3461016c57602036600319011261016c576004355f526003602052602060405f2054604051908152f35b3461016c57604036600319011261016c576024356001600160a01b0381169081900361016c576004355f52600260205260405f20905f52602052602060405f2054604051908152f35b3461016c575f36600319011261016c57638b78c6d819546040516001600160a01b039091168152602090f35b5f36600319011261016c57610373610cb2565b5f638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a355005b3461016c57602036600319011261016c576103bd610c7a565b6103c5610cce565b5f80546001600160a01b0319166001600160a01b0392909216919091179055005b3461016c57602036600319011261016c576103ff610c7a565b610407610cce565b600180546001600160a01b0319166001600160a01b039290921691821790557fe7ae49f883c825b05681b3e00e8be6fdea9ed2a8a45e4c6ecb9390fc44cce6155f80a2005b3461016c57604036600319011261016c5760243560043561046b610cce565b805f5260036020528160405f20557f5f8f4c6efebc2c9c76d8cadfd5f9bd9cf6611483e79417c706c86997840e95735f80a3005b608036600319011261016c5767ffffffffffffffff6004351161016c5736602360043501121561016c5767ffffffffffffffff600435600401351161016c573660246004356004013560051b60043501011161016c5767ffffffffffffffff6024351161016c5736602360243501121561016c5767ffffffffffffffff602435600401351161016c57366024803560040135813501011161016c576064356001600160a01b038116900361016c5760ff60015460a01c1615610955576040516bffffffffffffffffffffffff1960643560601b16602082015260443560348201526034815280606081011067ffffffffffffffff60608301111761077f576060810160405280516020820120906105c560206004356004013560051b0160608301610c90565b600435600401356060820152608081019182602460043501905b60246004356004013560051b60043501018210610945575050916060820151918261090d575b505050805f52600360205260405f205480156108f4575f8281526002602090815260408083206064356001600160a01b031684529091529020541561065657604051630c8d9eab60e31b8152600490fd5b5f8281526002602090815260408083206001600160a01b036064358116855292528220439055905416806107a5575b506001546001600160a01b0316905f19016107935760018060a01b0360045416906040519060208201906323b872dd60e01b8252602483015260018060a01b0360643516604483015260443560648301526064825260a082019082821067ffffffffffffffff83111761077f576020925f92604052519082855af115610774575f513d61076b5750803b155b610753575060405160443581526064356001600160a01b0316907f286b28c8571c73086fa8d8852b677537690a70b51e1a76820fe50db64e12777990602090a3005b60249060405190635274afe760e01b82526004820152fd5b60011415610711565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b604051639dd854d360e01b8152600490fd5b60243560040135156108b6576040516bffffffffffffffffffffffff1960643560601b16602082015260443560348201528360548201523060601b6074820152466088820152608881528060c081011067ffffffffffffffff60c08301111761077f5760c08101604052805160208201206020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c60042060243560040135806040146108c8576041146108665750505050505b638baa579f5f526004601cfd5b606460243501355f1a6020526040602480350181375b5f5260c06020600160805f825afa51915f606052016040523d6108a25750505050610859565b6001600160a01b0316036108b65782610685565b604051638baa579f60e01b8152600490fd5b5060248035604481013560ff81901c601b016020529101356040526001600160ff1b031660605261087c565b604051630ee30f2b60e21b815260048101839052602490fd5b90925b8351811160051b90815260208451911852602060405f2093019260808360051b83010184106109105792505050818080610605565b81358152602091820191016105df565b604051634065aaf160e11b8152600490fd5b5f36600319011261016c5763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461016c57604036600319011261016c576109c4610c7a565b638b78c6d8600c525f52602060243581600c2054161515604051908152f35b604036600319011261016c57610a0b6109fa610c7a565b610a02610cb2565b60243590610ce9565b005b3461016c57602036600319011261016c57610a26610c7a565b638b78c6d8600c525f52602080600c2054604051908152f35b3461016c575f36600319011261016c57610a57610cce565b6001805460ff60a01b19811660a091821c60ff161590911b60ff60a01b16179055005b5f36600319011261016c5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461016c575f36600319011261016c575f546040516001600160a01b039091168152602090f35b3461016c57604036600319011261016c576020610b05610c7a565b60243590638b78c6d8600c525f528082600c20541614604051908152f35b604036600319011261016c57610b37610c7a565b610b3f610cb2565b638b78c6d8600c525f526020600c20602435815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3005b3461016c57602036600319011261016c57610b9c610c7a565b610ba4610cb2565b479081610bad57005b6001600160a01b0316905f80808084865af13d15610c3b573d67ffffffffffffffff811161077f5760405190610bed601f8201601f191660200183610c90565b81525f60203d92013e5b15610c295760207f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436491604051908152a2005b604051631d42c86760e21b8152600490fd5b610bf7565b602036600319011261016c57610a0b60043533610ce9565b3461016c575f36600319011261016c5760209060ff60015460a01c1615158152f35b600435906001600160a01b038216820361016c57565b90601f8019910116810190811067ffffffffffffffff82111761077f57604052565b638b78c6d819543303610cc157565b6382b429005f526004601cfd5b638b78c6d8600c52335f5260016020600c20541615610cc157565b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a356fea26469706673582212203316bf45da5af8be244608cd1ae4400f5220fc96dda5bd9a81118c9d90a7610864736f6c6343000819003360c03461017457601f6113db38819003918201601f19168301916001600160401b038311848410176101785780849260a094604052833981010312610174576100478161018c565b6100536020830161018c565b916100606040820161018c565b9061007960806100726060840161018c565b920161018c565b600180545f80546001600160a01b0319166001600160a01b039788161781556001600160a81b0319909116959093169490941790935533638b78c6d819819055907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3638b78c6d8600c525f5260016020600c20556001600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a360805260a05260405161123a90816101a1823960805181818161021201528181610a2b0152610b40015260a0518181816101a6015281816108f7015281816109a7015281816109e001528181610a680152610c280152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101745756fe6080806040526004361015610012575f80fd5b5f3560e01c90816302fb0c5e1461111257508063183a4f6e146110fa5780631ac3ddeb1461103d5780631c10893f14610fdd5780631cd64df414610fa4578063238ac93314610f7d5780632569296214610f3457806329c68dc114610ef95780632de9480714610ec75780634a4ee7b114610e9d578063514e62fc14610e6557806354d1f13d14610e21578063584ebf76146106685780635fc2f036146106155780636057292b146105b45780636817031b1461054e5780636c19e7831461050c578063715018a6146104c85780638bf48ed9146103e15780638da5cb5b146103b5578063dfcae6221461036c578063e7e79a1e14610342578063f04e283e146102c6578063f28a80b6146102ab578063f2fde38b14610241578063f83d08ba146101fd578063fbfa77cf146101d5578063fc0c546a146101915763fee81cf41461015b575f80fd5b3461018d57602036600319011261018d57610174611134565b63389a75e1600c525f52602080600c2054604051908152f35b5f80fd5b3461018d575f36600319011261018d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461018d575f36600319011261018d576001546040516001600160a01b039091168152602090f35b3461018d575f36600319011261018d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b602036600319011261018d57610255611134565b61025d611188565b8060601b1561029e5760018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355005b637448fbae5f526004601cfd5b3461018d575f36600319011261018d57602060405160018152f35b602036600319011261018d576102da611134565b6102e2611188565b63389a75e1600c52805f526020600c2080544211610335575f905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355005b636f5e88185f526004601cfd5b3461018d57602036600319011261018d576004355f526003602052602060405f2054604051908152f35b3461018d57604036600319011261018d576024356001600160a01b0381169081900361018d576004355f52600260205260405f20905f52602052602060405f2054604051908152f35b3461018d575f36600319011261018d57638b78c6d819546040516001600160a01b039091168152602090f35b3461018d5760e036600319011261018d5760043560c036602319011261018d577f04166e0d79ae2b66c8c407a2015f02180e6d9889e76ce055a21c4be6d3076bf160c06040516104308161114a565b6024358152602081016044358152604082016064358152606083016084358152608084019160a435835260a085019360c435855261046c6111a4565b885f52600460205260405f2095519586815581516001820155825160028201558351600382015584516004820155600586519101556040519586525160208601525160408501525160608401525160808301525160a0820152a2005b5f36600319011261018d576104db611188565b5f638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a355005b3461018d57602036600319011261018d57610525611134565b61052d6111a4565b5f80546001600160a01b0319166001600160a01b0392909216919091179055005b3461018d57602036600319011261018d57610567611134565b61056f6111a4565b600180546001600160a01b0319166001600160a01b039290921691821790557fe7ae49f883c825b05681b3e00e8be6fdea9ed2a8a45e4c6ecb9390fc44cce6155f80a2005b3461018d57602036600319011261018d576004355f52600460205260c060405f2080549060018101549060028101546003820154906005600484015493015493604051958652602086015260408501526060840152608083015260a0820152f35b3461018d57604036600319011261018d576024356004356106346111a4565b805f5260036020528160405f20557f5f8f4c6efebc2c9c76d8cadfd5f9bd9cf6611483e79417c706c86997840e95735f80a3005b608036600319011261018d5767ffffffffffffffff6004351161018d5736602360043501121561018d5767ffffffffffffffff600435600401351161018d573660246004356004013560051b60043501011161018d5767ffffffffffffffff6024351161018d5736602360243501121561018d5767ffffffffffffffff602435600401351161018d57366024803560040135813501011161018d576064356001600160a01b038116900361018d5760ff60015460a01c1615610e0f576040516bffffffffffffffffffffffff1960643560601b16602082015260443560348201526034815280606081011067ffffffffffffffff606083011117610c635760608101604052805160208201209061078e60206004356004013560051b0160608301611166565b600435600401356060820152608081019182602460043501905b60246004356004013560051b60043501018210610dff5750509160608201519182610dc7575b505050805f52600360205260405f20548015610dae575f8281526002602090815260408083206064356001600160a01b031684529091529020541561081f57604051630c8d9eab60e31b8152600490fd5b5f8281526002602090815260408083206001600160a01b03606435811685529252822043905590541680610c77575b5060018060a01b0360015416905f52600460205260405f209060a0604051926108768461114a565b8054938481526001820154806020830152600283015490816040840152600384015492836060820152600560048601549586608084015201549586910152604051968761018081011067ffffffffffffffff6101808a011117610c6357610180880160405260018060a01b0360643516885286602089015260018060a01b037f00000000000000000000000000000000000000000000000000000000000000001660408901526044356060890152608088015260a087015260c086015260e08501526101008401526101208301525f6101408301525f610160830152604051906323b872dd60e01b602083015260248201523060448201526044356064820152606481528060a081011067ffffffffffffffff60a083011117610c635760a0810160405280516020915f91908301827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af115610bd6575f513d610c5a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b155b610c1957606081015160405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482019290925290602090829060449082905f907f0000000000000000000000000000000000000000000000000000000000000000165af18015610bd657610be1575b5060408051632f45cd6f60e01b815282516001600160a01b039081166004830152602080850151821660248401529284015181166044830152606084015160648301526080840151608483015260a084015160a483015260c084015160c483015260e084015160e48301526101008401516101048301526101208401516101248301526101408401518116610144830152610160909301516101648201529182906101849082905f907f0000000000000000000000000000000000000000000000000000000000000000165af18015610bd657610bab575b5060405160443581526064356001600160a01b0316907f286b28c8571c73086fa8d8852b677537690a70b51e1a76820fe50db64e12777990602090a3005b602090813d8311610bcf575b610bc18183611166565b8101031261018d5781610b6d565b503d610bb7565b6040513d5f823e3d90fd5b6020813d602011610c11575b81610bfa60209383611166565b8101031261018d57518015150361018d5782610a95565b3d9150610bed565b604051635274afe760e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166004820152602490fd5b60011415610a0b565b634e487b7160e01b5f52604160045260245ffd5b6024356004013515610d705760405160208101906bffffffffffffffffffffffff1960643560601b16825260443560348201528460548201523060601b607482015246608882015260888152610ccc8161114a565b5190206020527b19457468657265756d205369676e6564204d6573736167653a0a33325f52603c600420604051906024356004013580604014610d8257604114610d235750505050505b638baa579f5f526004601cfd5b606460243501355f1a6020526040602480350181375b5f526020600160805f825afa51905f6060526040523d610d5c5750505050610d16565b6001600160a01b031603610d70578261084e565b604051638baa579f60e01b8152600490fd5b5060248035604481013560ff81901c601b016020529101356040526001600160ff1b0316606052610d39565b604051630ee30f2b60e21b815260048101839052602490fd5b90925b8351811160051b90815260208451911852602060405f2093019260808360051b8301018410610dca57925050508180806107ce565b81358152602091820191016107a8565b604051634065aaf160e11b8152600490fd5b5f36600319011261018d5763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b3461018d57604036600319011261018d57610e7e611134565b638b78c6d8600c525f52602060243581600c2054161515604051908152f35b604036600319011261018d57610ec5610eb4611134565b610ebc611188565b602435906111bf565b005b3461018d57602036600319011261018d57610ee0611134565b638b78c6d8600c525f52602080600c2054604051908152f35b3461018d575f36600319011261018d57610f116111a4565b6001805460ff60a01b19811660a091821c60ff161590911b60ff60a01b16179055005b5f36600319011261018d5763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461018d575f36600319011261018d575f546040516001600160a01b039091168152602090f35b3461018d57604036600319011261018d576020610fbf611134565b60243590638b78c6d8600c525f528082600c20541614604051908152f35b604036600319011261018d57610ff1611134565b610ff9611188565b638b78c6d8600c525f526020600c20602435815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3005b3461018d57602036600319011261018d57611056611134565b61105e611188565b47908161106757005b6001600160a01b0316905f80808084865af13d156110f5573d67ffffffffffffffff8111610c6357604051906110a7601f8201601f191660200183611166565b81525f60203d92013e5b156110e35760207f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436491604051908152a2005b604051631d42c86760e21b8152600490fd5b6110b1565b602036600319011261018d57610ec5600435336111bf565b3461018d575f36600319011261018d5760209060ff60015460a01c1615158152f35b600435906001600160a01b038216820361018d57565b60c0810190811067ffffffffffffffff821117610c6357604052565b90601f8019910116810190811067ffffffffffffffff821117610c6357604052565b638b78c6d81954330361119757565b6382b429005f526004601cfd5b638b78c6d8600c52335f5260016020600c2054161561119757565b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a356fea2646970667358221220cdbc3e4f298e97f9373850670f921d8a5bab61961b415d73bcba20c08e69d00d64736f6c634300081900338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122086b173de701d357fdbb09ecf4612a994f9ca10faaae7e839853073434a2e18be64736f6c63430008190033