[ { "inputs": [ { "internalType": "address", "name": "_pool", "type": "address" }, { "internalType": "bool", "name": "_allowToken0", "type": "bool" }, { "internalType": "bool", "name": "_allowToken1", "type": "bool" }, { "internalType": "address", "name": "__owner", "type": "address" }, { "internalType": "uint32", "name": "_twapPeriod", "type": "uint32" }, { "internalType": "uint256", "name": "_vaultIndex", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "affiliate", "type": "address" } ], "name": "Affiliate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "ammFeeRecipient", "type": "address" } ], "name": "AmmFeeRecipient", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount1", "type": "uint256" } ], "name": "CollectFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "CollectRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "allowToken0", "type": "bool" }, { "indexed": false, "internalType": "bool", "name": "allowToken1", "type": "bool" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "twapPeriod", "type": "uint256" } ], "name": "DeployICHIVault", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "deposit0Max", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "deposit1Max", "type": "uint256" } ], "name": "DepositMax", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "address", "name": "farmingContract", "type": "address" } ], "name": "FarmingContract", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "hysteresis", "type": "uint256" } ], "name": "Hysteresis", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "maxTotalSupply", "type": "uint256" } ], "name": "MaxTotalSupply", "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": "int24", "name": "tick", "type": "int24" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Rebalance", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint32", "name": "newTwapPeriod", "type": "uint32" } ], "name": "SetTwapPeriod", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "veRamTokenId", "type": "uint256" } ], "name": "VeRamTokenId", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "affiliate", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "allowToken0", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "allowToken1", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ammFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "collectFees", "outputs": [ { "internalType": "uint256", "name": "fees0", "type": "uint256" }, { "internalType": "uint256", "name": "fees1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "collectRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentTick", "outputs": [ { "internalType": "int24", "name": "tick", "type": "int24" } ], "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": "deposit0", "type": "uint256" }, { "internalType": "uint256", "name": "deposit1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "deposit0Max", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "deposit1Max", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "farmingContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBasePosition", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLimitPosition", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hysteresis", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ichiVaultFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": [], "name": "limitLower", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitUpper", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTotalSupply", "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": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "ramsesV2MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Delta", "type": "int256" }, { "internalType": "int256", "name": "amount1Delta", "type": "int256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "ramsesV2SwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "_baseLower", "type": "int24" }, { "internalType": "int24", "name": "_baseUpper", "type": "int24" }, { "internalType": "int24", "name": "_limitLower", "type": "int24" }, { "internalType": "int24", "name": "_limitUpper", "type": "int24" }, { "internalType": "int256", "name": "swapQuantity", "type": "int256" } ], "name": "rebalance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_affiliate", "type": "address" } ], "name": "setAffiliate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_ammFeeRecipient", "type": "address" } ], "name": "setAmmFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_deposit0Max", "type": "uint256" }, { "internalType": "uint256", "name": "_deposit1Max", "type": "uint256" } ], "name": "setDepositMax", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_farmingContract", "type": "address" } ], "name": "setFarmingContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_hysteresis", "type": "uint256" } ], "name": "setHysteresis", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxTotalSupply", "type": "uint256" } ], "name": "setMaxTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newTwapPeriod", "type": "uint32" } ], "name": "setTwapPeriod", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_veRamTokenId", "type": "uint256" } ], "name": "setVeRamTokenId", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tickSpacing", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "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": [], "name": "twapPeriod", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "veRamTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101806040523480156200001257600080fd5b5060405162005dcf38038062005dcf833981810160405260c08110156200003857600080fd5b5080516020808301516040808501516060860151608087015160a09097015183518085018552601481527f49434849205661756c74204c6971756964697479000000000000000000000000968101969096528351639c6dde5360e01b81526004810182905293519697949692959194939092739fab4bdd4e05f5c023ccc85d2071b49791d7418f91639c6dde53916024808301926000929190829003018186803b158015620000e657600080fd5b505af4158015620000fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200012557600080fd5b81019080805160405193929190846401000000008211156200014657600080fd5b9083019060208201858111156200015c57600080fd5b82516401000000008111828201881017156200017757600080fd5b82525081516020918201929091019080838360005b83811015620001a65781810151838201526020016200018c565b50505050905090810190601f168015620001d45780820380516001836020036101000a031916815260200191505b5060405250508251620001f091506003906020850190620007dc565b50805162000206906004906020840190620007dc565b50506005805460ff1916601217905550600160065560006200022762000655565b600780546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005d8e833981519152908290a3506001600160a01b038616620002c0576040805162461bcd60e51b815260206004820152601c60248201527f49562e636f6e7374727563746f723a207a65726f206164647265737300000000604482015290519081900360640190fd5b8480620002ca5750835b620003075760405162461bcd60e51b815260040180806020018281038252602181526020018062005dae6021913960400191505060405180910390fd5b33606090811b60805286901b6001600160601b03191660a05260408051630dfe168160e01b815290516001600160a01b03881691630dfe1681916004808301926020929190829003018186803b1580156200036157600080fd5b505afa15801562000376573d6000803e3d6000fd5b505050506040513d60208110156200038d57600080fd5b505160601b6001600160601b03191660c0526040805163d21220a760e01b815290516001600160a01b0388169163d21220a7916004808301926020929190829003018186803b158015620003e057600080fd5b505afa158015620003f5573d6000803e3d6000fd5b505050506040513d60208110156200040c57600080fd5b505160601b6001600160601b03191660e0526040805163ddca3f4360e01b815290516001600160a01b0388169163ddca3f43916004808301926020929190829003018186803b1580156200045f57600080fd5b505afa15801562000474573d6000803e3d6000fd5b505050506040513d60208110156200048b57600080fd5b505160e81b6001600160e81b0319166101405284151560f890811b61010052841515901b610120526010805463ffffffff191663ffffffff8416179055604080516334324e9f60e21b815290516001600160a01b0388169163d0c93a7c916004808301926020929190829003018186803b1580156200050957600080fd5b505afa1580156200051e573d6000803e3d6000fd5b505050506040513d60208110156200053557600080fd5b5051600290810b900b60e81b6101605260408051631aaa22b160e21b815290513391636aa88ac4916004808301926020929190829003018186803b1580156200057d57600080fd5b505afa15801562000592573d6000803e3d6000fd5b505050506040513d6020811015620005a957600080fd5b5051600855620005b98362000659565b620005dc6064670de0b6b3a76400006200076460201b620029731790919060201c565b600f55600019600c819055600d5560408051861515815285151560208201526001600160a01b038581168284015263ffffffff8516606083015291519188169133917f3e708ccf7d0e6de8558e020ea36189511cb3435bbfec54e721a48ee4df0d4f8c919081900360800190a350505050505062000888565b3390565b6200066362000655565b6001600160a01b031662000676620007cd565b6001600160a01b031614620006d2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620007195760405162461bcd60e51b815260040180806020018281038252602681526020018062005d686026913960400191505060405180910390fd5b6007546040516001600160a01b0380841692169060008051602062005d8e83398151915290600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000808211620007bb576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381620007c557fe5b049392505050565b6007546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200081457600085556200085f565b82601f106200082f57805160ff19168380011785556200085f565b828001600101855582156200085f579182015b828111156200085f57825182559160200191906001019062000842565b506200086d92915062000871565b5090565b5b808211156200086d576000815560010162000872565b60805160601c60a05160601c60c05160601c60e05160601c6101005160f81c6101205160f81c6101405160e81c6101605160e81c61536162000a07600039806125a95280613bdf5280613c1b5280613ca25280613cde52508061270852508061105152806117835250806116165280611714525080610bd35280610c8d52806111e85280611262528061147952806114ad5280611bf05280611c785280611e75528061237952806125cd528061416952806144cc528061491a525080610b225280610c535280610efd52806111ae528061122752806113f1528061142a5280611bcf5280611c565280611e3a52806122d052806140d7528061441552806145d452806148f2525080610d5d5280610f31528061111c528061135352806119a65280611afb5280611c345280611d1e5280612ba352806134ba52806139995280613e3b5280613f32528061422c52806146ca52806147f65280614b9c5280614ddb5250806126e45280612a6c5280612b0852806148ca52506153616000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c8063715018a6116101b8578063c4a7761e11610104578063dd81fa63116100a2578063f2fde38b1161007c578063f2fde38b1461093a578063f620732614610960578063f9c95d4614610981578063fa082743146109a457610341565b8063dd81fa63146108ec578063ddca3f43146108f4578063e7bbf2b21461091457610341565b8063d21220a7116100de578063d21220a71461086d578063d2eabcfc14610875578063d87346aa1461087d578063dd62ed3e146108be57610341565b8063c4a7761e14610855578063c87965721461085d578063d0c93a7c1461086557610341565b80638da5cb5b11610171578063a049de6b1161014b578063a049de6b146107b0578063a457c2d7146107e0578063a9059cbb1461080c578063b8c06b281461083857610341565b80638da5cb5b1461076e5780638dbdbe6d1461077657806395d89b41146107a857610341565b8063715018a6146107205780637aea5309146107285780637f7a1eec1461073057806381de128b14610738578063888a91341461075e578063897f078c1461076657610341565b806337e41b401161029257806351e87af711610230578063654b64871161020a578063654b64871461066e5780636aa88ac4146106ea57806370a08231146106f257806370bb45b31461071857610341565b806351e87af7146106415780635ffc1ff714610649578063648cab851461066657610341565b80633e48f4171161026c5780633e48f417146105985780633f3e4c111461061457806345e05f43146106315780634d461fbb1461063957610341565b806337e41b401461054157806339509351146105495780633e091ee91461057557610341565b80630f35bcac116102ff57806323b872dd116102d957806323b872dd146104bd5780632ab4d052146104f35780632bbb56d9146104fb578063313ce5671461052357610341565b80630f35bcac1461049357806316f0115b1461049b57806318160ddd146104a357610341565b8062f714ce1461034657806302eec5681461038b578063065e5360146103af57806306fdde03146103ce578063095ea7b31461044b5780630dfe16811461048b575b600080fd5b6103726004803603604081101561035c57600080fd5b50803590602001356001600160a01b03166109ac565b6040805192835260208301919091528051918290030190f35b610393610d47565b604080516001600160a01b039092168252519081900360200190f35b6103b7610d56565b6040805160029290920b8252519081900360200190f35b6103d6610e47565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104105781810151838201526020016103f8565b50505050905090810190601f16801561043d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104776004803603604081101561046157600080fd5b506001600160a01b038135169060200135610edd565b604080519115158252519081900360200190f35b610393610efb565b6103b7610f1f565b610393610f2f565b6104ab610f53565b60408051918252519081900360200190f35b610477600480360360608110156104d357600080fd5b506001600160a01b03813581169160208101359091169060400135610f59565b6104ab610fe1565b6105216004803603602081101561051157600080fd5b50356001600160a01b0316610fe7565b005b61052b611046565b6040805160ff9092168252519081900360200190f35b61047761104f565b6104776004803603604081101561055f57600080fd5b506001600160a01b038135169060200135611073565b6105216004803603604081101561058b57600080fd5b50803590602001356110c1565b610521600480360360608110156105ae57600080fd5b8135916020810135918101906060810160408201356401000000008111156105d557600080fd5b8201836020820111156105e757600080fd5b8035906020019184600183028401116401000000008311171561060957600080fd5b509092509050611111565b6105216004803603602081101561062a57600080fd5b5035611291565b6103936112d7565b6104ab6112e6565b6103b76112ec565b6105216004803603602081101561065f57600080fd5b50356112fc565b6104ab611342565b6105216004803603606081101561068457600080fd5b8135916020810135918101906060810160408201356401000000008111156106ab57600080fd5b8201836020820111156106bd57600080fd5b803590602001918460018302840111640100000000831117156106df57600080fd5b509092509050611348565b6104ab6114d5565b6104ab6004803603602081101561070857600080fd5b50356001600160a01b03166114db565b6105216114f6565b610521611550565b6104ab61160e565b610477611614565b6105216004803603602081101561074e57600080fd5b50356001600160a01b0316611638565b6103b7611697565b6103936116a7565b6103936116b6565b6104ab6004803603606081101561078c57600080fd5b50803590602081013590604001356001600160a01b03166116c5565b6103d6611fd7565b6107b8612038565b604080516001600160801b039094168452602084019290925282820152519081900360600190f35b610477600480360360408110156107f657600080fd5b506001600160a01b0381351690602001356120d0565b6104776004803603604081101561082257600080fd5b506001600160a01b038135169060200135612138565b6105216004803603602081101561084e57600080fd5b503561214c565b6103726122a3565b6103726123ee565b6103b76125a7565b6103936125cb565b6107b86125ef565b610521600480360360a081101561089357600080fd5b508035600290810b916020810135820b916040820135810b91606081013590910b906080013561264b565b6104ab600480360360408110156108d457600080fd5b506001600160a01b03813581169160200135166126b7565b6103936126e2565b6108fc612706565b6040805162ffffff9092168252519081900360200190f35b6105216004803603602081101561092a57600080fd5b50356001600160a01b031661272a565b6105216004803603602081101561095057600080fd5b50356001600160a01b0316612789565b61096861289e565b6040805163ffffffff9092168252519081900360200190f35b6105216004803603602081101561099757600080fd5b503563ffffffff166128aa565b6103b7612963565b600080600260065414156109f5576040805162461bcd60e51b815260206004820152601f6024820152600080516020615154833981519152604482015290519081900360640190fd5b600260065583610a42576040805162461bcd60e51b815260206004820152601360248201527249562e77697468647261773a2073686172657360681b604482015290519081900360640190fd5b6001600160a01b038316610a8f576040805162461bcd60e51b815260206004820152600f60248201526e49562e77697468647261773a20746f60881b604482015290519081900360640190fd5b610a976129da565b600b546000908190610acc90600160a01b8104600290810b91600160b81b9004900b610ac482828b612e29565b886000612e69565b600b5491935091506000908190610b0690600160d01b8104600290810b91600160e81b9004900b610afe82828d612e29565b8a6000612e69565b915091506000610b14610f53565b90506000610bc582610bbf8c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b8d57600080fd5b505afa158015610ba1573d6000803e3d6000fd5b505050506040513d6020811015610bb757600080fd5b505190612e97565b90612973565b90506000610c3e83610bbf8d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015610b8d57600080fd5b90508115610c7a57610c7a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b84612ef0565b8015610cb457610cb46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b83612ef0565b610cc882610cc28988612f47565b90612f47565b9850610cd881610cc28887612f47565b9750610ce4338c612fa1565b604080518c8152602081018b90528082018a905290516001600160a01b038c169133917febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9181900360600190a35050505050505060016006819055509250929050565b6009546001600160a01b031681565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610db457600080fd5b505afa158015610dc8573d6000803e3d6000fd5b505050506040513d60e0811015610dde57600080fd5b50602081015160c090910151909250905080610e41576040805162461bcd60e51b815260206004820152601b60248201527f49562e63757272656e745469636b3a206c6f636b656420706f6f6c0000000000604482015290519081900360640190fd5b50919050565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ed35780601f10610ea857610100808354040283529160200191610ed3565b820191906000526020600020905b815481529060010190602001808311610eb657829003601f168201915b5050505050905090565b6000610ef1610eea61309d565b84846130a1565b5060015b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b54600160e81b900460020b81565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025490565b6000610f6684848461318d565b610fd684610f7261309d565b610fd18560405180606001604052806028815260200161524b602891396001600160a01b038a16600090815260016020526040812090610fb061309d565b6001600160a01b0316815260208101919091526040016000205491906132e8565b6130a1565b5060015b9392505050565b600e5481565b610fef61337f565b600b80546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917f3066ef5dd340e8b2ea28d62f5a8391eb7a82d3ee87532724a1ca4386d34f7523919081900360200190a250565b60055460ff1690565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610ef161108061309d565b84610fd1856001600061109161309d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612f47565b6110c961337f565b600c829055600d8190556040805183815260208101839052815133927fafd3b05a4086b378b6f291200a528d8aed8c5e0317af77436b001f1bec28821a928290030190a25050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611174576040805162461bcd60e51b815260206004820152600360248201526263623160e81b604482015290519081900360640190fd5b60008282602081101561118657600080fd5b50356001600160a01b03169050308114156112145784156111d5576111d56001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163387612ef0565b831561120f5761120f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386612ef0565b61128a565b841561124f5761124f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168233886133f3565b831561128a5761128a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168233876133f3565b5050505050565b61129961337f565b600e81905560408051828152905133917f7423cea36ad2104e8e8c3d9aa1e24288bdf3bfa7b4f37868cfa6d4d34ffdaf3a919081900360200190a250565b600b546001600160a01b031681565b600d5481565b600b54600160d01b900460020b81565b61130461337f565b600f81905560408051828152905133917f529698f34660760dcb172def5c99d62e1b5b74b444df322e8f7da31f2bd0a86b919081900360200190a250565b600c5481565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146113ab576040805162461bcd60e51b815260206004820152600360248201526231b11960e91b604482015290519081900360640190fd5b6000828260208110156113bd57600080fd5b50356001600160a01b031690506000851315611452576001600160a01b03811630141561141d576114186001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163387612ef0565b61120f565b61120f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168233886133f3565b600084131561128a576001600160a01b0381163014156114a05761120f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163386612ef0565b61128a6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168233876133f3565b60085481565b6001600160a01b031660009081526020819052604090205490565b6002600654141561153c576040805162461bcd60e51b815260206004820152601f6024820152600080516020615154833981519152604482015290519081900360640190fd5b60026006556115496129da565b6001600655565b61155861309d565b6001600160a01b03166115696116b6565b6001600160a01b0316146115c4576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6007546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600780546001600160a01b0319169055565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b61164061337f565b600a80546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917fbb78b7c13893a913fa8c9ecb9fdaf97597aa412a39c778bf976790555f0942f7919081900360200190a250565b600b54600160b81b900460020b81565b600a546001600160a01b031681565b6007546001600160a01b031690565b60006002600654141561170d576040805162461bcd60e51b815260206004820152601f6024820152600080516020615154833981519152604482015290519081900360640190fd5b60026006557f00000000000000000000000000000000000000000000000000000000000000008061173c575083155b611781576040805162461bcd60e51b815260206004820152601160248201527049562e6465706f7369743a207430204e4160781b604482015290519081900360640190fd5b7f0000000000000000000000000000000000000000000000000000000000000000806117ab575082155b6117f0576040805162461bcd60e51b815260206004820152601160248201527049562e6465706f7369743a207431204e4160781b604482015290519081900360640190fd5b60008411806117ff5750600083115b611850576040805162461bcd60e51b815260206004820181905260248201527f49562e6465706f7369743a206465706f73697473206d757374206265203e2030604482015290519081900360640190fd5b600c54841080156118625750600d5483105b6118b3576040805162461bcd60e51b815260206004820152601e60248201527f49562e6465706f7369743a206465706f7369747320746f6f206c617267650000604482015290519081900360640190fd5b6001600160a01b038216158015906118d457506001600160a01b0382163014155b611916576040805162461bcd60e51b815260206004820152600e60248201526d49562e6465706f7369743a20746f60901b604482015290519081900360640190fd5b61191e6129da565b600b5460009061194390600160a01b8104600290810b91600160b81b9004900b613453565b50909150506001600160801b03811615611a7357600b546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b505050506040513d6040811015611a1457600080fd5b508051602090910151909250905081158015611a2e575080155b611a70576040805162461bcd60e51b815260206004820152600e60248201526d49562e6465706f7369743a20623160901b604482015290519081900360640190fd5b50505b600b54600090611a9890600160d01b8104600290810b91600160e81b9004900b613453565b50909150506001600160801b03811615611bc857600b546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b60248301526000604483018190528151909283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263a34123a792606480820193929182900301818787803b158015611b3f57600080fd5b505af1158015611b53573d6000803e3d6000fd5b505050506040513d6040811015611b6957600080fd5b508051602090910151909250905081158015611b83575080155b611bc5576040805162461bcd60e51b815260206004820152600e60248201526d24ab173232b837b9b4ba1d10311960911b604482015290519081900360640190fd5b50505b6000611c257f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611c17610d56565b670de0b6b3a764000061354e565b601054909150600090611cac907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f00000000000000000000000000000000000000000000000000000000000000009063ffffffff16670de0b6b3a7640000613682565b90506000818311611cdc57611cd782610bbf670de0b6b3a7640000611cd18388613845565b90612e97565b611cf6565b611cf683610bbf670de0b6b3a7640000611cd18387613845565b9050600f54811115611def57739fab4bdd4e05f5c023ccc85d2071b49791d7418f63ac2bca427f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611d7a57600080fd5b505af4158015611d8e573d6000803e3d6000fd5b505050506040513d6020811015611da457600080fd5b5051611def576040805162461bcd60e51b815260206004820152601560248201527424ab173232b837b9b4ba1d103a393c903630ba32b960591b604482015290519081900360640190fd5b600080611dfa6122a3565b915091506000611e25670de0b6b3a7640000610bbf878910611e1c5787611e1e565b885b8f90612e97565b90508b15611e6257611e626001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308f6133f3565b8a15611e9d57611e9d6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308e6133f3565b611ea78b82612f47565b9850611eb1610f53565b15611f02576000611edd670de0b6b3a7640000610bbf888a11611ed45788611ed6565b895b8790612e97565b9050611efe611eec8285612f47565b610bbf611ef7610f53565b8d90612e97565b9950505b611f0c8a8a6138a2565b604080518a8152602081018e90528082018d905290516001600160a01b038c169133917f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69181900360600190a3600e541580611f715750600e54611f6e610f53565b11155b611fc2576040805162461bcd60e51b815260206004820152601a60248201527f49562e6465706f7369743a206d6178546f74616c537570706c79000000000000604482015290519081900360640190fd5b50506001600655509498975050505050505050565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ed35780601f10610ea857610100808354040283529160200191610ed3565b600080600080600080612069600b601a9054906101000a900460020b600b601d9054906101000a900460020b613453565b600b54929550909350915061209490600160d01b8104600290810b91600160e81b9004900b85613992565b939650945091925084916120b1856001600160801b038416612f47565b94506120c6846001600160801b038316612f47565b9350505050909192565b6000610ef16120dd61309d565b84610fd185604051806060016040528060258152602001615307602591396001600061210761309d565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906132e8565b6000610ef161214561309d565b848461318d565b60026006541415612192576040805162461bcd60e51b815260206004820152601f6024820152600080516020615154833981519152604482015290519081900360640190fd5b600260065561219f61337f565b8060085414156121de576040805162461bcd60e51b81526020600482015260056024820152641a59195b9d60da1b604482015290519081900360640190fd5b6008819055600b54600160a01b8104600290810b810b600160d01b909204810b900b1415806122285750600b54600160b81b8104600290810b810b600160e81b909204810b900b14155b1561226557600b5461226590600160a01b8104600290810b91600160b81b8104820b91600160d01b8204810b91600160e81b9004900b6000613bcd565b60408051828152905133917f3ee13e0b2f6b34268876fada8907fbe4fd0dd35479e5dd726e73b8dd4a4e0863919081900360200190a2506001600655565b6000806000806122b16125ef565b92509250506000806122c1612038565b925092505061236d82610cc2867f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561233b57600080fd5b505afa15801561234f573d6000803e3d6000fd5b505050506040513d602081101561236557600080fd5b505190612f47565b95506123e481610cc2857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561233b57600080fd5b9450505050509091565b60008060026006541415612437576040805162461bcd60e51b815260206004820152601f6024820152600080516020615154833981519152604482015290519081900360640190fd5b60026006819055600b5460009161246191600160a01b8104820b91600160b81b909104900b613453565b50909150506001600160801b038116156124c057600b5460009081906124a090600160a01b8104600290810b91600160b81b9004900b83306001614676565b90925090506124af8583612f47565b94506124bb8482612f47565b935050505b600b546000906124e590600160d01b8104600290810b91600160e81b9004900b613453565b50909150506001600160801b0381161561254457600b54600090819061252490600160d01b8104600290810b91600160e81b9004900b83306001614676565b90925090506125338683612f47565b955061253f8582612f47565b945050505b6040805185815260208101859052815133927fec8208dd791fa8ffdc0d7427f3ba9c0ed06f1bce9a86254e6940c10cc1802fef928290030190a2600084118061258d5750600083115b1561259c5761259c848461488e565b505060016006559091565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b600080600080600080612620600b60149054906101000a900460020b600b60179054906101000a900460020b613453565b600b54929550909350915061209490600160a01b8104600290810b91600160b81b9004900b85613992565b60026006541415612691576040805162461bcd60e51b815260206004820152601f6024820152600080516020615154833981519152604482015290519081900360640190fd5b600260065561269e61337f565b6126ab8585858585613bcd565b50506001600655505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b61273261337f565b600980546001600160a01b0383166001600160a01b03199091168117909155604080519182525133917f52879d117cfbdc2394606bb3ec87af61be311fea7f1fe0ad192d4058ed7d18fa919081900360200190a250565b61279161309d565b6001600160a01b03166127a26116b6565b6001600160a01b0316146127fd576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166128425760405162461bcd60e51b81526004018080602001828103825260268152602001806151966026913960400191505060405180910390fd5b6007546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60105463ffffffff1681565b6128b261337f565b60008163ffffffff161161290d576040805162461bcd60e51b815260206004820181905260248201527f49562e73657454776170506572696f643a206d697373696e6720706572696f64604482015290519081900360640190fd5b6010805463ffffffff191663ffffffff831690811790915560408051338152602081019290925280517fe4c60f4984caeb7f45b0cfe6d4233c115601ab11d141bc2cbf68b48346cdef389281900390910190a150565b600b54600160a01b900460020b81565b60008082116129c9576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816129d257fe5b049392505050565b6009546001600160a01b031615806129f55750600019600854145b80612a275750600b54600160a01b9004600290810b900b158015612a275750600b54600160b81b9004600290810b900b155b80612a595750600b54600160d01b9004600290810b900b158015612a595750600b54600160e81b9004600290810b900b155b80612afa575060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f63ccea26040518163ffffffff1660e01b815260040160206040518083038186803b158015612ac357600080fd5b505afa158015612ad7573d6000803e3d6000fd5b505050506040513d6020811015612aed57600080fd5b50516001600160a01b0316145b15612b0457612e27565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f63ccea26040518163ffffffff1660e01b815260040160206040518083038186803b158015612b5f57600080fd5b505afa158015612b73573d6000803e3d6000fd5b505050506040513d6020811015612b8957600080fd5b50516040805163b1c6f0e960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529151919092169163b1c6f0e9916024808301926020929190829003018186803b158015612bf557600080fd5b505afa158015612c09573d6000803e3d6000fd5b505050506040513d6020811015612c1f57600080fd5b505190506001600160a01b038116612c375750612e27565b6000816001600160a01b031663c4f59f9b6040518163ffffffff1660e01b815260040160006040518083038186803b158015612c7257600080fd5b505afa158015612c86573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612caf57600080fd5b8101908080516040519392919084640100000000821115612ccf57600080fd5b908301906020820185811115612ce457600080fd5b8251866020820283011164010000000082111715612d0157600080fd5b82525081516020918201928201910280838360005b83811015612d2e578181015183820152602001612d16565b505050509050016040525050509050600062093a804281612d4b57fe5b600b549190049150612d7c9084906000198401908590600160a01b8104600290810b91600160b81b9004900b61499a565b600b54612da89084906000198401908590600160d01b8104600290810b91600160e81b9004900b61499a565b600b54612dd090849083908590600160a01b8104600290810b91600160b81b9004900b61499a565b600b54612df890849083908590600160d01b8104600290810b91600160e81b9004900b61499a565b60405133907f6d6b2f775aa16c68df093db6462bd09b075250025cbd10acede7a113bf8d3ee790600090a25050505b565b600080612e368585613453565b50509050612e60612e5b612e48610f53565b610bbf6001600160801b03851687612e97565b614a9b565b95945050505050565b6000806001600160801b03851615612e8d57612e888787878787614676565b915091505b9550959350505050565b600082612ea657506000610ef5565b82820282848281612eb357fe5b0414610fda5760405162461bcd60e51b815260040180806020018281038252602181526020018061522a6021913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612f42908490614ae6565b505050565b600082820183811015610fda576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6001600160a01b038216612fe65760405162461bcd60e51b81526004018080602001828103825260218152602001806152736021913960400191505060405180910390fd5b612ff282600083612f42565b61302f81604051806060016040528060228152602001615174602291396001600160a01b03851660009081526020819052604090205491906132e8565b6001600160a01b0383166000908152602081905260409020556002546130559082613845565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b3390565b6001600160a01b0383166130e65760405162461bcd60e51b81526004018080602001828103825260248152602001806152b96024913960400191505060405180910390fd5b6001600160a01b03821661312b5760405162461bcd60e51b81526004018080602001828103825260228152602001806151bc6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166131d25760405162461bcd60e51b81526004018080602001828103825260258152602001806152946025913960400191505060405180910390fd5b6001600160a01b0382166132175760405162461bcd60e51b81526004018080602001828103825260238152602001806151316023913960400191505060405180910390fd5b613222838383612f42565b61325f816040518060600160405280602681526020016151de602691396001600160a01b03861660009081526020819052604090205491906132e8565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461328e9082612f47565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156133775760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561333c578181015183820152602001613324565b50505050905090810190601f1680156133695780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b61338761309d565b6001600160a01b03166133986116b6565b6001600160a01b031614612e27576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261344d908590614ae6565b50505050565b604080513060601b602080830191909152600060348301819052600286810b60e890811b60548601529086900b901b60578401528351603a818503018152605a84018086528151919093012063514ea4bf60e01b909252605e8301829052925183928392917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169163514ea4bf91607e8083019260c0929190829003018186803b15801561350857600080fd5b505afa15801561351c573d6000803e3d6000fd5b505050506040513d60c081101561353257600080fd5b5080516060820151608090920151909891975095509350505050565b6000739fab4bdd4e05f5c023ccc85d2071b49791d7418f6343c57a2784739fab4bdd4e05f5c023ccc85d2071b49791d7418f63809fdd33866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156135ba57600080fd5b505af41580156135ce573d6000803e3d6000fd5b505050506040513d60208110156135e457600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808a16604484015288166064830152516084808301926020929190829003018186803b15801561364d57600080fd5b505af4158015613661573d6000803e3d6000fd5b505050506040513d602081101561367757600080fd5b505195945050505050565b600080739fab4bdd4e05f5c023ccc85d2071b49791d7418f638241348988866040518363ffffffff1660e01b815260040180836001600160a01b031681526020018263ffffffff1681526020019250505060206040518083038186803b1580156136eb57600080fd5b505af41580156136ff573d6000803e3d6000fd5b505050506040513d602081101561371557600080fd5b50516040805163809fdd3360e01b815260048101869052905160029290920b9250739fab4bdd4e05f5c023ccc85d2071b49791d7418f916343c57a27918491849163809fdd33916024808301926020929190829003018186803b15801561377b57600080fd5b505af415801561378f573d6000803e3d6000fd5b505050506040513d60208110156137a557600080fd5b5051604080516001600160e01b031960e086901b16815260029390930b60048401526001600160801b0390911660248301526001600160a01b03808b16604484015289166064830152516084808301926020929190829003018186803b15801561380e57600080fd5b505af4158015613822573d6000803e3d6000fd5b505050506040513d602081101561383857600080fd5b5051979650505050505050565b60008282111561389c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166138fd576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61390960008383612f42565b6002546139169082612f47565b6002556001600160a01b03821660009081526020819052604090205461393c9082612f47565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156139f057600080fd5b505afa158015613a04573d6000803e3d6000fd5b505050506040513d60e0811015613a1a57600080fd5b50516040805163986cfba360e01b8152600289900b60048201529051919250739fab4bdd4e05f5c023ccc85d2071b49791d7418f9163c72e160b918491849163986cfba3916024808301926020929190829003018186803b158015613a7e57600080fd5b505af4158015613a92573d6000803e3d6000fd5b505050506040513d6020811015613aa857600080fd5b50516040805163986cfba360e01b815260028b900b60048201529051739fab4bdd4e05f5c023ccc85d2071b49791d7418f9163986cfba3916024808301926020929190829003018186803b158015613aff57600080fd5b505af4158015613b13573d6000803e3d6000fd5b505050506040513d6020811015613b2957600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0388166064820152815160848083019392829003018186803b158015613b8b57600080fd5b505af4158015613b9f573d6000803e3d6000fd5b505050506040513d6040811015613bb557600080fd5b5080516020909101519093509150505b935093915050565b8360020b8560020b128015613c1257507f000000000000000000000000000000000000000000000000000000000000000060020b8560020b81613c0c57fe5b0760020b155b8015613c4e57507f000000000000000000000000000000000000000000000000000000000000000060020b8460020b81613c4857fe5b0760020b155b613c90576040805162461bcd60e51b815260206004820152600e60248201526d24ab173932b11d1031381034b73b60911b604482015290519081900360640190fd5b8160020b8360020b128015613cd557507f000000000000000000000000000000000000000000000000000000000000000060020b8360020b81613ccf57fe5b0760020b155b8015613d1157507f000000000000000000000000000000000000000000000000000000000000000060020b8260020b81613d0b57fe5b0760020b155b613d53576040805162461bcd60e51b815260206004820152600e60248201526d24ab173932b11d1036381034b73b60911b604482015290519081900360640190fd5b8260020b8560020b141580613d6e57508160020b8460020b14155b613daf576040805162461bcd60e51b815260206004820152600d60248201526c12558b9c99588e881a59195b9d609a1b604482015290519081900360640190fd5b613db76129da565b600b54600090613ddc90600160a01b8104600290810b91600160b81b9004900b613453565b50909150506001600160801b03811615613eae57600b546040805163a34123a760e01b8152600160a01b8304600290810b810b6004830152600160b81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b158015613e8157600080fd5b505af1158015613e95573d6000803e3d6000fd5b505050506040513d6040811015613eab57600080fd5b50505b600b54600090613ed390600160d01b8104600290810b91600160e81b9004900b613453565b50909150506001600160801b03811615613fa557600b546040805163a34123a760e01b8152600160d01b8304600290810b810b6004830152600160e81b909304830b90920b602483015260006044830181905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169363a34123a7936064808301949193928390030190829087803b158015613f7857600080fd5b505af1158015613f8c573d6000803e3d6000fd5b505050506040513d6040811015613fa257600080fd5b50505b600b546000908190613fcc90600160a01b8104600290810b91600160b81b9004900b613453565b600b546001600160801b0392831695509116925060009150819061400590600160d01b8104600290810b91600160e81b9004900b613453565b6001600160801b039182169450169150600090506140238584612f47565b905060006140318584612f47565b600b5490915061405a90600160a01b8104600290810b91600160b81b9004900b8a306001612e69565b5050600b5461408290600160d01b8104600290810b91600160e81b9004900b89306001612e69565b505061408e828261488e565b7fbc4c20ad04f161d631d9ce94d27659391196415aa3c42f6a71c62e905ece782d6140b7610d56565b604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561411d57600080fd5b505afa158015614131573d6000803e3d6000fd5b505050506040513d602081101561414757600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b1580156141af57600080fd5b505afa1580156141c3573d6000803e3d6000fd5b505050506040513d60208110156141d957600080fd5b505185856141e5610f53565b6040805160029790970b87526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190a188156143ac576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663128acb083060008c1380614264578c600003614266565b8c5b60008e136142885773fffd8963efd1fc6a506488495d951d5263988d2561428f565b6401000276a45b3060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518663ffffffff1660e01b815260040180866001600160a01b031681526020018515158152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614330578181015183820152602001614318565b50505050905090810190601f16801561435d5780820380516001836020036101000a031916815260200191505b5096505050505050506040805180830381600087803b15801561437f57600080fd5b505af1158015614393573d6000803e3d6000fd5b505050506040513d60408110156143a957600080fd5b50505b8c600b60146101000a81548162ffffff021916908360020b62ffffff1602179055508b600b60176101000a81548162ffffff021916908360020b62ffffff160217905550614543600b60149054906101000a900460020b600b60179054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561448057600080fd5b505afa158015614494573d6000803e3d6000fd5b505050506040513d60208110156144aa57600080fd5b5051604080516370a0823160e01b815230600482015290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a08231916024808301926020929190829003018186803b15801561451257600080fd5b505afa158015614526573d6000803e3d6000fd5b505050506040513d602081101561453c57600080fd5b5051614b97565b600b5490985061456990600160a01b8104600290810b91600160b81b9004900b8a614dc7565b50508a600b601a6101000a81548162ffffff021916908360020b62ffffff16021790555089600b601d6101000a81548162ffffff021916908360020b62ffffff16021790555061463f600b601a9054906101000a900460020b600b601d9054906101000a900460020b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561448057600080fd5b600b5490975061466590600160d01b8104600290810b91600160e81b9004900b89614dc7565b505050505050505050505050505050565b60408051631c7f367360e31b8152600060048201819052600288810b602484015287900b60448301526001600160801b03861660648301526000196084830152825190928392839283926001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e3f9b3989260a4808301939282900301818787803b15801561470d57600080fd5b505af1158015614721573d6000803e3d6000fd5b505050506040513d604081101561473757600080fd5b508051602090910151909250905060008561475a5761475583614a9b565b614763565b6001600160801b035b905060008661477a5761477583614a9b565b614783565b6001600160801b035b90506000826001600160801b031611806147a657506000816001600160801b0316115b1561488057604080516309e3d67b60e31b81526001600160a01b038a8116600483015260028e810b60248401528d900b60448301526001600160801b0385811660648401528416608483015282517f000000000000000000000000000000000000000000000000000000000000000090911692634f1eb3d89260a480820193918290030181600087803b15801561483c57600080fd5b505af1158015614850573d6000803e3d6000fd5b505050506040513d604081101561486657600080fd5b5080516020909101516001600160801b0391821697501694505b505050509550959350505050565b600b54600a546040805163b75d889b60e01b815260048101869052602481018590526001600160a01b03938416604482015291831660648301527f0000000000000000000000000000000000000000000000000000000000000000831660848301527f0000000000000000000000000000000000000000000000000000000000000000831660a48301527f000000000000000000000000000000000000000000000000000000000000000090921660c48201529051739fab4bdd4e05f5c023ccc85d2071b49791d7418f9163b75d889b9160e4808301926000929190829003018186803b15801561497e57600080fd5b505af4158015614992573d6000803e3d6000fd5b505050505050565b846001600160a01b03166329b2f63785853060008787600960009054906101000a90046001600160a01b03166040518863ffffffff1660e01b81526004018088815260200180602001876001600160a01b031681526020018681526020018560020b81526020018460020b8152602001836001600160a01b03168152602001828103825288818151815260200191508051906020019060200280838360005b83811015614a51578181015183820152602001614a39565b5050505090500198505050505050505050600060405180830381600087803b158015614a7c57600080fd5b505af1158015614a90573d6000803e3d6000fd5b505050505050505050565b60006001600160801b03821115614ae2576040805162461bcd60e51b815260206004820152600660248201526518991c2fa7a360d11b604482015290519081900360640190fd5b5090565b6000614b3b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614f529092919063ffffffff16565b805190915015612f4257808060200190516020811015614b5a57600080fd5b5051612f425760405162461bcd60e51b815260040180806020018281038252602a8152602001806152dd602a913960400191505060405180910390fd5b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015614bf357600080fd5b505afa158015614c07573d6000803e3d6000fd5b505050506040513d60e0811015614c1d57600080fd5b50516040805163986cfba360e01b8152600289900b60048201529051919250739fab4bdd4e05f5c023ccc85d2071b49791d7418f91636098fd4a918491849163986cfba3916024808301926020929190829003018186803b158015614c8157600080fd5b505af4158015614c95573d6000803e3d6000fd5b505050506040513d6020811015614cab57600080fd5b50516040805163986cfba360e01b815260028b900b60048201529051739fab4bdd4e05f5c023ccc85d2071b49791d7418f9163986cfba3916024808301926020929190829003018186803b158015614d0257600080fd5b505af4158015614d16573d6000803e3d6000fd5b505050506040513d6020811015614d2c57600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526064810188905260848101879052905160a4808301926020929190829003018186803b158015614d9157600080fd5b505af4158015614da5573d6000803e3d6000fd5b505050506040513d6020811015614dbb57600080fd5b50519695505050505050565b6000806001600160801b03831615613bc5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a418e9e03060008888886008543060405160200180826001600160a01b031681526020019150506040516020818303038152906040526040518863ffffffff1660e01b815260040180886001600160a01b031681526020018781526020018660020b81526020018560020b8152602001846001600160801b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614ec2578181015183820152602001614eaa565b50505050905090810190601f168015614eef5780820380516001836020036101000a031916815260200191505b50985050505050505050506040805180830381600087803b158015614f1357600080fd5b505af1158015614f27573d6000803e3d6000fd5b505050506040513d6040811015614f3d57600080fd5b50805160209091015190969095509350505050565b6060614f618484600085614f69565b949350505050565b606082471015614faa5760405162461bcd60e51b81526004018080602001828103825260268152602001806152046026913960400191505060405180910390fd5b614fb3856150c4565b615004576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106150425780518252601f199092019160209182019101615023565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146150a4576040519150601f19603f3d011682016040523d82523d6000602084013e6150a9565b606091505b50915091506150b98282866150ca565b979650505050505050565b3b151590565b606083156150d9575081610fda565b8251156150e95782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561333c57818101518382015260200161332456fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573735265656e7472616e637947756172643a207265656e7472616e742063616c6c0045524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220007a2898b7abbdbaa9ff04f6deebb9a74a8a0c8bcdacd9d2a8a29537a8d4646764736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e049562e636f6e7374727563746f723a206e6f20616c6c6f77656420746f6b656e73000000000000000000000000f8090c06c9086ca9aba39a89d6792291d0a06fd200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4183bccba1d825a8ac971e13e698368b744f43c0000000000000000000000000000000000000000000000000000000000000e100000000000000000000000000000000000000000000000000000000000000001