0 txs
4.4k calls
constructor
constructor(address usdai_, address stakedUsdai_, address usdaiOAdapter_, address stakedUsdaiOAdapter_, address receiptTokenImplementation_)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
depositCapInfo
viewfunction depositCapInfo() view returns (uint256, uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
IMPLEMENTATION_VERSION
viewfunction IMPLEMENTATION_VERSION() view returns (string)
isWhitelistedToken
viewfunction isWhitelistedToken(address token) view returns (bool)
queuedStakedUSDaiToken
viewfunction queuedStakedUSDaiToken() view returns (address)
queuedUSDaiToken
viewfunction queuedUSDaiToken() view returns (address)
queueInfo
viewfunction queueInfo(uint8 queueType, address depositToken, uint256 offset, uint256 count) view returns (uint256, uint256, tuple[])
queueItem
viewfunction queueItem(uint8 queueType, address depositToken, uint256 index) view returns (tuple)
receiptTokenImplementation
viewfunction receiptTokenImplementation() view returns (address)
stakedUsdai
viewfunction stakedUsdai() view returns (address)
stakedUsdaiOAdapter
viewfunction stakedUsdaiOAdapter() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
usdai
viewfunction usdai() view returns (address)
usdaiOAdapter
viewfunction usdaiOAdapter() view returns (address)
whitelistedTokenMinAmount
viewfunction whitelistedTokenMinAmount(address token) view returns (uint256)
whitelistedTokens
viewfunction whitelistedTokens() view returns (address[])
addWhitelistedTokens
nonpayablefunction addWhitelistedTokens(address[] tokens, uint256[] minAmounts)
deposit
nonpayablefunction deposit(uint8 queueType, address depositToken, uint256 amount, address recipient, uint32 dstEid) returns (uint256)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin, uint256 depositCap, address[] whitelistedTokens_, uint256[] minAmounts)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
removeWhitelistedTokens
nonpayablefunction removeWhitelistedTokens(address[] tokens)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
rescue
nonpayablefunction rescue(address token, address to, uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
service
payablefunction service(uint8 queueType, bytes data) payable
updateDepositCap
nonpayablefunction updateDepositCap(uint256 depositCap, bool resetCounter)
withdrawETH
nonpayablefunction withdrawETH(address to, uint256 amount)
events
ActionFailed
event ActionFailed(string action, bytes reason)
Deposit
event Deposit(uint8 indexed queueType, address indexed depositToken, uint256 indexed queueIndex, address depositor, uint256 amount, address recipient)
DepositCapUpdated
event DepositCapUpdated(uint256 cap)
Initialized
event Initialized(uint64 version)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Serviced
event Serviced(uint8 indexed queueType, address indexed depositToken, uint256 indexed queueIndex, address depositor, uint256 servicedDeposit, uint256 transferAmount, address recipient, uint32 dstEid)
WhitelistedTokensAdded
event WhitelistedTokensAdded(address[] tokens, uint256[] minAmounts)
WhitelistedTokensRemoved
event WhitelistedTokensRemoved(address[] tokens)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance()
InvalidAmount
error InvalidAmount()
InvalidInitialization
error InvalidInitialization()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
InvalidParameters
error InvalidParameters()
InvalidQueueState
error InvalidQueueState()
InvalidQueueType
error InvalidQueueType()
InvalidRecipient
error InvalidRecipient()
InvalidSharePrice
error InvalidSharePrice()
InvalidToken
error InvalidToken()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x610160806040523461023a5760a08161405280380380916100208285610283565b83398101031261023a5760046020610037836102ba565b926100438282016102ba565b61004f604083016102ba565b906100686080610061606086016102ba565b94016102ba565b6001600160a01b0396871660805290861660a05290851660c08190529190941660e052604051634b1f7e5560e11b815292839182905afa908115610246575f91610251575b506101005260e051604051634b1f7e5560e11b815290602090829060049082906001600160a01b03165afa908115610246575f91610210575b5061012052610140525f5160206140325f395f51905f525460ff8160401c16610201576002600160401b03196001600160401b038216016101ab575b604051613d6390816102cf8239608051818181610c73015281816124680152818161291c01526136d5015260a051818181610e950152818161241a0152613792015260c051818181610c30015261336d015260e0518181816109400152613563015261010051816138230152610120518161384e01526101405181818161154e01526127710152f35b6001600160401b0319166001600160401b039081175f5160206140325f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f610122565b63f92ee8a960e01b5f5260045ffd5b90506020813d60201161023e575b8161022b60209383610283565b8101031261023a57515f6100e6565b5f80fd5b3d915061021e565b6040513d5f823e3d90fd5b90506020813d60201161027b575b8161026c60209383610283565b8101031261023a57515f6100ad565b3d915061025f565b601f909101601f19168101906001600160401b038211908210176102a657604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361023a5756fe60806040526004361015610011575f80fd5b5f3560e01c806301ffc9a7146101f45780631c5d9d11146101ef57806320be5da5146101ea57806320ff430b146101e5578063211cd00b146101e0578063248a9ca3146101db57806324b7b817146101d65780632c506097146101d15780632f2ff15d146101cc57806336568abe146101c757806338e481a4146101c25780634782f779146101bd57806352dfc683146101b85780635d42474d146101b35780635e1762a0146101ae578063606505ff146101a957806360df3ea0146101a4578063754b377c1461019f57806377a21fa71461019a5780638ddcc36b1461019557806391d14854146101905780639a19224f1461018b578063a217fddf14610186578063ab37f48614610181578063ac9650d81461017c578063b32f67d214610177578063bcec454f14610172578063d547741f1461016d578063e15b7ec0146101685763ea1f533414610163575f80fd5b6116ed565b6116a8565b61165b565b611572565b61152f565b6114c1565b6113fd565b6113e3565b611214565b6110d9565b611077565b610fd3565b610f84565b610e76565b610da5565b610ce7565b610c54565b610c11565b610bd9565b610ac3565b6109fb565b6109a9565b610964565b610921565b6108d8565b61042c565b610376565b6102cf565b61025f565b3461024a57602036600319011261024a5760043563ffffffff60e01b811680910361024a57602090637965db0b60e01b8114908115610239575b506040519015158152f35b6301ffc9a760e01b1490505f61022e565b5f80fd5b6001600160a01b0381160361024a57565b3461024a57602036600319011261024a5760206102b76004356102818161024e565b6001600160a01b03165f527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d67977670260205260405f2090565b54604051908152f35b60043590600282101561024a57565b3461024a57606036600319011261024a5760806103386103326102f06102c0565b600261032c6024356103018161024e565b610316604435946103106117f8565b50611826565b906001600160a01b03165f5260205260405f2090565b01611870565b5061188e565b61037460405180926001600160a01b03606080928051855263ffffffff6020820151166020860152826040820151166040860152015116910152565bf35b3461024a57606036600319011261024a576103ec60206004356103988161024e565b602435906103a58261024e565b604435916103b1611ed6565b5f6001600160a01b0360405180978196829563a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b0393165af18015610427576103fd57005b61041e9060203d602011610420575b6104168183610eee565b8101906118d0565b005b503d61040c565b6118e5565b3461024a5760a036600319011261024a576104456102c0565b602435906104528261024e565b60443591606435906104638261024e565b6084359263ffffffff8416840361024a5761047c611fe8565b6104d06104cc61049c6001600160a01b0385165b6001600160a01b031690565b5f527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d67977670160205260405f2054151590565b1590565b6108c95784158015610886575b610834576001600160a01b0383161561087757610502856104fd84612079565b611928565b927f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c00548015159081610843575b50610834576040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b038416936020826064815f895af19081156104275760019261058692610817575b5061031685611826565b6105c860028201978854986105ae61059c610f10565b8c815263ffffffff9093166020840152565b3360408301526001600160a01b0386166060830152611948565b016105d487825461193b565b9055610628610604857f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c015461193b565b7f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c0155565b6106318261181c565b8161073d5761066a6104907f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d00546001600160a01b031690565b803b1561024a576040516340c10f1960e01b81526001600160a01b038316600482015260248101959095525f908590604490829084905af19081156104275761071f9686957f80c151471e1cb118b08deaf0a8212c32e2fd00be107504e82a23a15a138e14d193610723575b505b6106e18461181c565b6040805133815260208101929092526001600160a01b039290921691810191909152606090a461070f612043565b6040519081529081906020820190565b0390f35b806107315f61073793610eee565b80610917565b5f6106d6565b6107468261181c565b60018203610808576107826104907f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d01546001600160a01b031690565b803b1561024a576040516340c10f1960e01b81526001600160a01b038316600482015260248101959095525f908590604490829084905af19081156104275761071f9686957f80c151471e1cb118b08deaf0a8212c32e2fd00be107504e82a23a15a138e14d1936107f4575b506106d8565b806107315f61080293610eee565b5f6107ee565b631d3a143360e21b5f5260045ffd5b61082f9060203d602011610420576104168183610eee565b61057c565b63162908e360e11b5f5260045ffd5b9050610870857f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c015461193b565b115f61052f565b634e46966960e11b5f5260045ffd5b50846108c2836001600160a01b03165f527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d67977670260205260405f2090565b54116104dd565b63c1ab6dc160e01b5f5260045ffd5b3461024a57602036600319011261024a57602061090f6004355f525f516020613cee5f395f51905f52602052600160405f20015490565b604051908152f35b5f91031261024a57565b3461024a575f36600319011261024a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461024a575f36600319011261024a5760206001600160a01b037f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d005416604051908152f35b3461024a57604036600319011261024a5761041e6024356004356109cc8261024e565b6109f66109f1825f525f516020613cee5f395f51905f52602052600160405f20015490565b611f94565b6121ac565b3461024a57604036600319011261024a57600435602435610a1b8161024e565b336001600160a01b03821603610a345761041e9161225e565b63334bd91960e11b5f5260045ffd5b608090602092936060820194825283820152606060408201528451809452019201905f5b818110610a745750505090565b9091926020608082610ab860019488516001600160a01b03606080928051855263ffffffff6020820151166020860152826040820151166040860152015116910152565b019401929101610a67565b3461024a57608036600319011261024a57610adc6102c0565b60243590610ae98261024e565b610afc6044359261031660643593611826565b9160028301918254828103908111610bd457610b1d91818082109118021890565b91610b2783611138565b93610b356040519586610eee565b838552601f19610b4485611138565b015f5b818110610bbd575050825b610b5c858561193b565b811015610ba457600181610b9b610b76610b5c9487611870565b50610b8a610b848985611a23565b9161188e565b610b94828c611a30565b5289611a30565b50019050610b52565b858261071f600182549201549260405193849384610a43565b602090610bc86117f8565b82828a01015201610b47565b6118f0565b3461024a57604036600319011261024a575f808080600435610bfa8161024e565b60243590610c06611ed6565b5af15061041e611a44565b3461024a575f36600319011261024a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461024a575f36600319011261024a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b90602080835192838152019201905f5b818110610cb45750505090565b82516001600160a01b0316845260209384019390920191600101610ca7565b906020610ce4928181520190610c97565b90565b3461024a575f36600319011261024a576040518060207fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776700549182815201907fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d6797767005f527fd30de6269ce0f907265ae7ae92776eac4dec18084555bc50380fc37bb8e123f6905f5b818110610d8f5761071f85610d8381870382610eee565b60405191829182610cd3565b8254845260209093019260019283019201610d6c565b604036600319011261024a57610db96102c0565b6024359067ffffffffffffffff821161024a573660238301121561024a5781600401359067ffffffffffffffff821161024a576024830192602483369201011161024a57610e05611fe8565b610e0d611f25565b6002811015610e625780610e385750610e3091610e2b913691611a73565b61255a565b61041e612043565b80610e4460019261181c565b0361080857610e5d91610e58913691611a73565b6123cd565b610e30565b634e487b7160e01b5f52602160045260245ffd5b3461024a575f36600319011261024a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b634e487b7160e01b5f52604160045260245ffd5b6080810190811067ffffffffffffffff821117610ee957604052565b610eb9565b90601f8019910116810190811067ffffffffffffffff821117610ee957604052565b60405190610f1f608083610eee565b565b60405190610f1f60e083610eee565b67ffffffffffffffff8111610ee957601f01601f191660200190565b60405190610f5b602083610eee565b5f8252565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b3461024a575f36600319011261024a5761071f604051610fa5604082610eee565b600381526218971960e91b6020820152604051918291602083526020830190610f60565b8015150361024a57565b3461024a57604036600319011261024a577f333b26cca69716ad4680ddb07663f5bfb4f06045671f336af9a83690a3ae00f9602060043560243561101681610fc9565b61101e611ed6565b817f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c005561104f575b604051908152a1005b5f7f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c0155611046565b3461024a575f36600319011261024a5760407f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c00547f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c015482519182526020820152f35b3461024a57604036600319011261024a57602060ff61112c6024356004356111008261024e565b5f525f516020613cee5f395f51905f52845260405f20906001600160a01b03165f5260205260405f2090565b54166040519015158152f35b67ffffffffffffffff8111610ee95760051b60200190565b9080601f8301121561024a57813561116781611138565b926111756040519485610eee565b81845260208085019260051b82010192831161024a57602001905b82821061119d5750505090565b6020809183356111ac8161024e565b815201910190611190565b9080601f8301121561024a5781356111ce81611138565b926111dc6040519485610eee565b81845260208085019260051b82010192831161024a57602001905b8282106112045750505090565b81358152602091820191016111f7565b3461024a57608036600319011261024a576004356112318161024e565b6024359060443567ffffffffffffffff811161024a57611255903690600401611150565b60643567ffffffffffffffff811161024a576112759036906004016111b7565b905f516020613d0e5f395f51905f52549367ffffffffffffffff6112b16112a36104cc8860ff9060401c1690565b9667ffffffffffffffff1690565b16801590816113db575b60011490816113d1575b1590816113c8575b506113b9576113119385611308600167ffffffffffffffff195f516020613d0e5f395f51905f525416175f516020613d0e5f395f51905f5255565b61137a57611b95565b61131757005b61134668ff0000000000000000195f516020613d0e5f395f51905f5254165f516020613d0e5f395f51905f5255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081015b0390a1005b6113b46801000000000000000068ff0000000000000000195f516020613d0e5f395f51905f525416175f516020613d0e5f395f51905f5255565b611b95565b63f92ee8a960e01b5f5260045ffd5b9050155f6112cd565b303b1591506112c5565b8691506112bb565b3461024a575f36600319011261024a5760206040515f8152f35b3461024a57602036600319011261024a5760206114586001600160a01b036004356114278161024e565b165f527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d67977670160205260405f2054151590565b6040519015158152f35b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061149457505050505090565b90919293946020806114b2600193603f198682030187528951610f60565b97019301930191939290611485565b3461024a57602036600319011261024a5760043567ffffffffffffffff811161024a573660238201121561024a5780600401359067ffffffffffffffff821161024a573660248360051b8301011161024a5761071f9160246115239201611dcc565b60405191829182611462565b3461024a575f36600319011261024a5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461024a57602036600319011261024a5760043567ffffffffffffffff811161024a576115a3903690600401611150565b6115ab611ed6565b5f5b815181101561162b57806115d56001600160a01b036115ce60019486611a30565b5116612ec5565b505f6116246001600160a01b036115ec8487611a30565b51166001600160a01b03165f527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d67977670260205260405f2090565b55016115ad565b6040517f1649eb58a13d728bad23bc5a5316451a2fb008ec1fb498807b465c153dffed4b90806113758582610cd3565b3461024a57604036600319011261024a5761041e60243560043561167e8261024e565b6116a36109f1825f525f516020613cee5f395f51905f52602052600160405f20015490565b61225e565b3461024a575f36600319011261024a5760206001600160a01b037f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d015416604051908152f35b3461024a57604036600319011261024a5760043567ffffffffffffffff811161024a5761171e903690600401611150565b60243567ffffffffffffffff811161024a5761173e9036906004016111b7565b90611747611ed6565b80518251036117e9575f5b81518110156117b85761177861049061176b8385611a30565b516001600160a01b031690565b156108c9578061179561179061176b60019486611a30565b61269d565b506117a08185611a30565b516117b161028161176b8487611a30565b5501611752565b6040517fe5a61a02784f82d94acf228249f6023edb6480ac91aa7313329a835047ebf2279080611375868683611e88565b630e52390960e41b5f5260045ffd5b6040519061180582610ecd565b5f6060838281528260208201528260408201520152565b60021115610e6257565b6002811015610e62575f527fde17916dd48def670a35b2a4d73c98b59c767a72e42b298050b9c5cddd25fa0060205260405f2090565b634e487b7160e01b5f52603260045260245ffd5b8054821015611889575f52600360205f20910201905f90565b61185c565b9060405161189b81610ecd565b60606001600160a01b03600283958054855282600182015463ffffffff8116602088015260201c166040860152015416910152565b9081602091031261024a5751610ce481610fc9565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b90670de0b6b3a7640000820291808304670de0b6b3a76400001490151715610bd457565b81810292918115918404141715610bd457565b91908201809211610bd457565b805468010000000000000000811015610ee95761196a91600182018155611870565b611a105760026119e6606084610f1f955185556001850163ffffffff6020830151168154907fffffffffffffffff00000000000000000000000000000000000000000000000077ffffffffffffffffffffffffffffffffffffffff00000000604086015160201b1692161717905501516001600160a01b031690565b9101906001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19825416179055565b634e487b7160e01b5f525f60045260245ffd5b91908203918211610bd457565b80518210156118895760209160051b010190565b3d15611a6e573d90611a5582610f30565b91611a636040519384610eee565b82523d5f602084013e565b606090565b929192611a7f82610f30565b91611a8d6040519384610eee565b82948184528183011161024a578281602093845f960137010152565b60405190611ab8604083610eee565b600c82527f51756575656420555344616900000000000000000000000000000000000000006020830152565b60405190611af3604083610eee565b600682527f71555344616900000000000000000000000000000000000000000000000000006020830152565b60405190611b2e604083610eee565b601382527f517565756564205374616b6564205553446169000000000000000000000000006020830152565b60405190611b69604083610eee565b600782527f71735553446169000000000000000000000000000000000000000000000000006020830152565b9390929382518551036117e957611baa612d68565b611bb2612d68565b611bba612d68565b5f5b8351811015611c1057611bd561049061176b8387611a30565b156108c95780611bed61179061176b60019488611a30565b50611bf88188611a30565b51611c0961028161176b8489611a30565b5501611bbc565b5091509250611c40611d45927f5f4558a12a832f571ea97f326448c96240f9dce8a5a766ecf3dfe3896a796c0055565b611cc3611c5c611c4e611aa9565b611c56611ae4565b906126f7565b6001600160a01b031673ffffffffffffffffffffffffffffffffffffffff197f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d005416177f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d0055565b611d40611cd9611cd1611b1f565b611c56611b5a565b6001600160a01b031673ffffffffffffffffffffffffffffffffffffffff197f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d015416177f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d0155565b6120fd565b50565b91908110156118895760051b81013590601e198136030182121561024a57019081359167ffffffffffffffff831161024a57602001823603811361024a579190565b805191908290602001825e015f815290565b611dbe610f1f92949360208660405197889583870137840101905f8252611d8a565b03601f198101845283610eee565b611dd55f610f30565b611de26040519182610eee565b5f8152601f19611df15f610f30565b01366020830137611e0183611138565b92611e0f6040519485610eee565b808452601f19611e1e82611138565b015f5b818110611e775750505f5b818110611e3a575050505090565b80611e5b611e5585611e4f600195878a611d48565b90611d9c565b306127ae565b611e658288611a30565b52611e708187611a30565b5001611e2c565b806060602080938901015201611e21565b90611e9b90604083526040830190610c97565b906020818303910152602080835192838152019201905f5b818110611ec05750505090565b8251845260209384019390920191600101611eb3565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff1615611f0e57565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f617055eab3c2deca137542394cd2a9323004430c6c4280074ddde325664e4aaf602052604090205460ff1615611f5d57565b63e2517d3f60e01b5f52336004527f9027349758afcb3649adbc1f090fcd4eb9187cfbbd22483c7d103367d7b5017360245260445ffd5b805f525f516020613cee5f395f51905f5260205260ff611fc83360405f20906001600160a01b03165f5260205260405f2090565b541615611fd25750565b63e2517d3f60e01b5f523360045260245260445ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6120345760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b633ee5aeb560e01b5f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b60ff16604d8111610bd457600a0a90565b60206001600160a01b039160046040518094819363313ce56760e01b8352165afa8015610427575f906120c0575b60ff91501660120360ff8111610bd457610ce490612068565b506020813d6020116120f5575b816120da60209383610eee565b8101031261024a575160ff8116810361024a5760ff906120a7565b3d91506120cd565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff166121a7576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4600190565b505f90565b805f525f516020613cee5f395f51905f5260205260ff6121e08360405f20906001600160a01b03165f5260205260405f2090565b541661225857805f525f516020613cee5f395f51905f526020526122188260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4600190565b50505f90565b805f525f516020613cee5f395f51905f5260205260ff6122928360405f20906001600160a01b03165f5260205260405f2090565b54161561225857805f525f516020613cee5f395f51905f526020526122cb8260405f20906001600160a01b03165f5260205260405f2090565b805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b81601f8201121561024a5780519061231f82610f30565b9261232d6040519485610eee565b8284526020838301011161024a57815f9260208093018386015e8301015290565b909160c08284031261024a5781516123658161024e565b92602083015192604081015192606082015192608083015167ffffffffffffffff811161024a5760a09161239a918501612308565b92015190565b9081602091031261024a575190565b81156123b9570490565b634e487b7160e01b5f52601260045260245ffd5b61240b6001600160a01b036123ee612401936020808251830101910161234e565b96949793979590959291921696876127cb565b81869492946128b5565b60405163095ea7b360e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166004820181905260248201839052939190602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156104275761253d575b5060405163bc157ac160e01b8152600481018290523060248201525f604482018190529094602091869160649183915af1938415610427575f94612504575b50836124e26124e792611904565b6123af565b116124f557610f1f926129a9565b63e5dd50c360e01b5f5260045ffd5b6124e294509061252e6124e79260203d602011612536575b6125268183610eee565b8101906123a0565b9450906124d4565b503d61251c565b6125559060203d602011610420576104168183610eee565b612495565b805181019060a08183031261024a576020810151906125788261024e565b604081015160608201519360808301519260a08101519067ffffffffffffffff821161024a5760206125b792816001600160a01b039501920101612308565b93169281156117e9576125cd846103165f611826565b5f926125f160026125e08454938461193b565b930192835490818082109118021890565b90915b81831061267957505050811561266a5784610f1f95612657575b5061264a612631612623849561265195611928565b670de0b6b3a7640000900490565b61264461263d87612079565b9186611a23565b90611928565b83856128b5565b91612bc9565b808311908318029091189061264a61260e565b63556a5e0160e01b5f5260045ffd5b90919361269460019161268c8785611870565b50549061193b565b940191906125f4565b6001600160a01b03610ce491167fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776700612dc1565b6001600160a01b03610ce49493816060941683521660208201528160408201520190610f60565b612746906127386127269360405194859363266c45bb60e11b6020860152604060248601526064850190610f60565b83810360231901604485015290610f60565b03601f198101835282610eee565b604051906102f98083019183831067ffffffffffffffff841117610ee9578392612798926139f585397f00000000000000000000000000000000000000000000000000000000000000009030906126d0565b03905ff08015610427576001600160a01b031690565b5f80610ce493602081519101845af46127c5611a44565b91612e30565b919392909384156117e9576127e4836103166001611826565b5f956127f760026125e08454938461193b565b90915b81831061286557505050841561266a5780612835575b509061264461282e612828612623610ce49588611928565b92612079565b9185611a23565b61282e6128286126236128598885610ce498979a6126449710829015159118021890565b97949550505050612810565b90919661287860019161268c8a85611870565b970191906127fa565b919360a093610ce496956001600160a01b038094168552602085015260408401521660608201528160808201520190610f60565b90916001600160a01b038216906128f96104cc835f527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d67977670160205260405f2054151590565b6108c95783158015612993575b610834575f846129436020966001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016809661301a565b61296560405197889687958694630365f9bb60e61b8652309260048701612881565b03925af1908115610427575f9161297a575090565b610ce4915060203d602011612536576125268183610eee565b508015612906565b5f198114610bd45760010190565b90916129b9826103166001611826565b916129c381612079565b83549285929160028601845b6129ee575050505050816001916129ea935501918254611a23565b9055565b6129f88682611870565b50612a0a868254818082109118021890565b95612a168a86896130ea565b612a20600161181c565b612a546104907f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d01546001600160a01b031690565b91612a6960028501546001600160a01b031690565b612a738a88611928565b843b1561024a57604051632770a7eb60e21b81526001600160a01b039290921660048301526024820152925f908490604490829084905af1908115610427576001600160a01b0389612b94612b028d8f98957f61e4ee0d67e5da96b430c0475af2e579cf0475568f7919276985a52d5231804596600198612bb5575b50612afb828c54611a23565b8b55611a23565b9c612b1687612b108b61188e565b88613325565b88860154602081901c6001600160a01b03165b97612b4b612b4160028d01546001600160a01b031690565b9263ffffffff1690565b92612b558961181c565b604051968796169986936001600160a01b039060809463ffffffff94989793988360a089019a1688526020880152604087015216606085015216910152565b0390a45415612ba4575b846129cf565b612bae859661299b565b9550612b9e565b806107315f612bc393610eee565b5f612aef565b9091612bd8826103165f611826565b91612be281612079565b83549285929160028601845b612c09575050505050816001916129ea935501918254611a23565b612c138682611870565b50612c25868254818082109118021890565b95612c318a86896130ea565b612c3a5f61181c565b612c6e6104907f0b1935fa33a5b9486fb92ab02635f3c9d624ac3df1e1ee01c88d6052bb824d00546001600160a01b031690565b91612c8360028501546001600160a01b031690565b612c8d8a88611928565b843b1561024a57604051632770a7eb60e21b81526001600160a01b039290921660048301526024820152925f908490604490829084905af1908115610427576001600160a01b0389612d39612d138d8f98957f61e4ee0d67e5da96b430c0475af2e579cf0475568f7919276985a52d52318045965f98612d5a5750612afb828c54611a23565b9c612d2187612b108b61188e565b6001890154602081901c6001600160a01b0316612b29565b0390a45415612d49575b84612bee565b612d53859661299b565b9550612d43565b806107318a612bc393610eee565b60ff5f516020613d0e5f395f51905f525460401c1615612d8457565b631afcd79f60e31b5f5260045ffd5b8054821015611889575f5260205f2001905f90565b916129ea9183549060031b91821b915f19901b19161790565b6001810190825f528160205260405f2054155f14612e2957805468010000000000000000811015610ee957612e16612e00826001879401855584612d93565b819391549060031b91821b915f19901b19161790565b905554915f5260205260405f2055600190565b5050505f90565b90612e545750805115612e4557805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580612e81575b612e65575090565b6001600160a01b0390639996b31560e01b5f521660045260245ffd5b50803b15612e5d565b80548015612eb1575f190190612ea08282612d93565b8154905f199060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b5f8181527fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d6797767016020526040902054908115612258575f19820190828211610bd4577fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776700545f19810193908411610bd45783835f95612f9b9503612fa1575b505050612f6d7fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776700612e8a565b7fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776701905f5260205260405f2090565b55600190565b612f6d61300b91612fe2612fd8613011957fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776700612d93565b90549060031b1c90565b9283917fae8373c513d60a87649c929c9ed639f44732aae4408e77a19fe920d679776700612d93565b90612da8565b555f8080612f41565b60405163095ea7b360e01b60208083019182526001600160a01b0385166024840152604480840196909652948252929390925f90613059606486610eee565b84519082855af15f51903d816130be575b501590505b61307857505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f6044840152610f1f926130b9906130b38160648101612738565b826135a0565b6135a0565b151590506130de575061306f6001600160a01b0382163b15155b5f61306a565b600161306f91146130d8565b91818302915f198185099383808610950394808603951461316f57848311156131625790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b60116003841502186135f4565b505090610ce492506123af565b919082604091031261024a576040516040810181811067ffffffffffffffff821117610ee9576040526020808294805184520151910152565b9060408282031261024a57610ce49161317c565b610ce49163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c0613225613213608085015160e0608086015260e0850190610f60565b60a085015184820360a0860152610f60565b9201519060c0818403910152610f60565b9190602061324d5f926040865260408601906131c9565b930152565b919082810360c0811261024a5760801361024a57604051906060820182811067ffffffffffffffff821117610ee95760405283518252602084015167ffffffffffffffff8116810361024a57826080916020610ce49501526132b7836040880161317c565b6040820152940161317c565b9193926001600160a01b039060206132e56060946080875260808701906131c9565b968051828701520151604085015216910152565b906080610ce49260408152600460408201526314d95b9960e21b60608201528160208201520190610f60565b919081156134e957602081019063ffffffff613345835163ffffffff1690565b1615613588576133548461181c565b6001600160a01b03841592835f1461355c5760606133987f0000000000000000000000000000000000000000000000000000000000000000925b5163ffffffff1690565b9301936133c56133b561049061049088516001600160a01b031690565b916133bf8961181c565b87613815565b6133d56133d0613874565b613890565b916133ed6133e1610f21565b63ffffffff9097168752565b60208601528660408601526060850152608084015261340a610f4c565b60a0840152613417610f4c565b60c0840152169060405190633b6f743b60e01b82526040828061343d8460048301613236565b0381865afa918215610427575f9261352b575b504782511161351c57613480928260c0935160405180968195829463c7c7f5b360e01b84523091600485016132c3565b03925af190816134ee575b506134e9576134d86134e4927f3f1432edc06ed540f00a186d9b228e60ba0b9440f9d81ea738e6091041f88f54946134d26134c4611a44565b94516001600160a01b031690565b9061368e565b604051918291826132f9565b0390a1565b505050565b61350f9060c03d60c011613515575b6135078183610eee565b810190613252565b5061348b565b503d6134fd565b631e9acf1760e31b5f5260045ffd5b61354e91925060403d604011613555575b6135468183610eee565b8101906131b5565b905f613450565b503d61353c565b60606133987f00000000000000000000000000000000000000000000000000000000000000009261338e565b60600151610f1f9391506001600160a01b03166134d2565b905f602091828151910182855af1156118e5575f513d6135eb57506001600160a01b0381163b155b6135cf5750565b6001600160a01b0390635274afe760e01b5f521660045260245ffd5b600114156135c8565b634e487b715f526020526024601cfd5b906080610ce49260408152601b60408201527f5374616b6564205553446169206c6f63616c207472616e73666572000000000060608201528160208201520190610f60565b906080610ce49260408152601460408201527f5553446169206c6f63616c207472616e7366657200000000000000000000000060608201528160208201520190610f60565b6136978161181c565b6137585760405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908161373b575b50610f1f577f3f1432edc06ed540f00a186d9b228e60ba0b9440f9d81ea738e6091041f88f546134e461372f611a44565b60405191829182613649565b6137539060203d602011610420576104168183610eee565b6136fe565b60405163a9059cbb60e01b81526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190816137f8575b50610f1f577f3f1432edc06ed540f00a186d9b228e60ba0b9440f9d81ea738e6091041f88f546134e46137ec611a44565b60405191829182613604565b6138109060203d602011610420576104168183610eee565b6137bb565b610ce49115613849576104fd7f000000000000000000000000000000000000000000000000000000000000000080926123af565b6104fd7f000000000000000000000000000000000000000000000000000000000000000080926123af565b604051600360f01b602082015260028152610ce4602282610eee565b600361ffff61389e8361399f565b16036139975760405172030d40000000000000000000000000000000006020820152601081526138cf603082610eee565b600361ffff6138dd8461399f565b160361397857805161ffff81116139615761ffff60019116019161ffff8311610bd457612738610ce492600461391d956040519687956020870190611d8a565b600160f81b80825260f09290921b7fffff00000000000000000000000000000000000000000000000000000000000016600182015260038101919091520190611d8a565b6306dfcc6560e41b5f52601060045260245260445ffd5b61ffff6139848361399f565b633a51740d60e01b5f521660045260245ffd5b61398461ffff915b60028151106139af576002015190565b60405162461bcd60e51b815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152606490fdfe60a0604052346100e6576102f980380380610019816100ea565b9283398101906060818303126100e65761003281610123565b9161003f60208301610123565b604083015190926001600160401b0382116100e6570181601f820112156100e65780519161007461006f84610137565b6100ea565b8381526020810191602085850101116100e6576100c6955f602086829782849801875e840101526080525190845af43d156100de573d916100b761006f84610137565b9283523d5f602085013e610152565b5060405161014890816101b1823960805181602d0152f35b606091610152565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761010f57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036100e657565b6001600160401b03811161010f57601f01601f191660200190565b90610176575080511561016757805190602001fd5b63d6bda27560e01b5f5260045ffd5b815115806101a7575b610187575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561017f56fe6080604052635997b3e960e11b6080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa80156100b7575f90156100f5575060203d6020116100b0575b601f19601f820116608001906080821067ffffffffffffffff83111761009c57610097916040526080016100c2565b6100f5565b634e487b7160e01b5f52604160045260245ffd5b503d610068565b6040513d5f823e3d90fd5b602090607f1901126100f15760805173ffffffffffffffffffffffffffffffffffffffff811681036100f15790565b5f80fd5b5f8091368280378136915af43d5f803e1561010e573d5ff35b3d5ffdfea2646970667358221220997dc1fbe838f6324ef67a6cee5afd7dc061e7e5b7ca7c0ab7dd5980a264cf8a64736f6c634300081d003302dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a2646970667358221220e8dbaf845e2cb3e490705d172b42f7a5e1bf3a0f5aec6853239a95640b58e0f264736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000000a1a1a107e45b7ced86833863f482bc5f4ed82ef0000000000000000000000000b2b2b2076d95dda7817e785989fe353fe955ef9000000000000000000000000ffa10065ce1d1c42fabc46e06b84ed8ffeb4bae5000000000000000000000000ffb20098fd7b8e84762eea4609f299d101427f2400000000000000000000000082eae942f2f7a4987c131247018c1e01b2696931