0 txs
0 calls
constructor
constructor()
functions
COVERAGE_MANAGER_ROLE
viewfunction COVERAGE_MANAGER_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getDeficitOffset
viewfunction getDeficitOffset(address reserve) view returns (uint256)
getPendingDeficit
viewfunction getPendingDeficit(address reserve) view returns (uint256)
getReserveSlashingConfig
viewfunction getReserveSlashingConfig(address reserve, address umbrellaStake) view returns (tuple)
getReserveSlashingConfigs
viewfunction getReserveSlashingConfigs(address reserve) view returns (tuple[])
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getStakeTokenData
viewfunction getStakeTokenData(address umbrellaStake) view returns (tuple)
getStkTokens
viewfunction getStkTokens() view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isReserveSlashable
viewfunction isReserveSlashable(address reserve) view returns (bool, uint256)
isUmbrellaStkToken
viewfunction isUmbrellaStkToken(address umbrellaStake) view returns (bool)
latestUnderlyingAnswer
viewfunction latestUnderlyingAnswer(address umbrellaStake) view returns (int256)
maxRescue
purefunction maxRescue(address) pure returns (uint256)
PAUSE_GUARDIAN_ROLE
viewfunction PAUSE_GUARDIAN_ROLE() view returns (bytes32)
POOL_ADDRESSES_PROVIDER
viewfunction POOL_ADDRESSES_PROVIDER() view returns (address)
POOL
viewfunction POOL() view returns (address)
predictStakeTokensAddresses
viewfunction predictStakeTokensAddresses(tuple[] stakeSetups) view returns (address[])
RESCUE_GUARDIAN_ROLE
viewfunction RESCUE_GUARDIAN_ROLE() view returns (bytes32)
SLASHED_FUNDS_RECIPIENT
viewfunction SLASHED_FUNDS_RECIPIENT() view returns (address)
SUPER_ADMIN
viewfunction SUPER_ADMIN() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenForDeficitCoverage
viewfunction tokenForDeficitCoverage(address reserve) view returns (address)
TRANSPARENT_PROXY_FACTORY
viewfunction TRANSPARENT_PROXY_FACTORY() view returns (address)
UMBRELLA_STAKE_TOKEN_IMPL
viewfunction UMBRELLA_STAKE_TOKEN_IMPL() view returns (address)
coverDeficitOffset
nonpayablefunction coverDeficitOffset(address reserve, uint256 amount) returns (uint256)
coverPendingDeficit
nonpayablefunction coverPendingDeficit(address reserve, uint256 amount) returns (uint256)
coverReserveDeficit
nonpayablefunction coverReserveDeficit(address reserve, uint256 amount) returns (uint256)
createStakeTokens
nonpayablefunction createStakeTokens(tuple[] stakeSetups) returns (address[])
emergencyEtherTransfer
nonpayablefunction emergencyEtherTransfer(address to, uint256 amount)
emergencyEtherTransferStk
nonpayablefunction emergencyEtherTransferStk(address umbrellaStake, address to, uint256 amount)
emergencyTokenTransfer
nonpayablefunction emergencyTokenTransfer(address erc20Token, address to, uint256 amount)
emergencyTokenTransferStk
nonpayablefunction emergencyTokenTransferStk(address umbrellaStake, address erc20Token, address to, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address pool, address governance, address slashedFundsRecipient, address umbrellaStakeTokenImpl, address transparentProxyFactory)
pauseStk
nonpayablefunction pauseStk(address umbrellaStake)
removeSlashingConfigs
nonpayablefunction removeSlashingConfigs(tuple[] removalPairs)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCooldownStk
nonpayablefunction setCooldownStk(tuple[] cooldownConfigs)
setDeficitOffset
nonpayablefunction setDeficitOffset(address reserve, uint256 newDeficitOffset)
setUnstakeWindowStk
nonpayablefunction setUnstakeWindowStk(tuple[] unstakeWindowConfigs)
slash
nonpayablefunction slash(address reserve) returns (uint256)
unpauseStk
nonpayablefunction unpauseStk(address umbrellaStake)
updateSlashingConfigs
nonpayablefunction updateSlashingConfigs(tuple[] slashingConfigs)
events
DeficitOffsetChanged
event DeficitOffsetChanged(address indexed reserve, uint256 newDeficitOffset)
DeficitOffsetCovered
event DeficitOffsetCovered(address indexed reserve, uint256 amount)
ERC20Rescued
event ERC20Rescued(address indexed caller, address indexed token, address indexed to, uint256 amount)
Initialized
event Initialized(uint64 version)
NativeTokensRescued
event NativeTokensRescued(address indexed caller, address indexed to, uint256 amount)
PendingDeficitChanged
event PendingDeficitChanged(address indexed reserve, uint256 newPendingDeficit)
PendingDeficitCovered
event PendingDeficitCovered(address indexed reserve, uint256 amount)
ReserveDeficitCovered
event ReserveDeficitCovered(address indexed reserve, uint256 amount)
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)
SlashingConfigurationChanged
event SlashingConfigurationChanged(address indexed reserve, address indexed umbrellaStake, uint256 liquidationFee, address umbrellaStakeUnderlyingOracle)
SlashingConfigurationRemoved
event SlashingConfigurationRemoved(address indexed reserve, address indexed umbrellaStake)
StakeTokenSlashed
event StakeTokenSlashed(address indexed reserve, address indexed umbrellaStake, uint256 amount, uint256 fee)
UmbrellaStakeTokenCreated
event UmbrellaStakeTokenCreated(address indexed umbrellaStake, address indexed underlying, string name, string symbol)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
CannotSlash
error CannotSlash()
ConfigurationHasNotBeenSet
error ConfigurationHasNotBeenSet()
ConfigurationNotExist
error ConfigurationNotExist()
EthTransferFailed
error EthTransferFailed()
InvalidInitialization
error InvalidInitialization()
InvalidLiquidationFee
error InvalidLiquidationFee()
InvalidNumberOfDecimals
error InvalidNumberOfDecimals()
InvalidOraclePrice
error InvalidOraclePrice()
InvalidReserve
error InvalidReserve()
InvalidStakeToken
error InvalidStakeToken()
NotImplemented
error NotImplemented()
NotInitializing
error NotInitializing()
OnlyRescueGuardian
error OnlyRescueGuardian()
ReserveCoverageNotSetup
error ReserveCoverageNotSetup()
ReserveIsConfigured
error ReserveIsConfigured()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TooMuchDeficitOffsetReduction
error TooMuchDeficitOffsetReduction()
UmbrellaStakeAlreadySetForAnotherReserve
error UmbrellaStakeAlreadySetForAnotherReserve()
ZeroAddress
error ZeroAddress()
ZeroDeficitToCover
error ZeroDeficitToCover()
creation bytecode
0x6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b613f90806100d65f395ff3fe608060405234801561000f575f5ffd5b5060043610610276575f3560e01c80637535d24611610156578063b1f396c5116100ca578063de37677611610084578063de37677614610601578063e4fca9c014610609578063e8695c9d1461061c578063eed88b8d14610630578063f305644514610643578063fff4845514610656575f5ffd5b8063b1f396c51461058e578063bc0cf6a6146105a1578063c4e0c639146105b4578063c96be4cb146105c7578063d547741f146105da578063d7408715146105ed575f5ffd5b806392f301a21161011b57806392f301a2146104aa578063a1c74e1f146104b2578063a217fddf146104c5578063a3d5b255146104cc578063a6307a0a146104df578063acc58769146104f2575f5ffd5b80637535d246146104475780637612626c1461044f5780637c7c7c3c1461046f578063828f93541461047757806391d1485414610497575f5ffd5b8063423ce3c4116101ed57806355520a71116101b257806355520a71146103d55780636421f1b8146103e8578063676f30be146103fb5780636cf980361461040e5780636d15760414610421578063711e932214610434575f5ffd5b8063423ce3c41461037f5780634509e6ae14610392578063478f9143146103a65780634ccc2800146103ae5780635084c352146103c2575f5ffd5b8063248a9ca31161023e578063248a9ca3146103185780632f2ff15d1461032b578063311cd5a41461033e578063321b45391461034657806336568abe146103595780633a494a501461036c575f5ffd5b806301ffc9a71461027a57806304ca9470146102a257806305046089146102c25780631459457a146102e25780631e5e18a7146102f7575b5f5ffd5b61028d61028836600461363f565b610680565b60405190151581526020015b60405180910390f35b6102aa6106b6565b6040516001600160a01b039091168152602001610299565b6102d56102d036600461367a565b6106d8565b60405161029991906136b1565b6102f56102f03660046136e0565b610785565b005b61030a61030536600461374d565b610899565b604051908152602001610299565b61030a610326366004613777565b610929565b6102f561033936600461378e565b610949565b6102aa61096b565b61030a61035436600461374d565b61098d565b6102f561036736600461378e565b610acd565b6102f561037a3660046137b1565b610b05565b61030a61038d36600461374d565b610b94565b61030a5f516020613efb5f395f51905f5281565b6102aa610cd5565b61030a5f516020613edb5f395f51905f5281565b6102f56103d03660046137cc565b610ce9565b61030a6103e33660046137b1565b610d25565b6102f56103f636600461383b565b610d4e565b6102f56104093660046138c9565b610df7565b6102f561041c3660046137b1565b610f96565b61028d61042f3660046137b1565b61100b565b61030a6104423660046137b1565b611015565b6102aa61103e565b61046261045d366004613907565b611060565b6040516102999190613966565b6102aa611117565b61048a6104853660046137b1565b61112b565b60405161029991906139b1565b61028d6104a536600461378e565b611246565b6102aa61127c565b61030a6104c03660046137b1565b611290565b61030a5f81565b6102f56104da366004613a15565b611350565b6102f56104ed36600461374d565b611363565b6105676105003660046137b1565b6040805180820182525f80825260209182018190526001600160a01b0393841681527f61e7d5b2c9a910ff2378dac2bb693c18f23b4adc05f805890f8a32ff43c62c0182528290208251808401909352805484168352600101549092169181019190915290565b6040805182516001600160a01b039081168252602093840151169281019290925201610299565b61046261059c366004613907565b611444565b6102f56105af366004613a15565b6114fd565b6102f56105c23660046138c9565b61159d565b61030a6105d53660046137b1565b6116a6565b6102f56105e836600461378e565b61174f565b61030a6105fb3660046137b1565b505f1990565b61046261176b565b6102aa6106173660046137b1565b611788565b61030a5f516020613f3b5f395f51905f5281565b6102f561063e36600461374d565b611886565b6102f56106513660046138c9565b61189c565b6106696106643660046137b1565b61198a565b604080519215158352602083019190915201610299565b5f6001600160e01b03198216637965db0b60e01b14806106b057506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f5f516020613ebb5f395f51905f525b600301546001600160a01b0316919050565b604080516060810182525f80825260208083018290528284018290526001600160a01b03861682525f516020613e9b5f395f51905f529081905292812091929181906107249086611a8c565b9150915081610746576040516360b885f960e11b815260040160405180910390fd5b604080516060810182526001600160a01b038088168083525f908152600190960160209081529583902054169481019490945283015250905092915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156107c95750825b90505f826001600160401b031660011480156107e45750303b155b9050811580156107f2575080155b156108105760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561083a57845460ff60401b1916600160401b1785555b6108478a8a8a8a8a611ab2565b831561088d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f5f516020613edb5f395f51905f526108b181611ad0565b5f6108bb85610d25565b90506108c8858583611add565b93506108dd856108d88684613a67565b611cfd565b846001600160a01b03167f084d81a34c28f0ff9a9572c84a84026ee6c638bd4dae02221e1ef2161a32f8978560405161091891815260200190565b60405180910390a250919392505050565b5f9081525f516020613f1b5f395f51905f52602052604090206001015490565b61095282610929565b61095b81611ad0565b6109658383611d5f565b50505050565b5f5f516020613e9b5f395f51905f525b600201546001600160a01b0316919050565b5f5f516020613edb5f395f51905f526109a581611ad0565b5f6109ae61103e565b60405163c952485d60e01b81526001600160a01b038781166004830152919091169063c952485d90602401602060405180830381865afa1580156109f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a189190613a7a565b90505f610a2486611015565b90505f610a3087610d25565b905082610a3d8284613a91565b1115610a5e57610a578787610a528487613a67565b611add565b9550610a6c565b610a69878784611add565b95505b610a7f87610a7a8885613a67565b611e00565b866001600160a01b03167f1dc5ae30658247700867ce4a2e91e1622024047a0ffe81d31e96c2272bc6297487604051610aba91815260200190565b60405180910390a2509395945050505050565b6001600160a01b0381163314610af65760405163334bd91960e11b815260040160405180910390fd5b610b008282611e5a565b505050565b5f516020613efb5f395f51905f52610b1c81611ad0565b610b2582611ed3565b610b42576040516314ec381360e11b815260040160405180910390fd5b816001600160a01b0316633f4ba83a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b7a575f5ffd5b505af1158015610b8c573d5f5f3e3d5ffd5b505050505050565b5f5f516020613edb5f395f51905f52610bac81611ad0565b5f610bb68561112b565b5190505f610bc386610d25565b90505f610bcf87611015565b905081158015610bdd575080155b8015610be7575082155b610c0457604051630643266d60e31b815260040160405180910390fd5b5f610c0d61103e565b60405163c952485d60e01b81526001600160a01b038a81166004830152919091169063c952485d90602401602060405180830381865afa158015610c53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c779190613a7a565b9050610c84888883611add565b9650876001600160a01b03167f2b22108e7fb13997a72dd1e939cff6b8ff5f255d5282ed6d056257cfa46695cf88604051610cc191815260200190565b60405180910390a250949695505050505050565b5f5f516020613ebb5f395f51905f5261097b565b5f610cf381611ad0565b5f5b8281101561096557610d1d848483818110610d1257610d12613aa4565b905060800201611eeb565b600101610cf5565b6001600160a01b03165f9081525f516020613e9b5f395f51905f52602052604090206004015490565b5f516020613f3b5f395f51905f52610d6581611ad0565b610d6e85611ed3565b610d8b576040516314ec381360e11b815260040160405180910390fd5b60405163a3d5b25560e01b81526001600160a01b03858116600483015284811660248301526044820184905286169063a3d5b255906064015f604051808303815f87803b158015610dda575f5ffd5b505af1158015610dec573d5f5f3e3d5ffd5b505050505050505050565b5f610e0181611ad0565b5f516020613e9b5f395f51905f525f5b83811015610f8f575f8281878785818110610e2e57610e2e613aa4565b610e4492602060409092020190810191506137b1565b6001600160a01b0316815260208101919091526040015f9081209150610e94878785818110610e7557610e75613aa4565b9050604002016020016020810190610e8d91906137b1565b83906124c9565b90508015610f8557836001015f888886818110610eb357610eb3613aa4565b9050604002016020016020810190610ecb91906137b1565b6001600160a01b0316815260208101919091526040015f2060010180546001600160a01b0319169055868684818110610f0657610f06613aa4565b9050604002016020016020810190610f1e91906137b1565b6001600160a01b0316878785818110610f3957610f39613aa4565b610f4f92602060409092020190810191506137b1565b6001600160a01b03167faf3ac65cd650bebcdfdd6e59be3b02d1e6f060e1f9b702fdd19788cb2e574c7560405160405180910390a35b5050600101610e11565b5050505050565b5f516020613efb5f395f51905f52610fad81611ad0565b610fb682611ed3565b610fd3576040516314ec381360e11b815260040160405180910390fd5b816001600160a01b0316638456cb596040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610b7a575f5ffd5b5f6106b082611ed3565b6001600160a01b03165f9081525f516020613e9b5f395f51905f52602052604090206003015490565b5f5f516020613e9b5f395f51905f525b600401546001600160a01b0316919050565b60605f826001600160401b0381111561107b5761107b613ab8565b6040519080825280602002602001820160405280156110a4578160200160208202803683370190505b5090505f5b8381101561110f576110dd8585838181106110c6576110c6613aa4565b90506020028101906110d89190613acc565b6124dd565b8282815181106110ef576110ef613aa4565b6001600160a01b03909216602092830291909101909101526001016110a9565b509392505050565b5f5f516020613ebb5f395f51905f5261104e565b6001600160a01b0381165f9081525f516020613e9b5f395f51905f5260208190526040822060609261115c826125e4565b6001600160401b0381111561117357611173613ab8565b6040519080825280602002602001820160405280156111bc57816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816111915790505b5090505f5b815181101561123d575f806111d685846125ee565b604080516060810182526001600160a01b038085168083525f90815260018c01602090815290849020549091169082015290810182905286519294509092509085908590811061122857611228613aa4565b602090810291909101015250506001016111c1565b50949350505050565b5f9182525f516020613f1b5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f5f516020613e9b5f395f51905f526106c6565b6001600160a01b038181165f9081527f61e7d5b2c9a910ff2378dac2bb693c18f23b4adc05f805890f8a32ff43c62c016020526040812054909116806112e957604051632a51f9a160e21b815260040160405180910390fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611325573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113499190613a7a565b9392505050565b6113586125fc565b610b00838383612615565b5f61136d81611ad0565b5f6113778461112b565b5111611396576040516314cf541b60e21b815260040160405180910390fd5b61139e61103e565b60405163c952485d60e01b81526001600160a01b038581166004830152919091169063c952485d90602401602060405180830381865afa1580156113e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114089190613a7a565b61141184610d25565b61141b9084613a91565b101561143a5760405163229b812f60e21b815260040160405180910390fd5b610b008383611e00565b60605f61145081611ad0565b5f836001600160401b0381111561146957611469613ab8565b604051908082528060200260200182016040528015611492578160200160208202803683370190505b5090505f5b8481101561123d576114cb8686838181106114b4576114b4613aa4565b90506020028101906114c69190613acc565b612699565b8282815181106114dd576114dd613aa4565b6001600160a01b0390921660209283029190910190910152600101611497565b5f516020613f3b5f395f51905f5261151481611ad0565b61151d84611ed3565b61153a576040516314ec381360e11b815260040160405180910390fd5b60405163eed88b8d60e01b81526001600160a01b0384811660048301526024820184905285169063eed88b8d906044015f604051808303815f87803b158015611581575f5ffd5b505af1158015611593573d5f5f3e3d5ffd5b5050505050505050565b5f6115a781611ad0565b5f5b82811015610965576115e18484838181106115c6576115c6613aa4565b6115dc92602060409092020190810191506137b1565b611ed3565b6115fe576040516314ec381360e11b815260040160405180910390fd5b83838281811061161057611610613aa4565b61162692602060409092020190810191506137b1565b6001600160a01b031663f8f10dfc85858481811061164657611646613aa4565b905060400201602001356040518263ffffffff1660e01b815260040161166e91815260200190565b5f604051808303815f87803b158015611685575f5ffd5b505af1158015611697573d5f5f3e3d5ffd5b505050508060010190506115a9565b5f5f5f6116b28461198a565b91509150816116d4576040516397da0f1360e01b815260040160405180910390fd5b5f6116de8561112b565b90505f81516001036117155761170e86835f8151811061170057611700613aa4565b6020026020010151856127fb565b905061172e565b60405163d623472560e01b815260040160405180910390fd5b611746868261173c89610d25565b6108d89190613a91565b95945050505050565b61175882610929565b61176181611ad0565b6109658383611e5a565b60606117835f516020613ebb5f395f51905f526129ea565b905090565b5f61180b61179461103e565b60405163c44b11f760e01b81526001600160a01b038581166004830152919091169063c44b11f7906024015b602060405180830381865afa1580156117db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117ff9190613b1a565b51600160fc1b16151590565b156118825761181861103e565b60405163cff027d960e01b81526001600160a01b038481166004830152919091169063cff027d990602401602060405180830381865afa15801561185e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106b09190613b5b565b5090565b61188e6125fc565b61189882826129f6565b5050565b5f6118a681611ad0565b5f5b82811015610965576118c58484838181106115c6576115c6613aa4565b6118e2576040516314ec381360e11b815260040160405180910390fd5b8383828181106118f4576118f4613aa4565b61190a92602060409092020190810191506137b1565b6001600160a01b0316634fc3f41a85858481811061192a5761192a613aa4565b905060400201602001356040518263ffffffff1660e01b815260040161195291815260200190565b5f604051808303815f87803b158015611969575f5ffd5b505af115801561197b573d5f5f3e3d5ffd5b505050508060010190506118a8565b6001600160a01b0381165f9081525f516020613e9b5f395f51905f52602052604081208190816119b861103e565b60405163c952485d60e01b81526001600160a01b038781166004830152919091169063c952485d90602401602060405180830381865afa1580156119fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a229190613a7a565b90505f82600401548360030154611a399190613a91565b90505f818311611a49575f611a53565b611a538284613a67565b9050611a5e846125e4565b6001148015611a6c57505f81115b15611a7f57600197909650945050505050565b5f97909650945050505050565b5f808080611aa3866001600160a01b038716612ac5565b909450925050505b9250929050565b611aba612afd565b611ac5858585612b46565b610f8f848383612bda565b611ada8133612cd0565b50565b5f81831115611aec5781611aee565b825b9250825f03611b10576040516309e7acef60e11b815260040160405180910390fd5b611b4b611b1b61103e565b60405163c44b11f760e01b81526001600160a01b038781166004830152919091169063c44b11f7906024016117c0565b15611c5d575f611b5961103e565b60405163cff027d960e01b81526001600160a01b038781166004830152919091169063cff027d990602401602060405180830381865afa158015611b9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc39190613b5b565b9050611bda6001600160a01b038216333087612d0e565b6040516370a0823160e01b81523060048201525f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611c1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c429190613a7a565b905084811115611c525784611c54565b805b94505050611c8e565b611c726001600160a01b038516333086612d0e565b611c8e611c7d61103e565b6001600160a01b0386169085612d75565b611c9661103e565b604051632874bcf160e21b81526001600160a01b03868116600483015260248201869052919091169063a1d2f3c4906044015f604051808303815f87803b158015611cdf575f5ffd5b505af1158015611cf1573d5f5f3e3d5ffd5b50949695505050505050565b6001600160a01b0382165f8181525f516020613e9b5f395f51905f52602090815260409182902060040184905590518381527f53b770dd0811e11c5d4e2d93cbfa1a16318070561c3e72eec5fb64a65bdeaba191015b60405180910390a25050565b5f5f516020613f1b5f395f51905f52611d788484611246565b611df7575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611dad3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106b0565b5f9150506106b0565b6001600160a01b0382165f8181525f516020613e9b5f395f51905f52602090815260409182902060030184905590518381527f1081bd8ffd7d143c0560c42b476c66b379a5fd2a9615e9e66fe1005322166b949101611d53565b5f5f516020613f1b5f395f51905f52611e738484611246565b15611df7575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106b0565b5f6106b05f516020613ebb5f395f51905f5283612e04565b5f611ef960208301836137b1565b6001600160a01b031614158015611f2857505f611f1c60408301602084016137b1565b6001600160a01b031614155b8015611f4c57505f611f4060808301606084016137b1565b6001600160a01b031614155b611f695760405163d92e233d60e01b815260040160405180910390fd5b61271081604001351115611f90576040516302ca6a8b60e31b815260040160405180910390fd5b611fa36115dc60408301602084016137b1565b611fc0576040516314ec381360e11b815260040160405180910390fd5b611fcd60208201826137b1565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612008573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061202c9190613b76565b60ff1661203f60408301602084016137b1565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561207a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209e9190613b76565b60ff16146120bf5760405163257fae6b60e11b815260040160405180910390fd5b6120c761103e565b6001600160a01b031663c44b11f76120e260208401846137b1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612124573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121489190613b1a565b515f036121685760405163e46aea0960e01b815260040160405180910390fd5b5f61217960808301606084016137b1565b6001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121d89190613a7a565b136121f55760405162fc7cad60e51b815260040160405180910390fd5b5f516020613e9b5f395f51905f525f818161221360208601866137b1565b6001600160a01b03166001600160a01b031681526020019081526020015f2090505f826001015f85602001602081019061224d91906137b1565b6001600160a01b03908116825260208083019390935260409091015f206001015416915061227d908501856137b1565b6001600160a01b0316816001600160a01b031614806122a357506001600160a01b038116155b6122c057604051631399628b60e21b815260040160405180910390fd5b6122c9826125e4565b5f0361237e575f6122d861103e565b6001600160a01b031663c952485d6122f360208801886137b1565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612335573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123599190613a7a565b600484015490915061237b61237160208801886137b1565b610a7a8385613a67565b50505b61239d61239160408601602087016137b1565b83906040870135612e25565b5060408051808201909152806123b960808701606088016137b1565b6001600160a01b031681526020908101906123d6908701876137b1565b6001600160a01b03169052600184015f6123f660408801602089016137b1565b6001600160a01b03908116825260208083019390935260409182015f20845181546001600160a01b0319908116918416919091178255948401516001909101805490951691161790925561244e9186019086016137b1565b6001600160a01b031661246460208601866137b1565b6001600160a01b03167ff410360f471917fee32f7b56d6a1bae1c7dd99c11256d718adc5e9a5349a783860408701356124a36080890160608a016137b1565b604080519283526001600160a01b0390911660208301520160405180910390a350505050565b5f611349836001600160a01b038416612e42565b5f806124ec60208401846137b1565b6001600160a01b0316036125135760405163d92e233d60e01b815260040160405180910390fd5b5f8061253761252560208601866137b1565b6125326060870187613b96565b612e5e565b90925090505f61255e61254d60208701876137b1565b848488602001358960400135612ffa565b9050612568610cd5565b6001600160a01b031663aafdc6c161257e6106b6565b612586611117565b846040518463ffffffff1660e01b81526004016125a593929190613c25565b602060405180830381865afa1580156125c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117469190613b5b565b5f6106b08261305c565b5f808080611aa38686613066565b6126135f516020613f3b5f395f51905f5233612cd0565b565b5f198181116126245780612626565b815b915061263c6001600160a01b038516848461308f565b826001600160a01b0316846001600160a01b0316336001600160a01b03167fc7af665d489507e14ae25ac7ab0030fc7f570869610bdd32117ea56b60ae5c618560405161268b91815260200190565b60405180910390a450505050565b5f806126a860208401846137b1565b6001600160a01b0316036126cf5760405163d92e233d60e01b815260040160405180910390fd5b5f806126e161252560208601866137b1565b90925090505f6126f761254d60208701876137b1565b90505f612702610cd5565b6001600160a01b03166365bb962d6127186106b6565b612720611117565b856040518463ffffffff1660e01b815260040161273f93929190613c25565b6020604051808303815f875af115801561275b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061277f9190613b5b565b90506127985f516020613ebb5f395f51905f52826130c0565b506127a660208701876137b1565b6001600160a01b0316816001600160a01b03167fe7f72051763264aa4b7a297dc79b33458d1526033fef1ae3911814a3e0342ae286866040516127ea929190613c60565b60405180910390a395945050505050565b5f5f83604001515f0361280e578261282d565b61282d61271085604001516128239190613a91565b84906127106130d4565b90505f61283a868361318a565b90505f85602001516001600160a01b03166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561287d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a19190613a7a565b90505f6128ae8284613c98565b90505f875f01516001600160a01b03166302fb4d856128cb61127c565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303815f875af1158015612915573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129399190613a7a565b90505f5f838303612958578891506129518288613a67565b9050612992565b83612963848b613cb7565b61296d9190613c98565b9150838361297b8b8a613a67565b6129859190613cb7565b61298f9190613c98565b90505b895160408051848152602081018490526001600160a01b03928316928e16917f32407dab783b4e1ec9ecc0a7d1934a99b7a0a44605e6b6effad51fa609bb7344910160405180910390a3509998505050505050505050565b60605f61134983613267565b604080515f808252602082019092526001600160a01b038416908390604051612a1f9190613cce565b5f6040518083038185875af1925050503d805f8114612a59576040519150601f19603f3d011682016040523d82523d5f602084013e612a5e565b606091505b5050905080612a8057604051630db2c7f160e31b815260040160405180910390fd5b6040518281526001600160a01b0384169033907fb7c602059992183c7b767c08204223afc99f1895fd175adf9ece23ce9f5bb8b79060200160405180910390a3505050565b5f818152600283016020526040812054819080612af257612ae685856132c0565b92505f9150611aab9050565b600192509050611aab565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661261357604051631afcd79f60e31b815260040160405180910390fd5b612b4e612afd565b6001600160a01b038216612b755760405163d92e233d60e01b815260040160405180910390fd5b612b7d6132cb565b612b875f83611d5f565b50612b9f5f516020613edb5f395f51905f5283611d5f565b50612bb75f516020613f3b5f395f51905f5283611d5f565b50612bcf5f516020613efb5f395f51905f5283611d5f565b50610b0083826132d3565b612be2612afd565b6001600160a01b03811615801590612c0257506001600160a01b03821615155b8015612c1657506001600160a01b03831615155b612c335760405163d92e233d60e01b815260040160405180910390fd5b7fd011775bc1b3856f5856f18e492250d014048d48314b150d415c75e06d3c420280546001600160a01b03199081166001600160a01b03938416179091557fd011775bc1b3856f5856f18e492250d014048d48314b150d415c75e06d3c420380548216938316939093179092557fd011775bc1b3856f5856f18e492250d014048d48314b150d415c75e06d3c420480549092169216919091179055565b612cda8282611246565b6118985760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044015b60405180910390fd5b6040516001600160a01b0384811660248301528381166044830152606482018390526109659186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506133d0565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612dc6848261343c565b610965576040516001600160a01b0384811660248301525f6044830152612dfa91869182169063095ea7b390606401612d43565b61096584826133d0565b6001600160a01b0381165f9081526001830160205260408120541515611349565b5f612e3a846001600160a01b03851684613485565b949350505050565b5f818152600283016020526040812081905561134983836134a1565b6060805f5f858590501190505f866001600160a01b03166306fdde036040518163ffffffff1660e01b81526004015f60405180830381865afa158015612ea6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612ecd9190810190613cdf565b82612ee65760405180602001604052805f815250612f09565b8686604051602001612ef9929190613d65565b6040516020818303038152906040525b604051602001612f1a929190613d81565b60405160208183030381529060405290505f876001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015612f67573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f8e9190810190613cdf565b83612fa75760405180602001604052805f815250612fca565b8787604051602001612fba929190613dcd565b6040516020818303038152906040525b604051602001612fdb929190613de9565b60408051808303601f1901815291905291989197509095505050505050565b606063b0bc95a760e01b86868630878760405160240161301f96959493929190613e29565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b5f6106b0826134ac565b5f808061307385856134b5565b5f81815260029690960160205260409095205494959350505050565b6040516001600160a01b03838116602483015260448201839052610b0091859182169063a9059cbb90606401612d43565b5f611349836001600160a01b0384166134c0565b5f838302815f1985870982811083820303915050805f03613108578382816130fe576130fe613c84565b0492505050611349565b80841161311f5761311f600385150260111861350c565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8161319461096b565b6001600160a01b031663fca513a86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131f39190613b5b565b60405163b3596f0760e01b81526001600160a01b038681166004830152919091169063b3596f0790602401602060405180830381865afa158015613239573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061325d9190613a7a565b6113499190613cb7565b6060815f018054806020026020016040519081016040528092919081815260200182805480156132b457602002820191905f5260205f20905b8154815260200190600101908083116132a0575b50505050509050919050565b5f611349838361351d565b612613612afd565b6132db612afd565b6001600160a01b038216158015906132fb57506001600160a01b03811615155b6133185760405163d92e233d60e01b815260040160405180910390fd5b5f5f516020613e9b5f395f51905f529050826001600160a01b0316630542975c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613365573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133899190613b5b565b6002820180546001600160a01b03199081166001600160a01b0393841617909155600383018054821694831694909417909355600490910180549092169216919091179055565b5f5f60205f8451602086015f885af1806133ef576040513d5f823e3d81fd5b50505f513d91508115613406578060011415613413565b6001600160a01b0384163b155b1561096557604051635274afe760e01b81526001600160a01b0385166004820152602401612d05565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561347b5750811561346d578060011461347b565b5f866001600160a01b03163b115b9695505050505050565b5f8281526002840160205260408120829055612e3a8484613534565b5f611349838361353f565b5f6106b0825490565b5f6113498383613619565b5f81815260018301602052604081205461350557508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556106b0565b505f6106b0565b634e487b715f52806020526024601cfd5b5f8181526001830160205260408120541515611349565b5f61134983836134c0565b5f8181526001830160205260408120548015611df7575f613561600183613a67565b85549091505f9061357490600190613a67565b90508082146135d3575f865f01828154811061359257613592613aa4565b905f5260205f200154905080875f0184815481106135b2576135b2613aa4565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806135e4576135e4613e86565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506106b0565b5f825f01828154811061362e5761362e613aa4565b905f5260205f200154905092915050565b5f6020828403121561364f575f5ffd5b81356001600160e01b031981168114611349575f5ffd5b6001600160a01b0381168114611ada575f5ffd5b5f5f6040838503121561368b575f5ffd5b823561369681613666565b915060208301356136a681613666565b809150509250929050565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606081016106b0565b5f5f5f5f5f60a086880312156136f4575f5ffd5b85356136ff81613666565b9450602086013561370f81613666565b9350604086013561371f81613666565b9250606086013561372f81613666565b9150608086013561373f81613666565b809150509295509295909350565b5f5f6040838503121561375e575f5ffd5b823561376981613666565b946020939093013593505050565b5f60208284031215613787575f5ffd5b5035919050565b5f5f6040838503121561379f575f5ffd5b8235915060208301356136a681613666565b5f602082840312156137c1575f5ffd5b813561134981613666565b5f5f602083850312156137dd575f5ffd5b82356001600160401b038111156137f2575f5ffd5b8301601f81018513613802575f5ffd5b80356001600160401b03811115613817575f5ffd5b8560208260071b840101111561382b575f5ffd5b6020919091019590945092505050565b5f5f5f5f6080858703121561384e575f5ffd5b843561385981613666565b9350602085013561386981613666565b9250604085013561387981613666565b9396929550929360600135925050565b5f5f83601f840112613899575f5ffd5b5081356001600160401b038111156138af575f5ffd5b6020830191508360208260061b8501011115611aab575f5ffd5b5f5f602083850312156138da575f5ffd5b82356001600160401b038111156138ef575f5ffd5b6138fb85828601613889565b90969095509350505050565b5f5f60208385031215613918575f5ffd5b82356001600160401b0381111561392d575f5ffd5b8301601f8101851361393d575f5ffd5b80356001600160401b03811115613952575f5ffd5b8560208260051b840101111561382b575f5ffd5b602080825282518282018190525f918401906040840190835b818110156139a65783516001600160a01b031683526020938401939092019160010161397f565b509095945050505050565b602080825282518282018190525f918401906040840190835b818110156139a6576139ff83855180516001600160a01b03908116835260208083015190911690830152604090810151910152565b60209390930192606092909201916001016139ca565b5f5f5f60608486031215613a27575f5ffd5b8335613a3281613666565b92506020840135613a4281613666565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106b0576106b0613a53565b5f60208284031215613a8a575f5ffd5b5051919050565b808201808211156106b0576106b0613a53565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f8235607e19833603018112613ae0575f5ffd5b9190910192915050565b604051601f8201601f191681016001600160401b0381118282101715613b1257613b12613ab8565b604052919050565b5f6020828403128015613b2b575f5ffd5b50604051602081016001600160401b0381118282101715613b4e57613b4e613ab8565b6040529151825250919050565b5f60208284031215613b6b575f5ffd5b815161134981613666565b5f60208284031215613b86575f5ffd5b815160ff81168114611349575f5ffd5b5f5f8335601e19843603018112613bab575f5ffd5b8301803591506001600160401b03821115613bc4575f5ffd5b602001915036819003821315611aab575f5ffd5b5f5b83811015613bf2578181015183820152602001613bda565b50505f910152565b5f8151808452613c11816020860160208601613bd8565b601f01601f19169290920160200192915050565b6001600160a01b038481168252831660208201526080604082018190525f90613c5090830184613bfa565b90505f6060830152949350505050565b604081525f613c726040830185613bfa565b82810360208401526117468185613bfa565b634e487b7160e01b5f52601260045260245ffd5b5f82613cb257634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176106b0576106b0613a53565b5f8251613ae0818460208701613bd8565b5f60208284031215613cef575f5ffd5b81516001600160401b03811115613d04575f5ffd5b8201601f81018413613d14575f5ffd5b80516001600160401b03811115613d2d57613d2d613ab8565b613d40601f8201601f1916602001613aea565b818152856020838501011115613d54575f5ffd5b611746826020830160208601613bd8565b600160fd1b8152818360018301375f9101600101908152919050565b6e02ab6b13932b636309029ba30b5b29608d1b81525f8351613daa81600f850160208801613bd8565b835190830190613dc181600f840160208801613bd8565b01600f01949350505050565b601760f91b8152818360018301375f9101600101908152919050565b6273746b60e81b81525f8351613e06816003850160208801613bd8565b835190830190613e1d816003840160208801613bd8565b01600301949350505050565b6001600160a01b038716815260c0602082018190525f90613e4c90830188613bfa565b8281036040840152613e5e8188613bfa565b6001600160a01b039690961660608401525050608081019290925260a0909101529392505050565b634e487b7160e01b5f52603160045260245ffdfe61e7d5b2c9a910ff2378dac2bb693c18f23b4adc05f805890f8a32ff43c62c00d011775bc1b3856f5856f18e492250d014048d48314b150d415c75e06d3c42007022b05f273dfb770d16ebe344b0b38e1ef7bac12120a5cebc324be6acf18fe13bb181d5689164b4d72d34b056228c95b51f3fb0f6dbdb7f9ddba5f91c6821dd02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800b6cb289a6f26b1dcbb683273e8ca26a89ca7a43a8c050c1f20aeb5e81a335374a26469706673582212202e3e1ee28fad07ef827d8ed180c0f377d7b130196a4afe604480239c718191a764736f6c634300081b0033