diff --git a/abis/Staking.json b/abis/Staking.json index 53b58cd..0de92c1 100644 --- a/abis/Staking.json +++ b/abis/Staking.json @@ -1,1140 +1,1191 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "Staking", - "sourceName": "contracts/Staking.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "talentToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakerReward", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "talentReward", - "type": "uint256" - } - ], - "name": "RewardClaim", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "talentToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakerReward", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "talentReward", - "type": "uint256" - } - ], - "name": "RewardWithdrawal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "talentToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "talAmount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bool", - "name": "stable", - "type": "bool" - } - ], - "name": "Stake", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "talentToken", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "talentTokenWallet", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "name": "TalentRewardWithdrawal", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "talentToken", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "talAmount", - "type": "uint256" - } - ], - "name": "Unstake", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "S", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "__RewardCalculator_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_stableCoin", - "type": "address" - } - ], - "name": "__StableThenToken_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "activeStakes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "adminWithdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_talent", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_currentTime", - "type": "uint256" - } - ], - "name": "calculateEstimatedReturns", - "outputs": [ - { - "internalType": "uint256", - "name": "stakerRewards", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "talentRewards", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_talent", - "type": "address" - } - ], - "name": "claimRewards", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_talent", - "type": "address" - } - ], - "name": "claimRewardsOnBehalf", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_talent", - "type": "uint256" - } - ], - "name": "convertTalentToToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_tal", - "type": "uint256" - } - ], - "name": "convertTokenToTalent", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_usd", - "type": "uint256" - } - ], - "name": "convertUsdToTalent", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_usd", - "type": "uint256" - } - ], - "name": "convertUsdToToken", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "disable", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "disabled", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "end", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getRoleMember", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleMemberCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_end", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_rewardsMax", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_stableCoin", - "type": "address" - }, - { - "internalType": "address", - "name": "_factory", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_tokenPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_talentPrice", - "type": "uint256" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "maxSForTalent", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "_sender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "onTransferReceived", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsGiven", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsLeft", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardsMax", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - } - ], - "name": "setToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_price", - "type": "uint256" - } - ], - "name": "setTokenPrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "stableCoin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "stableCoinBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_talent", - "type": "address" - } - ], - "name": "stakeAvailability", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_talent", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "stakeStable", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "stakes", - "outputs": [ - { - "internalType": "uint256", - "name": "tokenAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "talentAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "lastCheckpointAt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "S", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "finishedAccumulating", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "start", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stableAmount", - "type": "uint256" - } - ], - "name": "swapStableForToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "talentPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "talentRedeemableRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tokenBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tokenPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalAdjustedShares", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalShares", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalStableStored", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalTokensStaked", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_talent", - "type": "address" - } - ], - "name": "withdrawRewards", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_talent", - "type": "address" - } - ], - "name": "withdrawTalentRewards", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b5061550a806100206000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806390484673116101bd578063be9a6555116100f9578063d547741f116100a2578063ef5cfb8c1161007c578063ef5cfb8c14610742578063efbe1c1c14610755578063f18d20be1461075e578063fc0c546a1461076657600080fd5b8063d547741f14610719578063ed2f23691461072c578063ee0708051461073557600080fd5b8063ca15c873116100d3578063ca15c873146106ea578063d1990538146106fd578063d4ce57891461070657600080fd5b8063be9a6555146106c1578063bf55bd97146106ca578063c45a0155146106d257600080fd5b8063a217fddf11610166578063aa0b017911610140578063aa0b017914610675578063aef2200d1461069d578063b0e31b2d146106b0578063b435842c146106b957600080fd5b8063a217fddf146105f0578063a4e47b66146105f8578063a8bc58f21461066d57600080fd5b8063977bee8e11610197578063977bee8e146105c2578063992642e5146105d55780639e1a4d19146105e857600080fd5b8063904846731461056d57806391b70f601461057657806391d148541461058957600080fd5b806342d866931161028c57806371f19f94116102355780637ff9b5961161020f5780637ff9b596146104fa57806388a7ca5c146105035780638ba2855d1461052f5780639010d07c1461054257600080fd5b806371f19f94146104b45780637773a92b146104c75780637eefc525146104e757600080fd5b8063683b443011610266578063683b4430146104855780636a0675cf146104985780636a61e5fc146104a157600080fd5b806342d866931461045657806343f49d89146104695780634be1c7961461047c57600080fd5b80632f2770db116102f95780633a98ef39116102d35780633a98ef39146104085780633b039b9e146104105780633dbf35631461042357806342c0e5ef1461044357600080fd5b80632f2770db146103da5780632f2ff15d146103e257806336568abe146103f557600080fd5b806322b3a6a11161032a57806322b3a6a1146103a5578063248a9ca3146103ae57806325b58c87146103d157600080fd5b806301ffc9a714610351578063144fa6d7146103795780631ea18fc51461038e575b600080fd5b61036461035f366004614f04565b610779565b60405190151581526020015b60405180910390f35b61038c610387366004614d03565b61078a565b005b61039760d25481565b604051908152602001610370565b61039760d65481565b6103976103bc366004614ea4565b60009081526065602052604090206001015490565b61039760d35481565b61038c6109fd565b61038c6103f0366004614ebd565b610a73565b61038c610403366004614ebd565b610a9d565b60d454610397565b61036461041e366004614d03565b610b29565b610397610431366004614d03565b60ce6020526000908152604090205481565b610397610451366004614ea4565b610d3c565b610364610464366004614d03565b610d5e565b610397610477366004614d03565b610e92565b61039760db5481565b61038c610493366004614d03565b610f6e565b61039760d85481565b61038c6104af366004614ea4565b611126565b61038c6104c2366004614ea4565b611137565b6103976104d5366004614d03565b60cf6020526000908152604090205481565b6103976104f5366004614ea4565b61134b565b61039760d15481565b610516610511366004614db7565b611363565b6040516001600160e01b03199091168152602001610370565b61036461053d366004614d3d565b6116b9565b610555610550366004614ee2565b61178f565b6040516001600160a01b039091168152602001610370565b61039760dc5481565b61038c610584366004614ff4565b6117a7565b610364610597366004614ebd565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6103646105d0366004614e56565b6119e0565b60c954610555906001600160a01b031681565b610397611ea6565b610397600081565b610643610606366004614d3d565b60cb602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a001610370565b610397611f28565b610688610683366004614d76565b611f47565b60408051928352602083019190915201610370565b6103976106ab366004614ea4565b6120ee565b61039760d45481565b6103976120fc565b61039760d95481565b61038c61212d565b60d0546105559061010090046001600160a01b031681565b6103976106f8366004614ea4565b612236565b61039760d75481565b610397610714366004614ea4565b61224d565b61038c610727366004614ebd565b612266565b61039760cc5481565b60d0546103649060ff1681565b610364610750366004614d03565b61228b565b61039760da5481565b61038c6122a0565b60ca54610555906001600160a01b031681565b6000610784826124c7565b92915050565b600061079581612505565b60ca546001600160a01b0316156107f35760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166108495760405162461bcd60e51b815260206004820152601360248201527f41646472657373206d757374206265207365740000000000000000000000000060448201526064016107ea565b61087c6001600160a01b0383167f36372b070000000000000000000000000000000000000000000000000000000061250f565b6108c85760405162461bcd60e51b815260206004820152601760248201527f6e6f7420612076616c696420455243323020746f6b656e00000000000000000060448201526064016107ea565b6000829050610980816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109459190810190614f2e565b6040518060400160405280600381526020017f54414c000000000000000000000000000000000000000000000000000000000081525061252b565b6109cc5760405162461bcd60e51b815260206004820152601560248201527f746f6b656e206e616d65206973206e6f742054414c000000000000000000000060448201526064016107ea565b505060ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a0881612505565b60d05460ff1615610a5b5760405162461bcd60e51b815260206004820152601060248201527f616c72656164792064697361626c65640000000000000000000000000000000060448201526064016107ea565b610a63612537565b5060d0805460ff19166001179055565b600082815260656020526040902060010154610a8e81612505565b610a98838361257c565b505050565b6001600160a01b0381163314610b1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016107ea565b610b25828261259e565b5050565b6000610b3f60ca546001600160a01b0316151590565b610b8b5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b816001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc9190614d20565b6001600160a01b0316336001600160a01b031614610c825760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652074616c656e742063616e2077697468647261772074686560448201527f6972206f776e207368617265730000000000000000000000000000000000000060648201526084016107ea565b6001600160a01b03828116600090815260ce6020526040908190205460ca54915163a9059cbb60e01b8152336004820152602481018290529092919091169063a9059cbb90604401602060405180830381600087803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1c9190614e82565b5050506001600160a01b0316600090815260ce6020526040812055600190565b60d254600090610d5483670de0b6b3a7640000615383565b61078491906151b1565b6000610d7460ca546001600160a01b0316151590565b610dc05760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60dd543390839060ff1615610de457610ddb338560006125c0565b60019250610e8b565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054610e2290613059565b9050610e30338660006125c0565b600193506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190610e6590613059565b60d654610e72919061516b565b610e7c91906153e1565b60d6555060dd805460ff191690555b5050919050565b6000610e9d826130d0565b610ee95760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000826001600160a01b031663aafa93716040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2457600080fd5b505afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190614fdb565b9050610f678161224d565b9392505050565b600054610100900460ff1615808015610f8e5750600054600160ff909116105b80610fa85750303b158015610fa8575060005460ff166001145b61100b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff19166001179055801561102e576000805461ff0019166101001790555b6001600160a01b0382166110aa5760405162461bcd60e51b815260206004820152602160248201527f737461626c652d636f696e2061646472657373206d7573742062652076616c6960448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790556110dd60003361316c565b8015610b25576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061113181612505565b5060d155565b600061114281612505565b60ca546001600160a01b031661119a5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60d3548211156112125760405162461bcd60e51b815260206004820152602b60248201527f6e6f7420656e6f75676820737461626c6520636f696e206c65667420696e207460448201527f686520636f6e747261637400000000000000000000000000000000000000000060648201526084016107ea565b600061121d8361134b565b90508260d3600082825461123191906153e1565b909155505060ca546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190614e82565b5060c95460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113459190614e82565b50505050565b60d154600090610d5483670de0b6b3a7640000615383565b600060d9544210156113b75760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da544211156114095760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031633141561152f5760d05460ff161561146f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b60006114b084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317692505050565b90506114bd8682876131d1565b60408051868152600060208201526001600160a01b0380841692908916917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf9150506116b0565b611538336130d0565b156116425760ca546001600160a01b03166115bb5760405162461bcd60e51b815260206004820152602a60248201527f54414c20746f6b656e206e6f7420796574207365742e20526566756e64206e6f60448201527f7420706f737369626c650000000000000000000000000000000000000000000060648201526084016107ea565b3360006115c987838861338d565b9050816001600160a01b0316876001600160a01b03167f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c8360405161161091815260200190565b60405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf925050506116b0565b60405162461bcd60e51b815260206004820152602360248201527f556e7265636f676e697a6564204552433133363320746f6b656e20726563656960448201527f766564000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b95945050505050565b60dd546000908390839060ff16156116e0576116d7858560016125c0565b60019250611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb6020908152604080832093851683529290529081205461171e90613059565b905061172c868660016125c0565b600193506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60d65461176e919061516b565b61177891906153e1565b60d6555060dd805460ff191690555b505092915050565b6000828152609760205260408120610f679083613a29565b600054610100900460ff16158080156117c75750600054600160ff909116105b806117e15750303b1580156117e1575060005460ff166001145b6118445760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff191660011790558015611867576000805461ff0019166101001790555b600083116118b75760405162461bcd60e51b815260206004820152601760248201527f5f746f6b656e50726963652063616e6e6f74206265203000000000000000000060448201526064016107ea565b600082116119075760405162461bcd60e51b815260206004820152601860248201527f5f74616c656e7450726963652063616e6e6f742062652030000000000000000060448201526064016107ea565b61190f613a35565b611917613a35565b61191f613a35565b61192885610f6e565b61193061212d565b60d988905560da87905560d786905560d080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0387160217905560d183905560d282905560dc88905561199060003361316c565b80156119d6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600060d954421015611a345760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da54421115611a865760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031615611adf5760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064016107ea565b60dd543390849060ff1615611c945760008411611b365760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611b895760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611b948561134b565b90508460d36000828254611ba8919061516b565b90915550611bb990503387836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190614e82565b5060408051828152600160208201526001600160a01b0388169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a36001935050611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054611cd290613059565b905060008511611d1c5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611d6f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611d7a8661134b565b90508560d36000828254611d8e919061516b565b90915550611d9f90503388836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614e82565b5060408051828152600160208201526001600160a01b0389169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019450506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b60206040518083038186803b158015611eeb57600080fd5b505afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f239190614fdb565b905090565b600060d55460d85460d754611f3d91906153e1565b611f2391906153e1565b6001600160a01b03808416600090815260cb60209081526040808320938616835292815282822060cf9091529181205490918291829015611fa157506001600160a01b038516600090815260cf6020526040902054611fca565b60d654611fb060dc5487613ab4565b611fba91906151b1565b60db54611fc7919061516b565b90505b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561200557600080fd5b505afa158015612019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203d9190614d20565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918916906370a082319060240160206040518083038186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614fdb565b90506000806120da8660000154876003015487896001015487613b6d565b90985096505050505050505b935093915050565b60006107846104518361134b565b60c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611ed3565b600054610100900460ff161580801561214d5750600054600160ff909116105b806121675750303b158015612167575060005460ff166001145b6121ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff1916600117905580156121ed576000805461ff0019166101001790555b8015612233576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600081815260976020526040812061078490613bc7565b6000670de0b6b3a764000060d25483610d549190615383565b60008281526065602052604090206001015461228181612505565b610a98838361259e565b600061229733836116b9565b50600192915050565b60006122ab81612505565b60d05460ff16806122bd575060da5442105b61232f5760405162461bcd60e51b815260206004820152602b60248201527f6e6f742064697361626c65642c20616e64206e6f7420656e64206f662073746160448201527f6b696e672065697468657200000000000000000000000000000000000000000060648201526084016107ea565b60cc54156123cb5760405162461bcd60e51b815260206004820152605060248201527f746865726520617265207374696c6c207374616b657320616363756d756c617460448201527f696e6720726577617264732e2043616c6c2060636c61696d526577617264734f60648201527f6e426568616c6660206f6e207468656d00000000000000000000000000000000608482015260a4016107ea565b60006123d5611f28565b9050600081116124275760405162461bcd60e51b815260206004820152601860248201527f6e6f7468696e67206c65667420746f207769746864726177000000000000000060448201526064016107ea565b60ca5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab9190614e82565b508060d560008282546124be919061516b565b90915550505050565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480610784575061078482613bd1565b6122338133613c1f565b600061251a83613c9f565b8015610f675750610f678383613cd2565b6000610f678383613dd0565b60d05460ff161561254457565b60d45461254d57565b60d65461255c60dc5442613ab4565b61256691906151b1565b60db54612573919061516b565b60db554260dc55565b6125868282613df5565b6000828152609760205260409020610a989082613e97565b6125a88282613eac565b6000828152609760205260409020610a989082613f2f565b60dd548390839060ff1615612b00576001600160a01b03808616600090815260cb602090815260408083209388168352929052206125fc612537565b6000856001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561263757600080fd5b505afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f9190614d20565b6001600160a01b038716600090815260cf6020526040812054919250906126985760db546126b2565b6001600160a01b038716600090815260cf60205260409020545b8354600385015460018601546040516370a0823160e01b81526001600160a01b038781166004830152949550600094859461274f949093909288928f16906370a08231906024015b60206040518083038186803b15801561271257600080fd5b505afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190614fdb565b613b6d565b909250905061275e818361516b565b60d8600082825461276f919061516b565b9091555050600385018390554260028601556001600160a01b038916600090815260ce6020526040812080548392906127a990849061516b565b909155505060d05460ff1680156127c55750600485015460ff16155b156127f45760048501805460ff1916600190811790915560cc80546000906127ee9084906153e1565b90915550505b81612803575050505050613052565b600088600181111561281757612817615467565b14156128ff5760ca5460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561286b57600080fd5b505af115801561287f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a39190614e82565b50886001600160a01b03168a6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f384846040516128f2929190918252602082015260400190565b60405180910390a3612af6565b600188600181111561291357612913615467565b1415612aae5760006129248a610e92565b905060008382116129355781612937565b835b9050600061294582866153e1565b90506129528d8d84613f44565b8b6001600160a01b03168d6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd559084876040516129a0929190918252602082015260400190565b60405180910390a36000811180156129c2575060ca546001600160a01b031615155b15612aa65760ca5460405163a9059cbb60e01b81526001600160a01b038f81166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4d9190614e82565b508b6001600160a01b03168d6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612a9d929190918252602082015260400190565b60405180910390a35b505050612af6565b60405162461bcd60e51b815260206004820152601e60248201527f556e7265636f676e697a656420636865636b706f696e7420616374696f6e000060448201526064016107ea565b5050505050613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054612b3e90613059565b6001600160a01b03808816600090815260cb60209081526040808320938a16835292905220909150612b6e612537565b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015612ba957600080fd5b505afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190614d20565b6001600160a01b038816600090815260cf602052604081205491925090612c0a5760db54612c24565b6001600160a01b038816600090815260cf60205260409020545b9050600080612c77856000015486600301548588600101548e6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016126fa91906001600160a01b0391909116815260200190565b9092509050612c86818361516b565b60d86000828254612c97919061516b565b9091555050600385018390554260028601556001600160a01b038a16600090815260ce602052604081208054839290612cd190849061516b565b909155505060d05460ff168015612ced5750600485015460ff16155b15612d1c5760048501805460ff1916600190811790915560cc8054600090612d169084906153e1565b90915550505b81612d2b575050505050612ffb565b6000896001811115612d3f57612d3f615467565b1415612e275760ca5460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612d9357600080fd5b505af1158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb9190614e82565b50896001600160a01b03168b6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051612e1a929190918252602082015260400190565b60405180910390a3612ff5565b6001896001811115612e3b57612e3b615467565b1415612aae576000612e4c8b610e92565b90506000838211612e5d5781612e5f565b835b90506000612e6d82866153e1565b9050612e7a8e8e84613f44565b8c6001600160a01b03168e6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd55908487604051612ec8929190918252602082015260400190565b60405180910390a3600081118015612eea575060ca546001600160a01b031615155b15612ff15760ca60009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb8f836040518363ffffffff1660e01b8152600401612f469291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f989190614e82565b508c6001600160a01b03168e6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612fe8929190918252602082015260400190565b60405180910390a35b5050505b50505050505b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061302c90613059565b60d654613039919061516b565b61304391906153e1565b60d6555060dd805460ff191690555b5050505050565b60008161306857506000919050565b6003821161307857506001919050565b6000600261308784600161516b565b61309191906151b1565b90508291505b818110156130ca579050806002816130af81866151b1565b6130b9919061516b565b6130c391906151b1565b9050613097565b50919050565b60d0546040517f099aba560000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000926101009004169063099aba569060240160206040518083038186803b15801561313457600080fd5b505afa158015613148573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190614e82565b610b25828261257c565b600081516014146131c95760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642064617461206c656e67746820666f7220616464726573730060448201526064016107ea565b506014015190565b60dd548390839060ff1615613299576131e9846130d0565b6132355760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000831161327d5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613289858560016125c0565b613294858585613f44565b613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546132d790613059565b90506132e2856130d0565b61332e5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b600084116133765760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613382868660016125c0565b612ffb868686613f44565b60dd546000908490849060ff1615613697576133a8856130d0565b6133f45760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808716600090815260cb6020908152604080832093891683529290522060018101548514801561343757613432888860006125c0565b613443565b613443888860016125c0565b6001600160a01b03808916600090815260cb60209081526040808320938b1683529290522060028101549092506134bc5760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b85826001015410156134cd57600080fd5b60018201546000906134e46402540be40089615383565b6134ee91906151b1565b905060006402540be4008285600001546135089190615383565b61351291906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561355a57600080fd5b505afa15801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614fdb565b10156135ea5760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b878460010160008282546135fe91906153e1565b90915550508354819085906000906136179084906153e1565b925050819055508060d4600082825461363091906153e1565b909155505083541580156136495750600484015460ff16155b156136785760048401805460ff1916600190811790915560cc80546000906136729084906153e1565b90915550505b6136828989613ffc565b61368c8a82614079565b9550613a2092505050565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546136d590613059565b90506136e0866130d0565b61372c5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808816600090815260cb60209081526040808320938a1683529290522060018101548614801561376f5761376a898960006125c0565b61377b565b61377b898960016125c0565b6001600160a01b03808a16600090815260cb60209081526040808320938c1683529290522060028101549092506137f45760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b868260010154101561380557600080fd5b600182015460009061381c6402540be4008a615383565b61382691906151b1565b905060006402540be4008285600001546138409190615383565b61384a91906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190614fdb565b10156139225760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b8884600101600082825461393691906153e1565b909155505083548190859060009061394f9084906153e1565b925050819055508060d4600082825461396891906153e1565b909155505083541580156139815750600484015460ff16155b156139b05760048401805460ff1916600190811790915560cc80546000906139aa9084906153e1565b90915550505b6139ba8a8a613ffc565b6139c48b82614079565b96505050506001600160a01b03808416600090815260cb602090815260408083209386168352929052205481906139fa90613059565b60d654613a07919061516b565b613a1191906153e1565b60d6555060dd805460ff191690555b50509392505050565b6000610f6783836140ff565b600054610100900460ff16613ab25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107ea565b565b6000806000613ac38585614129565b91509150600080613ad484846144fc565b915091506000613ae48383614742565b9050306001600160a01b031663d19905386040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b579190614fdb565b613b619082615383565b98975050505050505050565b600080806402540be400613b8188886153e1565b613b8a8a613059565b613b949190615383565b613b9e91906151b1565b90506000613bad8287876147a5565b9050613bb981836153e1565b999098509650505050505050565b6000610784825490565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061078457506301ffc9a760e01b6001600160e01b0319831614610784565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b2557613c5d816001600160a01b03166014614843565b613c68836020614843565b604051602001613c79929190615078565b60408051601f198184030181529082905262461bcd60e51b82526107ea916004016150f9565b6000613cb2826301ffc9a760e01b613cd2565b80156107845750613ccb826001600160e01b0319613cd2565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613d4e90869061505c565b6000604051808303818686fa925050503d8060008114613d8a576040519150601f19603f3d011682016040523d82523d6000602084013e613d8f565b606091505b5091509150602081511015613daa5760009350505050610784565b818015613dc6575080806020019051810190613dc69190614e82565b9695505050505050565b600081518351148015610f675750508051602091820120825192909101919091201490565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b255760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613e533390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f67836001600160a01b038416614a24565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610b255760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f67836001600160a01b038416614a73565b6000613f4f82610d3c565b6001600160a01b03808616600090815260cb60209081526040808320938816835292905220805491925090613fa357600160cc6000828254613f91919061516b565b909155505060048101805460ff191690555b82816000016000828254613fb7919061516b565b9250508190555081816001016000828254613fd2919061516b565b925050819055508260d46000828254613feb919061516b565b909155506130529050858584614b66565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03831690639dc29fac90604401600060405180830381600087803b15801561405d57600080fd5b505af1158015614071573d6000803e3d6000fd5b505050505050565b60ca5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156140c757600080fd5b505af11580156140db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190614e82565b600082600001828154811061411657614116615493565b9060005260206000200154905092915050565b600080306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561416557600080fd5b505afa158015614179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419d9190614fdb565b8311158061421b5750306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141df57600080fd5b505afa1580156141f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142179190614fdb565b8410155b1561430b57306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614fdb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156142ca57600080fd5b505afa1580156142de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143029190614fdb565b915091506144f5565b6000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561434657600080fd5b505afa15801561435a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437e9190614fdb565b851061438a57846143fb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156143c357600080fd5b505afa1580156143d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fb9190614fdb565b90506000306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561443857600080fd5b505afa15801561444c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144709190614fdb565b851161447c57846144ed565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156144b557600080fd5b505afa1580156144c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ed9190614fdb565b919350909150505b9250929050565b6000806000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561453a57600080fd5b505afa15801561454e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145729190614fdb565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ab57600080fd5b505afa1580156145bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e39190614fdb565b6145ed91906153e1565b905080614602576000600192509250506144f5565b6000816402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561464457600080fd5b505afa158015614658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061467c9190614fdb565b61468690896153e1565b6146909190615383565b61469a91906151b1565b90506000826402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156146de57600080fd5b505afa1580156146f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147169190614fdb565b61472090896153e1565b61472a9190615383565b61473491906151b1565b919791965090945050505050565b60008061474f6000614c9d565b61475d6402540be400614c9d565b61476791906153a2565b9050600061477485614c9d565b61477d85614c9d565b61478791906153a2565b905060008261479b6402540be400846152fc565b613dc69190615183565b6000806147bf6147ba6402540be40086615383565b613059565b905060006147d56147ba6402540be40086615383565b905060006147e3828461516b565b6147f26402540be40084615383565b6147fc91906151b1565b905060006402540be400614810838a615383565b61481a91906151b1565b9050600061482960648a6151b1565b905080821015614837578091505b50979650505050505050565b60606000614852836002615383565b61485d90600261516b565b67ffffffffffffffff811115614875576148756154a9565b6040519080825280601f01601f19166020018201604052801561489f576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106148d6576148d6615493565b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061492157614921615493565b60200101906001600160f81b031916908160001a9053506000614945846002615383565b61495090600161516b565b90505b60018111156149d5577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061499157614991615493565b1a60f81b8282815181106149a7576149a7615493565b60200101906001600160f81b031916908160001a90535060049490941c936149ce81615424565b9050614953565b508315610f675760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107ea565b6000818152600183016020526040812054614a6b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610784565b506000610784565b60008181526001830160205260408120548015614b5c576000614a976001836153e1565b8554909150600090614aab906001906153e1565b9050818114614b10576000866000018281548110614acb57614acb615493565b9060005260206000200154905080876000018481548110614aee57614aee615493565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614b2157614b2161547d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610784565b6000915050610784565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390528316906340c10f1990604401600060405180830381600087803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cf6020526040902054158015614c7757506000826001600160a01b0316633e0075a16040518163ffffffff1660e01b815260040160206040518083038186803b158015614c3d57600080fd5b505afa158015614c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c759190614fdb565b115b15610a985760db546001600160a01b038316600090815260cf6020526040902055505050565b6000816402540be40081614cb26002836152ed565b614cbc91906152fc565b614cc76002846152ed565b614cd190836152fc565b6003614cdd81866152ed565b614ce79190615183565b614cf191906153a2565b614cfb919061512c565b949350505050565b600060208284031215614d1557600080fd5b8135610f67816154bf565b600060208284031215614d3257600080fd5b8151610f67816154bf565b60008060408385031215614d5057600080fd5b8235614d5b816154bf565b91506020830135614d6b816154bf565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d96816154bf565b92506020840135614da6816154bf565b929592945050506040919091013590565b600080600080600060808688031215614dcf57600080fd5b8535614dda816154bf565b94506020860135614dea816154bf565b935060408601359250606086013567ffffffffffffffff80821115614e0e57600080fd5b818801915088601f830112614e2257600080fd5b813581811115614e3157600080fd5b896020828501011115614e4357600080fd5b9699959850939650602001949392505050565b60008060408385031215614e6957600080fd5b8235614e74816154bf565b946020939093013593505050565b600060208284031215614e9457600080fd5b81518015158114610f6757600080fd5b600060208284031215614eb657600080fd5b5035919050565b60008060408385031215614ed057600080fd5b823591506020830135614d6b816154bf565b60008060408385031215614ef557600080fd5b50508035926020909101359150565b600060208284031215614f1657600080fd5b81356001600160e01b031981168114610f6757600080fd5b600060208284031215614f4057600080fd5b815167ffffffffffffffff80821115614f5857600080fd5b818401915084601f830112614f6c57600080fd5b815181811115614f7e57614f7e6154a9565b604051601f8201601f19908116603f01168101908382118183101715614fa657614fa66154a9565b81604052828152876020848701011115614fbf57600080fd5b614fd08360208301602088016153f8565b979650505050505050565b600060208284031215614fed57600080fd5b5051919050565b600080600080600080600060e0888a03121561500f57600080fd5b873596506020880135955060408801359450606088013561502f816154bf565b9350608088013561503f816154bf565b9699959850939692959460a0840135945060c09093013592915050565b6000825161506e8184602087016153f8565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516150b08160178501602088016153f8565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516150ed8160288401602088016153f8565b01602801949350505050565b60208152600082518060208401526151188160408501602087016153f8565b601f01601f19169190910160400192915050565b6000808212826001600160ff1b030384138115161561514d5761514d61543b565b82600160ff1b0384128116156151655761516561543b565b50500190565b6000821982111561517e5761517e61543b565b500190565b60008261519257615192615451565b600160ff1b8214600019841416156151ac576151ac61543b565b500590565b6000826151c0576151c0615451565b500490565b80825b60018086116151d757506120e6565b816001600160ff1b03048211156151f0576151f061543b565b808616156151fd57918102915b9490941c9380026151c8565b600082801561521f576001811461522957615232565b6001915050610784565b82915050610784565b508161524057506000610784565b5060016000821380821461525957801561527757615290565b826001600160ff1b03048311156152725761527261543b565b615290565b826001600160ff1b03058312156152905761529061543b565b508083161561529c5750805b6152ac8360011c838402836151c5565b806001600160ff1b030482116000831316156152ca576152ca61543b565b80600160ff1b0582126000831216156152e5576152e561543b565b029392505050565b6000610f6760ff841683615209565b60006001600160ff1b036000841360008413858304851182821616156153245761532461543b565b600160ff1b60008712868205881281841616156153435761534361543b565b6000871292508782058712848416161561535f5761535f61543b565b878505871281841616156153755761537561543b565b505050929093029392505050565b600081600019048311821515161561539d5761539d61543b565b500290565b600080831283600160ff1b018312811516156153c0576153c061543b565b836001600160ff1b030183138116156153db576153db61543b565b50500390565b6000828210156153f3576153f361543b565b500390565b60005b838110156154135781810151838201526020016153fb565b838111156113455750506000910152565b6000816154335761543361543b565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461223357600080fdfea26469706673582212205ae51ee02aa8729497d62ad100e81b08c81aa731b2beedf622adb7897659f3f164736f6c63430008070033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061034c5760003560e01c806390484673116101bd578063be9a6555116100f9578063d547741f116100a2578063ef5cfb8c1161007c578063ef5cfb8c14610742578063efbe1c1c14610755578063f18d20be1461075e578063fc0c546a1461076657600080fd5b8063d547741f14610719578063ed2f23691461072c578063ee0708051461073557600080fd5b8063ca15c873116100d3578063ca15c873146106ea578063d1990538146106fd578063d4ce57891461070657600080fd5b8063be9a6555146106c1578063bf55bd97146106ca578063c45a0155146106d257600080fd5b8063a217fddf11610166578063aa0b017911610140578063aa0b017914610675578063aef2200d1461069d578063b0e31b2d146106b0578063b435842c146106b957600080fd5b8063a217fddf146105f0578063a4e47b66146105f8578063a8bc58f21461066d57600080fd5b8063977bee8e11610197578063977bee8e146105c2578063992642e5146105d55780639e1a4d19146105e857600080fd5b8063904846731461056d57806391b70f601461057657806391d148541461058957600080fd5b806342d866931161028c57806371f19f94116102355780637ff9b5961161020f5780637ff9b596146104fa57806388a7ca5c146105035780638ba2855d1461052f5780639010d07c1461054257600080fd5b806371f19f94146104b45780637773a92b146104c75780637eefc525146104e757600080fd5b8063683b443011610266578063683b4430146104855780636a0675cf146104985780636a61e5fc146104a157600080fd5b806342d866931461045657806343f49d89146104695780634be1c7961461047c57600080fd5b80632f2770db116102f95780633a98ef39116102d35780633a98ef39146104085780633b039b9e146104105780633dbf35631461042357806342c0e5ef1461044357600080fd5b80632f2770db146103da5780632f2ff15d146103e257806336568abe146103f557600080fd5b806322b3a6a11161032a57806322b3a6a1146103a5578063248a9ca3146103ae57806325b58c87146103d157600080fd5b806301ffc9a714610351578063144fa6d7146103795780631ea18fc51461038e575b600080fd5b61036461035f366004614f04565b610779565b60405190151581526020015b60405180910390f35b61038c610387366004614d03565b61078a565b005b61039760d25481565b604051908152602001610370565b61039760d65481565b6103976103bc366004614ea4565b60009081526065602052604090206001015490565b61039760d35481565b61038c6109fd565b61038c6103f0366004614ebd565b610a73565b61038c610403366004614ebd565b610a9d565b60d454610397565b61036461041e366004614d03565b610b29565b610397610431366004614d03565b60ce6020526000908152604090205481565b610397610451366004614ea4565b610d3c565b610364610464366004614d03565b610d5e565b610397610477366004614d03565b610e92565b61039760db5481565b61038c610493366004614d03565b610f6e565b61039760d85481565b61038c6104af366004614ea4565b611126565b61038c6104c2366004614ea4565b611137565b6103976104d5366004614d03565b60cf6020526000908152604090205481565b6103976104f5366004614ea4565b61134b565b61039760d15481565b610516610511366004614db7565b611363565b6040516001600160e01b03199091168152602001610370565b61036461053d366004614d3d565b6116b9565b610555610550366004614ee2565b61178f565b6040516001600160a01b039091168152602001610370565b61039760dc5481565b61038c610584366004614ff4565b6117a7565b610364610597366004614ebd565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6103646105d0366004614e56565b6119e0565b60c954610555906001600160a01b031681565b610397611ea6565b610397600081565b610643610606366004614d3d565b60cb602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a001610370565b610397611f28565b610688610683366004614d76565b611f47565b60408051928352602083019190915201610370565b6103976106ab366004614ea4565b6120ee565b61039760d45481565b6103976120fc565b61039760d95481565b61038c61212d565b60d0546105559061010090046001600160a01b031681565b6103976106f8366004614ea4565b612236565b61039760d75481565b610397610714366004614ea4565b61224d565b61038c610727366004614ebd565b612266565b61039760cc5481565b60d0546103649060ff1681565b610364610750366004614d03565b61228b565b61039760da5481565b61038c6122a0565b60ca54610555906001600160a01b031681565b6000610784826124c7565b92915050565b600061079581612505565b60ca546001600160a01b0316156107f35760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166108495760405162461bcd60e51b815260206004820152601360248201527f41646472657373206d757374206265207365740000000000000000000000000060448201526064016107ea565b61087c6001600160a01b0383167f36372b070000000000000000000000000000000000000000000000000000000061250f565b6108c85760405162461bcd60e51b815260206004820152601760248201527f6e6f7420612076616c696420455243323020746f6b656e00000000000000000060448201526064016107ea565b6000829050610980816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109459190810190614f2e565b6040518060400160405280600381526020017f54414c000000000000000000000000000000000000000000000000000000000081525061252b565b6109cc5760405162461bcd60e51b815260206004820152601560248201527f746f6b656e206e616d65206973206e6f742054414c000000000000000000000060448201526064016107ea565b505060ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a0881612505565b60d05460ff1615610a5b5760405162461bcd60e51b815260206004820152601060248201527f616c72656164792064697361626c65640000000000000000000000000000000060448201526064016107ea565b610a63612537565b5060d0805460ff19166001179055565b600082815260656020526040902060010154610a8e81612505565b610a98838361257c565b505050565b6001600160a01b0381163314610b1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016107ea565b610b25828261259e565b5050565b6000610b3f60ca546001600160a01b0316151590565b610b8b5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b816001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc9190614d20565b6001600160a01b0316336001600160a01b031614610c825760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652074616c656e742063616e2077697468647261772074686560448201527f6972206f776e207368617265730000000000000000000000000000000000000060648201526084016107ea565b6001600160a01b03828116600090815260ce6020526040908190205460ca54915163a9059cbb60e01b8152336004820152602481018290529092919091169063a9059cbb90604401602060405180830381600087803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1c9190614e82565b5050506001600160a01b0316600090815260ce6020526040812055600190565b60d254600090610d5483670de0b6b3a7640000615383565b61078491906151b1565b6000610d7460ca546001600160a01b0316151590565b610dc05760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60dd543390839060ff1615610de457610ddb338560006125c0565b60019250610e8b565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054610e2290613059565b9050610e30338660006125c0565b600193506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190610e6590613059565b60d654610e72919061516b565b610e7c91906153e1565b60d6555060dd805460ff191690555b5050919050565b6000610e9d826130d0565b610ee95760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000826001600160a01b031663aafa93716040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2457600080fd5b505afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190614fdb565b9050610f678161224d565b9392505050565b600054610100900460ff1615808015610f8e5750600054600160ff909116105b80610fa85750303b158015610fa8575060005460ff166001145b61100b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff19166001179055801561102e576000805461ff0019166101001790555b6001600160a01b0382166110aa5760405162461bcd60e51b815260206004820152602160248201527f737461626c652d636f696e2061646472657373206d7573742062652076616c6960448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790556110dd60003361316c565b8015610b25576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061113181612505565b5060d155565b600061114281612505565b60ca546001600160a01b031661119a5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60d3548211156112125760405162461bcd60e51b815260206004820152602b60248201527f6e6f7420656e6f75676820737461626c6520636f696e206c65667420696e207460448201527f686520636f6e747261637400000000000000000000000000000000000000000060648201526084016107ea565b600061121d8361134b565b90508260d3600082825461123191906153e1565b909155505060ca546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190614e82565b5060c95460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113459190614e82565b50505050565b60d154600090610d5483670de0b6b3a7640000615383565b600060d9544210156113b75760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da544211156114095760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031633141561152f5760d05460ff161561146f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b60006114b084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317692505050565b90506114bd8682876131d1565b60408051868152600060208201526001600160a01b0380841692908916917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf9150506116b0565b611538336130d0565b156116425760ca546001600160a01b03166115bb5760405162461bcd60e51b815260206004820152602a60248201527f54414c20746f6b656e206e6f7420796574207365742e20526566756e64206e6f60448201527f7420706f737369626c650000000000000000000000000000000000000000000060648201526084016107ea565b3360006115c987838861338d565b9050816001600160a01b0316876001600160a01b03167f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c8360405161161091815260200190565b60405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf925050506116b0565b60405162461bcd60e51b815260206004820152602360248201527f556e7265636f676e697a6564204552433133363320746f6b656e20726563656960448201527f766564000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b95945050505050565b60dd546000908390839060ff16156116e0576116d7858560016125c0565b60019250611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb6020908152604080832093851683529290529081205461171e90613059565b905061172c868660016125c0565b600193506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60d65461176e919061516b565b61177891906153e1565b60d6555060dd805460ff191690555b505092915050565b6000828152609760205260408120610f679083613a29565b600054610100900460ff16158080156117c75750600054600160ff909116105b806117e15750303b1580156117e1575060005460ff166001145b6118445760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff191660011790558015611867576000805461ff0019166101001790555b600083116118b75760405162461bcd60e51b815260206004820152601760248201527f5f746f6b656e50726963652063616e6e6f74206265203000000000000000000060448201526064016107ea565b600082116119075760405162461bcd60e51b815260206004820152601860248201527f5f74616c656e7450726963652063616e6e6f742062652030000000000000000060448201526064016107ea565b61190f613a35565b611917613a35565b61191f613a35565b61192885610f6e565b61193061212d565b60d988905560da87905560d786905560d080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0387160217905560d183905560d282905560dc88905561199060003361316c565b80156119d6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600060d954421015611a345760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da54421115611a865760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031615611adf5760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064016107ea565b60dd543390849060ff1615611c945760008411611b365760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611b895760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611b948561134b565b90508460d36000828254611ba8919061516b565b90915550611bb990503387836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190614e82565b5060408051828152600160208201526001600160a01b0388169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a36001935050611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054611cd290613059565b905060008511611d1c5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611d6f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611d7a8661134b565b90508560d36000828254611d8e919061516b565b90915550611d9f90503388836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614e82565b5060408051828152600160208201526001600160a01b0389169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019450506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b60206040518083038186803b158015611eeb57600080fd5b505afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f239190614fdb565b905090565b600060d55460d85460d754611f3d91906153e1565b611f2391906153e1565b6001600160a01b03808416600090815260cb60209081526040808320938616835292815282822060cf9091529181205490918291829015611fa157506001600160a01b038516600090815260cf6020526040902054611fca565b60d654611fb060dc5487613ab4565b611fba91906151b1565b60db54611fc7919061516b565b90505b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561200557600080fd5b505afa158015612019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203d9190614d20565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918916906370a082319060240160206040518083038186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614fdb565b90506000806120da8660000154876003015487896001015487613b6d565b90985096505050505050505b935093915050565b60006107846104518361134b565b60c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611ed3565b600054610100900460ff161580801561214d5750600054600160ff909116105b806121675750303b158015612167575060005460ff166001145b6121ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff1916600117905580156121ed576000805461ff0019166101001790555b8015612233576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600081815260976020526040812061078490613bc7565b6000670de0b6b3a764000060d25483610d549190615383565b60008281526065602052604090206001015461228181612505565b610a98838361259e565b600061229733836116b9565b50600192915050565b60006122ab81612505565b60d05460ff16806122bd575060da5442105b61232f5760405162461bcd60e51b815260206004820152602b60248201527f6e6f742064697361626c65642c20616e64206e6f7420656e64206f662073746160448201527f6b696e672065697468657200000000000000000000000000000000000000000060648201526084016107ea565b60cc54156123cb5760405162461bcd60e51b815260206004820152605060248201527f746865726520617265207374696c6c207374616b657320616363756d756c617460448201527f696e6720726577617264732e2043616c6c2060636c61696d526577617264734f60648201527f6e426568616c6660206f6e207468656d00000000000000000000000000000000608482015260a4016107ea565b60006123d5611f28565b9050600081116124275760405162461bcd60e51b815260206004820152601860248201527f6e6f7468696e67206c65667420746f207769746864726177000000000000000060448201526064016107ea565b60ca5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab9190614e82565b508060d560008282546124be919061516b565b90915550505050565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480610784575061078482613bd1565b6122338133613c1f565b600061251a83613c9f565b8015610f675750610f678383613cd2565b6000610f678383613dd0565b60d05460ff161561254457565b60d45461254d57565b60d65461255c60dc5442613ab4565b61256691906151b1565b60db54612573919061516b565b60db554260dc55565b6125868282613df5565b6000828152609760205260409020610a989082613e97565b6125a88282613eac565b6000828152609760205260409020610a989082613f2f565b60dd548390839060ff1615612b00576001600160a01b03808616600090815260cb602090815260408083209388168352929052206125fc612537565b6000856001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561263757600080fd5b505afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f9190614d20565b6001600160a01b038716600090815260cf6020526040812054919250906126985760db546126b2565b6001600160a01b038716600090815260cf60205260409020545b8354600385015460018601546040516370a0823160e01b81526001600160a01b038781166004830152949550600094859461274f949093909288928f16906370a08231906024015b60206040518083038186803b15801561271257600080fd5b505afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190614fdb565b613b6d565b909250905061275e818361516b565b60d8600082825461276f919061516b565b9091555050600385018390554260028601556001600160a01b038916600090815260ce6020526040812080548392906127a990849061516b565b909155505060d05460ff1680156127c55750600485015460ff16155b156127f45760048501805460ff1916600190811790915560cc80546000906127ee9084906153e1565b90915550505b81612803575050505050613052565b600088600181111561281757612817615467565b14156128ff5760ca5460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561286b57600080fd5b505af115801561287f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a39190614e82565b50886001600160a01b03168a6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f384846040516128f2929190918252602082015260400190565b60405180910390a3612af6565b600188600181111561291357612913615467565b1415612aae5760006129248a610e92565b905060008382116129355781612937565b835b9050600061294582866153e1565b90506129528d8d84613f44565b8b6001600160a01b03168d6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd559084876040516129a0929190918252602082015260400190565b60405180910390a36000811180156129c2575060ca546001600160a01b031615155b15612aa65760ca5460405163a9059cbb60e01b81526001600160a01b038f81166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4d9190614e82565b508b6001600160a01b03168d6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612a9d929190918252602082015260400190565b60405180910390a35b505050612af6565b60405162461bcd60e51b815260206004820152601e60248201527f556e7265636f676e697a656420636865636b706f696e7420616374696f6e000060448201526064016107ea565b5050505050613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054612b3e90613059565b6001600160a01b03808816600090815260cb60209081526040808320938a16835292905220909150612b6e612537565b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015612ba957600080fd5b505afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190614d20565b6001600160a01b038816600090815260cf602052604081205491925090612c0a5760db54612c24565b6001600160a01b038816600090815260cf60205260409020545b9050600080612c77856000015486600301548588600101548e6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016126fa91906001600160a01b0391909116815260200190565b9092509050612c86818361516b565b60d86000828254612c97919061516b565b9091555050600385018390554260028601556001600160a01b038a16600090815260ce602052604081208054839290612cd190849061516b565b909155505060d05460ff168015612ced5750600485015460ff16155b15612d1c5760048501805460ff1916600190811790915560cc8054600090612d169084906153e1565b90915550505b81612d2b575050505050612ffb565b6000896001811115612d3f57612d3f615467565b1415612e275760ca5460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612d9357600080fd5b505af1158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb9190614e82565b50896001600160a01b03168b6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051612e1a929190918252602082015260400190565b60405180910390a3612ff5565b6001896001811115612e3b57612e3b615467565b1415612aae576000612e4c8b610e92565b90506000838211612e5d5781612e5f565b835b90506000612e6d82866153e1565b9050612e7a8e8e84613f44565b8c6001600160a01b03168e6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd55908487604051612ec8929190918252602082015260400190565b60405180910390a3600081118015612eea575060ca546001600160a01b031615155b15612ff15760ca60009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb8f836040518363ffffffff1660e01b8152600401612f469291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f989190614e82565b508c6001600160a01b03168e6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612fe8929190918252602082015260400190565b60405180910390a35b5050505b50505050505b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061302c90613059565b60d654613039919061516b565b61304391906153e1565b60d6555060dd805460ff191690555b5050505050565b60008161306857506000919050565b6003821161307857506001919050565b6000600261308784600161516b565b61309191906151b1565b90508291505b818110156130ca579050806002816130af81866151b1565b6130b9919061516b565b6130c391906151b1565b9050613097565b50919050565b60d0546040517f099aba560000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000926101009004169063099aba569060240160206040518083038186803b15801561313457600080fd5b505afa158015613148573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190614e82565b610b25828261257c565b600081516014146131c95760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642064617461206c656e67746820666f7220616464726573730060448201526064016107ea565b506014015190565b60dd548390839060ff1615613299576131e9846130d0565b6132355760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000831161327d5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613289858560016125c0565b613294858585613f44565b613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546132d790613059565b90506132e2856130d0565b61332e5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b600084116133765760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613382868660016125c0565b612ffb868686613f44565b60dd546000908490849060ff1615613697576133a8856130d0565b6133f45760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808716600090815260cb6020908152604080832093891683529290522060018101548514801561343757613432888860006125c0565b613443565b613443888860016125c0565b6001600160a01b03808916600090815260cb60209081526040808320938b1683529290522060028101549092506134bc5760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b85826001015410156134cd57600080fd5b60018201546000906134e46402540be40089615383565b6134ee91906151b1565b905060006402540be4008285600001546135089190615383565b61351291906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561355a57600080fd5b505afa15801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614fdb565b10156135ea5760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b878460010160008282546135fe91906153e1565b90915550508354819085906000906136179084906153e1565b925050819055508060d4600082825461363091906153e1565b909155505083541580156136495750600484015460ff16155b156136785760048401805460ff1916600190811790915560cc80546000906136729084906153e1565b90915550505b6136828989613ffc565b61368c8a82614079565b9550613a2092505050565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546136d590613059565b90506136e0866130d0565b61372c5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808816600090815260cb60209081526040808320938a1683529290522060018101548614801561376f5761376a898960006125c0565b61377b565b61377b898960016125c0565b6001600160a01b03808a16600090815260cb60209081526040808320938c1683529290522060028101549092506137f45760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b868260010154101561380557600080fd5b600182015460009061381c6402540be4008a615383565b61382691906151b1565b905060006402540be4008285600001546138409190615383565b61384a91906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190614fdb565b10156139225760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b8884600101600082825461393691906153e1565b909155505083548190859060009061394f9084906153e1565b925050819055508060d4600082825461396891906153e1565b909155505083541580156139815750600484015460ff16155b156139b05760048401805460ff1916600190811790915560cc80546000906139aa9084906153e1565b90915550505b6139ba8a8a613ffc565b6139c48b82614079565b96505050506001600160a01b03808416600090815260cb602090815260408083209386168352929052205481906139fa90613059565b60d654613a07919061516b565b613a1191906153e1565b60d6555060dd805460ff191690555b50509392505050565b6000610f6783836140ff565b600054610100900460ff16613ab25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107ea565b565b6000806000613ac38585614129565b91509150600080613ad484846144fc565b915091506000613ae48383614742565b9050306001600160a01b031663d19905386040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b579190614fdb565b613b619082615383565b98975050505050505050565b600080806402540be400613b8188886153e1565b613b8a8a613059565b613b949190615383565b613b9e91906151b1565b90506000613bad8287876147a5565b9050613bb981836153e1565b999098509650505050505050565b6000610784825490565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061078457506301ffc9a760e01b6001600160e01b0319831614610784565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b2557613c5d816001600160a01b03166014614843565b613c68836020614843565b604051602001613c79929190615078565b60408051601f198184030181529082905262461bcd60e51b82526107ea916004016150f9565b6000613cb2826301ffc9a760e01b613cd2565b80156107845750613ccb826001600160e01b0319613cd2565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613d4e90869061505c565b6000604051808303818686fa925050503d8060008114613d8a576040519150601f19603f3d011682016040523d82523d6000602084013e613d8f565b606091505b5091509150602081511015613daa5760009350505050610784565b818015613dc6575080806020019051810190613dc69190614e82565b9695505050505050565b600081518351148015610f675750508051602091820120825192909101919091201490565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b255760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613e533390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f67836001600160a01b038416614a24565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610b255760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f67836001600160a01b038416614a73565b6000613f4f82610d3c565b6001600160a01b03808616600090815260cb60209081526040808320938816835292905220805491925090613fa357600160cc6000828254613f91919061516b565b909155505060048101805460ff191690555b82816000016000828254613fb7919061516b565b9250508190555081816001016000828254613fd2919061516b565b925050819055508260d46000828254613feb919061516b565b909155506130529050858584614b66565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03831690639dc29fac90604401600060405180830381600087803b15801561405d57600080fd5b505af1158015614071573d6000803e3d6000fd5b505050505050565b60ca5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156140c757600080fd5b505af11580156140db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190614e82565b600082600001828154811061411657614116615493565b9060005260206000200154905092915050565b600080306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561416557600080fd5b505afa158015614179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419d9190614fdb565b8311158061421b5750306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141df57600080fd5b505afa1580156141f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142179190614fdb565b8410155b1561430b57306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614fdb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156142ca57600080fd5b505afa1580156142de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143029190614fdb565b915091506144f5565b6000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561434657600080fd5b505afa15801561435a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437e9190614fdb565b851061438a57846143fb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156143c357600080fd5b505afa1580156143d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fb9190614fdb565b90506000306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561443857600080fd5b505afa15801561444c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144709190614fdb565b851161447c57846144ed565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156144b557600080fd5b505afa1580156144c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ed9190614fdb565b919350909150505b9250929050565b6000806000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561453a57600080fd5b505afa15801561454e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145729190614fdb565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ab57600080fd5b505afa1580156145bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e39190614fdb565b6145ed91906153e1565b905080614602576000600192509250506144f5565b6000816402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561464457600080fd5b505afa158015614658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061467c9190614fdb565b61468690896153e1565b6146909190615383565b61469a91906151b1565b90506000826402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156146de57600080fd5b505afa1580156146f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147169190614fdb565b61472090896153e1565b61472a9190615383565b61473491906151b1565b919791965090945050505050565b60008061474f6000614c9d565b61475d6402540be400614c9d565b61476791906153a2565b9050600061477485614c9d565b61477d85614c9d565b61478791906153a2565b905060008261479b6402540be400846152fc565b613dc69190615183565b6000806147bf6147ba6402540be40086615383565b613059565b905060006147d56147ba6402540be40086615383565b905060006147e3828461516b565b6147f26402540be40084615383565b6147fc91906151b1565b905060006402540be400614810838a615383565b61481a91906151b1565b9050600061482960648a6151b1565b905080821015614837578091505b50979650505050505050565b60606000614852836002615383565b61485d90600261516b565b67ffffffffffffffff811115614875576148756154a9565b6040519080825280601f01601f19166020018201604052801561489f576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106148d6576148d6615493565b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061492157614921615493565b60200101906001600160f81b031916908160001a9053506000614945846002615383565b61495090600161516b565b90505b60018111156149d5577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061499157614991615493565b1a60f81b8282815181106149a7576149a7615493565b60200101906001600160f81b031916908160001a90535060049490941c936149ce81615424565b9050614953565b508315610f675760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107ea565b6000818152600183016020526040812054614a6b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610784565b506000610784565b60008181526001830160205260408120548015614b5c576000614a976001836153e1565b8554909150600090614aab906001906153e1565b9050818114614b10576000866000018281548110614acb57614acb615493565b9060005260206000200154905080876000018481548110614aee57614aee615493565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614b2157614b2161547d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610784565b6000915050610784565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390528316906340c10f1990604401600060405180830381600087803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cf6020526040902054158015614c7757506000826001600160a01b0316633e0075a16040518163ffffffff1660e01b815260040160206040518083038186803b158015614c3d57600080fd5b505afa158015614c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c759190614fdb565b115b15610a985760db546001600160a01b038316600090815260cf6020526040902055505050565b6000816402540be40081614cb26002836152ed565b614cbc91906152fc565b614cc76002846152ed565b614cd190836152fc565b6003614cdd81866152ed565b614ce79190615183565b614cf191906153a2565b614cfb919061512c565b949350505050565b600060208284031215614d1557600080fd5b8135610f67816154bf565b600060208284031215614d3257600080fd5b8151610f67816154bf565b60008060408385031215614d5057600080fd5b8235614d5b816154bf565b91506020830135614d6b816154bf565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d96816154bf565b92506020840135614da6816154bf565b929592945050506040919091013590565b600080600080600060808688031215614dcf57600080fd5b8535614dda816154bf565b94506020860135614dea816154bf565b935060408601359250606086013567ffffffffffffffff80821115614e0e57600080fd5b818801915088601f830112614e2257600080fd5b813581811115614e3157600080fd5b896020828501011115614e4357600080fd5b9699959850939650602001949392505050565b60008060408385031215614e6957600080fd5b8235614e74816154bf565b946020939093013593505050565b600060208284031215614e9457600080fd5b81518015158114610f6757600080fd5b600060208284031215614eb657600080fd5b5035919050565b60008060408385031215614ed057600080fd5b823591506020830135614d6b816154bf565b60008060408385031215614ef557600080fd5b50508035926020909101359150565b600060208284031215614f1657600080fd5b81356001600160e01b031981168114610f6757600080fd5b600060208284031215614f4057600080fd5b815167ffffffffffffffff80821115614f5857600080fd5b818401915084601f830112614f6c57600080fd5b815181811115614f7e57614f7e6154a9565b604051601f8201601f19908116603f01168101908382118183101715614fa657614fa66154a9565b81604052828152876020848701011115614fbf57600080fd5b614fd08360208301602088016153f8565b979650505050505050565b600060208284031215614fed57600080fd5b5051919050565b600080600080600080600060e0888a03121561500f57600080fd5b873596506020880135955060408801359450606088013561502f816154bf565b9350608088013561503f816154bf565b9699959850939692959460a0840135945060c09093013592915050565b6000825161506e8184602087016153f8565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516150b08160178501602088016153f8565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516150ed8160288401602088016153f8565b01602801949350505050565b60208152600082518060208401526151188160408501602087016153f8565b601f01601f19169190910160400192915050565b6000808212826001600160ff1b030384138115161561514d5761514d61543b565b82600160ff1b0384128116156151655761516561543b565b50500190565b6000821982111561517e5761517e61543b565b500190565b60008261519257615192615451565b600160ff1b8214600019841416156151ac576151ac61543b565b500590565b6000826151c0576151c0615451565b500490565b80825b60018086116151d757506120e6565b816001600160ff1b03048211156151f0576151f061543b565b808616156151fd57918102915b9490941c9380026151c8565b600082801561521f576001811461522957615232565b6001915050610784565b82915050610784565b508161524057506000610784565b5060016000821380821461525957801561527757615290565b826001600160ff1b03048311156152725761527261543b565b615290565b826001600160ff1b03058312156152905761529061543b565b508083161561529c5750805b6152ac8360011c838402836151c5565b806001600160ff1b030482116000831316156152ca576152ca61543b565b80600160ff1b0582126000831216156152e5576152e561543b565b029392505050565b6000610f6760ff841683615209565b60006001600160ff1b036000841360008413858304851182821616156153245761532461543b565b600160ff1b60008712868205881281841616156153435761534361543b565b6000871292508782058712848416161561535f5761535f61543b565b878505871281841616156153755761537561543b565b505050929093029392505050565b600081600019048311821515161561539d5761539d61543b565b500290565b600080831283600160ff1b018312811516156153c0576153c061543b565b836001600160ff1b030183138116156153db576153db61543b565b50500390565b6000828210156153f3576153f361543b565b500390565b60005b838110156154135781810151838201526020016153fb565b838111156113455750506000910152565b6000816154335761543361543b565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461223357600080fdfea26469706673582212205ae51ee02aa8729497d62ad100e81b08c81aa731b2beedf622adb7897659f3f164736f6c63430008070033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "talentToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakerReward", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "talentReward", + "type": "uint256" + } + ], + "name": "RewardClaim", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "talentToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakerReward", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "talentReward", + "type": "uint256" + } + ], + "name": "RewardWithdrawal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "talentToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "talAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "stable", + "type": "bool" + } + ], + "name": "Stake", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "talent", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newChainId", + "type": "uint256" + } + ], + "name": "TalentDisabledForNetworkTransfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "talentToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "talentTokenWallet", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "TalentRewardWithdrawal", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "talentToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "talAmount", + "type": "uint256" + } + ], + "name": "Unstake", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "S", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "SAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "__RewardCalculator_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_stableCoin", + "type": "address" + } + ], + "name": "__StableThenToken_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "activeStakes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "adminWithdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_talent", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_currentTime", + "type": "uint256" + } + ], + "name": "calculateEstimatedReturns", + "outputs": [ + { + "internalType": "uint256", + "name": "stakerRewards", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "talentRewards", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + } + ], + "name": "claimRewards", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_talent", + "type": "address" + } + ], + "name": "claimRewardsOnBehalf", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_talent", + "type": "uint256" + } + ], + "name": "convertTalentToToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_tal", + "type": "uint256" + } + ], + "name": "convertTokenToTalent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_usd", + "type": "uint256" + } + ], + "name": "convertUsdToTalent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_usd", + "type": "uint256" + } + ], + "name": "convertUsdToToken", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "end", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_end", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_rewardsMax", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_stableCoin", + "type": "address" + }, + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_tokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_talentPrice", + "type": "uint256" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "maxSForTalent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_stakeholders", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "_stakeAmounts", + "type": "uint256[]" + } + ], + "name": "migrateStakes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "onTransferReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rewardsGiven", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardsLeft", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardsMax", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "setToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "name": "setTokenPrice", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stableCoin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stableCoinBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + } + ], + "name": "stakeAvailability", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "stakeStable", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "stakes", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "talentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "lastCheckpointAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "S", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "finishedAccumulating", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "start", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_stableAmount", + "type": "uint256" + } + ], + "name": "swapStableForToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "talentPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "talentRedeemableRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tokenBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tokenPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalAdjustedShares", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalShares", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalStableStored", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalTokensStaked", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_newChainId", + "type": "uint256" + } + ], + "name": "transferToNetwork", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + } + ], + "name": "withdrawRewards", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + } + ], + "name": "withdrawTalentRewards", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] \ No newline at end of file diff --git a/abis/TalentFactory.json b/abis/TalentFactory.json index 0955dd0..49568a7 100644 --- a/abis/TalentFactory.json +++ b/abis/TalentFactory.json @@ -1,512 +1,482 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TalentFactoryV2", - "sourceName": "contracts/TalentFactoryV2.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "talent", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "TalentCreated", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "INITIAL_SUPPLY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROLE_MINTER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_talent", - "type": "address" - }, - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "createTalent", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getRoleMember", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleMemberCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "implementationBeacon", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_symbol", - "type": "string" - } - ], - "name": "isSymbol", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - } - ], - "name": "isTalentToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isV2", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "minter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_minter", - "type": "address" - } - ], - "name": "setMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "name": "symbolsToTokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "talentsToTokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "tokensToTalents", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newMinter", - "type": "address" - } - ], - "name": "transferMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50615301806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806357bc3cd911620000f5578063a217fddf1162000097578063ef31f424116200006e578063ef31f424146200041b578063fca3b5aa1462000447578063fe99ad5a146200045e57600080fd5b8063a217fddf14620003e4578063ca15c87314620003ed578063d547741f146200040457600080fd5b80639010d07c11620000cc5780639010d07c146200036957806391d14854146200038057806392afc33a14620003bc57600080fd5b806357bc3cd9146200031f5780637ffed92614620003335780638129fc1c146200035f57600080fd5b8063248a9ca3116200015f5780632f2ff15d11620001365780632f2ff15d14620002de5780632ff2e9dc14620002f757806336568abe146200030857600080fd5b8063248a9ca3146200026a5780632d94a2d0146200029f5780632dbc679c14620002a757600080fd5b8063099aba561162000194578063099aba56146200020b5780631b0f2874146200023c578063242fa5db146200025357600080fd5b806301ffc9a714620001b25780630754617214620001de575b600080fd5b620001c9620001c3366004620014f5565b62000475565b60405190151581526020015b60405180910390f35b60cc54620001f2906001600160a01b031681565b6040516001600160a01b039091168152602001620001d5565b620001c96200021c366004620013ee565b6001600160a01b03908116600090815260ca602052604090205416151590565b620001c96200024d36600462001521565b62000488565b620001f2620002643660046200140c565b620004c7565b620002906200027b36600462001489565b60009081526065602052604090206001015490565b604051908152602001620001d5565b6001620001c9565b620001f2620002b836600462001521565b805160208183018101805160cb825292820191909301209152546001600160a01b031681565b620002f5620002ef366004620014a3565b62000733565b005b62000290686c6b935b8bbd40000081565b620002f562000319366004620014a3565b62000761565b60cd54620001f2906001600160a01b031681565b620001f262000344366004620013ee565b60c9602052600090815260409020546001600160a01b031681565b620002f5620007f1565b620001f26200037a366004620014d2565b62000a4a565b620001c962000391366004620014a3565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b620002907ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b62000290600081565b62000290620003fe36600462001489565b62000a6b565b620002f562000415366004620014a3565b62000a84565b620001f26200042c366004620013ee565b60ca602052600090815260409020546001600160a01b031681565b620002f562000458366004620013ee565b62000aad565b620002f56200046f366004620013ee565b62000b69565b6000620004828262000c09565b92915050565b6000806001600160a01b031660cb83604051620004a6919062001590565b908152604051908190036020019020546001600160a01b0316141592915050565b6000620004d48262000488565b156200054d5760405162461bcd60e51b815260206004820152602c60248201527f74616c656e7420746f6b656e207769746820746869732073796d626f6c20616c60448201527f726561647920657869737473000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60cc546001600160a01b0316620005a75760405162461bcd60e51b815260206004820152601260248201527f6d696e746572206e6f7420796574207365740000000000000000000000000000604482015260640162000544565b60cd5460cc546000916001600160a01b03908116917f6ef7626c000000000000000000000000000000000000000000000000000000009187918791686c6b935b8bbd400000918b9116620005fc888062000a4a565b60405160240162000613969594939291906200166c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909416939093179092529051620006679062001312565b6200067492919062001633565b604051809103906000f08015801562000691573d6000803e3d6000fd5b50905060008190508060cb85604051620006ac919062001590565b9081526040805160209281900383018120805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0396871617909155858516600081815260ca9095529284208054909116948b1694851790559092917fc3cff6724200e4907489fef1d1ede51dd32ca7ac86d62c448475be4c3b1d5b5091a395945050505050565b600082815260656020526040902060010154620007508162000c4a565b6200075c838362000c56565b505050565b6001600160a01b0381163314620007e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840162000544565b620007ed828262000c7c565b5050565b600054610100900460ff1615808015620008125750600054600160ff909116105b806200082e5750303b1580156200082e575060005460ff166001145b620008a25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000544565b6000805460ff191660011790558015620008c6576000805461ff0019166101001790555b620008d062000ca2565b620008da62000ca2565b620008e462000ca2565b620008f160003362000d23565b6000604051620009019062001320565b604051809103906000f0801580156200091e573d6000803e3d6000fd5b506040516200092d906200132e565b6001600160a01b039091168152602001604051809103906000f0801580156200095a573d6000803e3d6000fd5b506040517ff2fde38b0000000000000000000000000000000000000000000000000000000081523360048201529091506001600160a01b0382169063f2fde38b90602401600060405180830381600087803b158015620009b957600080fd5b505af1158015620009ce573d6000803e3d6000fd5b505060cd805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092555050801562000a47576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600082815260976020526040812062000a64908362000d2f565b9392505050565b6000818152609760205260408120620004829062000d3d565b60008281526065602052604090206001015462000aa18162000c4a565b6200075c838362000c7c565b600062000aba8162000c4a565b60cc546001600160a01b03161562000b155760405162461bcd60e51b815260206004820152601260248201527f6d696e74657220616c7265616479207365740000000000000000000000000000604482015260640162000544565b60cc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055620007ed7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc98362000d23565b600062000b768162000c4a565b60cc546001600160a01b031662000bd05760405162461bcd60e51b815260206004820152601160248201527f6d696e746572206973206e6f7420736574000000000000000000000000000000604482015260640162000544565b60cc5462000b15907ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9906001600160a01b031662000a84565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480620004825750620004828262000d48565b62000a47813362000db1565b62000c62828262000e3a565b60008281526097602052604090206200075c908262000ede565b62000c88828262000ef5565b60008281526097602052604090206200075c908262000f79565b600054610100900460ff1662000d215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000544565b565b620007ed828262000c56565b600062000a64838362000f90565b600062000482825490565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806200048257507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161462000482565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16620007ed5762000df2816001600160a01b0316601462000fbd565b62000dff83602062000fbd565b60405160200162000e12929190620015ae565b60408051601f198184030181529082905262461bcd60e51b8252620005449160040162001657565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16620007ed5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905562000e9a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000a64836001600160a01b038416620011bc565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615620007ed5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600062000a64836001600160a01b0384166200120e565b600082600001828154811062000faa5762000faa62001796565b9060005260206000200154905092915050565b6060600062000fce836002620016e1565b62000fdb906002620016c6565b67ffffffffffffffff81111562000ff65762000ff6620017ac565b6040519080825280601f01601f19166020018201604052801562001021576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106200105b576200105b62001796565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620010a957620010a962001796565b60200101906001600160f81b031916908160001a9053506000620010cf846002620016e1565b620010dc906001620016c6565b90505b60018111156200116b577f303132333435363738396162636465660000000000000000000000000000000085600f166010811062001121576200112162001796565b1a60f81b8282815181106200113a576200113a62001796565b60200101906001600160f81b031916908160001a90535060049490941c93620011638162001750565b9050620010df565b50831562000a645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000544565b6000818152600183016020526040812054620012055750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000482565b50600062000482565b60008181526001830160205260408120548015620013075760006200123560018362001703565b85549091506000906200124b9060019062001703565b9050818114620012b75760008660000182815481106200126f576200126f62001796565b906000526020600020015490508087600001848154811062001295576200129562001796565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620012cb57620012cb62001780565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000482565b600091505062000482565b61093e80620017c383390190565b612c9c806200210183390190565b61052f8062004d9d83390190565b80356001600160a01b03811681146200135457600080fd5b919050565b600082601f8301126200136b57600080fd5b813567ffffffffffffffff80821115620013895762001389620017ac565b604051601f8301601f19908116603f01168101908282118183101715620013b457620013b4620017ac565b81604052838152866020858801011115620013ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156200140157600080fd5b62000a64826200133c565b6000806000606084860312156200142257600080fd5b6200142d846200133c565b9250602084013567ffffffffffffffff808211156200144b57600080fd5b620014598783880162001359565b935060408601359150808211156200147057600080fd5b506200147f8682870162001359565b9150509250925092565b6000602082840312156200149c57600080fd5b5035919050565b60008060408385031215620014b757600080fd5b82359150620014c9602084016200133c565b90509250929050565b60008060408385031215620014e657600080fd5b50508035926020909101359150565b6000602082840312156200150857600080fd5b81356001600160e01b03198116811462000a6457600080fd5b6000602082840312156200153457600080fd5b813567ffffffffffffffff8111156200154c57600080fd5b6200155a8482850162001359565b949350505050565b600081518084526200157c8160208601602086016200171d565b601f01601f19169290920160200192915050565b60008251620015a48184602087016200171d565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620015e88160178501602088016200171d565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351620016278160288401602088016200171d565b01602801949350505050565b6001600160a01b03831681526040602082015260006200155a604083018462001562565b60208152600062000a64602083018462001562565b60c0815260006200168160c083018962001562565b828103602084015262001695818962001562565b604084019790975250506001600160a01b039384166060820152918316608083015290911660a09091015292915050565b60008219821115620016dc57620016dc6200176a565b500190565b6000816000190483118215151615620016fe57620016fe6200176a565b500290565b6000828210156200171857620017186200176a565b500390565b60005b838110156200173a57818101518382015260200162001720565b838111156200174a576000848401525b50505050565b6000816200176257620017626200176a565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe608060405260405161093e38038061093e8339810160408190526100229161044d565b61002e82826000610035565b505061059e565b61003e8361010f565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b1561010a57610108836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100c057600080fd5b505afa1580156100d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100f89190610432565b836102c160201b6100291760201c565b505b505050565b610122816102ed60201b6100551760201c565b6101815760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b610204816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101bd57600080fd5b505afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610432565b6102ed60201b6100551760201c565b6102695760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610178565b806102a07fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102fc60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102e68383604051806060016040528060278152602001610917602791396102ff565b9392505050565b6001600160a01b03163b151590565b90565b60606001600160a01b0384163b6103675760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610178565b600080856001600160a01b031685604051610382919061050d565b600060405180830381855af49150503d80600081146103bd576040519150601f19603f3d011682016040523d82523d6000602084013e6103c2565b606091505b5090925090506103d38282866103dd565b9695505050505050565b606083156103ec5750816102e6565b8251156103fc5782518084602001fd5b8160405162461bcd60e51b81526004016101789190610529565b80516001600160a01b038116811461042d57600080fd5b919050565b60006020828403121561044457600080fd5b6102e682610416565b6000806040838503121561046057600080fd5b61046983610416565b60208401519092506001600160401b038082111561048657600080fd5b818501915085601f83011261049a57600080fd5b8151818111156104ac576104ac610588565b604051601f8201601f19908116603f011681019083821181831017156104d4576104d4610588565b816040528281528860208487010111156104ed57600080fd5b6104fe83602083016020880161055c565b80955050505050509250929050565b6000825161051f81846020870161055c565b9190910192915050565b602081526000825180602084015261054881604085016020870161055c565b601f01601f19169190910160400192915050565b60005b8381101561057757818101518382015260200161055f565b838111156101085750506000910152565b634e487b7160e01b600052604160045260246000fd5b61036a806105ad6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61010f565b565b606061004e838360405180606001604052806027815260200161030e60279139610133565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100d257600080fd5b505afa1580156100e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010a9190610265565b905090565b3660008037600080366000845af43d6000803e80801561012e573d6000f35b3d6000fd5b60606001600160a01b0384163b6101b75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101d2919061028e565b600060405180830381855af49150503d806000811461020d576040519150601f19603f3d011682016040523d82523d6000602084013e610212565b606091505b509150915061022282828661022c565b9695505050505050565b6060831561023b57508161004e565b82511561024b5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906102aa565b60006020828403121561027757600080fd5b81516001600160a01b038116811461004e57600080fd5b600082516102a08184602087016102dd565b9190910192915050565b60208152600082518060208401526102c98160408501602087016102dd565b601f01601f19169190910160400192915050565b60005b838110156102f85781810151838201526020016102e0565b83811115610307576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d2923618c23dd282fbe1f573fa51fcbeaf822c83a3f407848f486ee5b664466864736f6c63430008070033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460a06040523060601b60805234801561001757600080fd5b5060805160601c612c4a610052600039600081816109c601528181610a4b01528181610cc701528181610d4c0152610e320152612c4a6000f3fe60806040526004361061026a5760003560e01c806352d1902d11610153578063a457c2d7116100cb578063cae9ca511161007f578063d547741f11610064578063d547741f1461070e578063d8fbe9941461072e578063dd62ed3e1461074e57600080fd5b8063cae9ca51146106ce578063ccf00634146106ee57600080fd5b8063aafa9371116100b0578063aafa93711461065e578063c1d34b8914610675578063c4daa5931461069557600080fd5b8063a457c2d71461061e578063a9059cbb1461063e57600080fd5b806391d148541161012257806395d89b411161010757806395d89b41146105d45780639dc29fac146105e9578063a217fddf1461060957600080fd5b806391d148541461055a57806392afc33a146105a057600080fd5b806352d1902d146104bb5780636ef7626c146104d057806370a08231146104f05780637a12083a1461052657600080fd5b80633177029f116101e657806339509351116101b55780634000aea01161019a5780634000aea01461046857806340c10f19146104885780634f1ef286146104a857600080fd5b806339509351146104315780633e0075a11461045157600080fd5b80633177029f146103b357806332cb6b0c146103d357806336568abe146103f15780633659cfe61461041157600080fd5b806318160ddd1161023d578063248a9ca311610222578063248a9ca3146103455780632f2ff15d14610375578063313ce5671461039757600080fd5b806318160ddd1461030657806323b872dd1461032557600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063095ea7b3146102c65780631296ee62146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046128b1565b610794565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b96107f3565b60405161029b9190612ab6565b3480156102d257600080fd5b5061028f6102e13660046127db565b610885565b3480156102f257600080fd5b5061028f6103013660046127db565b61089d565b34801561031257600080fd5b506099545b60405190815260200161029b565b34801561033157600080fd5b5061028f6103403660046126e9565b6108c0565b34801561035157600080fd5b5061031761036036600461285c565b60009081526065602052604090206001015490565b34801561038157600080fd5b5061039561039036600461288e565b6108e4565b005b3480156103a357600080fd5b506040516012815260200161029b565b3480156103bf57600080fd5b5061028f6103ce3660046127db565b61090e565b3480156103df57600080fd5b5061031769d3c21bcecceda100000081565b3480156103fd57600080fd5b5061039561040c36600461288e565b61092a565b34801561041d57600080fd5b5061039561042c36600461269b565b6109bb565b34801561043d57600080fd5b5061028f61044c3660046127db565b610b37565b34801561045d57600080fd5b5061031761012e5481565b34801561047457600080fd5b5061028f610483366004612805565b610b76565b34801561049457600080fd5b506103956104a33660046127db565b610bea565b6103956104b636600461278d565b610cbc565b3480156104c757600080fd5b50610317610e25565b3480156104dc57600080fd5b506103956104eb3660046128eb565b610eea565b3480156104fc57600080fd5b5061031761050b36600461269b565b6001600160a01b031660009081526097602052604090205490565b34801561053257600080fd5b506103177f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9481565b34801561056657600080fd5b5061028f61057536600461288e565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105ac57600080fd5b506103177ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156105e057600080fd5b506102b96110fe565b3480156105f557600080fd5b506103956106043660046127db565b61110d565b34801561061557600080fd5b50610317600081565b34801561062a57600080fd5b5061028f6106393660046127db565b611163565b34801561064a57600080fd5b5061028f6106593660046127db565b61120d565b34801561066a57600080fd5b5061031761012d5481565b34801561068157600080fd5b5061028f610690366004612725565b61121b565b3480156106a157600080fd5b5061012f546106b6906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b3480156106da57600080fd5b5061028f6106e9366004612805565b611298565b3480156106fa57600080fd5b5061039561070936600461269b565b611322565b34801561071a57600080fd5b5061039561072936600461288e565b61139b565b34801561073a57600080fd5b5061028f6107493660046126e9565b6113c0565b34801561075a57600080fd5b506103176107693660046126b6565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b60006001600160e01b031982167f36372b070000000000000000000000000000000000000000000000000000000014806107de57506001600160e01b0319821663b0202a1160e01b145b806107ed57506107ed826113dd565b92915050565b6060609a805461080290612b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461082e90612b5a565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b5050505050905090565b600033610893818585611402565b5060019392505050565b60006108b9838360405180602001604052806000815250610b76565b9392505050565b6000336108ce85828561155a565b6108d98585856115ec565b506001949350505050565b6000828152606560205260409020600101546108ff81611803565b610909838361180d565b505050565b60006108b9838360405180602001604052806000815250611298565b6001600160a01b03811633146109ad5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109b782826118af565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610a495760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610aa47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610b0f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610b1881611932565b60408051600080825260208201909252610b349183919061193d565b50565b3360008181526098602090815260408083206001600160a01b03871684529091528120549091906108939082908690610b71908790612ac9565b611402565b6000610b82848461120d565b50610b8f33858585611aec565b6108935760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9610c1481611803565b8161012d541015610c8c5760405162461bcd60e51b8152602060048201526024808201527f5f616d6f756e742065786365656473206d696e74696e6720617661696c61626960448201527f6c6974790000000000000000000000000000000000000000000000000000000060648201526084016109a4565b8161012d6000828254610c9f9190612b00565b909155505061012d54610cb2574261012e555b6109098383611baa565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610d4a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610da57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610e105760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610e1982611932565b6109b78282600161193d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ec55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016109a4565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600054610100900460ff1615808015610f0a5750600054600160ff909116105b80610f245750303b158015610f24575060005460ff166001145b610f965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a4565b6000805460ff191660011790558015610fb9576000805461ff0019166101001790555b610fc1611c89565b610fc9611c89565b610fd38787611cf6565b610fdb611c89565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861617905561100f600083611d88565b6110397f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9485611d88565b6110637ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc984611d88565b61108d7f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9480611d92565b6110978486611baa565b6110ab8569d3c21bcecceda1000000612b00565b61012d5580156110f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6060609b805461080290612b5a565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc961113781611803565b61012d5415611159578161012d60008282546111539190612ac9565b90915550505b6109098383611ddd565b3360008181526098602090815260408083206001600160a01b0387168452909152812054909190838110156112005760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109a4565b6108d98286868403611402565b6000336108938185856115ec565b60006112288585856108c0565b5061123585858585611aec565b6108d95760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b949350505050565b60006112a48484610885565b506112b0848484611f62565b6108935760405162461bcd60e51b815260206004820152602560248201527f455243313336333a205f636865636b416e6443616c6c417070726f766520726560448201527f766572747300000000000000000000000000000000000000000000000000000060648201526084016109a4565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556113757f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94826108e4565b610b347f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94335b6000828152606560205260409020600101546113b681611803565b61090983836118af565b60006112908484846040518060200160405280600081525061121b565b60006001600160e01b0319821663b0202a1160e01b14806107ed57506107ed8261201d565b6001600160a01b03831661147d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166114f95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526098602090815260408083209386168352929052205460001981146115e657818110156115d95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a4565b6115e68484848403611402565b50505050565b6001600160a01b0383166116685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166116e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038316600090815260976020526040902054818110156117735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038085166000908152609760205260408082208585039055918516815290812080548492906117aa908490612ac9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f691815260200190565b60405180910390a36115e6565b610b348133612084565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b75760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561186b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156109b75760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109b781611803565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156119705761090983612104565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a957600080fd5b505afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612875565b60015b611a4b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611ae05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016109a4565b506109098383836121cf565b60006001600160a01b0384163b611b0557506000611290565b604051632229f29760e21b81526000906001600160a01b038616906388a7ca5c90611b3a9033908a9089908990600401612a52565b602060405180830381600087803b158015611b5457600080fd5b505af1158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c91906128ce565b6001600160e01b031916632229f29760e21b14915050949350505050565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a4565b8060996000828254611c129190612ac9565b90915550506001600160a01b03821660009081526097602052604081208054839290611c3f908490612ac9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600054610100900460ff16611cf45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b565b600054610100900460ff16611d615760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b8151611d7490609a906020850190612559565b50805161090990609b906020840190612559565b6109b7828261180d565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038216611e595760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b03821660009081526097602052604090205481811015611ee85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383166000908152609760205260408120838303905560998054849290611f17908490612b00565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006001600160a01b0384163b611f7b575060006108b9565b6040516307b04a2d60e41b81526000906001600160a01b03861690637b04a2d090611fae90339088908890600401612a8e565b602060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200091906128ce565b6001600160e01b0319166307b04a2d60e41b149150509392505050565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107ed57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146107ed565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b7576120c2816001600160a01b031660146121f4565b6120cd8360206121f4565b6040516020016120de9291906129d1565b60408051601f198184030181529082905262461bcd60e51b82526109a491600401612ab6565b6001600160a01b0381163b6121815760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6121d8836123d5565b6000825111806121e55750805b15610909576115e68383612415565b60606000612203836002612ae1565b61220e906002612ac9565b67ffffffffffffffff81111561222657612226612bc1565b6040519080825280601f01601f191660200182016040528015612250576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061228757612287612bab565b60200101906001600160f81b031916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122d2576122d2612bab565b60200101906001600160f81b031916908160001a90535060006122f6846002612ae1565b612301906001612ac9565b90505b6001811115612386577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061234257612342612bab565b1a60f81b82828151811061235857612358612bab565b60200101906001600160f81b031916908160001a90535060049490941c9361237f81612b43565b9050612304565b5083156108b95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109a4565b6123de81612104565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6124945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016109a4565b600080846001600160a01b0316846040516124af91906129b5565b600060405180830381855af49150503d80600081146124ea576040519150601f19603f3d011682016040523d82523d6000602084013e6124ef565b606091505b50915091506125178282604051806060016040528060278152602001612bee60279139612520565b95945050505050565b6060831561252f5750816108b9565b82511561253f5782518084602001fd5b8160405162461bcd60e51b81526004016109a49190612ab6565b82805461256590612b5a565b90600052602060002090601f01602090048101928261258757600085556125cd565b82601f106125a057805160ff19168380011785556125cd565b828001600101855582156125cd579182015b828111156125cd5782518255916020019190600101906125b2565b506125d99291506125dd565b5090565b5b808211156125d957600081556001016125de565b80356001600160a01b038116811461260957600080fd5b919050565b600082601f83011261261f57600080fd5b813567ffffffffffffffff8082111561263a5761263a612bc1565b604051601f8301601f19908116603f0116810190828211818310171561266257612662612bc1565b8160405283815286602085880101111561267b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156126ad57600080fd5b6108b9826125f2565b600080604083850312156126c957600080fd5b6126d2836125f2565b91506126e0602084016125f2565b90509250929050565b6000806000606084860312156126fe57600080fd5b612707846125f2565b9250612715602085016125f2565b9150604084013590509250925092565b6000806000806080858703121561273b57600080fd5b612744856125f2565b9350612752602086016125f2565b925060408501359150606085013567ffffffffffffffff81111561277557600080fd5b6127818782880161260e565b91505092959194509250565b600080604083850312156127a057600080fd5b6127a9836125f2565b9150602083013567ffffffffffffffff8111156127c557600080fd5b6127d18582860161260e565b9150509250929050565b600080604083850312156127ee57600080fd5b6127f7836125f2565b946020939093013593505050565b60008060006060848603121561281a57600080fd5b612823846125f2565b925060208401359150604084013567ffffffffffffffff81111561284657600080fd5b6128528682870161260e565b9150509250925092565b60006020828403121561286e57600080fd5b5035919050565b60006020828403121561288757600080fd5b5051919050565b600080604083850312156128a157600080fd5b823591506126e0602084016125f2565b6000602082840312156128c357600080fd5b81356108b981612bd7565b6000602082840312156128e057600080fd5b81516108b981612bd7565b60008060008060008060c0878903121561290457600080fd5b863567ffffffffffffffff8082111561291c57600080fd5b6129288a838b0161260e565b9750602089013591508082111561293e57600080fd5b5061294b89828a0161260e565b95505060408701359350612961606088016125f2565b925061296f608088016125f2565b915061297d60a088016125f2565b90509295509295509295565b600081518084526129a1816020860160208601612b17565b601f01601f19169290920160200192915050565b600082516129c7818460208701612b17565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a09816017850160208801612b17565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a46816028840160208801612b17565b01602801949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a846080830184612989565b9695505050505050565b6001600160a01b03841681528260208201526060604082015260006125176060830184612989565b6020815260006108b96020830184612989565b60008219821115612adc57612adc612b95565b500190565b6000816000190483118215151615612afb57612afb612b95565b500290565b600082821015612b1257612b12612b95565b500390565b60005b83811015612b32578181015183820152602001612b1a565b838111156115e65750506000910152565b600081612b5257612b52612b95565b506000190190565b600181811c90821680612b6e57607f821691505b60208210811415612b8f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b3457600080fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209ed395967b2d77621ea80f8010946bfe625fa8f6089a567ce14aa48da105964364736f6c63430008070033608060405234801561001057600080fd5b5060405161052f38038061052f83398101604081905261002f91610151565b61003833610047565b61004181610097565b50610181565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100aa8161014260201b6101c71760201c565b6101205760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03163b151590565b60006020828403121561016357600080fd5b81516001600160a01b038116811461017a57600080fd5b9392505050565b61039f806101906000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063715018a611610050578063715018a6146100aa5780638da5cb5b146100b2578063f2fde38b146100c357600080fd5b80633659cfe61461006c5780635c60da1b14610081575b600080fd5b61007f61007a366004610339565b6100d6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007f61011e565b6000546001600160a01b031661008e565b61007f6100d1366004610339565b610132565b6100de6101d6565b6100e781610230565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101266101d6565b61013060006102dc565b565b61013a6101d6565b6001600160a01b0381166101bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101c4816102dc565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b2565b6001600160a01b0381163b6102ad5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e74726163740000000000000000000000000060648201526084016101b2565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561034b57600080fd5b81356001600160a01b038116811461036257600080fd5b939250505056fea26469706673582212205856144c03351936dafb065d7b203a08a79a882a1fa05f6156dd53052caa495164736f6c63430008070033a2646970667358221220d6038fc7007f58698c284d44fcd1e9165d73a375daddf10c28a22fdb2b0382f564736f6c63430008070033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620001ad5760003560e01c806357bc3cd911620000f5578063a217fddf1162000097578063ef31f424116200006e578063ef31f424146200041b578063fca3b5aa1462000447578063fe99ad5a146200045e57600080fd5b8063a217fddf14620003e4578063ca15c87314620003ed578063d547741f146200040457600080fd5b80639010d07c11620000cc5780639010d07c146200036957806391d14854146200038057806392afc33a14620003bc57600080fd5b806357bc3cd9146200031f5780637ffed92614620003335780638129fc1c146200035f57600080fd5b8063248a9ca3116200015f5780632f2ff15d11620001365780632f2ff15d14620002de5780632ff2e9dc14620002f757806336568abe146200030857600080fd5b8063248a9ca3146200026a5780632d94a2d0146200029f5780632dbc679c14620002a757600080fd5b8063099aba561162000194578063099aba56146200020b5780631b0f2874146200023c578063242fa5db146200025357600080fd5b806301ffc9a714620001b25780630754617214620001de575b600080fd5b620001c9620001c3366004620014f5565b62000475565b60405190151581526020015b60405180910390f35b60cc54620001f2906001600160a01b031681565b6040516001600160a01b039091168152602001620001d5565b620001c96200021c366004620013ee565b6001600160a01b03908116600090815260ca602052604090205416151590565b620001c96200024d36600462001521565b62000488565b620001f2620002643660046200140c565b620004c7565b620002906200027b36600462001489565b60009081526065602052604090206001015490565b604051908152602001620001d5565b6001620001c9565b620001f2620002b836600462001521565b805160208183018101805160cb825292820191909301209152546001600160a01b031681565b620002f5620002ef366004620014a3565b62000733565b005b62000290686c6b935b8bbd40000081565b620002f562000319366004620014a3565b62000761565b60cd54620001f2906001600160a01b031681565b620001f262000344366004620013ee565b60c9602052600090815260409020546001600160a01b031681565b620002f5620007f1565b620001f26200037a366004620014d2565b62000a4a565b620001c962000391366004620014a3565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b620002907ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b62000290600081565b62000290620003fe36600462001489565b62000a6b565b620002f562000415366004620014a3565b62000a84565b620001f26200042c366004620013ee565b60ca602052600090815260409020546001600160a01b031681565b620002f562000458366004620013ee565b62000aad565b620002f56200046f366004620013ee565b62000b69565b6000620004828262000c09565b92915050565b6000806001600160a01b031660cb83604051620004a6919062001590565b908152604051908190036020019020546001600160a01b0316141592915050565b6000620004d48262000488565b156200054d5760405162461bcd60e51b815260206004820152602c60248201527f74616c656e7420746f6b656e207769746820746869732073796d626f6c20616c60448201527f726561647920657869737473000000000000000000000000000000000000000060648201526084015b60405180910390fd5b60cc546001600160a01b0316620005a75760405162461bcd60e51b815260206004820152601260248201527f6d696e746572206e6f7420796574207365740000000000000000000000000000604482015260640162000544565b60cd5460cc546000916001600160a01b03908116917f6ef7626c000000000000000000000000000000000000000000000000000000009187918791686c6b935b8bbd400000918b9116620005fc888062000a4a565b60405160240162000613969594939291906200166c565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909416939093179092529051620006679062001312565b6200067492919062001633565b604051809103906000f08015801562000691573d6000803e3d6000fd5b50905060008190508060cb85604051620006ac919062001590565b9081526040805160209281900383018120805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b0396871617909155858516600081815260ca9095529284208054909116948b1694851790559092917fc3cff6724200e4907489fef1d1ede51dd32ca7ac86d62c448475be4c3b1d5b5091a395945050505050565b600082815260656020526040902060010154620007508162000c4a565b6200075c838362000c56565b505050565b6001600160a01b0381163314620007e15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c660000000000000000000000000000000000606482015260840162000544565b620007ed828262000c7c565b5050565b600054610100900460ff1615808015620008125750600054600160ff909116105b806200082e5750303b1580156200082e575060005460ff166001145b620008a25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840162000544565b6000805460ff191660011790558015620008c6576000805461ff0019166101001790555b620008d062000ca2565b620008da62000ca2565b620008e462000ca2565b620008f160003362000d23565b6000604051620009019062001320565b604051809103906000f0801580156200091e573d6000803e3d6000fd5b506040516200092d906200132e565b6001600160a01b039091168152602001604051809103906000f0801580156200095a573d6000803e3d6000fd5b506040517ff2fde38b0000000000000000000000000000000000000000000000000000000081523360048201529091506001600160a01b0382169063f2fde38b90602401600060405180830381600087803b158015620009b957600080fd5b505af1158015620009ce573d6000803e3d6000fd5b505060cd805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092555050801562000a47576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600082815260976020526040812062000a64908362000d2f565b9392505050565b6000818152609760205260408120620004829062000d3d565b60008281526065602052604090206001015462000aa18162000c4a565b6200075c838362000c7c565b600062000aba8162000c4a565b60cc546001600160a01b03161562000b155760405162461bcd60e51b815260206004820152601260248201527f6d696e74657220616c7265616479207365740000000000000000000000000000604482015260640162000544565b60cc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055620007ed7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc98362000d23565b600062000b768162000c4a565b60cc546001600160a01b031662000bd05760405162461bcd60e51b815260206004820152601160248201527f6d696e746572206973206e6f7420736574000000000000000000000000000000604482015260640162000544565b60cc5462000b15907ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9906001600160a01b031662000a84565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480620004825750620004828262000d48565b62000a47813362000db1565b62000c62828262000e3a565b60008281526097602052604090206200075c908262000ede565b62000c88828262000ef5565b60008281526097602052604090206200075c908262000f79565b600054610100900460ff1662000d215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840162000544565b565b620007ed828262000c56565b600062000a64838362000f90565b600062000482825490565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806200048257507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b031983161462000482565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16620007ed5762000df2816001600160a01b0316601462000fbd565b62000dff83602062000fbd565b60405160200162000e12929190620015ae565b60408051601f198184030181529082905262461bcd60e51b8252620005449160040162001657565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16620007ed5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905562000e9a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600062000a64836001600160a01b038416620011bc565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615620007ed5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600062000a64836001600160a01b0384166200120e565b600082600001828154811062000faa5762000faa62001796565b9060005260206000200154905092915050565b6060600062000fce836002620016e1565b62000fdb906002620016c6565b67ffffffffffffffff81111562000ff65762000ff6620017ac565b6040519080825280601f01601f19166020018201604052801562001021576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106200105b576200105b62001796565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110620010a957620010a962001796565b60200101906001600160f81b031916908160001a9053506000620010cf846002620016e1565b620010dc906001620016c6565b90505b60018111156200116b577f303132333435363738396162636465660000000000000000000000000000000085600f166010811062001121576200112162001796565b1a60f81b8282815181106200113a576200113a62001796565b60200101906001600160f81b031916908160001a90535060049490941c93620011638162001750565b9050620010df565b50831562000a645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000544565b6000818152600183016020526040812054620012055750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000482565b50600062000482565b60008181526001830160205260408120548015620013075760006200123560018362001703565b85549091506000906200124b9060019062001703565b9050818114620012b75760008660000182815481106200126f576200126f62001796565b906000526020600020015490508087600001848154811062001295576200129562001796565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620012cb57620012cb62001780565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000482565b600091505062000482565b61093e80620017c383390190565b612c9c806200210183390190565b61052f8062004d9d83390190565b80356001600160a01b03811681146200135457600080fd5b919050565b600082601f8301126200136b57600080fd5b813567ffffffffffffffff80821115620013895762001389620017ac565b604051601f8301601f19908116603f01168101908282118183101715620013b457620013b4620017ac565b81604052838152866020858801011115620013ce57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156200140157600080fd5b62000a64826200133c565b6000806000606084860312156200142257600080fd5b6200142d846200133c565b9250602084013567ffffffffffffffff808211156200144b57600080fd5b620014598783880162001359565b935060408601359150808211156200147057600080fd5b506200147f8682870162001359565b9150509250925092565b6000602082840312156200149c57600080fd5b5035919050565b60008060408385031215620014b757600080fd5b82359150620014c9602084016200133c565b90509250929050565b60008060408385031215620014e657600080fd5b50508035926020909101359150565b6000602082840312156200150857600080fd5b81356001600160e01b03198116811462000a6457600080fd5b6000602082840312156200153457600080fd5b813567ffffffffffffffff8111156200154c57600080fd5b6200155a8482850162001359565b949350505050565b600081518084526200157c8160208601602086016200171d565b601f01601f19169290920160200192915050565b60008251620015a48184602087016200171d565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351620015e88160178501602088016200171d565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351620016278160288401602088016200171d565b01602801949350505050565b6001600160a01b03831681526040602082015260006200155a604083018462001562565b60208152600062000a64602083018462001562565b60c0815260006200168160c083018962001562565b828103602084015262001695818962001562565b604084019790975250506001600160a01b039384166060820152918316608083015290911660a09091015292915050565b60008219821115620016dc57620016dc6200176a565b500190565b6000816000190483118215151615620016fe57620016fe6200176a565b500290565b6000828210156200171857620017186200176a565b500390565b60005b838110156200173a57818101518382015260200162001720565b838111156200174a576000848401525b50505050565b6000816200176257620017626200176a565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe608060405260405161093e38038061093e8339810160408190526100229161044d565b61002e82826000610035565b505061059e565b61003e8361010f565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b1561010a57610108836001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100c057600080fd5b505afa1580156100d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100f89190610432565b836102c160201b6100291760201c565b505b505050565b610122816102ed60201b6100551760201c565b6101815760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b610204816001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156101bd57600080fd5b505afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610432565b6102ed60201b6100551760201c565b6102695760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610178565b806102a07fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102fc60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102e68383604051806060016040528060278152602001610917602791396102ff565b9392505050565b6001600160a01b03163b151590565b90565b60606001600160a01b0384163b6103675760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610178565b600080856001600160a01b031685604051610382919061050d565b600060405180830381855af49150503d80600081146103bd576040519150601f19603f3d011682016040523d82523d6000602084013e6103c2565b606091505b5090925090506103d38282866103dd565b9695505050505050565b606083156103ec5750816102e6565b8251156103fc5782518084602001fd5b8160405162461bcd60e51b81526004016101789190610529565b80516001600160a01b038116811461042d57600080fd5b919050565b60006020828403121561044457600080fd5b6102e682610416565b6000806040838503121561046057600080fd5b61046983610416565b60208401519092506001600160401b038082111561048657600080fd5b818501915085601f83011261049a57600080fd5b8151818111156104ac576104ac610588565b604051601f8201601f19908116603f011681019083821181831017156104d4576104d4610588565b816040528281528860208487010111156104ed57600080fd5b6104fe83602083016020880161055c565b80955050505050509250929050565b6000825161051f81846020870161055c565b9190910192915050565b602081526000825180602084015261054881604085016020870161055c565b601f01601f19169190910160400192915050565b60005b8381101561057757818101518382015260200161055f565b838111156101085750506000910152565b634e487b7160e01b600052604160045260246000fd5b61036a806105ad6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61010f565b565b606061004e838360405180606001604052806027815260200161030e60279139610133565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100d257600080fd5b505afa1580156100e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061010a9190610265565b905090565b3660008037600080366000845af43d6000803e80801561012e573d6000f35b3d6000fd5b60606001600160a01b0384163b6101b75760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600080856001600160a01b0316856040516101d2919061028e565b600060405180830381855af49150503d806000811461020d576040519150601f19603f3d011682016040523d82523d6000602084013e610212565b606091505b509150915061022282828661022c565b9695505050505050565b6060831561023b57508161004e565b82511561024b5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906102aa565b60006020828403121561027757600080fd5b81516001600160a01b038116811461004e57600080fd5b600082516102a08184602087016102dd565b9190910192915050565b60208152600082518060208401526102c98160408501602087016102dd565b601f01601f19169190910160400192915050565b60005b838110156102f85781810151838201526020016102e0565b83811115610307576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d2923618c23dd282fbe1f573fa51fcbeaf822c83a3f407848f486ee5b664466864736f6c63430008070033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c656460a06040523060601b60805234801561001757600080fd5b5060805160601c612c4a610052600039600081816109c601528181610a4b01528181610cc701528181610d4c0152610e320152612c4a6000f3fe60806040526004361061026a5760003560e01c806352d1902d11610153578063a457c2d7116100cb578063cae9ca511161007f578063d547741f11610064578063d547741f1461070e578063d8fbe9941461072e578063dd62ed3e1461074e57600080fd5b8063cae9ca51146106ce578063ccf00634146106ee57600080fd5b8063aafa9371116100b0578063aafa93711461065e578063c1d34b8914610675578063c4daa5931461069557600080fd5b8063a457c2d71461061e578063a9059cbb1461063e57600080fd5b806391d148541161012257806395d89b411161010757806395d89b41146105d45780639dc29fac146105e9578063a217fddf1461060957600080fd5b806391d148541461055a57806392afc33a146105a057600080fd5b806352d1902d146104bb5780636ef7626c146104d057806370a08231146104f05780637a12083a1461052657600080fd5b80633177029f116101e657806339509351116101b55780634000aea01161019a5780634000aea01461046857806340c10f19146104885780634f1ef286146104a857600080fd5b806339509351146104315780633e0075a11461045157600080fd5b80633177029f146103b357806332cb6b0c146103d357806336568abe146103f15780633659cfe61461041157600080fd5b806318160ddd1161023d578063248a9ca311610222578063248a9ca3146103455780632f2ff15d14610375578063313ce5671461039757600080fd5b806318160ddd1461030657806323b872dd1461032557600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063095ea7b3146102c65780631296ee62146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046128b1565b610794565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b96107f3565b60405161029b9190612ab6565b3480156102d257600080fd5b5061028f6102e13660046127db565b610885565b3480156102f257600080fd5b5061028f6103013660046127db565b61089d565b34801561031257600080fd5b506099545b60405190815260200161029b565b34801561033157600080fd5b5061028f6103403660046126e9565b6108c0565b34801561035157600080fd5b5061031761036036600461285c565b60009081526065602052604090206001015490565b34801561038157600080fd5b5061039561039036600461288e565b6108e4565b005b3480156103a357600080fd5b506040516012815260200161029b565b3480156103bf57600080fd5b5061028f6103ce3660046127db565b61090e565b3480156103df57600080fd5b5061031769d3c21bcecceda100000081565b3480156103fd57600080fd5b5061039561040c36600461288e565b61092a565b34801561041d57600080fd5b5061039561042c36600461269b565b6109bb565b34801561043d57600080fd5b5061028f61044c3660046127db565b610b37565b34801561045d57600080fd5b5061031761012e5481565b34801561047457600080fd5b5061028f610483366004612805565b610b76565b34801561049457600080fd5b506103956104a33660046127db565b610bea565b6103956104b636600461278d565b610cbc565b3480156104c757600080fd5b50610317610e25565b3480156104dc57600080fd5b506103956104eb3660046128eb565b610eea565b3480156104fc57600080fd5b5061031761050b36600461269b565b6001600160a01b031660009081526097602052604090205490565b34801561053257600080fd5b506103177f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9481565b34801561056657600080fd5b5061028f61057536600461288e565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105ac57600080fd5b506103177ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156105e057600080fd5b506102b96110fe565b3480156105f557600080fd5b506103956106043660046127db565b61110d565b34801561061557600080fd5b50610317600081565b34801561062a57600080fd5b5061028f6106393660046127db565b611163565b34801561064a57600080fd5b5061028f6106593660046127db565b61120d565b34801561066a57600080fd5b5061031761012d5481565b34801561068157600080fd5b5061028f610690366004612725565b61121b565b3480156106a157600080fd5b5061012f546106b6906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b3480156106da57600080fd5b5061028f6106e9366004612805565b611298565b3480156106fa57600080fd5b5061039561070936600461269b565b611322565b34801561071a57600080fd5b5061039561072936600461288e565b61139b565b34801561073a57600080fd5b5061028f6107493660046126e9565b6113c0565b34801561075a57600080fd5b506103176107693660046126b6565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b60006001600160e01b031982167f36372b070000000000000000000000000000000000000000000000000000000014806107de57506001600160e01b0319821663b0202a1160e01b145b806107ed57506107ed826113dd565b92915050565b6060609a805461080290612b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461082e90612b5a565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b5050505050905090565b600033610893818585611402565b5060019392505050565b60006108b9838360405180602001604052806000815250610b76565b9392505050565b6000336108ce85828561155a565b6108d98585856115ec565b506001949350505050565b6000828152606560205260409020600101546108ff81611803565b610909838361180d565b505050565b60006108b9838360405180602001604052806000815250611298565b6001600160a01b03811633146109ad5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109b782826118af565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610a495760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610aa47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610b0f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610b1881611932565b60408051600080825260208201909252610b349183919061193d565b50565b3360008181526098602090815260408083206001600160a01b03871684529091528120549091906108939082908690610b71908790612ac9565b611402565b6000610b82848461120d565b50610b8f33858585611aec565b6108935760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9610c1481611803565b8161012d541015610c8c5760405162461bcd60e51b8152602060048201526024808201527f5f616d6f756e742065786365656473206d696e74696e6720617661696c61626960448201527f6c6974790000000000000000000000000000000000000000000000000000000060648201526084016109a4565b8161012d6000828254610c9f9190612b00565b909155505061012d54610cb2574261012e555b6109098383611baa565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610d4a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610da57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610e105760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610e1982611932565b6109b78282600161193d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ec55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016109a4565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600054610100900460ff1615808015610f0a5750600054600160ff909116105b80610f245750303b158015610f24575060005460ff166001145b610f965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a4565b6000805460ff191660011790558015610fb9576000805461ff0019166101001790555b610fc1611c89565b610fc9611c89565b610fd38787611cf6565b610fdb611c89565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861617905561100f600083611d88565b6110397f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9485611d88565b6110637ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc984611d88565b61108d7f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9480611d92565b6110978486611baa565b6110ab8569d3c21bcecceda1000000612b00565b61012d5580156110f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6060609b805461080290612b5a565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc961113781611803565b61012d5415611159578161012d60008282546111539190612ac9565b90915550505b6109098383611ddd565b3360008181526098602090815260408083206001600160a01b0387168452909152812054909190838110156112005760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109a4565b6108d98286868403611402565b6000336108938185856115ec565b60006112288585856108c0565b5061123585858585611aec565b6108d95760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b949350505050565b60006112a48484610885565b506112b0848484611f62565b6108935760405162461bcd60e51b815260206004820152602560248201527f455243313336333a205f636865636b416e6443616c6c417070726f766520726560448201527f766572747300000000000000000000000000000000000000000000000000000060648201526084016109a4565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556113757f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94826108e4565b610b347f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94335b6000828152606560205260409020600101546113b681611803565b61090983836118af565b60006112908484846040518060200160405280600081525061121b565b60006001600160e01b0319821663b0202a1160e01b14806107ed57506107ed8261201d565b6001600160a01b03831661147d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166114f95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526098602090815260408083209386168352929052205460001981146115e657818110156115d95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a4565b6115e68484848403611402565b50505050565b6001600160a01b0383166116685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166116e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038316600090815260976020526040902054818110156117735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038085166000908152609760205260408082208585039055918516815290812080548492906117aa908490612ac9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f691815260200190565b60405180910390a36115e6565b610b348133612084565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b75760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561186b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156109b75760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109b781611803565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156119705761090983612104565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a957600080fd5b505afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612875565b60015b611a4b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611ae05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016109a4565b506109098383836121cf565b60006001600160a01b0384163b611b0557506000611290565b604051632229f29760e21b81526000906001600160a01b038616906388a7ca5c90611b3a9033908a9089908990600401612a52565b602060405180830381600087803b158015611b5457600080fd5b505af1158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c91906128ce565b6001600160e01b031916632229f29760e21b14915050949350505050565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a4565b8060996000828254611c129190612ac9565b90915550506001600160a01b03821660009081526097602052604081208054839290611c3f908490612ac9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600054610100900460ff16611cf45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b565b600054610100900460ff16611d615760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b8151611d7490609a906020850190612559565b50805161090990609b906020840190612559565b6109b7828261180d565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038216611e595760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b03821660009081526097602052604090205481811015611ee85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383166000908152609760205260408120838303905560998054849290611f17908490612b00565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006001600160a01b0384163b611f7b575060006108b9565b6040516307b04a2d60e41b81526000906001600160a01b03861690637b04a2d090611fae90339088908890600401612a8e565b602060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200091906128ce565b6001600160e01b0319166307b04a2d60e41b149150509392505050565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107ed57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146107ed565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b7576120c2816001600160a01b031660146121f4565b6120cd8360206121f4565b6040516020016120de9291906129d1565b60408051601f198184030181529082905262461bcd60e51b82526109a491600401612ab6565b6001600160a01b0381163b6121815760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6121d8836123d5565b6000825111806121e55750805b15610909576115e68383612415565b60606000612203836002612ae1565b61220e906002612ac9565b67ffffffffffffffff81111561222657612226612bc1565b6040519080825280601f01601f191660200182016040528015612250576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061228757612287612bab565b60200101906001600160f81b031916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122d2576122d2612bab565b60200101906001600160f81b031916908160001a90535060006122f6846002612ae1565b612301906001612ac9565b90505b6001811115612386577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061234257612342612bab565b1a60f81b82828151811061235857612358612bab565b60200101906001600160f81b031916908160001a90535060049490941c9361237f81612b43565b9050612304565b5083156108b95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109a4565b6123de81612104565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6124945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016109a4565b600080846001600160a01b0316846040516124af91906129b5565b600060405180830381855af49150503d80600081146124ea576040519150601f19603f3d011682016040523d82523d6000602084013e6124ef565b606091505b50915091506125178282604051806060016040528060278152602001612bee60279139612520565b95945050505050565b6060831561252f5750816108b9565b82511561253f5782518084602001fd5b8160405162461bcd60e51b81526004016109a49190612ab6565b82805461256590612b5a565b90600052602060002090601f01602090048101928261258757600085556125cd565b82601f106125a057805160ff19168380011785556125cd565b828001600101855582156125cd579182015b828111156125cd5782518255916020019190600101906125b2565b506125d99291506125dd565b5090565b5b808211156125d957600081556001016125de565b80356001600160a01b038116811461260957600080fd5b919050565b600082601f83011261261f57600080fd5b813567ffffffffffffffff8082111561263a5761263a612bc1565b604051601f8301601f19908116603f0116810190828211818310171561266257612662612bc1565b8160405283815286602085880101111561267b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156126ad57600080fd5b6108b9826125f2565b600080604083850312156126c957600080fd5b6126d2836125f2565b91506126e0602084016125f2565b90509250929050565b6000806000606084860312156126fe57600080fd5b612707846125f2565b9250612715602085016125f2565b9150604084013590509250925092565b6000806000806080858703121561273b57600080fd5b612744856125f2565b9350612752602086016125f2565b925060408501359150606085013567ffffffffffffffff81111561277557600080fd5b6127818782880161260e565b91505092959194509250565b600080604083850312156127a057600080fd5b6127a9836125f2565b9150602083013567ffffffffffffffff8111156127c557600080fd5b6127d18582860161260e565b9150509250929050565b600080604083850312156127ee57600080fd5b6127f7836125f2565b946020939093013593505050565b60008060006060848603121561281a57600080fd5b612823846125f2565b925060208401359150604084013567ffffffffffffffff81111561284657600080fd5b6128528682870161260e565b9150509250925092565b60006020828403121561286e57600080fd5b5035919050565b60006020828403121561288757600080fd5b5051919050565b600080604083850312156128a157600080fd5b823591506126e0602084016125f2565b6000602082840312156128c357600080fd5b81356108b981612bd7565b6000602082840312156128e057600080fd5b81516108b981612bd7565b60008060008060008060c0878903121561290457600080fd5b863567ffffffffffffffff8082111561291c57600080fd5b6129288a838b0161260e565b9750602089013591508082111561293e57600080fd5b5061294b89828a0161260e565b95505060408701359350612961606088016125f2565b925061296f608088016125f2565b915061297d60a088016125f2565b90509295509295509295565b600081518084526129a1816020860160208601612b17565b601f01601f19169290920160200192915050565b600082516129c7818460208701612b17565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a09816017850160208801612b17565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a46816028840160208801612b17565b01602801949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a846080830184612989565b9695505050505050565b6001600160a01b03841681528260208201526060604082015260006125176060830184612989565b6020815260006108b96020830184612989565b60008219821115612adc57612adc612b95565b500190565b6000816000190483118215151615612afb57612afb612b95565b500290565b600082821015612b1257612b12612b95565b500390565b60005b83811015612b32578181015183820152602001612b1a565b838111156115e65750506000910152565b600081612b5257612b52612b95565b506000190190565b600181811c90821680612b6e57607f821691505b60208210811415612b8f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b3457600080fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209ed395967b2d77621ea80f8010946bfe625fa8f6089a567ce14aa48da105964364736f6c63430008070033608060405234801561001057600080fd5b5060405161052f38038061052f83398101604081905261002f91610151565b61003833610047565b61004181610097565b50610181565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6100aa8161014260201b6101c71760201c565b6101205760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e747261637400000000000000000000000000606482015260840160405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03163b151590565b60006020828403121561016357600080fd5b81516001600160a01b038116811461017a57600080fd5b9392505050565b61039f806101906000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c8063715018a611610050578063715018a6146100aa5780638da5cb5b146100b2578063f2fde38b146100c357600080fd5b80633659cfe61461006c5780635c60da1b14610081575b600080fd5b61007f61007a366004610339565b6100d6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61007f61011e565b6000546001600160a01b031661008e565b61007f6100d1366004610339565b610132565b6100de6101d6565b6100e781610230565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6101266101d6565b61013060006102dc565b565b61013a6101d6565b6001600160a01b0381166101bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101c4816102dc565b50565b6001600160a01b03163b151590565b6000546001600160a01b031633146101305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101b2565b6001600160a01b0381163b6102ad5760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f60448201527f6e206973206e6f74206120636f6e74726163740000000000000000000000000060648201526084016101b2565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561034b57600080fd5b81356001600160a01b038116811461036257600080fd5b939250505056fea26469706673582212205856144c03351936dafb065d7b203a08a79a882a1fa05f6156dd53052caa495164736f6c63430008070033a2646970667358221220d6038fc7007f58698c284d44fcd1e9165d73a375daddf10c28a22fdb2b0382f564736f6c63430008070033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "talent", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "TalentCreated", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INITIAL_SUPPLY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROLE_MINTER", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_talent", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "bool", + "name": "_isMigrated", + "type": "bool" + } + ], + "name": "createTalent", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "implementationBeacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "name": "isSymbol", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "name": "isTalentToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "minter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "setMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "symbolsToTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "talentsToTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "tokensToTalents", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abis/TalentToken.json b/abis/TalentToken.json index f7b4a32..ba4391b 100644 --- a/abis/TalentToken.json +++ b/abis/TalentToken.json @@ -1,921 +1,950 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "TalentToken", - "sourceName": "contracts/TalentToken.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_SUPPLY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROLE_MINTER", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROLE_TALENT", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approveAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "approveAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_initialSupply", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_talent", - "type": "address" - }, - { - "internalType": "address", - "name": "_minter", - "type": "address" - }, - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "mintingAvailability", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "mintingFinishedAt", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "talent", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "transferFromAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFromAndCall", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newTalent", - "type": "address" - } - ], - "name": "transferTalentWallet", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "bytecode": "0x60a06040523060601b60805234801561001757600080fd5b5060805160601c612c4a610052600039600081816109c601528181610a4b01528181610cc701528181610d4c0152610e320152612c4a6000f3fe60806040526004361061026a5760003560e01c806352d1902d11610153578063a457c2d7116100cb578063cae9ca511161007f578063d547741f11610064578063d547741f1461070e578063d8fbe9941461072e578063dd62ed3e1461074e57600080fd5b8063cae9ca51146106ce578063ccf00634146106ee57600080fd5b8063aafa9371116100b0578063aafa93711461065e578063c1d34b8914610675578063c4daa5931461069557600080fd5b8063a457c2d71461061e578063a9059cbb1461063e57600080fd5b806391d148541161012257806395d89b411161010757806395d89b41146105d45780639dc29fac146105e9578063a217fddf1461060957600080fd5b806391d148541461055a57806392afc33a146105a057600080fd5b806352d1902d146104bb5780636ef7626c146104d057806370a08231146104f05780637a12083a1461052657600080fd5b80633177029f116101e657806339509351116101b55780634000aea01161019a5780634000aea01461046857806340c10f19146104885780634f1ef286146104a857600080fd5b806339509351146104315780633e0075a11461045157600080fd5b80633177029f146103b357806332cb6b0c146103d357806336568abe146103f15780633659cfe61461041157600080fd5b806318160ddd1161023d578063248a9ca311610222578063248a9ca3146103455780632f2ff15d14610375578063313ce5671461039757600080fd5b806318160ddd1461030657806323b872dd1461032557600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063095ea7b3146102c65780631296ee62146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046128b1565b610794565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b96107f3565b60405161029b9190612ab6565b3480156102d257600080fd5b5061028f6102e13660046127db565b610885565b3480156102f257600080fd5b5061028f6103013660046127db565b61089d565b34801561031257600080fd5b506099545b60405190815260200161029b565b34801561033157600080fd5b5061028f6103403660046126e9565b6108c0565b34801561035157600080fd5b5061031761036036600461285c565b60009081526065602052604090206001015490565b34801561038157600080fd5b5061039561039036600461288e565b6108e4565b005b3480156103a357600080fd5b506040516012815260200161029b565b3480156103bf57600080fd5b5061028f6103ce3660046127db565b61090e565b3480156103df57600080fd5b5061031769d3c21bcecceda100000081565b3480156103fd57600080fd5b5061039561040c36600461288e565b61092a565b34801561041d57600080fd5b5061039561042c36600461269b565b6109bb565b34801561043d57600080fd5b5061028f61044c3660046127db565b610b37565b34801561045d57600080fd5b5061031761012e5481565b34801561047457600080fd5b5061028f610483366004612805565b610b76565b34801561049457600080fd5b506103956104a33660046127db565b610bea565b6103956104b636600461278d565b610cbc565b3480156104c757600080fd5b50610317610e25565b3480156104dc57600080fd5b506103956104eb3660046128eb565b610eea565b3480156104fc57600080fd5b5061031761050b36600461269b565b6001600160a01b031660009081526097602052604090205490565b34801561053257600080fd5b506103177f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9481565b34801561056657600080fd5b5061028f61057536600461288e565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105ac57600080fd5b506103177ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156105e057600080fd5b506102b96110fe565b3480156105f557600080fd5b506103956106043660046127db565b61110d565b34801561061557600080fd5b50610317600081565b34801561062a57600080fd5b5061028f6106393660046127db565b611163565b34801561064a57600080fd5b5061028f6106593660046127db565b61120d565b34801561066a57600080fd5b5061031761012d5481565b34801561068157600080fd5b5061028f610690366004612725565b61121b565b3480156106a157600080fd5b5061012f546106b6906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b3480156106da57600080fd5b5061028f6106e9366004612805565b611298565b3480156106fa57600080fd5b5061039561070936600461269b565b611322565b34801561071a57600080fd5b5061039561072936600461288e565b61139b565b34801561073a57600080fd5b5061028f6107493660046126e9565b6113c0565b34801561075a57600080fd5b506103176107693660046126b6565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b60006001600160e01b031982167f36372b070000000000000000000000000000000000000000000000000000000014806107de57506001600160e01b0319821663b0202a1160e01b145b806107ed57506107ed826113dd565b92915050565b6060609a805461080290612b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461082e90612b5a565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b5050505050905090565b600033610893818585611402565b5060019392505050565b60006108b9838360405180602001604052806000815250610b76565b9392505050565b6000336108ce85828561155a565b6108d98585856115ec565b506001949350505050565b6000828152606560205260409020600101546108ff81611803565b610909838361180d565b505050565b60006108b9838360405180602001604052806000815250611298565b6001600160a01b03811633146109ad5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109b782826118af565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610a495760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610aa47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610b0f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610b1881611932565b60408051600080825260208201909252610b349183919061193d565b50565b3360008181526098602090815260408083206001600160a01b03871684529091528120549091906108939082908690610b71908790612ac9565b611402565b6000610b82848461120d565b50610b8f33858585611aec565b6108935760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9610c1481611803565b8161012d541015610c8c5760405162461bcd60e51b8152602060048201526024808201527f5f616d6f756e742065786365656473206d696e74696e6720617661696c61626960448201527f6c6974790000000000000000000000000000000000000000000000000000000060648201526084016109a4565b8161012d6000828254610c9f9190612b00565b909155505061012d54610cb2574261012e555b6109098383611baa565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610d4a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610da57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610e105760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610e1982611932565b6109b78282600161193d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ec55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016109a4565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600054610100900460ff1615808015610f0a5750600054600160ff909116105b80610f245750303b158015610f24575060005460ff166001145b610f965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a4565b6000805460ff191660011790558015610fb9576000805461ff0019166101001790555b610fc1611c89565b610fc9611c89565b610fd38787611cf6565b610fdb611c89565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861617905561100f600083611d88565b6110397f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9485611d88565b6110637ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc984611d88565b61108d7f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9480611d92565b6110978486611baa565b6110ab8569d3c21bcecceda1000000612b00565b61012d5580156110f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6060609b805461080290612b5a565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc961113781611803565b61012d5415611159578161012d60008282546111539190612ac9565b90915550505b6109098383611ddd565b3360008181526098602090815260408083206001600160a01b0387168452909152812054909190838110156112005760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109a4565b6108d98286868403611402565b6000336108938185856115ec565b60006112288585856108c0565b5061123585858585611aec565b6108d95760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b949350505050565b60006112a48484610885565b506112b0848484611f62565b6108935760405162461bcd60e51b815260206004820152602560248201527f455243313336333a205f636865636b416e6443616c6c417070726f766520726560448201527f766572747300000000000000000000000000000000000000000000000000000060648201526084016109a4565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556113757f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94826108e4565b610b347f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94335b6000828152606560205260409020600101546113b681611803565b61090983836118af565b60006112908484846040518060200160405280600081525061121b565b60006001600160e01b0319821663b0202a1160e01b14806107ed57506107ed8261201d565b6001600160a01b03831661147d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166114f95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526098602090815260408083209386168352929052205460001981146115e657818110156115d95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a4565b6115e68484848403611402565b50505050565b6001600160a01b0383166116685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166116e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038316600090815260976020526040902054818110156117735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038085166000908152609760205260408082208585039055918516815290812080548492906117aa908490612ac9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f691815260200190565b60405180910390a36115e6565b610b348133612084565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b75760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561186b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156109b75760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109b781611803565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156119705761090983612104565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a957600080fd5b505afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612875565b60015b611a4b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611ae05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016109a4565b506109098383836121cf565b60006001600160a01b0384163b611b0557506000611290565b604051632229f29760e21b81526000906001600160a01b038616906388a7ca5c90611b3a9033908a9089908990600401612a52565b602060405180830381600087803b158015611b5457600080fd5b505af1158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c91906128ce565b6001600160e01b031916632229f29760e21b14915050949350505050565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a4565b8060996000828254611c129190612ac9565b90915550506001600160a01b03821660009081526097602052604081208054839290611c3f908490612ac9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600054610100900460ff16611cf45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b565b600054610100900460ff16611d615760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b8151611d7490609a906020850190612559565b50805161090990609b906020840190612559565b6109b7828261180d565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038216611e595760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b03821660009081526097602052604090205481811015611ee85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383166000908152609760205260408120838303905560998054849290611f17908490612b00565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006001600160a01b0384163b611f7b575060006108b9565b6040516307b04a2d60e41b81526000906001600160a01b03861690637b04a2d090611fae90339088908890600401612a8e565b602060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200091906128ce565b6001600160e01b0319166307b04a2d60e41b149150509392505050565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107ed57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146107ed565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b7576120c2816001600160a01b031660146121f4565b6120cd8360206121f4565b6040516020016120de9291906129d1565b60408051601f198184030181529082905262461bcd60e51b82526109a491600401612ab6565b6001600160a01b0381163b6121815760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6121d8836123d5565b6000825111806121e55750805b15610909576115e68383612415565b60606000612203836002612ae1565b61220e906002612ac9565b67ffffffffffffffff81111561222657612226612bc1565b6040519080825280601f01601f191660200182016040528015612250576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061228757612287612bab565b60200101906001600160f81b031916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122d2576122d2612bab565b60200101906001600160f81b031916908160001a90535060006122f6846002612ae1565b612301906001612ac9565b90505b6001811115612386577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061234257612342612bab565b1a60f81b82828151811061235857612358612bab565b60200101906001600160f81b031916908160001a90535060049490941c9361237f81612b43565b9050612304565b5083156108b95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109a4565b6123de81612104565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6124945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016109a4565b600080846001600160a01b0316846040516124af91906129b5565b600060405180830381855af49150503d80600081146124ea576040519150601f19603f3d011682016040523d82523d6000602084013e6124ef565b606091505b50915091506125178282604051806060016040528060278152602001612bee60279139612520565b95945050505050565b6060831561252f5750816108b9565b82511561253f5782518084602001fd5b8160405162461bcd60e51b81526004016109a49190612ab6565b82805461256590612b5a565b90600052602060002090601f01602090048101928261258757600085556125cd565b82601f106125a057805160ff19168380011785556125cd565b828001600101855582156125cd579182015b828111156125cd5782518255916020019190600101906125b2565b506125d99291506125dd565b5090565b5b808211156125d957600081556001016125de565b80356001600160a01b038116811461260957600080fd5b919050565b600082601f83011261261f57600080fd5b813567ffffffffffffffff8082111561263a5761263a612bc1565b604051601f8301601f19908116603f0116810190828211818310171561266257612662612bc1565b8160405283815286602085880101111561267b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156126ad57600080fd5b6108b9826125f2565b600080604083850312156126c957600080fd5b6126d2836125f2565b91506126e0602084016125f2565b90509250929050565b6000806000606084860312156126fe57600080fd5b612707846125f2565b9250612715602085016125f2565b9150604084013590509250925092565b6000806000806080858703121561273b57600080fd5b612744856125f2565b9350612752602086016125f2565b925060408501359150606085013567ffffffffffffffff81111561277557600080fd5b6127818782880161260e565b91505092959194509250565b600080604083850312156127a057600080fd5b6127a9836125f2565b9150602083013567ffffffffffffffff8111156127c557600080fd5b6127d18582860161260e565b9150509250929050565b600080604083850312156127ee57600080fd5b6127f7836125f2565b946020939093013593505050565b60008060006060848603121561281a57600080fd5b612823846125f2565b925060208401359150604084013567ffffffffffffffff81111561284657600080fd5b6128528682870161260e565b9150509250925092565b60006020828403121561286e57600080fd5b5035919050565b60006020828403121561288757600080fd5b5051919050565b600080604083850312156128a157600080fd5b823591506126e0602084016125f2565b6000602082840312156128c357600080fd5b81356108b981612bd7565b6000602082840312156128e057600080fd5b81516108b981612bd7565b60008060008060008060c0878903121561290457600080fd5b863567ffffffffffffffff8082111561291c57600080fd5b6129288a838b0161260e565b9750602089013591508082111561293e57600080fd5b5061294b89828a0161260e565b95505060408701359350612961606088016125f2565b925061296f608088016125f2565b915061297d60a088016125f2565b90509295509295509295565b600081518084526129a1816020860160208601612b17565b601f01601f19169290920160200192915050565b600082516129c7818460208701612b17565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a09816017850160208801612b17565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a46816028840160208801612b17565b01602801949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a846080830184612989565b9695505050505050565b6001600160a01b03841681528260208201526060604082015260006125176060830184612989565b6020815260006108b96020830184612989565b60008219821115612adc57612adc612b95565b500190565b6000816000190483118215151615612afb57612afb612b95565b500290565b600082821015612b1257612b12612b95565b500390565b60005b83811015612b32578181015183820152602001612b1a565b838111156115e65750506000910152565b600081612b5257612b52612b95565b506000190190565b600181811c90821680612b6e57607f821691505b60208210811415612b8f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b3457600080fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209ed395967b2d77621ea80f8010946bfe625fa8f6089a567ce14aa48da105964364736f6c63430008070033", - "deployedBytecode": "0x60806040526004361061026a5760003560e01c806352d1902d11610153578063a457c2d7116100cb578063cae9ca511161007f578063d547741f11610064578063d547741f1461070e578063d8fbe9941461072e578063dd62ed3e1461074e57600080fd5b8063cae9ca51146106ce578063ccf00634146106ee57600080fd5b8063aafa9371116100b0578063aafa93711461065e578063c1d34b8914610675578063c4daa5931461069557600080fd5b8063a457c2d71461061e578063a9059cbb1461063e57600080fd5b806391d148541161012257806395d89b411161010757806395d89b41146105d45780639dc29fac146105e9578063a217fddf1461060957600080fd5b806391d148541461055a57806392afc33a146105a057600080fd5b806352d1902d146104bb5780636ef7626c146104d057806370a08231146104f05780637a12083a1461052657600080fd5b80633177029f116101e657806339509351116101b55780634000aea01161019a5780634000aea01461046857806340c10f19146104885780634f1ef286146104a857600080fd5b806339509351146104315780633e0075a11461045157600080fd5b80633177029f146103b357806332cb6b0c146103d357806336568abe146103f15780633659cfe61461041157600080fd5b806318160ddd1161023d578063248a9ca311610222578063248a9ca3146103455780632f2ff15d14610375578063313ce5671461039757600080fd5b806318160ddd1461030657806323b872dd1461032557600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063095ea7b3146102c65780631296ee62146102e6575b600080fd5b34801561027b57600080fd5b5061028f61028a3660046128b1565b610794565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b96107f3565b60405161029b9190612ab6565b3480156102d257600080fd5b5061028f6102e13660046127db565b610885565b3480156102f257600080fd5b5061028f6103013660046127db565b61089d565b34801561031257600080fd5b506099545b60405190815260200161029b565b34801561033157600080fd5b5061028f6103403660046126e9565b6108c0565b34801561035157600080fd5b5061031761036036600461285c565b60009081526065602052604090206001015490565b34801561038157600080fd5b5061039561039036600461288e565b6108e4565b005b3480156103a357600080fd5b506040516012815260200161029b565b3480156103bf57600080fd5b5061028f6103ce3660046127db565b61090e565b3480156103df57600080fd5b5061031769d3c21bcecceda100000081565b3480156103fd57600080fd5b5061039561040c36600461288e565b61092a565b34801561041d57600080fd5b5061039561042c36600461269b565b6109bb565b34801561043d57600080fd5b5061028f61044c3660046127db565b610b37565b34801561045d57600080fd5b5061031761012e5481565b34801561047457600080fd5b5061028f610483366004612805565b610b76565b34801561049457600080fd5b506103956104a33660046127db565b610bea565b6103956104b636600461278d565b610cbc565b3480156104c757600080fd5b50610317610e25565b3480156104dc57600080fd5b506103956104eb3660046128eb565b610eea565b3480156104fc57600080fd5b5061031761050b36600461269b565b6001600160a01b031660009081526097602052604090205490565b34801561053257600080fd5b506103177f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9481565b34801561056657600080fd5b5061028f61057536600461288e565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156105ac57600080fd5b506103177ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc981565b3480156105e057600080fd5b506102b96110fe565b3480156105f557600080fd5b506103956106043660046127db565b61110d565b34801561061557600080fd5b50610317600081565b34801561062a57600080fd5b5061028f6106393660046127db565b611163565b34801561064a57600080fd5b5061028f6106593660046127db565b61120d565b34801561066a57600080fd5b5061031761012d5481565b34801561068157600080fd5b5061028f610690366004612725565b61121b565b3480156106a157600080fd5b5061012f546106b6906001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b3480156106da57600080fd5b5061028f6106e9366004612805565b611298565b3480156106fa57600080fd5b5061039561070936600461269b565b611322565b34801561071a57600080fd5b5061039561072936600461288e565b61139b565b34801561073a57600080fd5b5061028f6107493660046126e9565b6113c0565b34801561075a57600080fd5b506103176107693660046126b6565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205490565b60006001600160e01b031982167f36372b070000000000000000000000000000000000000000000000000000000014806107de57506001600160e01b0319821663b0202a1160e01b145b806107ed57506107ed826113dd565b92915050565b6060609a805461080290612b5a565b80601f016020809104026020016040519081016040528092919081815260200182805461082e90612b5a565b801561087b5780601f106108505761010080835404028352916020019161087b565b820191906000526020600020905b81548152906001019060200180831161085e57829003601f168201915b5050505050905090565b600033610893818585611402565b5060019392505050565b60006108b9838360405180602001604052806000815250610b76565b9392505050565b6000336108ce85828561155a565b6108d98585856115ec565b506001949350505050565b6000828152606560205260409020600101546108ff81611803565b610909838361180d565b505050565b60006108b9838360405180602001604052806000815250611298565b6001600160a01b03811633146109ad5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b6109b782826118af565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610a495760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610aa47f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610b0f5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610b1881611932565b60408051600080825260208201909252610b349183919061193d565b50565b3360008181526098602090815260408083206001600160a01b03871684529091528120549091906108939082908690610b71908790612ac9565b611402565b6000610b82848461120d565b50610b8f33858585611aec565b6108935760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc9610c1481611803565b8161012d541015610c8c5760405162461bcd60e51b8152602060048201526024808201527f5f616d6f756e742065786365656473206d696e74696e6720617661696c61626960448201527f6c6974790000000000000000000000000000000000000000000000000000000060648201526084016109a4565b8161012d6000828254610c9f9190612b00565b909155505061012d54610cb2574261012e555b6109098383611baa565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610d4a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016109a4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610da57f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614610e105760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016109a4565b610e1982611932565b6109b78282600161193d565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ec55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016109a4565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b600054610100900460ff1615808015610f0a5750600054600160ff909116105b80610f245750303b158015610f24575060005460ff166001145b610f965760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a4565b6000805460ff191660011790558015610fb9576000805461ff0019166101001790555b610fc1611c89565b610fc9611c89565b610fd38787611cf6565b610fdb611c89565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861617905561100f600083611d88565b6110397f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9485611d88565b6110637ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc984611d88565b61108d7f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c9480611d92565b6110978486611baa565b6110ab8569d3c21bcecceda1000000612b00565b61012d5580156110f5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6060609b805461080290612b5a565b7ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc961113781611803565b61012d5415611159578161012d60008282546111539190612ac9565b90915550505b6109098383611ddd565b3360008181526098602090815260408083206001600160a01b0387168452909152812054909190838110156112005760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016109a4565b6108d98286868403611402565b6000336108938185856115ec565b60006112288585856108c0565b5061123585858585611aec565b6108d95760405162461bcd60e51b815260206004820152602660248201527f455243313336333a205f636865636b416e6443616c6c5472616e73666572207260448201526565766572747360d01b60648201526084016109a4565b949350505050565b60006112a48484610885565b506112b0848484611f62565b6108935760405162461bcd60e51b815260206004820152602560248201527f455243313336333a205f636865636b416e6443616c6c417070726f766520726560448201527f766572747300000000000000000000000000000000000000000000000000000060648201526084016109a4565b61012f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790556113757f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94826108e4565b610b347f8fad061cdace53638a92e8940b81545ab8169bcf17f044b6ab490075da827c94335b6000828152606560205260409020600101546113b681611803565b61090983836118af565b60006112908484846040518060200160405280600081525061121b565b60006001600160e01b0319821663b0202a1160e01b14806107ed57506107ed8261201d565b6001600160a01b03831661147d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166114f95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383811660008181526098602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526098602090815260408083209386168352929052205460001981146115e657818110156115d95760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109a4565b6115e68484848403611402565b50505050565b6001600160a01b0383166116685760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0382166116e45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038316600090815260976020526040902054818110156117735760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b038085166000908152609760205260408082208585039055918516815290812080548492906117aa908490612ac9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516117f691815260200190565b60405180910390a36115e6565b610b348133612084565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b75760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561186b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16156109b75760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006109b781611803565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156119705761090983612104565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156119a957600080fd5b505afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612875565b60015b611a4b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f74205555505300000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611ae05760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c6555554944000000000000000000000000000000000000000000000060648201526084016109a4565b506109098383836121cf565b60006001600160a01b0384163b611b0557506000611290565b604051632229f29760e21b81526000906001600160a01b038616906388a7ca5c90611b3a9033908a9089908990600401612a52565b602060405180830381600087803b158015611b5457600080fd5b505af1158015611b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8c91906128ce565b6001600160e01b031916632229f29760e21b14915050949350505050565b6001600160a01b038216611c005760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016109a4565b8060996000828254611c129190612ac9565b90915550506001600160a01b03821660009081526097602052604081208054839290611c3f908490612ac9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600054610100900460ff16611cf45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b565b600054610100900460ff16611d615760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016109a4565b8151611d7490609a906020850190612559565b50805161090990609b906020840190612559565b6109b7828261180d565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6001600160a01b038216611e595760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b03821660009081526097602052604090205481811015611ee85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016109a4565b6001600160a01b0383166000908152609760205260408120838303905560998054849290611f17908490612b00565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b60006001600160a01b0384163b611f7b575060006108b9565b6040516307b04a2d60e41b81526000906001600160a01b03861690637b04a2d090611fae90339088908890600401612a8e565b602060405180830381600087803b158015611fc857600080fd5b505af1158015611fdc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200091906128ce565b6001600160e01b0319166307b04a2d60e41b149150509392505050565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107ed57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146107ed565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff166109b7576120c2816001600160a01b031660146121f4565b6120cd8360206121f4565b6040516020016120de9291906129d1565b60408051601f198184030181529082905262461bcd60e51b82526109a491600401612ab6565b6001600160a01b0381163b6121815760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016109a4565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6121d8836123d5565b6000825111806121e55750805b15610909576115e68383612415565b60606000612203836002612ae1565b61220e906002612ac9565b67ffffffffffffffff81111561222657612226612bc1565b6040519080825280601f01601f191660200182016040528015612250576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061228757612287612bab565b60200101906001600160f81b031916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122d2576122d2612bab565b60200101906001600160f81b031916908160001a90535060006122f6846002612ae1565b612301906001612ac9565b90505b6001811115612386577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061234257612342612bab565b1a60f81b82828151811061235857612358612bab565b60200101906001600160f81b031916908160001a90535060049490941c9361237f81612b43565b9050612304565b5083156108b95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109a4565b6123de81612104565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606001600160a01b0383163b6124945760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016109a4565b600080846001600160a01b0316846040516124af91906129b5565b600060405180830381855af49150503d80600081146124ea576040519150601f19603f3d011682016040523d82523d6000602084013e6124ef565b606091505b50915091506125178282604051806060016040528060278152602001612bee60279139612520565b95945050505050565b6060831561252f5750816108b9565b82511561253f5782518084602001fd5b8160405162461bcd60e51b81526004016109a49190612ab6565b82805461256590612b5a565b90600052602060002090601f01602090048101928261258757600085556125cd565b82601f106125a057805160ff19168380011785556125cd565b828001600101855582156125cd579182015b828111156125cd5782518255916020019190600101906125b2565b506125d99291506125dd565b5090565b5b808211156125d957600081556001016125de565b80356001600160a01b038116811461260957600080fd5b919050565b600082601f83011261261f57600080fd5b813567ffffffffffffffff8082111561263a5761263a612bc1565b604051601f8301601f19908116603f0116810190828211818310171561266257612662612bc1565b8160405283815286602085880101111561267b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000602082840312156126ad57600080fd5b6108b9826125f2565b600080604083850312156126c957600080fd5b6126d2836125f2565b91506126e0602084016125f2565b90509250929050565b6000806000606084860312156126fe57600080fd5b612707846125f2565b9250612715602085016125f2565b9150604084013590509250925092565b6000806000806080858703121561273b57600080fd5b612744856125f2565b9350612752602086016125f2565b925060408501359150606085013567ffffffffffffffff81111561277557600080fd5b6127818782880161260e565b91505092959194509250565b600080604083850312156127a057600080fd5b6127a9836125f2565b9150602083013567ffffffffffffffff8111156127c557600080fd5b6127d18582860161260e565b9150509250929050565b600080604083850312156127ee57600080fd5b6127f7836125f2565b946020939093013593505050565b60008060006060848603121561281a57600080fd5b612823846125f2565b925060208401359150604084013567ffffffffffffffff81111561284657600080fd5b6128528682870161260e565b9150509250925092565b60006020828403121561286e57600080fd5b5035919050565b60006020828403121561288757600080fd5b5051919050565b600080604083850312156128a157600080fd5b823591506126e0602084016125f2565b6000602082840312156128c357600080fd5b81356108b981612bd7565b6000602082840312156128e057600080fd5b81516108b981612bd7565b60008060008060008060c0878903121561290457600080fd5b863567ffffffffffffffff8082111561291c57600080fd5b6129288a838b0161260e565b9750602089013591508082111561293e57600080fd5b5061294b89828a0161260e565b95505060408701359350612961606088016125f2565b925061296f608088016125f2565b915061297d60a088016125f2565b90509295509295509295565b600081518084526129a1816020860160208601612b17565b601f01601f19169290920160200192915050565b600082516129c7818460208701612b17565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612a09816017850160208801612b17565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351612a46816028840160208801612b17565b01602801949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a846080830184612989565b9695505050505050565b6001600160a01b03841681528260208201526060604082015260006125176060830184612989565b6020815260006108b96020830184612989565b60008219821115612adc57612adc612b95565b500190565b6000816000190483118215151615612afb57612afb612b95565b500290565b600082821015612b1257612b12612b95565b500390565b60005b83811015612b32578181015183820152602001612b1a565b838111156115e65750506000910152565b600081612b5257612b52612b95565b506000190190565b600181811c90821680612b6e57607f821691505b60208210811415612b8f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610b3457600080fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209ed395967b2d77621ea80f8010946bfe625fa8f6089a567ce14aa48da105964364736f6c63430008070033", - "linkReferences": {}, - "deployedLinkReferences": {} -} +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_SUPPLY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROLE_MINTER", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROLE_TALENT", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approveAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "approveAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_initialSupply", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_talent", + "type": "address" + }, + { + "internalType": "address", + "name": "_minter", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "_isMigrated", + "type": "bool" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "isMigrated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "mintingAvailability", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mintingFinishedAt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "talent", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "transferAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "transferFromAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromAndCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newTalent", + "type": "address" + } + ], + "name": "transferTalentWallet", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } +] diff --git a/schema.graphql b/schema.graphql index cf96ce4..b5744f4 100644 --- a/schema.graphql +++ b/schema.graphql @@ -55,6 +55,8 @@ type TalentToken @entity { supporterCounter: BigInt! # total value locked totalValueLocked: BigInt! + # if token is disabled + disabled: Boolean! supporters: [SupporterTalentToken!]! @derivedFrom(field: "talent") # daily price for this token tokenDayData: [TalentTokenDayData!]! @derivedFrom(field: "talent") diff --git a/src/mapping.ts b/src/mapping.ts index e587c6e..f60a2e2 100644 --- a/src/mapping.ts +++ b/src/mapping.ts @@ -4,7 +4,7 @@ import * as TalentTokenTemplates from "../generated/templates/TalentToken/Talent import * as Templates from "../generated/templates" import { TalentCreated } from "../generated/TalentFactory/TalentFactory" import { Transfer } from "../generated/templates/TalentToken/TalentToken" -import { Stake, Unstake, RewardClaim } from "../generated/Staking/Staking" +import { Stake, Unstake, RewardClaim, TalentDisabledForNetworkTransfer } from "../generated/Staking/Staking" const FACTORY_ADDRESS = '0xa902DA7a40a671B84bA3Dd0BdBA6FD9d2D888246' const ADDRESS_ZERO = '0x0000000000000000000000000000000000000000' @@ -217,3 +217,41 @@ function updateTalentDayData(event: Transfer): void { talentDayData.dailySupply = talentToken.totalSupply; talentDayData.save(); } + +export function handleTalentNetworkTransfer(event: TalentDisabledForNetworkTransfer): void{ + const talentAddress = event.params.talent.toHex() + let talentToken = TalentToken.load(talentAddress) + if (talentToken === null) { + talentToken = new TalentToken(talentAddress); + talentToken.supporterCounter = ONE_BI + talentToken.totalValueLocked = INITIAL_SUPPLY_BI + talentToken.rewardsReady = ZERO_BD + talentToken.rewardsClaimed = ZERO_BD + } + talentToken.disabled = true + + for (let i = 0; i < talentToken.supporters.length; i++) { + const talentSupporterId = talentToken.supporters[i]; + const supporterAddress = talentSupporterId.split('-')[0] + let supporter = Supporter.load(supporterAddress) + if(supporter === null) { + supporter = new Supporter(supporterAddress) + supporter.totalAmount = ZERO_BD + supporter.rewardsClaimed = ZERO_BD + } + + let talentSupporter = SupporterTalentToken.load(talentSupporterId) + if (talentSupporter === null) { + talentSupporter = new SupporterTalentToken(talentSupporterId) + talentSupporter.amount = ZERO_BD + talentSupporter.supporter = supporter.id + talentSupporter.talent = talentToken.id + } + supporter.totalAmount = supporter.totalAmount > ZERO_BD ? supporter.totalAmount.minus(talentSupporter.talAmount) : ZERO_BD; + talentSupporter.talAmount = ZERO_BD; + supporter.save(); + talentSupporter.save(); + } + talentToken.save(); + +} \ No newline at end of file diff --git a/subgraph.yaml b/subgraph.yaml index 38bbdd1..7c08846 100644 --- a/subgraph.yaml +++ b/subgraph.yaml @@ -45,6 +45,8 @@ dataSources: handler: handleUnstake - event: RewardClaim(indexed address,indexed address,uint256,uint256) handler: handleRewardClaim + - event: TalentDisabledForNetworkTransfer(indexed address,uint256) + handler: handleTalentNetworkTransfer file: ./src/mapping.ts templates: - name: TalentToken