Loading
[ { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "address", "name": "_underlying", "type": "address" }, { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "address", "name": "_daoTreasury", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "actual", "type": "address" }, { "internalType": "address", "name": "expected", "type": "address" } ], "name": "NotAuthorized", "type": "error" }, { "inputs": [], "name": "ZeroDivision", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Claim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Stake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "StartMining", "type": "event" }, { "anonymous": false, "inputs": [], "name": "StopMining", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Unstake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "VotesDelegated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": false, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "VotesUndelegated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawalCompleted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "withdrawalAt", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawalQueued", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_oldDelegate", "type": "address" }, { "internalType": "address", "name": "_newDelegate", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "changeDelegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "beneficiary", "type": "address" } ], "name": "claimableRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "daoTreasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegate", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "delegateVote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenAmount", "type": "uint256" }, { "internalType": "address", "name": "_delegate", "type": "address" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getCurrentRecord", "outputs": [ { "components": [ { "internalType": "uint256", "name": "at", "type": "uint256" }, { "internalType": "uint256", "name": "baseVotingPower", "type": "uint256" }, { "internalType": "uint256", "name": "multiplier", "type": "uint256" }, { "internalType": "int256", "name": "netDelegatedVotes", "type": "int256" } ], "internalType": "struct VotingPowerHistory.Record", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getDelegations", "outputs": [ { "components": [ { "internalType": "address", "name": "delegate", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct DataTypes.Delegation[]", "name": "delegations", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getRawVotingPower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "getRawVotingPower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalRawVotingPower", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVaultType", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "globalCheckpoint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_withdrawalWaitDuration", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_vaultTokenAmount", "type": "uint256" }, { "internalType": "address", "name": "_delegate", "type": "address" } ], "name": "initiateWithdrawal", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "listPendingWithdrawals", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "withdrawableAt", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "delegate", "type": "address" } ], "internalType": "struct DataTypes.PendingWithdrawal[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsEmissionEndTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsEmissionRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_duration", "type": "uint256" } ], "name": "setWithdrawalWaitDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "stakedBalanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardsFrom", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "startMining", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stopMining", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "totalStaked", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_delegate", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "undelegateVote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "underlying", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "userCheckpoint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "withdrawalId", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101206040523480156200001257600080fd5b5060405162002fbc38038062002fbc8339810160408190526200003591620000eb565b6001600160a01b038085166080524260085580831660a05280821660c052831660e08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000096573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000bc919062000148565b60ff1661010052506200017492505050565b80516001600160a01b0381168114620000e657600080fd5b919050565b600080600080608085870312156200010257600080fd5b6200010d85620000ce565b93506200011d60208601620000ce565b92506200012d60408601620000ce565b91506200013d60608601620000ce565b905092959194509250565b6000602082840312156200015b57600080fd5b815160ff811681146200016d57600080fd5b9392505050565b60805160a05160c05160e05161010051612da16200021b600039600081816106ab0152610de5015260008181610309015281816106fe0152610d4f0152600081816103750152611ba50152600081816104a7015281816116000152818161164201528181611aff0152611b830152600081816103a5015281816109c701528181610a0901528181611120015281816111620152818161127401526112b60152612da16000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063817b1cd21161010f578063cead0481116100a2578063e2fcf55011610071578063e2fcf5501461047c578063e9314c731461048f578063f7c618c1146104a2578063fe4b84df146104c957600080fd5b8063cead04811461043b578063da4086791461044e578063dc01f60d14610456578063de1ec4031461046957600080fd5b80639f1acf08116100de5780639f1acf08146103e2578063b07b709b146103f5578063b6b55f2514610408578063c24ab3bb1461041b57600080fd5b8063817b1cd2146103975780638da5cb5b146103a0578063926f7327146103c757806397a04d5a146103da57600080fd5b8063372500ab116101875780636e553f65116101565780636e553f65146102f15780636f307dc31461030457806375baf37f1461034357806379022a9f1461037057600080fd5b8063372500ab146102ba5780634a62c9fb146102c25780634ba9699e146102cb57806354438127146102de57600080fd5b80631ac40e66116101c35780631ac40e66146102755780632e1a7d4d1461027f57806331cc13ba14610292578063344ff1d0146102b257600080fd5b806316765391146101ea57806318160ddd1461022657806319ad0eba1461022f575b600080fd5b6102136101f83660046128d8565b6001600160a01b03166000908152600c602052604090205490565b6040519081526020015b60405180910390f35b61021360135481565b61024261023d3660046128d8565b6104dc565b60405161021d91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b61027d610518565b005b61027d61028d3660046128f3565b61058d565b6102a56102a03660046128d8565b610822565b60405161021d919061290c565b601354610213565b61021361091d565b610213600e5481565b61027d6102d9366004612964565b6109bc565b6102136102ec366004612997565b610a46565b61027d6102ff366004612997565b610c9d565b61032b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021d565b604080518082018252600b81526a131bd8dad95915985d5b1d60aa1b6020820152905161021d91906129e7565b61032b7f000000000000000000000000000000000000000000000000000000000000000081565b61021360065481565b61032b7f000000000000000000000000000000000000000000000000000000000000000081565b61027d6103d5366004612a1a565b610ebc565b610213610ecb565b6102136103f03660046128d8565b610ee4565b61027d6104033660046128d8565b610ef0565b61027d6104163660046128f3565b610f8b565b61042e6104293660046128d8565b610f98565b60405161021d9190612a44565b61027d610449366004612ab4565b6110ff565b61027d611115565b6102136104643660046128d8565b611199565b610213610477366004612a1a565b611250565b61027d61048a366004612a1a565b61125e565b61027d61049d3660046128f3565b611269565b61032b7f000000000000000000000000000000000000000000000000000000000000000081565b61027d6104d73660046128f3565b6112e8565b6105076040518060800160405280600081526020016000815260200160008152602001600081525090565b6105126001836113fe565b92915050565b6006548015610586576000600854426105319190612b06565b905060008161053e610ecb565b6105489190612b19565b9050610554818461150c565b600760008282546105659190612b30565b92505081905550806009600082825461057e9190612b30565b909155505050505b5042600855565b600081815260116020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260038201546001600160a01b03908116606083018190526004909301541660808201529033146106455760405162461bcd60e51b815260206004820152602260248201527f6d61746368696e67207769746864726177616c20646f6573206e6f74206578696044820152611cdd60f21b60648201526084015b60405180910390fd5b42816020015111156106995760405162461bcd60e51b815260206004820152601b60248201527f6e6f2076616c69642070656e64696e67207769746864726177616c0000000000604482015260640161063c565b60408101516000906106d090601260ff7f00000000000000000000000000000000000000000000000000000000000000001661155f565b606083015160405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076b9190612b43565b50600083815260116020908152604080832083815560018101849055600281018490556003810180546001600160a01b031990811690915560049091018054909116905560608501516001600160a01b03168352601090915290206107d090846115bc565b5081606001516001600160a01b0316837f096793b0307a8bedd30923ee6c6a84d492646dd968c25a0c714296a68c74aceb846040015160405161081591815260200190565b60405180910390a3505050565b6001600160a01b0381166000908152600560205260408120606091610846826115c8565b90508067ffffffffffffffff81111561086157610861612b65565b6040519080825280602002602001820160405280156108a657816020015b604080518082019091526000808252602082015281526020019060019003908161087f5790505b50925060005b81811015610915576000806108c185846115d3565b915091506040518060400160405280836001600160a01b03168152602001828152508684815181106108f5576108f5612b7b565b60200260200101819052505050808061090d90612b91565b9150506108ac565b505050919050565b600061092833610ef0565b336000908152600b60205260408120549081900361094857600091505090565b336000818152600b602052604080822091909155517f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d49061098c9084815260200190565b60405180910390a280600960008282546109a69190612b06565b909155506109b6905033826115f1565b91505090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a365760405163c55ddc9760e01b81523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260440161063c565b610a4183838361162d565b505050565b600080610a546001336113fe565b905060006001600160a01b03841615801590610a7957506001600160a01b0384163314155b905084826020015110158015610ab557508080610ab557503360009081526003602052604090205485908360200151610ab29190612b06565b10155b610b015760405162461bcd60e51b815260206004820152601860248201527f6e6f7420656e6f75676820746f20756e64656c65676174650000000000000000604482015260640161063c565b610b2a33868460200151610b159190612b06565b604085015160608601516001939291906116c4565b508015610b3c57610b3c338587611808565b8460136000828254610b4e9190612b06565b90915550610b5e9050338661189d565b60006040518060a001604052806012548152602001600f5442610b819190612b30565b815260208082018990523360408084018290526001600160a01b038a811660609586015285516000908152601185528281208751808255888701516001830155888501516002830155968801516003820180549185166001600160a01b031992831617905560808901516004909201805492909416911617909155918252601090925220919250610c12919061192f565b5060128054906000610c2383612b91565b919050555080608001516001600160a01b031681606001516001600160a01b031682600001517f20849eb8a3d11461c2f45d1330d7cdfdcf0359148aaa26d84af32b9596e32b9484602001518560400151604051610c8b929190918252602082015260400190565b60405180910390a45195945050505050565b6001600160a01b038116610ce85760405162461bcd60e51b815260206004820152601260248201527106e6f2064656c65676174696f6e20746f20360741b604482015260640161063c565b60008211610d385760405162461bcd60e51b815260206004820152601a60248201527f63616e6e6f74206465706f736974207a65726f20616d6f756e74000000000000604482015260640161063c565b6040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610d8890339030908790600401612baa565b6020604051808303816000875af1158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190612b43565b506000610dd96001336113fe565b90506000610e0c8460ff7f000000000000000000000000000000000000000000000000000000000000000016601261155f565b9050610e2233828460200151610b159190612b30565b506001600160a01b03831615801590610e4457506001600160a01b0383163314155b15610e5457610e5433848361193b565b8060136000828254610e669190612b30565b90915550610e7690503382611a0c565b6040518481526001600160a01b0384169033907f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f629060200160405180910390a350505050565b610ec733838361193b565b5050565b6000600e54421115610edd5750600090565b50600d5490565b60006105128242611250565b610ef8610518565b6007546001600160a01b0382166000908152600a6020526040902054610f4290610f229083612b06565b6001600160a01b0384166000908152600c60205260409020545b90611a94565b6001600160a01b0383166000908152600b602052604081208054909190610f6a908490612b30565b90915550506001600160a01b039091166000908152600a6020526040902055565b610f958133610c9d565b50565b6001600160a01b0381166000908152601060205260408120606091610fbc82611abd565b67ffffffffffffffff811115610fd457610fd4612b65565b60405190808252806020026020018201604052801561104957816020015b6110366040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b815260200190600190039081610ff25790505b50905060005b61105883611abd565b8110156110f7576011600061106d8584611ac7565b81526020808201929092526040908101600020815160a0810183528154815260018201549381019390935260028101549183019190915260038101546001600160a01b03908116606084015260049091015416608082015282518390839081106110d9576110d9612b7b565b602002602001018190525080806110ef90612b91565b91505061104f565b509392505050565b61110a338483611808565b610a4133838361193b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461118f5760405163c55ddc9760e01b81523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260440161063c565b611197611ad3565b565b60075460065460009190156111e1576111d4600654600854426111bc9190612b06565b6111c4610ecb565b6111ce9190612b19565b9061150c565b6111de9082612b30565b90505b6001600160a01b0383166000908152600a6020526040902054611226906112089083612b06565b6001600160a01b0385166000908152600c6020526040902054610f3c565b6001600160a01b0384166000908152600b60205260409020546112499190612b30565b9392505050565b600061124960018484611bfb565b610ec7338383611808565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112e35760405163c55ddc9760e01b81523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260440161063c565b600f55565b600054610100900460ff16158080156113085750600054600160ff909116105b806113225750303b158015611322575060005460ff166001145b6113855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161063c565b6000805460ff1916600117905580156113a8576000805461ff0019166101001790555b600f8290556113b5610518565b8015610ec7576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6114296040518060800160405280600081526020016000815260200160008152602001600081525090565b6001600160a01b03821660009081526020848152604080832080548251818502810185019093528083529192909190849084015b828210156114b757838290600052602060002090600402016040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250508152602001906001019061145d565b50505050905080516000036114d6576114ce611cac565b915050610512565b80600182516114e59190612b06565b815181106114f5576114f5612b7b565b6020026020010151915050610512565b5092915050565b60008160000361152f57604051630a0c22c760e01b815260040160405180910390fd5b8260000361153f57506000610512565b6000611553670de0b6b3a764000085612b19565b90506114ce8382612bce565b600081830361156f575082611249565b8183101561159d576115818383612b06565b61158c90600a612ccc565b6115969085612b19565b9050611249565b6115a78284612b06565b6115b290600a612ccc565b6115969085612bce565b60006112498383611d08565b600061051282611dfb565b60008080806115e28686611e06565b909450925050505b9250929050565b60006116276001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484611e31565b50919050565b611635610518565b61166a6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016843085611e94565b6116744282612b06565b61167e9083612bce565b600d55600e81905560408051838152602081018390527f76554fac4477e8876b3de3af392cf374cf4e9de02ae78fbade2373107381fe50910160405180910390a1505050565b6116ef6040518060800160405280600081526020016000815260200160008152602001600081525090565b6001600160a01b0385166000908152602087815260408083208151608081018352428152928301889052908201869052606082018590529161173189896113fe565b8051909150421480156117445750825415155b156117a95782548290849061175b90600190612b06565b8154811061176b5761176b612b7b565b9060005260206000209060040201600082015181600001556020820151816001015560408201518160020155606082015181600301559050506117fc565b6001600160a01b038816600090815260208a815260408083208054600181810183559185529383902086516004909502019384559185015191830191909155830151600282015560608301516003909101555b50979650505050505050565b6118156001848484611eb5565b6001600160a01b03831660009081526005602052604081206118379084612092565b9050818103611868576001600160a01b038416600090815260056020526040902061186290846120a7565b50611897565b611895836118768484612b06565b6001600160a01b038716600090815260056020526040902091906120bc565b505b50505050565b6118a682610ef0565b6001600160a01b0382166000908152600c6020526040812080548392906118ce908490612b06565b9250508190555080600660008282546118e79190612b06565b90915550506040518181526001600160a01b038316907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd906020015b60405180910390a25050565b600061124983836120d2565b6001600160a01b0382166119915760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f742064656c656761746520746f2030206164647265737300000000604482015260640161063c565b61199e6001848484612121565b6001600160a01b038316600090815260056020526040812081906119c290856122f2565b915091506000826119d357836119dd565b6119dd8483612b30565b6001600160a01b0387166000908152600560205260409020909150611a039086836120bc565b50505050505050565b611a1582610ef0565b8060066000828254611a279190612b30565b90915550506001600160a01b0382166000908152600c602052604081208054839290611a54908490612b30565b90915550506040518181526001600160a01b038316907febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a90602001611923565b600080611aa18385612b19565b9050611ab5670de0b6b3a764000082612bce565b949350505050565b6000610512825490565b6000611249838361230a565b611adb610518565b6009546040516370a0823160e01b8152306004820152600091906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611b46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6a9190612cd8565b611b749190612b06565b9050611bca6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000083611e31565b6000600e8190556040517fe5a0e15e63edb96a15ed99a9c2a3674e2e0bd1b10b65d0223cce19a6b54e7fb19190a150565b6001600160a01b03821660009081526020848152604080832080548251818502810185019093528083528493611c9793929190859084015b82821015611c8d578382906000526020600020906004020160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505081526020019060010190611c33565b5050505084612334565b915050611ca38161237a565b95945050505050565b611cd76040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052806000815260200160008152602001670de0b6b3a764000081526020016000815250905090565b60008181526001830160205260408120548015611df1576000611d2c600183612b06565b8554909150600090611d4090600190612b06565b9050818114611da5576000866000018281548110611d6057611d60612b7b565b9060005260206000200154905080876000018481548110611d8357611d83612b7b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611db657611db6612cf1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610512565b6000915050610512565b600061051282611abd565b60008080611e148585611ac7565b600081815260029690960160205260409095205494959350505050565b6040516001600160a01b038316602482015260448101829052610a4190849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526123a6565b611897846323b872dd60e01b858585604051602401611e5d93929190612baa565b6001600160a01b038084166000908152600186016020908152604080832093861683529290522054811115611f3e5760405162461bcd60e51b815260206004820152602960248201527f7573657220686173206e6f742064656c65676174656420656e6f75676820746f6044820152682064656c656761746560b81b606482015260840161063c565b6001600160a01b038216600090815260038501602052604081208054839290611f68908490612b06565b90915550506001600160a01b038316600090815260028501602052604081208054839290611f97908490612b06565b90915550506001600160a01b038084166000908152600186016020908152604080832093861683529290529081208054839290611fd5908490612b06565b9091555060009050611fe785856113fe565b9050612014848260200151836040015161200a888a61247890919063ffffffff16565b89939291906116c4565b50600061202186856113fe565b905061204e8482602001518360400151612044888b61247890919063ffffffff16565b8a939291906116c4565b507fde5aa493a93d4351631c1991a0aeecfd52d6b51cf1b61f1a3c48f97e2680865385858560405161208293929190612baa565b60405180910390a1505050505050565b6000611249836001600160a01b0384166124aa565b6000611249836001600160a01b03841661251a565b6000611ab5846001600160a01b03851684612537565b600081815260018301602052604081205461211957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610512565b506000610512565b600061212d85856113fe565b6001600160a01b03851660009081526002870160209081526040808320549084015191840151939450919261216191612554565b61216b9190612b06565b9050828110156121bd5760405162461bcd60e51b815260206004820181905260248201527f696e73756666696369656e742062616c616e636520746f2064656c6567617465604482015260640161063c565b6001600160a01b0384166000908152600387016020526040812080548592906121e7908490612b30565b90915550506001600160a01b038516600090815260028701602052604081208054859290612216908490612b30565b90915550506001600160a01b038086166000908152600188016020908152604080832093881683529290529081208054859290612254908490612b30565b9091555050602082015160408301516122739187916120448a84612478565b50600061228087866113fe565b90506122ad85826020015183604001516122a3898c61247890919063ffffffff16565b8b939291906116c4565b507fff825f9424124effc5ce1d9f4803d58ede8a2bda4da2324810f74834715c4c598686866040516122e193929190612baa565b60405180910390a150505050505050565b60008080806115e2866001600160a01b038716612573565b600082600001828154811061232157612321612b7b565b9060005260206000200154905092915050565b60006123616040518060800160405280600081526020016000815260200160008152602001600081525090565b61236f8484600087516125b5565b915091509250929050565b6000816060015161239c8360400151846020015161255490919063ffffffff16565b6105129190612d07565b60006123fb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166127109092919063ffffffff16565b805190915015610a4157808060200190518101906124199190612b43565b610a415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063c565b6001600160a01b0381166000908152600283016020908152604080832054600386019092528220546112499190612d2f565b6000818152600283016020526040812054801515806124ce57506124ce848461271f565b6112495760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b65790000604482015260640161063c565b6000818152600283016020526040812081905561124983836115bc565b60008281526002840160205260408120829055611ab5848461192f565b6000670de0b6b3a76400006125698385612b19565b6112499190612bce565b60008181526002830160205260408120548190806125a257612595858561271f565b9250600091506115ea9050565b6001925090506115ea565b509250929050565b60006125e26040518060800160405280600081526020016000815260200160008152602001600081525090565b8284106125fc5760006125f3611cac565b91509150612707565b6126068484612b06565b60010361265457600086858151811061262157612621612b7b565b602002602001015190508581600001511115612646576000612641611cac565b61264a565b6001815b9250925050612707565b600060026126628686612b30565b61266c9190612bce565b905060008761267c600184612b06565b8151811061268c5761268c612b7b565b6020026020010151905060008883815181106126aa576126aa612b7b565b60200260200101519050878260000151111580156126c85750805188105b156126db57506001935091506127079050565b805188106126fb576126ef898985896125b5565b94509450505050612707565b6126ef898989866125b5565b94509492505050565b6060611ab5848460008561272b565b60006112498383612806565b60608247101561278c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161063c565b600080866001600160a01b031685876040516127a89190612d4f565b60006040518083038185875af1925050503d80600081146127e5576040519150601f19603f3d011682016040523d82523d6000602084013e6127ea565b606091505b50915091506127fb8783838761281e565b979650505050505050565b60008181526001830160205260408120541515611249565b6060831561288d578251600003612886576001600160a01b0385163b6128865760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063c565b5081611ab5565b611ab583838151156128a25781518083602001fd5b8060405162461bcd60e51b815260040161063c91906129e7565b80356001600160a01b03811681146128d357600080fd5b919050565b6000602082840312156128ea57600080fd5b611249826128bc565b60006020828403121561290557600080fd5b5035919050565b602080825282518282018190526000919060409081850190868401855b8281101561295757815180516001600160a01b03168552860151868501529284019290850190600101612929565b5091979650505050505050565b60008060006060848603121561297957600080fd5b612982846128bc565b95602085013595506040909401359392505050565b600080604083850312156129aa57600080fd5b823591506129ba602084016128bc565b90509250929050565b60005b838110156129de5781810151838201526020016129c6565b50506000910152565b6020815260008251806020840152612a068160408501602087016129c3565b601f01601f19169190910160400192915050565b60008060408385031215612a2d57600080fd5b612a36836128bc565b946020939093013593505050565b602080825282518282018190526000919060409081850190868401855b8281101561295757815180518552868101518786015285810151868601526060808201516001600160a01b0390811691870191909152608091820151169085015260a09093019290850190600101612a61565b600080600060608486031215612ac957600080fd5b612ad2846128bc565b9250612ae0602085016128bc565b9150604084013590509250925092565b634e487b7160e01b600052601160045260246000fd5b8181038181111561051257610512612af0565b808202811582820484141761051257610512612af0565b8082018082111561051257610512612af0565b600060208284031215612b5557600080fd5b8151801515811461124957600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060018201612ba357612ba3612af0565b5060010190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600082612beb57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156125ad578160001904821115612c1157612c11612af0565b80851615612c1e57918102915b93841c9390800290612bf5565b600082612c3a57506001610512565b81612c4757506000610512565b8160018114612c5d5760028114612c6757612c83565b6001915050610512565b60ff841115612c7857612c78612af0565b50506001821b610512565b5060208310610133831016604e8410600b8410161715612ca6575081810a610512565b612cb08383612bf0565b8060001904821115612cc457612cc4612af0565b029392505050565b60006112498383612c2b565b600060208284031215612cea57600080fd5b5051919050565b634e487b7160e01b600052603160045260246000fd5b8082018281126000831280158216821582161715612d2757612d27612af0565b505092915050565b818103600083128015838313168383128216171561150557611505612af0565b60008251612d618184602087016129c3565b919091019291505056fea26469706673582212209453fecd65dd45f07500703abd4f594f22b08bdf7a33c93ff7d1d32ef7dfe5e764736f6c6343000811003300000000000000000000000078ecf97572c3890ed02221a611014f30219f6219000000000000000000000000c2aa60465bffa1a88f5ba471a59ca0435c3ec5c100000000000000000000000070c4430f9d98b4184a4ef3e44ce10c320a8b73830000000000000000000000009543b9f3450c17f1e5e558cc135fd8964dbef92a