3 txs
29.1k calls
constructor
constructor(address _rewardsToken, address _stakeToken, address _earningPowerCalculator, uint256 _maxBumpTip, address _admin, string _name)
functions
admin
viewfunction admin() view returns (address)
ALTER_CLAIMER_TYPEHASH
viewfunction ALTER_CLAIMER_TYPEHASH() view returns (bytes32)
ALTER_DELEGATEE_TYPEHASH
viewfunction ALTER_DELEGATEE_TYPEHASH() view returns (bytes32)
CLAIM_REWARD_TYPEHASH
viewfunction CLAIM_REWARD_TYPEHASH() view returns (bytes32)
claimFeeParameters
viewfunction claimFeeParameters() view returns (uint96 feeAmount, address feeCollector)
depositorTotalEarningPower
viewfunction depositorTotalEarningPower(address depositor) view returns (uint256 earningPower)
depositorTotalStaked
viewfunction depositorTotalStaked(address depositor) view returns (uint256 amount)
deposits
viewfunction deposits(uint256 depositId) view returns (uint96 balance, address owner, uint96 earningPower, address delegatee, address claimer, uint256 rewardPerTokenCheckpoint, uint256 scaledUnclaimedRewardCheckpoint)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
earningPowerCalculator
viewfunction earningPowerCalculator() view returns (address)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
isRewardNotifier
viewfunction isRewardNotifier(address rewardNotifier) view returns (bool)
lastCheckpointTime
viewfunction lastCheckpointTime() view returns (uint256)
lastTimeRewardDistributed
viewfunction lastTimeRewardDistributed() view returns (uint256)
MAX_CLAIM_FEE
viewfunction MAX_CLAIM_FEE() view returns (uint256)
maxBumpTip
viewfunction maxBumpTip() view returns (uint256)
nonces
viewfunction nonces(address owner) view returns (uint256)
REWARD_DURATION
viewfunction REWARD_DURATION() view returns (uint256)
REWARD_TOKEN
viewfunction REWARD_TOKEN() view returns (address)
rewardEndTime
viewfunction rewardEndTime() view returns (uint256)
rewardPerTokenAccumulated
viewfunction rewardPerTokenAccumulated() view returns (uint256)
rewardPerTokenAccumulatedCheckpoint
viewfunction rewardPerTokenAccumulatedCheckpoint() view returns (uint256)
SCALE_FACTOR
viewfunction SCALE_FACTOR() view returns (uint256)
scaledRewardRate
viewfunction scaledRewardRate() view returns (uint256)
STAKE_MORE_TYPEHASH
viewfunction STAKE_MORE_TYPEHASH() view returns (bytes32)
STAKE_TOKEN
viewfunction STAKE_TOKEN() view returns (address)
STAKE_TYPEHASH
viewfunction STAKE_TYPEHASH() view returns (bytes32)
surrogates
viewfunction surrogates(address _delegatee) view returns (address)
totalEarningPower
viewfunction totalEarningPower() view returns (uint256)
totalStaked
viewfunction totalStaked() view returns (uint256)
unclaimedReward
viewfunction unclaimedReward(uint256 _depositId) view returns (uint256)
WITHDRAW_TYPEHASH
viewfunction WITHDRAW_TYPEHASH() view returns (bytes32)
alterClaimer
nonpayablefunction alterClaimer(uint256 _depositId, address _newClaimer)
alterClaimerOnBehalf
nonpayablefunction alterClaimerOnBehalf(uint256 _depositId, address _newClaimer, address _depositor, uint256 _deadline, bytes _signature)
alterDelegatee
nonpayablefunction alterDelegatee(uint256 _depositId, address _newDelegatee)
alterDelegateeOnBehalf
nonpayablefunction alterDelegateeOnBehalf(uint256 _depositId, address _newDelegatee, address _depositor, uint256 _deadline, bytes _signature)
bumpEarningPower
nonpayablefunction bumpEarningPower(uint256 _depositId, address _tipReceiver, uint256 _requestedTip)
claimReward
nonpayablefunction claimReward(uint256 _depositId) returns (uint256)
claimRewardOnBehalf
nonpayablefunction claimRewardOnBehalf(uint256 _depositId, uint256 _deadline, bytes _signature) returns (uint256)
invalidateNonce
nonpayablefunction invalidateNonce()
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
notifyRewardAmount
nonpayablefunction notifyRewardAmount(uint256 _amount)
permitAndStake
nonpayablefunction permitAndStake(uint256 _amount, address _delegatee, address _claimer, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s) returns (uint256 _depositId)
permitAndStakeMore
nonpayablefunction permitAndStakeMore(uint256 _depositId, uint256 _amount, uint256 _deadline, uint8 _v, bytes32 _r, bytes32 _s)
setAdmin
nonpayablefunction setAdmin(address _newAdmin)
setClaimFeeParameters
nonpayablefunction setClaimFeeParameters(tuple _params)
setEarningPowerCalculator
nonpayablefunction setEarningPowerCalculator(address _newEarningPowerCalculator)
setMaxBumpTip
nonpayablefunction setMaxBumpTip(uint256 _newMaxBumpTip)
setRewardNotifier
nonpayablefunction setRewardNotifier(address _rewardNotifier, bool _isEnabled)
stake
nonpayablefunction stake(uint256 _amount, address _delegatee, address _claimer) returns (uint256 _depositId)
stake
nonpayablefunction stake(uint256 _amount, address _delegatee) returns (uint256 _depositId)
stakeMore
nonpayablefunction stakeMore(uint256 _depositId, uint256 _amount)
stakeMoreOnBehalf
nonpayablefunction stakeMoreOnBehalf(uint256 _depositId, uint256 _amount, address _depositor, uint256 _deadline, bytes _signature)
stakeOnBehalf
nonpayablefunction stakeOnBehalf(uint256 _amount, address _delegatee, address _claimer, address _depositor, uint256 _deadline, bytes _signature) returns (uint256 _depositId)
withdraw
nonpayablefunction withdraw(uint256 _depositId, uint256 _amount)
withdrawOnBehalf
nonpayablefunction withdrawOnBehalf(uint256 _depositId, uint256 _amount, address _depositor, uint256 _deadline, bytes _signature)
events
AdminSet
event AdminSet(address indexed oldAdmin, address indexed newAdmin)
ClaimerAltered
event ClaimerAltered(uint256 indexed depositId, address indexed oldClaimer, address indexed newClaimer, uint256 earningPower)
ClaimFeeParametersSet
event ClaimFeeParametersSet(uint96 oldFeeAmount, uint96 newFeeAmount, address oldFeeCollector, address newFeeCollector)
DelegateeAltered
event DelegateeAltered(uint256 indexed depositId, address oldDelegatee, address newDelegatee, uint256 earningPower)
EarningPowerBumped
event EarningPowerBumped(uint256 indexed depositId, uint256 oldEarningPower, uint256 newEarningPower, address bumper, address tipReceiver, uint256 tipAmount)
EarningPowerCalculatorSet
event EarningPowerCalculatorSet(address indexed oldEarningPowerCalculator, address indexed newEarningPowerCalculator)
EIP712DomainChanged
event EIP712DomainChanged()
MaxBumpTipSet
event MaxBumpTipSet(uint256 oldMaxBumpTip, uint256 newMaxBumpTip)
RewardClaimed
event RewardClaimed(uint256 indexed depositId, address indexed claimer, uint256 amount, uint256 earningPower)
RewardNotified
event RewardNotified(uint256 amount, address notifier)
RewardNotifierSet
event RewardNotifierSet(address indexed account, bool isEnabled)
StakeDeposited
event StakeDeposited(address owner, uint256 indexed depositId, uint256 amount, uint256 depositBalance, uint256 earningPower)
StakeWithdrawn
event StakeWithdrawn(address owner, uint256 indexed depositId, uint256 amount, uint256 depositBalance, uint256 earningPower)
SurrogateDeployed
event SurrogateDeployed(address indexed delegatee, address indexed surrogate)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidShortString
error InvalidShortString()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
Staker__ExpiredDeadline
error Staker__ExpiredDeadline()
Staker__InsufficientRewardBalance
error Staker__InsufficientRewardBalance()
Staker__InsufficientUnclaimedRewards
error Staker__InsufficientUnclaimedRewards()
Staker__InvalidAddress
error Staker__InvalidAddress()
Staker__InvalidClaimFeeParameters
error Staker__InvalidClaimFeeParameters()
Staker__InvalidRewardRate
error Staker__InvalidRewardRate()
Staker__InvalidSignature
error Staker__InvalidSignature()
Staker__InvalidTip
error Staker__InvalidTip()
Staker__Unauthorized
error Staker__Unauthorized(bytes32 reason, address caller)
Staker__Unqualified
error Staker__Unqualified(uint256 score)
StakerDelegateSurrogateVotes__UnauthorizedToken
error StakerDelegateSurrogateVotes__UnauthorizedToken()
StakerOnBehalf__ExpiredDeadline
error StakerOnBehalf__ExpiredDeadline()
StakerOnBehalf__InvalidSignature
error StakerOnBehalf__InvalidSignature()
StakerPermitAndStake__UnauthorizedToken
error StakerPermitAndStake__UnauthorizedToken()
StringTooLong
error StringTooLong(string str)
creation bytecode
0x6101c080604052346103e5576143a8803803809161001d82856103e9565b8339810160c0828203126103e55781516001600160a01b03811681036103e55760208301516001600160a01b03811692908390036103e55760408401516001600160a01b03811693908490036103e55760608501519060808601519460018060a01b038616968787036103e55760a0810151906001600160401b0382116103e557019284601f850112156103e55783516001600160401b0381116103c257604051946100d3601f8301601f1916602001876103e9565b8186526020860196602083830101116103e557815f926020809301895e860101527faeea2b5ee5fb4e4473cc85584d77137f4c6f996691f89746291ce554251200156040809961014582519a610129848d6103e9565b60018c5260208c019a603160f81b8c526080528760a0526106df565b60015482519190816001600160a01b0382167fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff975f80a36001600160a01b03191617600155600254815260208101849052a16002556101a2816106df565b600554816001600160a01b0382167fb7c75e18483153b6b8c9c9a379610df50999c601b86f112f162ea62bc86787245f80a36001600160a01b0319161760055560a0516001600160a01b0316036103d6576101fc8161040c565b61018052610209846105a7565b6101a0525190209182610140525190208061016052466101005282519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528483015260608201524660808201523060a082015260a0815261027260c0826103e9565b51902060e0523061012052673782dace9d90000060c05280518082016001600160401b038111828210176103c25782525f8082526020808301828152600e5485516001600160601b0382168152928301849052606090811c838701528201929092529091907f2b9fb16353eaf3b33538b5a2635d05cee2876d96ddd81b0d2ea647b44594a11b90608090a151905160601b6001600160601b0319166001600160601b039190911617600e5551613ca990816106ff8239608051818181610b35015281816114ba015281816119190152613308015260a0518181816104ea0152818161069d01528181611be1015281816135b101526136ad015260c0518181816112610152611cc7015260e0518161260e015261010051816126cb015261012051816125df0152610140518161265d0152610160518161268301526101805181610c7401526101a05181610c9d0152f35b634e487b7160e01b5f52604160045260245ffd5b635e9e1d3760e11b5f5260045ffd5b5f80fd5b601f909101601f19168101906001600160401b038211908210176103c257604052565b908151602081105f14610486575090601f815111610446576020815191015160208210610437571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b0381116103c257601054600181811c9116801561059d575b602082101461058957601f8111610556575b50602092601f82116001146104f557928192935f926104ea575b50508160011b915f199060031b1c19161760105560ff90565b015190505f806104d1565b601f1982169360105f52805f20915f5b86811061053e5750836001959610610526575b505050811b0160105560ff90565b01515f1960f88460031b161c191690555f8080610518565b91926020600181928685015181550194019201610505565b60105f52601f60205f20910160051c810190601f830160051c015b81811061057e57506104b7565b5f8155600101610571565b634e487b7160e01b5f52602260045260245ffd5b90607f16906104a5565b908151602081105f146105d2575090601f815111610446576020815191015160208210610437571790565b6001600160401b0381116103c257601154600181811c911680156106d5575b602082101461058957601f81116106a2575b50602092601f821160011461064157928192935f92610636575b50508160011b915f199060031b1c19161760115560ff90565b015190505f8061061d565b601f1982169360115f52805f20915f5b86811061068a5750836001959610610672575b505050811b0160115560ff90565b01515f1960f88460031b161c191690555f8080610664565b91926020600181928685015181550194019201610651565b60115f52601f60205f20910160051c810190601f830160051c015b8181106106ca5750610603565b5f81556001016106bd565b90607f16906105f1565b6001600160a01b0316156106ef57565b630426574760e11b5f5260045ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081630495d72514611c5857508063073a2ae914611c2257806308484dee14611c055780631c39b67214611bc2578063255a4f7314611b26578063276d733414611aec5780632c4f88cd14611a9957806331cb4bea14611a5f57806334560e501461172c5780633644e5151461171257806337e9f64a146116f557806339aab4b0146116bb5780633c6b16ab146113c15780633d4bd89f146112ac578063441a3e701461128457806346800f751461124a57806349583576146111bb5780635a57b46f146111925780635ade228a146111755780635ba8fcfe146110a757806361dc05491461108a57806364b5c91c14611052578063703762da1461102a578063704b6c0214610f9b57806372a35df914610f7557806376c5d75814610f3b578063774da67414610f0857806377d7a92114610ece5780637aa23c5214610eb15780637acb775714610e885780637ecebe0014610e52578063817b1cd214610e3557806383ce851114610d7057806384b0196e14610c5c57806389ee09f014610c225780638fa1383514610b5957806399248ea714610b16578063a7d545db14610ae6578063ac9650d8146108e0578063ae0d27b6146108c6578063ae169a501461081f578063b02c43d014610792578063bb60030d14610755578063c21f637514610660578063c3be997814610628578063c3c16e4e1461060a578063c6f6173b146105ec578063cb3056ad146105aa578063cd2ee8f7146104a3578063ce4b5bbe14610479578063da755f02146103a2578063ddda8a1114610387578063e6dec27014610336578063e70f9445146102f9578063f851a440146102d25763fd6fe8a814610286575f80fd5b346102cf5760606003193601126102cf576044359067ffffffffffffffff82116102cf5760206102c76102bc3660048601611e7f565b602435600435612087565b604051908152f35b80fd5b50346102cf57806003193601126102cf5760206001600160a01b0360015416604051908152f35b50346102cf5760206003193601126102cf5760ff60406020926001600160a01b03610322611e37565b168152600d84522054166040519015158152f35b50346102cf5760206003193601126102cf576020610376610355611e37565b6001600160a01b03165f52600f6020526001600160a01b0360405f20541690565b6001600160a01b0360405191168152f35b50346102cf57806003193601126102cf5760206102c7612075565b50346102cf576104766104716103b736611f39565b90929491848852600860205261046b60408920946103d58387612287565b6103de816126f1565b610402836001600160a01b03165f52601260205260405f2080549060018201905590565b906040519060208201927f4aa66922cb54c64ed3272a327b8339c58555b41169c1fb39efb4535c6f9d170384528960408401528a60608401526001600160a01b038616608084015260a083015260c082015260c0815261046360e082611dfe565b519020612721565b90612762565b612b03565b80f35b50346102cf57806003193601126102cf5760206040516ec097ce7bc90715b34b9f10000000008152f35b50346102cf5760c06003193601126102cf5760643560243560043560ff831683036105a25780845260086020528360408120936104e03386612287565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156105a6576040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604480820187905235606482015260ff929092166084808401919091523560a4808401919091523560c48301528290829060e490829084905af161058d575b505061047692612d71565b8161059791611dfe565b6105a257835f610582565b8380fd5b8280fd5b50346102cf5760206003193601126102cf576ec097ce7bc90715b34b9f10000000006105e36040602093600435815260088552206133a6565b04604051908152f35b50346102cf57806003193601126102cf576020600c54604051908152f35b50346102cf57806003193601126102cf576020600b54604051908152f35b50346102cf5760206003193601126102cf5760406020916001600160a01b0361064f611e37565b168152600683522054604051908152f35b346107515760e06003193601126107515760043561067c611e21565b90610685611e4d565b6084359260ff84168403610751576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692833b15610751576040517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101829052606480359082015260ff95909516608486015260a480359086015260c48035908601526020946102c7945f90829060e490829084905af1610741575b5033612774565b5f61074b91611dfe565b5f61073a565b5f80fd5b3461075157604060031936011261075157610790600435610774611e21565b90805f52600860205260405f2061078b3382612287565b612f9d565b005b34610751576020600319360112610751576004355f52600860205260e060405f208054906001810154906001600160a01b036002820154166004600383015492015492604051946bffffffffffffffffffffffff8116865260601c60208601526bffffffffffffffffffffffff8116604086015260601c6060850152608084015260a083015260c0820152f35b3461075157602060031936011261075157600435805f52600860205260405f206001600160a01b03600282015416331415806108b8575b610868576020916102c791339161318c565b7f581a50f0000000000000000000000000000000000000000000000000000000005f527f6e6f7420636c61696d6572206f72206f776e65720000000000000000000000006004523360245260445ffd5b5033815460601c1415610856565b34610751575f6003193601126107515760206102c761203c565b346107515760206003193601126107515760043567ffffffffffffffff811161075157366023820112156107515780600401359067ffffffffffffffff8211610751573660248360051b8301011161075157906020916040516109438482611dfe565b5f815283810191601f19850136843761095b84611fe3565b906109696040519283611dfe565b848252601f1961097886611fe3565b01865f5b828110610ad7575050505f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd81360301915b86811015610a5c5760248160051b83010135838112156107515782019060248201359167ffffffffffffffff831161075157604401918036038313610751575f8060019489610a2c610a40958f8e6040519483869484860198893784019083820190898252519283915e010185815203601f198101835282611dfe565b5190305af4610a3961315d565b90306139a0565b610a4a8287611ffb565b52610a558186611ffb565b50016109af565b604080518981528551818b018190525f92600582901b8301810191888d01918d9085015b828710610a8d5785850386f35b909192938280610ac7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08a600196030186528851611f84565b9601920196019592919092610a80565b6060858201830152810161097c565b346107515760606003193601126107515760206102c7610b04611e21565b610b0c611e4d565b9060043533612774565b34610751575f6003193601126107515760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107515761079061078b610b6d36611edb565b90929491845f52600860205261046b60405f2094610b8b8387612287565b610b94816126f1565b610bb8836001600160a01b03165f52601260205260405f2080549060018201905590565b906040519060208201927f867b6c541e0f40dd4e47d08157ce464787a92cf2aa13644ecf51331804fc084784528960408401526001600160a01b038b1660608401526001600160a01b038616608084015260a083015260c082015260c0815261046360e082611dfe565b34610751575f6003193601126107515760206040517f613950e00b9e6a31ffbad41bdf66f194d1a276b1e117790800eaca48ebdd1d558152f35b34610751575f60031936011261075157610d14610c987f000000000000000000000000000000000000000000000000000000000000000061375a565b610cc17f00000000000000000000000000000000000000000000000000000000000000006138d0565b6020610d2260405192610cd48385611dfe565b5f84525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e0870190611f84565b908582036040870152611f84565b4660608501523060808501525f60a085015283810360c08501528180845192838152019301915f5b828110610d5957505050500390f35b835185528695509381019392810192600101610d4a565b3461075157610790610e30610d8436611f39565b90929491845f52600860205261046b60405f2094610da28387612287565b610dab816126f1565b610dcf836001600160a01b03165f52601260205260405f2080549060018201905590565b906040519060208201927f0b1db0ab4204ded87d69d4fe6739295ee2fef3e78103e2099d8e18e112053b2084528960408401528a60608401526001600160a01b038616608084015260a083015260c082015260c0815261046360e082611dfe565b612d71565b34610751575f600319360112610751576020600354604051908152f35b346107515760206003193601126107515760206102c7610e70611e37565b6001600160a01b03165f52601260205260405f205490565b346107515760406003193601126107515760206102c7610ea6611e21565b339060043533612774565b34610751575f600319360112610751576020600254604051908152f35b34610751575f6003193601126107515760206040517f0b1db0ab4204ded87d69d4fe6739295ee2fef3e78103e2099d8e18e112053b208152f35b34610751575f600319360112610751576040600e548151906bffffffffffffffffffffffff8116825260601c6020820152f35b34610751575f6003193601126107515760206040517f4aa66922cb54c64ed3272a327b8339c58555b41169c1fb39efb4535c6f9d17038152f35b34610751575f6003193601126107515760206001600160a01b0360055416604051908152f35b3461075157602060031936011261075157610fb4611e37565b610fbc612223565b610fc58161351c565b7fffffffffffffffffffffffff00000000000000000000000000000000000000006001600160a01b03600154921691826001600160a01b0382167fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff975f80a31617600155005b346107515761079061103b36611ec5565b90805f52600860205260405f20610e303382612287565b34610751576020600319360112610751576001600160a01b03611073611e37565b165f526007602052602060405f2054604051908152f35b34610751575f600319360112610751576020600a54604051908152f35b34610751576107906111706110bb36611edb565b90929491845f52600860205261046b60405f20946110d98387612287565b6110e2816126f1565b611106836001600160a01b03165f52601260205260405f2080549060018201905590565b906040519060208201927f300c1a75d358323d4ec7b212cd1e88afbd0250186b09c957b383ee5e6ad897f584528960408401526001600160a01b038b1660608401526001600160a01b038616608084015260a083015260c082015260c0815261046360e082611dfe565b6122ef565b34610751575f60031936011261075157602060405162278d008152f35b34610751575f60031936011261075157335f908152601260205260409020805460018101909155005b34610751576020600319360112610751576111d4611e37565b6111dc612223565b6111e58161351c565b7fffffffffffffffffffffffff00000000000000000000000000000000000000006001600160a01b03600554921691826001600160a01b0382167fb7c75e18483153b6b8c9c9a379610df50999c601b86f112f162ea62bc86787245f80a31617600555005b34610751575f6003193601126107515760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346107515761079061129536611ec5565b90805f52600860205260405f206104713382612287565b346107515760c0600319360112610751576004356112c8611e21565b906112d1611e4d565b606435926001600160a01b03841692838503610751576084359460a4359467ffffffffffffffff8611610751576020966113b66113bc926113196102c7993690600401611e7f565b92611323816126f1565b611347866001600160a01b03165f52601260205260405f2080549060018201905590565b90604051918c8301937f613950e00b9e6a31ffbad41bdf66f194d1a276b1e117790800eaca48ebdd1d5585528960408501526001600160a01b038b1660608501526001600160a01b038c16608085015260a084015260c083015260e082015260e0815261046361010082611dfe565b83612762565b612774565b3461075157602060031936011261075157600435335f52600d60205260ff60405f2054161561166b576113f261203c565b600c5560095442811161160d57506ec097ce7bc90715b34b9f100000000081028181046ec097ce7bc90715b34b9f100000000014821517156115795762278d009004600b555b62278d0042018042116115795760095542600a55600b546ec097ce7bc90715b34b9f10000000008104156115e55762278d0081029080820462278d00149015171561157957604051907f70a082310000000000000000000000000000000000000000000000000000000082523060048301526020826024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9182156115da575f926115a6575b506ec097ce7bc90715b34b9f10000000008202918083046ec097ce7bc90715b34b9f1000000000149015171561157957116115515760407f48f411442545d43fc993afadc0fd408cf0d1c606f3d10d1de7b05c994463ed97918151908152336020820152a1005b7fe8e7ff48000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9091506020813d6020116115d2575b816115c260209383611dfe565b81010312610751575190836114ea565b3d91506115b5565b6040513d5f823e3d90fd5b7fd4de7fe8000000000000000000000000000000000000000000000000000000005f5260045ffd5b6116259061161f600b54914290611fb6565b90611fc3565b6ec097ce7bc90715b34b9f10000000008202908282046ec097ce7bc90715b34b9f100000000014831517156115795762278d009161166291611fd6565b04600b55611438565b7f581a50f0000000000000000000000000000000000000000000000000000000005f527f6e6f74206e6f74696669657200000000000000000000000000000000000000006004523360245260445ffd5b34610751575f6003193601126107515760206040517f300c1a75d358323d4ec7b212cd1e88afbd0250186b09c957b383ee5e6ad897f58152f35b34610751575f600319360112610751576020600954604051908152f35b34610751575f6003193601126107515760206102c76125d5565b3461075157606060031936011261075157600435611748611e21565b90604435906002548211611a3757805f52600860205260405f2061176a61203c565b600c55611775612075565b600a5561178181612514565b60048101936ec097ce7bc90715b34b9f10000000008554046001600160a01b036005541693835460018501926040845460846bffffffffffffffffffffffff82169483519a8b9384927fff78bc3a0000000000000000000000000000000000000000000000000000000084526bffffffffffffffffffffffff8116600485015260601c602484015260601c60448301528660648301525afa80156115da575f975f916119f7575b501580156119ee575b6119c257818711806119b9575b61197c578782881091826119a4575b505061197c5761193d9587956118ca611902936bffffffffffffffffffffffff957f04d2114cbff027138003f7a9e452588f683397107f4d4ab1a83f17e80ebad12e60a06040518481528760208201523360408201526001600160a01b038c1660608201528c6080820152a26118c584600454611fd6565b611fb6565b6004556118f084865416915460601c91825f5260076020526118c58460405f2054611fd6565b905f52600760205260405f205561252c565b166bffffffffffffffffffffffff198254161790557f0000000000000000000000000000000000000000000000000000000000000000612580565b8154906ec097ce7bc90715b34b9f10000000008102908082046ec097ce7bc90715b34b9f100000000014901517156115795761197891611fb6565b9055005b7fb2194877000000000000000000000000000000000000000000000000000000005f5260045ffd5b6119ae9250611fb6565b60025411878a61184d565b5087811061183e565b867faca01fbc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50818714611831565b9750506040873d604011611a2f575b81611a1360409383611dfe565b8101031261075157611a29602088519801611fa9565b8a611828565b3d9150611a06565b7fc9280d58000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610751575f6003193601126107515760206040517fed72e8b8797645ac76e0741da7d8d0afc24dddb21ca6338d5c5520b05b1923068152f35b3461075157602060031936011261075157600435611ab5612223565b7faeea2b5ee5fb4e4473cc85584d77137f4c6f996691f89746291ce5542512001560406002548151908152836020820152a1600255005b34610751575f6003193601126107515760206040517f867b6c541e0f40dd4e47d08157ce464787a92cf2aa13644ecf51331804fc08478152f35b3461075157604060031936011261075157611b3f611e37565b602435908115158092036107515760206001600160a01b037fb33ca1dabfb28a2e1bd06b332c396b1a3d538278691341a5503bbad53f91919792611b81612223565b1692835f52600d825260405f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a2005b34610751575f6003193601126107515760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610751575f600319360112610751576020600454604051908152f35b3461075157604060031936011261075157610790600435611c41611e21565b90805f52600860205260405f206111703382612287565b34610751576040600319360112610751576040810181811067ffffffffffffffff821117611dd1576040526004356bffffffffffffffffffffffff81168103610751578152611ca5611e21565b9060208101918252611cb5612223565b6bffffffffffffffffffffffff8151167f00000000000000000000000000000000000000000000000000000000000000008111908115611dac575b50611d84576bffffffffffffffffffffffff907f2b9fb16353eaf3b33538b5a2635d05cee2876d96ddd81b0d2ea647b44594a11b6080600e5484845116906001600160a01b0387511690604051928782168452602084015260601c60408301526060820152a15191516bffffffffffffffffffffffff1960609190911b1691166bffffffffffffffffffffffff1617600e55005b7fffafa56d000000000000000000000000000000000000000000000000000000005f5260045ffd5b83516001600160a01b031615915081611dc7575b5083611cf0565b9050151583611dc0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff821117611dd157604052565b602435906001600160a01b038216820361075157565b600435906001600160a01b038216820361075157565b604435906001600160a01b038216820361075157565b67ffffffffffffffff8111611dd157601f01601f191660200190565b81601f8201121561075157803590611e9682611e63565b92611ea46040519485611dfe565b8284526020838301011161075157815f926020809301838601378301015290565b6003196040910112610751576004359060243590565b60a060031982011261075157600435916024356001600160a01b038116810361075157916044356001600160a01b03811681036107515791606435916084359067ffffffffffffffff821161075157611f3691600401611e7f565b90565b60a06003198201126107515760043591602435916044356001600160a01b03811681036107515791606435916084359067ffffffffffffffff821161075157611f3691600401611e7f565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b5190811515820361075157565b9190820391821161157957565b8181029291811591840414171561157957565b9190820180921161157957565b67ffffffffffffffff8111611dd15760051b60200190565b805182101561200f5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600454801561206e57611f3690600c5490612067600b5461161f61205e612075565b600a5490611fb6565b0490611fd6565b50600c5490565b6009544281116120825790565b504290565b9190612092816126f1565b825f52600860205260405f2090600282016001600160a01b038154166121228561211c6120d1846001600160a01b03165f52601260205260405f205490565b60405160208101917fed72e8b8797645ac76e0741da7d8d0afc24dddb21ca6338d5c5520b05b19230683528b604083015260608201528760808201526080815261046360a082611dfe565b836133e3565b6121e65750506121a36121b091612157845460601c6001600160a01b03165f52601260205260405f2080549060018201905590565b906040519060208201927fed72e8b8797645ac76e0741da7d8d0afc24dddb21ca6338d5c5520b05b1923068452886040840152606083015260808201526080815261046360a082611dfe565b92825460601c93846133e3565b156121be57611f369261318c565b7f5d29e1bd000000000000000000000000000000000000000000000000000000005f5260045ffd5b611f369594506001600160a01b03925061221a906001600160a01b03165f52601260205260405f2080549060018201905590565b5054169161318c565b6001600160a01b0360015416330361223757565b7f581a50f0000000000000000000000000000000000000000000000000000000005f527f6e6f742061646d696e00000000000000000000000000000000000000000000006004523360245260445ffd5b6001600160a01b03905460601c91169081036122a05750565b7f581a50f0000000000000000000000000000000000000000000000000000000005f527f6e6f74206f776e6572000000000000000000000000000000000000000000000060045260245260445ffd5b906122f98361351c565b61230161203c565b600c5561230c612075565b600a5561231882612514565b600182016123b681549261234a8460601c6001600160a01b03165f52600f6020526001600160a01b0360405f20541690565b936020876001600160a01b0360055416885460405180978194829362834efd60e71b84526bffffffffffffffffffffffff8160601c9116600485019160409194936001600160a01b0380926bffffffffffffffffffffffff606087019816865216602085015216910152565b03915afa9283156115da575f936124dc575b506124da966001600160a01b03946bffffffffffffffffffffffff6124b4879682966123ff846124ce98166118c584600454611fd6565b600455838554166124258d5460601c91825f5260076020526118c58560405f2054611fd6565b905f52600760205260405f20557fe03d018e6f94071d97d5befc6a430dedbb1792ef805cf2042edbc2bb75b4452886865460601c61248585604051938493846001600160a01b036040929594938160608401971683521660208201520152565b0390a283546bffffffffffffffffffffffff16606086901b6bffffffffffffffffffffffff191617845561252c565b166bffffffffffffffffffffffff19825416179055613554565b94541693169116613652565b565b9192506020823d60201161250c575b816124f860209383611dfe565b8101031261075157905191906124da6123c8565b3d91506124eb565b61251d816133a6565b60048201556003600c54910155565b6bffffffffffffffffffffffff8111612550576bffffffffffffffffffffffff1690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52606060045260245260445ffd5b6124da926001600160a01b03604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526125d0606483611dfe565b6136cd565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163014806126c8575b15612630577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526126c260c082611dfe565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612607565b42116126f957565b7f762ef75f000000000000000000000000000000000000000000000000000000005f5260045ffd5b60429061272c6125d5565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b9061276d92916133e3565b156121be57565b93929190936127828261351c565b61278b8361351c565b61279361203c565b600c5561279e612075565b600a556127aa82613554565b915f549360018501808611611579575f5584966001600160a01b0360055416936020604051809662834efd60e71b82528180612809898789600485019160409194936001600160a01b0380926060860197865216602085015216910152565b03915afa9485156115da575f95612acf575b5061282882600354611fd6565b60035561283785600454611fd6565b6004556001600160a01b03811690815f52600660205260405f2061285c848254611fd6565b9055815f52600760205260405f20612875878254611fd6565b90556128808361252c565b9161288a8761252c565b97600c54916040519060e082019382851067ffffffffffffffff861117611dd1578c98889788966040526bffffffffffffffffffffffff16845260208401928352604084019c6bffffffffffffffffffffffff168d52606084019a6001600160a01b03169c8d8c5260808501916001600160a01b03169b8c835260a0860193845260c08601945f86528c5f52600860205260405f2096516bffffffffffffffffffffffff166bffffffffffffffffffffffff1687546bffffffffffffffffffffffff1916178755516001600160a01b031661298a9087906bffffffffffffffffffffffff6bffffffffffffffffffffffff1983549260601b169116179055565b9051905160601b6bffffffffffffffffffffffff19166bffffffffffffffffffffffff909116176001850155516001600160a01b031660028401906001600160a01b031681547fffffffffffffffffffffffff0000000000000000000000000000000000000000161790555160038301555190600401556001600160a01b031690612a159183613652565b85604051938493612a469385909493926060926001600160a01b036080840197168352602083015260408201520152565b037f1a325385f16807e99fb688b597db78b00faee313dcf02e882dd16daab6fc3e1f91a2604051848382527f76ecb53d27210f298c33177d8fc8947b65cc94a2d54f65112683d2369058af9060205f93a4604051915f83526020830152604082015260607fe03d018e6f94071d97d5befc6a430dedbb1792ef805cf2042edbc2bb75b4452891a2565b9094506020813d602011612afb575b81612aeb60209383611dfe565b810103126107515751935f61281b565b3d9150612ade565b9091612b0d61203c565b600c55612b18612075565b600a55612b2482612514565b8154612b8d612b41836bffffffffffffffffffffffff8416611fb6565b60055460018601805460405162834efd60e71b815260048101859052606096871c6024820152951c604486015291939260209184916001600160a01b0390911690829081906064820190565b03915afa9182156115da575f92612d1d575b50907f5d89f707c2087d1f0c2ec0ef87eb3bbf3c0eac23c0028df006c7de091258544d94612ce7856001600160a01b03612cdb612d1896612be284600354611fb6565b600355612c046bffffffffffffffffffffffff8254166118c589600454611fd6565b600455855460601c5f52600660205260405f20612c22858254611fb6565b90556bffffffffffffffffffffffff815416612c53875460601c91825f5260076020526118c58a60405f2054611fd6565b905f52600760205260405f20556bffffffffffffffffffffffff612c768a61252c565b166bffffffffffffffffffffffff198754161786556bffffffffffffffffffffffff612ca18861252c565b166bffffffffffffffffffffffff198254161781555460601c6001600160a01b03165f52600f6020526001600160a01b0360405f20541690565b16835460601c90613652565b5460601c9260405194859485909493926060926001600160a01b036080840197168352602083015260408201520152565b0390a2565b91506020823d602011612d69575b81612d3860209383611dfe565b81010312610751579051907f5d89f707c2087d1f0c2ec0ef87eb3bbf3c0eac23c0028df006c7de091258544d612b9f565b3d9150612d2b565b91612e309192612d7f61203c565b600c55612d8a612075565b600a55612d9681612514565b600181019081548060601c92612dc7846001600160a01b03165f52600f6020526001600160a01b0360405f20541690565b916020845495612de5886bffffffffffffffffffffffff8916611fd6565b966001600160a01b036005541690604051809b8194829362834efd60e71b845260601c8c600485019160409194936001600160a01b0380926060860197865216602085015216910152565b03915afa9687156115da575f97612f63575b50857f1a325385f16807e99fb688b597db78b00faee313dcf02e882dd16daab6fc3e1f9793612d189593612e8d6bffffffffffffffffffffffff612ce795166118c588600454611fd6565b600455612e9c83600354611fd6565b600355845460601c5f52600660205260405f20612eba848254611fd6565b90556bffffffffffffffffffffffff815416612eeb865460601c91825f5260076020526118c58960405f2054611fd6565b905f52600760205260405f20556bffffffffffffffffffffffff612f0e8761252c565b166bffffffffffffffffffffffff198254161790556bffffffffffffffffffffffff612f398861252c565b166bffffffffffffffffffffffff198554161784556001600160a01b03845460601c911690613652565b96509192906020873d602011612f95575b81612f8160209383611dfe565b810103126107515795519590929185612e42565b3d9150612f74565b9091612fa88161351c565b612fb061203c565b600c55612fbb612075565b600a55612fc782612514565b600554825460018401805460405162834efd60e71b81526bffffffffffffffffffffffff84166004820152606093841c60248201529281901c604484015290949192602090849060649082906001600160a01b03165afa9283156115da575f93613120575b50906001600160a01b03946130576bffffffffffffffffffffffff600294166118c586600454611fd6565b6004556bffffffffffffffffffffffff815416613089835460601c91825f5260076020526118c58760405f2054611fd6565b905f52600760205260405f20556bffffffffffffffffffffffff6130ac8561252c565b166bffffffffffffffffffffffff19825416179055019383855416906040519283527f76ecb53d27210f298c33177d8fc8947b65cc94a2d54f65112683d2369058af90602086861694a4167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b919092506020823d602011613155575b8161313d60209383611dfe565b81010312610751579051916001600160a01b0361302c565b3d9150613130565b3d15613187573d9061316e82611e63565b9161317c6040519384611dfe565b82523d5f602084013e565b606090565b91909161319761203c565b600c556131a2612075565b600a556131ae83612514565b60048301928354936ec097ce7bc90715b34b9f10000000008504946131e36bffffffffffffffffffffffff600e541687611fb6565b95861561339b576ec097ce7bc90715b34b9f10000000008102908082046ec097ce7bc90715b34b9f100000000014901517156115795761322291611fb6565b9055600554815460018301805460405162834efd60e71b81526bffffffffffffffffffffffff84166004820152606093841c60248201529281901c6044840152909490939192602090849060649082906001600160a01b03165afa9283156115da575f93613363575b50906118ca6bffffffffffffffffffffffff80956132ed9594604051908b82528660208301527ffc6ecd966b430510beae9124efe7dd517ed5286d7ed0ae258f8556c7a9765a4460406001600160a01b038d1693a3166118c584600454611fd6565b166bffffffffffffffffffffffff1982541617905561332e827f00000000000000000000000000000000000000000000000000000000000000009283612580565b600e54906bffffffffffffffffffffffff8216908161334e575b50505090565b61335b9260601c90612580565b5f8080613348565b9250906020833d602011613393575b8161337f60209383611dfe565b8101031261075157915191906118ca61328b565b3d9150613372565b505050505050505f90565b611f36906133dd60048201549161161f6bffffffffffffffffffffffff6001830154169160036133d461203c565b91015490611fb6565b90611fd6565b906133ee8382613a2c565b5060048195929510156134ef571593846134d9575b5083156134105750505090565b5f93509061346161346f85949360405192839160208301957f1626ba7e0000000000000000000000000000000000000000000000000000000087526024840152604060448401526064830190611f84565b03601f198101835282611dfe565b51915afa61347b61315d565b816134cb575b81613490575b505f8080613348565b905060208180518101031261075157602001517f1626ba7e00000000000000000000000000000000000000000000000000000000145f613487565b905060208151101590613481565b6001600160a01b0384811691161493505f613403565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6001600160a01b03161561352c57565b7f084cae8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b031690815f52600f6020526001600160a01b0360405f20541691821561357e5750565b915060405161018b8082019082821067ffffffffffffffff831117611dd1576040918391613ae983396001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001681528560208201520301905ff080156115da576001600160a01b03168281935f52600f60205260405f206001600160a01b0383167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f53ff145c5d53f9465a0d97719aeab68428f349b2cf0b009e9dd75b94b315d7be5f80a3565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000060208201526001600160a01b0391821660248201529116604482015260648101919091526124da906136ab8160848101613461565b7f00000000000000000000000000000000000000000000000000000000000000005b5f806001600160a01b036136f693169360208151910182865af16136ef61315d565b90836139a0565b8051908115159182613737575b505061370c5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126107515760206137529101611fa9565b155f80613703565b60ff81146137b95760ff811690601f8211613791576040519161377e604084611dfe565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f6010548060011c91600182169182156138c6575b60208410831461389957838552849290811561385c57506001146137fd575b611f3692500382611dfe565b5060105f90815290917f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6725b818310613840575050906020611f36928201016137f1565b6020919350806001915483858801015201910190918392613828565b60209250611f369491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016137f1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926137d2565b60ff81146138f45760ff811690601f8211613791576040519161377e604084611dfe565b506040515f6011548060011c9160018216918215613996575b60208410831461389957838552849290811561385c575060011461393757611f3692500382611dfe565b5060115f90815290917f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c685b81831061397a575050906020611f36928201016137f1565b6020919350806001915483858801015201910190918392613962565b92607f169261390d565b906139dd57508051156139b557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613a23575b6139ee575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156139e6565b8151919060418303613a5c57613a559250602082015190606060408401519301515f1a90613a66565b9192909190565b50505f9160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613add579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156115da575f516001600160a01b03811615613ad357905f905f90565b505f906001905f90565b5050505f916003919056fe608080604052346100de5760408161018b803803809161001f828561011a565b8339810103126100de5780516001600160a01b03811691908290036100de57602001516001600160a01b038116908190036100de5760405163095ea7b360e01b81523360048201525f1960248201526020816044815f875af180156100d3576100e2575b50813b156100de575f916024839260405194859384926317066a5760e21b845260048401525af180156100d3576100c3575b604051603990816101528239f35b5f6100cd9161011a565b5f6100b5565b6040513d5f823e3d90fd5b5f80fd5b6020813d602011610112575b816100fb6020938361011a565b810103126100de5751801515036100de575f610083565b3d91506100ee565b601f909101601f19168101906001600160401b0382119082101761013d57604052565b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea2646970667358221220f219eb10253f5e37af99d28697305519c64df0a7634dd0e93fc68aef267ea15964736f6c634300081c0033a2646970667358221220916def1d0fd482d64fc284d341cf8c2f8091d5ce65cc63d82ef4be763897d8c664736f6c634300081c00330000000000000000000000000b010000b7624eb9b3dfbc279673c76e9d29d5f70000000000000000000000000b010000b7624eb9b3dfbc279673c76e9d29d5f70000000000000000000000005a58bc950e947383e34325b463586bb57bea3a340000000000000000000000000000000000000000000000008ac7230489e800000000000000000000000000004413203299bf8bdf59f6399cd9fe94d321a6882200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000b4f626f6c205374616b6572000000000000000000000000000000000000000000