[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_totalSupply", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "main", "type": "uint256" }, { "internalType": "uint256", "name": "proof", "type": "uint256" }, { "internalType": "uint256", "name": "dev", "type": "uint256" }, { "internalType": "uint256", "name": "total", "type": "uint256" } ], "internalType": "struct IProof.FeeInfo", "name": "_buyFees", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "main", "type": "uint256" }, { "internalType": "uint256", "name": "proof", "type": "uint256" }, { "internalType": "uint256", "name": "dev", "type": "uint256" }, { "internalType": "uint256", "name": "total", "type": "uint256" } ], "internalType": "struct IProof.FeeInfo", "name": "_sellFees", "type": "tuple" }, { "internalType": "uint256", "name": "_percentToLP", "type": "uint256" }, { "internalType": "uint256", "name": "_lpLockDuration", "type": "uint256" }, { "internalType": "address", "name": "_mainWallet", "type": "address" }, { "internalType": "address", "name": "_devWallet", "type": "address" }, { "components": [ { "internalType": "address", "name": "locker", "type": "address" }, { "internalType": "address", "name": "router", "type": "address" }, { "internalType": "address", "name": "proofWallet", "type": "address" }, { "internalType": "address", "name": "proofStaking", "type": "address" } ], "internalType": "struct IProof.ProofInfo", "name": "_addresses", "type": "tuple" } ], "stateMutability": "payable", "type": "constructor" }, { "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": [], "name": "ExceedsMaxTxAmount", "type": "error" }, { "inputs": [], "name": "ExceedsMaxWalletAmount", "type": "error" }, { "inputs": [], "name": "InvalidConfiguration", "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": "TradingNotEnabled", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "currentBlock", "type": "uint256" }, { "internalType": "uint256", "name": "delayedUntil", "type": "uint256" } ], "name": "TransferDelayEnabled", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "FeesEnabledUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "minTokensBeforeSwap", "type": "uint256" } ], "name": "MinTokensBeforeSwapUpdated", "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": "uint256", "name": "tokensAutoLiq", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethAutoLiq", "type": "uint256" } ], "name": "SwapAndLiquify", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "SwapAndLiquifyEnabledUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "SwapEnabledUpdated", "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" }, { "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": [], "name": "antiSnipeEndBlock", "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": [], "name": "buyFees", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "main", "type": "uint256" }, { "internalType": "uint256", "name": "proof", "type": "uint256" }, { "internalType": "uint256", "name": "dev", "type": "uint256" }, { "internalType": "uint256", "name": "total", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "liquidityBuy", "type": "uint256" }, { "internalType": "uint256", "name": "mainBuy", "type": "uint256" }, { "internalType": "uint256", "name": "devBuy", "type": "uint256" }, { "internalType": "uint256", "name": "liquiditySell", "type": "uint256" }, { "internalType": "uint256", "name": "mainSell", "type": "uint256" }, { "internalType": "uint256", "name": "devSell", "type": "uint256" } ], "name": "changeFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "devWallet", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeTokens", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "main", "type": "uint256" }, { "internalType": "uint256", "name": "proof", "type": "uint256" }, { "internalType": "uint256", "name": "dev", "type": "uint256" }, { "internalType": "uint256", "name": "total", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCirculatingSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isAntiSnipeActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isTradingEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "launch", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "launchedAt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockerAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpLockDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mainWallet", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTxAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxWallet", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxWalletChanged", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proofFeeReduced", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proofFeeRemoved", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proofStaking", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proofWallet", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "restrictWhales", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sellFees", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" }, { "internalType": "uint256", "name": "main", "type": "uint256" }, { "internalType": "uint256", "name": "proof", "type": "uint256" }, { "internalType": "uint256", "name": "dev", "type": "uint256" }, { "internalType": "uint256", "name": "total", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newWallet", "type": "address" } ], "name": "setDevWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "value", "type": "bool" } ], "name": "setFeeExempt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "setFeeExempt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newWallet", "type": "address" } ], "name": "setMainWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTxAmt", "type": "uint256" } ], "name": "setMaxTxAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxWalletSize", "type": "uint256" } ], "name": "setMaxWalletSize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_enabled", "type": "bool" } ], "name": "setRestrictWhalesEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_enabled", "type": "bool" } ], "name": "setSwapAndLiquifyEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "setSwapAtAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "setTxLimitExempt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "value", "type": "bool" } ], "name": "setTxLimitExempt", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapTokensAtAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapping", "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": "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": "uniswapV2Router", "outputs": [ { "internalType": "contract IUniswapV2Router02", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "userInfo", "outputs": [ { "internalType": "bool", "name": "isFeeExempt", "type": "bool" }, { "internalType": "bool", "name": "isTxLimitExempt", "type": "bool" }, { "internalType": "uint256", "name": "lastTxBlock", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdrawStuckTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60c06040526001600a556001600b5f6101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506040516155bd3803806155bd833981810160405281019061005f9190610dad565b338a8a816003908161007191906110c6565b50806004908161008191906110c6565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100f4575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016100eb91906111a4565b60405180910390fd5b6101038161064960201b60201c565b5062278d0084108061011c5750670de0b6b3a764000034105b806101275750604685105b1561015e576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f015160245f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806040015160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806060015160095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f816020015190508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d291906111bd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035b91906111bd565b6040518363ffffffff1660e01b81526004016103789291906111e8565b6020604051808303815f875af1158015610394573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103b891906111bd565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505f6064878b6103fa919061123c565b61040491906112aa565b90506104175f308361070c60201b60201c565b856023819055506103e860058b61042e919061123c565b61043891906112aa565b601f81905550610fa060058b61044e919061123c565b61045891906112aa565b6020819055506103e860058b61046e919061123c565b61047891906112aa565b60218190555061048e898961092560201b60201c565b8460065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405180606001604052806001151581526020016001151581526020015f815250600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548160ff021916908315150217905550604082015181600101559050506001600f5f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0160016101000a81548160ff0219169083151502179055506106385f610621610aa960201b60201c565b838d61062d91906112da565b61070c60201b60201c565b50505050505050505050505061139d565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361075c578060025f828254610750919061130d565b9250508190555061082a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156107e5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016107dc9392919061134f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610871578060025f82825403925050819055506108bb565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516109189190611384565b60405180910390a3505050565b81606001518260200151835f015161093d919061130d565b610947919061130d565b8260800181815250505f82608001510361096a575f826040018181525050610988565b816040015182608001818151610980919061130d565b915081815250505b80606001518160200151825f01516109a0919061130d565b6109aa919061130d565b8160800181815250505f8160800151036109cd575f8160400181815250506109eb565b8060400151816080018181516109e3919061130d565b915081815250505b600c82608001511180610a02575060118160800151115b15610a39576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160105f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508060155f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b3082610aea565b810181811067ffffffffffffffff82111715610b4f57610b4e610afa565b5b80604052505050565b5f610b61610ad1565b9050610b6d8282610b27565b919050565b5f67ffffffffffffffff821115610b8c57610b8b610afa565b5b610b9582610aea565b9050602081019050919050565b8281835e5f83830152505050565b5f610bc2610bbd84610b72565b610b58565b905082815260208101848484011115610bde57610bdd610ae6565b5b610be9848285610ba2565b509392505050565b5f82601f830112610c0557610c04610ae2565b5b8151610c15848260208601610bb0565b91505092915050565b5f819050919050565b610c3081610c1e565b8114610c3a575f80fd5b50565b5f81519050610c4b81610c27565b92915050565b5f80fd5b5f60a08284031215610c6a57610c69610c51565b5b610c7460a0610b58565b90505f610c8384828501610c3d565b5f830152506020610c9684828501610c3d565b6020830152506040610caa84828501610c3d565b6040830152506060610cbe84828501610c3d565b6060830152506080610cd284828501610c3d565b60808301525092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610d0782610cde565b9050919050565b610d1781610cfd565b8114610d21575f80fd5b50565b5f81519050610d3281610d0e565b92915050565b5f60808284031215610d4d57610d4c610c51565b5b610d576080610b58565b90505f610d6684828501610d24565b5f830152506020610d7984828501610d24565b6020830152506040610d8d84828501610d24565b6040830152506060610da184828501610d24565b60608301525092915050565b5f805f805f805f805f806102a08b8d031215610dcc57610dcb610ada565b5b5f8b015167ffffffffffffffff811115610de957610de8610ade565b5b610df58d828e01610bf1565b9a505060208b015167ffffffffffffffff811115610e1657610e15610ade565b5b610e228d828e01610bf1565b9950506040610e338d828e01610c3d565b9850506060610e448d828e01610c55565b975050610100610e568d828e01610c55565b9650506101a0610e688d828e01610c3d565b9550506101c0610e7a8d828e01610c3d565b9450506101e0610e8c8d828e01610d24565b935050610200610e9e8d828e01610d24565b925050610220610eb08d828e01610d38565b9150509295989b9194979a5092959850565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610f1057607f821691505b602082108103610f2357610f22610ecc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610f857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610f4a565b610f8f8683610f4a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f610fca610fc5610fc084610c1e565b610fa7565b610c1e565b9050919050565b5f819050919050565b610fe383610fb0565b610ff7610fef82610fd1565b848454610f56565b825550505050565b5f90565b61100b610fff565b611016818484610fda565b505050565b5b818110156110395761102e5f82611003565b60018101905061101c565b5050565b601f82111561107e5761104f81610f29565b61105884610f3b565b81016020851015611067578190505b61107b61107385610f3b565b83018261101b565b50505b505050565b5f82821c905092915050565b5f61109e5f1984600802611083565b1980831691505092915050565b5f6110b6838361108f565b9150826002028217905092915050565b6110cf82610ec2565b67ffffffffffffffff8111156110e8576110e7610afa565b5b6110f28254610ef9565b6110fd82828561103d565b5f60209050601f83116001811461112e575f841561111c578287015190505b61112685826110ab565b86555061118d565b601f19841661113c86610f29565b5f5b828110156111635784890151825560018201915060208501945060208101905061113e565b86831015611180578489015161117c601f89168261108f565b8355505b6001600288020188555050505b505050505050565b61119e81610cfd565b82525050565b5f6020820190506111b75f830184611195565b92915050565b5f602082840312156111d2576111d1610ada565b5b5f6111df84828501610d24565b91505092915050565b5f6040820190506111fb5f830185611195565b6112086020830184611195565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61124682610c1e565b915061125183610c1e565b925082820261125f81610c1e565b915082820484148315176112765761127561120f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6112b482610c1e565b91506112bf83610c1e565b9250826112cf576112ce61127d565b5b828204905092915050565b5f6112e482610c1e565b91506112ef83610c1e565b92508282039050818111156113075761130661120f565b5b92915050565b5f61131782610c1e565b915061132283610c1e565b925082820190508082111561133a5761133961120f565b5b92915050565b61134981610c1e565b82525050565b5f6060820190506113625f830186611195565b61136f6020830185611340565b61137c6040830184611340565b949350505050565b5f6020820190506113975f830184611340565b92915050565b60805160a0516141b261140b5f395f8181610d7001528181610e0a01528181610f0501528181611572015281816127be0152818161290601528181612b2e0152612bce01525f8181610d090152818161107001528181611c0601528181613367015261344201526141b25ff3fe608060405260043610610353575f3560e01c806388cda873116101c5578063cb29813c116100f6578063ea1644d511610094578063f2fde38b1161006e578063f2fde38b14610bc4578063f8b45b0514610bec578063f8f9892814610c16578063f954662114610c3e5761035a565b8063ea1644d514610b5e578063ea8a1af014610b86578063ec28438a14610b9c5761035a565b8063de35eb24116100d0578063de35eb2414610aae578063e0f3ccf514610ad8578063e2f4560514610b06578063e4748b9e14610b305761035a565b8063cb29813c14610a22578063d0a5eb4e14610a4a578063dd62ed3e14610a725761035a565b8063a8aa1b3111610163578063baae06661161013d578063baae06661461097a578063bee0d6ad146109a2578063bf56b371146109d0578063c49b9a80146109fa5761035a565b8063a8aa1b31146108ea578063a9059cbb14610914578063acb52a98146109505761035a565b80638da5cb5b1161019f5780638da5cb5b146108445780638ea5220f1461086e5780638ebfc7961461089857806395d89b41146108c05761035a565b806388cda873146107c85780638c0b5e22146107f25780638d7a8ba71461081c5761035a565b80633675f29b1161029f57806367dd01791161023d578063715018a611610217578063715018a6146107485780638183b3c81461075e578063838420131461077457806387f86db71461079e5761035a565b806367dd0179146106b85780636ddd1713146106e257806370a082311461070c5761035a565b806354fd4d501161027957806354fd4d50146106145780635ace11221461063e5780636101f1f8146106665780636402511e146106905761035a565b80633675f29b1461059657806344de2e4c146105c05780634a829e79146105ea5761035a565b806318160ddd1161030c57806323b62b75116102e657806323b62b75146104dc57806323b872dd146105065780632b112e4914610542578063313ce5671461056c5761035a565b806318160ddd1461044c5780631959a002146104765780631f53ac02146104b45761035a565b806301339c211461035e578063064a59d01461036857806306fdde0314610392578063095ea7b3146103bc5780631694505e146103f85780631732cded146104225761035a565b3661035a57005b5f80fd5b610366610c68565b005b348015610373575f80fd5b5061037c610fa9565b6040516103899190613527565b60405180910390f35b34801561039d575f80fd5b506103a6610fbc565b6040516103b391906135b0565b60405180910390f35b3480156103c7575f80fd5b506103e260048036038101906103dd919061366e565b61104c565b6040516103ef9190613527565b60405180910390f35b348015610403575f80fd5b5061040c61106e565b6040516104199190613707565b60405180910390f35b34801561042d575f80fd5b50610436611092565b604051610443919061372f565b60405180910390f35b348015610457575f80fd5b50610460611098565b60405161046d919061372f565b60405180910390f35b348015610481575f80fd5b5061049c60048036038101906104979190613748565b6110a1565b6040516104ab93929190613773565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190613748565b6110df565b005b3480156104e7575f80fd5b506104f061112a565b6040516104fd91906137c8565b60405180910390f35b348015610511575f80fd5b5061052c600480360381019061052791906137e1565b61114f565b6040516105399190613527565b60405180910390f35b34801561054d575f80fd5b5061055661117d565b604051610563919061372f565b60405180910390f35b348015610577575f80fd5b506105806111a0565b60405161058d919061384c565b60405180910390f35b3480156105a1575f80fd5b506105aa6111a8565b6040516105b79190613874565b60405180910390f35b3480156105cb575f80fd5b506105d46111cd565b6040516105e19190613527565b60405180910390f35b3480156105f5575f80fd5b506105fe6111e0565b60405161060b9190613527565b60405180910390f35b34801561061f575f80fd5b506106286111f3565b604051610635919061384c565b60405180910390f35b348015610649575f80fd5b50610664600480360381019061065f91906139cd565b6111fb565b005b348015610671575f80fd5b5061067a611296565b60405161068791906137c8565b60405180910390f35b34801561069b575f80fd5b506106b660048036038101906106b19190613a14565b6112bb565b005b3480156106c3575f80fd5b506106cc6112cd565b6040516106d991906137c8565b60405180910390f35b3480156106ed575f80fd5b506106f66112f2565b6040516107039190613527565b60405180910390f35b348015610717575f80fd5b50610732600480360381019061072d9190613748565b611304565b60405161073f919061372f565b60405180910390f35b348015610753575f80fd5b5061075c611349565b005b348015610769575f80fd5b5061077261135c565b005b34801561077f575f80fd5b50610788611390565b6040516107959190613527565b60405180910390f35b3480156107a9575f80fd5b506107b26113a3565b6040516107bf9190613527565b60405180910390f35b3480156107d3575f80fd5b506107dc6113b6565b6040516107e99190613527565b60405180910390f35b3480156107fd575f80fd5b506108066113c8565b604051610813919061372f565b60405180910390f35b348015610827575f80fd5b50610842600480360381019061083d9190613a69565b6113ce565b005b34801561084f575f80fd5b50610858611431565b6040516108659190613874565b60405180910390f35b348015610879575f80fd5b50610882611459565b60405161088f91906137c8565b60405180910390f35b3480156108a3575f80fd5b506108be60048036038101906108b99190613a69565b61147e565b005b3480156108cb575f80fd5b506108d46114e0565b6040516108e191906135b0565b60405180910390f35b3480156108f5575f80fd5b506108fe611570565b60405161090b9190613874565b60405180910390f35b34801561091f575f80fd5b5061093a6004803603810190610935919061366e565b611594565b6040516109479190613527565b60405180910390f35b34801561095b575f80fd5b506109646115b6565b604051610971919061372f565b60405180910390f35b348015610985575f80fd5b506109a0600480360381019061099b9190613aa7565b6115bc565b005b3480156109ad575f80fd5b506109b66115e1565b6040516109c7959493929190613ad2565b60405180910390f35b3480156109db575f80fd5b506109e4611604565b6040516109f1919061372f565b60405180910390f35b348015610a05575f80fd5b50610a206004803603810190610a1b9190613aa7565b61160a565b005b348015610a2d575f80fd5b50610a486004803603810190610a439190613b23565b611665565b005b348015610a55575f80fd5b50610a706004803603810190610a6b9190613748565b6116f7565b005b348015610a7d575f80fd5b50610a986004803603810190610a939190613bac565b611742565b604051610aa5919061372f565b60405180910390f35b348015610ab9575f80fd5b50610ac26117c4565b604051610acf919061372f565b60405180910390f35b348015610ae3575f80fd5b50610aec6117ca565b604051610afd959493929190613ad2565b60405180910390f35b348015610b11575f80fd5b50610b1a6117ed565b604051610b27919061372f565b60405180910390f35b348015610b3b575f80fd5b50610b446117f3565b604051610b55959493929190613ad2565b60405180910390f35b348015610b69575f80fd5b50610b846004803603810190610b7f9190613a14565b611816565b005b348015610b91575f80fd5b50610b9a6118d2565b005b348015610ba7575f80fd5b50610bc26004803603810190610bbd9190613a14565b61199e565b005b348015610bcf575f80fd5b50610bea6004803603810190610be59190613748565b611a3f565b005b348015610bf7575f80fd5b50610c00611ac3565b604051610c0d919061372f565b60405180910390f35b348015610c21575f80fd5b50610c3c6004803603810190610c3791906139cd565b611ac9565b005b348015610c49575f80fd5b50610c52611b63565b604051610c5f919061372f565b60405180910390f35b610c70611b69565b6002600a819055505f600d5414610cb3576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a43610cc09190613c17565b600c819055506001600b60036101000a81548160ff02191690831515021790555042600d819055506001600b60016101000a81548160ff021916908315150217905550610d4e307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611bf0565b610d6c610d5a30611304565b3447610d669190613c4a565b30611c02565b505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610dc79190613874565b602060405180830381865afa158015610de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e069190613c91565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663095ea7b360245f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610e84929190613cbc565b6020604051808303815f875af1158015610ea0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec49190613cf7565b5060245f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635af06fed347f0000000000000000000000000000000000000000000000000000000000000000338560235442610f349190613c17565b5f806040518863ffffffff1660e01b8152600401610f5796959493929190613d22565b60206040518083038185885af1158015610f73573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610f989190613c91565b602281905550506001600a81905550565b600b60019054906101000a900460ff1681565b606060038054610fcb90613dae565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff790613dae565b80156110425780601f1061101957610100808354040283529160200191611042565b820191905f5260205f20905b81548152906001019060200180831161102557829003601f168201915b5050505050905090565b5f80611056611cb8565b9050611063818585611bf0565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a5481565b5f600254905090565b600f602052805f5260405f205f91509050805f015f9054906101000a900460ff1690805f0160019054906101000a900460ff16908060010154905083565b6110e7611b69565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80611159611cb8565b9050611166858285611cbf565b611171858585611d51565b60019150509392505050565b5f61118961dead611304565b611191611098565b61119b9190613c4a565b905090565b5f6009905090565b60245f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60029054906101000a900460ff1681565b600e60029054906101000a900460ff1681565b5f6001905090565b611203611b69565b5f815190505f5b81811015611291576001600f5f85848151811061122a57611229613dde565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0160016101000a81548160ff021916908315150217905550808060010191505061120a565b505050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112c3611b69565b8060208190555050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611351611b69565b61135a5f611e41565b565b611364611b69565b61138e30611370611cb8565b601a6004015461137f30611304565b6113899190613c4a565b611f04565b565b600e60019054906101000a900460ff1681565b600b60039054906101000a900460ff1681565b600e5f9054906101000a900460ff1681565b601f5481565b6113d6611b69565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0160016101000a81548160ff0219169083151502179055505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611486611b69565b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055505050565b6060600480546114ef90613dae565b80601f016020809104026020016040519081016040528092919081815260200182805461151b90613dae565b80156115665780601f1061153d57610100808354040283529160200191611566565b820191905f5260205f20905b81548152906001019060200180831161154957829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f8061159e611cb8565b90506115ab818585611d51565b600191505092915050565b600c5481565b6115c4611b69565b80600b60026101000a81548160ff02191690831515021790555050565b601a805f0154908060010154908060020154908060030154908060040154905085565b600d5481565b611612611b69565b80600b5f6101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161165a9190613527565b60405180910390a150565b61166d611b69565b6116756134e3565b86815f018181525050858160200181815250508481606001818152505061169a6134e3565b84815f01818152505083816020018181525050828160600181815250505f600d54036116c8576002806116d1565b6116d061211d565b5b8360400183604001828152508281525050506116ed82826121a1565b5050505050505050565b6116ff611b69565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60235481565b6015805f0154908060010154908060020154908060030154908060040154905085565b60205481565b6010805f0154908060010154908060020154908060030154908060040154905085565b61181e611b69565b5f600d54148061184d57506103e86005611836611098565b6118409190613e0b565b61184a9190613e79565b81105b8061187657506064600361185f611098565b6118699190613e0b565b6118739190613e79565b81115b156118ad576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806021819055506001600e60026101000a81548160ff02191690831515021790555050565b6118da611b69565b5f600d5414611915576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192f30611921611431565b61192a30611304565b611f04565b611937611431565b73ffffffffffffffffffffffffffffffffffffffff164760405161195a90613ed6565b5f6040518083038185875af1925050503d805f8114611994576040519150601f19603f3d011682016040523d82523d5f602084013e611999565b606091505b505050565b6119a6611b69565b5f600d5414806119d557506103e860056119be611098565b6119c89190613e0b565b6119d29190613e79565b81105b806119fe5750606460036119e7611098565b6119f19190613e0b565b6119fb9190613e79565b81115b15611a35576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601f8190555050565b611a47611b69565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab7575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611aae9190613874565b60405180910390fd5b611ac081611e41565b50565b60215481565b611ad1611b69565b5f815190505f5b81811015611b5e576001600f5f858481518110611af857611af7613dde565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015f6101000a81548160ff0219169083151502179055508080600101915050611ad8565b505050565b60225481565b611b71611cb8565b73ffffffffffffffffffffffffffffffffffffffff16611b8f611431565b73ffffffffffffffffffffffffffffffffffffffff1614611bee57611bb2611cb8565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611be59190613874565b60405180910390fd5b565b611bfd8383836001612325565b505050565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198530885f8089426040518863ffffffff1660e01b8152600401611c6896959493929190613f23565b60606040518083038185885af1158015611c84573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ca99190613f82565b50509050809150509392505050565b5f33905090565b5f611cca8484611742565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611d4b5781811015611d3c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611d3393929190613fd2565b60405180910390fd5b611d4a84848484035f612325565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dc1575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611db89190613874565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e31575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611e289190613874565b60405180910390fd5b611e3c8383836124f4565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f54578060025f828254611f489190613c17565b92505081905550612022565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611fdd578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611fd493929190613fd2565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612069578060025f82825403925050819055506120b3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612110919061372f565b60405180910390a3505050565b5f805f600d544261212e9190613c4a565b90506228de80811115612162576001600e60016101000a81548160ff0219169083151502179055505f80925092505061219d565b62015180811115612194576001600e5f6101000a81548160ff021916908315150217905550600180925092505061219d565b60028092509250505b9091565b81606001518260200151835f01516121b99190613c17565b6121c39190613c17565b8260800181815250505f8260800151036121e6575f826040018181525050612204565b8160400151826080018181516121fc9190613c17565b915081815250505b80606001518160200151825f015161221c9190613c17565b6122269190613c17565b8160800181815250505f816080015103612249575f816040018181525050612267565b80604001518160800181815161225f9190613c17565b915081815250505b600c8260800151118061227e575060118160800151115b156122b5576040517fc52a9bd300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160105f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050508060155f820151815f0155602082015181600101556040820151816002015560608201518160030155608082015181600401559050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612395575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161238c9190613874565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612405575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016123fc9190613874565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156124ee578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516124e5919061372f565b60405180910390a35b50505050565b600b60019054906101000a900460ff1661253a576040517f12f1f92300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f600f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090506002600a5414806125fd57506125ce611431565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061263a575061260b611431565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061264457505f83145b1561265b57612654858585611f04565b5050612c9f565b600b60039054906101000a900460ff161561274157600c54431015612725575f600f5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f600182600101546126cc9190613c17565b9050438111156127155743816040517f4a24f3d200000000000000000000000000000000000000000000000000000000815260040161270c929190614007565b60405180910390fd5b4382600101819055505050612740565b5f600b60036101000a81548160ff0219169083151502179055505b5b600e60029054906101000a900460ff1615801561276c5750610258600d546127699190613c17565b42115b156127a757606461277b611098565b6127859190613e79565b6021819055506001600e60026101000a81548160ff0219169083151502179055505b600b60029054906101000a900460ff16156128d3577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156128255750815f0160019054906101000a900460ff16155b80156128325750601f5483115b15612869576040517fa504b6d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f0160019054906101000a900460ff1615801561289b575060215461288e85611304565b846128999190613c17565b115b156128d2576040517ffd42866100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f601a6004015490505f60205482101590508080156128fd5750600b5f9054906101000a900460ff165b801561295557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b156129675761296682602054612ca4565b5b835f015f9054906101000a900460ff161580156129915750825f015f9054906101000a900460ff16155b15612c8f575f601090505f60159050600e60019054906101000a900460ff16612b2b575f600d54426129c39190613c4a565b9050600e5f9054906101000a900460ff161580156129e357506201518081115b15612ab3575f836002015484600401546129fd9190613c4a565b90505f8103612a1d575f84600401819055505f8460020181905550612a3d565b600181612a2a9190613c17565b8460040181905550600184600201819055505b5f83600201548460040154612a529190613c4a565b90505f8103612a72575f84600401819055505f8460020181905550612a92565b600181612a7f9190613c17565b8460040181905550600184600201819055505b6001600e5f6101000a81548160ff0219169083151502179055505050612b29565b6228de80811115612b28578260020154836004015f828254612ad59190613c4a565b925050819055508160020154826004015f828254612af39190613c4a565b925050819055505f83600201819055505f82600201819055506001600e60016101000a81548160ff0219169083151502179055505b5b505b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1603612bcc57612bc5826040518060a00160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505089613196565b9050612c69565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1603612c6857612c65836040518060a00160405290815f820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505089613196565b90505b5b5f811115612c8b578088612c7d9190613c4a565b9750612c8a8a3083611f04565b5b5050505b612c9a878787611f04565b505050505b505050565b6002600a819055505f601a90505f6040518060a0016040528085845f015486612ccd9190613e0b565b612cd79190613e79565b815260200185846001015486612ced9190613e0b565b612cf79190613e79565b815260200185846002015486612d0d9190613e0b565b612d179190613e79565b815260200185846003015486612d2d9190613e0b565b612d379190613e79565b81526020018481525090505f6002825f0151612d539190613e79565b90505f81835f0151612d659190613c4a565b90505f8186612d749190613c4a565b90505f612d80826132c5565b90505f6040518060a001604052805f815260200184886020015185612da59190613e0b565b612daf9190613e79565b815260200184886040015185612dc59190613e0b565b612dcf9190613e79565b815260200184886060015185612de59190613e0b565b612def9190613e79565b81526020015f81525090505f81602001511115612e925760065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160200151604051612e4f90613ed6565b5f6040518083038185875af1925050503d805f8114612e89576040519150601f19603f3d011682016040523d82523d5f602084013e612e8e565b606091505b5050505b5f81606001511115612f2a5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160600151604051612ee790613ed6565b5f6040518083038185875af1925050503d805f8114612f21576040519150601f19603f3d011682016040523d82523d5f602084013e612f26565b606091505b5050505b5f81604001511115613069575f60028260400151612f489190613e79565b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612f8f90613ed6565b5f6040518083038185875af1925050503d805f8114612fc9576040519150601f19603f3d011682016040523d82523d5f602084013e612fce565b606091505b50505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168183604001516130199190613c4a565b60405161302590613ed6565b5f6040518083038185875af1925050503d805f811461305f576040519150601f19603f3d011682016040523d82523d5f602084013e613064565b606091505b505050505b47815f0181815250505f808511801561308457505f825f0151115b156130d85761309985835f015161dead611c02565b90507f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f838148685835f01516040516130cf929190614007565b60405180910390a15b80856130e49190613c4a565b875f01516130f29190613c4a565b885f015f8282546131039190613c4a565b925050819055508660200151886001015f8282546131219190613c4a565b925050819055508660400151886002015f82825461313f9190613c4a565b925050819055508660600151886003015f82825461315d9190613c4a565b925050819055508660800151886004015f82825461317b9190613c4a565b9250508190555050505050505050506001600a819055505050565b5f808360800151146132bf5760648360800151836131b49190613e0b565b6131be9190613e79565b90505f601a90508360800151845f0151836131d99190613e0b565b6131e39190613e79565b815f015f8282546131f49190613c17565b9250508190555083608001518460200151836132109190613e0b565b61321a9190613e79565b816001015f82825461322c9190613c17565b9250508190555083608001518460400151836132489190613e0b565b6132529190613e79565b816002015f8282546132649190613c17565b9250508190555083608001518460600151836132809190613e0b565b61328a9190613e79565b816003015f82825461329c9190613c17565b9250508190555081816004015f8282546132b69190613c17565b92505081905550505b92915050565b5f804790505f600267ffffffffffffffff8111156132e6576132e5613891565b5b6040519080825280602002602001820160405280156133145781602001602082028036833780820191505090505b50905030815f8151811061332b5761332a613dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133f29190614042565b8160018151811061340657613405613dde565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8430426040518663ffffffff1660e01b81526004016134a1959493929190614124565b5f604051808303815f87803b1580156134b8575f80fd5b505af11580156134ca573d5f803e3d5ffd5b5050505081476134da9190613c4a565b92505050919050565b6040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b5f8115159050919050565b6135218161350d565b82525050565b5f60208201905061353a5f830184613518565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61358282613540565b61358c818561354a565b935061359c81856020860161355a565b6135a581613568565b840191505092915050565b5f6020820190508181035f8301526135c88184613578565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61360a826135e1565b9050919050565b61361a81613600565b8114613624575f80fd5b50565b5f8135905061363581613611565b92915050565b5f819050919050565b61364d8161363b565b8114613657575f80fd5b50565b5f8135905061366881613644565b92915050565b5f8060408385031215613684576136836135d9565b5b5f61369185828601613627565b92505060206136a28582860161365a565b9150509250929050565b5f819050919050565b5f6136cf6136ca6136c5846135e1565b6136ac565b6135e1565b9050919050565b5f6136e0826136b5565b9050919050565b5f6136f1826136d6565b9050919050565b613701816136e7565b82525050565b5f60208201905061371a5f8301846136f8565b92915050565b6137298161363b565b82525050565b5f6020820190506137425f830184613720565b92915050565b5f6020828403121561375d5761375c6135d9565b5b5f61376a84828501613627565b91505092915050565b5f6060820190506137865f830186613518565b6137936020830185613518565b6137a06040830184613720565b949350505050565b5f6137b2826135e1565b9050919050565b6137c2816137a8565b82525050565b5f6020820190506137db5f8301846137b9565b92915050565b5f805f606084860312156137f8576137f76135d9565b5b5f61380586828701613627565b935050602061381686828701613627565b92505060406138278682870161365a565b9150509250925092565b5f60ff82169050919050565b61384681613831565b82525050565b5f60208201905061385f5f83018461383d565b92915050565b61386e81613600565b82525050565b5f6020820190506138875f830184613865565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6138c782613568565b810181811067ffffffffffffffff821117156138e6576138e5613891565b5b80604052505050565b5f6138f86135d0565b905061390482826138be565b919050565b5f67ffffffffffffffff82111561392357613922613891565b5b602082029050602081019050919050565b5f80fd5b5f61394a61394584613909565b6138ef565b9050808382526020820190506020840283018581111561396d5761396c613934565b5b835b8181101561399657806139828882613627565b84526020840193505060208101905061396f565b5050509392505050565b5f82601f8301126139b4576139b361388d565b5b81356139c4848260208601613938565b91505092915050565b5f602082840312156139e2576139e16135d9565b5b5f82013567ffffffffffffffff8111156139ff576139fe6135dd565b5b613a0b848285016139a0565b91505092915050565b5f60208284031215613a2957613a286135d9565b5b5f613a368482850161365a565b91505092915050565b613a488161350d565b8114613a52575f80fd5b50565b5f81359050613a6381613a3f565b92915050565b5f8060408385031215613a7f57613a7e6135d9565b5b5f613a8c85828601613627565b9250506020613a9d85828601613a55565b9150509250929050565b5f60208284031215613abc57613abb6135d9565b5b5f613ac984828501613a55565b91505092915050565b5f60a082019050613ae55f830188613720565b613af26020830187613720565b613aff6040830186613720565b613b0c6060830185613720565b613b196080830184613720565b9695505050505050565b5f805f805f8060c08789031215613b3d57613b3c6135d9565b5b5f613b4a89828a0161365a565b9650506020613b5b89828a0161365a565b9550506040613b6c89828a0161365a565b9450506060613b7d89828a0161365a565b9350506080613b8e89828a0161365a565b92505060a0613b9f89828a0161365a565b9150509295509295509295565b5f8060408385031215613bc257613bc16135d9565b5b5f613bcf85828601613627565b9250506020613be085828601613627565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613c218261363b565b9150613c2c8361363b565b9250828201905080821115613c4457613c43613bea565b5b92915050565b5f613c548261363b565b9150613c5f8361363b565b9250828203905081811115613c7757613c76613bea565b5b92915050565b5f81519050613c8b81613644565b92915050565b5f60208284031215613ca657613ca56135d9565b5b5f613cb384828501613c7d565b91505092915050565b5f604082019050613ccf5f830185613865565b613cdc6020830184613720565b9392505050565b5f81519050613cf181613a3f565b92915050565b5f60208284031215613d0c57613d0b6135d9565b5b5f613d1984828501613ce3565b91505092915050565b5f60c082019050613d355f830189613865565b613d426020830188613865565b613d4f6040830187613720565b613d5c6060830186613720565b613d696080830185613518565b613d7660a0830184613865565b979650505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613dc557607f821691505b602082108103613dd857613dd7613d81565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f613e158261363b565b9150613e208361363b565b9250828202613e2e8161363b565b91508282048414831517613e4557613e44613bea565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613e838261363b565b9150613e8e8361363b565b925082613e9e57613e9d613e4c565b5b828204905092915050565b5f81905092915050565b50565b5f613ec15f83613ea9565b9150613ecc82613eb3565b5f82019050919050565b5f613ee082613eb6565b9150819050919050565b5f819050919050565b5f613f0d613f08613f0384613eea565b6136ac565b61363b565b9050919050565b613f1d81613ef3565b82525050565b5f60c082019050613f365f830189613865565b613f436020830188613720565b613f506040830187613f14565b613f5d6060830186613f14565b613f6a6080830185613865565b613f7760a0830184613720565b979650505050505050565b5f805f60608486031215613f9957613f986135d9565b5b5f613fa686828701613c7d565b9350506020613fb786828701613c7d565b9250506040613fc886828701613c7d565b9150509250925092565b5f606082019050613fe55f830186613865565b613ff26020830185613720565b613fff6040830184613720565b949350505050565b5f60408201905061401a5f830185613720565b6140276020830184613720565b9392505050565b5f8151905061403c81613611565b92915050565b5f60208284031215614057576140566135d9565b5b5f6140648482850161402e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61409f81613600565b82525050565b5f6140b08383614096565b60208301905092915050565b5f602082019050919050565b5f6140d28261406d565b6140dc8185614077565b93506140e783614087565b805f5b838110156141175781516140fe88826140a5565b9750614109836140bc565b9250506001810190506140ea565b5085935050505092915050565b5f60a0820190506141375f830188613720565b6141446020830187613f14565b818103604083015261415681866140c8565b90506141656060830185613865565b6141726080830184613720565b969550505050505056fea26469706673582212208748928aaeba31f4d2fc3f91d47950f7401630ee6d55c2fc2eb6aff9e4fa35dd64736f6c6343000819003300000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000001e1338000000000000000000000000074ac42396096719091dbb2f5d8bced341363f9c2000000000000000000000000983514ad777f8a9cbeaf5f0fce04bbe6f80932a4000000000000000000000000e2fe530c047f2d85298b07d9333c05737f1435fb0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000e9b4d32f829951a3ce145d2caa84cf66af56ca5e000000000000000000000000377e168af6a06075423aede50856de177efaac3e0000000000000000000000000000000000000000000000000000000000000008536d6172742041490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005534d415254000000000000000000000000000000000000000000000000000000