[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_depositToken", "type": "address" }, { "internalType": "address", "name": "_swapPairToken", "type": "address" }, { "internalType": "address", "name": "_gmxProxy", "type": "address" }, { "internalType": "address", "name": "_timelock", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "minTokensToReinvest", "type": "uint256" }, { "internalType": "uint256", "name": "adminFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "devFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "reinvestRewardBips", "type": "uint256" } ], "internalType": "struct MasterChefStrategy.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AllowDepositor", "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": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "DepositsEnabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTotalDeposits", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "Reinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "RemoveDepositor", "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": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateAdminFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateDevAddr", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateDevFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMaxTokensToDepositWithoutReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMinTokensToReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateReinvestReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "ADMIN_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEPOSITS_ENABLED", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEV_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOKENS_TO_DEPOSIT_WITHOUT_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_TOKENS_TO_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REINVEST_REWARD_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION_HASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "allowDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowedDepositors", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "devAddr", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateDeployedBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "extraToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getDepositTokensForShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getSharesForDepositTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberOfAllowedDepositors", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxy", "outputs": [ { "internalType": "contract IGmxProxy", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverAVAX", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "removeDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minReturnAmountAccepted", "type": "uint256" }, { "internalType": "bool", "name": "disableDeposits", "type": "bool" } ], "name": "rescueDeployedFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "revokeAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setAllowances", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_extraTokenSwapPair", "type": "address" } ], "name": "setExtraRewardSwapPair", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_proxy", "type": "address" } ], "name": "setProxy", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapPairExtraReward", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalDeposits", "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": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateAdminFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "updateDepositsEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newValue", "type": "address" } ], "name": "updateDevAddr", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateDevFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMaxTokensToDepositWithoutReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMinTokensToReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateReinvestReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60e0604052600960a0819052685969656c642059616b60b81b60c09081526200002c916000919062000e2e565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000e2e565b503480156200006757600080fd5b50604051620057f4380380620057f48339810160408190526200008a9162000f64565b858573b31f66aa3c1e785363f0875a1b74e27b85fd66c7808760008188828989898880878688818881620000bd6200025d565b600680546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620057d4833981519152908290a35088516200010f9060009060208c019062000e2e565b50600980546001600160a01b03808b166001600160a01b031992831617909255600a8054928a16928216929092179091556080839052600b8054909116732d580f9cf2fb2d09bc411532988f2afda4e7beff1790556200017187878762000261565b6200017c84620004dd565b80516200018990620006f2565b602081015162000199906200077a565b6040810151620001a99062000848565b6060810151620001b99062000902565b620001c56001620009bc565b620001d08362000a64565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234600080604051620002049291906200107e565b60405180910390a1505050505050505050620002268462000b1e60201b60201c565b5050601780546001600160a01b0319166001600160a01b039c909c169b909b17909a5550620012569b505050505050505050505050565b3390565b826001600160a01b0316826001600160a01b031614620004ae57806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620002b557600080fd5b505afa158015620002ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f0919062000f47565b6001600160a01b0316826001600160a01b03161415620003c157826001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034e57600080fd5b505afa15801562000363573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000389919062000f47565b6001600160a01b031614620003bb5760405162461bcd60e51b8152600401620003b2906200115f565b60405180910390fd5b620004ae565b806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620003fb57600080fd5b505afa15801562000410573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000436919062000f47565b6001600160a01b0316826001600160a01b031614156200049457826001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034e57600080fd5b60405162461bcd60e51b8152600401620003b29062001109565b601280546001600160a01b039384166001600160a01b0319918216179091556013805492909316911617905550565b6001600160a01b03811615620006d257600a5460408051630dfe168160e01b815290516001600160a01b0392831692841691630dfe1681916004808301926020929190829003018186803b1580156200053557600080fd5b505afa1580156200054a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000570919062000f47565b6001600160a01b031614156200061b57806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620005ba57600080fd5b505afa158015620005cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005f5919062000f47565b601580546001600160a01b0319166001600160a01b0392909216919091179055620006b1565b806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200065557600080fd5b505afa1580156200066a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000690919062000f47565b601580546001600160a01b0319166001600160a01b03929092169190911790555b601480546001600160a01b0319166001600160a01b038316179055620006ef565b601480546001600160a01b03199081169091556015805490911690555b50565b620006fc6200025d565b6001600160a01b03166200070f62000b8b565b6001600160a01b031614620007385760405162461bcd60e51b8152600401620003b290620011fd565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516200076d9291906200107e565b60405180910390a1600c55565b620007846200025d565b6001600160a01b03166200079762000b8b565b6001600160a01b031614620007c05760405162461bcd60e51b8152600401620003b290620011fd565b612710620007fa600f54620007e66011548562000b9a60201b62001c561790919060201c565b62000b9a60201b62001c561790919060201c565b11156200080657600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a601054826040516200083b9291906200107e565b60405180910390a1601055565b620008526200025d565b6001600160a01b03166200086562000b8b565b6001600160a01b0316146200088e5760405162461bcd60e51b8152600401620003b290620011fd565b612710620008b4600f54620007e66010548562000b9a60201b62001c561790919060201c565b1115620008c057600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051620008f59291906200107e565b60405180910390a1601155565b6200090c6200025d565b6001600160a01b03166200091f62000b8b565b6001600160a01b031614620009485760405162461bcd60e51b8152600401620003b290620011fd565b6127106200096e601154620007e66010548562000b9a60201b62001c561790919060201c565b11156200097a57600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f5482604051620009af9291906200107e565b60405180910390a1600f55565b620009c66200025d565b6001600160a01b0316620009d962000b8b565b6001600160a01b03161462000a025760405162461bcd60e51b8152600401620003b290620011fd565b600e5460ff161515811515141562000a1957600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859062000a5990839062001073565b60405180910390a150565b62000a6e6200025d565b6001600160a01b031662000a8162000b8b565b6001600160a01b03161462000aaa5760405162461bcd60e51b8152600401620003b290620011fd565b6001600160a01b03811662000ad35760405162461bcd60e51b8152600401620003b2906200108c565b6006546040516001600160a01b03808416921690600080516020620057d483398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600954600a5462000b4a9183916001600160a01b03918216911662000bc9602090811b62001c7b17901c565b62000b695760405162461bcd60e51b8152600401620003b290620011ab565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031690565b60008282018381101562000bc25760405162461bcd60e51b8152600401620003b290620010d2565b9392505050565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c0557600080fd5b505afa15801562000c1a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c40919062000f47565b6001600160a01b0316836001600160a01b0316148062000ce55750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c9557600080fd5b505afa15801562000caa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cd0919062000f47565b6001600160a01b0316836001600160a01b0316145b801562000e075750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d2757600080fd5b505afa15801562000d3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d62919062000f47565b6001600160a01b0316826001600160a01b0316148062000e075750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562000db757600080fd5b505afa15801562000dcc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000df2919062000f47565b6001600160a01b0316826001600160a01b0316145b801562000e265750816001600160a01b0316836001600160a01b031614155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000e7157805160ff191683800117855562000ea1565b8280016001018555821562000ea1579182015b8281111562000ea157825182559160200191906001019062000e84565b5062000eaf92915062000eb3565b5090565b5b8082111562000eaf576000815560010162000eb4565b80516001600160a01b038116811462000ee257600080fd5b919050565b60006080828403121562000ef9578081fd5b604051608081016001600160401b038111828210171562000f1657fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b60006020828403121562000f59578081fd5b62000bc28262000eca565b600080600080600080610120878903121562000f7e578182fd5b86516001600160401b038082111562000f95578384fd5b818901915089601f83011262000fa9578384fd5b81518181111562000fb657fe5b6020915062000fce601f8201601f1916830162001232565b8181528b8383860101111562000fe2578586fd5b855b828110156200100157848101840151828201850152830162000fe4565b828111156200101257868484840101525b50985062001024905089820162000eca565b96505050620010366040880162000eca565b9350620010466060880162000eca565b9250620010566080880162000eca565b9150620010678860a0890162000ee7565b90509295509295509295565b901515815260200190565b918252602082015260400190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252604190820152600080516020620057b483398151915260408201527f6f6573206e6f7420636f6e7461696e20706f6f6c2072657761726420746f6b656060820152603760f91b608082015260a00190565b6020808252603f90820152600080516020620057b483398151915260408201527f6f6573206e6f7420636f6e7461696e2065636f73797374656d20746f6b656e00606082015260800190565b60208082526032908201527f7377617020746f6b656e20646f6573206e6f74206d61746368206465706f73696040820152713a1030b732103932bbb0b932103a37b5b2b760711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040518181016001600160401b03811182821017156200124e57fe5b604052919050565b6080516145166200129e600039806107de528061098f5280610d565280610f1052806115e9528061215b528061241c52806127f35280612afe5280612d6752506145166000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c80638da5cb5b116101e9578063c4b24a461161010f578063dd8ce4d6116100ad578063ed24911d1161007c578063ed24911d146106f4578063f2fde38b146106fc578063f7c618c11461070f578063fdb5a03e14610717576103a4565b8063dd8ce4d6146106b3578063e21ac825146106c6578063eab89a5a146106d9578063ec556889146106ec576103a4565b8063d505accf116100e9578063d505accf1461067d578063da09c72c14610690578063dbd9a4d414610698578063dd62ed3e146106a0576103a4565b8063c4b24a461461065a578063c89039c514610662578063cff1b6ef1461066a576103a4565b8063a1a4ddeb11610187578063b52a321f11610156578063b52a321f1461062f578063b6b55f2514610637578063b9e57b801461064a578063bd079f5514610652576103a4565b8063a1a4ddeb146105ee578063a8ae2b7c146105f6578063a9059cbb14610609578063ac0d31ff1461061c576103a4565b806395d89b41116101c357806395d89b41146105b857806397107d6d146105c057806399729ec1146105d35780639e4e7318146105e6576103a4565b80638da5cb5b14610588578063909ac8f41461059d5780639291d563146105a5576103a4565b80634e77ace5116102ce5780637ae267731161026c5780638432e8941161023b5780638432e894146105475780638980f11f1461055a5780638aff733d1461056d5780638b73e60614610575576103a4565b80637ae26773146105065780637d882097146105195780637ecebe00146105215780638183723014610534576103a4565b80635eaec0e4116102a85780635eaec0e4146104db57806370a08231146104e3578063715018a6146104f6578063789139bc146104fe576103a4565b80634e77ace5146104ad5780634ebb7916146104c05780635ea682ea146104d3576103a4565b80632e1a7d4d116103465780633bdc6e72116103155780633bdc6e721461046c578063483c2ef0146104745780634a970be7146104875780634bebd1e71461049a576103a4565b80632e1a7d4d146104275780632f4f21e21461043c57806330adf81f1461044f578063313ce56714610457576103a4565b80630f23475d116103825780630f23475d146103fc57806318160ddd1461040457806320606b701461040c57806323b872dd14610414576103a4565b806306fdde03146103a957806307677111146103c7578063095ea7b3146103dc575b600080fd5b6103b161071f565b6040516103be9190613c82565b60405180910390f35b6103cf6107ad565b6040516103be9190613bfb565b6103ef6103ea36600461390b565b6107b3565b6040516103be9190613bf0565b6103cf6107ca565b6103cf610836565b6103cf61083c565b6103ef61042236600461385e565b610860565b61043a6104353660046139bc565b610949565b005b61043a61044a36600461390b565b610a36565b6103cf610a44565b61045f610a68565b6040516103be91906143d8565b6103cf610a6d565b6103ef6104823660046137ee565b610a73565b61043a610495366004613a10565b610a88565b61043a6104a83660046137ee565b610b20565b61043a6104bb366004613936565b610c04565b61043a6104ce3660046139bc565b610ca2565b6103cf610d4e565b6103cf610d54565b6103cf6104f13660046137ee565b610d78565b61043a610d97565b6103cf610e20565b61043a610514366004613826565b610e26565b6103cf610f08565b6103cf61052f3660046137ee565b610f3b565b61043a6105423660046139bc565b610f4d565b61043a6105553660046137ee565b610fcc565b61043a61056836600461390b565b611002565b6103cf611114565b61043a6105833660046137ee565b61111a565b610590611220565b6040516103be9190613b44565b61059061122f565b61043a6105b33660046137ee565b61123e565b6103b16112d1565b61043a6105ce3660046137ee565b61132b565b61043a6105e13660046139bc565b61138c565b6103cf61143a565b61059061145e565b61043a6106043660046139bc565b61146d565b6103ef61061736600461390b565b611515565b61043a61062a3660046139ec565b611522565b6103ef611729565b61043a6106453660046139bc565b611732565b6103cf61173c565b6103cf61177d565b6103cf611783565b610590611797565b61043a6106783660046139bc565b6117a6565b61043a61068b36600461389e565b61184e565b610590611903565b61043a611912565b6103cf6106ae366004613826565b611969565b6103cf6106c13660046139bc565b611994565b61043a6106d43660046139bc565b6119ce565b6103cf6106e73660046139bc565b611a4d565b610590611a7e565b6103cf611a8d565b61043a61070a3660046137ee565b611b24565b610590611be5565b61043a611bf4565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b505050505081565b60105481565b60006107c0338484611ecc565b5060015b92915050565b6000806107d5610f08565b905060006108027f0000000000000000000000000000000000000000000000000000000000000000611f80565b90506000610821610811611f86565b61081b8585611f8c565b90611fc6565b905061082d8382612008565b93505050505b90565b60025481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6001600160a01b03831660008181526003602090815260408083203380855292528220549192909190821480159061089a57506000198114155b156109305760006108c6856040518060600160405280602f815260200161445d602f9139849190612046565b6001600160a01b03808916600081815260036020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610926908590613bfb565b60405180910390a3505b61093b868686612072565b6001925050505b9392505050565b600061095482611a4d565b90506000811161097f5760405162461bcd60e51b815260040161097690613f42565b60405180910390fd5b61098881612156565b60006109b37f0000000000000000000000000000000000000000000000000000000000000000611f80565b905060006109c2610811611f86565b6009549091506109e5906001600160a01b0316336109e08685612008565b612180565b6109ef3385612221565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610a289190613bfb565b60405180910390a250505050565b610a4082826122fb565b5050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b60086020526000908152604090205460ff1681565b6009546040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d505accf90610add90339030908a908a908a908a908a90600401613b7c565b600060405180830381600087803b158015610af757600080fd5b505af1158015610b0b573d6000803e3d6000fd5b50505050610b1933866122fb565b5050505050565b610b286124a9565b6001600160a01b0316610b39611220565b6001600160a01b031614610b5f5760405162461bcd60e51b815260040161097690614090565b6001600160a01b03811660009081526008602052604090205460ff1615610b985760405162461bcd60e51b815260040161097690613e1a565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610bca91611c56565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610c0c6124a9565b6001600160a01b0316610c1d611220565b6001600160a01b031614610c435760405162461bcd60e51b815260040161097690614090565b600e5460ff1615158115151415610c5957600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590610c97908390613bf0565b60405180910390a150565b610caa6124a9565b6001600160a01b0316610cbb611220565b6001600160a01b031614610ce15760405162461bcd60e51b815260040161097690614090565b60008111610cee57600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610d1b573d6000803e3d6000fd5b507f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28600082604051610c97929190613bbd565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600460205260409020545b919050565b610d9f6124a9565b6001600160a01b0316610db0611220565b6001600160a01b031614610dd65760405162461bcd60e51b815260040161097690614090565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600d5481565b610e2e6124a9565b6001600160a01b0316610e3f611220565b6001600160a01b031614610e655760405162461bcd60e51b815260040161097690614090565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0383169063095ea7b390610ead908490600090600401613bbd565b602060405180830381600087803b158015610ec757600080fd5b505af1158015610edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eff9190613952565b610a4057600080fd5b600080610f357f0000000000000000000000000000000000000000000000000000000000000000306124ad565b91505090565b60056020526000908152604090205481565b610f556124a9565b6001600160a01b0316610f66611220565b6001600160a01b031614610f8c5760405162461bcd60e51b815260040161097690614090565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c5482604051610fbf929190614392565b60405180910390a1600c55565b600b546001600160a01b03163314610ff65760405162461bcd60e51b8152600401610976906141ed565b610fff816124b7565b50565b61100a6124a9565b6001600160a01b031661101b611220565b6001600160a01b0316146110415760405162461bcd60e51b815260040161097690614090565b6000811161104e57600080fd5b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061107c9033908590600401613bbd565b602060405180830381600087803b15801561109657600080fd5b505af11580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190613952565b6110d757600080fd5b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288282604051611108929190613bbd565b60405180910390a15050565b600f5481565b6111226124a9565b6001600160a01b0316611133611220565b6001600160a01b0316146111595760405162461bcd60e51b815260040161097690614090565b60006007541161117b5760405162461bcd60e51b815260040161097690613d60565b6001600160a01b03811660009081526008602052604090205460ff1615156001146111b85760405162461bcd60e51b815260040161097690613f79565b6001600160a01b0381166000908152600860205260409020805460ff191690556007546111e6906001612008565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b6014546001600160a01b031681565b600b546001600160a01b031633146112685760405162461bcd60e51b8152600401610976906141ed565b600b546040517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00916112a7916001600160a01b03909116908490613bd6565b60405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107a55780601f1061077a576101008083540402835291602001916107a5565b6113336124a9565b6001600160a01b0316611344611220565b6001600160a01b03161461136a5760405162461bcd60e51b815260040161097690614090565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6113946124a9565b6001600160a01b03166113a5611220565b6001600160a01b0316146113cb5760405162461bcd60e51b815260040161097690614090565b6127106113ef600f546113e960105485611c5690919063ffffffff16565b90611c56565b11156113fa57600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d6517261316011548260405161142d929190614392565b60405180910390a1601155565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6015546001600160a01b031681565b6114756124a9565b6001600160a01b0316611486611220565b6001600160a01b0316146114ac5760405162461bcd60e51b815260040161097690614090565b6127106114ca6011546113e960105485611c5690919063ffffffff16565b11156114d557600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f5482604051611508929190614392565b60405180910390a1600f55565b60006107c0338484612072565b61152a6124a9565b6001600160a01b031661153b611220565b6001600160a01b0316146115615760405162461bcd60e51b815260040161097690614090565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611592903090600401613b44565b60206040518083038186803b1580156115aa57600080fd5b505afa1580156115be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e291906139d4565b905061160d7f00000000000000000000000000000000000000000000000000000000000000006126d4565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a082319061163e903090600401613b44565b60206040518083038186803b15801561165657600080fd5b505afa15801561166a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168e91906139d4565b90508361169b8284612008565b10156116b95760405162461bcd60e51b815260040161097690613e51565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346116e2610f08565b6002546040516116f3929190614392565b60405180910390a1600e5460ff161515600114801561171457506001831515145b15611723576117236000610c04565b50505050565b600e5460ff1681565b610fff33826122fb565b600080611747611783565b9050600c5481106117755761176d61271061081b600f5484611f8c90919063ffffffff16565b915050610833565b600091505090565b600c5481565b60008061178e61275e565b94505050505090565b6009546001600160a01b031681565b6117ae6124a9565b6001600160a01b03166117bf611220565b6001600160a01b0316146117e55760405162461bcd60e51b815260040161097690614090565b612710611803600f546113e960115485611c5690919063ffffffff16565b111561180e57600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a60105482604051611841929190614392565b60405180910390a1601055565b4284101561186e5760405162461bcd60e51b815260040161097690613f0b565b6001600160a01b038716600090815260056020908152604080832080546001810190915590516118c9927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c9101613c04565b6040516020818303038152906040528051906020012090506118ee8882868686612a1f565b6118f9888888611ecc565b5050505050505050565b600b546001600160a01b031681565b61191a6124a9565b6001600160a01b031661192b611220565b6001600160a01b0316146119515760405162461bcd60e51b815260040161097690614090565b60405162461bcd60e51b8152600401610976906141b6565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b60006119aa6119a1610f08565b60025490611f8c565b6119b5575080610d92565b6107c46119c0610f08565b60025461081b908590611f8c565b6119d66124a9565b6001600160a01b03166119e7611220565b6001600160a01b031614611a0d5760405162461bcd60e51b815260040161097690614090565b7fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f600d5482604051611a40929190614392565b60405180910390a1600d55565b6000611a5a6119a1610f08565b611a6657506000610d92565b6107c460025461081b611a77610f08565b8590611f8c565b6017546001600160a01b031681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6000604051611ac29190613a9e565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611af4612af5565b30604051602001611b09959493929190613c38565b60405160208183030381529060405280519060200120905090565b611b2c6124a9565b6001600160a01b0316611b3d611220565b6001600160a01b031614611b635760405162461bcd60e51b815260040161097690614090565b6001600160a01b038116611b895760405162461bcd60e51b815260040161097690613c95565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b323314611c135760405162461bcd60e51b815260040161097690613cf2565b600080600080611c2161275e565b9350935093509350600c54811015611c4b5760405162461bcd60e51b81526004016109769061425b565b611723828585612af9565b6000828201838110156109425760405162461bcd60e51b815260040161097690613d29565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611cb657600080fd5b505afa158015611cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cee919061380a565b6001600160a01b0316836001600160a01b03161480611d8e5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611d4157600080fd5b505afa158015611d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d79919061380a565b6001600160a01b0316836001600160a01b0316145b8015611ea65750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611dce57600080fd5b505afa158015611de2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e06919061380a565b6001600160a01b0316826001600160a01b03161480611ea65750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5957600080fd5b505afa158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e91919061380a565b6001600160a01b0316826001600160a01b0316145b8015611ec45750816001600160a01b0316836001600160a01b031614155b949350505050565b6001600160a01b038316611ef25760405162461bcd60e51b8152600401610976906140c5565b6001600160a01b038216611f185760405162461bcd60e51b815260040161097690614326565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f73908590613bfb565b60405180910390a3505050565b50600090565b61271090565b600082611f9b575060006107c4565b82820282848281611fa857fe5b04146109425760405162461bcd60e51b815260040161097690614033565b600061094283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c40565b600061094283836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152505b6000818484111561206a5760405162461bcd60e51b81526004016109769190613c82565b505050900390565b6001600160a01b0382166120985760405162461bcd60e51b8152600401610976906140fc565b6120d5816040518060600160405280602e81526020016144b3602e91396001600160a01b0386166000908152600460205260409020549190612046565b6001600160a01b0380851660009081526004602052604080822093909355908416815220546121049082611c56565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f73908590613bfb565b610fff7f000000000000000000000000000000000000000000000000000000000000000082612c77565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906121ae9085908590600401613bbd565b602060405180830381600087803b1580156121c857600080fd5b505af11580156121dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122009190613952565b61221c5760405162461bcd60e51b815260040161097690613eae565b505050565b61225e8160405180606001604052806027815260200161448c602791396001600160a01b0385166000908152600460205260409020549190612046565b60046000846001600160a01b03166001600160a01b03168152602001908152602001600020819055506122ae81604051806060016040528060278152602001614436602791396002549190612046565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122ef908590613bfb565b60405180910390a35050565b600e5460ff1615156001146123225760405162461bcd60e51b815260040161097690614292565b600d541561235a5760008060008061233861275e565b9350935093509350600d5481111561235557612355828585612af9565b505050505b6009546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd906123a790339030908690600401613b58565b602060405180830381600087803b1580156123c157600080fd5b505af11580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f99190613952565b6124155760405162461bcd60e51b815260040161097690614159565b60006124407f0000000000000000000000000000000000000000000000000000000000000000611f80565b9050600061244f610811611f86565b9050612467846124626106c18685612008565b612cc0565b61247083612d42565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c84604051610a289190613bfb565b3390565b6000610942612d8c565b6001600160a01b038116156126b557600a54604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290516001600160a01b0392831692841691630dfe1681916004808301926020929190829003018186803b15801561252657600080fd5b505afa15801561253a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061255e919061380a565b6001600160a01b0316141561260357806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156125a657600080fd5b505afa1580156125ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125de919061380a565b601580546001600160a01b0319166001600160a01b0392909216919091179055612695565b806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561263c57600080fd5b505afa158015612650573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612674919061380a565b601580546001600160a01b0319166001600160a01b03929092169190911790555b601480546001600160a01b0319166001600160a01b038316179055610fff565b601480546001600160a01b031990811690915560158054909116905550565b60006126de612d8c565b6017546040517f566155290000000000000000000000000000000000000000000000000000000081529192506001600160a01b031690635661552990612728908490600401613bfb565b600060405180830381600087803b15801561274257600080fd5b505af1158015612756573d6000803e3d6000fd5b505050505050565b6012546040516370a0823160e01b815260009182918291829182916001600160a01b0316906370a0823190612797903090600401613b44565b60206040518083038186803b1580156127af57600080fd5b505afa1580156127c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e791906139d4565b905060008060006128187f000000000000000000000000000000000000000000000000000000000000000030612e19565b91945092509050600061282b8585611c56565b600a546012549192506000916001600160a01b03908116911614156128505784612875565b601254600a546013546128759285926001600160a01b03918216929082169116612eb6565b905060006001600160a01b03841615612974576001600160a01b03841673b31f66aa3c1e785363f0875a1b74e27b85fd66c714156128b4575083612974565b6014546001600160a01b031615612974576015546040516370a0823160e01b815261294e916001600160a01b0316906370a08231906128f7903090600401613b44565b60206040518083038186803b15801561290f57600080fd5b505afa158015612923573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294791906139d4565b8690611c56565b600a5460145491965061297191879187916001600160a01b039182169116612eb6565b90505b600a546040516370a0823160e01b81526000916129fb9184916001600160a01b0316906370a08231906129ab903090600401613b44565b60206040518083038186803b1580156129c357600080fd5b505afa1580156129d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e991906139d4565b90506000612a098285611c56565b949d969c50909a50929850939650505050505050565b6000612a29611a8d565b85604051602001612a3b929190613b0e565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051612a789493929190613c64565b6020604051602081039080840390855afa158015612a9a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590612ad05750866001600160a01b0316816001600160a01b0316145b612aec5760405162461bcd60e51b815260040161097690613dbd565b50505050505050565b4690565b612b227f0000000000000000000000000000000000000000000000000000000000000000612f91565b6000612b37612b3084612ff4565b8590611c56565b9050612b4d612b46858461303c565b8290611c56565b506000612b6b61271061081b60115485611f8c90919063ffffffff16565b90508015612b9057600a54600b54612b90916001600160a01b03908116911683612180565b6000612bad61271061081b600f5486611f8c90919063ffffffff16565b90508015612bcc57600a54612bcc906001600160a01b03163383612180565b6000612bea612be583612bdf8787612008565b90612008565b61318f565b9050612bf581612d42565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234612c1e610f08565b600254604051612c2f929190614392565b60405180910390a150505050505050565b60008183612c615760405162461bcd60e51b81526004016109769190613c82565b506000838581612c6d57fe5b0495945050505050565b6017546040517fc10300f70000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c10300f790612728908490600401613bfb565b600254612ccd9082611c56565b6002556001600160a01b038216600090815260046020526040902054612cf39082611c56565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122ef908590613bfb565b60008111612d625760405162461bcd60e51b815260040161097690613fd6565b610fff7f0000000000000000000000000000000000000000000000000000000000000000826131b7565b6017546000906001600160a01b031663e9403256612da861321d565b6040518263ffffffff1660e01b8152600401612dc49190613b44565b60206040518083038186803b158015612ddc57600080fd5b505afa158015612df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1491906139d4565b905090565b6017546000908190819081906001600160a01b03166331d7a262612e3b61321d565b6040518263ffffffff1660e01b8152600401612e579190613b44565b60206040518083038186803b158015612e6f57600080fd5b505afa158015612e83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea791906139d4565b96600096508695509350505050565b600080612ec38585613319565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f0257600080fd5b505afa158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f3a919061396e565b5091509150866001600160a01b0316836001600160a01b031614612f5a57905b612f8588836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff1661334a565b98975050505050505050565b6017546001600160a01b031663d279c191612faa61321d565b6040518263ffffffff1660e01b8152600401612fc69190613b44565b600060405180830381600087803b158015612fe057600080fd5b505af1158015610b19573d6000803e3d6000fd5b601254600a546000916001600160a01b0391821691161415613017575080610d92565b601254600a546013546107c49285926001600160a01b03918216929082169116613392565b60008115613186576014546001600160a01b03161561308157601554600a5460145461307a9285926001600160a01b03918216929082169116613392565b90506107c4565b4780156130f15773b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b50505050505b6040516370a0823160e01b815261317e90859073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a082319061312e903090600401613b44565b60206040518083038186803b15801561314657600080fd5b505afa15801561315a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdf91906139d4565b9150506107c4565b50600092915050565b600a546009546016546000926107c49285926001600160a01b03928316929182169116613392565b6017546009546131d4916001600160a01b03918216911683613533565b6017546040517ff3daeacc0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063f3daeacc90612728908490600401613bfb565b600080601760009054906101000a90046001600160a01b03166001600160a01b0316639d54b5246040518163ffffffff1660e01b815260040160206040518083038186803b15801561326e57600080fd5b505afa158015613282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a6919061380a565b9050806001600160a01b03166351c3e3b46040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e157600080fd5b505afa1580156132f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f35919061380a565b600080826001600160a01b0316846001600160a01b03161061333c57828461333f565b83835b915091509250929050565b600080613359856103e5611f8c565b905060006133678285611f8c565b9050600061337b836113e9886103e8611f8c565b90506133878282611fc6565b979650505050505050565b60008061339f8585613319565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156133de57600080fd5b505afa1580156133f2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613416919061396e565b5091509150866001600160a01b0316836001600160a01b03161461343657905b6000806134648a856dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff1661334a565b9050886001600160a01b0316856001600160a01b03161461348157905b61348c89888c6135b6565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0388169063022c0d9f906134e490859085903090602481016143a0565b600060405180830381600087803b1580156134fe57600080fd5b505af1158015613512573d6000803e3d6000fd5b505050508181116135235781613525565b805b9a9950505050505050505050565b61221c8363a9059cbb60e01b8484604051602401613552929190613bbd565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613652565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906135e49085908590600401613bbd565b602060405180830381600087803b1580156135fe57600080fd5b505af1158015613612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136369190613952565b61221c5760405162461bcd60e51b81526004016109769061435d565b60606136a7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136e19092919063ffffffff16565b80519091501561221c57808060200190518101906136c59190613952565b61221c5760405162461bcd60e51b8152600401610976906142c9565b6060611ec48484600085856136f585613780565b6137115760405162461bcd60e51b815260040161097690614224565b60006060866001600160a01b0316858760405161372e9190613a82565b60006040518083038185875af1925050503d806000811461376b576040519150601f19603f3d011682016040523d82523d6000602084013e613770565b606091505b5091509150613387828286613786565b3b151590565b60608315613795575081610942565b8251156137a55782518084602001fd5b8160405162461bcd60e51b81526004016109769190613c82565b80516dffffffffffffffffffffffffffff81168114610d9257600080fd5b803560ff81168114610d9257600080fd5b6000602082840312156137ff578081fd5b813561094281614412565b60006020828403121561381b578081fd5b815161094281614412565b60008060408385031215613838578081fd5b823561384381614412565b9150602083013561385381614412565b809150509250929050565b600080600060608486031215613872578081fd5b833561387d81614412565b9250602084013561388d81614412565b929592945050506040919091013590565b600080600080600080600060e0888a0312156138b8578283fd5b87356138c381614412565b965060208801356138d381614412565b955060408801359450606088013593506138ef608089016137dd565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561391d578182fd5b823561392881614412565b946020939093013593505050565b600060208284031215613947578081fd5b813561094281614427565b600060208284031215613963578081fd5b815161094281614427565b600080600060608486031215613982578283fd5b61398b846137bf565b9250613999602085016137bf565b9150604084015163ffffffff811681146139b1578182fd5b809150509250925092565b6000602082840312156139cd578081fd5b5035919050565b6000602082840312156139e5578081fd5b5051919050565b600080604083850312156139fe578182fd5b82359150602083013561385381614427565b600080600080600060a08688031215613a27578081fd5b8535945060208601359350613a3e604087016137dd565b94979396509394606081013594506080013592915050565b60008151808452613a6e8160208601602086016143e6565b601f01601f19169290920160200192915050565b60008251613a948184602087016143e6565b9190910192915050565b6000808354600180821660008114613abd5760018114613ad457613b03565b60ff198316865260028304607f1686019350613b03565b600283048786526020808720875b83811015613afb5781548a820152908501908201613ae2565b505050860193505b509195945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526109426020830184613a56565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526034908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f20616c6c6f776564206465706f7369746f7273000000000000000000000000606082015260800190565b60208082526024908201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160408201527f7475726500000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604082015260600190565b60208082526029908201527f4d617374657243686566537472617465677956313a3a7265736375654465706c60408201527f6f79656446756e64730000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4d617374657243686566537472617465677956313a3a5452414e534645525f4660408201527f524f4d5f4641494c454400000000000000000000000000000000000000000000606082015260800190565b6020808252600f908201527f7065726d69743a3a657870697265640000000000000000000000000000000000604082015260600190565b6020808252601e908201527f4d617374657243686566537472617465677956313a3a77697468647261770000604082015260600190565b6020808252602a908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4d617374657243686566537472617465677956313a3a5f7374616b654465706f60408201527f736974546f6b656e730000000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604082015260600190565b60208082526034908201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260408201527f20746f20746865207a65726f2061646472657373000000000000000000000000606082015260800190565b60208082526025908201527f4d617374657243686566537472617465677956313a3a7472616e73666572206660408201527f61696c6564000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f736574416c6c6f77616e6365733a3a6465707265636174656400000000000000604082015260600190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252601e908201527f4d617374657243686566537472617465677956313a3a7265696e766573740000604082015260600190565b6020808252601e908201527f4d617374657243686566537472617465677956313a3a5f6465706f7369740000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604082015260600190565b6020808252818101527f4465784c6962726172793a3a5452414e534645525f46524f4d5f4641494c4544604082015260600190565b918252602082015260400190565b60008582528460208301526001600160a01b0384166040830152608060608301526143ce6080830184613a56565b9695505050505050565b60ff91909116815260200190565b60005b838110156144015781810151838201526020016143e9565b838111156117235750506000910152565b6001600160a01b0381168114610fff57600080fd5b8015158114610fff57600080fdfe5f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c797472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a26469706673582212206babdcc323579cc0065367dcf60d43ce27bbba5fc7feb5677947131351ccce3464736f6c6343000703003353776170207061697220277377617050616972506f6f6c5265776172642720648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000062edc0692bd897d2295872a9ffcac5425011c6610000000000000000000000000c91a070f862666bbcce281346be45766d874d98000000000000000000000000b8ca0076e9a416bd8d5d40dfdee099bf46dd9c30000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e44000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000384000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000125969656c642059616b3a20474d5820474d580000000000000000000000000000