[ { "inputs": [ { "internalType": "uint256", "name": "initialSupply_", "type": "uint256" }, { "internalType": "address", "name": "feeReceiver_", "type": "address" }, { "internalType": "address", "name": "swapRouter_", "type": "address" }, { "components": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "internalType": "struct TaxableToken.FeeConfiguration", "name": "feeConfiguration_", "type": "tuple" }, { "internalType": "address[]", "name": "collectors_", "type": "address[]" }, { "internalType": "uint256[]", "name": "shares_", "type": "uint256[]" } ], "stateMutability": "payable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "ExcludedFromAntiWhale", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "ExcludedFromFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FeeCollected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "FeeCollectorAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "FeeCollectorRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "oldShare", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newShare", "type": "uint256" } ], "name": "FeeCollectorUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "indexed": false, "internalType": "struct TaxableToken.FeeConfiguration", "name": "configuration", "type": "tuple" } ], "name": "FeeConfigurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "MaxTokenPerWalletUpdated", "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": true, "internalType": "address", "name": "pairAddress", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isLp", "type": "bool" } ], "name": "SetLpPool", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "router", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pair", "type": "address" } ], "name": "SwapRouterUpdated", "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": [], "name": "BURN_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEE_PRECISION", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_FEE", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOKEN_CODE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "addFeeCollector", "outputs": [], "stateMutability": "nonpayable", "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": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "autoProcessFees", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "inToken", "type": "bool" } ], "name": "distributeFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "feeCollectorShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeConfiguration", "outputs": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isExcludedFromAntiWhale", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isExcludedFromFees", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isFeeCollector", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pairAddress", "type": "address" } ], "name": "isLpPool", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokenPerWallet", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numTokensToSwap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" } ], "name": "processFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "autoProcess", "type": "bool" } ], "name": "setAutoprocessFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "internalType": "struct TaxableToken.FeeConfiguration", "name": "configuration", "type": "tuple" } ], "name": "setFeeConfiguration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "setIsExcludedFromAntiWhale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "setIsExcludedFromFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pairAddress", "type": "address" }, { "internalType": "bool", "name": "isLp", "type": "bool" } ], "name": "setIsLpPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "setLiquidityOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "setMaxTokenPerWallet", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "setNumTokensToSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "setSwapRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapPair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapRouter", "outputs": [ { "internalType": "contract IUniswapV2Router02", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFeeCollectorsShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "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": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "updateFeeCollectorShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60c0604052604051613ba8380380613ba883398101604081905261002291610d93565b600161003061271088610ecd565b8585858561003f60648d610ecd565b604051806040016040528060098152602001680a8e4eadae0a8e4d2f60bb1b815250604051806040016040528060088152602001670a8a49aa0a8a492b60c31b81525060126e312f313732313331332f4f2f572f54838381600390816100a59190610f6f565b5060046100b28282610f6f565b50505060ff90911660805260a05250506005556100d46100cf3390565b610403565b805182511461012a5760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642066656520636f6c6c6563746f72730000000000000000000060448201526064015b60405180910390fd5b5f5b825181101561017f5761017783828151811061014a5761014a61102a565b60200260200101518383815181106101645761016461102a565b602002602001015161045460201b60201c565b60010161012c565b505050600e839055600d805460ff60a81b1916600160a81b861515021790556101a53390565b600d80546001600160a01b039283166001600160a01b031991821617909155600b805492851692909116821790556040805163c45a015560e01b815290516102a4929163c45a01559160048083019260209291908290030181865afa158015610210573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610234919061103e565b600b54604080516315ab88c960e31b8152905130926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa15801561027b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029f919061103e565b61056b565b600c80546001600160a01b0319166001600160a01b039290921691821790555f908152601160205260409020805460ff191660011790556102ec6102e53390565b6001610669565b6102f7306001610669565b6103008161071d565b505050505f86116103535760405162461bcd60e51b815260206004820152601d60248201527f496e697469616c20737570706c792063616e6e6f74206265207a65726f0000006044820152606401610121565b6040516001600160a01b038616903480156108fc02915f818181858888f19350505050158015610385573d5f803e3d5ffd5b50335f818152601260205260408082208054600160ff199182168117909255600c546001600160a01b03168452918320805483168217905561dead9092527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f7805490911690911790556103f89087610a03565b50505050505061108c565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61045f600783610acb565b156104ac5760405162461bcd60e51b815260206004820152601560248201527f416c72656164792066656520636f6c6c6563746f7200000000000000000000006044820152606401610121565b5f81116104eb5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b6044820152606401610121565b6104f6600783610af1565b506001600160a01b0382165f908152600960205260408120829055600a8054839290610523908490611057565b90915550506040518181526001600160a01b038316907f918584c21fe4a093f5014c0dabaed3e43b642781e27984aef122cae8245fbb23906020015b60405180910390a25050565b5f805f836001600160a01b0316856001600160a01b03161061058e578385610591565b84845b6040516001600160601b0319606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016106479291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b6001600160a01b0382165f9081526010602052604090205481151560ff9091161515036106c65760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e481cd95d60aa1b6044820152606401610121565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb910161055f565b6107d061ffff16816020015161ffff16111561076d5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206275792066656560881b6044820152606401610121565b6107d061ffff16816040015161ffff1611156107be5760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073656c6c2066656560801b6044820152606401610121565b6107d061ffff16816060015161ffff16111561081c5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964207472616e73666572206665650000000000000000000000006044820152606401610121565b5f8160c001518260a001518360800151610836919061106a565b610840919061106a565b905061ffff81161580610858575061ffff8116612710145b6108985760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642066656520736861726560781b6044820152606401610121565b8151600f805460208501516040808701516060880151608089015160a08a015160c08b015161ffff9081166b0100000000000000000000000261ffff60581b1992821669010000000000000000000261ffff60481b19948316670100000000000000029490941663ffffffff60381b19958316650100000000000261ffff60281b199784166301000000029790971666ffffffff00000019939099166101000262ffff00199c15159c909c1662ffffff19909a16999099179a909a1716959095179290921716939093179290921716929092179055517ff34b49a91d91598b7774795175736ebf4db4fa5a4edf72772cf50fb27c135efd906109f79084905f60e082019050825115158252602083015161ffff80821660208501528060408601511660408501528060608601511660608501528060808601511660808501528060a08601511660a08501528060c08601511660c0850152505092915050565b60405180910390a15050565b6001600160a01b038216610a595760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610121565b610a645f8383610b05565b8060025f828254610a759190611057565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b0381165f90815260018301602052604081205415155b90505b92915050565b5f610ae8836001600160a01b038416610b15565b610b10838383610b61565b505050565b5f818152600183016020526040812054610b5a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610aeb565b505f610aeb565b8282826005545f14158015610b8e57506001600160a01b0382165f9081526012602052604090205460ff16155b15610c025760055481610bb5846001600160a01b03165f9081526020819052604090205490565b610bbf9190611057565b1115610c025760405162461bcd60e51b81526020600482015260126024820152710aec2d8d8cae840caf0c6cacac8e640dac2f60731b6044820152606401610121565b505050505050565b80516001600160a01b0381168114610c20575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715610c5b57610c5b610c25565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610c8957610c89610c25565b604052919050565b805161ffff81168114610c20575f80fd5b5f6001600160401b03821115610cba57610cba610c25565b5060051b60200190565b5f82601f830112610cd3575f80fd5b81516020610ce8610ce383610ca2565b610c61565b8083825260208201915060208460051b870101935086841115610d09575f80fd5b602086015b84811015610d2c57610d1f81610c0a565b8352918301918301610d0e565b509695505050505050565b5f82601f830112610d46575f80fd5b81516020610d56610ce383610ca2565b8083825260208201915060208460051b870101935086841115610d77575f80fd5b602086015b84811015610d2c5780518352918301918301610d7c565b5f805f805f80868803610180811215610daa575f80fd5b87519650610dba60208901610c0a565b9550610dc860408901610c0a565b945060e0605f1982011215610ddb575f80fd5b50610de4610c39565b60608801518015158114610df6575f80fd5b8152610e0460808901610c91565b6020820152610e1560a08901610c91565b6040820152610e2660c08901610c91565b6060820152610e3760e08901610c91565b6080820152610e496101008901610c91565b60a0820152610e5b6101208901610c91565b60c08201526101408801519093506001600160401b0380821115610e7d575f80fd5b610e898a838b01610cc4565b9350610160890151915080821115610e9f575f80fd5b50610eac89828a01610d37565b9150509295509295509295565b634e487b7160e01b5f52601160045260245ffd5b5f82610ee757634e487b7160e01b5f52601260045260245ffd5b500490565b600181811c90821680610f0057607f821691505b602082108103610f1e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610b1057805f5260205f20601f840160051c81016020851015610f495750805b601f840160051c820191505b81811015610f68575f8155600101610f55565b5050505050565b81516001600160401b03811115610f8857610f88610c25565b610f9c81610f968454610eec565b84610f24565b602080601f831160018114610fcf575f8415610fb85750858301515b5f19600386901b1c1916600185901b178555610c02565b5f85815260208120601f198616915b82811015610ffd57888601518255948401946001909101908401610fde565b508582101561101a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561104e575f80fd5b610ae882610c0a565b80820180821115610aeb57610aeb610eb9565b61ffff81811683821601908082111561108557611085610eb9565b5092915050565b60805160a051612afb6110ad5f395f61034101525f6104360152612afb5ff3fe60806040526004361061026d575f3560e01c8063715018a61161014a578063adf18693116100be578063e55096b011610078578063e55096b014610843578063e63a391f14610862578063f2fde38b14610877578063f4232d2514610896578063f725101d146108b5578063fccc2813146108d4575f80fd5b8063adf186931461078a578063b3c6e9ee146107a9578063bc063e1a146107be578063bd823943146107e6578063c31c9c0714610805578063dd62ed3e14610824575f80fd5b806394b8a7031161010f57806394b8a7031461064a57806395d89b411461067e57806398c47e8c146106925780639b61f1d01461072c578063a457c2d71461074c578063a9059cbb1461076b575f80fd5b8063715018a6146105c657806372bc5583146105da5780637a8baf52146105f95780637f5bbb2c1461060e5780638da5cb5b1461062d575f80fd5b8063313ce567116101e157806341273657116101a657806341273657146104dc5780634569c445146104fb578063490e51471461051a5780634fbee193146105395780636f741f2a1461057057806370a08231146105a7575f80fd5b8063313ce567146104235780633502628a146104605780633935ebf91461047f578063395093511461049e5780633b90b9bf146104bd575f80fd5b806312363f4a1161023257806312363f4a1461033057806318160ddd146103635780631fa67b4d1461037757806323b872dd1461039657806326991cc8146103b5578063269f534c146103ec575f80fd5b806301a6c43b1461027857806306fdde03146102a0578063095ea7b3146102c15780630a4e42ef146102f05780630f569dad14610311575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028d600e5481565b6040519081526020015b60405180910390f35b3480156102ab575f80fd5b506102b46108e9565b604051610297919061264d565b3480156102cc575f80fd5b506102e06102db366004612696565b610979565b6040519015158152602001610297565b3480156102fb575f80fd5b5061030f61030a3660046126c0565b610992565b005b34801561031c575f80fd5b5061030f61032b3660046126e0565b6109f7565b34801561033b575f80fd5b5061028d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561036e575f80fd5b5060025461028d565b348015610382575f80fd5b5061030f6103913660046126f7565b610a04565b3480156103a1575f80fd5b506102e06103b0366004612712565b610a18565b3480156103c0575f80fd5b50600c546103d4906001600160a01b031681565b6040516001600160a01b039091168152602001610297565b3480156103f7575f80fd5b506102e06104063660046126f7565b6001600160a01b03165f9081526012602052604090205460ff1690565b34801561042e575f80fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610297565b34801561046b575f80fd5b5061030f61047a366004612696565b610a3b565b34801561048a575f80fd5b50600d546103d4906001600160a01b031681565b3480156104a9575f80fd5b506102e06104b8366004612696565b610a4d565b3480156104c8575f80fd5b506102e06104d73660046126f7565b610a6e565b3480156104e7575f80fd5b5061030f6104f63660046126f7565b610a7a565b348015610506575f80fd5b5061030f610515366004612764565b610a8b565b348015610525575f80fd5b5061030f61053436600461278e565b610b3f565b348015610544575f80fd5b506102e06105533660046126f7565b6001600160a01b03165f9081526010602052604090205460ff1690565b34801561057b575f80fd5b506102e061058a3660046126f7565b6001600160a01b03165f9081526011602052604090205460ff1690565b3480156105b2575f80fd5b5061028d6105c13660046126f7565b610b5e565b3480156105d1575f80fd5b5061030f610b78565b3480156105e5575f80fd5b5061030f6105f43660046126f7565b610b8b565b348015610604575f80fd5b5061028d60055481565b348015610619575f80fd5b5061030f6106283660046127a4565b610bb5565b348015610638575f80fd5b506006546001600160a01b03166103d4565b348015610655575f80fd5b5061028d6106643660046126f7565b6001600160a01b03165f9081526009602052604090205490565b348015610689575f80fd5b506102b4610c0d565b34801561069d575f80fd5b50600f546106ea9060ff81169061ffff610100820481169163010000008104821691650100000000008204811691600160381b8104821691600160481b8204811691600160581b90041687565b60408051971515885261ffff968716602089015294861694870194909452918416606086015283166080850152821660a08401521660c082015260e001610297565b348015610737575f80fd5b50600d546102e090600160a81b900460ff1681565b348015610757575f80fd5b506102e0610766366004612696565b610c1c565b348015610776575f80fd5b506102e0610785366004612696565b610c96565b348015610795575f80fd5b5061030f6107a43660046127bd565b610ca3565b3480156107b4575f80fd5b5061028d600a5481565b3480156107c9575f80fd5b506107d36107d081565b60405161ffff9091168152602001610297565b3480156107f1575f80fd5b5061030f6108003660046126e0565b610cb5565b348015610810575f80fd5b50600b546103d4906001600160a01b031681565b34801561082f575f80fd5b5061028d61083e3660046127e7565b610cc6565b34801561084e575f80fd5b5061030f61085d3660046127bd565b610cf0565b34801561086d575f80fd5b506107d361271081565b348015610882575f80fd5b5061030f6108913660046126f7565b610d02565b3480156108a1575f80fd5b5061030f6108b0366004612696565b610d78565b3480156108c0575f80fd5b5061030f6108cf3660046127bd565b610d8a565b3480156108df575f80fd5b506103d461dead81565b6060600380546108f89061281e565b80601f01602080910402602001604051908101604052809291908181526020018280546109249061281e565b801561096f5780601f106109465761010080835404028352916020019161096f565b820191905f5260205f20905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b5f33610986818585610df1565b60019150505b92915050565b61099a610f14565b6109a330610b5e565b8211156109e95760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b60448201526064015b60405180910390fd5b6109f38282610f6e565b5050565b6109ff610f14565b600e55565b610a0c610f14565b610a15816110c7565b50565b5f33610a25858285611191565b610a30858585611209565b506001949350505050565b610a43610f14565b6109f38282611214565b5f33610986818585610a5f8383610cc6565b610a699190612864565b610df1565b5f61098c60078361131b565b610a82610f14565b610a158161133f565b610a93610f14565b8015610aeb5781610aa330610b5e565b1015610ae65760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b60448201526064016109e0565b610b30565b81471015610b305760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b60448201526064016109e0565b610b3a8282611670565b505050565b610b47610f14565b610a15610b5936839003830183612888565b6117b7565b6001600160a01b03165f9081526020819052604090205490565b610b80610f14565b610b895f611a8e565b565b610b93610f14565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610bbd610f14565b801515600d60159054906101000a900460ff16151503610bef5760405162461bcd60e51b81526004016109e090612942565b600d8054911515600160a81b0260ff60a81b19909216919091179055565b6060600480546108f89061281e565b5f3381610c298286610cc6565b905083811015610c895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016109e0565b610a308286868403610df1565b5f33610986818585611209565b610cab610f14565b6109f38282611adf565b610cbd610f14565b610a1581611b75565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b610cf8610f14565b6109f38282611c19565b610d0a610f14565b6001600160a01b038116610d6f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109e0565b610a1581611a8e565b610d80610f14565b6109f38282611caf565b610d92610f14565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f46e542c7dcc512f9d4c5ef6470efcb6729025d935367e1c2c8dc49d8e35eaa8891015b60405180910390a25050565b6001600160a01b038316610e535760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016109e0565b6001600160a01b038216610eb45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016109e0565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6006546001600160a01b03163314610b895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109e0565b600d805460ff60a01b1916600160a01b1790555f610f8b30610b5e565b90508281106110b457600f545f90610fb090600160381b900461ffff16612710612967565b600f5461ffff91821691610fcc91600160481b90041686612982565b610fd69190612999565b90505f610fe4600283612999565b90505f610ff183876129b8565b90505f610ffe83856129b8565b600f5490915060ff16611018576110158282612864565b90505b801561108757600c54611033906001600160a01b0316610b5e565b5f036110435750505050506110b6565b4761104e8288611de3565b5f61105982476129b8565b90505f836110678784612982565b6110719190612999565b90508015611083576110838682611f34565b5050505b600f5460ff16156110a35761109d826001611670565b506110af565b6110ad475f611670565b505b505050505b505b5050600d805460ff60a01b19169055565b6110d260078261131b565b6111125760405162461bcd60e51b81526020600482015260116024820152702737ba103332b29031b7b63632b1ba37b960791b60448201526064016109e0565b61111d600782611fe5565b506001600160a01b0381165f90815260096020526040812054600a8054919290916111499084906129b8565b90915550506001600160a01b0381165f81815260096020526040808220829055517f904316769e154356a5e4aad5d41591b55913c7717fab281d818c1fed7d80e8149190a250565b5f61119c8484610cc6565b90505f19811461120357818110156111f65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016109e0565b6112038484848403610df1565b50505050565b610b3a838383611ff9565b61121f60078361131b565b156112645760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c903332b29031b7b63632b1ba37b960591b60448201526064016109e0565b5f81116112a35760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b60448201526064016109e0565b6112ae600783612282565b506001600160a01b0382165f908152600960205260408120829055600a80548392906112db908490612864565b90915550506040518181526001600160a01b038316907f918584c21fe4a093f5014c0dabaed3e43b642781e27984aef122cae8245fbb2390602001610de5565b6001600160a01b0381165f90815260018301602052604081205415155b9392505050565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103937baba32b960911b60448201526064016109e0565b600b80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa1580156113df573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140391906129cb565b90506001600160a01b03811661144d5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420666163746f727960881b60448201526064016109e0565b600b54604080516315ab88c960e31b815290515f926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015611494573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b891906129cb565b60405163e6a4390560e01b81523060048201526001600160a01b0380831660248301529192509083169063e6a4390590604401602060405180830381865afa158015611506573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152a91906129cb565b600c80546001600160a01b0319166001600160a01b039290921691821790556115dd576040516364e329cb60e11b81523060048201526001600160a01b03828116602483015283169063c9c65396906044016020604051808303815f875af1158015611598573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115bc91906129cb565b600c80546001600160a01b0319166001600160a01b03929092169190911790555b600c546001600160a01b031661162d5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103830b4b91030b2323932b9b99760591b60448201526064016109e0565b600c54600b546040516001600160a01b0392831692909116907fca394f95d8dbf1e8b2e76b9a8da90cacce1da85181a65508dab13212dc1df53b905f90a3505050565b5f825f0361167f57505f61098c565b600a545f0361168f57505f61098c565b5f8061169b6007612296565b90505f5b818110156117ab575f6116b360078361229f565b90505f6116c16001856129b8565b83146116fb57600a546001600160a01b0383165f908152600960205260409020546116ec908a612982565b6116f69190612999565b611705565b61170585896129b8565b9050861561171d57611718308383611209565b611752565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611750573d5f803e3d5ffd5b505b816001600160a01b03167f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df8260405161178d91815260200190565b60405180910390a261179f8186612864565b9450505060010161169f565b50600195945050505050565b6107d061ffff16816020015161ffff1611156118075760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206275792066656560881b60448201526064016109e0565b6107d061ffff16816040015161ffff1611156118585760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073656c6c2066656560801b60448201526064016109e0565b6107d061ffff16816060015161ffff1611156118ad5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207472616e736665722066656560601b60448201526064016109e0565b5f8160c001518260a0015183608001516118c791906129e6565b6118d191906129e6565b905061ffff811615806118e9575061ffff8116612710145b6119295760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642066656520736861726560781b60448201526064016109e0565b8151600f805460208501516040808701516060880151608089015160a08a015160c08b015161ffff908116600160581b0261ffff60581b19928216600160481b026affff00000000000000000019948316600160381b02949094166affffffff0000000000000019958316650100000000000266ffff0000000000199784166301000000029790971666ffffffff00000019939099166101000262ffff00199c15159c909c1662ffffff19909a16999099179a909a1716959095179290921716939093179290921716929092179055517ff34b49a91d91598b7774795175736ebf4db4fa5a4edf72772cf50fb27c135efd90611a829084905f60e082019050825115158252602083015161ffff80821660208501528060408601511660408501528060608601511660608501528060808601511660808501528060a08601511660a08501528060c08601511660c0850152505092915050565b60405180910390a15050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f9081526010602052604090205481151560ff909116151503611b1e5760405162461bcd60e51b81526004016109e090612942565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb9101610de5565b801580611ba157506103e8611b8960025490565b611b94906005612982565b611b9e9190612999565b81115b611bde5760405162461bcd60e51b815260206004820152600e60248201526d416d6f756e7420746f6f206c6f7760901b60448201526064016109e0565b60058190556040518181527f0271c3ca991d8fa13fc3df55bfd888e9347a178a375ef6e0f63afa9639d144f49060200160405180910390a150565b6001600160a01b0382165f9081526011602052604090205481151560ff909116151503611c585760405162461bcd60e51b81526004016109e090612942565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527f902b2ea0acdec5a260e398590d055fe29bd61ef5dd41e45db54a4cd98d5569e09101610de5565b611cba60078361131b565b611cfa5760405162461bcd60e51b81526020600482015260116024820152702737ba103332b29031b7b63632b1ba37b960791b60448201526064016109e0565b5f8111611d395760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b60448201526064016109e0565b6001600160a01b0382165f90815260096020526040812054600a805491928392611d649084906129b8565b90915550506001600160a01b0383165f908152600960205260408120839055600a8054849290611d95908490612864565b909155505060408051828152602081018490526001600160a01b038516917fd350c3685bdab1285c0b97ffb6e96d96ed0ad4578a135c38250e771e7cb831aa910160405180910390a2505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611e1657611e16612a01565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e6d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e9191906129cb565b81600181518110611ea457611ea4612a01565b6001600160a01b039283166020918202929092010152600b54611eca9130911685610df1565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f029086908690869030904290600401612a15565b5f604051808303815f87803b158015611f19575f80fd5b505af1158015611f2b573d5f803e3d5ffd5b50505050505050565b600b54611f4c9030906001600160a01b031684610df1565b600b54600d5460405163f305d71960e01b8152306004820152602481018590525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611fb9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611fde9190612a86565b5050505050565b5f611338836001600160a01b0384166122aa565b5f81116120385760405162461bcd60e51b815260206004820152600d60248201526c05472616e73666572203c3d203609c1b60448201526064016109e0565b600d545f908190600160a01b900460ff1615801561205f5750600d54600160a81b900460ff165b600d54909150600160a01b900460ff1661217e576001600160a01b038581165f81815260106020908152604080832054948916808452818420549484526011909252808320549183529091205460ff938416939283169291821691168180156120c6575080155b80156120d0575082155b80156120ea5750600b546001600160a01b03898116911614155b1561210257600f54610100900461ffff169550612179565b80801561210d575083155b8015612117575082155b1561213157600f546301000000900461ffff169550612179565b8115801561213d575080155b80156121575750600b546001600160a01b038a8116911614155b8015612161575083155b1561217957600f5465010000000000900461ffff1695505b505050505b80801561218a57505f82115b80156121ae57506001600160a01b0385165f9081526011602052604090205460ff16155b156121d6575f6121bd30610b5e565b9050600e5481106121d4576121d4600e545f610f6e565b505b8115612277575f6127106121ea8486612982565b6121f49190612999565b90505f61220182866129b8565b600f549091505f906127109061222290600160381b900461ffff1685612982565b61222c9190612999565b9050801561224d5761223e81846129b8565b925061224d8861dead83612394565b821561225e5761225e883085612394565b811561226f5761226f888884612394565b505050611fde565b611fde858585612394565b5f611338836001600160a01b038416612541565b5f61098c825490565b5f611338838361258d565b5f8181526001830160205260408120548015612384575f6122cc6001836129b8565b85549091505f906122df906001906129b8565b905081811461233e575f865f0182815481106122fd576122fd612a01565b905f5260205f200154905080875f01848154811061231d5761231d612a01565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061234f5761234f612ab1565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061098c565b5f91505061098c565b5092915050565b6001600160a01b0383166123f85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016109e0565b6001600160a01b03821661245a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016109e0565b6124658383836125b3565b6001600160a01b0383165f90815260208190526040902054818110156124dc5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016109e0565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611203565b5f81815260018301602052604081205461258657508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561098c565b505f61098c565b5f825f0182815481106125a2576125a2612a01565b905f5260205f200154905092915050565b610b3a8383838282826005545f141580156125e657506001600160a01b0382165f9081526012602052604090205460ff16155b1561264557600554816125f884610b5e565b6126029190612864565b11156126455760405162461bcd60e51b81526020600482015260126024820152710aec2d8d8cae840caf0c6cacac8e640dac2f60731b60448201526064016109e0565b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610a15575f80fd5b5f80604083850312156126a7575f80fd5b82356126b281612682565b946020939093013593505050565b5f80604083850312156126d1575f80fd5b50508035926020909101359150565b5f602082840312156126f0575f80fd5b5035919050565b5f60208284031215612707575f80fd5b813561133881612682565b5f805f60608486031215612724575f80fd5b833561272f81612682565b9250602084013561273f81612682565b929592945050506040919091013590565b8035801515811461275f575f80fd5b919050565b5f8060408385031215612775575f80fd5b8235915061278560208401612750565b90509250929050565b5f60e0828403121561279e575f80fd5b50919050565b5f602082840312156127b4575f80fd5b61133882612750565b5f80604083850312156127ce575f80fd5b82356127d981612682565b915061278560208401612750565b5f80604083850312156127f8575f80fd5b823561280381612682565b9150602083013561281381612682565b809150509250929050565b600181811c9082168061283257607f821691505b60208210810361279e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561098c5761098c612850565b803561ffff8116811461275f575f80fd5b5f60e08284031215612898575f80fd5b60405160e0810181811067ffffffffffffffff821117156128c757634e487b7160e01b5f52604160045260245ffd5b6040526128d383612750565b81526128e160208401612877565b60208201526128f260408401612877565b604082015261290360608401612877565b606082015261291460808401612877565b608082015261292560a08401612877565b60a082015261293660c08401612877565b60c08201529392505050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b61ffff82811682821603908082111561238d5761238d612850565b808202811582820484141761098c5761098c612850565b5f826129b357634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561098c5761098c612850565b5f602082840312156129db575f80fd5b815161133881612682565b61ffff81811683821601908082111561238d5761238d612850565b634e487b7160e01b5f52603260045260245ffd5b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b81811015612a655784516001600160a01b031683529383019391830191600101612a40565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612a98575f80fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220f144f1f1b213556b3eb14b8b43e80bdda5d6f81af1335b9824aa66907a386c0564736f6c63430008190033000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000066f2e5f3bbeef5e20792ae26162134961b00a3760000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d000000000000000000000000000000000000000000000000000000000000007d00000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000090a9c71351c8c08a0a951a635ca8c21ff794470a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000002710