97 txs
174 calls
constructor
constructor(address implementation_, address weth_, address teaToken_, address permit2_, address permitManager_, address trustedForwarder_, address operator)
functions
activeStakesCount
viewfunction activeStakesCount(address) view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hashTypedDataV4
viewfunction hashTypedDataV4(bytes32 structHash) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
implementation
viewfunction implementation() view returns (address)
isTrustedForwarder
viewfunction isTrustedForwarder(address forwarder) view returns (bool)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
operatorUserNonces
viewfunction operatorUserNonces(address, address) view returns (uint256)
permit2
viewfunction permit2() view returns (address)
permitManager
viewfunction permitManager() view returns (address)
pools
viewfunction pools(uint64) view returns (address synthToken, address underlyingAsset)
PROXY_COLLECT_REWARD_TYPEHASH
viewfunction PROXY_COLLECT_REWARD_TYPEHASH() view returns (bytes32)
rewardUserMap
viewfunction rewardUserMap(uint64) view returns (address recipient, uint256 rewardAmount)
stakeUserMap
viewfunction stakeUserMap(uint64) view returns (address staker, uint64 poolId, bool isEthStake)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
teaToken
viewfunction teaToken() view returns (address)
trustedForwarder
viewfunction trustedForwarder() view returns (address)
unstakeUserMap
viewfunction unstakeUserMap(uint64) view returns (address staker, uint64 stakeId, uint256 unstakedAmount)
weth
viewfunction weth() view returns (address)
collectReward
nonpayablefunction collectReward(tuple param, tuple proxyParam)
emergencyWithdrawErc20
nonpayablefunction emergencyWithdrawErc20(address[] tokens, address recipient)
emergencyWithdrawEth
nonpayablefunction emergencyWithdrawEth(address recipient)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setTeaToken
nonpayablefunction setTeaToken(address teaToken_)
stake
payablefunction stake(uint64 poolId, uint256 amount, bytes permitSingleSignature, bytes tokenSignature) payable
syncPools
nonpayablefunction syncPools(uint64[] poolIds)
unstake
nonpayablefunction unstake(uint64 stakeId, uint256 amount)
withdrawReward
nonpayablefunction withdrawReward(uint64 rewardId)
withdrawStake
nonpayablefunction withdrawStake(uint64 unstakeId)
events
CollectedReward
event CollectedReward(uint64 indexed rewardId, address indexed staker, uint256 amount, uint256 endCooldownTimestamp)
EIP712DomainChanged
event EIP712DomainChanged()
EmergencyWithdrawErc20
event EmergencyWithdrawErc20(address recipient, address[] tokens)
EmergencyWithdrawEth
event EmergencyWithdrawEth(address recipient, 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)
SetTeaToken
event SetTeaToken(address oldToken, address newToken)
Staked
event Staked(uint64 indexed stakeId, address indexed token, address indexed staker, uint256 amount)
SynkedPool
event SynkedPool(uint64 indexed poolId, (address synthToken, address underlyingAsset) pool)
Unstaked
event Unstaked(uint64 indexed unstakeId, uint64 indexed stakeId, address indexed staker, uint256 amount, uint256 endCooldownTimestamp)
WithdrewReward
event WithdrewReward(uint64 indexed rewardId, address indexed staker, uint256 amount)
WithdrewStake
event WithdrewStake(uint64 indexed unstakeId, address indexed staker, address indexed token, uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EthTransferFailed
error EthTransferFailed()
FailedCall
error FailedCall()
InvalidCaller
error InvalidCaller(address caller)
InvalidEthAmount
error InvalidEthAmount(uint256 amount, uint256 actualEthValue)
InvalidPoolId
error InvalidPoolId(uint64 poolId)
InvalidProxyCollectRewardSignature
error InvalidProxyCollectRewardSignature(string reason)
InvalidRewardId
error InvalidRewardId(uint64 rewardId)
InvalidShortString
error InvalidShortString()
InvalidStakeId
error InvalidStakeId(uint64 stakeId)
InvalidUnstakeId
error InvalidUnstakeId(uint64 unstakeId)
NotEthPayment
error NotEthPayment()
NotStakedYet
error NotStakedYet(address staker)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StaticCallFailed
error StaticCallFailed()
StringTooLong
error StringTooLong(string str)
ZeroAddress
error ZeroAddress()
ZeroUint256
error ZeroUint256()
creation bytecode
0x61020060405234801561001157600080fd5b50604051614b66380380614b66833981016040819052610030916104d4565b604080518082018252601181527050726f787953796e74685374616b696e6760781b602080830191909152825180840190935260038352620312e360ec1b908301528391898989898988816001600160a01b0381166100a25760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03908116608052869081166100d15760405163d92e233d60e01b815260040160405180910390fd5b856001600160a01b0381166100f95760405163d92e233d60e01b815260040160405180910390fd5b856001600160a01b0381166101215760405163d92e233d60e01b815260040160405180910390fd5b856001600160a01b0381166101495760405163d92e233d60e01b815260040160405180910390fd5b856001600160a01b0381166101715760405163d92e233d60e01b815260040160405180910390fd5b856001600160a01b0381166101995760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038c811660a0528b811660c052600180546001600160a01b0319168c8316179055891660e0526101d860006101d361030b565b61031a565b506102037f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb8861031a565b505060016007555061022499508b985060089750506103c795505050505050565b6101a0526102338160096103c7565b6101c0528151602080840191909120610160528151908201206101805246610120526102c36101605161018051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b61010052505030610140526001600160a01b039081166101e052829081166102fe5760405163d92e233d60e01b815260040160405180910390fd5b50505050505050506107ac565b60006103156103f8565b905090565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166103bd576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561037561030b565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016103c1565b5060005b92915050565b60006020835110156103e3576103dc8361044a565b90506103c1565b816103ee84826105f9565b5060ff90506103c1565b600036601461040633610491565b80156104125750808210155b156104425760003661042483856106b7565b61042f9282906106d8565b61043891610702565b60601c9250505090565b339250505090565b600080829050601f8151111561047e578260405163305a27a960e01b8152600401610475919061073a565b60405180910390fd5b805161048982610788565b179392505050565b600061049d6101e05190565b6001600160a01b0316826001600160a01b0316149050919050565b80516001600160a01b03811681146104cf57600080fd5b919050565b600080600080600080600060e0888a0312156104ef57600080fd5b6104f8886104b8565b9650610506602089016104b8565b9550610514604089016104b8565b9450610522606089016104b8565b9350610530608089016104b8565b925061053e60a089016104b8565b915061054c60c089016104b8565b905092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061058457607f821691505b6020821081036105a457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156105f457806000526020600020601f840160051c810160208510156105d15750805b601f840160051c820191505b818110156105f157600081556001016105dd565b50505b505050565b81516001600160401b038111156106125761061261055a565b610626816106208454610570565b846105aa565b6020601f82116001811461065a57600083156106425750848201515b600019600385901b1c1916600184901b1784556105f1565b600084815260208120601f198516915b8281101561068a578785015182556020948501946001909201910161066a565b50848210156106a85786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b818103818111156103c157634e487b7160e01b600052601160045260246000fd5b600080858511156106e857600080fd5b838611156106f557600080fd5b5050820193919092039150565b80356001600160601b03198116906014841015610733576001600160601b0319601485900360031b81901b82161691505b5092915050565b602081526000825180602084015260005b81811015610768576020818601810151604086840101520161074b565b506000604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156105a45760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161427a6108ec600039600081816104b70152818161059e0152612b860152600061207d0152600061205001526000612cc501526000612c9d01526000612bf801526000612c2201526000612c4c0152600081816102500152818161283401528181612928015281816129a20152612a2b0152600081816103d901528181610c8b0152818161145401528181611d5201526121750152600081816104f901528181610b5d01528181610ea901528181610f1601528181610fcc015281816115ec0152818161187c015281816118e601528181611a4301528181611b1b01528181612371015281816123db015281816125ca0152818161280701526128ed0152600081816107d701526122cc015261427a6000f3fe6080604052600436106101fd5760003560e01c80637da0a8771161010d578063b0cb69f1116100a0578063d0cc7fae1161006f578063d0cc7fae14610785578063d547741f146107a5578063df890592146107c5578063e5c90066146107f9578063f5b541a61461087b57600080fd5b8063b0cb69f114610705578063b1c3113614610732578063b2c35c2514610745578063cbebeddd1461076557600080fd5b806389a5f084116100dc57806389a5f0841461064257806391d14854146106a3578063a217fddf146106c3578063ac9650d8146106d857600080fd5b80637da0a8771461058f578063841ec13a146105c257806384b0196e146105fa5780638933b6fd1461062257600080fd5b80633fc8cef311610190578063572b6c051161015f578063572b6c051461049a5780635c60da1b146104e757806360c653e81461051b5780636c6afc461461053b5780637c9a78531461056f57600080fd5b80633fc8cef3146103c7578063478b708c146103fb5780634980f2881461045a5780635135de6c1461047a57600080fd5b80632ce7777f116101cc5780632ce7777f146102ea5780632f2ff15d1461030a57806332dc9ff01461032a57806336568abe146103a757600080fd5b806301ffc9a71461020957806312261ee71461023e5780631abcda8e1461028a578063248a9ca3146102ac57600080fd5b3661020457005b600080fd5b34801561021557600080fd5b506102296102243660046135ed565b6108af565b60405190151581526020015b60405180910390f35b34801561024a57600080fd5b506102727f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610235565b34801561029657600080fd5b506102aa6102a53660046136cd565b6108e6565b005b3480156102b857600080fd5b506102dc6102c7366004613782565b60009081526020819052604090206001015490565b604051908152602001610235565b3480156102f657600080fd5b506102aa6103053660046137b0565b610aaa565b34801561031657600080fd5b506102aa6103253660046137cd565b610d5b565b34801561033657600080fd5b5061037a6103453660046137b0565b600460205260009081526040902080546001909101546001600160a01b03821691600160a01b90046001600160401b03169083565b604080516001600160a01b0390941684526001600160401b03909216602084015290820152606001610235565b3480156103b357600080fd5b506102aa6103c23660046137cd565b610d86565b3480156103d357600080fd5b506102727f000000000000000000000000000000000000000000000000000000000000000081565b34801561040757600080fd5b5061043b6104163660046137b0565b600560205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b039093168352602083019190915201610235565b34801561046657600080fd5b506102dc610475366004613782565b610dce565b34801561048657600080fd5b506102aa6104953660046137fd565b610dd9565b3480156104a657600080fd5b506102296104b5366004613845565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156104f357600080fd5b506102727f000000000000000000000000000000000000000000000000000000000000000081565b34801561052757600080fd5b506102aa610536366004613845565b611116565b34801561054757600080fd5b506102dc7fb7d3d2a62bee731be5f4fe2e92f7b17eb3c8f56750a2962d43fab305877acbe881565b34801561057b57600080fd5b506102aa61058a366004613845565b6111b4565b34801561059b57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610272565b3480156105ce57600080fd5b506102dc6105dd366004613862565b600a60209081526000928352604080842090915290825290205481565b34801561060657600080fd5b5061060f611240565b60405161023597969594939291906138e0565b34801561062e57600080fd5b50600154610272906001600160a01b031681565b34801561064e57600080fd5b5061068361065d3660046137b0565b600260205260009081526040902080546001909101546001600160a01b03918216911682565b604080516001600160a01b03938416815292909116602083015201610235565b3480156106af57600080fd5b506102296106be3660046137cd565b611286565b3480156106cf57600080fd5b506102dc600081565b3480156106e457600080fd5b506106f86106f33660046139c3565b6112af565b6040516102359190613a04565b34801561071157600080fd5b506102dc610720366004613845565b60066020526000908152604090205481565b6102aa610740366004613aaa565b61140d565b34801561075157600080fd5b506102aa6107603660046137b0565b611572565b34801561077157600080fd5b506102aa6107803660046139c3565b6116d9565b34801561079157600080fd5b506102aa6107a0366004613b39565b61172e565b3480156107b157600080fd5b506102aa6107c03660046137cd565b611bc8565b3480156107d157600080fd5b506102727f000000000000000000000000000000000000000000000000000000000000000081565b34801561080557600080fd5b5061084c6108143660046137b0565b6003602052600090815260409020546001600160a01b03811690600160a01b81046001600160401b031690600160e01b900460ff1683565b604080516001600160a01b0390941684526001600160401b039092166020840152151590820152606001610235565b34801561088757600080fd5b506102dc7f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb81565b60006001600160e01b03198216637965db0b60e01b14806108e057506301ffc9a760e01b6001600160e01b03198316145b92915050565b806001600160a01b03811661090e5760405163d92e233d60e01b815260040160405180910390fd5b600061091981611bed565b835160005b81811015610a6957600086828151811061093a5761093a613b65565b6020026020010151905060006001600160a01b0316816001600160a01b0316036109775760405163d92e233d60e01b815260040160405180910390fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b17905290516000916001600160a01b038416916109ca9190613b7b565b600060405180830381855afa9150503d8060008114610a05576040519150601f19603f3d011682016040523d82523d6000602084013e610a0a565b606091505b50915050600081806020019051810190610a249190613b97565b905080600003610a47576040516352036b1b60e11b815260040160405180910390fd5b610a5b6001600160a01b0384168983611bfe565b50505080600101905061091e565b507f04372e3a0daa683680b6a3c23954a5f06b7dd78975050c324cfd62ad4a7b3a698486604051610a9b929190613bb0565b60405180910390a15050505050565b610ab2611c5d565b6000610abc611c87565b6001600160401b0383166000908152600460205260409020549091506001600160a01b03808316911614610b1357604051633d10047760e11b81526001600160401b03831660048201526024015b60405180910390fd5b6001600160401b03828116600081815260046020819052604080832080546001820180549590559151632ce7777f60e01b8152928301949094529293600160a01b909304909216917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632ce7777f90602401600060405180830381600087803b158015610ba957600080fd5b505af1158015610bbd573d6000803e3d6000fd5b5050506001600160401b038084166000908152600360205260408120549092508291610bf091600160a01b900416611c96565b915091506000610c63836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5b9190613c12565b601286611cc5565b6001600160401b038616600090815260036020526040902054909150600160e01b900460ff167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908516148015610cc25750805b15610cd757610cd283838a611d31565b610ce2565b610ce283838a611dc0565b80610ced5783610cf0565b60005b6001600160a01b0316886001600160a01b03168a6001600160401b03167f29e0cf83549c49b9d2d84fc4a16bc39e7ca3f9c8fdf53f9478de5601dd255f6f88604051610d3e91815260200190565b60405180910390a45050505050505050610d586001600755565b50565b600082815260208190526040902060010154610d7681611bed565b610d808383611e1e565b50505050565b610d8e611c87565b6001600160a01b0316816001600160a01b031614610dbf5760405163334bd91960e11b815260040160405180910390fd5b610dc98282611eb1565b505050565b60006108e082611f3a565b6000610de3611c87565b9050610df26020830183613845565b6001600160a01b0316816001600160a01b031614610e2e5760405163065ece9760e51b81526001600160a01b0382166004820152602401610b0a565b6001600160a01b0381166000908152600660205260408120549003610e71576040516368d7b96d60e11b81526001600160a01b0382166004820152602401610b0a565b610e92610e7c611c87565b610e8c6060860160408701613845565b84611f67565b60405163ed6d231160e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063ed6d231190610ede908690600401613c3a565b600060405180830381600087803b158015610ef857600080fd5b505af1158015610f0c573d6000803e3d6000fd5b50505050600060017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634c6423e16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190613cbe565b610fa09190613cf1565b6040516323f80cff60e21b81526001600160401b03821660048201529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638fe033fc90602401606060405180830381865afa158015611013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110379190613d10565b60408051808201909152909150806110526020870187613845565b6001600160a01b039081168252602084810151928101929092526001600160401b03851660009081526005835260409020835181546001600160a01b0319169216919091178155918101516001909201919091556110b290850185613845565b6001600160a01b0316826001600160401b03167f9ae54e79acbe8f4f04b68fb368abc9a10502aa4bc8a330d2e5790db9ba07e77e83602001518460400151604051611107929190918252602082015260400190565b60405180910390a35050505050565b600061112181611bed565b816001600160a01b0381166111495760405163d92e233d60e01b815260040160405180910390fd5b600154604080516001600160a01b03928316815291851660208301527fd8d36a71d9d06c4989dbe4152eccc8dd888cb35e2334b8791ac6cbd6952cfb81910160405180910390a15050600180546001600160a01b0319166001600160a01b0392909216919091179055565b806001600160a01b0381166111dc5760405163d92e233d60e01b815260040160405180910390fd5b60006111e781611bed565b478015610d80576111f88185611fd5565b604080516001600160a01b0386168152602081018390527f596d18fa1eb398a524b655c673ed625f71cf12d2224681c8832413ed0b373b4c910160405180910390a150505050565b600060608060008060006060611254612049565b61125c612076565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b606060006112bb611c87565b6001600160a01b0316336001600160a01b031614611326576000366112e1601482613d56565b6112ec928290613d69565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061133692505050565b6040805160008152602081019091525b9050826001600160401b0381111561135057611350613617565b60405190808252806020026020018201604052801561138357816020015b606081526020019060019003908161136e5790505b50915060005b83811015611405576113e0308686848181106113a7576113a7613b65565b90506020028101906113b99190613d93565b856040516020016113cc93929190613dd9565b6040516020818303038152906040526120a3565b8382815181106113f2576113f2613b65565b6020908102919091010152600101611389565b505092915050565b848060000361142f576040516352036b1b60e11b815260040160405180910390fd5b611437611c5d565b61144087612119565b60008061144c89611c96565b9150915060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480156114935750600034115b905080156114a9576114a48961214a565b61154f565b34156114c857604051637da8d4b760e11b815260040160405180910390fd5b61154f83308b89898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121e292505050565b61155c83838c8c8561233c565b5050506115696001600755565b50505050505050565b600061157c611c87565b6001600160401b0383166000908152600560205260409020549091506001600160a01b038083169116146115ce576040516354a2cd6160e11b81526001600160401b0383166004820152602401610b0a565b60405163b2c35c2560e01b81526001600160401b03831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063b2c35c2590602401600060405180830381600087803b15801561163857600080fd5b505af115801561164c573d6000803e3d6000fd5b505050506001600160401b03821660009081526005602052604081206001908101805492905554611687906001600160a01b03168383611bfe565b816001600160a01b0316836001600160401b03167ff7dd3984698e59497a2594a07917f18dd6bb187b9206fbf6cda6238a54116dab836040516116cc91815260200190565b60405180910390a3505050565b60006116e481611bed565b8160005b818110156117275761171f85858381811061170557611705613b65565b905060200201602081019061171a91906137b0565b6125a9565b6001016116e8565b5050505050565b8080600003611750576040516352036b1b60e11b815260040160405180910390fd5b600061175a611c87565b6001600160401b0385166000908152600360205260409020549091506001600160a01b038083169116146117ac5760405163edf0fa8760e01b81526001600160401b0385166004820152602401610b0a565b6001600160401b03808516600090815260036020526040902054600160a01b9004166117d781612119565b60006117e282611c96565b5090506000611854826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184c9190613c12565b601288611cc5565b6040516368663fd760e11b81526001600160401b0389166004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d0cc7fae90604401600060405180830381600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b50505050600060017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316639a64ab046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611942573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119669190613cbe565b6119709190613cf1565b6001600160401b0381166000908152600460205260409020549091506001600160a01b0316156119be57604051633d10047760e11b81526001600160401b0382166004820152602401610b0a565b604080516060810182526001600160a01b0387811682526001600160401b038b811660208085018281528587018e81528885166000908152600493849052889020965187549251909516600160a01b026001600160e01b03199092169486169490941717855591516001909401939093559251620f293760e21b8152928301919091527f00000000000000000000000000000000000000000000000000000000000000001690623ca4dc90602401606060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aad9190613e00565b60400151600003611ad9576001600160a01b038516600090815260066020526040902080546000190190555b846001600160a01b0316886001600160401b0316826001600160401b03167f73c7c3fa41e7e6245b6e9afa78658ce065bb1044e8152519ceabf7536bdcd42b8a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166387cf6eaf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9b9190613b97565b611ba59042613e4f565b604080519283526020830191909152015b60405180910390a45050505050505050565b600082815260208190526040902060010154611be381611bed565b610d808383611eb1565b610d5881611bf9611c87565b612ac8565b6040516001600160a01b03838116602483015260448201839052610dc991859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612b05565b600260075403611c8057604051633ee5aeb560e01b815260040160405180910390fd5b6002600755565b6000611c91612b76565b905090565b6001600160401b03166000908152600260205260409020600181015490546001600160a01b0391821692911690565b60008260ff168460ff161015611cfb5760ff80851690841603611ce981600a613f41565b611cf39084613f4d565b915050611d2a565b8260ff168460ff161115611d275760ff80841690851603611d1d81600a613f41565b611cf39084613f64565b50805b9392505050565b611d3c838330611dc0565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611d9e57600080fd5b505af1158015611db2573d6000803e3d6000fd5b50505050610dc98282611fd5565b604051637647691d60e01b8152600481018390526001600160a01b038281166024830152841690637647691d90604401600060405180830381600087803b158015611e0a57600080fd5b505af1158015611569573d6000803e3d6000fd5b6000611e2a8383611286565b611ea9576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055611e61611c87565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016108e0565b5060006108e0565b6000611ebd8383611286565b15611ea9576000838152602081815260408083206001600160a01b03861684529091529020805460ff19169055611ef2611c87565b6001600160a01b0316826001600160a01b0316847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45060016108e0565b60006108e0611f47612beb565b8360405161190160f01b8152600281019290925260228201526042902090565b611f746020820182613845565b6001600160a01b038116611f9b5760405163d92e233d60e01b815260040160405180910390fd5b600080611fa9868686612d16565b9150915081611fcd578060405163038f024d60e11b8152600401610b0a9190613f86565b505050505050565b6000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114612022576040519150601f19603f3d011682016040523d82523d6000602084013e612027565b606091505b5050905080610dc957604051630db2c7f160e31b815260040160405180910390fd5b6060611c917f00000000000000000000000000000000000000000000000000000000000000006008612dcb565b6060611c917f00000000000000000000000000000000000000000000000000000000000000006009612dcb565b6060600080846001600160a01b0316846040516120c09190613b7b565b600060405180830381855af49150503d80600081146120fb576040519150601f19603f3d011682016040523d82523d6000602084013e612100565b606091505b5091509150612110858383612e76565b95945050505050565b61212281612ed2565b610d58576040516376217c9560e01b81526001600160401b0382166004820152602401610b0a565b34811461217357604051638d66855560e01b815260048101829052346024820152604401610b0a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121ce57600080fd5b505af1158015611fcd573d6000803e3d6000fd5b60006121ec611c87565b604051636eb1769f60e11b81526001600160a01b038083166004830152306024830152919250859188169063dd62ed3e90604401602060405180830381865afa15801561223d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122619190613b97565b106122815761227b6001600160a01b038716828787612f27565b50611727565b6040805160c0810182526001600160a01b038089168252838116602083015287811682840152606082018790526080820186905260a0820185905291516309c5399f60e11b815290917f0000000000000000000000000000000000000000000000000000000000000000169063138a733e90612301908490600401613f99565b600060405180830381600087803b15801561231b57600080fd5b505af115801561232f573d6000803e3d6000fd5b5050505050505050505050565b6000612349868685612f60565b60405163ee53529160e01b81526001600160401b0386166004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ee53529190604401600060405180830381600087803b1580156123bd57600080fd5b505af11580156123d1573d6000803e3d6000fd5b50505050600060017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f7b17d106040518163ffffffff1660e01b8152600401602060405180830381865afa158015612437573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245b9190613cbe565b6124659190613cf1565b6001600160401b0381166000908152600360205260409020549091506001600160a01b0316156124b35760405163edf0fa8760e01b81526001600160401b0382166004820152602401610b0a565b60006124bd611c87565b604080516060810182526001600160a01b038084168083526001600160401b03808c1660208086019182528b15158688019081528a841660009081526003835288812097518854945192511515600160e01b0260ff60e01b1993909616600160a01b026001600160e01b031990951697169690961792909217919091169190911790935580825260069092529190912080546001019055909150846125625788612565565b60005b6001600160a01b0316836001600160401b03167fb018e252bb021553275dadb009c950b8d3e61c0a40a8b4ef99342efe0316337688604051611bb691815260200190565b60405163791a39b360e11b81526001600160401b03821660048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f234736690602401600060405180830381865afa158015612619573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126419190810190614012565b80519091506001600160a01b03811661266d5760405163d92e233d60e01b815260040160405180910390fd5b6000816001600160a01b0316637158da7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d191906140f9565b90506001600160a01b0381166126fa5760405163d92e233d60e01b815260040160405180910390fd5b6040805180820182526001600160a01b0384811680835284821660208085018281526001600160401b038b166000908152600290925290869020945185549085166001600160a01b0319918216178655905160019095018054959094169416939093179091559151636eb1769f60e11b815230600482015260248101929092529063dd62ed3e90604401602060405180830381865afa1580156127a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c59190613b97565b6000036127e2576127e26001600160a01b03821683600019613037565b60405163927da10560e01b81523060048201526001600160a01b0383811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063927da10590606401606060405180830381865afa15801561287b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289f919061412c565b50915091504265ffffffffffff168165ffffffffffff1610806128c957506001600160a01b038216155b15612985576040516387517c4560e01b81526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820181905265ffffffffffff60648301527f000000000000000000000000000000000000000000000000000000000000000016906387517c4590608401600060405180830381600087803b15801561296c57600080fd5b505af1158015612980573d6000803e3d6000fd5b505050505b604051636eb1769f60e11b81523060048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015285169063dd62ed3e90604401602060405180830381865afa1580156129f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a159190613b97565b600003612a5257612a526001600160a01b0385167f0000000000000000000000000000000000000000000000000000000000000000600019613037565b6001600160401b0386166000818152600260205260409081902090517f7cf57c02d80137f7b283e969e4ab9e441b1be3f2e1fbcce56ffe38ae5e97aa7c91612ab89181546001600160a01b03908116825260019290920154909116602082015260400190565b60405180910390a2505050505050565b612ad28282611286565b612b015760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b0a565b5050565b600080602060008451602086016000885af180612b28576040513d6000823e3d81fd5b50506000513d91508115612b40578060011415612b4d565b6001600160a01b0384163b155b15610d8057604051635274afe760e01b81526001600160a01b0385166004820152602401610b0a565b6000366014336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612bb35750808210155b15612be357600036612bc58385613d56565b612bd0928290613d69565b612bd991614171565b60601c9250505090565b339250505090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612c4457507f000000000000000000000000000000000000000000000000000000000000000046145b15612c6e57507f000000000000000000000000000000000000000000000000000000000000000090565b611c91604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60006060817fb7d3d2a62bee731be5f4fe2e92f7b17eb3c8f56750a2962d43fab305877acbe8612d496020860186613845565b604080516020818101949094526001600160a01b039092168282015291860135606082015290850135608082015260a0016040516020818303038152906040529050612dbd81878787602001358860400135896060016020810190612dae91906141be565b8a608001358b60a001356130c1565b92509250505b935093915050565b606060ff8314612de557612dde836132c8565b90506108e0565b818054612df1906141db565b80601f0160208091040260200160405190810160405280929190818152602001828054612e1d906141db565b8015612e6a5780601f10612e3f57610100808354040283529160200191612e6a565b820191906000526020600020905b815481529060010190602001808311612e4d57829003601f168201915b505050505090506108e0565b606082612e8b57612e8682613307565b611d2a565b8151158015612ea257506001600160a01b0384163b155b15612ecb57604051639996b31560e01b81526001600160a01b0385166004820152602401610b0a565b5080611d2a565b6001600160401b0381166000908152600260205260408120546001600160a01b0316158015906108e05750506001600160401b03166000908152600260205260409020600101546001600160a01b0316151590565b6040516001600160a01b038481166024830152838116604483015260648201839052610d809186918216906323b872dd90608401611c2b565b604051629dd64160e51b8152600481018290523060248201526000906001600160a01b038416906313bac82090604401600060405180830381600087803b158015612faa57600080fd5b505af1158015612fbe573d6000803e3d6000fd5b5050505061302f846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130279190613c12565b601284611cc5565b949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613087573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130ab9190613b97565b9050610d8084846130bc8585613e4f565b613330565b600060606001600160a01b03881661310a5750506040805180820190915260168152752aa720aaaa2427a924ad22a22fa7a822a920aa24a7a760511b60208201526000906132bb565b4286101561314457505060408051808201909152601181527014d251d3905515549157d1561412549151607a1b60208201526000906132bb565b6001600160a01b038089166000908152600a60209081526040808320938d16835292905290812080549161317783614215565b9190505587146131b45750506040805180820190915260128152714d49534d41544348494e475f4e4f4e43455360701b60208201526000906132bb565b60006131c68b80519060200120611f3a565b905060006131d6828888886133c0565b90506001600160a01b03811615806132005750896001600160a01b0316816001600160a01b031614155b1561323c57600060405180604001604052806011815260200170494e56414c49445f5349474e415455524560781b8152509350935050506132bb565b6132667f20296b01d0b6bd176f0c1e29644934c0047abf080dae43609a1bbc09e39bafdb82611286565b6132a25760006040518060400160405280601281526020017127a822a920aa27a92fa327a92124a22222a760711b8152509350935050506132bb565b6001604051806020016040528060008152509350935050505b9850989650505050505050565b606060006132d5836133ee565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b8051156133175780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526133818482613416565b610d80576040516001600160a01b038481166024830152600060448301526133b691869182169063095ea7b390606401611c2b565b610d808482612b05565b6000806000806133d288888888613465565b9250925092506133e28282613534565b50909695505050505050565b600060ff8216601f8111156108e057604051632cd44ac360e21b815260040160405180910390fd5b6000806000806020600086516020880160008a5af192503d9150600051905082801561345b5750811561344c578060011461345b565b6000866001600160a01b03163b115b9695505050505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156134a0575060009150600390508261352a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156134f4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166135205750600092506001915082905061352a565b9250600091508190505b9450945094915050565b60008260038111156135485761354861422e565b03613551575050565b60018260038111156135655761356561422e565b036135835760405163f645eedf60e01b815260040160405180910390fd5b60028260038111156135975761359761422e565b036135b85760405163fce698f760e01b815260048101829052602401610b0a565b60038260038111156135cc576135cc61422e565b03612b01576040516335e2f38360e21b815260048101829052602401610b0a565b6000602082840312156135ff57600080fd5b81356001600160e01b031981168114611d2a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561364f5761364f613617565b60405290565b604051601f8201601f191681016001600160401b038111828210171561367d5761367d613617565b604052919050565b60006001600160401b0382111561369e5761369e613617565b5060051b60200190565b6001600160a01b0381168114610d5857600080fd5b80356136c8816136a8565b919050565b600080604083850312156136e057600080fd5b82356001600160401b038111156136f657600080fd5b8301601f8101851361370757600080fd5b803561371a61371582613685565b613655565b8082825260208201915060208360051b85010192508783111561373c57600080fd5b6020840193505b82841015613767578335613756816136a8565b825260209384019390910190613743565b945061377992505050602084016136bd565b90509250929050565b60006020828403121561379457600080fd5b5035919050565b6001600160401b0381168114610d5857600080fd5b6000602082840312156137c257600080fd5b8135611d2a8161379b565b600080604083850312156137e057600080fd5b8235915060208301356137f2816136a8565b809150509250929050565b6000808284036101c081121561381257600080fd5b61010081121561382157600080fd5b83925060c060ff198201121561383657600080fd5b50610100830190509250929050565b60006020828403121561385757600080fd5b8135611d2a816136a8565b6000806040838503121561387557600080fd5b8235613880816136a8565b915060208301356137f2816136a8565b60005b838110156138ab578181015183820152602001613893565b50506000910152565b600081518084526138cc816020860160208601613890565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e0602082015260006138ff60e08301896138b4565b828103604084015261391181896138b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015613967578351835260209384019390920191600101613949565b50909b9a5050505050505050505050565b60008083601f84011261398a57600080fd5b5081356001600160401b038111156139a157600080fd5b6020830191508360208260051b85010111156139bc57600080fd5b9250929050565b600080602083850312156139d657600080fd5b82356001600160401b038111156139ec57600080fd5b6139f885828601613978565b90969095509350505050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b82811015613a5d57603f19878603018452613a488583516138b4565b94506020938401939190910190600101613a2c565b50929695505050505050565b60008083601f840112613a7b57600080fd5b5081356001600160401b03811115613a9257600080fd5b6020830191508360208285010111156139bc57600080fd5b60008060008060008060808789031215613ac357600080fd5b8635613ace8161379b565b95506020870135945060408701356001600160401b03811115613af057600080fd5b613afc89828a01613a69565b90955093505060608701356001600160401b03811115613b1b57600080fd5b613b2789828a01613a69565b979a9699509497509295939492505050565b60008060408385031215613b4c57600080fd5b8235613b578161379b565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b60008251613b8d818460208701613890565b9190910192915050565b600060208284031215613ba957600080fd5b5051919050565b6001600160a01b0383168152604060208083018290528351918301829052600091908401906060840190835b818110156133e25783516001600160a01b0316835260209384019390920191600101613bdc565b60ff81168114610d5857600080fd5b600060208284031215613c2457600080fd5b8151611d2a81613c03565b80356136c881613c03565b61010081018235613c4a816136a8565b6001600160a01b03168252602083810135908301526040830135613c6d816136a8565b6001600160a01b031660408301526060838101359083015260808084013590830152613c9b60a08401613c2f565b60ff1660a083015260c0838101359083015260e092830135929091019190915290565b600060208284031215613cd057600080fd5b8151611d2a8161379b565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0382811682821603908111156108e0576108e0613cdb565b60006060828403128015613d2357600080fd5b50613d2c61362d565b8251613d37816136a8565b8152602083810151908201526040928301519281019290925250919050565b818103818111156108e0576108e0613cdb565b60008085851115613d7957600080fd5b83861115613d8657600080fd5b5050820193919092039150565b6000808335601e19843603018112613daa57600080fd5b8301803591506001600160401b03821115613dc457600080fd5b6020019150368190038213156139bc57600080fd5b828482376000838201600081528351613df6818360208801613890565b0195945050505050565b60006060828403128015613e1357600080fd5b50613e1c61362d565b8251613e27816136a8565b81526020830151613e378161379b565b60208201526040928301519281019290925250919050565b808201808211156108e0576108e0613cdb565b6001815b6001841115612dc357808504811115613e8157613e81613cdb565b6001841615613e8f57908102905b60019390931c928002613e66565b600082613eac575060016108e0565b81613eb9575060006108e0565b8160018114613ecf5760028114613ed957613ef5565b60019150506108e0565b60ff841115613eea57613eea613cdb565b50506001821b6108e0565b5060208310610133831016604e8410600b8410161715613f18575081810a6108e0565b613f256000198484613e62565b8060001904821115613f3957613f39613cdb565b029392505050565b6000611d2a8383613e9d565b80820281158282048414176108e0576108e0613cdb565b600082613f8157634e487b7160e01b600052601260045260246000fd5b500490565b602081526000611d2a60208301846138b4565b6020815260018060a01b03825116602082015260018060a01b03602083015116604082015260018060a01b036040830151166060820152606082015160808201526000608083015160c060a0840152613ff560e08401826138b4565b905060a0840151601f198483030160c085015261211082826138b4565b60006020828403121561402457600080fd5b81516001600160401b0381111561403a57600080fd5b82016060818503121561404c57600080fd5b61405461362d565b815161405f816136a8565b815260208201516001600160401b0381111561407a57600080fd5b8201601f8101861361408b57600080fd5b805161409961371582613685565b8082825260208201915060208360051b8501019250888311156140bb57600080fd5b6020840193505b828410156140dd5783518252602093840193909101906140c2565b6020850152505050604091820151918101919091529392505050565b60006020828403121561410b57600080fd5b8151611d2a816136a8565b805165ffffffffffff811681146136c857600080fd5b60008060006060848603121561414157600080fd5b835161414c816136a8565b925061415a60208501614116565b915061416860408501614116565b90509250925092565b80356bffffffffffffffffffffffff1981169060148410156141b7576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6000602082840312156141d057600080fd5b8135611d2a81613c03565b600181811c908216806141ef57607f821691505b60208210810361420f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006001820161422757614227613cdb565b5060010190565b634e487b7160e01b600052602160045260246000fdfea26469706673582212205af058aca3ad3f062ee15888e66b4865c0d3249f2ca9de6d774a26800f3bf0f264736f6c634300081b0033000000000000000000000000beb9503ddbda15ae0d19cf817028c19077f0e99e0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000a2b835e77cbff1b1fdb853b5e63a8ac25c3f5774000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000735023ec9a51eb41c9e298fa74bed454d581a471000000000000000000000000997f38e2ffc1d5fbaece8765f315f2c39f2da31f000000000000000000000000a8525dfce71bd5ccd280ea4d63c0334fb498ab5f