0 txs
0 calls
constructor
constructor(address penaltyReceiverAddress, address stakeToken)
functions
authorization
viewfunction authorization(address) view returns (bool)
currentStakeToken
viewfunction currentStakeToken() view returns (address)
DENOMINATOR
viewfunction DENOMINATOR() view returns (uint256)
emergencyWithdraw
viewfunction emergencyWithdraw() view returns (bool)
getLeaderboard
viewfunction getLeaderboard() view returns (tuple[])
getStakers
viewfunction getStakers() view returns (address[])
getStakingPeriods
viewfunction getStakingPeriods() view returns (tuple[])
getUserStakes
viewfunction getUserStakes(address user) view returns (tuple[])
infoStakeToken
viewfunction infoStakeToken(address tokenAddress) view returns (uint256 locked, uint256 claimed)
isStakeToken
viewfunction isStakeToken(address tokenAddress) view returns (bool)
isStaking
purefunction isStaking() pure returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
penaltyPercentage
viewfunction penaltyPercentage() view returns (uint256)
penaltyReceiver
viewfunction penaltyReceiver() view returns (address)
projectOwner
viewfunction projectOwner() view returns (address)
stakerAtIndex
viewfunction stakerAtIndex(uint256 stakerId) view returns (address)
stakerIndex
viewfunction stakerIndex(address account) view returns (uint256)
stakingPeriodAtIndex
viewfunction stakingPeriodAtIndex(uint256 periodId) view returns (uint256 duration, uint256 votePower)
takePenalty
viewfunction takePenalty() view returns (bool)
totalPeriod
viewfunction totalPeriod() view returns (uint256)
totalStaked
viewfunction totalStaked() view returns (uint256)
totalStaker
viewfunction totalStaker() view returns (uint256)
totalStaking
viewfunction totalStaking() view returns (uint256)
userStakeAmount
viewfunction userStakeAmount(address account, address tokenAddress) view returns (uint256)
userStakes
viewfunction userStakes(address account, uint256 stakeId) view returns (bool stakeActive, address stakeToken, uint256 stakeTime, uint256 unstakeTime, uint256 restakeUpdate, uint256 stakeAmount, uint256 votePower)
userStakingInfo
viewfunction userStakingInfo(address account) view returns (uint256 amountStaked, uint256 totalStaking, uint256 activeStaking, uint256 inactiveStaking)
wTokenLocked
viewfunction wTokenLocked() view returns (bool)
addStakingPeriod
nonpayablefunction addStakingPeriod(uint256 duration, uint256 votePower)
authorize
nonpayablefunction authorize(address account)
lockWToken
nonpayablefunction lockWToken()
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
restake
nonpayablefunction restake(uint256 stakeId, uint256 periodId)
stake
nonpayablefunction stake(uint256 amount, uint256 periodId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unauthorize
nonpayablefunction unauthorize(address account)
unpause
nonpayablefunction unpause()
unstake
nonpayablefunction unstake(uint256 stakeId, uint256 amount)
updateEmergencyWithdraw
nonpayablefunction updateEmergencyWithdraw(bool newState)
updatePenalty
nonpayablefunction updatePenalty(uint256 newPenalty)
updatePenaltyReceiver
nonpayablefunction updatePenaltyReceiver(address newReceiver)
updateStakeTime
nonpayablefunction updateStakeTime(address account, uint256 stakeId, uint256 newTime)
updateStakingPeriod
nonpayablefunction updateStakingPeriod(uint256 periodId, uint256 newDuration, uint256 newVotePower)
updateStakingRule
nonpayablefunction updateStakingRule(address newStakeToken)
updateTakePenalty
nonpayablefunction updateTakePenalty(bool newState)
wTokens
nonpayablefunction wTokens(address tokenAddress, uint256 amount)
events
AddStakingPeriod
event AddStakingPeriod(uint256 periodId, uint256 duration, address caller, uint256 timestamp)
Lock
event Lock(string lockType, address caller, uint256 timestamp)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Restake
event Restake(uint256 stakeId, address caller, uint256 timestamp)
Stake
event Stake(uint256 stakeId, uint256 amount, address stakeToken, address caller, uint256 timestamp)
Unpaused
event Unpaused(address account)
Unstake
event Unstake(uint256 stakeId, uint256 amount, address stakeToken, address caller, uint256 timestamp)
UpdateAuthorizedAccount
event UpdateAuthorizedAccount(address authorizedAccount, address caller, bool state, uint256 timestamp)
UpdateEmergencyWithdraw
event UpdateEmergencyWithdraw(bool oldState, bool newState, address sender, uint256 timestamp)
UpdatePenalty
event UpdatePenalty(uint256 oldPenalty, uint256 newPenalty, address sender, uint256 timestamp)
UpdatePenaltyReceiver
event UpdatePenaltyReceiver(address oldReceiver, address newReceiver, address sender, uint256 timestamp)
UpdateStakingPeriod
event UpdateStakingPeriod(uint256 periodId, uint256 oldDuration, uint256 newDuration, uint256 oldVotePower, uint256 newVotePower, address caller, uint256 timestamp)
UpdateStakingRule
event UpdateStakingRule(address oldStakeToken, address newStakeToken, address caller, uint256 timestamp)
UpdateTakePenalty
event UpdateTakePenalty(bool oldState, bool newState, address sender, uint256 timestamp)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CanNoLongerRescueFund
error CanNoLongerRescueFund()
CannotUseAllCurrentValue
error CannotUseAllCurrentValue()
CannotUseCurrentAddress
error CannotUseCurrentAddress(address current)
CannotUseCurrentState
error CannotUseCurrentState(bool current)
CannotUseCurrentValue
error CannotUseCurrentValue(uint256 current)
CurrentAuthorizedState
error CurrentAuthorizedState(address account, bool state)
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InactiveStake
error InactiveStake()
InactiveStakingPeriod
error InactiveStakingPeriod()
InvalidAddress
error InvalidAddress(address invalid)
InvalidAuthorizedAccount
error InvalidAuthorizedAccount(address account)
InvalidPeriodId
error InvalidPeriodId(uint256 periodId, uint256 minId, uint256 maxId)
InvalidStakeId
error InvalidStakeId(uint256 stakeId, uint256 minId, uint256 maxId)
InvalidStakingPeriod
error InvalidStakingPeriod(uint256 periodId, uint256 minId, uint256 maxId)
InvalidValue
error InvalidValue(uint256 invalid)
NotStaker
error NotStaker()
NotTimeToUnstake
error NotTimeToUnstake(uint256 current, uint256 unstakeTime)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PleaseUnstakeAll
error PleaseUnstakeAll(uint256 amount)
PleaseUnstakeThisTokenAndStakeNewToken
error PleaseUnstakeThisTokenAndStakeNewToken()
ProjectOwnerCannotInitiateTransferEther
error ProjectOwnerCannotInitiateTransferEther()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60806040526000600381905560048190556005819055600655614e20600755600a805462ffffff60a01b191690553480156200003a57600080fd5b506040516200384c3803806200384c8339810160408190526200005d916200051c565b3380806200008657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b62000091816200033b565b506200009d816200038b565b6001600160a01b0381163314620000b957620000b9336200038b565b506002805460ff191690556001600160a01b0382161580620000e557506001600160a01b03821661dead145b156200011057604051634726455360e11b81526001600160a01b03831660048201526024016200007d565b600880546001600160a01b039384166001600160a01b03199182161790915560098054821633179055600a805492909316911681179091556000908152600e602090815260408220805460ff19166001179055600d905262278d007f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee556103e87f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef556276a7007ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5556104e27ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c65562ed4e007f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249556105dc7f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc24a556301e133807f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e2556107d07f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e3556303c267007fafafe8948a4ed9d478b1e9a5780b119b5edd00ea7d07bc35bef7c814824eb94b556109c47fafafe8948a4ed9d478b1e9a5780b119b5edd00ea7d07bc35bef7c814824eb94c556005905263076a70007fa5049387d9cb649c59f4bda666105ba636c2a103d8e2b232ba4d125737cd214955610bb87fa5049387d9cb649c59f4bda666105ba636c2a103d8e2b232ba4d125737cd214a55600660035562000554565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b62000395620003f2565b6001600160a01b0381161580620003b657506001600160a01b03811661dead145b15620003e157604051635077b8ed60e11b81526001600160a01b03821660048201526024016200007d565b620003ef8133600162000433565b50565b33620004066000546001600160a01b031690565b6001600160a01b031614620004315760405163118cdaa760e01b81523360048201526024016200007d565b565b6001600160a01b03831660009081526001602052604090205481151560ff9091161515036200048957604051635ce75a3b60e01b81526001600160a01b038416600482015281151560248201526044016200007d565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b80516001600160a01b03811681146200051757600080fd5b919050565b600080604083850312156200053057600080fd5b6200053b83620004ff565b91506200054b60208401620004ff565b90509250929050565b6132e880620005646000396000f3fe60806040526004361061028c5760003560e01c806389aca5751161015a578063b8e7023d116100c1578063e1b7fd421161007a578063e1b7fd42146108af578063f0b37c04146108cf578063f2fde38b146108ef578063f3bcbf631461090f578063f6251c8214610923578063fe70078b1461094357600080fd5b8063b8e7023d146107d8578063c804a019146107f8578063cbe1296914610828578063ce14a46e14610858578063d9b26a691461086e578063db2e21bc1461088e57600080fd5b80639e2c8a5b116101135780639e2c8a5b14610686578063a4475ce4146106a6578063a5879de3146106c6578063b509b2d4146106dc578063b5d5b5fa14610710578063b6a5d7de146107b857600080fd5b806389aca575146105da5780638c181f00146105fa5780638da5cb5b1461061c578063918f86741461063a5780639446a1a914610651578063966ad8ce1461066657600080fd5b806343352d61116101fe57806378d60a5b116101b757806378d60a5b146104fd5780637b0472f01461052a57806380d24a921461054a578063817b1cd214610582578063842e2981146105985780638456cb59146105c557600080fd5b806343352d611461044c578063515770271461046e5780635c975abb1461048e5780635e5cedae146104a65780636d763a6e146104c6578063715018a6146104e857600080fd5b80631f685bac116102505780631f685bac1461035c57806320d995341461037c5780632eefeb8f146103ad5780633f4ba83a146103cd57806340f45201146103e25780634326259f1461042b57600080fd5b806304047f321461029857806315908d51146102ba578063165defa4146102e35780631bc66322146102f95780631eaeb50f1461033c57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004612dcb565b6109a5565b005b3480156102c657600080fd5b506102d060075481565b6040519081526020015b60405180910390f35b3480156102ef57600080fd5b506102d060055481565b34801561030557600080fd5b5061032f610314366004612de6565b600c602052600090815260409020546001600160a01b031681565b6040516102da9190612dff565b34801561034857600080fd5b506102b8610357366004612e21565b610a8a565b34801561036857600080fd5b506102b8610377366004612e3e565b610b1f565b34801561038857600080fd5b50600a5461039d90600160b01b900460ff1681565b60405190151581526020016102da565b3480156103b957600080fd5b506102b86103c8366004612e21565b610dba565b3480156103d957600080fd5b506102b8610e4f565b3480156103ee57600080fd5b506104166103fd366004612de6565b600d602052600090815260409020805460019091015482565b604080519283526020830191909152016102da565b34801561043757600080fd5b50600a5461039d90600160a01b900460ff1681565b34801561045857600080fd5b50610461610e69565b6040516102da9190612e68565b34801561047a57600080fd5b506102b8610489366004612de6565b610f30565b34801561049a57600080fd5b5060025460ff1661039d565b3480156104b257600080fd5b506102b86104c1366004612eb5565b610fc3565b3480156104d257600080fd5b506104db611127565b6040516102da9190612ee1565b3480156104f457600080fd5b506102b86113a9565b34801561050957600080fd5b506102d0610518366004612dcb565b600b6020526000908152604090205481565b34801561053657600080fd5b506102b8610545366004612f58565b6113bb565b34801561055657600080fd5b506102d0610565366004612f7a565b601260209081526000928352604080842090915290825290205481565b34801561058e57600080fd5b506102d060065481565b3480156105a457600080fd5b506105b86105b3366004612dcb565b61184b565b6040516102da9190612fad565b3480156105d157600080fd5b506102b8611a0b565b3480156105e657600080fd5b506102b86105f536600461302d565b611a23565b34801561060657600080fd5b5061060f611b77565b6040516102da9190613060565b34801561062857600080fd5b506000546001600160a01b031661032f565b34801561064657600080fd5b506102d0620186a081565b34801561065d57600080fd5b506102b8611c56565b34801561067257600080fd5b50600a5461032f906001600160a01b031681565b34801561069257600080fd5b506102b86106a1366004612f58565b611cf8565b3480156106b257600080fd5b5060095461032f906001600160a01b031681565b3480156106d257600080fd5b506102d060045481565b3480156106e857600080fd5b506104166106f7366004612dcb565b600f602052600090815260409020805460019091015482565b34801561071c57600080fd5b5061077961072b366004612e3e565b601160209081526000928352604080842090915290825290208054600182015460028301546003840154600485015460059095015460ff8516956101009095046001600160a01b0316949087565b6040805197151588526001600160a01b039096166020880152948601939093526060850191909152608084015260a083015260c082015260e0016102da565b3480156107c457600080fd5b506102b86107d3366004612dcb565b61228f565b3480156107e457600080fd5b506102b86107f3366004612f58565b6122e6565b34801561080457600080fd5b5061039d610813366004612dcb565b600e6020526000908152604090205460ff1681565b34801561083457600080fd5b5061039d610843366004612dcb565b60016020526000908152604090205460ff1681565b34801561086457600080fd5b506102d060035481565b34801561087a57600080fd5b506102b8610889366004612f58565b6125c2565b34801561089a57600080fd5b50600a5461039d90600160a81b900460ff1681565b3480156108bb57600080fd5b5060085461032f906001600160a01b031681565b3480156108db57600080fd5b506102b86108ea366004612dcb565b612666565b3480156108fb57600080fd5b506102b861090a366004612dcb565b6126ba565b34801561091b57600080fd5b50600161039d565b34801561092f57600080fd5b506102b861093e366004612dcb565b612753565b34801561094f57600080fd5b5061098561095e366004612dcb565b60106020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016102da565b6109ad612847565b6008546001600160a01b03908116908216036109e7578060405163a936636960e01b81526004016109de9190612dff565b60405180910390fd5b6001600160a01b0381161580610a0757506001600160a01b03811661dead145b15610a275780604051634726455360e11b81526004016109de9190612dff565b600880546001600160a01b038381166001600160a01b03198316179092556040519116907fd40320d482dc16e68563e5cbd5806ae579ee853fb1c1f135ea785ac3e455aef790610a7e9083908590339042906130a2565b60405180910390a15050565b610a92612847565b600a54600160a81b900460ff16151581151503610ac55760405162a7e72d60e41b815281151560048201526024016109de565b600a805460ff60a81b198116600160a81b84151581029190911790925560405191900460ff16907f6af636cb4e7550127a14d9610479b7a0deb1ca0c685d7b1c39d13dce8b2e9f3790610a7e9083908590339042906130cc565b600a54600160b01b900460ff1615610b4a576040516328810dfd60e21b815260040160405180910390fd5b806001600160a01b038316610bcf5781600003610b645750475b6009546001600160a01b03163303610b8f576040516341e8951160e11b815260040160405180910390fd5b6009546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610bc9573d6000803e3d6000fd5b50505050565b6001600160a01b0383166000908152600e602052604090205460ff1615610d23576001600160a01b0383166000908152600f602052604081206001810154905411610c1b576000610c44565b6001600160a01b0384166000908152600f6020526040902060018101549054610c449190613108565b90506000846001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610c749190612dff565b602060405180830381865afa158015610c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb5919061311b565b90506000610cc38383613108565b9050801580610cd157508085115b15610cf55733818660405163391434e360e21b81526004016109de93929190613134565b84600003610d01578093505b600954610d1b906001600160a01b03888116911686612879565b505050505050565b81600003610d9b576040516370a0823160e01b81526001600160a01b038416906370a0823190610d57903090600401612dff565b602060405180830381865afa158015610d74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d98919061311b565b90505b600954610db5906001600160a01b03858116911683612879565b505050565b610dc2612847565b600a54600160a01b900460ff16151581151503610df55760405162a7e72d60e41b815281151560048201526024016109de565b600a805460ff60a01b198116600160a01b84151581029190911790925560405191900460ff16907fb64af1e64031639a9cc598c66cea18177ec05f449ef9f22563d91e9c026d4bc390610a7e9083908590339042906130cc565b610e576128d1565b610e5f612847565b610e676128f4565b565b6060600060045467ffffffffffffffff811115610e8857610e88613155565b604051908082528060200260200182016040528015610eb1578160200160208202803683370190505b5060045490915015610f2b5760015b6004548111610f29576000818152600c60205260409020546001600160a01b03168083610eee600185613108565b81518110610efe57610efe61316b565b6001600160a01b03909216602092830291909101909101525080610f2181613181565b915050610ec0565b505b919050565b610f38612847565b6007548103610f5d5760405163657e16cf60e01b8152600481018290526024016109de565b614e206007541115610f855760405163181c9d0b60e21b8152600481018290526024016109de565b60078054908290556040517fac0ad75ff031be691e6ce90defe1bc0d68a6ac5ba3b75a27c76856c631e914af90610a7e90839085903390429061319a565b610fcb612847565b6003548310611010578260006001600354610fe69190613108565b60405163220cadb760e01b81526004810193909352602483019190915260448201526064016109de565b60018210156110355760405163181c9d0b60e21b8152600481018390526024016109de565b600181101561105a5760405163181c9d0b60e21b8152600481018290526024016109de565b6000838152600d60205260409020548214801561108757506000838152600d602052604090206001015481145b156110a55760405163f6f35fcf60e01b815260040160405180910390fd5b6000838152600d6020908152604091829020805460018201805492879055859055835187815292830181905292820185905260608201819052608082018490523360a08301524260c0830152907fe1eccfc08b02d7afa3bb1eaae0ba98339084493b1b023b84c864cf73cf9a893f9060e0015b60405180910390a15050505050565b6060600060045467ffffffffffffffff81111561114657611146613155565b6040519080825280602002602001820160405280156111b257816020015b61119f6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b8152602001906001900390816111645790505b50905060005b600454811015611272576000600c816111d28460016131be565b81526020808201929092526040908101600090812054825160a0810184526001600160a01b039091168083526010808652848420805484526001810154848801526002810154958401959095529281905291909352600390910154606083015260808201819052845190925081908590859081106112525761125261316b565b60200260200101819052505050808061126a90613181565b9150506111b8565b5060005b600182516112849190613108565b811015610f295760005b600182845161129d9190613108565b6112a79190613108565b81101561139657826112ba8260016131be565b815181106112ca576112ca61316b565b6020026020010151600001518382815181106112e8576112e861316b565b6020026020010151600001511161138457600083828151811061130d5761130d61316b565b602002602001015190508382600161132591906131be565b815181106113355761133561316b565b602002602001015184838151811061134f5761134f61316b565b602090810291909101015280846113678460016131be565b815181106113775761137761316b565b6020026020010181905250505b8061138e81613181565b91505061128e565b50806113a181613181565b915050611276565b6113b1612904565b610e676000612940565b6113c3612990565b600a54604051636eb1769f60e11b81523360048201523060248201526000916001600160a01b03169063dd62ed3e90604401602060405180830381865afa158015611412573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611436919061311b565b600a546040516370a0823160e01b81529192506000916001600160a01b03909116906370a082319061146c903390600401612dff565b602060405180830381865afa158015611489573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ad919061311b565b905060018410156114d45760405163181c9d0b60e21b8152600481018590526024016109de565b60035483106115195782600060016003546114ef9190613108565b6040516362f0434f60e01b81526004810193909352602483019190915260448201526064016109de565b6000838152600d6020526040902054600111156115495760405163143e075960e31b815260040160405180910390fd5b8382101561157057308285604051637dc7a0d960e11b81526004016109de93929190613134565b838110156115975733818560405163391434e360e21b81526004016109de93929190613134565b3360009081526010602052604081205490036115b6576115b6336129b4565b3360009081526010602052604081206001908101546115d4916131be565b3360009081526010602052604081206001908101805493945090929091906115fd9084906131be565b90915550503360009081526010602052604081206002018054600192906116259084906131be565b909155505033600090815260106020526040812080548792906116499084906131be565b90915550503360009081526011602090815260408083208484528252808320805460ff19811660019081178355600a546001600160a01b0316610100026001600160a81b03199092169190911781178255429101819055878452600d909252909120546116b5916131be565b33600081815260116020908152604080832086845282528083206002810195909555600485018a9055888352600d82528083206001015460059095019490945591815260128252828120600a546001600160a01b0316825290915290812080548792906117239084906131be565b9091555050600a546001600160a01b03166000908152600f6020526040812080548792906117529084906131be565b9250508190555060016005600082825461176c91906131be565b92505081905550846006600082825461178591906131be565b9091555050600a546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156117e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180591906131d1565b50600a546040517f8cbcc18badd6d14ded750186c5461cc995c9b0311cf89a7d0c4f40f9e9a5f7579161111891849189916001600160a01b0390911690339042906131ee565b6001600160a01b0381166000908152601060205260408120600101546060919067ffffffffffffffff81111561188357611883613155565b6040519080825280602002602001820160405280156118ff57816020015b6118ec6040518060e0016040528060001515815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081525090565b8152602001906001900390816118a15790505b506001600160a01b03841660009081526010602052604090206001015490915015611a055760015b6001600160a01b0384166000908152601060205260409020600101548111611a03576040805160e0810182526001600160a01b03808716600090815260116020908152848220868352808252858320805460ff811615158752610100900490941682860152600180850154968601969096526002840154606086015260038401546080860152600484015460a086015291869052526005015460c082015290819084906119d49085613108565b815181106119e4576119e461316b565b60200260200101819052505080806119fb90613181565b915050611927565b505b92915050565b611a13612990565b611a1b612847565b610e67612a09565b611a2b612847565b611a33612990565b6001600160a01b0383166000908152600b60205260408120549003611a6b576040516359cc8a2f60e01b815260040160405180910390fd5b6001821080611a9457506001600160a01b03831660009081526010602052604090206001015482115b15611ae4576001600160a01b03831660009081526010602052604090819020600190810154915163b232345b60e01b815260048101859052602481019190915260448101919091526064016109de565b6001600160a01b038316600090815260116020908152604080832085845290915290205460ff16611b2857604051633800e7ef60e01b815260040160405180910390fd5b428110610db557336000908152601160209081526040808320858452909152902060020154811115610db557336000908152601160209081526040808320948352939052919091206002015550565b6060600060035467ffffffffffffffff811115611b9657611b96613155565b604051908082528060200260200182016040528015611bdb57816020015b6040805180820190915260008082526020820152815260200190600190039081611bb45790505b5060035490915015610f2b5760005b600354811015610f29576040805180820182526000838152600d602081815293822080548452918590528352600101549181019190915282518190849084908110611c3757611c3761316b565b6020026020010181905250508080611c4e90613181565b915050611bea565b611c5e612904565b600a54600160b01b900460ff1615611c89576040516328810dfd60e21b815260040160405180910390fd5b600a805460ff60b01b1916600160b01b179055604080516060808252600690820152653baa37b5b2b760d11b608082015233602082015242918101919091527f611312486a6540001c2b69bc849753e64cdefc853bbbc7a576d987821aec28b49060a0015b60405180910390a1565b6001821080611d1857503360009081526010602052604090206001015482115b15611d5f573360009081526010602052604090819020600190810154915163b232345b60e01b815260048101859052602481019190915260448101919091526064016109de565b33600090815260116020908152604080832085845290915290205460ff16611d9a57604051633800e7ef60e01b815260040160405180910390fd5b3360009081526011602090815260408083208584529091529020600201544210801590611de457503360009081526011602090815260408083208584529091529020600401548114155b15611e265733600090815260116020908152604080832085845290915290819020600490810154915163582a4ba760e01b81526109de92910190815260200190565b6001811080611e4357503360009081526010602052604090205481115b80611e6a575033600090815260116020908152604080832085845290915290206004015481115b15611e8b5760405163181c9d0b60e21b8152600481018290526024016109de565b33600090815260116020908152604080832085845290915290206002015442108015611ec15750600a54600160a81b900460ff16155b15611f085733600090815260116020908152604080832085845290915290819020600201549051639494440560e01b815242600482015260248101919091526044016109de565b3360009081526010602052604081208054839290611f27908490613108565b909155505033600090815260116020908152604080832085845290915281206004018054839290611f59908490613108565b90915550503360009081526011602090815260408083208584529091529020600401546001111561201557336000908152601060205260408120600301805460019290611fa79084906131be565b9091555050336000908152601060205260408120600201805460019290611fcf908490613108565b90915550503360009081526011602090815260408083208584529091528120805460ff19168155600590810182905580546001929061200f908490613108565b90915550505b336000818152601160209081526040808320868452825280832054938352601282528083206101009094046001600160a01b03168084529390915281208054849290612062908490613108565b90915550506001600160a01b0381166000908152600f6020526040812060010180548492906120929084906131be565b9250508190555081600660008282546120ab9190613108565b909155505033600090815260106020526040902060020154600111156120d4576120d433612a19565b33600090815260116020908152604080832086845290915290206002015482904210801561210b5750600a54600160a81b900460ff165b80156121205750600a54600160a01b900460ff165b156121ca576000620186a060075483612139919061321a565b6121439190613231565b60085460405163a9059cbb60e01b81529192506001600160a01b038086169263a9059cbb926121789216908590600401613253565b6020604051808303816000875af1158015612197573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121bb91906131d1565b506121c68183613108565b9150505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906121f89033908590600401613253565b6020604051808303816000875af1158015612217573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223b91906131d1565b50600a546040517fd662c1e7483c11e8c4b98e808eb5a12d694e1748c7d115710900d459713d89ed9161228191879187916001600160a01b0390911690339042906131ee565b60405180910390a150505050565b612297612904565b6001600160a01b03811615806122b757506001600160a01b03811661dead145b156122d75780604051635077b8ed60e11b81526004016109de9190612dff565b6122e381336001612aa0565b50565b6122ee612990565b600182108061230e57503360009081526010602052604090206001015482115b15612355573360009081526010602052604090819020600190810154915163b232345b60e01b815260048101859052602481019190915260448101919091526064016109de565b33600090815260116020908152604080832085845290915290205460ff1661239057604051633800e7ef60e01b815260040160405180910390fd5b60035481106123ab5780600060016003546114ef9190613108565b6000818152600d6020526040902054600111156123db5760405163143e075960e31b815260040160405180910390fd5b600a5433600090815260116020908152604080832086845290915290205461010090046001600160a01b0390811691161461242957604051636be9358960e11b815260040160405180910390fd5b33600090815260116020908152604080832085845290915290204260038201819055600290910154116124e8573360009081526011602090815260408083208584528252808320426001909101819055848452600d9092529091205461248e916131be565b336000908152601160209081526040808320868452825280832060020193909355838252600d905220600101546124c590426131be565b336000908152601160209081526040808320868452909152902060050155612583565b6000818152600d60209081526040808320543384526011835281842086855290925282206002018054919290916125209084906131be565b90915550506000818152600d6020908152604080832060010154338452601183528184208685529092529091206005015414612583576000818152600d602090815260408083206001015433845260118352818420868552909252909120600501555b6040805183815233602082015242918101919091527f554f5e92f793f11c8b3b5a6966e4b2f125a7206ad942c4b98f305b3486c6841790606001610a7e565b6125ca612904565b60018210156125ef5760405163181c9d0b60e21b8152600481018390526024016109de565b600380546000908152600d60205260408082208590558254825281206001018390558154919061261e83613181565b91905055507f5e7a6f3ad8dfcc220de99f548537a1fad961e7410692bf0391ee2d2b46a49e3760016003546126539190613108565b833342604051610a7e949392919061319a565b61266e612904565b6001600160a01b038116158061268e57506001600160a01b03811661dead145b156126ae5780604051635077b8ed60e11b81526004016109de9190612dff565b6122e381336000612aa0565b6126c2612904565b6000546001600160a01b03166001600160a01b0316816001600160a01b031603612701578060405163a936636960e01b81526004016109de9190612dff565b61deac196001600160a01b0382160161272f5780604051634726455360e11b81526004016109de9190612dff565b600980546001600160a01b0319166001600160a01b0383161790556122e381612b6a565b61275b612904565b600a546001600160a01b039081169082160361278c578060405163a936636960e01b81526004016109de9190612dff565b6001600160a01b0381166127b55780604051634726455360e11b81526004016109de9190612dff565b600a80546001600160a01b038381166001600160a01b0319831681179093556000928352600e60205260409092205491169060ff16612812576001600160a01b0382166000908152600e60205260409020805460ff191660011790555b7fe605894f3c59950b32ba3abef4c8452584e9214aa97a1d403ede1495cbd090aa81833342604051610a7e94939291906130a2565b3360009081526001602052604090205460ff16610e67573360405163118cdaa760e01b81526004016109de9190612dff565b610db583846001600160a01b031663a9059cbb858560405160240161289f929190613253565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612ba5565b60025460ff16610e6757604051638dfc202b60e01b815260040160405180910390fd5b6128fc6128d1565b610e67612bff565b336129176000546001600160a01b031690565b6001600160a01b031614610e67573360405163118cdaa760e01b81526004016109de9190612dff565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60025460ff1615610e675760405163d93c066560e01b815260040160405180910390fd5b600480549060006129c483613181565b90915550506004546001600160a01b039091166000818152600b60209081526040808320859055938252600c90529190912080546001600160a01b0319169091179055565b612a11612990565b610e67612c41565b6001600160a01b038181166000908152600b602081815260408084208054600480548752600c808652848820549098168088529585528387208290558187529690935281852080546001600160a01b03199081168617909155908590558554855290842080549091169055835490939192909190612a968361326c565b9190505550505050565b6001600160a01b03831660009081526001602052604090205481151560ff909116151503612af457604051635ce75a3b60e01b81526001600160a01b038416600482015281151560248201526044016109de565b6001600160a01b03838116600081815260016020908152604091829020805460ff19168615159081179091558251938452938616908301528101919091524260608201527fff1d0a27274ca0cc8403b0e8f4a70b968164366f4856d18f7569eba542e9aae49060800160405180910390a1505050565b612b72612904565b6001600160a01b038116612b9c576000604051631e4fbdf760e01b81526004016109de9190612dff565b6122e381612940565b6000612bba6001600160a01b03841683612c86565b90508051600014158015612bdf575080806020019051810190612bdd91906131d1565b155b15610db55782604051635274afe760e01b81526004016109de9190612dff565b612c076128d1565b6002805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90611cee903390612dff565b612c49612990565b6002805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890611cee903390612dff565b6060612c9483836000612c9b565b9392505050565b606081471015612cc0573060405163cd78605960e01b81526004016109de9190612dff565b600080856001600160a01b03168486604051612cdc9190613283565b60006040518083038185875af1925050503d8060008114612d19576040519150601f19603f3d011682016040523d82523d6000602084013e612d1e565b606091505b5091509150612d2e868383612d38565b9695505050505050565b606082612d4d57612d4882612d8b565b612c94565b8151158015612d6457506001600160a01b0384163b155b15612d845783604051639996b31560e01b81526004016109de9190612dff565b5080612c94565b805115612d9b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610f2b57600080fd5b600060208284031215612ddd57600080fd5b612c9482612db4565b600060208284031215612df857600080fd5b5035919050565b6001600160a01b0391909116815260200190565b80151581146122e357600080fd5b600060208284031215612e3357600080fd5b8135612c9481612e13565b60008060408385031215612e5157600080fd5b612e5a83612db4565b946020939093013593505050565b6020808252825182820181905260009190848201906040850190845b81811015612ea95783516001600160a01b031683529284019291840191600101612e84565b50909695505050505050565b600080600060608486031215612eca57600080fd5b505081359360208301359350604090920135919050565b602080825282518282018190526000919060409081850190868401855b82811015612f4b5781518051855286810151878601528581015186860152606080820151908601526080908101516001600160a01b03169085015260a09093019290850190600101612efe565b5091979650505050505050565b60008060408385031215612f6b57600080fd5b50508035926020909101359150565b60008060408385031215612f8d57600080fd5b612f9683612db4565b9150612fa460208401612db4565b90509250929050565b602080825282518282018190526000919060409081850190868401855b82811015612f4b578151805115158552868101516001600160a01b0316878601528581015186860152606080820151908601526080808201519086015260a0808201519086015260c0908101519085015260e09093019290850190600101612fca565b60008060006060848603121561304257600080fd5b61304b84612db4565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b82811015612f4b5781518051855286015186850152928401929085019060010161307d565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b931515845291151560208401526001600160a01b03166040830152606082015260800190565b634e487b7160e01b600052601160045260246000fd5b81810381811115611a0557611a056130f2565b60006020828403121561312d57600080fd5b5051919050565b6001600160a01b039390931683526020830191909152604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060018201613193576131936130f2565b5060010190565b93845260208401929092526001600160a01b03166040830152606082015260800190565b80820180821115611a0557611a056130f2565b6000602082840312156131e357600080fd5b8151612c9481612e13565b94855260208501939093526001600160a01b039182166040850152166060830152608082015260a00190565b8082028115828204841417611a0557611a056130f2565b60008261324e57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160a01b03929092168252602082015260400190565b60008161327b5761327b6130f2565b506000190190565b6000825160005b818110156132a4576020818601810151858301520161328a565b50600092019182525091905056fea26469706673582212205afd365d1c5b3e73cae8f5ccc4d065220fb94a378f1d0591d846daff6eb55e8c64736f6c63430008120033000000000000000000000000288f17b6649179beaefa1ac6e7ae6fcec7a4c38c00000000000000000000000052c7aa73dc430dab948eee73ea253383fd223420