5 txs
6 calls
constructor
constructor()
functions
AAVE_DATA_PROVIDER
viewfunction AAVE_DATA_PROVIDER() view returns (address)
AAVE_POOL
viewfunction AAVE_POOL() view returns (address)
CLEANUP_INTERVAL
viewfunction CLEANUP_INTERVAL() view returns (uint256)
depositorQueue
viewfunction depositorQueue(address, uint256) view returns (address)
dustBalances
viewfunction dustBalances(address) view returns (uint256)
FEE_DENOMINATOR
viewfunction FEE_DENOMINATOR() view returns (uint256)
fee
viewfunction fee() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
getATokenAddress
viewfunction getATokenAddress(address token) view returns (address aToken)
getAvailableSupplyCapacity
viewfunction getAvailableSupplyCapacity(address token) view returns (uint256 available)
getDustBalance
viewfunction getDustBalance(address token) view returns (uint256 dust)
getMinDeposit
viewfunction getMinDeposit(address token) view returns (uint256 minAmount)
getPTTokenAToken
viewfunction getPTTokenAToken(address ptToken) view returns (address aToken)
getPTTokenInfo
viewfunction getPTTokenInfo(address ptToken) view returns (bool supported, address aToken, uint256 minDeposit)
getQueueDepositors
viewfunction getQueueDepositors(address token, uint256 start, uint256 limit) view returns (address[] depositors)
getQueueInfo
viewfunction getQueueInfo(address token) view returns (uint256 queueLength, uint256 headPosition)
getSupplyCapInfo
viewfunction getSupplyCapInfo(address token) view returns (uint256 supplyCap, uint256 currentSupply, uint256 utilization)
getUserATokenBalance
viewfunction getUserATokenBalance(address user, address aToken) view returns (uint256 balance)
getUserDeposit
viewfunction getUserDeposit(address user, address token) view returns (tuple)
getUserInfo
viewfunction getUserInfo(address user, address token) view returns (tuple userDeposit, uint256 aTokenBalance, uint256 availableAmount)
getUserQueuePosition
viewfunction getUserQueuePosition(address user, address token) view returns (uint256 position)
lastCleanupBlock
viewfunction lastCleanupBlock(address) view returns (uint256)
MAX_GAS_PRICE
viewfunction MAX_GAS_PRICE() view returns (uint256)
MAX_PAUSE_DURATION
viewfunction MAX_PAUSE_DURATION() view returns (uint256)
MAX_QUEUE_SIZE
viewfunction MAX_QUEUE_SIZE() view returns (uint256)
MIN_DEPOSIT
viewfunction MIN_DEPOSIT() view returns (uint256)
minDepositAmounts
viewfunction minDepositAmounts(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pauseStartTime
viewfunction pauseStartTime() view returns (uint256)
queueHead
viewfunction queueHead(address) view returns (uint256)
queueIndex
viewfunction queueIndex(address, address) view returns (uint256)
supportedTokens
viewfunction supportedTokens(address) view returns (bool)
tokenToAToken
viewfunction tokenToAToken(address) view returns (address)
totalDeposits
viewfunction totalDeposits(address) view returns (uint256)
userATokenBalance
viewfunction userATokenBalance(address, address) view returns (uint256)
userDeposits
viewfunction userDeposits(address, address) view returns (uint128 amount, uint128 suppliedAmount, uint64 timestamp, uint64 queuePosition)
addPTToken
nonpayablefunction addPTToken(address ptTokenAddress, uint256 minDeposit)
addPTTokensBatch
nonpayablefunction addPTTokensBatch(address[] ptTokens, uint256 minDeposit)
addPTTokenWithReplacement
nonpayablefunction addPTTokenWithReplacement(address newPTToken, uint256 minDeposit, address oldPTToken)
collectDust
nonpayablefunction collectDust(address token, address[] recipients, uint256[] amounts)
deposit
nonpayablefunction deposit(address token, uint256 amount)
emergencyUnpause
nonpayablefunction emergencyUnpause()
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token)
manualCleanupQueue
nonpayablefunction manualCleanupQueue(address token, uint256 maxRemovals) returns (uint256 usersRemoved)
pause
nonpayablefunction pause()
removePTToken
nonpayablefunction removePTToken(address ptTokenAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
replacePTTokensBatch
nonpayablefunction replacePTTokensBatch(address[] newPTTokens, address[] oldPTTokens, uint256 minDeposit)
setFee
nonpayablefunction setFee(uint256 newFee)
setFeeRecipient
nonpayablefunction setFeeRecipient(address newRecipient)
setMinDeposit
nonpayablefunction setMinDeposit(address token, uint256 minAmount)
setSupportedToken
nonpayablefunction setSupportedToken(address token, bool supported)
supplyToAave
nonpayablefunction supplyToAave(address token, uint256 amount, uint256 minATokensExpected)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(address token, uint256 amount)
withdrawATokens
nonpayablefunction withdrawATokens(address aToken, uint256 amount)
events
ATokenWithdraw
event ATokenWithdraw(address indexed user, address indexed aToken, uint256 amount)
Deposit
event Deposit(address indexed user, address indexed token, uint256 amount, uint256 queuePosition)
DustCollected
event DustCollected(address indexed token, uint256 amount, uint256 recipients)
FeeCollected
event FeeCollected(address indexed token, uint256 amount)
FeeUpdated
event FeeUpdated(uint256 oldFee, uint256 newFee)
MinDepositUpdated
event MinDepositUpdated(address indexed token, uint256 newMinDeposit)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PTTokenAdded
event PTTokenAdded(address indexed ptToken, address indexed aToken, uint256 minDeposit)
PTTokenRemoved
event PTTokenRemoved(address indexed ptToken)
PTTokenReplaced
event PTTokenReplaced(address indexed oldToken, address indexed newToken, address indexed aToken)
QueueCleanup
event QueueCleanup(address indexed token, uint256 usersRemoved)
SupplyAttributed
event SupplyAttributed(address indexed user, address indexed token, uint256 amount, uint256 aTokensReceived)
SupplyToAave
event SupplyToAave(address indexed token, uint256 amount, uint256 usersProcessed)
TokenSupportUpdated
event TokenSupportUpdated(address indexed token, bool supported)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address indexed user, address indexed token, uint256 amount)
errors
ATokenRetrievalFailed
error ATokenRetrievalFailed()
DepositTooSmall
error DepositTooSmall()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
FeeTooHigh
error FeeTooHigh()
GasPriceTooHigh
error GasPriceTooHigh()
InsufficientATokenBalance
error InsufficientATokenBalance()
InsufficientDeposit
error InsufficientDeposit()
InsufficientDust
error InsufficientDust()
InvalidAToken
error InvalidAToken()
InvalidPTTokenData
error InvalidPTTokenData()
InvalidRecipient
error InvalidRecipient()
MaxPauseDurationExceeded
error MaxPauseDurationExceeded()
NotInQueue
error NotInQueue()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PTTokenAlreadyExists
error PTTokenAlreadyExists()
QueueFull
error QueueFull()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlippageExceeded
error SlippageExceeded()
SupplyCapReached
error SupplyCapReached()
TokenNotSupported
error TokenNotSupported()
TransferFailed
error TransferFailed()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60808060405234620003ef5760015f553315620004895760018054336001600160a01b0319821681179092556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36032600e55600f80546001600160a01b03191633179055739f56094c450763769ba0ea9fe2876070c0fd5f775f81905260046020527f8e9d1f4071bf7a79a396ead288a82f1d480485179f6cd403e352241e357482ba5460ff166200041a576040516334924edb60e21b815260048101829052606081602481737b4eb56e7cd4b454ba8ff71e4518426369a138a35afa9081156200040f575f916200042c575b506001600160a01b031680156200036757815f52600460205260405f20600160ff19825416179055600960205260405f208160018060a01b0319825416179055600c602052670de0b6b3a764000060405f2055815f80516020620034d18339815191526020604051670de0b6b3a76400008152a3805f80516020620034b1833981519152602060405160018152a25f80516020620034f18339815191526020604051670de0b6b3a76400008152a25f80516020620035118339815191525f5260046020527fe53880cebb473404c31c91b98acd54931ab4c388097bd997003f5504278603f35460ff166200041a576040516334924edb60e21b81525f80516020620035118339815191526004820152606081602481737b4eb56e7cd4b454ba8ff71e4518426369a138a35afa9081156200040f575f9162000379575b506001600160a01b0316801562000367575f80516020620035118339815191525f8190527fe53880cebb473404c31c91b98acd54931ab4c388097bd997003f5504278603f3805460ff191660011790557fedf1a389ea33ea704ab27319511551dadf1f1d487d2c23eafd85325e41b3bf0a80546001600160a01b03191683179055600c6020908152670de0b6b3a76400007e6928fd1ec5eabafd3f355aa168eab70948b1ea53358ae915debb6cec92bcdb8190556040519081525f80516020620034d18339815191529190a35f80516020620035118339815191525f80516020620034b1833981519152602060405160018152a25f80516020620035118339815191525f80516020620034f18339815191526020604051670de0b6b3a76400008152a2604051612ffd9081620004b48239f35b60405163c056695360e01b8152600490fd5b905060603d60601162000407575b6001600160401b03601f8201601f1916830190811190831117620003f35781606091601f19601f820116820160405281010312620003ef57620003e76040620003d0836200049e565b92620003df602082016200049e565b50016200049e565b508162000234565b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b503d62000387565b6040513d5f823e3d90fd5b604051635fab63c960e11b8152600490fd5b905060603d60601162000481575b601f8101601f191682016001600160401b03811183821017620003f357606091839160405281010312620003ef57620004796040620003d0836200049e565b5082620000f8565b503d6200043a565b631e4fbdf760e01b81525f6004820152602490fd5b51906001600160a01b0382168203620003ef5756fe608080604052600480361015610013575f80fd5b5f91823560e01c90816301f68202146124e45750806308a01675146124b5578063148c658c1461241957806319fb060b146123d75780631f0e303b146123ad5780632337cb3f146123545780632799657d1461233657806329cde105146122e95780632d37e8581461229e5780632e8993fd14612236578063346e2166146121eb578063357ae30f146121905780633626e235146121735780633a375026146120555780633f4ba83a14611fee578063436d803914611f705780634690484014611f4757806347e7ef2414611ca557806348435783146113ab5780634a4e3bd514611bde5780634a7b6b0f14611ab0578063504b019d146119525780635385b100146119195780635c975abb146118f35780635d10af22146117d757806368c4ac261461179957806369fe0e2d146117295780636ff1c9bc14611681578063711cc00514610ac2578063715018a6146116245780637cfeed6c1461147a5780637e0bce101461144b5780638456cb59146113e45780638540fce4146113ab5780638861862a146113725780638da5cb5b14611349578063912d1a86146112df57806394d7eaa4146112c1578063aad8775814610b37578063ad84087314610afe578063b9b44d3014610ac2578063bf995a8e14610a08578063c0669ff3146109d7578063d2333f5214610903578063d73792a9146108e6578063ddca3f43146108c8578063e1e158a5146108aa578063e3bbb4f11461088a578063e74b981b14610832578063e7986466146107c3578063e94032561461078a578063ec5414f11461076e578063f2801fe71461068d578063f2fde38b14610603578063f3fef3a3146103c9578063fb9b96e614610368578063fc58272d146103185763fcf885781461029d575f80fd5b34610314576020366003190112610314576060916001600160a01b0391826102c3612529565b16825260205260ff60408220541691600960205260408220541690600c602052604081205490508015155f1461030957905b604051921515835260208301526040820152f35b50620f4240906102f5565b5080fd5b823461036557604036600319011261036557610332612529565b604061033c61253f565b9260018060a01b03809316815260086020522091165f52602052602060405f2054604051908152f35b80fd5b5034610314576020366003190112610314576001600160a01b03908161038c612529565b16908184528060205260ff604085205416156103ba5750826040916020945260098452205416604051908152f35b604051633dd1b30560e01b8152fd5b509034610365576040366003190112610365576103e4612529565b6024356103ef61275d565b338352602060028152604084209260018060a01b0380911693845f52825260405f208054906001600160801b0391828116868461042f8460801c8461277e565b16106105f25761044384918289169061277e565b16906001600160801b031916178155858752600384526040872061046886825461263e565b905554908160801c9116146104b6575b507f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb906104a6833386612797565b6040519283523392a36001815580f35b8385526006825260408520335f52825260405f2054908486526005835260408620545f1981019081116105df577f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb949596975080830361056f575b50505083855260058152610527604086206127d7565b8385526006815260408520335f5281528460405f20553385526002815260408520845f528152600160405f200167ffffffffffffffff60401b19815416905584939291610478565b6105839087895260058552604089206125bf565b90549060031b1c16858752600583526105c2816105a38460408b206125bf565b90919082549060031b9160018060a01b03809116831b921b1916179055565b8587526006835260408720905f52825260405f20555f8080610511565b634e487b7160e01b875260118852602487fd5b60405163070f6eed60e11b81528a90fd5b50346103145760203660031901126103145761061d612529565b610625612612565b6001600160a01b039081169182156106755750600154826001600160601b0360a01b821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a380f35b604051631e4fbdf760e01b8152908101849052602490fd5b82346103655760403660031901126103655760c0906106aa612529565b906106b361253f565b906106bc612acc565b5060018060a01b038093168082526020600281528460408420941693845f5281526040805f20938151966106ef88612687565b85549660016001600160801b0397888a168b52868b019960801c8a5201546001600160401b0390818116868c0152851c1660608a015282526009845282822054169381526008835220915f525261075360405f20549282808651169151169061277e565b16906107626040518094612555565b608083015260a0820152f35b8234610365578060031936011261036557602060405160648152f35b8234610365576020366003190112610365576020906040906001600160a01b036107b2612529565b168152600383522054604051908152f35b5034610314576040366003190112610314576107dd612529565b6024359081151580920361082e575f80516020612fa883398151915291602091610805612612565b6001600160a01b03168086529382526040808620805460ff191660ff841617905551908152a280f35b8380fd5b50346103145760203660031901126103145761084c612529565b610854612612565b6001600160a01b031690811561087b57506001600160601b0360a01b600f541617600f5580f35b604051634e46966960e11b8152fd5b82346103655780600319360112610365576020604051642e90edd0008152f35b82346103655780600319360112610365576020604051620f42408152f35b82346103655780600319360112610365576020600e54604051908152f35b823461036557806003193601126103655760206040516127108152f35b50346103145760403660031901126103145761091d612529565b906024359061092a61275d565b81156109c8573384526008602052604084209260018060a01b031692835f526020528160405f2054106109b95750338352600860205260408320825f5260205260405f2061097982825461263e565b9055610986813384612797565b6040519081527f9b04d7ffe653f91a1808a1df846454212d49cc116970019cea6e5f4b5344745760203392a36001815580f35b604051637eb4773160e11b8152fd5b604051631f2a200560e01b8152fd5b823461036557604036600319011261036557610a056109f4612529565b6109fc612612565b60243590612b1b565b80f35b5034610314576060366003190112610314576001600160401b0390803582811161082e57610a39903690830161258f565b919092602435908111610abe57610a53903690830161258f565b909260443592610a61612612565b828203610aaf5750855b818110610a76578680f35b80610aa5610a90610a8b610aaa94868b612f83565b612f93565b86610a9f610a8b85898c612f83565b91612cd4565b61285e565b610a6b565b60405163624a28a560e11b8152fd5b8480fd5b8234610365576020366003190112610365576020906001600160a01b039060409082610aec612529565b16815260098452205416604051908152f35b8234610365576020366003190112610365576020906040906001600160a01b03610b26612529565b168152600c83522054604051908152f35b503461031457610b46366125e8565b939092610b5161275d565b610b5961273c565b642e90edd0003a116112b2576001600160a01b03831682526020819052604082205460ff16156103ba576001600160a01b03831682526003602052604082205484116112a357610ba883612878565b50604080516308df7cab60e31b81526001600160a01b03851683820152602491737b4eb56e7cd4b454ba8ff71e4518426369a138a390828481845afa91821561126257908391869361126d575b506040516351460e2560e01b81526001600160a01b038816868201529160209183919082905afa8015611262578790869061122c575b610c35925061267a565b1161121c57612710610c49600e548761282d565b04610c54818761263e565b9260018060a01b0386168552600960205260018060a01b03604086205416926040516370a0823160e01b80825230848301526020828481895afa9182156112115788926111d9575b50604051602081019063095ea7b360e01b9081835260208b8d7387870bca3f3fd6335c3f4ce8392d69350b4fa4e295868a8601528d604486015260448552610ce385612687565b84519183906001600160a01b03165af18b513d826111b4575b505015611167575b5050803b156111635760405163617ba03760e01b81526001600160a01b038b1686820152848101899052306044820152606481018a90529089908290608490829084905af180156111585761112a575b506020906040519384918252308683015281885afa801561111f5787906110e7575b610d80925061263e565b9788106110d857506001600160a01b0385168452600760205260408420549591829085805b851515806110ba575b806110b0575b1561107f576001600160a01b0389168852600560205260408820610dd9908b906125bf565b60018060a01b0391549060031b1c1680895260026020526040892060018060a01b038b165f526020528b60405f209182546001600160801b0381169060801c811190811591611076575b5061106257610e47988354888d6001600160801b038084169360801c9d8e8561277e565b1690508084111561105757610e5e90955b8661282d565b90610e6891612840565b9a6001600160801b0319906001600160801b038616610e869161265f565b60801b16178455818c52600860205260408c20875f526020528260405f208b815490610eb19161267a565b9055610ebc9161263e565b94610ec69061285e565b93610ed09061285e565b60408051938452602084019a909a52986001600160a01b038d16927f114ebcf0b9ba0536dc50f89c9a17379c2c50f342e3d1df44057f985485ed65879190a3548060801c906001600160801b0316145f14610f3657610f2f8a8a6129dd565b9094610da5565b9450505060409497610f6a7f7336f85dfa90e5c151528ea497cc875c181d3550193729d44c5ebc850505844697959861285e565b905b610f76818061263e565b808211611024575b505060018060a01b03851689526007602052858920556003602052610fa785892091825461263e565b905580610fcc575b50825194855260208501526001600160a01b031692a26001815580f35b600f54610fe89082906001600160a01b03908116908616612797565b83519081526001600160a01b038316907f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df90602090a25f610faf565b61102d9161263e565b6001600160a01b0386168a52600a602052868a208054909161104e9161267a565b90555f80610f7e565b50610e5e8395610e58565b50505094906110718a8a6129dd565b610f2f565b9050155f610e23565b509350507f7336f85dfa90e5c151528ea497cc875c181d3550193729d44c5ebc850505844695939660409598610f6c565b5060328110610db4565b506001600160a01b0389168852600560205260408820548a10610dae565b604051638199f5f360e01b8152fd5b506020823d602011611117575b81611101602093836126b6565b8101031261111357610d809151610d76565b5f80fd5b3d91506110f4565b6040513d89823e3d90fd5b6001600160401b03819992991161114657604052966020610d54565b634e487b7160e01b8252604185528382fd5b6040513d8b823e3d90fd5b8880fd5b61119e6111ad9260405190602082015284888201528c60448201526044815261118f81612687565b6001600160a01b038e166126d7565b6001600160a01b038c166126d7565b5f80610d04565b9091506111d157506001600160a01b038c163b15155b5f80610cfc565b6001146111ca565b9091506020813d602011611209575b816111f5602093836126b6565b810103126112055751905f610c9c565b8780fd5b3d91506111e8565b6040513d8a823e3d90fd5b506040516354db2d5d60e11b8152fd5b50506020813d60201161125a575b81611247602093836126b6565b81010312610abe5786610c359151610c2b565b3d915061123a565b6040513d87823e3d90fd5b60209193506112939060403d60401161129c575b61128b81836126b6565b810190612817565b90509290610bf5565b503d611281565b60405163070f6eed60e11b8152fd5b60405163317ed41360e21b8152fd5b82346103655780600319360112610365576020600d54604051908152f35b8234610365576040366003190112610365576112f9612529565b7f0f48d517989455cd80ed52427e80553e66f9b69fd5cee8e26bd1a1f9c364fba6602060243592611328612612565b6001600160a01b0316808552600c825260408086208590555193845292a280f35b82346103655780600319360112610365576001546040516001600160a01b039091168152602090f35b8234610365576020366003190112610365576020906040906001600160a01b0361139a612529565b168152600b83522054604051908152f35b8234610365576020366003190112610365576020906040906001600160a01b036113d3612529565b168152600a83522054604051908152f35b82346103655780600319360112610365576113fd612612565b61140561273c565b6001805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a142600d5580f35b82346103655780600319360112610365576020604051737b4eb56e7cd4b454ba8ff71e4518426369a138a38152f35b503461031457606036600319011261031457611494612529565b6001600160401b039190602435838111610abe576114b5903690840161258f565b919093604435908111611620576114cf903690850161258f565b93906114d9612612565b8484036116105760018060a01b0380931695868852602093600a85526040892054156115ff57959190878952600985528660408a20541689978a945b88861061158d57505050505050848652600a82526040862054841161157e5750916040917f16da52d9583e045f16dfd042dfebf01811d523e087be8328c7d7fb4b62c5b5f693858752600a815283872061157084825461263e565b90558351928352820152a280f35b60405163ae14949560e01b8152fd5b90919293949861159e8a8388612f83565b356115a89161267a565b986115b4818388612f83565b35836115c1838c89612f83565b6115ca90612f93565b168d52600889526040808e20868f528a528d20805490916115ea9161267a565b90556115f59061285e565b9493929190611515565b60405163ae14949560e01b81528490fd5b50604051634e46966960e11b8152fd5b8580fd5b823461036557806003193601126103655761163d612612565b600180546001600160a01b0319811690915581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346103145760203660031901126103145761169b612529565b6116a3612612565b6040516370a0823160e01b815230928101929092526001600160a01b03908116602083602481845afa91821561171e5784926116e9575b610a0593506001541690612797565b91506020833d8211611716575b81611703602093836126b6565b8101031261082e57610a059251916116da565b3d91506116f6565b6040513d86823e3d90fd5b503461031457602036600319011261031457803590611746612612565b6101f4821161178a575060407f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df6130291600e549080600e5582519182526020820152a180f35b60405163cd4e616760e01b8152fd5b50346103145760203660031901126103145760209160ff91604091906001600160a01b036117c5612529565b16825284522054166040519015158152f35b50346103145760209182600319360112610365576117f3612529565b8192604051916308df7cab60e31b835260018060a01b03168082840152737b4eb56e7cd4b454ba8ff71e4518426369a138a391604084602481865afa938415611262579087929186956118cd575b5060249060405194859384926351460e2560e01b84528301525afa9283156118c157809361188f575b505081811161187e575b5050604051908152f35b611888925061263e565b5f80611874565b909192508482813d83116118ba575b6118a881836126b6565b81010312610365575051905f8061186a565b503d61189e565b604051903d90823e3d90fd5b60249195506118ea9060403d60401161129c5761128b81836126b6565b90509490611841565b8234610365578060031936011261036557602060ff60015460a01c166040519015158152f35b8234610365576020366003190112610365576020906040906001600160a01b03611941612529565b168152600783522054604051908152f35b509034610365576020806003193601126103145761196e612529565b918091604051936308df7cab60e31b855260018060a01b0316918286860152737b4eb56e7cd4b454ba8ff71e4518426369a138a392604086602481875afa958615611aa5578296611a80575b5082906024604051809681936351460e2560e01b83528b8301525afa928315611a73578193611a40575b5084611a00575b50606094506040519384528301526040820152f35b90925061271090818302918383041483151715611a2d57506060945083611a2691612840565b915f6119eb565b634e487b7160e01b815260118652602490fd5b9092508181813d8311611a6c575b611a5881836126b6565b81010312611a685751915f6119e4565b8280fd5b503d611a4e565b50604051903d90823e3d90fd5b83919650611a9c9060403d60401161129c5761128b81836126b6565b905095906119ba565b6040513d84823e3d90fd5b50346103145790611acd91611ac4366125e8565b8192959161267a565b60018060a01b03809516928385526005916020928084526040872054808311611bd6575b50611b0085839896959861263e565b93611b23611b0d86612af0565b95611b1b60405197886126b6565b808752612af0565b8589019790601f1901368937815b848110611b77575050505050506040519380850191818652518092526040850193925b828110611b615785850386f35b8351871685529381019392810192600101611b54565b81889a979852838752611b8d8160408c206125bf565b9054611b99858461263e565b918a51831015611bc35760031b1c8c1690851b8901880152611bba9061285e565b98969598611b31565b634e487b7160e01b8d526032895260248dfd5b91505f611af1565b50346103145781600319360112610314576001549060ff8260a01c16808091611c9a575b80611c6f575b15611c5f5715611c50575060ff60a01b19166001556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180600d5580f35b604051638dfc202b60e01b8152fd5b50604051635e9c30f760e11b8152fd5b50600d5462093a808101809111611c87574211611c08565b634e487b7160e01b855260118352602485fd5b50600d541515611c02565b503461031457604036600319011261031457611cbf612529565b60243590611ccb61275d565b611cd361273c565b6001600160a01b0316808452602083815260408520549193909160ff16156103ba5782156109c857838552600c825260408520548015611f3d575b8310611f2e573385526002825260408520848652825260408520604051916323b872dd60e01b848401523360248401523060448401528460648401526064835260a08301926001600160401b039381811085821117611f1b57604052611d7490876126d7565b6001600160801b03908183541615611e12575b50815460019291611d9c87821683831661265f565b16906001600160801b031916178155018142166001600160401b03198254161781558486526003835260408620611dd485825461267a565b90555460401c16906040519283528201527fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d760403392a36001815580f35b868852600585526103e860408920541015611f0c57868852600585526040882080549068010000000000000000821015611ef95781611e59916001611e77940181556125bf565b81546001600160a01b0360039290921b91821b19163390911b179055565b8688526005855260408820545f19810191908211611ee6575090600192918789526006865260408920338a52865260408920558688526005855260408820548383019067ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b19161790559091611d87565b634e487b7160e01b895260119052602488fd5b634e487b7160e01b8a526041835260248afd5b604051638acb5f2760e01b8152fd5b634e487b7160e01b895260418352602489fd5b604051636ba4a1c760e01b8152fd5b50620f4240611d0e565b8234610365578060031936011261036557600f546040516001600160a01b039091168152602090f35b8234610365576040366003190112610365576040608091611f8f612529565b611f9761253f565b9060018060a01b0380911683526002602052838320911682526020522060018154910154604051916001600160801b0381168352831c60208301526001600160401b0390818116604084015260401c166060820152f35b5034610314578160031936011261031457612007612612565b6001549060ff8260a01c1615611c50575060ff60a01b19166001556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a180600d5580f35b82346103655760403660031901126103655761206f612529565b906024359061207c612612565b6001600160a01b03808416808352600560208181526040852054949693879392845b878a108061216a575b1561213657848652818452826120c08b604089206125bf565b90549060031b1c1686526002845260408620858752845260408620546001600160801b0381168015918215612129575b5050156121175761210861210e91610aa58c8a6129dd565b9761286c565b975b979661209e565b9697986121239061285e565b98612110565b60801c1490508b806120f0565b8390857f3897010310db5b25416b4a8e5f6d8daf2d10baf13f7c13e079c05e449ba0e9f383604051848152a2604051908152f35b508881106120a7565b823461036557806003193601126103655760206040516103e88152f35b8234610365576040366003190112610365576121aa612529565b6001600160a01b0390811682526005602052604082208054602435939084101561036557506020926121db916125bf565b9190546040519260031b1c168152f35b823461036557604036600319011261036557604060209161220a612529565b61221261253f565b6001600160a01b039182168352600685528383209116825283522054604051908152f35b5034610314576040366003190112610314578035906001600160401b038211611a68576122659136910161258f565b60243590612271612612565b835b81811061227e578480f35b80610aa584612294610a8b61229995878a612f83565b612b1b565b612273565b82346103655760403660031901126103655760406020916122bd612529565b6122c561253f565b6001600160a01b039182168352600885528383209116825283522054604051908152f35b8234610365576020366003190112610365576001600160a01b0361230b612529565b168152600c6020526040902054801561232a576020905b604051908152f35b506020620f4240612322565b8234610365578060031936011261036557602060405162093a808152f35b8234610365576040366003190112610365576001600160401b036001604060209361237d612529565b61238561253f565b90848060a01b0380911683526002875283832091168252855220015460401c16604051908152f35b823461036557602036600319011261036557610a056123ca612529565b6123d2612612565b612ee4565b8234610365576060366003190112610365576123f1612529565b6044356001600160a01b0381168103611a6857610a0591612410612612565b60243590612cd4565b8234610365576040366003190112610365576040608091612438612529565b61244061253f565b90612449612acc565b5060018060a01b0380911683526002602052838320911682526020522060016040519161247583612687565b80546001600160801b0381168452841c602084015201546001600160401b0390818116604084015260401c1660608201526124b36040518092612555565bf35b823461036557806003193601126103655760206040517387870bca3f3fd6335c3f4ce8392d69350b4fa4e28152f35b839034610314576020366003190112610314576040916001600160a01b0361250a612529565b1681526005602052828082205491600760205220549082526020820152f35b600435906001600160a01b038216820361111357565b602435906001600160a01b038216820361111357565b6060906001600160801b038082511684526020820151166020840152816001600160401b0391826040820151166040860152015116910152565b9181601f84011215611113578235916001600160401b038311611113576020808501948460051b01011161111357565b80548210156125d4575f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6060906003190112611113576004356001600160a01b038116810361111357906024359060443590565b6001546001600160a01b0316330361262657565b60405163118cdaa760e01b8152336004820152602490fd5b9190820391821161264b57565b634e487b7160e01b5f52601160045260245ffd5b9190916001600160801b038080941691160191821161264b57565b9190820180921161264b57565b608081019081106001600160401b038211176126a257604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b038211176126a257604052565b905f602091828151910182855af115612731575f513d61272857506001600160a01b0381163b155b6127065750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b600114156126ff565b6040513d5f823e3d90fd5b60ff60015460a01c1661274b57565b60405163d93c066560e01b8152600490fd5b60025f541461276c5760025f55565b604051633ee5aeb560e01b8152600490fd5b6001600160801b03918216908216039190821161264b57565b60405163a9059cbb60e01b60208201526001600160a01b0390921660248301526044808301939093529181526127d5916127d082612687565b6126d7565b565b80548015612803575f1901906127ed82826125bf565b81549060018060a01b039060031b1b1916905555565b634e487b7160e01b5f52603160045260245ffd5b9190826040910312611113576020825192015190565b8181029291811591840414171561264b57565b811561284a570490565b634e487b7160e01b5f52601260045260245ffd5b5f19811461264b5760010190565b801561264b575f190190565b5f809160018060a01b039283821690818152602091600b835260409260646128a3858520544361263e565b106129d3578183989796985260059586825284842054966007835285852054995b888b10806129c9575b1561297957848652818452826128e58c8989206125bf565b90549060031b1c168652600284528686208587528452868620546001600160801b038116908115918215918261296c575b50501561293e575061292f61293591610aa58d8b6129dd565b9861286c565b985b98976128c4565b1561295a5761292f61295491610aa58d8b6129dd565b98612937565b9798996129669061285e565b99612937565b60801c1490505f80612916565b9993975050509293508482526007835283822055600b82528243912055846129a057505050565b7f3897010310db5b25416b4a8e5f6d8daf2d10baf13f7c13e079c05e449ba0e9f39151858152a2565b50600a81106128cd565b5050935050505090565b919060018060a01b038093165f9080825260206005815260409384842096875480831015612ac157612a0f838a6125bf565b939054915f198101908111612aad579981848c60019c9d612a389503612a72575b5050506127d7565b848652600684528686209260031b1c168452815282848120556002815283832091835252200167ffffffffffffffff60401b198154169055565b612a7c90846125bf565b90549060031b1c16612a92816105a384866125bf565b888a52600688528a8a20908a528752898920555f8481612a30565b634e487b7160e01b88526011600452602488fd5b505050505050509050565b60405190612ad982612687565b5f6060838281528260208201528260408201520152565b6001600160401b0381116126a25760051b60200190565b51906001600160a01b038216820361111357565b6001600160a01b039291908316908115612cc2575f9082825260049460209286845260409160ff8383205416612cb2578315612ca25782516334924edb60e21b8152888101879052606081602481737b4eb56e7cd4b454ba8ff71e4518426369a138a35afa908115612c98578391612c47575b5016908115612c375782818798997f0f48d517989455cd80ed52427e80553e66f9b69fd5cee8e26bd1a1f9c364fba6988794528752818120600160ff1982541617905560098752818120846001600160601b0360a01b825416179055600c87522055857f0ea8abf839ca35019253cb6f18fd6d0b7e85717ae68e4ff10afa287e2d93a56c858451868152a3845f80516020612fa883398151915284835160018152a251908152a2565b825163c056695360e01b81528890fd5b90506060813d8211612c90575b81612c61606093836126b6565b81010312611a6857612c8984612c7683612b07565b92612c82898201612b07565b5001612b07565b505f612b8e565b3d9150612c54565b84513d85823e3d90fd5b825163624a28a560e11b81528890fd5b8251635fab63c960e11b81528890fd5b60405163624a28a560e11b8152600490fd5b90916001600160a01b0380821680151593909282919085612ec0575b5016928315612cc2575f9184835260049560209187835260409060ff8287205416612eb0578215612ea05781516334924edb60e21b8152898101899052606081602481737b4eb56e7cd4b454ba8ff71e4518426369a138a35afa908115612e96578791612e48575b5016978815612e3a57918793917f0f48d517989455cd80ed52427e80553e66f9b69fd5cee8e26bd1a1f9c364fba6938588528352808720600160ff19825416179055600983528087208a6001600160601b0360a01b825416179055600c8352818188205589857f0ea8abf839ca35019253cb6f18fd6d0b7e85717ae68e4ff10afa287e2d93a56c858451868152a3845f80516020612fa883398151915284835160018152a251908152a2612e0d575b50505050565b807f44db469a9abd53355e11b4214e0f0b3c1cc1324634bc429565c8dc8ff71400ca91a45f808080612e07565b905163c056695360e01b8152fd5b90506060813d8211612e8e575b81612e62606093836126b6565b81010312612e8a57612e8383612e7783612b07565b92612c82888201612b07565b505f612d58565b8680fd5b3d9150612e55565b83513d89823e3d90fd5b815163624a28a560e11b81528990fd5b8151635fab63c960e11b81528990fd5b845f52600460205260ff60405f20541615612cf057612ede90612ee4565b5f612cf0565b6001600160a01b03165f818152600460205260408082205460ff1615612f735782825260046020908152818320805460ff191690556009815281832080546001600160a01b0319169055600c815281832083905590515f80516020612fa883398151915292847f12e985bd633693a084a6311d32f5abc0d0f1f31c87af2de61bdc4f1547b824858280a28152a2565b51633dd1b30560e01b8152600490fd5b91908110156125d45760051b0190565b356001600160a01b0381168103611113579056febbe72b7d9dcb594ee398a4a617885aba53d833e2aad601c813ce9df99fdeb49ba2646970667358221220cc3c5829f288a7e810614fd483bc0553c23bba1cc4aff94ce9edfc1d381d044864736f6c63430008140033bbe72b7d9dcb594ee398a4a617885aba53d833e2aad601c813ce9df99fdeb49b0ea8abf839ca35019253cb6f18fd6d0b7e85717ae68e4ff10afa287e2d93a56c0f48d517989455cd80ed52427e80553e66f9b69fd5cee8e26bd1a1f9c364fba6000000000000000000000000bc6736d346a5ebc0debc997397912cd9b8fae10a