[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_depositToken", "type": "address" }, { "internalType": "address", "name": "_swapPairWavaxPtp", "type": "address" }, { "components": [ { "internalType": "address", "name": "reward", "type": "address" }, { "internalType": "address", "name": "swapPair", "type": "address" } ], "internalType": "struct VariableRewardsStrategy.RewardSwapPairs[]", "name": "_rewardSwapPairs", "type": "tuple[]" }, { "internalType": "address", "name": "_stakingContract", "type": "address" }, { "internalType": "uint256", "name": "_pid", "type": "uint256" }, { "internalType": "address", "name": "_voterProxy", "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 VariableRewardsStrategy.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "swapPair", "type": "address" } ], "name": "AddReward", "type": "event" }, { "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": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveReward", "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": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPair", "type": "address" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "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": [ { "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": "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": [ { "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 IEchidnaVoterProxy", "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": [ { "internalType": "address", "name": "_rewardToken", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minReturnAmountAccepted", "type": "uint256" }, { "internalType": "bool", "name": "", "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": "rewardCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardSwapPairs", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setAllowances", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakingContract", "outputs": [ { "internalType": "address", "name": "", "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": "swapPairWavaxPtp", "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" } ]
60e0604052600960a0819052685969656c642059616b60b81b60c09081526200002c916000919062000a91565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000a91565b503480156200006757600080fd5b5060405162005cf438038062005cf48339810160408190526200008a9162000cb1565b888887848460006200009b6200028a565b600680546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005cd4833981519152908290a3508451620000ed90600090602088019062000a91565b50600980546001600160a01b0386166001600160a01b031991821617909155600a8054821673b31f66aa3c1e785363f0875a1b74e27b85fd66c7179055600b8054909116732d580f9cf2fb2d09bc411532988f2afda4e7beff17905560005b8351811015620001a157620001988482815181106200016757fe5b6020026020010151600001518583815181106200018057fe5b6020026020010151602001516200028e60201b60201c565b6001016200014c565b508051620001af90620003c2565b6020810151620001bf906200044a565b6040810151620001cf9062000518565b6060810151620001df90620005d2565b620001eb60016200068c565b620001f68262000734565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346000806040516200022a92919062000e27565b60405180910390a15050601580546001600160a01b03199081166001600160a01b039a8b161790915560809790975250506016805486169487169490941790935550506017805490921694909216939093179092555062000f6992505050565b3390565b600a546001600160a01b03838116911614620002f957620002d18183600a60009054906101000a90046001600160a01b0316620007ee60201b6200206f1760201c565b620002f95760405162461bcd60e51b8152600401620002f09062000e35565b60405180910390fd5b6001600160a01b038083166000818152601260209081526040822080549486166001600160a01b03199586161790556013805460018181018355919093527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09090920180549094169092179092556014546200037f929091620022c062000a53821b17901c565b6014556040517f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f8090620003b6908490849062000e02565b60405180910390a15050565b620003cc6200028a565b6001600160a01b0316620003df62000a82565b6001600160a01b031614620004085760405162461bcd60e51b8152600401620002f09062000f10565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516200043d92919062000e27565b60405180910390a1600c55565b620004546200028a565b6001600160a01b03166200046762000a82565b6001600160a01b031614620004905760405162461bcd60e51b8152600401620002f09062000f10565b612710620004ca600f54620004b66011548562000a5360201b620022c01790919060201c565b62000a5360201b620022c01790919060201c565b1115620004d657600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a601054826040516200050b92919062000e27565b60405180910390a1601055565b620005226200028a565b6001600160a01b03166200053562000a82565b6001600160a01b0316146200055e5760405162461bcd60e51b8152600401620002f09062000f10565b61271062000584600f54620004b66010548562000a5360201b620022c01790919060201c565b11156200059057600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051620005c592919062000e27565b60405180910390a1601155565b620005dc6200028a565b6001600160a01b0316620005ef62000a82565b6001600160a01b031614620006185760405162461bcd60e51b8152600401620002f09062000f10565b6127106200063e601154620004b66010548562000a5360201b620022c01790919060201c565b11156200064a57600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516200067f92919062000e27565b60405180910390a1600f55565b620006966200028a565b6001600160a01b0316620006a962000a82565b6001600160a01b031614620006d25760405162461bcd60e51b8152600401620002f09062000f10565b600e5460ff1615158115151415620006e957600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906200072990839062000e1c565b60405180910390a150565b6200073e6200028a565b6001600160a01b03166200075162000a82565b6001600160a01b0316146200077a5760405162461bcd60e51b8152600401620002f09062000f10565b6001600160a01b038116620007a35760405162461bcd60e51b8152600401620002f09062000e93565b6006546040516001600160a01b0380841692169060008051602062005cd483398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200082a57600080fd5b505afa1580156200083f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000865919062000c94565b6001600160a01b0316836001600160a01b031614806200090a5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620008ba57600080fd5b505afa158015620008cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f5919062000c94565b6001600160a01b0316836001600160a01b0316145b801562000a2c5750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200094c57600080fd5b505afa15801562000961573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000987919062000c94565b6001600160a01b0316826001600160a01b0316148062000a2c5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620009dc57600080fd5b505afa158015620009f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a17919062000c94565b6001600160a01b0316826001600160a01b0316145b801562000a4b5750816001600160a01b0316836001600160a01b031614155b949350505050565b60008282018381101562000a7b5760405162461bcd60e51b8152600401620002f09062000ed9565b9392505050565b6006546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ad457805160ff191683800117855562000b04565b8280016001018555821562000b04579182015b8281111562000b0457825182559160200191906001019062000ae7565b5062000b1292915062000b16565b5090565b5b8082111562000b12576000815560010162000b17565b80516001600160a01b038116811462000b4557600080fd5b919050565b600082601f83011262000b5b578081fd5b81516001600160401b0381111562000b6f57fe5b602062000b80818284020162000f45565b828152925080830184820160408085028701840188101562000ba157600080fd5b60005b8581101562000bcc5762000bb9898462000bd8565b8452928401929181019160010162000ba4565b50505050505092915050565b60006040828403121562000bea578081fd5b604080519081016001600160401b038111828210171562000c0757fe5b60405290508062000c188362000b2d565b815262000c286020840162000b2d565b60208201525092915050565b60006080828403121562000c46578081fd5b604051608081016001600160401b038111828210171562000c6357fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b60006020828403121562000ca6578081fd5b62000a7b8262000b2d565b60008060008060008060008060006101808a8c03121562000cd0578485fd5b89516001600160401b038082111562000ce7578687fd5b818c0191508c601f83011262000cfb578687fd5b81518181111562000d0857fe5b602062000d1e601f8301601f1916820162000f45565b8281528f8284870101111562000d3257898afd5b895b8381101562000d5157858101830151828201840152820162000d34565b8381111562000d62578a8385840101525b509c5062000d728e820162000b2d565b9b50505062000d8460408d0162000b2d565b985060608c015191508082111562000d9a578687fd5b5062000da98c828d0162000b4a565b96505062000dba60808b0162000b2d565b945060a08a0151935062000dd160c08b0162000b2d565b925062000de160e08b0162000b2d565b915062000df38b6101008c0162000c34565b90509295985092959850929598565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b918252602082015260400190565b602080825260409082018190527f5661726961626c655265776172647353747261746567793a3a53776170207061908201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040518181016001600160401b038111828210171562000f6157fe5b604052919050565b608051614d2862000fac60003980610dba5280610fa0528061255352806125e65280612af15280612c4c528061327252806135c152806136525250614d286000f3fe608060405234801561001057600080fd5b50600436106103eb5760003560e01c80638b73e6061161021a578063c4b24a4611610135578063e21ac825116100c8578063ed24911d11610097578063f2fde38b1161007c578063f2fde38b14610784578063f7c618c114610797578063fdb5a03e1461079f576103eb565b8063ed24911d14610774578063ee99205c1461077c576103eb565b8063e21ac82514610733578063e75ab04514610746578063eab89a5a14610759578063ec5568891461076c576103eb565b8063da09c72c11610104578063da09c72c146106fd578063dbd9a4d414610705578063dd62ed3e1461070d578063dd8ce4d614610720576103eb565b8063c4b24a46146106c7578063c89039c5146106cf578063cff1b6ef146106d7578063d505accf146106ea576103eb565b8063a8ae2b7c116101ad578063b6b55f251161017c578063b6b55f251461069c578063b9e57b80146106af578063bace8bb6146106b7578063bd079f55146106bf576103eb565b8063a8ae2b7c1461065b578063a9059cbb1461066e578063ac0d31ff14610681578063b52a321f14610694576103eb565b806399729ec1116101e957806399729ec11461061a5780639e4e73181461062d578063a4d5e67c14610635578063a5534e7114610648576103eb565b80638b73e606146105d75780638da5cb5b146105ea5780639291d563146105ff57806395d89b4114610612576103eb565b80634a970be71161030a578063789139bc1161029d5780637ecebe001161026c5780637ecebe001461059657806381837230146105a95780638980f11f146105bc5780638aff733d146105cf576103eb565b8063789139bc1461056b57806379085425146105735780637ae267731461057b5780637d8820971461058e576103eb565b80635ea682ea116102d95780635ea682ea146105405780635eaec0e41461054857806370a0823114610550578063715018a614610563576103eb565b80634a970be7146104f45780634bebd1e7146105075780634e77ace51461051a5780634ebb79161461052d576103eb565b8063247d284b11610382578063313ce56711610351578063313ce567146104b15780633bdc6e72146104c657806340b47e1a146104ce578063483c2ef0146104e1576103eb565b8063247d284b1461044b5780632e1a7d4d146104815780632f4f21e21461049657806330adf81f146104a9576103eb565b806311056035116103be578063110560351461044b57806318160ddd1461045e57806320606b701461046657806323b872dd1461046e576103eb565b806306fdde03146103f0578063076771111461040e578063095ea7b3146104235780630f23475d14610443575b600080fd5b6103f86107a7565b60405161040591906142a0565b60405180910390f35b610416610835565b6040516104059190614219565b610436610431366004613f06565b61083b565b604051610405919061420e565b610416610852565b610416610459366004613fb7565b61087e565b610416610891565b610416610897565b61043661047c366004613e59565b6108bb565b61049461048f366004613fb7565b6109a4565b005b6104946104a4366004613f06565b610a66565b610416610a74565b6104b9610a98565b6040516104059190614bea565b610416610a9d565b6104946104dc366004613e21565b610aa3565b6104366104ef366004613de9565b610ad7565b61049461050236600461402e565b610aec565b610494610515366004613de9565b610b84565b610494610528366004613f31565b610c68565b61049461053b366004613fb7565b610d06565b610416610db2565b610416610db8565b61041661055e366004613de9565b610ddc565b610494610df7565b610416610e80565b610416610e86565b610494610589366004613e21565b610e8c565b610416610f55565b6104166105a4366004613de9565b61101d565b6104946105b7366004613fb7565b61102f565b6104946105ca366004613f06565b6110ae565b6104166111c0565b6104946105e5366004613de9565b6111c6565b6105f26112cc565b6040516104059190614162565b61049461060d366004613de9565b6112db565b6103f861136e565b610494610628366004613fb7565b6113c8565b610416611476565b610494610643366004613de9565b61149a565b6105f2610656366004613de9565b611621565b610494610669366004613fb7565b61163c565b61043661067c366004613f06565b6116e4565b61049461068f366004613fe7565b6116f1565b6104366118c9565b6104946106aa366004613fb7565b6118d2565b6104166118df565b6105f2611926565b610416611935565b61041661193b565b6105f2611bb1565b6104946106e5366004613fb7565b611bc0565b6104946106f8366004613e99565b611c68565b6105f2611d1d565b610494611d2c565b61041661071b366004613e21565b611d83565b61041661072e366004613fb7565b611dae565b610494610741366004613fb7565b611de8565b6105f2610754366004613fb7565b611e67565b610416610767366004613fb7565b611e8e565b6105f2611ebf565b610416611ece565b6105f2611f65565b610494610792366004613de9565b611f74565b6105f2612035565b610494612044565b6000805460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561082d5780601f106108025761010080835404028352916020019161082d565b820191906000526020600020905b81548152906001019060200180831161081057829003601f168201915b505050505081565b60105481565b60006108483384846122e5565b5060015b92915050565b60008061085d610f55565b9050600061086a82612399565b905061087682826123bb565b925050505b90565b600061088982612399565b90505b919050565b60025481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6001600160a01b0383166000818152600360209081526040808320338085529252822054919290919082148015906108f557506000198114155b1561098b576000610921856040518060600160405280602f8152602001614c6f602f91398491906123f9565b6001600160a01b03808916600081815260036020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610981908590614219565b60405180910390a3505b610996868686612425565b6001925050505b9392505050565b60006109af82611e8e565b9050600081116109da5760405162461bcd60e51b81526004016109d1906142b3565b60405180910390fd5b60006109e582612509565b905060006109f283612399565b9050610a1533610a0284846123bb565b6009546001600160a01b03169190612646565b610a1f33856126ce565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610a589190614219565b60405180910390a250505050565b610a7082826127a8565b5050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b600b546001600160a01b03163314610acd5760405162461bcd60e51b81526004016109d190614912565b610a708282612926565b60086020526000908152604090205460ff1681565b6009546040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d505accf90610b4190339030908a908a908a908a908a9060040161419a565b600060405180830381600087803b158015610b5b57600080fd5b505af1158015610b6f573d6000803e3d6000fd5b50505050610b7d33866127a8565b5050505050565b610b8c612a1c565b6001600160a01b0316610b9d6112cc565b6001600160a01b031614610bc35760405162461bcd60e51b81526004016109d190614812565b6001600160a01b03811660009081526008602052604090205460ff1615610bfc5760405162461bcd60e51b81526004016109d1906145ad565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610c2e916122c0565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610c70612a1c565b6001600160a01b0316610c816112cc565b6001600160a01b031614610ca75760405162461bcd60e51b81526004016109d190614812565b600e5460ff1615158115151415610cbd57600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590610cfb90839061420e565b60405180910390a150565b610d0e612a1c565b6001600160a01b0316610d1f6112cc565b6001600160a01b031614610d455760405162461bcd60e51b81526004016109d190614812565b60008111610d5257600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610d7f573d6000803e3d6000fd5b507f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28600082604051610cfb9291906141db565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b031660009081526004602052604090205490565b610dff612a1c565b6001600160a01b0316610e106112cc565b6001600160a01b031614610e365760405162461bcd60e51b81526004016109d190614812565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600d5481565b60145481565b610e94612a1c565b6001600160a01b0316610ea56112cc565b6001600160a01b031614610ecb5760405162461bcd60e51b81526004016109d190614812565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610efa9084906000906004016141db565b602060405180830381600087803b158015610f1457600080fd5b505af1158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190613f4d565b610a7057600080fd5b6016546015546040517f01e1c48d0000000000000000000000000000000000000000000000000000000081526000926001600160a01b03908116926301e1c48d92610fc892909116907f0000000000000000000000000000000000000000000000000000000000000000906004016141db565b60206040518083038186803b158015610fe057600080fd5b505afa158015610ff4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110189190613fcf565b905090565b60056020526000908152604090205481565b611037612a1c565b6001600160a01b03166110486112cc565b6001600160a01b03161461106e5760405162461bcd60e51b81526004016109d190614812565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516110a1929190614ba4565b60405180910390a1600c55565b6110b6612a1c565b6001600160a01b03166110c76112cc565b6001600160a01b0316146110ed5760405162461bcd60e51b81526004016109d190614812565b600081116110fa57600080fd5b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061112890339085906004016141db565b602060405180830381600087803b15801561114257600080fd5b505af1158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190613f4d565b61118357600080fd5b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516111b49291906141db565b60405180910390a15050565b600f5481565b6111ce612a1c565b6001600160a01b03166111df6112cc565b6001600160a01b0316146112055760405162461bcd60e51b81526004016109d190614812565b6000600754116112275760405162461bcd60e51b81526004016109d190614439565b6001600160a01b03811660009081526008602052604090205460ff1615156001146112645760405162461bcd60e51b81526004016109d19061469e565b6001600160a01b0381166000908152600860205260409020805460ff191690556007546112929060016123bb565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b600b546001600160a01b031633146113055760405162461bcd60e51b81526004016109d190614912565b600b546040517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c0091611344916001600160a01b039091169084906141f4565b60405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f8101849004840282018401909252818152929183018282801561082d5780601f106108025761010080835404028352916020019161082d565b6113d0612a1c565b6001600160a01b03166113e16112cc565b6001600160a01b0316146114075760405162461bcd60e51b81526004016109d190614812565b61271061142b600f54611425601054856122c090919063ffffffff16565b906122c0565b111561143657600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051611469929190614ba4565b60405180910390a1601155565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b600b546001600160a01b031633146114c45760405162461bcd60e51b81526004016109d190614912565b6001600160a01b038116600090815260126020526040812080546001600160a01b0319169055805b601354811015611595576013818154811061150357fe5b6000918252602090912001546001600160a01b038481169116141561158d576013805460019350600019810190811061153857fe5b600091825260209091200154601380546001600160a01b03909216918390811061155e57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001016114ec565b50806115b35760405162461bcd60e51b81526004016109d1906146fb565b60138054806115be57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556014546115ee9060016123bb565b6014556040517f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc906111b4908490614162565b6012602052600090815260409020546001600160a01b031681565b611644612a1c565b6001600160a01b03166116556112cc565b6001600160a01b03161461167b5760405162461bcd60e51b81526004016109d190614812565b612710611699601154611425601054856122c090919063ffffffff16565b11156116a457600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516116d7929190614ba4565b60405180910390a1600f55565b6000610848338484612425565b6116f9612a1c565b6001600160a01b031661170a6112cc565b6001600160a01b0316146117305760405162461bcd60e51b81526004016109d190614812565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611761903090600401614162565b60206040518083038186803b15801561177957600080fd5b505afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b19190613fcf565b90506117bb612a20565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906117ec903090600401614162565b60206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c9190613fcf565b90508361184982846123bb565b10156118675760405162461bcd60e51b81526004016109d1906145e4565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234611890610f55565b6002546040516118a1929190614ba4565b60405180910390a1600e5460ff161515600114156118c3576118c36000610c68565b50505050565b600e5460ff1681565b6118dc33826127a8565b50565b6000806118ea61193b565b9050600c54811061191e57611916612710611910600f5484612b4d90919063ffffffff16565b90612b87565b91505061087b565b600091505090565b6017546001600160a01b031681565b600c5481565b60006060611947612bc9565b6040516370a0823160e01b815290915060009073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a0823190611984903090600401614162565b60206040518083038186803b15801561199c57600080fd5b505afa1580156119b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d49190613fcf565b90506119e081476122c0565b5060005b8251811015611baa5760008382815181106119fb57fe5b602002602001015160000151905073b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b0316816001600160a01b03161415611a6857611a61848381518110611a4657fe5b602002602001015160200151846122c090919063ffffffff16565b9250611ba1565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611a97903090600401614162565b60206040518083038186803b158015611aaf57600080fd5b505afa158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190613fcf565b90506000611b15868581518110611afa57fe5b602002602001015160200151836122c090919063ffffffff16565b9050600060126000888781518110611b2957fe5b602090810291909101810151516001600160a01b03908116835290820192909252604001600020541690508115801590611b6b57506001600160a01b03811615155b15611b9d57611b9a611b93838673b31f66aa3c1e785363f0875a1b74e27b85fd66c785612d64565b87906122c0565b95505b5050505b506001016119e4565b5091505090565b6009546001600160a01b031681565b611bc8612a1c565b6001600160a01b0316611bd96112cc565b6001600160a01b031614611bff5760405162461bcd60e51b81526004016109d190614812565b612710611c1d600f54611425601154856122c090919063ffffffff16565b1115611c2857600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a60105482604051611c5b929190614ba4565b60405180910390a1601055565b42841015611c885760405162461bcd60e51b81526004016109d190614667565b6001600160a01b03871660009081526005602090815260408083208054600181019091559051611ce3927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c9101614222565b604051602081830303815290604052805190602001209050611d088882868686612e31565b611d138888886122e5565b5050505050505050565b600b546001600160a01b031681565b611d34612a1c565b6001600160a01b0316611d456112cc565b6001600160a01b031614611d6b5760405162461bcd60e51b81526004016109d190614812565b60405162461bcd60e51b81526004016109d1906148db565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000611dc4611dbb610f55565b60025490612b4d565b611dcf57508061088c565b610889611dda610f55565b600254611910908590612b4d565b611df0612a1c565b6001600160a01b0316611e016112cc565b6001600160a01b031614611e275760405162461bcd60e51b81526004016109d190614812565b7fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f600d5482604051611e5a929190614ba4565b60405180910390a1600d55565b60138181548110611e7457fe5b6000918252602090912001546001600160a01b0316905081565b6000611e9b611dbb610f55565b611ea75750600061088c565b610889600254611910611eb8610f55565b8590612b4d565b6016546001600160a01b031681565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6000604051611f0391906140bc565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611f35612f07565b30604051602001611f4a959493929190614256565b60405160208183030381529060405280519060200120905090565b6015546001600160a01b031681565b611f7c612a1c565b6001600160a01b0316611f8d6112cc565b6001600160a01b031614611fb35760405162461bcd60e51b81526004016109d190614812565b6001600160a01b038116611fd95760405162461bcd60e51b81526004016109d19061436e565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b3233146120635760405162461bcd60e51b81526004016109d1906143cb565b61206d6000612f0b565b565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156120aa57600080fd5b505afa1580156120be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e29190613e05565b6001600160a01b0316836001600160a01b031614806121825750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561213557600080fd5b505afa158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d9190613e05565b6001600160a01b0316836001600160a01b0316145b801561229a5750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c257600080fd5b505afa1580156121d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fa9190613e05565b6001600160a01b0316826001600160a01b0316148061229a5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561224d57600080fd5b505afa158015612261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122859190613e05565b6001600160a01b0316826001600160a01b0316145b80156122b85750816001600160a01b0316836001600160a01b031614155b949350505050565b60008282018381101561099d5760405162461bcd60e51b81526004016109d190614402565b6001600160a01b03831661230b5760405162461bcd60e51b81526004016109d190614847565b6001600160a01b0382166123315760405162461bcd60e51b81526004016109d190614af4565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061238c908590614219565b60405180910390a3505050565b6000806123a4613036565b905061099d6123b161303b565b6119108584612b4d565b600061099d83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152505b6000818484111561241d5760405162461bcd60e51b81526004016109d191906142a0565b505050900390565b6001600160a01b03821661244b5760405162461bcd60e51b81526004016109d19061487e565b612488816040518060600160405280602e8152602001614cc5602e91396001600160a01b03861660009081526004602052604090205491906123f9565b6001600160a01b0380851660009081526004602052604080822093909355908416815220546124b790826122c0565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061238c908590614219565b6016546015546009546040517fa318c1a40000000000000000000000000000000000000000000000000000000081526000936001600160a01b039081169363a318c1a493612585937f00000000000000000000000000000000000000000000000000000000000000009392831692909116908890600401614b7f565b600060405180830381600087803b15801561259f57600080fd5b505af11580156125b3573d6000803e3d6000fd5b50506016546015546040516307b22ee360e21b81526001600160a01b039283169450631ec8bb8c935061260e92909116907f0000000000000000000000000000000000000000000000000000000000000000906004016141db565b600060405180830381600087803b15801561262857600080fd5b505af115801561263c573d6000803e3d6000fd5b5093949350505050565b6126c98363a9059cbb60e01b84846040516024016126659291906141db565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152613041565b505050565b61270b81604051806060016040528060278152602001614c9e602791396001600160a01b03851660009081526004602052604090205491906123f9565b60046000846001600160a01b03166001600160a01b031681526020019081526020016000208190555061275b81604051806060016040528060278152602001614c486027913960025491906123f9565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061279c908590614219565b60405180910390a35050565b600e5460ff1615156001146127cf5760405162461bcd60e51b81526004016109d190614496565b600d54156127f95760006127e161193b565b9050600d548111156127f7576127f76001612f0b565b505b6009546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd9061284690339030908690600401614176565b602060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128989190613f4d565b6128b45760405162461bcd60e51b81526004016109d190614a3a565b60006128bf82612399565b90506128d7836128d261072e85856123bb565b6130d0565b6128e082613152565b826001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c836040516129199190614219565b60405180910390a2505050565b600a546001600160a01b0383811691161461297057600a5461295490829084906001600160a01b031661206f565b6129705760405162461bcd60e51b81526004016109d190614310565b6001600160a01b03808316600081815260126020526040812080549385166001600160a01b03199485161790556013805460018181018355919092527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09090910180549093169091179091556014546129e7916122c0565b6014556040517f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f80906111b490849084906141f4565b3390565b60095460165460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612a57929116906000906004016141db565b602060405180830381600087803b158015612a7157600080fd5b505af1158015612a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa99190613f4d565b506016546015546009546040517fd2cee46f0000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363d2cee46f93612b1f937f000000000000000000000000000000000000000000000000000000000000000093918316921690600401614b60565b600060405180830381600087803b158015612b3957600080fd5b505af11580156118c3573d6000803e3d6000fd5b600082612b5c5750600061084c565b82820282848281612b6957fe5b041461099d5760405162461bcd60e51b81526004016109d1906147b5565b600061099d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061317b565b6040805160028082526060828101909352829190816020015b612bea613daa565b815260200190600190039081612be25750506016546015546040517f6099ecb200000000000000000000000000000000000000000000000000000000815292935060009283926001600160a01b0390811692636099ecb292612c7492909116907f0000000000000000000000000000000000000000000000000000000000000000906004016141db565b604080518083038186803b158015612c8b57600080fd5b505afa158015612c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc3919061400b565b91509150604051806040016040528073eb8343d5284caec921f035207ca94db6baaacbcd6001600160a01b031681526020018381525083600081518110612d0657fe5b602002602001018190525060405180604001604052807322d4002028f537599be9f666d1c4fa138522f9c86001600160a01b031681526020018281525083600181518110612d5057fe5b602002602001018190525082935050505090565b600080612d7185856131b2565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612db057600080fd5b505afa158015612dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de89190613f69565b5091509150866001600160a01b0316836001600160a01b031614612e0857905b612e2588836001600160701b0316836001600160701b03166131e3565b98975050505050505050565b6000612e3b611ece565b85604051602001612e4d92919061412c565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051612e8a9493929190614282565b6020604051602081039080840390855afa158015612eac573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590612ee25750866001600160a01b0316816001600160a01b0316145b612efe5760405162461bcd60e51b81526004016109d1906144f3565b50505050505050565b4690565b612f1361322b565b6000612f1d61329a565b905081612f4657600c54811015612f465760405162461bcd60e51b81526004016109d190614949565b6000612f6361271061191060115485612b4d90919063ffffffff16565b90508015612f8857600b54600a54612f88916001600160a01b03918216911683612646565b6000612fa5612710611910600f5486612b4d90919063ffffffff16565b90508015612fc457600a54612fc4906001600160a01b03163383612646565b6000612fe2612fdd83612fd787876123bb565b906123bb565b6134e3565b9050612fed81613152565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234613016610f55565b600254604051613027929190614ba4565b60405180910390a15050505050565b600090565b61271090565b6060613096826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661354e9092919063ffffffff16565b8051909150156126c957808060200190518101906130b49190613f4d565b6126c95760405162461bcd60e51b81526004016109d190614a97565b6002546130dd90826122c0565b6002556001600160a01b03821660009081526004602052604090205461310390826122c0565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061279c908590614219565b600081116131725760405162461bcd60e51b81526004016109d1906149a6565b6118dc8161355d565b6000818361319c5760405162461bcd60e51b81526004016109d191906142a0565b5060008385816131a857fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b0316106131d55782846131d8565b83835b915091509250929050565b6000806131f2856103e5612b4d565b905060006132008285612b4d565b9050600061321483611425886103e8612b4d565b90506132208282612b87565b979650505050505050565b6016546015546040517f174e31c40000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263174e31c492612b1f929116907f0000000000000000000000000000000000000000000000000000000000000000906004016141db565b6040516370a0823160e01b8152600090819073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a08231906132d6903090600401614162565b60206040518083038186803b1580156132ee57600080fd5b505afa158015613302573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133269190613fcf565b60135490915060005b818110156134db5760006013828154811061334657fe5b6000918252602090912001546001600160a01b0316905073b31f66aa3c1e785363f0875a1b74e27b85fd66c7811415613405574780156133fe5773b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156133cf57600080fd5b505af11580156133e3573d6000803e3d6000fd5b50505050506133fb81866122c090919063ffffffff16565b94505b50506134d3565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190613434903090600401614162565b60206040518083038186803b15801561344c57600080fd5b505afa158015613460573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134849190613fcf565b905080156134d0576001600160a01b038083166000908152601260205260409020541680156134ce57600a546134cb90611b9390849086906001600160a01b0316856136a8565b95505b505b50505b60010161332f565b509091505090565b600a54601754600091829161351c9185916001600160a01b03918216917322d4002028f537599be9f666d1c4fa138522f9c891166136a8565b60095490915061099d9082907322d4002028f537599be9f666d1c4fa138522f9c8906001600160a01b0316808061383b565b60606122b884846000856139b5565b60165460095461357a916001600160a01b03918216911683612646565b6016546015546009546040517fe4cca4b00000000000000000000000000000000000000000000000000000000081526001600160a01b039384169363e4cca4b0936135f1937f0000000000000000000000000000000000000000000000000000000000000000939183169216908790600401614b7f565b600060405180830381600087803b15801561360b57600080fd5b505af115801561361f573d6000803e3d6000fd5b50506016546015546040516307b22ee360e21b81526001600160a01b039283169450631ec8bb8c935061367a92909116907f0000000000000000000000000000000000000000000000000000000000000000906004016141db565b600060405180830381600087803b15801561369457600080fd5b505af1158015610b7d573d6000803e3d6000fd5b6000806136b585856131b2565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156136f457600080fd5b505afa158015613708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061372c9190613f69565b5091509150866001600160a01b0316836001600160a01b03161461374c57905b60008061376c8a856001600160701b0316856001600160701b03166131e3565b9050886001600160a01b0316856001600160a01b03161461378957905b61379489888c613a6b565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0388169063022c0d9f906137ec9085908590309060248101614bb2565b600060405180830381600087803b15801561380657600080fd5b505af115801561381a573d6000803e3d6000fd5b5050505081811161382b578161382d565b805b9a9950505050505050505050565b600080613849876002612b87565b90506000811161386b5760405162461bcd60e51b81526004016109d190614758565b6000856001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156138a657600080fd5b505afa1580156138ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138de9190613e05565b9050816001600160a01b038881169083161461390357613900838984896136a8565b90505b6000876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561393e57600080fd5b505afa158015613952573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139769190613e05565b9050836001600160a01b038a81169083161461399b57613998858b848a6136a8565b90505b6139a6898483613b07565b9b9a5050505050505050505050565b6060824710156139d75760405162461bcd60e51b81526004016109d190614550565b6139e085613d5b565b6139fc5760405162461bcd60e51b81526004016109d190614a03565b60006060866001600160a01b03168587604051613a1991906140a0565b60006040518083038185875af1925050503d8060008114613a56576040519150601f19603f3d011682016040523d82523d6000602084013e613a5b565b606091505b5091509150613220828286613d61565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90613a9990859085906004016141db565b602060405180830381600087803b158015613ab357600080fd5b505af1158015613ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aeb9190613f4d565b6126c95760405162461bcd60e51b81526004016109d190614b2b565b6000806000856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613b4557600080fd5b505afa158015613b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b7d9190613f69565b50915091506000613ba186846001600160701b0316846001600160701b0316613d9a565b905084811115613bce57849050613bcb85836001600160701b0316856001600160701b0316613d9a565b95505b613c49876001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015613c0a57600080fd5b505afa158015613c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c429190613e05565b8888613a6b565b613cc4876001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015613c8557600080fd5b505afa158015613c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cbd9190613e05565b8883613a6b565b6040517f6a6278420000000000000000000000000000000000000000000000000000000081526001600160a01b03881690636a62784290613d09903090600401614162565b602060405180830381600087803b158015613d2357600080fd5b505af1158015613d37573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132209190613fcf565b3b151590565b60608315613d7057508161099d565b825115613d805782518084602001fd5b8160405162461bcd60e51b81526004016109d191906142a0565b60006122b8836119108685612b4d565b604080518082019091526000808252602082015290565b80516001600160701b038116811461088c57600080fd5b803560ff8116811461088c57600080fd5b600060208284031215613dfa578081fd5b813561099d81614c24565b600060208284031215613e16578081fd5b815161099d81614c24565b60008060408385031215613e33578081fd5b8235613e3e81614c24565b91506020830135613e4e81614c24565b809150509250929050565b600080600060608486031215613e6d578081fd5b8335613e7881614c24565b92506020840135613e8881614c24565b929592945050506040919091013590565b600080600080600080600060e0888a031215613eb3578283fd5b8735613ebe81614c24565b96506020880135613ece81614c24565b95506040880135945060608801359350613eea60808901613dd8565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215613f18578182fd5b8235613f2381614c24565b946020939093013593505050565b600060208284031215613f42578081fd5b813561099d81614c39565b600060208284031215613f5e578081fd5b815161099d81614c39565b600080600060608486031215613f7d578283fd5b613f8684613dc1565b9250613f9460208501613dc1565b9150604084015163ffffffff81168114613fac578182fd5b809150509250925092565b600060208284031215613fc8578081fd5b5035919050565b600060208284031215613fe0578081fd5b5051919050565b60008060408385031215613ff9578182fd5b823591506020830135613e4e81614c39565b6000806040838503121561401d578182fd5b505080516020909101519092909150565b600080600080600060a08688031215614045578283fd5b853594506020860135935061405c60408701613dd8565b94979396509394606081013594506080013592915050565b6000815180845261408c816020860160208601614bf8565b601f01601f19169290920160200192915050565b600082516140b2818460208701614bf8565b9190910192915050565b60008083546001808216600081146140db57600181146140f257614121565b60ff198316865260028304607f1686019350614121565b600283048786526020808720875b838110156141195781548a820152908501908201614100565b505050860193505b509195945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261099d6020830184614074565b60208082526030908201527f5661726961626c655265776172647353747261746567793a3a5769746864726160408201527f7720616d6f756e7420746f6f206c6f7700000000000000000000000000000000606082015260800190565b602080825260409082018190527f5661726961626c655265776172647353747261746567793a3a53776170207061908201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526034908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f20616c6c6f776564206465706f7369746f7273000000000000000000000000606082015260800190565b6020808252602a908201527f5661726961626c655265776172647353747261746567793a3a4465706f73697460408201527f732064697361626c656400000000000000000000000000000000000000000000606082015260800190565b60208082526024908201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160408201527f7475726500000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60408201527f722063616c6c0000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604082015260600190565b6020808252604d908201527f5661726961626c655265776172647353747261746567793a3a456d657267656e60408201527f6379207769746864726177206d696e696d756d2072657475726e20616d6f756e60608201527f74206e6f74207265616368656400000000000000000000000000000000000000608082015260a00190565b6020808252600f908201527f7065726d69743a3a657870697265640000000000000000000000000000000000604082015260600190565b6020808252602a908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f5661726961626c655265776172647353747261746567793a3a5265776172642060408201527f746f2064656c657465206e6f7420666f756e6421000000000000000000000000606082015260800190565b6020808252602f908201527f4465784c6962726172793a3a5f636f6e76657274526577617264546f6b656e7360408201527f546f4465706f736974546f6b656e730000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604082015260600190565b60208082526034908201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260408201527f20746f20746865207a65726f2061646472657373000000000000000000000000606082015260800190565b60208082526019908201527f736574416c6c6f77616e6365733a3a6465707265636174656400000000000000604082015260600190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604082015260600190565b60208082526030908201527f5661726961626c655265776172647353747261746567793a3a5265696e76657360408201527f7420616d6f756e7420746f6f206c6f7700000000000000000000000000000000606082015260800190565b6020808252602d908201527f5661726961626c655265776172647353747261746567793a3a5374616b65206160408201527f6d6f756e7420746f6f206c6f7700000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526036908201527f5661726961626c655265776172647353747261746567793a3a4465706f73697460408201527f20746f6b656e207472616e73666572206661696c656400000000000000000000606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60408201527f6f74207375636365656400000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604082015260600190565b6020808252818101527f4465784c6962726172793a3a5452414e534645525f46524f4d5f4641494c4544604082015260600190565b9283526001600160a01b03918216602084015216604082015260600190565b9384526001600160a01b03928316602085015291166040830152606082015260800190565b918252602082015260400190565b60008582528460208301526001600160a01b038416604083015260806060830152614be06080830184614074565b9695505050505050565b60ff91909116815260200190565b60005b83811015614c13578181015183820152602001614bfb565b838111156118c35750506000910152565b6001600160a01b03811681146118dc57600080fd5b80151581146118dc57600080fdfe5f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c797472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a26469706673582212204f79a1aa072285ef95755575d1c247f39f5b4cb49e2d88c2d075ae6f458b02fb64736f6c634300070300338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000c8898e2eee8a1d08742bb3173311697966451f61000000000000000000000000cdfd91eea657cc2701117fe9711c9a4f61feed2300000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000c9aa91645c3a400246b9d16c8d648f5dcec6d1c8000000000000000000000000000000000000000000000000000000000000000100000000000000000000000019c721aa2cd955964588d972936082eb65fad0f5000000000000000000000000302404cb8f34713a8b8dbf9b4989a41252332068000000000000000000000000000000000000000000000000002386f26fc100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000235969656c642059616b3a2045636869646e612078204a4c50206563645054502d50545000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000eb8343d5284caec921f035207ca94db6baaacbcd000000000000000000000000218e6a0ad170460f93ea784fbcc92b57df13316e00000000000000000000000022d4002028f537599be9f666d1c4fa138522f9c8000000000000000000000000cdfd91eea657cc2701117fe9711c9a4f61feed23