0 txs
0 calls
constructor
constructor(address factory)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
getAumAnnualFee
viewfunction getAumAnnualFee() view returns (uint256)
getBalances
viewfunction getBalances() view returns (uint256 amountX, uint256 amountY)
getCurrentRound
viewfunction getCurrentRound() view returns (uint256 round)
getCurrentTotalQueuedWithdrawal
viewfunction getCurrentTotalQueuedWithdrawal() view returns (uint256 totalQueuedShares)
getFactory
viewfunction getFactory() view returns (address)
getOperators
viewfunction getOperators() view returns (address defaultOperator, address operator)
getOracleX
purefunction getOracleX() pure returns (address oracleX)
getOracleY
purefunction getOracleY() pure returns (address oracleY)
getPair
purefunction getPair() pure returns (address)
getPrice
viewfunction getPrice() view returns (uint256 price)
getQueuedWithdrawal
viewfunction getQueuedWithdrawal(uint256 round, address user) view returns (uint256 shares)
getRange
viewfunction getRange() view returns (uint24 low, uint24 upper)
getRedeemableAmounts
viewfunction getRedeemableAmounts(uint256 round, address user) view returns (uint256 amountX, uint256 amountY)
getStrategy
viewfunction getStrategy() view returns (address)
getTokenX
purefunction getTokenX() pure returns (address)
getTokenY
purefunction getTokenY() pure returns (address)
getTotalQueuedWithdrawal
viewfunction getTotalQueuedWithdrawal(uint256 round) view returns (uint256 totalQueuedShares)
isDepositsPaused
viewfunction isDepositsPaused() view returns (bool paused)
isWhitelisted
viewfunction isWhitelisted(address user) view returns (bool whitelisted)
isWhitelistedOnly
viewfunction isWhitelistedOnly() view returns (bool whitelist)
name
viewfunction name() view returns (string)
previewAmounts
viewfunction previewAmounts(uint256 shares) view returns (uint256 amountX, uint256 amountY)
previewShares
viewfunction previewShares(uint256 amountX, uint256 amountY) view returns (uint256 shares, uint256 effectiveX, uint256 effectiveY)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
addToWhitelist
nonpayablefunction addToWhitelist(address[] addresses)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
cancelQueuedWithdrawal
nonpayablefunction cancelQueuedWithdrawal(uint256 shares) returns (uint256 round)
decreaseAllowance
nonpayablefunction decreaseAllowance(address spender, uint256 subtractedValue) returns (bool)
deposit
nonpayablefunction deposit(uint256 amountX, uint256 amountY) returns (uint256 shares, uint256 effectiveX, uint256 effectiveY)
depositNative
payablefunction depositNative(uint256 amountX, uint256 amountY) payable returns (uint256 shares, uint256 effectiveX, uint256 effectiveY)
emergencyWithdraw
nonpayablefunction emergencyWithdraw()
executeQueuedWithdrawals
nonpayablefunction executeQueuedWithdrawals()
increaseAllowance
nonpayablefunction increaseAllowance(address spender, uint256 addedValue) returns (bool)
initialize
nonpayablefunction initialize(string name, string symbol)
pauseDeposits
nonpayablefunction pauseDeposits()
queueWithdrawal
nonpayablefunction queueWithdrawal(uint256 shares, address recipient) returns (uint256 round)
recoverERC20
nonpayablefunction recoverERC20(address token, address recipient, uint256 amount)
redeemQueuedWithdrawal
nonpayablefunction redeemQueuedWithdrawal(uint256 round, address recipient) returns (uint256 amountX, uint256 amountY)
redeemQueuedWithdrawalNative
nonpayablefunction redeemQueuedWithdrawalNative(uint256 round, address recipient) returns (uint256 amountX, uint256 amountY)
removeFromWhitelist
nonpayablefunction removeFromWhitelist(address[] addresses)
resumeDeposits
nonpayablefunction resumeDeposits()
setEmergencyMode
nonpayablefunction setEmergencyMode()
setStrategy
nonpayablefunction setStrategy(address newStrategy)
setWhitelistState
nonpayablefunction setWhitelistState(bool state)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposited
event Deposited(address indexed user, uint256 amountX, uint256 amountY, uint256 shares)
DepositsPaused
event DepositsPaused()
DepositsResumed
event DepositsResumed()
EmergencyMode
event EmergencyMode()
EmergencyWithdrawal
event EmergencyWithdrawal(address indexed sender, uint256 shares, uint256 amountX, uint256 amountY)
Initialized
event Initialized(uint8 version)
Recovered
event Recovered(address token, address recipient, uint256 amount)
StrategySet
event StrategySet(address strategy)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
WhitelistAdded
event WhitelistAdded(address[] addresses)
WhitelistRemoved
event WhitelistRemoved(address[] addresses)
WhitelistStateChanged
event WhitelistStateChanged(bool state)
WithdrawalCancelled
event WithdrawalCancelled(address indexed sender, address indexed recipient, uint256 indexed round, uint256 shares)
WithdrawalExecuted
event WithdrawalExecuted(uint256 indexed round, uint256 totalQueuedQhares, uint256 amountX, uint256 amountY)
WithdrawalQueued
event WithdrawalQueued(address indexed sender, address indexed user, uint256 indexed round, uint256 shares)
WithdrawalRedeemed
event WithdrawalRedeemed(address indexed sender, address indexed recipient, uint256 indexed round, uint256 shares, uint256 amountX, uint256 amountY)
errors
BaseVault__AlreadyWhitelisted
error BaseVault__AlreadyWhitelisted(address user)
BaseVault__BurnMinShares
error BaseVault__BurnMinShares()
BaseVault__DepositsPaused
error BaseVault__DepositsPaused()
BaseVault__InvalidNativeAmount
error BaseVault__InvalidNativeAmount()
BaseVault__InvalidRecipient
error BaseVault__InvalidRecipient()
BaseVault__InvalidRound
error BaseVault__InvalidRound()
BaseVault__InvalidShares
error BaseVault__InvalidShares()
BaseVault__InvalidStrategy
error BaseVault__InvalidStrategy()
BaseVault__InvalidToken
error BaseVault__InvalidToken()
BaseVault__MaxSharesExceeded
error BaseVault__MaxSharesExceeded()
BaseVault__NativeTransferFailed
error BaseVault__NativeTransferFailed()
BaseVault__NoNativeToken
error BaseVault__NoNativeToken()
BaseVault__NoQueuedWithdrawal
error BaseVault__NoQueuedWithdrawal()
BaseVault__NotInEmergencyMode
error BaseVault__NotInEmergencyMode()
BaseVault__NotWhitelisted
error BaseVault__NotWhitelisted(address user)
BaseVault__OnlyFactory
error BaseVault__OnlyFactory()
BaseVault__OnlyStrategy
error BaseVault__OnlyStrategy()
BaseVault__OnlyWNative
error BaseVault__OnlyWNative()
BaseVault__SameStrategy
error BaseVault__SameStrategy()
BaseVault__SameWhitelistState
error BaseVault__SameWhitelistState()
BaseVault__Unauthorized
error BaseVault__Unauthorized()
BaseVault__ZeroAmount
error BaseVault__ZeroAmount()
BaseVault__ZeroShares
error BaseVault__ZeroShares()
OracleVault__InvalidPrice
error OracleVault__InvalidPrice()
OracleVault__StalePrice
error OracleVault__StalePrice()
Uint256x256Math__MulDivOverflow
error Uint256x256Math__MulDivOverflow()
Uint256x256Math__MulShiftOverflow
error Uint256x256Math__MulShiftOverflow()
creation bytecode
0x60c06040523480156200001157600080fd5b5060405162004a4538038062004a458339810160408190526200003491620000e2565b80806001600160a01b03166080816001600160a01b031681525050806001600160a01b031663719a08a36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200008e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b49190620000e2565b6001600160a01b031660a05250620001099050565b6001600160a01b0381168114620000df57600080fd5b50565b600060208284031215620000f557600080fd5b81516200010281620000c9565b9392505050565b60805160a05161489f620001a66000396000818161033c01528181610387015281816113a6015281816113ec0152818161202d01528181612073015281816120e601526133f30152600081816107e301528181610a9501528181610bf201528181610d0a01528181611692015281816117ca015281816118f601528181611e740152818161224c015281816124740152613281015261489f6000f3fe60806040526004361061032c5760003560e01c8063548db174116101a5578063a457c2d7116100ec578063cdaa70c411610095578063db2e21bc1161006f578063db2e21bc146109cc578063dd62ed3e146109e1578063e2bbb15814610a27578063f33467d414610a475761037c565b8063cdaa70c414610972578063d58457b214610987578063da10610c146109a75761037c565b8063c1f1b1b5116100c6578063c1f1b1b514610910578063c5a160d114610932578063cb026368146109525761037c565b8063a457c2d7146108b1578063a9059cbb146108d1578063b1260944146108f15761037c565b80638a061f0b1161014e5780639b85961f116101285780639b85961f146108565780639ca0ac3814610887578063a32bf5971461089c5761037c565b80638a061f0b1461080757806395d89b411461082c57806398d5fdca146108415761037c565b806370a082311161017f57806370a082311461077e5780637f649783146107b457806388cc58e4146107d45761037c565b8063548db1741461072b57806354d29c381461074b5780635a5757f91461076b5761037c565b80631b0aed2c11610274578063313ce5671161021d5780633af32abf116101f75780633af32abf1461068b5780634cd88b76146106ab5780634f9c8f9d146106cb578063534947ae146106f05761037c565b8063313ce5671461062457806333a100ca1461064b578063395093511461066b5761037c565b806323b872dd1161024e57806323b872dd146105b057806327042b84146105d057806327a099d8146105ef5761037c565b80631b0aed2c1461055b5780631c7764431461057b5780631df0bb8a146105905761037c565b8063085d0b83116102d6578063152c7c4e116102b0578063152c7c4e1461050757806318160ddd1461051c57806319fa7a151461053b5761037c565b8063085d0b83146104a2578063095ea7b3146104b75780631171bda9146104e75761037c565b806305e8746d1161030757806305e8746d1461042957806306fdde031461046257806307da0603146104845761037c565b8062113e08146103c557806302191980146103f457806303c16212146104095761037c565b3661037c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037a5760405163754ed24960e01b815260040160405180910390fd5b005b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037a5760405163754ed24960e01b815260040160405180910390fd5b3480156103d157600080fd5b506103da610a67565b604080519283526020830191909152015b60405180910390f35b34801561040057600080fd5b5061037a610a8a565b34801561041557600080fd5b506103da610424366004614145565b610b23565b34801561043557600080fd5b503660011981013560f01c90036014013560601c5b6040516001600160a01b0390911681526020016103eb565b34801561046e57600080fd5b50610477610b55565b6040516103eb919061418a565b34801561049057600080fd5b506097546001600160a01b031661044a565b3480156104ae57600080fd5b5061037a610be7565b3480156104c357600080fd5b506104d76104d23660046141d2565b610cdd565b60405190151581526020016103eb565b3480156104f357600080fd5b5061037a6105023660046141fe565b610cf7565b34801561051357600080fd5b5061037a611140565b34801561052857600080fd5b506035545b6040519081526020016103eb565b34801561054757600080fd5b506103da61055636600461423f565b611391565b34801561056757600080fd5b5061052d610576366004614145565b6114cf565b34801561058757600080fd5b5061052d611602565b34801561059c57600080fd5b5061037a6105ab36600461427d565b611687565b3480156105bc57600080fd5b506104d76105cb3660046141fe565b611787565b3480156105dc57600080fd5b50609754600160a01b900460ff166104d7565b3480156105fb57600080fd5b506106046117ab565b604080516001600160a01b039384168152929091166020830152016103eb565b34801561063057600080fd5b506106396118cc565b60405160ff90911681526020016103eb565b34801561065757600080fd5b5061037a6106663660046142a1565b6118eb565b34801561067757600080fd5b506104d76106863660046141d2565b611c8c565b34801561069757600080fd5b506104d76106a63660046142a1565b611ccb565b3480156106b757600080fd5b5061037a6106c6366004614375565b611d01565b3480156106d757600080fd5b503660011981013560f01c90036052013560601c61044a565b3480156106fc57600080fd5b5061071061070b3660046143d9565b611e3d565b604080519384526020840192909252908201526060016103eb565b34801561073757600080fd5b5061037a6107463660046143fb565b611e69565b34801561075757600080fd5b5061052d61076636600461423f565b611fd4565b6107106107793660046143d9565b612016565b34801561078a57600080fd5b5061052d6107993660046142a1565b6001600160a01b031660009081526033602052604090205490565b3480156107c057600080fd5b5061037a6107cf3660046143fb565b612241565b3480156107e057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061044a565b34801561081357600080fd5b503660011981013560f01c9003603e013560601c61044a565b34801561083857600080fd5b506104776123c6565b34801561084d57600080fd5b5061052d6123d5565b34801561086257600080fd5b5061086b6123df565b6040805162ffffff9384168152929091166020830152016103eb565b34801561089357600080fd5b5061037a612469565b3480156108a857600080fd5b5061052d6124fa565b3480156108bd57600080fd5b506104d76108cc3660046141d2565b61250c565b3480156108dd57600080fd5b506104d76108ec3660046141d2565b6125b6565b3480156108fd57600080fd5b50609754600160a81b900460ff166104d7565b34801561091c57600080fd5b503660011981013560f01c90033560601c61044a565b34801561093e57600080fd5b506103da61094d36600461423f565b6125c4565b34801561095e57600080fd5b5061052d61096d366004614145565b61265b565b34801561097e57600080fd5b5061052d612689565b34801561099357600080fd5b5061052d6109a236600461423f565b6126c4565b3480156109b357600080fd5b503660011981013560f01c90036028013560601c61044a565b3480156109d857600080fd5b5061037a6127fc565b3480156109ed57600080fd5b5061052d6109fc3660046144ad565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b348015610a3357600080fd5b50610710610a423660046143d9565b61293b565b348015610a5357600080fd5b506103da610a6236600461423f565b6129bd565b6097546000908190610a81906001600160a01b0316612a45565b90939092509050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ad3576040516369b562ff60e11b815260040160405180910390fd5b610adb612bd0565b6097805460ff60a01b1916600160a01b1790556040517fdeeb69430b7153361c25d630947115165636e6a723fa8daea4b0de34b324745990600090a1610b216001606555565b565b6097546000908190610b47906001600160a01b031684610b4260355490565b612c31565b91509150915091565b905090565b606060368054610b64906144db565b80601f0160208091040260200160405190810160405280929190818152602001828054610b90906144db565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c30576040516369b562ff60e11b815260040160405180910390fd5b610c38612bd0565b609760009054906101000a90046001600160a01b03166001600160a01b031663853828b66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8857600080fd5b505af1158015610c9c573d6000803e3d6000fd5b50505050610caa6000612c9b565b6040517f185079b91d6fc95ee30b386eaca3291e9bc2783621ef973a33d1450c41b6acf790600090a1610b216001606555565b600033610ceb818585612d07565b60019150505b92915050565b610cff612bd0565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d48576040516369b562ff60e11b815260040160405180910390fd5b6097546001600160a01b03163660011981013560f01c90036014013560601c6001600160a01b0316846001600160a01b0316148015610e0b57506001600160a01b0381161580610e0b575081609a54610da1919061452c565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610de5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e099190614544565b105b15610e295760405163b79333bb60e01b815260040160405180910390fd5b3660011981013560f01c90036028013560601c6001600160a01b038516148015610ed757506001600160a01b0381161580610ed7575081609b54610e6d919061452c565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190614544565b105b15610ef55760405163b79333bb60e01b815260040160405180910390fd5b6001600160a01b038416301415610f98576000610f10612689565b6001600160a01b038316600090815260336020526040902054610f33919061455d565b9050610f416006600a614658565b610f4b908461452c565b30600090815260336020526040902054610f6690839061452c565b1015610f85576040516328165e7760e01b815260040160405180910390fd5b8015610f9657610f96823083612e2b565b505b610fac6001600160a01b0385168484613007565b6001600160a01b0381161580156110c75750609a543660011981013560f01c90036014013560601c6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e9190614544565b10806110c75750609b543660011981013560f01c90036028013560601c6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156110a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c59190614544565b105b156110e55760405163b79333bb60e01b815260040160405180910390fd5b604080516001600160a01b038087168252851660208201529081018390527ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6489060600160405180910390a15061113b6001606555565b505050565b611148612bd0565b6097546001600160a01b031633811461117457604051630639d2a760e11b815260040160405180910390fd5b6099546000906111869060019061455d565b905060006099828154811061119d5761119d614667565b9060005260206000209060030201905060008160010154905080600014156111c85750505050611387565b6111d28482613097565b6099805460010181556000908152609a54609b549091823660011981013560f01c90036014013560601c6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190614544565b611270919061455d565b90506000823660011981013560f01c90036028013560601c6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f29190614544565b6112fc919061455d565b9050611308828561452c565b609a55611315818461452c565b609b556fffffffffffffffffffffffffffffffff818116600160801b02908316176002870155604080518681526020810184905290810182905287907f27cf0c9d33856fac5d46a73a8569c7ebf6470ffc7631d277fb593e62bafe3baf9060600160405180910390a250505050505050505b610b216001606555565b60008061139c612bd0565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90036014013560601c1480159061142257506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90036028013560601c14155b15611440576040516330fcd9e760e01b815260040160405180910390fd5b826001600160a01b038116611468576040516302b70c7960e21b815260040160405180910390fd5b61147285856131cb565b9093509150821561149a5761149a3660011981013560f01c90036014013560601c85856133f1565b81156114bd576114bd3660011981013560f01c90036028013560601c85846133f1565b506114c86001606555565b9250929050565b60006114d9612bd0565b81806114f85760405163ebca017960e01b815260040160405180910390fd5b6097546001600160a01b0316806115225760405163629c918560e01b815260040160405180910390fd5b6099546115319060019061455d565b925060006099848154811061154857611548614667565b600091825260208083203384526003909202909101908190526040909120549091508086111561158b57604051632979b43f60e11b815260040160405180910390fd5b336000818152602084905260409020878303905560018301805488900390556115b690849088612e2b565b6040518681528590339081907fc0b6b4b152b639767dd4ffd28f2a0f05b4ffd672264a6c4d34447185a03cc5179060200160405180910390a4505050506115fd6001606555565b919050565b6097546000906001600160a01b0316801561167e57806001600160a01b0316631c7764436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611655573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116799190614544565b611681565b60005b91505090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d0576040516369b562ff60e11b815260040160405180910390fd5b6116d8612bd0565b60975460ff600160a81b909104161515811515141561170a57604051637b62605b60e01b815260040160405180910390fd5b60978054821515600160a81b027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9091161790556040517f1764936847e7a31cd617c631a4758379574d9d75b90f32d133497a5dfe0f78649061177290831515815260200190565b60405180910390a16117846001606555565b50565b6000336117958582856134a3565b6117a0858585612e2b565b506001949350505050565b6000806000609760009054906101000a90046001600160a01b031690507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b80ec4c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611826573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184a919061467d565b92506001600160a01b038116156118c257806001600160a01b031663e7f43c686040518163ffffffff1660e01b8152600401602060405180830381865afa158015611899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bd919061467d565b6118c5565b60005b9150509091565b6000610b5060063660011981013560f01c9003603d013560f81c61469a565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611934576040516369b562ff60e11b815260040160405180910390fd5b61193c612bd0565b6097546001600160a01b0390811690821681141561196d5760405163e4a1ddf760e01b815260040160405180910390fd5b306001600160a01b0316826001600160a01b0316638d928af86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d9919061467d565b6001600160a01b0316141580611a7157503660011981013560f01c90033560601c6001600160a01b0316826001600160a01b031663c1f1b1b56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a65919061467d565b6001600160a01b031614155b80611b0157503660011981013560f01c90036014013560601c6001600160a01b0316826001600160a01b03166305e8746d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af5919061467d565b6001600160a01b031614155b80611b9157503660011981013560f01c90036028013560601c6001600160a01b0316826001600160a01b031663da10610c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b85919061467d565b6001600160a01b031614155b15611baf5760405163629c918560e01b815260040160405180910390fd5b6001600160a01b03811615611c1257806001600160a01b031663853828b66040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bf957600080fd5b505af1158015611c0d573d6000803e3d6000fd5b505050505b600080611c1f6000612a45565b90925090508115611c5357611c5384833660011981013560f01c90036014013560601c5b6001600160a01b03169190613007565b8015611c7657611c7684823660011981013560f01c90036028013560601c611c43565b611c7f84612c9b565b5050506117846001606555565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909190610ceb9082908690611cc690879061452c565b612d07565b609754600090600160a81b900460ff161580610cf15750506001600160a01b031660009081526098602052604090205460ff1690565b600054610100900460ff1615808015611d215750600054600160ff909116105b80611d3b5750303b158015611d3b575060005460ff166001145b611db25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6000805460ff191660011790558015611dd5576000805461ff0019166101001790555b611ddf838361352f565b611de76135a8565b609980546001018155600052801561113b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60975460009081908190611e5b906001600160a01b0316868661361b565b9250925092505b9250925092565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611eb2576040516369b562ff60e11b815260040160405180910390fd5b611eba612bd0565b60005b8151811015611fa45760986000838381518110611edc57611edc614667565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16611f4a57818181518110611f1957611f19614667565b6020026020010151604051630e16ba1d60e31b8152600401611da991906001600160a01b0391909116815260200190565b600060986000848481518110611f6257611f62614667565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055611f9d816146bf565b9050611ebd565b507f1d474f57a5c483b47a8bf6006e39086f96dd040a00cb348e22f80a4ca2c6f2228160405161177291906146da565b600060998381548110611fe957611fe9614667565b600091825260208083206001600160a01b0386168452600390920290910190526040902054905092915050565b6000806000612023612bd0565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90036014013560601c148015906120a957506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163660011981013560f01c90036028013560601c14155b156120c7576040516330fcd9e760e01b815260040160405180910390fd5b3660011981013560f01c90036014810135606090811c9160280135901c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b038116831480801561211e5750348914155b806121325750801580156121325750348814155b1561215057604051634314b40960e01b815260040160405180910390fd5b600061215c8a8a6136d3565b919a509850965090506000821561218f575086861561218a5761218a6001600160a01b03861633848a613860565b6121ad565b87156121aa576121aa6001600160a01b03871633848b613860565b50855b801561221d57836001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121ee57600080fd5b505af1158015612202573d6000803e3d6000fd5b5061221d935050506001600160a01b03861690508383613007565b803411156122315761223133823403613898565b505050505050611e626001606555565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461228a576040516369b562ff60e11b815260040160405180910390fd5b612292612bd0565b60005b815181101561239657609860008383815181106122b4576122b4614667565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561233c578181815181106122f2576122f2614667565b60200260200101516040517fff3fda39000000000000000000000000000000000000000000000000000000008152600401611da991906001600160a01b0391909116815260200190565b60016098600084848151811061235457612354614667565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905561238f816146bf565b9050612295565b507ff74f148a4f930a0f67a2c33ba932a14e3e91b4e6468f21e545932fd8251115388160405161177291906146da565b606060378054610b64906144db565b6000610b5061390c565b60975460009081906001600160a01b0316801561245c57806001600160a01b0316639b85961f6040518163ffffffff1660e01b81526004016040805180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612457919061473a565b612460565b6000805b92509250509091565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146124b2576040516369b562ff60e11b815260040160405180910390fd5b6124ba612bd0565b6097805460ff60a01b191690556040517f1ba9bbaac2497ed7a7c42445bdab75d210756e8147f5dc1796858f05d17d04b190600090a1610b216001606555565b609954600090610b509060019061455d565b3360008181526034602090815260408083206001600160a01b0387168452909152812054909190838110156125a95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401611da9565b6117a08286868403612d07565b600033610ceb818585612e2b565b6000806000609985815481106125dc576125dc614667565b600091825260208083206002600390930201918201546001600160a01b03881684529082905260409092205460018201549193506fffffffffffffffffffffffffffffffff80841693600160801b90041691801561264f5761263f8483836139cc565b965061264c8383836139cc565b95505b50505050509250929050565b60006099828154811061267057612670614667565b9060005260206000209060030201600101549050919050565b609980546000919061269d9060019061455d565b815481106126ad576126ad614667565b906000526020600020906003020160010154905090565b60006126ce612bd0565b816001600160a01b0381166126f6576040516302b70c7960e21b815260040160405180910390fd5b83806127155760405163ebca017960e01b815260040160405180910390fd5b6097546001600160a01b03168061273f5760405163629c918560e01b815260040160405180910390fd5b61274a338288612e2b565b6099546127599060019061455d565b935060006099858154811061277057612770614667565b9060005260206000209060030201905086816001016000828254612794919061452c565b90915550506001600160a01b0386166000818152602083815260409182902080548b019055905189815287929133917f73da1edbee7a0ca003c721a21da1720c9f0128489276764d733e2fd53fda7f04910160405180910390a450505050610cf16001606555565b612804612bd0565b6097546001600160a01b03161561282e576040516394fd57bf60e01b815260040160405180910390fd5b336000908152603360205260409020548061285c5760405163ebca017960e01b815260040160405180910390fd5b6000806128696000612a45565b91509150600061287860355490565b905060006128878486846139cc565b905060006128968487856139cc565b90506128a23387613097565b81156128c5576128c533833660011981013560f01c90036014013560601c611c43565b80156128e8576128e833823660011981013560f01c90036028013560601c611c43565b604080518781526020810184905290810182905233907f5e51ee1d526b1e287667d5b5aa0f1595afa8e91197fb257f8351274f8fca50be9060600160405180910390a2505050505050610b216001606555565b6000806000612948612bd0565b600061295486866136d3565b919650945092509050821561298e5761298e3382853660011981013560f01c90036014013560601c5b6001600160a01b0316929190613860565b81156129b2576129b23382843660011981013560f01c90036028013560601c61297d565b50611e626001606555565b6000806129c8612bd0565b826001600160a01b0381166129f0576040516302b70c7960e21b815260040160405180910390fd5b6129fa85856131cb565b90935091508215612a2257612a2284843660011981013560f01c90036014013560601c611c43565b81156114bd576114bd84833660011981013560f01c90036028013560601c611c43565b6000806001600160a01b03831615612abc57826001600160a01b031662113e086040518163ffffffff1660e01b81526004016040805180830381865afa158015612a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab7919061476d565b610b47565b609a543660011981013560f01c90036014013560601c6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3c9190614544565b612b46919061455d565b609b543660011981013560f01c90036028013560601c6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612ba2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc69190614544565b610b47919061455d565b60026065541415612c235760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611da9565b6002606555565b6001606555565b60008083612c4457506000905080612c93565b82841115612c655760405163557452c160e01b815260040160405180910390fd5b600080612c7187612a45565b9092509050612c818287876139cc565b9350612c8e8187876139cc565b925050505b935093915050565b609780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fe70d79dad95c835bdd87e9cf4665651c9e5abb3b756e4fd2bf45f29c95c3aa409060200160405180910390a150565b6001600160a01b038316612d695760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401611da9565b6001600160a01b038216612dca5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401611da9565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ea75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401611da9565b6001600160a01b038216612f095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401611da9565b6001600160a01b03831660009081526033602052604090205481811015612f985760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401611da9565b6001600160a01b0380851660008181526033602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ff89086815260200190565b60405180910390a35b50505050565b6040516001600160a01b03831660248201526044810182905261113b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526139f6565b6001600160a01b0382166130f75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401611da9565b6001600160a01b0382166000908152603360205260409020548181101561316b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401611da9565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600080600060016099805490506131e2919061455d565b905080851061320457604051632569b20f60e11b815260040160405180910390fd5b60006099868154811061321957613219614667565b600091825260208083206001600160a01b03891684526003909202909101908190526040909120549091508061326257604051631d4e61bb60e11b815260040160405180910390fd5b6001600160a01b03861633148015906132a45750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156132c257604051637b9086ef60e01b815260040160405180910390fd5b60018201546001600160a01b0387166000908152602084905260408120556002830154613302906fffffffffffffffffffffffffffffffff1683836139cc565b600284015490965061332e90600160801b90046fffffffffffffffffffffffffffffffff1683836139cc565b94508515801561333c575084155b1561335a57604051632837d7d960e11b815260040160405180910390fd5b85156133785785609a6000828254613372919061455d565b90915550505b84156133965784609b6000828254613390919061455d565b90915550505b604080518381526020810188905290810186905288906001600160a01b0389169033907ff7bca8bc4482b10f8c441e0662577734ab29da4c9ff67cfe1592a5d1a8db062a9060600160405180910390a4505050509250929050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03848116908216141561348f57604051632e1a7d4d60e01b8152600481018390526001600160a01b03821690632e1a7d4d90602401600060405180830381600087803b15801561346857600080fd5b505af115801561347c573d6000803e3d6000fd5b5050505061348a8383613898565b613001565b6130016001600160a01b0385168484613007565b6001600160a01b03838116600090815260346020908152604080832093861683529290522054600019811461300157818110156135225760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401611da9565b6130018484848403612d07565b600054610100900460ff1661359a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611da9565b6135a48282613adb565b5050565b600054610100900460ff166136135760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611da9565b610b21613b6d565b600080808415801561362b575083155b1561363e575060009150819050806136ca565b600061364861390c565b9050600061365560355490565b90506000613664838989613bd8565b905081613691576136776006600a614658565b6136819082614791565b88889550955095505050506136ca565b60008061369d8b612a45565b9150915060006136ae868484613bd8565b90506136bb8486836139cc565b98508a97508996505050505050505b93509350939050565b600080600080609760149054906101000a900460ff16156137075760405163572e1c0f60e11b815260040160405180910390fd5b609754600160a81b900460ff16801561373057503360009081526098602052604090205460ff16155b1561375057604051630e16ba1d60e31b8152336004820152602401611da9565b8515801561375c575084155b1561377a57604051632837d7d960e11b815260040160405180910390fd5b6097546001600160a01b03169350836137a65760405163629c918560e01b815260040160405180910390fd5b6137b184878761361b565b91945092509050826137d65760405163ebca017960e01b815260040160405180910390fd5b60355461380a576137e96006600a614658565b6137f3908461455d565b925061380a306138056006600a614658565b613bfc565b6138143384613bfc565b604080518381526020810183905290810184905233907f91ede45f04a37a7c170f5c1207df3b6bc748dc1e04ad5e917a241d0f52feada39060600160405180910390a292959194509250565b6040516001600160a01b03808516602483015283166044820152606481018290526130019085906323b872dd60e01b90608401613033565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146138e5576040519150601f19603f3d011682016040523d82523d6000602084013e6138ea565b606091505b505090508061113b57604051633935f08760e01b815260040160405180910390fd5b6000803660011981013560f01c9003603d013560f81c61392d90600a614658565b6139483660011981013560f01c9003603e013560601c613cbd565b6139529190614791565b905060003660011981013560f01c9003603c013560f81c61397490600a614658565b61398f3660011981013560f01c90036052013560601c613cbd565b6139999190614791565b90506139a782608083613da8565b9250826139c7576040516309f0f20160e41b815260040160405180910390fd5b505090565b60008060006139db8686613dd2565b915091506139ec8686868585613df1565b9695505050505050565b6000613a4b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613e9a9092919063ffffffff16565b80519091501561113b5780806020019051810190613a6991906147b0565b61113b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611da9565b600054610100900460ff16613b465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611da9565b8151613b599060369060208501906140ac565b50805161113b9060379060208401906140ac565b600054610100900460ff16612c2a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401611da9565b600080613be785856080613eb1565b9050613bf3838261452c565b95945050505050565b6001600160a01b038216613c525760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401611da9565b8060356000828254613c64919061452c565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6000806000836001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d2491906147e7565b509350509250508060001480613d45575042613d43826201518061452c565b105b15613d6357604051630ee735cf60e11b815260040160405180910390fd5b600082131580613d8357506bffffffffffffffffffffffff801682935083115b15613da1576040516309f0f20160e41b815260040160405180910390fd5b5050919050565b600060ff831684811b9061ffff6101008290031686901c906139ec9087906001901b868585613df1565b6000806000198385098385029250828110838203039150509250929050565b600081613e0f57838381613e0757613e07614837565b049050613bf3565b838210613e2f576040516313eae71560e01b815260040160405180910390fd5b600084868809600186198101871660008190038190049091018683119095039490940294038390049390931760029290940460038102831880820284030280820284030280820284030280820284030280820284030290810290920390910292909202949350505050565b6060613ea98484600085613f1f565b949350505050565b6000806000613ec08686613dd2565b9150915081600014613ed6578360ff1682901c92505b8015613f1657600160ff85161b8110613f0257604051638e471a8960e01b815260040160405180910390fd5b8360ff166101000361ffff1681901b830192505b50509392505050565b606082471015613f975760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401611da9565b600080866001600160a01b03168587604051613fb3919061484d565b60006040518083038185875af1925050503d8060008114613ff0576040519150601f19603f3d011682016040523d82523d6000602084013e613ff5565b606091505b509150915061400687838387614011565b979650505050505050565b6060831561407d578251614076576001600160a01b0385163b6140765760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611da9565b5081613ea9565b613ea983838151156140925781518083602001fd5b8060405162461bcd60e51b8152600401611da9919061418a565b8280546140b8906144db565b90600052602060002090601f0160209004810192826140da5760008555614120565b82601f106140f357805160ff1916838001178555614120565b82800160010185558215614120579182015b82811115614120578251825591602001919060010190614105565b5061412c929150614130565b5090565b5b8082111561412c5760008155600101614131565b60006020828403121561415757600080fd5b5035919050565b60005b83811015614179578181015183820152602001614161565b838111156130015750506000910152565b60208152600082518060208401526141a981604085016020870161415e565b601f01601f19169190910160400192915050565b6001600160a01b038116811461178457600080fd5b600080604083850312156141e557600080fd5b82356141f0816141bd565b946020939093013593505050565b60008060006060848603121561421357600080fd5b833561421e816141bd565b9250602084013561422e816141bd565b929592945050506040919091013590565b6000806040838503121561425257600080fd5b823591506020830135614264816141bd565b809150509250929050565b801515811461178457600080fd5b60006020828403121561428f57600080fd5b813561429a8161426f565b9392505050565b6000602082840312156142b357600080fd5b813561429a816141bd565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156142fd576142fd6142be565b604052919050565b600082601f83011261431657600080fd5b813567ffffffffffffffff811115614330576143306142be565b614343601f8201601f19166020016142d4565b81815284602083860101111561435857600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561438857600080fd5b823567ffffffffffffffff808211156143a057600080fd5b6143ac86838701614305565b935060208501359150808211156143c257600080fd5b506143cf85828601614305565b9150509250929050565b600080604083850312156143ec57600080fd5b50508035926020909101359150565b6000602080838503121561440e57600080fd5b823567ffffffffffffffff8082111561442657600080fd5b818501915085601f83011261443a57600080fd5b81358181111561444c5761444c6142be565b8060051b915061445d8483016142d4565b818152918301840191848101908884111561447757600080fd5b938501935b838510156144a15784359250614491836141bd565b828252938501939085019061447c565b98975050505050505050565b600080604083850312156144c057600080fd5b82356144cb816141bd565b91506020830135614264816141bd565b600181811c908216806144ef57607f821691505b6020821081141561451057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561453f5761453f614516565b500190565b60006020828403121561455657600080fd5b5051919050565b60008282101561456f5761456f614516565b500390565b600181815b808511156145af57816000190482111561459557614595614516565b808516156145a257918102915b93841c9390800290614579565b509250929050565b6000826145c657506001610cf1565b816145d357506000610cf1565b81600181146145e957600281146145f35761460f565b6001915050610cf1565b60ff84111561460457614604614516565b50506001821b610cf1565b5060208310610133831016604e8410600b8410161715614632575081810a610cf1565b61463c8383614574565b806000190482111561465057614650614516565b029392505050565b600061429a60ff8416836145b7565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561468f57600080fd5b815161429a816141bd565b600060ff821660ff84168060ff038211156146b7576146b7614516565b019392505050565b60006000198214156146d3576146d3614516565b5060010190565b6020808252825182820181905260009190848201906040850190845b8181101561471b5783516001600160a01b0316835292840192918401916001016146f6565b50909695505050505050565b805162ffffff811681146115fd57600080fd5b6000806040838503121561474d57600080fd5b61475683614727565b915061476460208401614727565b90509250929050565b6000806040838503121561478057600080fd5b505080516020909101519092909150565b60008160001904831182151516156147ab576147ab614516565b500290565b6000602082840312156147c257600080fd5b815161429a8161426f565b805169ffffffffffffffffffff811681146115fd57600080fd5b600080600080600060a086880312156147ff57600080fd5b614808866147cd565b945060208601519350604086015192506060860151915061482b608087016147cd565b90509295509295909350565b634e487b7160e01b600052601260045260246000fd5b6000825161485f81846020870161415e565b919091019291505056fea26469706673582212208cf322b8cd302a98b636e81944c31ac862ac08772cadbddadda2c8a475c6f7f164736f6c634300080a00330000000000000000000000008cce20d17ab9c6f60574e678ca96711d907fd08c