[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CheckpointUnorderedInsertion", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededSafeSupply", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" }, { "internalType": "uint48", "name": "clock", "type": "uint48" } ], "name": "ERC5805FutureLookup", "type": "error" }, { "inputs": [], "name": "ERC6372InconsistentClock", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "uint8", "name": "bits", "type": "uint8" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintDowncast", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "expiry", "type": "uint256" } ], "name": "VotesExpiredSignature", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "value", "type": "bool" } ], "name": "AddressFeeExpemtionUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "value", "type": "bool" } ], "name": "AddressLimitExpemtionUpdated", "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": "from", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "value", "type": "uint16" } ], "name": "BuyFeePercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "fromDelegate", "type": "address" }, { "indexed": true, "internalType": "address", "name": "toDelegate", "type": "address" } ], "name": "DelegateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "delegate", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "previousVotes", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newVotes", "type": "uint256" } ], "name": "DelegateVotesChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "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": "FeeCollected", "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": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "value", "type": "uint16" } ], "name": "SellFeePercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "value", "type": "uint16" } ], "name": "SwapFeeThresholdUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "value", "type": "uint16" } ], "name": "TransferFeePercentageUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "value", "type": "uint16" } ], "name": "WalletLimitUpdated", "type": "event" }, { "inputs": [], "name": "CLOCK_MODE", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "buyCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint32", "name": "pos", "type": "uint32" } ], "name": "checkpoints", "outputs": [ { "components": [ { "internalType": "uint48", "name": "_key", "type": "uint48" }, { "internalType": "uint208", "name": "_value", "type": "uint208" } ], "internalType": "struct Checkpoints.Checkpoint208", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "clock", "outputs": [ { "internalType": "uint48", "name": "", "type": "uint48" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "createTokenFeeToETHSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "createTokenFeeTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" } ], "name": "delegate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "delegatee", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "delegateBySig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "delegates", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "enableTrade", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint16", "name": "feeAmountType", "type": "uint16" } ], "name": "getFeeFor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "timepoint", "type": "uint256" } ], "name": "getPastVotes", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getVotes", "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": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "numCheckpoints", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "to", "type": "address" } ], "name": "recoverBalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "recoverTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sellCounter", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_tokenBuyFee", "type": "uint16" } ], "name": "setBuyFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeCollector", "type": "address" } ], "name": "setFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_holderAddress", "type": "address" }, { "internalType": "bool", "name": "exemption", "type": "bool" } ], "name": "setFeeExemption", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holderAddress", "type": "address" }, { "internalType": "bool", "name": "exemption", "type": "bool" } ], "name": "setLimitExemption", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_tokenSellFee", "type": "uint16" } ], "name": "setSellFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "setSwapEnable", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_swapFeeThreshold", "type": "uint16" } ], "name": "setSwapFeeThreshold", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_feePercentage", "type": "uint16" } ], "name": "setTransferFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_walletLimitPercentage", "type": "uint16" } ], "name": "setWalletsLimitPercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapFeeThreshold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapFeeThresholdAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenBuyFee", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenSellFee", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenTransferFee", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "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": [], "name": "uniswapV2Pair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "walletLimit", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
610160604052600e80546001600160401b0319166701900190000000c81790555f600f8190556010556101f460115560168054600162ff000160a01b03191660011790553480156200004f575f80fd5b50604051620050d1380380620050d183398101604081905262000072916200114b565b604051806040016040528060058152602001644c4e44525960d81b81525080604051806040016040528060018152602001603160f81b81525083604051806040016040528060058152602001644c4e44525960d81b815250604051806040016040528060058152602001644c4e44525960d81b8152508160039081620000f9919062001210565b50600462000108828262001210565b50506005805460ff191690555060016006556001600160a01b0381166200014957604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6200015481620002e5565b506200016282600862000336565b610120526200017381600962000336565b61014052815160208084019190912060e052815190820120610100524660a0526200020060e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0819052325f8181526014602090815260408083208054600160ff1991821681179092557f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c805482168317905533808652838620805483168417905587865283862080548316841790559585526015909352818420805484168217905584845281842080548416821790559483529091208054909116909217909155620002d49150620002b2601290565b620002bf90600a620013e9565b620002ce9062989680620013f9565b6200036e565b620002de620003aa565b50620015c0565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f60208351101562000355576200034d8362000407565b905062000368565b8162000362848262001210565b5060ff90505b92915050565b6001600160a01b038216620003995760405163ec442f0560e01b81525f600482015260240162000140565b620003a65f838362000449565b5050565b620003b4620007af565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620003ea3390565b6040516001600160a01b03909116815260200160405180910390a1565b5f80829050601f8151111562000434578260405163305a27a960e01b815260040162000140919062001413565b8051620004418262001461565b179392505050565b5f81116200049a5760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742073686f756c6420626520686967686572000000000000000000604482015260640162000140565b6016545f906001600160a01b038581169116148015620004d757506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b156200050a57600e60049054906101000a900461ffff169050600f5f8154620005009062001485565b90915550620005eb565b6016546001600160a01b038581169116148015906200053657506016546001600160a01b038481169116145b15620005dc5750600e546601000000000000900461ffff16306001600160a01b03851614620005d657601654600160a81b900460ff16806200058557506007546001600160a01b038581169116145b620005c65760405162461bcd60e51b815260206004820152601060248201526f14ddd85c081b9bdd081cdd185c9d195960821b604482015260640162000140565b60105f8154620005009062001485565b620005eb565b50600e5462010000900461ffff165b5f620005fa85858585620007d6565b90505f620006098285620014a0565b6001600160a01b0386165f9081526015602052604090205490915060ff16620006d557600e546127109061ffff166200064160025490565b6200064d9190620013f9565b620006599190620014b6565b8162000679876001600160a01b03165f9081526020819052604090205490565b620006859190620014d6565b1115620006d55760405162461bcd60e51b815260206004820152601e60248201527f57616c6c65742062616c616e6365206578636565647320616c6c6f7765640000604482015260640162000140565b305f90815260208190526040902054601654600160b01b900460ff161580156200070c57506016546001600160a01b038781169116145b80156200071b57506005600f54115b80156200072757505f81115b1562000785576200074e62000748866200074284816200082a565b62000853565b6200086d565b60135447906001600160a01b03161580159062000772575067016345785d8a000081115b1562000783576200078381620009fc565b505b821562000799576200079987308562000a91565b620007a687878462000a91565b50505050505050565b60055460ff1615620007d45760405163d93c066560e01b815260040160405180910390fd5b565b5f61ffff82161580620007f25750620007f0858562000b04565b155b156200080057505f62000822565b6127106200081361ffff841685620013f9565b6200081f9190620014b6565b90505b949350505050565b6011546002545f9161271091620008429190620013f9565b6200084e9190620014b6565b905090565b5f8183111562000864578162000866565b825b9392505050565b6016805460ff60b01b1916600160b01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f81518110620008b657620008b6620014ec565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000927573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200094d91906200114b565b81600181518110620009635762000963620014ec565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac94790620009bc9085905f9086903090429060040162001500565b5f604051808303815f87803b158015620009d4575f80fd5b505af1158015620009e7573d5f803e3d5ffd5b50506016805460ff60b01b1916905550505050565b6013546040515f916001600160a01b03169083908381818185875af1925050503d805f811462000a48576040519150601f19603f3d011682016040523d82523d5f602084013e62000a4d565b606091505b5050905080620003a65760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b604482015260640162000140565b62000a9e83838362000b49565b6001600160a01b03831662000af2575f62000ab860025490565b90506001600160d01b038082111562000aef57604051630e58ae9360e11b8152600481018390526024810182905260440162000140565b50505b62000aff83838362000b60565b505050565b6001600160a01b0382165f9081526014602052604081205460ff16158015620008665750506001600160a01b03165f9081526014602052604090205460ff1615919050565b62000b53620007af565b62000aff83838362000bf7565b6001600160a01b03831662000b955762000b92600d62001b0862000d2660201b1762000b8c8462000d33565b62000d6c565b50505b6001600160a01b03821662000bc45762000bc1600d62001b1362000da860201b1762000b8c8462000d33565b50505b6001600160a01b038381165f908152600b602052604080822054858416835291205462000aff9291821691168362000db5565b6001600160a01b03831662000c25578060025f82825462000c199190620014d6565b9091555062000c979050565b6001600160a01b0383165f908152602081905260409020548181101562000c795760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000140565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821662000cb55760028054829003905562000cd3565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000d1991815260200190565b60405180910390a3505050565b5f62000866828462001573565b5f6001600160d01b0382111562000d68576040516306dfcc6560e41b815260d060048201526024810183905260440162000140565b5090565b5f8062000d9b62000d7c62000f17565b62000d9262000d8b8862000f22565b868860201c565b87919062000f6e565b915091505b935093915050565b5f6200086682846200159d565b816001600160a01b0316836001600160a01b03161415801562000dd757505f81115b1562000aff576001600160a01b0383161562000e78576001600160a01b0383165f908152600c602090815260408220829162000e24919062000da8901b62001b131762000b8c8662000d33565b6001600160d01b031691506001600160d01b03169150846001600160a01b03165f80516020620050b1833981519152838360405162000e6d929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161562000aff576001600160a01b0382165f908152600c602090815260408220829162000ebf919062000d26901b62001b081762000b8c8662000d33565b6001600160d01b031691506001600160d01b03169150836001600160a01b03165f80516020620050b1833981519152838360405162000f08929190918252602082015260400190565b60405180910390a25050505050565b5f6200084e62000f7d565b80545f90801562000f665762000f4c8362000f3f600184620014a0565b5f91825260209091200190565b54660100000000000090046001600160d01b031662000866565b5f9392505050565b5f8062000d9b85858562000f89565b5f6200084e4362001117565b82545f9081908015620010b9575f62000fa98762000f3f600185620014a0565b60408051808201909152905465ffffffffffff80821680845266010000000000009092046001600160d01b0316602084015291925090871610156200100157604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff808816911603620010555784620010288862000f3f600186620014a0565b80546001600160d01b039290921666010000000000000265ffffffffffff909216919091179055620010a8565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d815291909120945191519092166601000000000000029216919091179101555b60200151925083915062000da09050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316660100000000000002919093161792019190915590508162000da0565b5f65ffffffffffff82111562000d68576040516306dfcc6560e41b8152603060048201526024810183905260440162000140565b5f602082840312156200115c575f80fd5b81516001600160a01b038116811462000866575f80fd5b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200119c57607f821691505b602082108103620011bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000aff57805f5260205f20601f840160051c81016020851015620011e85750805b601f840160051c820191505b8181101562001209575f8155600101620011f4565b5050505050565b81516001600160401b038111156200122c576200122c62001173565b62001244816200123d845462001187565b84620011c1565b602080601f8311600181146200127a575f8415620012625750858301515b5f19600386901b1c1916600185901b178555620012d4565b5f85815260208120601f198616915b82811015620012aa5788860151825594840194600190910190840162001289565b5085821015620012c857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200133057815f1904821115620013145762001314620012dc565b808516156200132257918102915b93841c9390800290620012f5565b509250929050565b5f82620013485750600162000368565b816200135657505f62000368565b81600181146200136f57600281146200137a576200139a565b600191505062000368565b60ff8411156200138e576200138e620012dc565b50506001821b62000368565b5060208310610133831016604e8410600b8410161715620013bf575081810a62000368565b620013cb8383620012f0565b805f1904821115620013e157620013e1620012dc565b029392505050565b5f6200086660ff84168362001338565b8082028115828204841417620003685762000368620012dc565b5f602080835283518060208501525f5b81811015620014415785810183015185820160400152820162001423565b505f604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620011bb575f1960209190910360031b1b16919050565b5f60018201620014995762001499620012dc565b5060010190565b81810381811115620003685762000368620012dc565b5f82620014d157634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620003685762000368620012dc565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015620015525784516001600160a01b0316835293830193918301916001016200152b565b50506001600160a01b03969096166060850152505050608001529392505050565b6001600160d01b03818116838216019080821115620015965762001596620012dc565b5092915050565b6001600160d01b03828116828216039080821115620015965762001596620012dc565b60805160a05160c05160e051610100516101205161014051613a9f620016125f395f61227101525f61224401525f611d4d01525f611d2501525f611c8001525f611caa01525f611cd40152613a9f5ff3fe608060405260043610610343575f3560e01c806370a08231116101bd5780639ab24eb0116100f2578063d505accf11610092578063f04e3e281161006d578063f04e3e2814610993578063f1127ed8146109b2578063f2fde38b146109fd578063fdc5b0d514610a1c575f80fd5b8063d505accf1461090e578063d9819d411461092d578063dd62ed3e1461094f575f80fd5b8063a864cfe1116100cd578063a864cfe114610891578063a8e05e65146108b0578063a9059cbb146108d0578063c3cda520146108ef575f80fd5b80639ab24eb01461083e578063a42dce801461085d578063a4d0047d1461087c575f80fd5b80638ad9c43d1161015d5780638e539e8c116101385780638e539e8c146107cb57806391ceedbf146107ea57806391ddadf4146107ff57806395d89b411461082a575f80fd5b80638ad9c43d1461077b5780638b23cd891461078f5780638da5cb5b146107ae575f80fd5b806379cc67901161019857806379cc6790146107025780637ecebe00146107215780638456cb591461074057806384b0196e14610754575f80fd5b806370a082311461069b578063715018a6146106cf578063751fd179146106e3575f80fd5b80633f4ba83a116102935780635c19a95c1161023357806361b0a56e1161020e57806361b0a56e14610615578063632d80f41461063457806368662ea0146106485780636fcfff4514610667575f80fd5b80635c19a95c146105cb5780635c975abb146105ea5780635e37000314610601575f80fd5b806349bd5a5e1161026e57806349bd5a5e1461054d5780634a47cb891461056c5780634bf5d7e914610580578063587cde1e14610594575f80fd5b80633f4ba83a146104fb57806342966c681461050f5780634463c1b21461052e575f80fd5b80632119bf56116102fe57806332466af0116102d957806332466af01461047c5780633644e5151461049b5780633a46b1a8146104af5780633c8463a1146104ce575f80fd5b80632119bf561461042357806323b872dd14610442578063313ce56714610461575f80fd5b806299d3861461034e57806306fdde031461037f578063095ea7b3146103a057806318160ddd146103cf5780631e15007f146103ed57806320a0bf0f14610402575f80fd5b3661034a57005b5f80fd5b348015610359575f80fd5b50610362610a3d565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561038a575f80fd5b50610393610d00565b604051610376919061348e565b3480156103ab575f80fd5b506103bf6103ba3660046134b4565b610d90565b6040519015158152602001610376565b3480156103da575f80fd5b506002545b604051908152602001610376565b3480156103f8575f80fd5b506103df60115481565b34801561040d575f80fd5b5061042161041c3660046134f4565b610da9565b005b34801561042e575f80fd5b506103df61043d36600461350d565b610e32565b34801561044d575f80fd5b506103bf61045c36600461355b565b610e7d565b34801561046c575f80fd5b5060405160128152602001610376565b348015610487575f80fd5b506104216104963660046134f4565b610ea2565b3480156104a6575f80fd5b506103df610f25565b3480156104ba575f80fd5b506103df6104c93660046134b4565b610f33565b3480156104d9575f80fd5b50600e546104e89061ffff1681565b60405161ffff9091168152602001610376565b348015610506575f80fd5b50610421610fb2565b34801561051a575f80fd5b50610421610529366004613599565b610fc4565b348015610539575f80fd5b506104216105483660046135bd565b610fd1565b348015610558575f80fd5b50601654610362906001600160a01b031681565b348015610577575f80fd5b50610421611060565b34801561058b575f80fd5b506103936110ce565b34801561059f575f80fd5b506103626105ae3660046135f4565b6001600160a01b039081165f908152600b60205260409020541690565b3480156105d6575f80fd5b506104216105e53660046135f4565b611146565b3480156105f5575f80fd5b5060055460ff166103bf565b34801561060c575f80fd5b506103df611155565b348015610620575f80fd5b5061042161062f36600461360f565b611175565b34801561063f575f80fd5b506104216111e4565b348015610653575f80fd5b506104216106623660046135f4565b611308565b348015610672575f80fd5b506106866106813660046135f4565b6113a1565b60405163ffffffff9091168152602001610376565b3480156106a6575f80fd5b506103df6106b53660046135f4565b6001600160a01b03165f9081526020819052604090205490565b3480156106da575f80fd5b506104216113ab565b3480156106ee575f80fd5b506104216106fd3660046135bd565b6113bc565b34801561070d575f80fd5b5061042161071c3660046134b4565b611443565b34801561072c575f80fd5b506103df61073b3660046135f4565b611458565b34801561074b575f80fd5b50610421611462565b34801561075f575f80fd5b50610768611472565b604051610376979695949392919061364e565b348015610786575f80fd5b506104216114b4565b34801561079a575f80fd5b506104216107a93660046134f4565b6115d7565b3480156107b9575f80fd5b506007546001600160a01b0316610362565b3480156107d6575f80fd5b506103df6107e5366004613599565b61164a565b3480156107f5575f80fd5b506103df600f5481565b34801561080a575f80fd5b506108136116b3565b60405165ffffffffffff9091168152602001610376565b348015610835575f80fd5b506103936116bc565b348015610849575f80fd5b506103df6108583660046135f4565b6116cb565b348015610868575f80fd5b506104216108773660046135f4565b6116fa565b348015610887575f80fd5b506103df60105481565b34801561089c575f80fd5b506104216108ab3660046134f4565b6117a4565b3480156108bb575f80fd5b50600e546104e89062010000900461ffff1681565b3480156108db575f80fd5b506103bf6108ea3660046134b4565b611834565b3480156108fa575f80fd5b506104216109093660046136f5565b611841565b348015610919575f80fd5b5061042161092836600461374b565b6118fd565b348015610938575f80fd5b50600e546104e890640100000000900461ffff1681565b34801561095a575f80fd5b506103df6109693660046137b4565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561099e575f80fd5b506104216109ad3660046134f4565b611a33565b3480156109bd575f80fd5b506109d16109cc3660046137e0565b611ab1565b60408051825165ffffffffffff1681526020928301516001600160d01b03169281019290925201610376565b348015610a08575f80fd5b50610421610a173660046135f4565b611ace565b348015610a27575f80fd5b50600e546104e890600160301b900461ffff1681565b5f610a46611b1e565b601654600160a01b900460ff1615610aa55760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c656400000000000000000060448201526064015b60405180910390fd5b610ac530737a250d5630b4cf539739df2c5dacb4c659f2488d5f19611b4b565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b399190613814565b6001600160a01b031663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b98573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bbc9190613814565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610c06573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c2a9190613814565b601680546001600160a01b0319166001600160a01b0392909216918217905560405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201525f19602482015263095ea7b3906044016020604051808303815f875af1158015610c9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc0919061382f565b5050601680546001600160a01b039081165f908152601560205260409020805460ff19166001179055815460ff60a01b198116600160a01b179092551690565b606060038054610d0f9061384a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3b9061384a565b8015610d865780601f10610d5d57610100808354040283529160200191610d86565b820191905f5260205f20905b815481529060010190602001808311610d6957829003601f168201915b5050505050905090565b5f33610d9d818585611b4b565b60019150505b92915050565b610db1611b1e565b61271061ffff82161115610dd75760405162461bcd60e51b8152600401610a9c90613882565b600e805465ffff00000000191664010000000061ffff84169081029190911790915560405190815233907f4602e39f3ecc0b625a849d2ab7ed3b1f3787735155cd830b3e73cc873fe77977906020015b60405180910390a250565b5f61ffff82161580610e4b5750610e498585611b58565b155b15610e5757505f610e75565b612710610e6861ffff8416856138bd565b610e7291906138e8565b90505b949350505050565b5f33610e8a858285611b9c565b610e95858585611c17565b60019150505b9392505050565b610eaa611b1e565b61271061ffff82161115610ed05760405162461bcd60e51b8152600401610a9c90613882565b600e805467ffff0000000000001916600160301b61ffff84169081029190911790915560405190815233907ff59f261b09bf1cdff62d3be67eb597b1222ab86e3bb9937c0bf362d8ea38017e90602001610e27565b5f610f2e611c74565b905090565b5f80610f3d6116b3565b90508065ffffffffffff168310610f7857604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610a9c565b610fa1610f8484611d9d565b6001600160a01b0386165f908152600c6020526040902090611dd3565b6001600160d01b0316949350505050565b610fba611b1e565b610fc2611e83565b565b610fce3382611ed5565b50565b610fd9611b1e565b6001600160a01b038216610fff5760405162461bcd60e51b8152600401610a9c90613907565b6001600160a01b0382165f81815260156020908152604091829020805460ff1916851515908117909155915191825233917fefbf6623e93eec0baf3f0a2030e59b6c533545064fbe0745f726b461c3ab79e291015b60405180910390a35050565b611068611b1e565b601654600160a81b900460ff16156110b95760405162461bcd60e51b815260206004820152601460248201527314ddd85c08185b1c9958591e48195b98589b195960621b6044820152606401610a9c565b6016805460ff60a81b1916600160a81b179055565b60606110d8611f09565b65ffffffffffff166110e86116b3565b65ffffffffffff161461110e576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336111518183611f13565b5050565b6011546002545f916127109161116b91906138bd565b610f2e91906138e8565b61117d611b1e565b6001600160a01b0383166111cb5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e2063616e206e6f74206265207a65726f60581b6044820152606401610a9c565b6111df6001600160a01b0384168284611f84565b505050565b6013546001600160a01b0316336001600160a01b0316148061121057506007546001600160a01b031633145b61124b5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a9c565b6013546001600160a01b03166112995760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420666565206164647265737360681b6044820152606401610a9c565b305f9081526020819052604090205480156112b7576112b781611fd6565b4780156112c7576112c781612158565b6013546040518381526001600160a01b039091169030907ff228de527fc1b9843baac03b9a04565473a263375950e63435d4138464386f4690602001611054565b611310611b1e565b5f816001600160a01b0316476040515b5f6040518083038185875af1925050503d805f811461135a576040519150601f19603f3d011682016040523d82523d5f602084013e61135f565b606091505b50509050806111515760405162461bcd60e51b815260206004820152600e60248201526d11985a5b1959081d1bc81cd95b9960921b6044820152606401610a9c565b5f610da382612171565b6113b3611b1e565b610fc25f612192565b6113c4611b1e565b6001600160a01b0382166113ea5760405162461bcd60e51b8152600401610a9c90613907565b6001600160a01b0382165f81815260146020908152604091829020805460ff1916851515908117909155915191825233917f84220bc8bb002d371d24063208bcf6cdbb9fe8fbd568800ee4eee6da8258fcbc9101611054565b61144e823383611b9c565b6111518282611ed5565b5f610da3826121e3565b61146a611b1e565b610fc2612200565b5f6060805f805f606061148361223d565b61148b61226a565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6013546001600160a01b0316336001600160a01b031614806114e057506007546001600160a01b031633145b61151b5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a9c565b6013546001600160a01b03166115695760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420666565206164647265737360681b6044820152606401610a9c565b305f818152602081905260409020546013549091611590916001600160a01b031683612297565b6013546040518281526001600160a01b039091169030907ff228de527fc1b9843baac03b9a04565473a263375950e63435d4138464386f469060200160405180910390a350565b6115df611b1e565b61271061ffff8216106116045760405162461bcd60e51b8152600401610a9c90613882565b600e805461ffff191661ffff831690811790915560405190815233907f368189a350b45a45f9fbfecd55390a5effaf39bc673aed353bc70dc21cc094b390602001610e27565b5f806116546116b3565b90508065ffffffffffff16831061168f57604051637669fc0f60e11b81526004810184905265ffffffffffff82166024820152604401610a9c565b6116a361169b84611d9d565b600d90611dd3565b6001600160d01b03169392505050565b5f610f2e611f09565b606060048054610d0f9061384a565b6001600160a01b0381165f908152600c602052604081206116eb906122fd565b6001600160d01b031692915050565b611702611b1e565b6001600160a01b0381166117285760405162461bcd60e51b8152600401610a9c90613907565b601380546001600160a01b039081165f908152601460208181526040808420805460ff19908116909155865486168552601580845282862080548316905587546001600160a01b031916989096169788179096559583529081528482208054851660019081179091559290529290922080549091169091179055565b6117ac611b1e565b61271061ffff821611156117f85760405162461bcd60e51b81526020600482015260136024820152725468726573686f6c6420746f6f206c6172676560681b6044820152606401610a9c565b61ffff8116601181905560405190815233907fcf1bb1da05e3cd0b59cc1becbe0a4dfba4c4538bf8afb807d76a7f0392b13c5f90602001610e27565b5f33610d9d818585611c17565b8342111561186557604051632341d78760e11b815260048101859052602401610a9c565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f906118de906118d69060a00160405160208183030381529060405280519060200120612334565b858585612360565b90506118ea818761238c565b6118f48188611f13565b50505050505050565b834211156119215760405163313c898160e11b815260048101859052602401610a9c565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861196c8c6001600160a01b03165f908152600a6020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6119c682612334565b90505f6119d582878787612360565b9050896001600160a01b0316816001600160a01b031614611a1c576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610a9c565b611a278a8a8a611b4b565b50505050505050505050565b611a3b611b1e565b61271061ffff82161115611a615760405162461bcd60e51b8152600401610a9c90613882565b600e805463ffff000019166201000061ffff84169081029190911790915560405190815233907fa49cdfd675b5375eaf64715215ba759e627fb06b9c9e4425fab8c728a1ad15ed90602001610e27565b604080518082019091525f8082526020820152610e9b83836123de565b611ad6611b1e565b6001600160a01b038116611aff57604051631e4fbdf760e01b81525f6004820152602401610a9c565b610fce81612192565b5f610e9b8284613930565b5f610e9b8284613957565b6007546001600160a01b03163314610fc25760405163118cdaa760e01b8152336004820152602401610a9c565b6111df8383836001612412565b6001600160a01b0382165f9081526014602052604081205460ff16158015610e9b5750506001600160a01b03165f9081526014602052604090205460ff1615919050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611c115781811015611c0357604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610a9c565b611c1184848484035f612412565b50505050565b6001600160a01b038316611c4057604051634b637e8f60e11b81525f6004820152602401610a9c565b6001600160a01b038216611c695760405163ec442f0560e01b81525f6004820152602401610a9c565b6111df8383836124e4565b5f306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611ccc57507f000000000000000000000000000000000000000000000000000000000000000046145b15611cf657507f000000000000000000000000000000000000000000000000000000000000000090565b610f2e604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b5f65ffffffffffff821115611dcf576040516306dfcc6560e41b81526030600482015260248101839052604401610a9c565b5090565b81545f9081816005811115611e2f575f611dec8461280e565b611df69085613977565b5f8881526020902090915081015465ffffffffffff9081169087161015611e1f57809150611e2d565b611e2a81600161398a565b92505b505b5f611e3c878785856128f2565b90508015611e7657611e6087611e53600184613977565b5f91825260209091200190565b54600160301b90046001600160d01b0316611e78565b5f5b979650505050505050565b611e8b612951565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038216611efe57604051634b637e8f60e11b81525f6004820152602401610a9c565b611151825f836124e4565b5f610f2e43611d9d565b6001600160a01b038281165f818152600b602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46111df8183611f7f86612974565b612991565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526111df908490612afa565b6016805460ff60b01b1916600160b01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061201c5761201c61399d565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120b09190613814565b816001815181106120c3576120c361399d565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac9479061211a9085905f908690309042906004016139b1565b5f604051808303815f87803b158015612131575f80fd5b505af1158015612143573d5f803e3d5ffd5b50506016805460ff60b01b1916905550505050565b6013546040515f916001600160a01b0316908390611320565b6001600160a01b0381165f908152600c6020526040812054610da390612b5b565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0381165f908152600a6020526040812054610da3565b612208612b8b565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611eb83390565b6060610f2e7f00000000000000000000000000000000000000000000000000000000000000006008612baf565b6060610f2e7f00000000000000000000000000000000000000000000000000000000000000006009612baf565b6122a2838383612c58565b6001600160a01b0383166122f2575f6122ba60025490565b90506001600160d01b03808211156122ef57604051630e58ae9360e11b81526004810183905260248101829052604401610a9c565b50505b6111df838383612c6b565b80545f90801561232c5761231683611e53600184613977565b54600160301b90046001600160d01b0316610e9b565b5f9392505050565b5f610da3612340611c74565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f8061237088888888612ce0565b9250925092506123808282612da8565b50909695505050505050565b6001600160a01b0382165f908152600a602052604090208054600181019091558181146111df576040516301d4b62360e61b81526001600160a01b038416600482015260248101829052604401610a9c565b604080518082019091525f80825260208201526001600160a01b0383165f908152600c60205260409020610e9b9083612e60565b6001600160a01b03841661243b5760405163e602df0560e01b81525f6004820152602401610a9c565b6001600160a01b03831661246457604051634a1406b160e11b81525f6004820152602401610a9c565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611c1157826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516124d691815260200190565b60405180910390a350505050565b5f81116125335760405162461bcd60e51b815260206004820152601760248201527f416d6f756e742073686f756c64206265206869676865720000000000000000006044820152606401610a9c565b6016545f906001600160a01b03858116911614801561256f57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b1561259e57600e60049054906101000a900461ffff169050600f5f815461259590613a22565b90915550612673565b6016546001600160a01b038581169116148015906125c957506016546001600160a01b038481169116145b156126645750600e54600160301b900461ffff16306001600160a01b0385161461265f57601654600160a81b900460ff168061261257506007546001600160a01b038581169116145b6126515760405162461bcd60e51b815260206004820152601060248201526f14ddd85c081b9bdd081cdd185c9d195960821b6044820152606401610a9c565b60105f815461259590613a22565b612673565b50600e5462010000900461ffff165b5f61268085858585610e32565b90505f61268d8285613977565b6001600160a01b0386165f9081526015602052604090205490915060ff1661274e57600e546127109061ffff166126c360025490565b6126cd91906138bd565b6126d791906138e8565b816126f6876001600160a01b03165f9081526020819052604090205490565b612700919061398a565b111561274e5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c65742062616c616e6365206578636565647320616c6c6f77656400006044820152606401610a9c565b305f90815260208190526040902054601654600160b01b900460ff1615801561278457506016546001600160a01b038781169116145b801561279257506005600f54115b801561279d57505f81115b156127f2576127bf6127ba866127b5846127b5611155565b612ecd565b611fd6565b60135447906001600160a01b0316158015906127e2575067016345785d8a000081115b156127f0576127f081612158565b505b821561280357612803873085612297565b6118f4878784612297565b5f815f0361281d57505f919050565b5f600161282984612ee3565b901c6001901b90506001818481612842576128426138d4565b048201901c9050600181848161285a5761285a6138d4565b048201901c90506001818481612872576128726138d4565b048201901c9050600181848161288a5761288a6138d4565b048201901c905060018184816128a2576128a26138d4565b048201901c905060018184816128ba576128ba6138d4565b048201901c905060018184816128d2576128d26138d4565b048201901c9050610e9b818285816128ec576128ec6138d4565b04612f76565b5f5b81831015612949575f6129078484612f84565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff16111561293557809250612943565b61294081600161398a565b93505b506128f4565b509392505050565b60055460ff16610fc257604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b0381165f90815260208190526040812054610da3565b816001600160a01b0316836001600160a01b0316141580156129b257505f81115b156111df576001600160a01b03831615612a59576001600160a01b0383165f908152600c6020526040812081906129f490611b136129ef86612f9e565b612fd1565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612a4e929190918252602082015260400190565b60405180910390a250505b6001600160a01b038216156111df576001600160a01b0382165f908152600c602052604081208190612a9190611b086129ef86612f9e565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612aeb929190918252602082015260400190565b60405180910390a25050505050565b5f612b0e6001600160a01b03841683613009565b905080515f14158015612b32575080806020019051810190612b30919061382f565b155b156111df57604051635274afe760e01b81526001600160a01b0384166004820152602401610a9c565b5f63ffffffff821115611dcf576040516306dfcc6560e41b81526020600482015260248101839052604401610a9c565b60055460ff1615610fc25760405163d93c066560e01b815260040160405180910390fd5b606060ff8314612bc957612bc283613016565b9050610da3565b818054612bd59061384a565b80601f0160208091040260200160405190810160405280929190818152602001828054612c019061384a565b8015612c4c5780601f10612c2357610100808354040283529160200191612c4c565b820191905f5260205f20905b815481529060010190602001808311612c2f57829003601f168201915b50505050509050610da3565b612c60612b8b565b6111df838383613053565b6001600160a01b038316612c8d57612c8a600d611b086129ef84612f9e565b50505b6001600160a01b038216612caf57612cac600d611b136129ef84612f9e565b50505b6001600160a01b038381165f908152600b60205260408082205485841683529120546111df92918216911683612991565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612d1957505f91506003905082612d9e565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015612d6a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d9557505f925060019150829050612d9e565b92505f91508190505b9450945094915050565b5f826003811115612dbb57612dbb613a3a565b03612dc4575050565b6001826003811115612dd857612dd8613a3a565b03612df65760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115612e0a57612e0a613a3a565b03612e2b5760405163fce698f760e01b815260048101829052602401610a9c565b6003826003811115612e3f57612e3f613a3a565b03611151576040516335e2f38360e21b815260048101829052602401610a9c565b604080518082019091525f8082526020820152825f018263ffffffff1681548110612e8d57612e8d61399d565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b5f81831115612edc5781610e9b565b5090919050565b5f80608083901c15612ef757608092831c92015b604083901c15612f0957604092831c92015b602083901c15612f1b57602092831c92015b601083901c15612f2d57601092831c92015b600883901c15612f3f57600892831c92015b600483901c15612f5157600492831c92015b600283901c15612f6357600292831c92015b600183901c15610da35760010192915050565b5f818310612edc5781610e9b565b5f612f9260028484186138e8565b610e9b9084841661398a565b5f6001600160d01b03821115611dcf576040516306dfcc6560e41b815260d0600482015260248101839052604401610a9c565b5f80612ffc612fde6116b3565b612ff4612fea886122fd565b868863ffffffff16565b879190613179565b915091505b935093915050565b6060610e9b83835f613186565b60605f6130228361321f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b03831661307d578060025f828254613072919061398a565b909155506130ed9050565b6001600160a01b0383165f90815260208190526040902054818110156130cf5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610a9c565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b03821661310957600280548290039055613127565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161316c91815260200190565b60405180910390a3505050565b5f80612ffc858585613246565b6060814710156131ab5760405163cd78605960e01b8152306004820152602401610a9c565b5f80856001600160a01b031684866040516131c69190613a4e565b5f6040518083038185875af1925050503d805f8114613200576040519150601f19603f3d011682016040523d82523d5f602084013e613205565b606091505b50915091506132158683836133bc565b9695505050505050565b5f60ff8216601f811115610da357604051632cd44ac360e21b815260040160405180910390fd5b82545f9081908015613362575f61326287611e53600185613977565b60408051808201909152905465ffffffffffff808216808452600160301b9092046001600160d01b0316602084015291925090871610156132b657604051632520601d60e01b815260040160405180910390fd5b805165ffffffffffff80881691160361330257846132d988611e53600186613977565b80546001600160d01b0392909216600160301b0265ffffffffffff909216919091179055613352565b6040805180820190915265ffffffffffff80881682526001600160d01b0380881660208085019182528b54600181018d555f8d81529190912094519151909216600160301b029216919091179101555b6020015192508391506130019050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a815291822095519251909316600160301b029190931617920191909155905081613001565b6060826133d1576133cc82613418565b610e9b565b81511580156133e857506001600160a01b0384163b155b1561341157604051639996b31560e01b81526001600160a01b0385166004820152602401610a9c565b5080610e9b565b8051156134285780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f5b8381101561345b578181015183820152602001613443565b50505f910152565b5f815180845261347a816020860160208601613441565b601f01601f19169290920160200192915050565b602081525f610e9b6020830184613463565b6001600160a01b0381168114610fce575f80fd5b5f80604083850312156134c5575f80fd5b82356134d0816134a0565b946020939093013593505050565b803561ffff811681146134ef575f80fd5b919050565b5f60208284031215613504575f80fd5b610e9b826134de565b5f805f8060808587031215613520575f80fd5b843561352b816134a0565b9350602085013561353b816134a0565b925060408501359150613550606086016134de565b905092959194509250565b5f805f6060848603121561356d575f80fd5b8335613578816134a0565b92506020840135613588816134a0565b929592945050506040919091013590565b5f602082840312156135a9575f80fd5b5035919050565b8015158114610fce575f80fd5b5f80604083850312156135ce575f80fd5b82356135d9816134a0565b915060208301356135e9816135b0565b809150509250929050565b5f60208284031215613604575f80fd5b8135610e9b816134a0565b5f805f60608486031215613621575f80fd5b833561362c816134a0565b9250602084013591506040840135613643816134a0565b809150509250925092565b60ff60f81b881681525f602060e0602084015261366e60e084018a613463565b8381036040850152613680818a613463565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825260208088019350909101905f5b818110156136d3578351835292840192918401916001016136b7565b50909c9b505050505050505050505050565b803560ff811681146134ef575f80fd5b5f805f805f8060c0878903121561370a575f80fd5b8635613715816134a0565b95506020870135945060408701359350613731606088016136e5565b92506080870135915060a087013590509295509295509295565b5f805f805f805f60e0888a031215613761575f80fd5b873561376c816134a0565b9650602088013561377c816134a0565b95506040880135945060608801359350613798608089016136e5565b925060a0880135915060c0880135905092959891949750929550565b5f80604083850312156137c5575f80fd5b82356137d0816134a0565b915060208301356135e9816134a0565b5f80604083850312156137f1575f80fd5b82356137fc816134a0565b9150602083013563ffffffff811681146135e9575f80fd5b5f60208284031215613824575f80fd5b8151610e9b816134a0565b5f6020828403121561383f575f80fd5b8151610e9b816135b0565b600181811c9082168061385e57607f821691505b60208210810361387c57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600d908201526c46656520746f6f206c6172676560981b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610da357610da36138a9565b634e487b7160e01b5f52601260045260245ffd5b5f8261390257634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b6001600160d01b03818116838216019080821115613950576139506138a9565b5092915050565b6001600160d01b03828116828216039080821115613950576139506138a9565b81810381811115610da357610da36138a9565b80820180821115610da357610da36138a9565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015613a015784516001600160a01b0316835293830193918301916001016139dc565b50506001600160a01b03969096166060850152505050608001529392505050565b5f60018201613a3357613a336138a9565b5060010190565b634e487b7160e01b5f52602160045260245ffd5b5f8251613a5f818460208701613441565b919091019291505056fea2646970667358221220b91ba5af777c89c605a700dffeeec5254ea61c19ca073fada27eab1acf57cc2f64736f6c63430008180033dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7240000000000000000000000000b933481431b487f369f01291d2f2bc99720e5b9