[ { "inputs": [ { "components": [ { "internalType": "address", "name": "gasToken", "type": "address" }, { "internalType": "address[]", "name": "rewards", "type": "address[]" }, { "internalType": "address", "name": "simpleRouter", "type": "address" } ], "internalType": "struct BaseStrategy.BaseStrategySettings", "name": "_baseStrategySettings", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "dev", "type": "address" }, { "internalType": "address", "name": "feeCollector", "type": "address" }, { "internalType": "address", "name": "depositToken", "type": "address" }, { "internalType": "address", "name": "rewardToken", "type": "address" }, { "internalType": "uint256", "name": "minTokensToReinvest", "type": "uint256" }, { "internalType": "uint256", "name": "devFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "reinvestRewardBips", "type": "uint256" } ], "internalType": "struct YakStrategyV3.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "AddReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "lamaPayInstance", "type": "address" }, { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "uint216", "name": "amountPerSec", "type": "uint216" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" } ], "name": "AddStream", "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": false, "internalType": "address", "name": "lamaPayInstance", "type": "address" }, { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "uint216", "name": "amountPerSec", "type": "uint216" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" } ], "name": "BorkedStream", "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": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "lamaPayInstance", "type": "address" }, { "indexed": false, "internalType": "address", "name": "payer", "type": "address" }, { "indexed": false, "internalType": "uint216", "name": "amountPerSec", "type": "uint216" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" } ], "name": "RemoveStream", "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": "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": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateFeeCollector", "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": false, "internalType": "address", "name": "oldRouter", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "UpdateRouter", "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": "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": "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": "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": "_rewardToken", "type": "address" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_lamaPayInstance", "type": "address" }, { "internalType": "address", "name": "_payer", "type": "address" }, { "internalType": "uint216", "name": "_amountPerSec", "type": "uint216" } ], "name": "addStream", "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": "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": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateDepositFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "calculateWithdrawFee", "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": "disableDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "enableDeposits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeCollector", "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": "getSupportedRewardsLength", "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": "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": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_lamaPayInstance", "type": "address" }, { "internalType": "address", "name": "_payer", "type": "address" }, { "internalType": "uint216", "name": "_amountPerSec", "type": "uint216" } ], "name": "removeStream", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minReturnAmountAccepted", "type": "uint256" } ], "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": "simpleRouter", "outputs": [ { "internalType": "contract ISimpleRouter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "staked", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "streams", "outputs": [ { "internalType": "address", "name": "lamaPayInstance", "type": "address" }, { "internalType": "address", "name": "payer", "type": "address" }, { "internalType": "uint216", "name": "amountPerSec", "type": "uint216" }, { "internalType": "address", "name": "token", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedRewards", "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": "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": "address", "name": "newValue", "type": "address" } ], "name": "updateFeeCollector", "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": "address", "name": "_router", "type": "address" } ], "name": "updateRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101606040526009610120819052685969656c642059616b60b81b6101409081526200002f91600091906200081d565b506040805180820190915260038082526216549560ea1b60209092019182526200005c916001916200081d565b503480156200006a57600080fd5b5060405162005d6338038062005d638339810160408190526200008d9162000b35565b600680546001600160a01b0319163390811790915560405183918391829190819060009060008051602062005d43833981519152908290a35080518051620000de916000916020909101906200081d565b506080808201516001600160a01b0390811690915260a0808301519091169052600780546001600160a01b0319163317905560c08101516200012090620002fe565b60e081015162000130906200039f565b61010081015162000141906200045b565b6060810151620001519062000517565b60408101516200016190620005cb565b6200016b6200067f565b60208101516200017b9062000720565b5081516001600160a01b031660c0526020808301518051620001a292600d920190620008ac565b50604082810151600e80546001600160a01b0319166001600160a01b039092169190911790558051600080825260208201527fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234910160405180910390a150506080516001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000242573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000268919062000c68565b6001600160a01b031660e0816001600160a01b0316815250506080516001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e8919062000c68565b6001600160a01b0316610100525062000cf09050565b6007546001600160a01b031633146200035e5760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c7944657600000000000000000000000060448201526064015b60405180910390fd5b60095460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600955565b6007546001600160a01b03163314620003fb5760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604482015260640162000355565b612710600b54826200040e919062000c8d565b11156200041a57600080fd5b600c5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600c55565b6007546001600160a01b03163314620004b75760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604482015260640162000355565b612710600c5482620004ca919062000c8d565b1115620004d657600080fd5b600b5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600b55565b6006546001600160a01b03163314620005625760405162461bcd60e51b8152602060048201819052602482015260008051602062005d23833981519152604482015260640162000355565b600854604080516001600160a01b03928316815291831660208301527fcc882185e6edeeb762130016ea1faf3d7aa9c01b199bfd646f965b58ab741063910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314620006165760405162461bcd60e51b8152602060048201819052602482015260008051602062005d23833981519152604482015260640162000355565b600754604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b03163314620006ca5760405162461bcd60e51b8152602060048201819052602482015260008051602062005d23833981519152604482015260640162000355565b600a5460ff1615620006db57600080fd5b600a805460ff191660019081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e859060200160405180910390a1565b6006546001600160a01b031633146200076b5760405162461bcd60e51b8152602060048201819052602482015260008051602062005d23833981519152604482015260640162000355565b6001600160a01b038116620007d25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000355565b6006546040516001600160a01b0380841692169060008051602062005d4383398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200082b9062000cb4565b90600052602060002090601f0160209004810192826200084f57600085556200089a565b82601f106200086a57805160ff19168380011785556200089a565b828001600101855582156200089a579182015b828111156200089a5782518255916020019190600101906200087d565b50620008a892915062000904565b5090565b8280548282559060005260206000209081019282156200089a579160200282015b828111156200089a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620008cd565b5b80821115620008a8576000815560010162000905565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156200095757620009576200091b565b60405290565b604051606081016001600160401b03811182821017156200095757620009576200091b565b604051601f8201601f191681016001600160401b0381118282101715620009ad57620009ad6200091b565b604052919050565b80516001600160a01b0381168114620009cd57600080fd5b919050565b600082601f830112620009e457600080fd5b81516001600160401b0381111562000a005762000a006200091b565b602062000a16601f8301601f1916820162000982565b828152858284870101111562000a2b57600080fd5b60005b8381101562000a4b57858101830151828201840152820162000a2e565b8381111562000a5d5760008385840101525b5095945050505050565b6000610120828403121562000a7b57600080fd5b62000a8562000931565b82519091506001600160401b0381111562000a9f57600080fd5b62000aad84828501620009d2565b82525062000abe60208301620009b5565b602082015262000ad160408301620009b5565b604082015262000ae460608301620009b5565b606082015262000af760808301620009b5565b608082015262000b0a60a08301620009b5565b60a082015260c082015160c082015260e082015160e082015261010080830151818301525092915050565b6000806040838503121562000b4957600080fd5b82516001600160401b038082111562000b6157600080fd5b908401906060828703121562000b7657600080fd5b62000b806200095d565b62000b8b83620009b5565b81526020808401518381111562000ba157600080fd5b8401601f8101891362000bb357600080fd5b80518481111562000bc85762000bc86200091b565b8060051b62000bd984820162000982565b918252828101840191848101908c84111562000bf457600080fd5b938501935b8385101562000c1d5762000c0d85620009b5565b8252938501939085019062000bf9565b868601525062000c349250505060408501620009b5565b604083015286015190945091508082111562000c4f57600080fd5b5062000c5e8582860162000a67565b9150509250929050565b60006020828403121562000c7b57600080fd5b62000c8682620009b5565b9392505050565b6000821982111562000caf57634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168062000cc957607f821691505b60208210810362000cea57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e05161010051614f1c62000e0760003960008181613c0001528181613ca001528181613eec015261449e0152600081816139d501528181613a7501528181613e6c015261446a015260008181612083015281816137280152818161375701526137cc01526000818161084901528181611fe6015281816120eb0152818161222a015281816133020152818161336a01528181613674015281816137f6015281816138b201528181613915015281816139ff01528181613a4d01528181613b1a01528181613c2a01528181613c780152613d4501526000818161074901528181610aab01528181610b7e01528181610d6601528181610df301528181612c8d0152613e420152614f1c6000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80639291d563116101e9578063c4b24a461161010f578063dd8ce4d6116100ad578063f2fde38b1161007c578063f2fde38b1461081e578063f6314d0714610831578063f7c618c114610844578063fdb5a03e1461086b57600080fd5b8063dd8ce4d6146107dd578063e75ab045146107f0578063eab89a5a14610803578063ed24911d1461081657600080fd5b8063d2c35ce8116100e9578063d2c35ce81461076b578063d505accf1461077e578063da09c72c14610791578063dd62ed3e146107a457600080fd5b8063c4b24a4614610729578063c851cc3214610731578063c89039c51461074457600080fd5b8063a9059cbb11610187578063b9e57b8011610156578063b9e57b80146106f2578063bd079f55146106fa578063bec67bd614610703578063c415b95c1461071657600080fd5b8063a9059cbb146106b7578063ac67e1af146106ca578063b52a321f146106d2578063b6b55f25146106df57600080fd5b80639c9b2e21116101c35780639c9b2e21146106575780639e4e73181461066a578063a4d5e67c14610691578063a8ae2b7c146106a457600080fd5b80639291d5631461062957806395d89b411461063c57806399729ec11461064457600080fd5b80635e4c57a4116102ce5780637897e7f61161026c578063818372301161023b57806381837230146105d55780638980f11f146105e85780638aff733d146105fb5780638da5cb5b1461060457600080fd5b80637897e7f6146105875780637ae267731461059a5780637d882097146105ad5780637ecebe00146105b557600080fd5b8063666d25b9116102a8578063666d25b9146105305780636a8b25331461054357806370a0823114610556578063715018a61461057f57600080fd5b80635e4c57a4146104d05780635ea682ea146104d857806364d60d91146104e157600080fd5b8063247d284b1161033b5780632f4f21e2116103155780632f4f21e21461046957806330adf81f1461047c578063313ce567146104a35780634a970be7146104bd57600080fd5b8063247d284b146103f6578063258250da1461044c5780632e1a7d4d1461045457600080fd5b8063110560351161037757806311056035146103f657806318160ddd1461040957806320606b701461041257806323b872dd1461043957600080fd5b806306fdde031461039e578063095ea7b3146103bc5780630b76619b146103df575b600080fd5b6103a6610873565b6040516103b39190614706565b60405180910390f35b6103cf6103ca36600461474e565b610901565b60405190151581526020016103b3565b6103e8600f5481565b6040519081526020016103b3565b6103e861040436600461477a565b610917565b6103e860025481565b6103e87f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6103cf610447366004614793565b610928565b600d546103e8565b61046761046236600461477a565b6109f1565b005b61046761047736600461474e565b610b17565b6103e87f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6104ab601281565b60405160ff90911681526020016103b3565b6104676104cb3660046147ea565b610b25565b610467610bf3565b6103e8600c5481565b6104f46104ef36600461477a565b610ca3565b604080516001600160a01b03958616815293851660208501526001600160d81b03909216918301919091529190911660608201526080016103b3565b61046761053e36600461477a565b610cf4565b610467610551366004614831565b610f6e565b6103e8610564366004614888565b6001600160a01b031660009081526004602052604090205490565b610467611275565b61046761059536600461477a565b611319565b6104676105a83660046148a5565b6113eb565b600f546103e8565b6103e86105c3366004614888565b60056020526000908152604090205481565b6104676105e336600461477a565b6114b8565b6104676105f636600461474e565b61154a565b6103e8600b5481565b6006546001600160a01b03165b6040516001600160a01b0390911681526020016103b3565b610467610637366004614888565b61160c565b6103a66116cf565b61046761065236600461477a565b6116dc565b610467610665366004614888565b61178a565b6103e87fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b61046761069f366004614888565b611910565b6104676106b236600461477a565b611b13565b6103cf6106c536600461474e565b611bc1565b610467611bce565b600a546103cf9060ff1681565b6104676106ed36600461477a565b611c69565b6103e8611c76565b6103e860095481565b610467610711366004614831565b611cb5565b600854610611906001600160a01b031681565b6103e8611fb8565b61046761073f366004614888565b61230d565b6106117f000000000000000000000000000000000000000000000000000000000000000081565b610467610779366004614888565b6123c7565b61046761078c3660046148de565b61248a565b600754610611906001600160a01b031681565b6103e86107b23660046148a5565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6103e86107eb36600461477a565b61259d565b6106116107fe36600461477a565b6125e4565b6103e861081136600461477a565b61260e565b6103e8612645565b61046761082c366004614888565b6126e5565b600e54610611906001600160a01b031681565b6106117f000000000000000000000000000000000000000000000000000000000000000081565b610467612817565b600080546108809061494c565b80601f01602080910402602001604051908101604052809291908181526020018280546108ac9061494c565b80156108f95780601f106108ce576101008083540402835291602001916108f9565b820191906000526020600020905b8154815290600101906020018083116108dc57829003601f168201915b505050505081565b600061090e338484612872565b50600192915050565b600061092282612980565b92915050565b6001600160a01b03831660008181526003602090815260408083203380855292528220549192909190821480159061096257506000198114155b156109d85760006109738583614996565b6001600160a01b038881166000818152600360209081526040808320948916808452948252918290208590559051848152939450919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505b6109e386868661299a565b6001925050505b9392505050565b60006109fc8261260e565b905060008111610a795760405162461bcd60e51b815260206004820152602560248201527f4261736553747261746567793a3a576974686472617720616d6f756e7420746f60448201527f6f206c6f7700000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610a8482612abe565b90506000610a9183612980565b9050610ad233610aa18385614996565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190612add565b610adc3385612b5d565b60405183815233907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649060200160405180910390a250505050565b610b218282612bf1565b5050565b6040517fd505accf000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690526064810185905260ff8416608482015260a4810183905260c481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d505accf9060e401600060405180830381600087803b158015610bca57600080fd5b505af1158015610bde573d6000803e3d6000fd5b50505050610bec3386612bf1565b5050505050565b6006546001600160a01b03163314610c4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b600a5460ff1615610c5d57600080fd5b600a805460ff191660019081179091556040519081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906020015b60405180910390a1565b60108181548110610cb357600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039283169450908216926001600160d81b0316911684565b6006546001600160a01b03163314610d4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd991906149ad565b90506040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6691906149ad565b905082610e738383614996565b1015610f0d5760405162461bcd60e51b815260206004820152604260248201527f4261736553747261746567793a3a456d657267656e637920776974686472617760448201527f206d696e696d756d2072657475726e20616d6f756e74206e6f7420726561636860648201527f6564000000000000000000000000000000000000000000000000000000000000608482015260a401610a70565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234610f37600f5490565b6002546040805192835260208301919091520160405180910390a1600a5460ff161515600103610f6957610f69611bce565b505050565b6007546001600160a01b03163314610fbf5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b600080610fcd858585612de9565b915091508061102f5760405162461bcd60e51b815260206004820152602860248201527f4d656d655275736853747261746567793a3a53747265616d206e6f7420636f6e604482015267666967757265642160c01b6064820152608401610a70565b6010805461103f90600190614996565b8154811061104f5761104f6149c6565b906000526020600020906004020160108381548110611070576110706149c6565b60009182526020909120825460049092020180546001600160a01b03199081166001600160a01b039384161782556001808501549083018054831691851691909117905560028085015490830180547fffffffffff000000000000000000000000000000000000000000000000000000166001600160d81b0390921691909117905560039384015493909101805490911692909116919091179055601080548061111c5761111c6149dc565b6000828152602090819020600460001990930183810290910180546001600160a01b03199081168255600182018054821690556002820180547fffffffffff000000000000000000000000000000000000000000000000000000169055600390910180549091169055909255604080517ffc0c546a00000000000000000000000000000000000000000000000000000000815290517ff3152af0022d4b208d9ecbd314ca66f3764d16e822c9880c7d370a6330021ac7938993899389936001600160a01b0387169363fc0c546a93838101939192918290030181865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e91906149f2565b604080516001600160a01b03958616815293851660208501526001600160d81b03909216918301919091529190911660608201526080015b60405180910390a15050505050565b6006546001600160a01b031633146112cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b6006546001600160a01b031633146113735760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b6000811161138057600080fd5b604051339082156108fc029083906000818181858888f193505050501580156113ad573d6000803e3d6000fd5b506040805160008152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a150565b6007546001600160a01b0316331461143c5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b60405163095ea7b360e01b81526001600160a01b0382811660048301526000602483015283169063095ea7b3906044016020604051808303816000875af115801561148b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114af9190614a0f565b610b2157600080fd5b6007546001600160a01b031633146115095760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b60095460408051918252602082018390527f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100910160405180910390a1600955565b6006546001600160a01b031633146115a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b600081116115b157600080fd5b6115c56001600160a01b0383163383612add565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2891015b60405180910390a15050565b6006546001600160a01b031633146116665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b600754604080516001600160a01b03928316815291831660208301527fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00910160405180910390a1600780546001600160a01b0319166001600160a01b0392909216919091179055565b600180546108809061494c565b6007546001600160a01b0316331461172d5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b612710600b548261173e9190614a31565b111561174957600080fd5b600c5460408051918252602082018390527f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131910160405180910390a1600c55565b6007546001600160a01b031633146117db5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b6000805b600d5481101561183257600d81815481106117fc576117fc6149c6565b6000918252602090912001546001600160a01b039081169084160361182057600191505b8061182a81614a49565b9150506117df565b5080156118925760405162461bcd60e51b815260206004820152602860248201527f4261736553747261746567793a3a52657761726420616c726561647920636f6e604482015267666967757265642160c01b6064820152608401610a70565b600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0384169081179091556040519081527f1714865bf5baa84e3439536a013c87cfe030b4cd69f344a5f2a4877de3d517ce90602001611600565b6007546001600160a01b031633146119615760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b6000805b600d54811015611a3157600d8181548110611982576119826149c6565b6000918252602090912001546001600160a01b0390811690841603611a1f57600d8054600193506119b4908490614996565b815481106119c4576119c46149c6565b600091825260209091200154600d80546001600160a01b0390921691839081106119f0576119f06149c6565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611a2981614a49565b915050611965565b5080611aa45760405162461bcd60e51b8152602060048201526024808201527f4261736553747261746567793a3a526577617264206e6f7420636f6e6669677560448201527f72656421000000000000000000000000000000000000000000000000000000006064820152608401610a70565b600d805480611ab557611ab56149dc565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03841681527f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc9101611600565b6007546001600160a01b03163314611b645760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b612710600c5482611b759190614a31565b1115611b8057600080fd5b600b5460408051918252602082018390527fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2910160405180910390a1600b55565b600061090e33848461299a565b6007546001600160a01b03163314611c1f5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b600a5460ff16611c2e57600080fd5b600a805460ff19169055604051600081527f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590602001610c99565b611c733382612bf1565b50565b600080611c81611fb8565b90506009548110611cad57612710600b5482611c9d9190614a62565b611ca79190614a81565b91505090565b600091505090565b6007546001600160a01b03163314611d065760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b6001600160a01b03831615801590611d2657506001600160a01b03821615155b8015611d3b57506000816001600160d81b0316115b15610f69576000611d4d848484612de9565b9150508015611dc45760405162461bcd60e51b815260206004820152602c60248201527f4d656d655275736853747261746567793a3a53747265616d20616c726561647960448201527f20636f6e666967757265642100000000000000000000000000000000000000006064820152608401610a70565b6000846001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2891906149f2565b60408051608080820183526001600160a01b0389811680845289821660208086018281526001600160d81b038c8116888a018181528b88166060808c01828152601080546001810182556000919091529c517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6726004909e029d8e0180546001600160a01b0319908116928e1692909217905596517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6738e0180548916918d1691909117905592517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6748d0180547fffffffffff00000000000000000000000000000000000000000000000000000016919096161790945590517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae675909a018054909416999097169890981790915587519384529083019190915294810193909352928201929092529192507ff7568797d3c3a8683cc15f72610e4377cd2a50c535e7e237ee1da95f589d7cb69101611266565b600080611fc3612ecd565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205191906149ad565b905060005b8251811015612306576000838281518110612073576120736149c6565b60200260200101516000015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316036120e957478483815181106120cd576120cd6149c6565b60200260200101516020018181516120e59190614a31565b9052505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361215257838281518110612134576121346149c6565b6020026020010151602001518361214b9190614a31565b92506122f3565b6001600160a01b038116156122f3576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156121a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121cc91906149ad565b905060008584815181106121e2576121e26149c6565b602002602001015160200151826121f99190614a31565b905080156122f057600e546040516377ccc49d60e11b8152600481018390526001600160a01b0385811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa15801561227b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122a39190810190614bab565b90506001816000015151116122b95760006122e2565b805180516122c990600190614996565b815181106122d9576122d96149c6565b60200260200101515b6122ec9087614a31565b9550505b50505b50806122fe81614a49565b915050612056565b5092915050565b6007546001600160a01b0316331461235e5760405162461bcd60e51b81526020600482015260146024820152732cb0b5a9ba3930ba32b3bc9d1d37b7363ca232bb60611b6044820152606401610a70565b600e54604080516001600160a01b03928316815291831660208301527f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd910160405180910390a1600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031633146124215760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b600854604080516001600160a01b03928316815291831660208301527fcc882185e6edeeb762130016ea1faf3d7aa9c01b199bfd646f965b58ab741063910160405180910390a1600880546001600160a01b0319166001600160a01b0392909216919091179055565b428410156124da5760405162461bcd60e51b815260206004820152600f60248201527f7065726d69743a3a6578706972656400000000000000000000000000000000006044820152606401610a70565b6001600160a01b038716600090815260056020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918a918a918a91908661252783614a49565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506125888882868686613156565b612593888888612872565b5050505050505050565b6000806125a9600f5490565b6002549091508015806125ba575081155b156125c757509192915050565b816125d28286614a62565b6125dc9190614a81565b949350505050565b600d81815481106125f457600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061261a600f5490565b60025490915080158061262b575081155b1561263a575060009392505050565b806125d28386614a62565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b600060405161267a9190614cc0565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc646604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6006546001600160a01b0316331461273f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b6001600160a01b0381166127bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b3233146128665760405162461bcd60e51b815260206004820152601460248201527f59616b53747261746567793a3a6f6e6c79454f410000000000000000000000006044820152606401610a70565b61287060006132b6565b565b6001600160a01b0383166128c85760405162461bcd60e51b815260206004820152601c60248201527f5f617070726f76653a3a6f776e6572207a65726f2061646472657373000000006044820152606401610a70565b6001600160a01b03821661291e5760405162461bcd60e51b815260206004820152601e60248201527f5f617070726f76653a3a7370656e646572207a65726f206164647265737300006044820152606401610a70565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000806127106129908285614a62565b6109ea9190614a81565b6001600160a01b038216612a165760405162461bcd60e51b815260206004820152603460248201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260448201527f20746f20746865207a65726f20616464726573730000000000000000000000006064820152608401610a70565b6001600160a01b038316600090815260046020526040902054612a3a908290614996565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612a6a908290614a31565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129739085815260200190565b600081600f6000828254612ad29190614996565b909155509192915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610f69908490613417565b6001600160a01b038216600090815260046020526040902054612b81908290614996565b6001600160a01b038316600090815260046020526040902055600254612ba8908290614996565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b600a5460ff161515600114612c485760405162461bcd60e51b815260206004820152601f60248201527f4261736553747261746567793a3a4465706f736974732064697361626c6564006044820152606401610a70565b612c5260016132b6565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015612cde573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d029190614a0f565b612d745760405162461bcd60e51b815260206004820152602b60248201527f4261736553747261746567793a3a4465706f73697420746f6b656e207472616e60448201527f73666572206661696c65640000000000000000000000000000000000000000006064820152608401610a70565b6000612d7f82612980565b9050612d9783612d926107eb8486614996565b6134fc565b612da182826135d2565b826001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c83604051612ddc91815260200190565b60405180910390a2505050565b60008060005b601054811015612ec45760108181548110612e0c57612e0c6149c6565b60009182526020909120600490910201546001600160a01b038781169116148015612e68575060108181548110612e4557612e456149c6565b60009182526020909120600160049092020101546001600160a01b038681169116145b8015612ea5575060108181548110612e8257612e826149c6565b60009182526020909120600260049092020101546001600160d81b038581169116145b15612eb257600191508092505b80612ebc81614a49565b915050612def565b50935093915050565b60105460609060009067ffffffffffffffff811115612eee57612eee614aa3565b604051908082528060200260200182016040528015612f3357816020015b6040805180820190915260008082526020820152815260200190600190039081612f0c5790505b50905060005b6010548110156131505760108181548110612f5657612f566149c6565b6000918252602090912060049091020154601080546001600160a01b0390921691633f053acd919084908110612f8e57612f8e6149c6565b906000526020600020906004020160010160009054906101000a90046001600160a01b03163060108581548110612fc757612fc76149c6565b600091825260209091206004918202016002015460405160e086901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516928101929092529190921660248301526001600160d81b03166044820152606401606060405180830381865afa92505050801561306c575060408051601f3d908101601f1916820190925261306991810190614d5b565b60015b6130d95760405180604001604052806010838154811061308e5761308e6149c6565b60009182526020808320600360049093020191909101546001600160a01b03168352919091015282518390839081106130c9576130c96149c6565b602002602001018190525061313e565b6040518060400160405280601086815481106130f7576130f76149c6565b6000918252602091829020600360049092020101546001600160a01b0316825201849052855186908690811061312f5761312f6149c6565b60200260200101819052505050505b8061314881614a49565b915050612f39565b50919050565b6000613160612645565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101919091526042810186905260620160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015613206573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061323c5750866001600160a01b0316816001600160a01b0316145b6132ad5760405162461bcd60e51b8152602060048201526024808201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160448201527f74757265000000000000000000000000000000000000000000000000000000006064820152608401610a70565b50505050505050565b60006132c0613652565b90506009548111156133d5576000612710600c54836132df9190614a62565b6132e99190614a81565b9050801561332b5760085461332b906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683612add565b60008361335257612710600b54846133439190614a62565b61334d9190614a81565b613355565b60005b90508015613391576133916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163383612add565b60006133b0826133a18587614996565b6133ab9190614996565b6139c4565b905080156133d15760006133c382612980565b90506133cf82826135d2565b505b5050505b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346133ff600f5490565b60025460408051928352602083019190915201611600565b600061346c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f649092919063ffffffff16565b805190915015610f69578080602001905181019061348a9190614a0f565b610f695760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610a70565b6000811161354c5760405162461bcd60e51b815260206004820152601260248201527f5f6d696e743a3a7a65726f2073686172657300000000000000000000000000006044820152606401610a70565b8060025461355a9190614a31565b6002556001600160a01b038216600090815260046020526040902054613581908290614a31565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612be59085815260200190565b600082116136485760405162461bcd60e51b815260206004820152602260248201527f4261736553747261746567793a3a5374616b6520616d6f756e7420746f6f206c60448201527f6f770000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610b218282613f73565b600061365c613f8e565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156136c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e791906149ad565b600d5490915060005b818110156139bc576000600d828154811061370d5761370d6149c6565b6000918252602090912001546001600160a01b0390811691507f0000000000000000000000000000000000000000000000000000000000000000168103613838574780156137ca577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156137b057600080fd5b505af11580156137c4573d6000803e3d6000fd5b50505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036138365761382d8186614a31565b945050506139aa565b505b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561387f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a391906149ad565b90506000811180156138e757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156139a757600e546040516377ccc49d60e11b8152600481018390526001600160a01b0384811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015613966573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261398e9190810190614bab565b9050613999816141f5565b6139a39087614a31565b9550505b50505b806139b481614a49565b9150506136f0565b509092915050565b60006139d1600283614a81565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613bfe57600e546040516377ccc49d60e11b8152600481018490526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015613ac6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613aee9190810190614bab565b600e5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018690529192507f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015613b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b879190614a0f565b50600e54604051632d92330b60e11b81526001600160a01b0390911690635b24661690613bb8908490600401614dcd565b6020604051808303816000875af1158015613bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfb91906149ad565b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614613e2957600e546040516377ccc49d60e11b8152600481018490526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f000000000000000000000000000000000000000000000000000000000000000081166044830152600092169063ef99893a90606401600060405180830381865afa158015613cf1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613d199190810190614bab565b600e5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018690529192507f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015613d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db29190614a0f565b50600e54604051632d92330b60e11b81526001600160a01b0390911690635b24661690613de3908490600401614dcd565b6020604051808303816000875af1158015613e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2691906149ad565b50505b6040516370a0823160e01b8152306004820152610922907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015613eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ed791906149ad565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015613f3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f5f91906149ad565b614389565b60606125dc8484600085614553565b81600f6000828254613f859190614a31565b90915550505050565b60005b601054811015611c735760108181548110613fae57613fae6149c6565b6000918252602090912060049091020154601080546001600160a01b03909216916317a566e4919084908110613fe657613fe66149c6565b906000526020600020906004020160010160009054906101000a90046001600160a01b0316306010858154811061401f5761401f6149c6565b600091825260209091206004918202016002015460405160e086901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03948516928101929092529190921660248301526001600160d81b03166044820152606401600060405180830381600087803b1580156140a557600080fd5b505af19250505080156140b6575060015b6141e3577fc0843bdf0743c63293a0c1ec674ec40249b8468a6c1cd2416463fe686ae0c630601082815481106140ee576140ee6149c6565b6000918252602090912060049091020154601080546001600160a01b03909216918490811061411f5761411f6149c6565b906000526020600020906004020160010160009054906101000a90046001600160a01b031660108481548110614157576141576149c6565b906000526020600020906004020160020160009054906101000a90046001600160d81b03166010858154811061418f5761418f6149c6565b600091825260209182902060049091020160030154604080516001600160a01b039687168152948616928501929092526001600160d81b039092169083015291909116606082015260800160405180910390a15b806141ed81614a49565b915050613f91565b805151600090158015906142325750815180516000919061421890600190614996565b81518110614228576142286149c6565b6020026020010151115b1561438157816040015160008151811061424e5761424e6149c6565b60200260200101516001600160a01b031663095ea7b3600e60009054906101000a90046001600160a01b03168460000151600081518110614291576142916149c6565b60200260200101516040518363ffffffff1660e01b81526004016142ca9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af11580156142e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430d9190614a0f565b50600e54604051632d92330b60e11b81526001600160a01b0390911690635b2466169061433e908590600401614dcd565b6020604051808303816000875af115801561435d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092291906149ad565b506000919050565b6000806000856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156143cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f09190614e85565b5091509150600061442286846dffffffffffffffffffffffffffff16846dffffffffffffffffffffffffffff16614690565b90508481111561445d5784905061445a85836dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16614690565b95505b6144916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168888612add565b6144c56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168883612add565b6040517f6a6278420000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03881690636a627842906024016020604051808303816000875af1158015614524573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454891906149ad565b979650505050505050565b6060824710156145cb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610a70565b6001600160a01b0385163b6146225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a70565b600080866001600160a01b0316858760405161463e9190614eca565b60006040518083038185875af1925050503d806000811461467b576040519150601f19603f3d011682016040523d82523d6000602084013e614680565b606091505b509150915061454882828661469d565b6000826125d28386614a62565b606083156146ac5750816109ea565b8251156146bc5782518084602001fd5b8160405162461bcd60e51b8152600401610a709190614706565b60005b838110156146f15781810151838201526020016146d9565b83811115614700576000848401525b50505050565b60208152600082518060208401526147258160408501602087016146d6565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611c7357600080fd5b6000806040838503121561476157600080fd5b823561476c81614739565b946020939093013593505050565b60006020828403121561478c57600080fd5b5035919050565b6000806000606084860312156147a857600080fd5b83356147b381614739565b925060208401356147c381614739565b929592945050506040919091013590565b803560ff811681146147e557600080fd5b919050565b600080600080600060a0868803121561480257600080fd5b8535945060208601359350614819604087016147d4565b94979396509394606081013594506080013592915050565b60008060006060848603121561484657600080fd5b833561485181614739565b9250602084013561486181614739565b915060408401356001600160d81b038116811461487d57600080fd5b809150509250925092565b60006020828403121561489a57600080fd5b81356109ea81614739565b600080604083850312156148b857600080fd5b82356148c381614739565b915060208301356148d381614739565b809150509250929050565b600080600080600080600060e0888a0312156148f957600080fd5b873561490481614739565b9650602088013561491481614739565b95506040880135945060608801359350614930608089016147d4565b925060a0880135915060c0880135905092959891949750929550565b600181811c9082168061496057607f821691505b60208210810361315057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156149a8576149a8614980565b500390565b6000602082840312156149bf57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215614a0457600080fd5b81516109ea81614739565b600060208284031215614a2157600080fd5b815180151581146109ea57600080fd5b60008219821115614a4457614a44614980565b500190565b600060018201614a5b57614a5b614980565b5060010190565b6000816000190483118215151615614a7c57614a7c614980565b500290565b600082614a9e57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715614adc57614adc614aa3565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614b0b57614b0b614aa3565b604052919050565b600067ffffffffffffffff821115614b2d57614b2d614aa3565b5060051b60200190565b600082601f830112614b4857600080fd5b81516020614b5d614b5883614b13565b614ae2565b82815260059290921b84018101918181019086841115614b7c57600080fd5b8286015b84811015614ba0578051614b9381614739565b8352918301918301614b80565b509695505050505050565b60006020808385031215614bbe57600080fd5b825167ffffffffffffffff80821115614bd657600080fd5b9084019060808287031215614bea57600080fd5b614bf2614ab9565b825182811115614c0157600080fd5b8301601f81018813614c1257600080fd5b8051614c20614b5882614b13565b81815260059190911b8201860190868101908a831115614c3f57600080fd5b928701925b82841015614c5d57835182529287019290870190614c44565b84525050508284015182811115614c7357600080fd5b614c7f88828601614b37565b85830152506040830151935081841115614c9857600080fd5b614ca487858501614b37565b6040820152606083015160608201528094505050505092915050565b600080835481600182811c915080831680614cdc57607f831692505b60208084108203614cfb57634e487b7160e01b86526022600452602486fd5b818015614d0f5760018114614d2057614d4d565b60ff19861689528489019650614d4d565b60008a81526020902060005b86811015614d455781548b820152908501908301614d2c565b505084890196505b509498975050505050505050565b600080600060608486031215614d7057600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b83811015614dc25781516001600160a01b031687529582019590820190600101614d9d565b509495945050505050565b60208082528251608083830152805160a0840181905260009291820190839060c08601905b80831015614e125783518252928401926001929092019190840190614df2565b50838701519350601f19925082868203016040870152614e328185614d89565b93505050604085015181858403016060860152614e4f8382614d89565b92505050606084015160808401528091505092915050565b80516dffffffffffffffffffffffffffff811681146147e557600080fd5b600080600060608486031215614e9a57600080fd5b614ea384614e67565b9250614eb160208501614e67565b9150604084015163ffffffff8116811461487d57600080fd5b60008251614edc8184602087016146d6565b919091019291505056fea2646970667358221220b191bb61c0a9c6360d9c4f8079ea56fe4d3ad2d7b7a3d36322742c6bd2c1722f64736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c70000000000000000000000000000000000000000000000000000000000000060000000000000000000000000959a0af5a46f76aa37317bc417d48b445658b18800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e44000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e440000000000000000000000002d580f9cf2fb2d09bc411532988f2afda4e7beff0000000000000000000000003da3b242f1ac6d7ed04fedbaf4c402dda4e1dcdd000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c700000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000185969656c642059616b3a204a4c50205241494e2d415641580000000000000000