Loading
[ { "inputs": [ { "internalType": "address", "name": "_governanceManager", "type": "address" }, { "internalType": "address", "name": "_xyt", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" } ], "stateMutability": "nonpayable", "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": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "sendTo", "type": "address" } ], "name": "EtherWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "interests", "type": "uint256" } ], "name": "RedeemLpInterests", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "reserve0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "weight0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "reserve1", "type": "uint256" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "contract IERC20", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "sendTo", "type": "address" } ], "name": "TokenWithdraw", "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": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "_desiredXytAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_desiredTokenAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_xytMinAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_tokenMinAmount", "type": "uint256" } ], "name": "addMarketLiquidityDual", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" }, { "internalType": "uint256", "name": "lpOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "_inToken", "type": "address" }, { "internalType": "uint256", "name": "_exactIn", "type": "uint256" }, { "internalType": "uint256", "name": "_minOutLp", "type": "uint256" } ], "name": "addMarketLiquiditySingle", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" }, { "internalType": "uint256", "name": "exactOutLp", "type": "uint256" } ], "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "initialXytLiquidity", "type": "uint256" }, { "internalType": "uint256", "name": "initialTokenLiquidity", "type": "uint256" } ], "name": "bootstrap", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" }, { "internalType": "uint256", "name": "exactOutLp", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "bootstrapped", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "name": "expiry", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factoryId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint256", "name": "xytBalance", "type": "uint256" }, { "internalType": "uint256", "name": "xytWeight", "type": "uint256" }, { "internalType": "uint256", "name": "tokenBalance", "type": "uint256" }, { "internalType": "uint256", "name": "tokenWeight", "type": "uint256" }, { "internalType": "uint256", "name": "currentBlock", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "governanceManager", "outputs": [ { "internalType": "contract PendleGovernanceManager", "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": "lastCurveShiftBlock", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastNYield", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastParamK", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockStartTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "paramL", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "redeemLpInterests", "outputs": [ { "internalType": "uint256", "name": "interests", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "_inLp", "type": "uint256" }, { "internalType": "uint256", "name": "_minOutXyt", "type": "uint256" }, { "internalType": "uint256", "name": "_minOutToken", "type": "uint256" } ], "name": "removeMarketLiquidityDual", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "address", "name": "_outToken", "type": "address" }, { "internalType": "uint256", "name": "_inLp", "type": "uint256" }, { "internalType": "uint256", "name": "_minOutAmountToken", "type": "uint256" } ], "name": "removeMarketLiquiditySingle", "outputs": [ { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "contract IPendleRouter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "setUpEmergencyMode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "start", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "inToken", "type": "address" }, { "internalType": "uint256", "name": "inAmount", "type": "uint256" }, { "internalType": "address", "name": "outToken", "type": "address" }, { "internalType": "uint256", "name": "minOutAmount", "type": "uint256" } ], "name": "swapExactIn", "outputs": [ { "internalType": "uint256", "name": "outAmount", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "inToken", "type": "address" }, { "internalType": "uint256", "name": "maxInAmount", "type": "uint256" }, { "internalType": "address", "name": "outToken", "type": "address" }, { "internalType": "uint256", "name": "outAmount", "type": "uint256" } ], "name": "swapExactOut", "outputs": [ { "internalType": "uint256", "name": "inAmount", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "isOut", "type": "bool" } ], "internalType": "struct PendingTransfer[2]", "name": "transfers", "type": "tuple[2]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token", "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": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address payable", "name": "sendTo", "type": "address" } ], "name": "withdrawEther", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "sendTo", "type": "address" } ], "name": "withdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xyt", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
61026060405265010000000000600f553480156200001c57600080fd5b5060405162005bac38038062005bac8339810160408190526200003f9162000f0d565b82828282828282826001600160a01b0316636c6f42396040518163ffffffff1660e01b815260040160206040518083038186803b1580156200008057600080fd5b505afa15801562000095573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000bb919062000eee565b6001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b158015620000f457600080fd5b505afa15801562000109573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200012f919062000eee565b6040518060400160405280600d81526020016c14195b991b194813585c9ad95d609a1b8152506040518060400160405280600a8152602001691411539113114b53141560b21b815250601242876001600160a01b031663e184c9be6040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b557600080fd5b505afa158015620001ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f0919062000f60565b8451859085906200020990600390602085019062000e42565b5080516200021f90600490602084019062000e42565b50506005805460ff19166012179055506200023a8362000a1a565b608091825260a09081526001600160601b0319606096871b1660c0908152855160209687012060408051808201825260018152603160f81b9089015280517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818a0152808201929092527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6988201989098524693810193909352308383015286518084039092018252919091019094525050815191012060e0526001600160a01b0381166200033f576040805162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b604482015290519081900360640190fd5b60078054336001600160a01b031990911617905560601b6001600160601b031916610100526001600160a01b038216620003965760405162461bcd60e51b81526004016200038d9062000fa5565b60405180910390fd5b6001600160a01b038116620003bf5760405162461bcd60e51b81526004016200038d9062000fa5565b816001600160a01b031663ddf0fa836040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f957600080fd5b505afa1580156200040e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000434919062000eee565b6001600160a01b0316816001600160a01b03161415620004685760405162461bcd60e51b81526004016200038d9062000f79565b6000826001600160a01b0316636c6f42396040518163ffffffff1660e01b815260040160206040518083038186803b158015620004a457600080fd5b505afa158015620004b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004df919062000eee565b6001600160601b0319606082811b82166101405285811b82166101805284901b16610160526040805163beb9a97360e01b815290519192506001600160a01b0383169163beb9a97391600480820192602092909190829003018186803b1580156200054957600080fd5b505afa1580156200055e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000584919062000f60565b6101a08181525050826001600160a01b0316637158da7c6040518163ffffffff1660e01b815260040160206040518083038186803b158015620005c657600080fd5b505afa158015620005db573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000601919062000eee565b6001600160a01b03166101c0816001600160a01b031660601b81525050826001600160a01b031663ddf0fa836040518163ffffffff1660e01b815260040160206040518083038186803b1580156200065857600080fd5b505afa1580156200066d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000693919062000eee565b6001600160a01b03166101e0816001600160a01b031660601b81525050806001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160206040518083038186803b158015620006ea57600080fd5b505afa158015620006ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000725919062000eee565b6001600160a01b0316610200816001600160a01b031660601b81525050806001600160a01b03166373d4a13a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200077c57600080fd5b505afa15801562000791573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007b7919062000eee565b6001600160a01b031663be66c60f6040518163ffffffff1660e01b815260040160206040518083038186803b158015620007f057600080fd5b505afa15801562000805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200082b919062000eee565b6001600160a01b0316610220816001600160a01b031660601b81525050826001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200088257600080fd5b505afa15801562000897573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008bd919062000f60565b6102408181525050336001600160a01b031663a6ce5c0b6040518163ffffffff1660e01b815260040160206040518083038186803b158015620008ff57600080fd5b505afa15801562000914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200093a919062000f60565b61012081815250506000816001600160a01b031663f887ea406040518163ffffffff1660e01b815260040160206040518083038186803b1580156200097e57600080fd5b505afa15801562000993573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009b9919062000eee565b9050620009e281600019866001600160a01b031662000a3060201b62001a0b179092919060201c565b62000a0981600019856001600160a01b031662000a3060201b62001a0b179092919060201c565b505050505050505050505062000fe4565b6005805460ff191660ff92909216919091179055565b80158062000aba575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801562000a8a57600080fd5b505afa15801562000a9f573d6000803e3d6000fd5b505050506040513d602081101562000ab657600080fd5b5051155b62000af75760405162461bcd60e51b815260040180806020018281038252603681526020018062005b766036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b1790915262000b4f91859162000b5416565b505050565b600062000bb0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000c1060201b62001b1e179092919060201c565b80519091501562000b4f5780806020019051602081101562000bd157600080fd5b505162000b4f5760405162461bcd60e51b815260040180806020018281038252602a81526020018062005b4c602a913960400191505060405180910390fd5b606062000c21848460008562000c2b565b90505b9392505050565b60608247101562000c6e5760405162461bcd60e51b815260040180806020018281038252602681526020018062005b266026913960400191505060405180910390fd5b62000c798562000d92565b62000ccb576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831062000d0b5780518252601f19909201916020918201910162000cea565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811462000d6f576040519150601f19603f3d011682016040523d82523d6000602084013e62000d74565b606091505b50909250905062000d8782828662000d98565b979650505050505050565b3b151590565b6060831562000da957508162000c24565b82511562000dba5782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000e0657818101518382015260200162000dec565b50505050905090810190601f16801562000e345780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000e7a576000855562000ec5565b82601f1062000e9557805160ff191683800117855562000ec5565b8280016001018555821562000ec5579182015b8281111562000ec557825182559160200191906001019062000ea8565b5062000ed392915062000ed7565b5090565b5b8082111562000ed3576000815560010162000ed8565b60006020828403121562000f00578081fd5b815162000c248162000fcb565b60008060006060848603121562000f22578182fd5b835162000f2f8162000fcb565b602085015190935062000f428162000fcb565b604085015190925062000f558162000fcb565b809150509250925092565b60006020828403121562000f72578081fd5b5051919050565b60208082526012908201527124a72b20a624a22faa27a5a2a72fa820a4a960711b604082015260600190565b6020808252600c908201526b5a45524f5f4144445245535360a01b604082015260600190565b6001600160a01b038116811462000fe157600080fd5b50565b60805160a05160c05160601c60e0516101005160601c610120516101405160601c6101605160601c6101805160601c6101a0516101c05160601c6101e05160601c6102005160601c6102205160601c610240516149d46200115260003980611c2e5280612cf35250806113a3528061146f5280612c025250806107ce52806109825280610d8252806118b75280611b675280611f00528061200452806122565280612d205280612db45280613dd75250806115a45280612ad452806130ac528061315a5280613c465250806136895280613b8d525080613b6b5250806107795280611538528061242b52806125ba5280612a4452508061156e52806119e95280612a8152508061365c5250806104f152806113d05280612c2f5250806115d452806129b8525080610bb852806116d25250806110d652806119c55280611e965280613b3e5250806117db5280611c0d5280612cd25280612e515280613baf52508061122852506149d46000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806370a082311161013b578063ce56c454116100b8578063e184c9be1161007c578063e184c9be146104b1578063f04bcd7c146104b9578063f85c9ce2146104cc578063f887ea40146104df578063fc0c546a146104e757610248565b8063ce56c4541461045d578063d02fba5114610470578063d2e6d1c314610483578063d505accf1461048b578063dd62ed3e1461049e57610248565b806395d89b41116100ff57806395d89b4114610414578063a457c2d71461041c578063a6f319bb1461042f578063a9059cbb14610442578063be9a65551461045557610248565b806370a08231146103cb5780637ecebe00146103de578063834c2955146103f157806389abe8be146104045780638f373bf31461040c57610248565b806330adf81f116101c95780633ccdbb281161018d5780633ccdbb281461038b578063437e5b92146103a057806348fa6ede146103a8578063541a7ca6146103bb57806362c7fa76146103c357610248565b806330adf81f1461034b578063313ce5671461035357806335142c8c146103685780633644e51514610370578063395093511461037857610248565b80630d9b13d9116102105780630d9b13d9146102da5780630dd2cbb9146102ef5780631569f6a41461030f57806318160ddd1461033057806323b872dd1461033857610248565b806304ce07f11461024d57806306fdde031461026b5780630902f1ac14610280578063095ea7b3146102995780630aa725f2146102b9575b600080fd5b6102556104ef565b604051610262919061433f565b60405180910390f35b610273610513565b6040516102629190614386565b6102886105a9565b604051610262959493929190614709565b6102ac6102a73660046140d5565b6105e8565b6040516102629190614334565b6102cc6102c73660046141b5565b610606565b604051610262929190614319565b6102e2610777565b60405161026291906142de565b6103026102fd36600461401b565b61079b565b604051610262919061430b565b61032261031d366004614100565b610927565b6040516102629291906146df565b610255610aeb565b6102ac610346366004613f99565b610af1565b610255610b79565b61035b610b9d565b604051610262919061472c565b6102ac610ba6565b610255610bb6565b6102ac6103863660046140d5565b610bda565b61039e61039936600461422a565b610c28565b005b610255610d38565b6102cc6103b636600461401b565b610d3e565b610255610e86565b610255610e8c565b6102556103d9366004613f29565b610e92565b6102556103ec366004613f29565b610eb1565b6103026103ff36600461417b565b610ec3565b610255610fec565b610255610ff2565b610273610ff8565b6102ac61042a3660046140d5565b611059565b6102cc61043d366004614147565b6110c1565b6102ac6104503660046140d5565b611212565b610255611226565b61039e61046b366004614283565b61124a565b61039e61047e366004613f29565b611389565b6102e26115d2565b61039e610499366004614060565b6115f6565b6102556104ac366004613f61565b6117ae565b6102556117d9565b6102556104c7366004613f29565b6117fd565b6103226104da366004614100565b61185c565b6102e26119c3565b6102e26119e7565b7f000000000000000000000000000000000000000000000000000000000000000081565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561059f5780601f106105745761010080835404028352916020019161059f565b820191906000526020600020905b81548152906001019060200180831161058257829003601f168201915b5050505050905090565b60008060008060006105b9611b35565b9297509550935091506105ca611b60565b156105de576105d7611c06565b5090945091505b4390509091929394565b60006105fc6105f5611d6a565b8484611d6e565b5060015b92915050565b61060e613ebb565b600061061a6000611e5a565b610622611efc565b600080600061062f611b35565b509194509250905060008061064e856106488d876120c1565b9061211a565b90508981116106a057878110156106805760405162461bcd60e51b815260040161067790614523565b60405180910390fd5b8a915061069985610648610692610aeb565b8e906120c1565b95506106eb565b6106ae846106488c886120c1565b9150888210156106d05760405162461bcd60e51b8152600401610677906144f3565b50886106e8846106486106e1610aeb565b8d906120c1565b95505b6106f58583612181565b87518390528751600060209091015294506107108482612181565b60208089018051849052516000910152935061072d8585856121db565b610735612254565b61073f8c876122fc565b600080516020614847833981519152858486604051610760939291906146f3565b60405180910390a150505050509550959350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6107a3613ebb565b6107ad6000611e5a565b6107b5611efc565b6107bd6123ec565b60006107c88561240b565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561082557600080fd5b505afa158015610839573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085d919061426b565b90506000610869610aeb565b90506000610879848389866124a0565b90508581101561089b5760405162461bcd60e51b81526004016106779061449e565b60208401516108aa9082612545565b6020858101919091528551829052855160019101526108c984896125a2565b6108d1612254565b6108db8988612630565b60008060006108e8611b35565b50925092509250600080516020614847833981519152838284604051610910939291906146f3565b60405180910390a150505050505050949350505050565b6000610931613ebb565b61093b6000611e5a565b610943611b60565b1561096057610950611efc565b6109586123ec565b610960612254565b600061096b8761240b565b905060006109788661240b565b9050610a168282877f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109d957600080fd5b505afa1580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a11919061426b565b61272c565b935086841115610a385760405162461bcd60e51b8152600401610677906143d9565b6020820151610a479085612181565b602080840191909152810151610a5d9086612545565b6020820152610a6c82896125a2565b610a7681876125a2565b825184905282516000602090910152848360015b602090810291909101519190915283810151600191015260008080610aad611b35565b50925092509250600080516020614847833981519152838284604051610ad5939291906146f3565b60405180910390a1505050505094509492505050565b60025490565b6000610afe8484846127c2565b610b6e84610b0a611d6a565b610b6985604051806060016040528060288152602001614888602891396001600160a01b038a16600090815260016020526040812090610b48611d6a565b6001600160a01b03168152602081019190915260400160002054919061291d565b611d6e565b5060015b9392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b600754600160a01b900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006105fc610be7611d6a565b84610b698560016000610bf8611d6a565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612181565b610c306129b4565b6001600160a01b0316336001600160a01b031614610c87576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b610c9083612a40565b610cd5576040805162461bcd60e51b81526020600482015260116024820152701513d2d15397d393d517d0531313d5d151607a1b604482015290519081900360640190fd5b610ce96001600160a01b0384168284612b0e565b604080516001600160a01b0380861682526020820185905283168183015290517f72cb8a894ddb372ceec3d2a7648d86f17d5a15caae0e986c53109b8a9a9385e69181900360600190a1505050565b600d5481565b610d46613ebb565b6000610d526000611e5a565b610d5a611efc565b610d626123ec565b6000610d6d8661240b565b90506000610d79610aeb565b9050610e1786837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610dd957600080fd5b505afa158015610ded573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e11919061426b565b84612b60565b925084831015610e395760405162461bcd60e51b8152600401610677906145d9565b6020820151610e489087612181565b602083810191909152845187905284516000910152610e6782886125a2565b610e6f612254565b610e7988846122fc565b6000806000610aad611b35565b60085481565b60105481565b6001600160a01b0381166000908152602081905260409020545b919050565b60066020526000908152604090205481565b610ecb613ebb565b610ed56001611e5a565b610edd611efc565b6000610ee7610aeb565b90506000806000610ef6611b35565b50919450925090506000610f0e856106488b876120c1565b90506000610f20866106488c876120c1565b905087811015610f425760405162461bcd60e51b81526004016106779061449e565b88821015610f625760405162461bcd60e51b815260040161067790614604565b610f6c8583612545565b9450610f788482612545565b8751839052875160016020918201819052818a01805185905251909101529350610fa38585856121db565b610fab612254565b610fb58b8b612630565b600080516020614847833981519152858486604051610fd6939291906146f3565b60405180910390a1505050505050949350505050565b600c5481565b60095481565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561059f5780601f106105745761010080835404028352916020019161059f565b60006105fc611066611d6a565b84610b698560405180606001604052806025815260200161497a6025913960016000611090611d6a565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061291d565b6110c9613ebb565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111135760405162461bcd60e51b8152600401610677906144ce565b61111b612be8565b600754600160a01b900460ff16156111455760405162461bcd60e51b8152600401610677906145ab565b61114d612ccb565b61115d84846480000000006121db565b611165612254565b6040516000805160206148478339815191529061118c9086906480000000009087906146f3565b60405180910390a161119c612e7d565b6111ba6103e86111b46111af87876120c1565b612e8f565b90612545565b90506111c960016103e86122fc565b6111d385826122fc565b8151939093528051600060209182018190528183018051949094529251019190915243600d556007805460ff60a01b1916600160a01b17905592909150565b60006105fc61121f611d6a565b84846127c2565b7f000000000000000000000000000000000000000000000000000000000000000081565b6112526129b4565b6001600160a01b0316336001600160a01b0316146112a9576040805162461bcd60e51b815260206004820152600f60248201526e4f4e4c595f474f5645524e414e434560881b604482015290519081900360640190fd5b6040516000906001600160a01b0383169084908381818185875af1925050503d80600081146112f4576040519150601f19603f3d011682016040523d82523d6000602084013e6112f9565b606091505b5050905080611341576040805162461bcd60e51b815260206004820152600f60248201526e15d2551211149055d7d19052531151608a1b604482015290519081900360640190fd5b604080518481526001600160a01b038416602082015281517fec47e7ed86c86774d1a72c19f35c639911393fe7c1a34031fdbd260890da90de929181900390910190a1505050565b6040516333a2ae8d60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906367455d1a906113fa907f0000000000000000000000000000000000000000000000000000000000000000903090600401614348565b6040805180830381600087803b15801561141357600080fd5b505af1158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b91906141f8565b9150508061146b5760405162461bcd60e51b8152600401610677906143ff565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166331c7f53a6040518163ffffffff1660e01b815260040160606040518083038186803b1580156114c657600080fd5b505afa1580156114da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fe9190613fd9565b5090915050336001600160a01b0382161461152b5760405162461bcd60e51b815260040161067790614631565b6115616001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684600019611a0b565b6115976001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684600019611a0b565b6115cd6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001684600019611a0b565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b4284101561163c576040805162461bcd60e51b815260206004820152600e60248201526d14115493525517d156141254915160921b604482015290519081900360640190fd5b6001600160a01b03808816600081815260066020908152604080832080546001810190915581517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98185015280830195909552948b166060850152608084018a905260a084019490945260c08084018990528451808503909101815260e08401855280519082012061190160f01b6101008501527f00000000000000000000000000000000000000000000000000000000000000006101028501526101228085019190915284518085039091018152610142909301909352815191909201209061172882868686612ee0565b90506001600160a01b038116158015906117535750886001600160a01b0316816001600160a01b0316145b611798576040805162461bcd60e51b8152602060048201526011602482015270494e56414c49445f5349474e415455524560781b604482015290519081900360640190fd5b6117a3898989611d6e565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006118096001611e5a565b6118128261305e565b905061181e828261309c565b7ffaa0d16cddacf2449b3d037964c9a8059c1748dad41517d5083cdd7354c14824828260405161184f9291906142f2565b60405180910390a1919050565b6000611866613ebb565b6118706000611e5a565b611878611b60565b1561189557611885611efc565b61188d6123ec565b611895612254565b60006118a08761240b565b905060006118ad8661240b565b905061194b8282897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561190e57600080fd5b505afa158015611922573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611946919061426b565b613181565b93508484101561196d5760405162461bcd60e51b8152600401610677906146b7565b602082015161197c9088612181565b6020808401919091528101516119929085612545565b60208201526119a182896125a2565b6119ab81876125a2565b82518790528251600060209091015283836001610a8a565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b801580611a91575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015611a6357600080fd5b505afa158015611a77573d6000803e3d6000fd5b505050506040513d6020811015611a8d57600080fd5b5051155b611acc5760405162461bcd60e51b81526004018080602001828103825260368152602001806149446036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526115cd908490613210565b6060611b2d84846000856132c1565b949350505050565b600e54609481901c91602882901c60016001606c1b03169164ffffffffff1690600160281b82900390565b6000611bff7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d8168c486040518163ffffffff1660e01b815260040160206040518083038186803b158015611bbe57600080fd5b505afa158015611bd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf6919061426b565b600d5490612181565b4311905090565b60008080427f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008082038480611c5a611b35565b9350935050506000868610611c725750858503611c76565b5060005b6000611c8b600160281b83810290870261341c565b9050611cc7611cbb611cb1600160281b611cab650323d70a3d708661343e565b90612181565b600160281b613461565b65016bb2b81a5261341c565b98506000611cd78a600f5461341c565b9050600160281b811115611cfd5760405162461bcd60e51b815260040161067790614453565b6000611d1f611d0c878761343e565b611d1a600160281b85612545565b61343e565b90506000611d3186611cab858a61343e565b90506000611d3f838361341c565b9050611d4b8882612545565b9e50611d578782612181565b9d50505050505050505050505050909192565b3390565b6001600160a01b038316611db35760405162461bcd60e51b81526004018080602001828103825260248152602001806148f66024913960400191505060405180910390fd5b6001600160a01b038216611df85760405162461bcd60e51b81526004018080602001828103825260228152602001806147956022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b611e62612be8565b600754600160a01b900460ff16611e8b5760405162461bcd60e51b815260040161067790614581565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ed35760405162461bcd60e51b8152600401610677906144ce565b80611ef9576010544210611ef95760405162461bcd60e51b815260040161067790614477565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b06459b56040518163ffffffff1660e01b815260040160206040518083038186803b158015611f5757600080fd5b505afa158015611f6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8f919061426b565b600c5490915081156120b15780156120ac576000611fab6134c3565b9050818111156120aa576000611fd2611fc48385612545565b611fcc610aeb565b906120c1565b90506000611ff084611cab8761064887611fcc600160281b84612545565b90506000818381611ffd57fe5b04905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166361d027b36040518163ffffffff1660e01b815260040160206040518083038186803b15801561205b57600080fd5b505afa15801561206f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120939190613f45565b905081156120a5576120a581836122fc565b505050505b505b6120bd565b80156120bd576000600c555b5050565b6000826120d057506000610600565b828202828482816120dd57fe5b0414610b725760405162461bcd60e51b81526004018080602001828103825260218152602001806148676021913960400191505060405180910390fd5b6000808211612170576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161217957fe5b049392505050565b600082820183811015610b72576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b8260001080156121f2575060016001606c1b038311155b61220e5760405162461bcd60e51b81526004016106779061468d565b816000108015612225575060016001606c1b038211155b6122415760405162461bcd60e51b815260040161067790614426565b60949290921b60289190911b1717600e55565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b06459b56040518163ffffffff1660e01b815260040160206040518083038186803b1580156122ad57600080fd5b505afa1580156122c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e5919061426b565b6122ee576122fa565b6122f66134c3565b600c555b565b6001600160a01b038216612357576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61236360008383613519565b6002546123709082612181565b6002556001600160a01b0382166000908152602081905260409020546123969082612181565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6123f4611b60565b6123fd576122fa565b61240561355c565b43600d55565b612413613ee8565b600080600080612421611b35565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316141561247f576040518060400160405280838152602001858152509450612497565b60405180604001604052808281526020018481525094505b50505050919050565b8351600090816124b08686612545565b905060006124be828861341c565b905060006124d9826124d4600160281b8761341c565b613590565b905060006124eb828b6020015161343e565b90506000612506828c6020015161254590919063ffffffff16565b9050600061252161251b600160281b89612545565b8a61343e565b905061253582611d1a600160281b84612545565b9c9b505050505050505050505050565b60008282111561259c576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000806000806125b0611b35565b93509350935093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316141561260257855160208701519450915061261d565b5084516020860151925061261a600160281b82612545565b91505b6126288484846121db565b505050505050565b6001600160a01b0382166126755760405162461bcd60e51b81526004018080602001828103825260218152602001806148b06021913960400191505060405180910390fd5b61268182600083613519565b6126be81604051806060016040528060228152602001614773602291396001600160a01b038516600090815260208190526040902054919061291d565b6001600160a01b0383166000908152602081905260409020556002546126e49082612545565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000806127418560000151876000015161341c565b9050600061275c85876020015161254590919063ffffffff16565b9050600061276e87602001518361341c565b9050600061277c8285613590565b905061278c81600160281b612545565b905061279c600160281b87612545565b94506127b56127af8a602001518361343e565b8661341c565b9998505050505050505050565b6001600160a01b0383166128075760405162461bcd60e51b81526004018080602001828103825260258152602001806148d16025913960400191505060405180910390fd5b6001600160a01b03821661284c5760405162461bcd60e51b81526004018080602001828103825260238152602001806147506023913960400191505060405180910390fd5b612857838383613519565b612894816040518060600160405280602681526020016147b7602691396001600160a01b038616600090815260208190526040902054919061291d565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546128c39082612181565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156129ac5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612971578181015183820152602001612959565b50505050905090810190601f16801561299e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635aa6e6756040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0f57600080fd5b505afa158015612a23573d6000803e3d6000fd5b505050506040513d6020811015612a3957600080fd5b5051905090565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015612ab657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015612acb57506001600160a01b0382163014155b801561060057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141592915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526115cd908490613210565b825160009081612b7d612b77600160281b84612545565b8661343e565b90506000612b9388611d1a600160281b85612545565b90506000612bae82896020015161218190919063ffffffff16565b90506000612bc0828a6020015161341c565b90506000612bce8287613590565b90506000612bdc828a61343e565b9050612535818a612545565b6040516333a2ae8d60e11b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906367455d1a90612c59907f0000000000000000000000000000000000000000000000000000000000000000903090600401614348565b6040805180830381600087803b158015612c7257600080fd5b505af1158015612c86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612caa91906141f8565b5090508015611ef95760405162461bcd60e51b81526004016106779061455a565b6000612d177f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612545565b90506000612e4a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166338c143f46040518163ffffffff1660e01b815260040160206040518083038186803b158015612d7757600080fd5b505afa158015612d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daf919061426b565b6106487f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ff845ced6040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0b57600080fd5b505afa158015612e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e43919061426b565b85906120c1565b9050612e767f000000000000000000000000000000000000000000000000000000000000000082612545565b6010555050565b6001600855612e8a613642565b601155565b60006003821115612ed2575080600160028204015b81811015612ecc57809150600281828581612ebb57fe5b040181612ec457fe5b049050612ea4565b50610eac565b8115610eac57506001919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612f415760405162461bcd60e51b81526004018080602001828103825260228152602001806147dd6022913960400191505060405180910390fd5b8360ff16601b1480612f5657508360ff16601c145b612f915760405162461bcd60e51b81526004018080602001828103825260228152602001806148256022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612fed573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613055576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600061306982613708565b506001600160a01b0381166000908152600b60205260408120805491905560095461309490826137d9565b600955919050565b806130a6576120bd565b61314b817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016130f691906142de565b60206040518083038186803b15801561310e57600080fd5b505afa158015613122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613146919061426b565b6137ea565b90506120bd6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168383612b0e565b6000806131968660000151866000015161341c565b905060006131a8600160281b85612545565b90506131b4858261343e565b60208801519091506000906131d2906131cd8185612181565b61341c565b905060006131e08285613590565b905060006131f2600160281b83612545565b905061320289602001518261343e565b9a9950505050505050505050565b6000613265826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b1e9092919063ffffffff16565b8051909150156115cd5780806020019051602081101561328457600080fd5b50516115cd5760405162461bcd60e51b815260040180806020018281038252602a81526020018061491a602a913960400191505060405180910390fd5b6060824710156133025760405162461bcd60e51b81526004018080602001828103825260268152602001806147ff6026913960400191505060405180910390fd5b61330b85613800565b61335c576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b6020831061339a5780518252601f19909201916020918201910161337b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146133fc576040519150601f19603f3d011682016040523d82523d6000602084013e613401565b606091505b5091509150613411828286613806565b979650505050505050565b6000610b728261064861343386600160281b6120c1565b6002865b0490612181565b6000610b72600160281b61064861345586866120c1565b6002600160281b613437565b6000690177c17eb2ae5edd211c69021e19e0c9bab240000082613484868661386c565b90506134908382613973565b156134ad5760405162461bcd60e51b815260040161067790614453565b81818402816134b857fe5b049695505050505050565b60008060008060006134d3611b35565b935093509350935061351061350b6134f36134ed86613998565b84613590565b6135056134ff88613998565b86613590565b9061343e565b6139a1565b94505050505090565b6135248383836139ab565b61352c612be8565b6001600160a01b038316156135445761354483613708565b6001600160a01b038216156115cd576115cd82613708565b600080613567611b35565b505091509150600080613578611c06565b92505091506135888484846121db565b600f55505050565b6000816135a25750600160281b610600565b826135af57506000610600565b60006135ba83613a58565b905080830360006135d3866135ce846139a1565b613a62565b90506000600160281b8710156136155760006135fa85611d1a611cb1600160281b8c61341c565b905061360d600160281b6131cd83613ab5565b915050613638565b600061362985611d1a8a600160281b613461565b905061363481613ab5565b9150505b613411828261343e565b60405163efb7601d60e01b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063efb7601d906136b1907f0000000000000000000000000000000000000000000000000000000000000000906004016142de565b602060405180830381600087803b1580156136cb57600080fd5b505af11580156136df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613703919061426b565b905090565b613710613b16565b6008546001600160a01b0382166000908152600a60205260409020548061375057506001600160a01b0382166000908152600a6020526040902055611ef9565b600061375b84610e92565b905060006137698484612545565b9050600061378468056bc75e2d6310000061064885856120c1565b6001600160a01b0387166000908152600b60205260409020549091506137aa9082612181565b6001600160a01b0387166000908152600b6020908152604080832093909355600a905220949094555050505050565b60008183101561259c576000610b72565b60008183106137f95781610b72565b5090919050565b3b151590565b60608315613815575081610b72565b8251156138255782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315612971578181015183820152602001612959565b60008082841115613884576138818484613d22565b90505b600160c81b600160281b820211156138ae5760405162461bcd60e51b815260040161067790614453565b6138bc84600160281b613973565b156138d95760405162461bcd60e51b815260040161067790614453565b6138e781600160281b613973565b156139045760405162461bcd60e51b815260040161067790614453565b6139116001821b84613973565b1561392e5760405162461bcd60e51b815260040161067790614453565b600083821b600160281b86028161394157fe5b049050600061394f82613d55565b9050600160c81b81111561395f57fe5b600160281b92909202909101949350505050565b60008161398257506000610600565b82828385028161398e57fe5b0414159392505050565b600160281b0290565b600160281b900490565b6001600160a01b038216301415613a02576040805162461bcd60e51b815260206004820152601660248201527514d1539117d513d7d513d2d15397d0d3d395149050d560521b604482015290519081900360640190fd5b826001600160a01b0316826001600160a01b031614156115cd576040805162461bcd60e51b815260206004820152600c60248201526b29a2a7222faa27afa9a2a62360a11b604482015290519081900360640190fd5b64ffffffffff1690565b60008060028306613a7757600160281b613a79565b835b90506002830492505b8215610b7257613a92848561343e565b93506002830615613aaa57613aa7818561343e565b90505b600283049250613a82565b600080600160281b815b91810191613ad782611d1a876131cd60018601613998565b915081613ae357613b0d565b806101f41415613b055760405162461bcd60e51b815260040161067790614660565b600101613abf565b50909392505050565b613b1e613dd3565b613b27576122fa565b6040516304946b9f60e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631251ae7c90613bd9907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f000000000000000000000000000000000000000000000000000000000000000090309060040161435f565b602060405180830381600087803b158015613bf357600080fd5b505af1158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b919061426b565b506040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190613c7b9030906004016142de565b60206040518083038186803b158015613c9357600080fd5b505afa158015613ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccb919061426b565b9050600080613cd983613e74565b915091506000613ce7610aeb565b15613d0d57613d0a613cf7610aeb565b6106488468056bc75e2d631000006120c1565b90505b613d178382612181565b600855505050600955565b60008080838581613d2f57fe5b0490505b8015613d49576001919091019060029004613d33565b50600019019392505050565b600080600160281b6502000000000081808610801590613d7457508186105b613d905760405162461bcd60e51b815260040161067790614453565b60285b8015613dc8578387880281613da457fe5b049650600282049150828710613dbf57600287049650938101935b60001901613d93565b509295945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399c8054f6040518163ffffffff1660e01b815260040160206040518083038186803b158015613e2e57600080fd5b505afa158015613e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e66919061426b565b613e6e613e9c565b11905090565b600854600954600090613e88908490612545565b9050613e92613642565b6011559092909150565b600061370360286001901b6111b4601154613eb5613642565b9061341c565b60405180604001604052806002905b613ed2613f02565b815260200190600190039081613eca5790505090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80518015158114610eac57600080fd5b600060208284031215613f3a578081fd5b8135610b728161473a565b600060208284031215613f56578081fd5b8151610b728161473a565b60008060408385031215613f73578081fd5b8235613f7e8161473a565b91506020830135613f8e8161473a565b809150509250929050565b600080600060608486031215613fad578081fd5b8335613fb88161473a565b92506020840135613fc88161473a565b929592945050506040919091013590565b600080600060608486031215613fed578283fd5b8351613ff88161473a565b60208501519093506140098161473a565b80925050604084015190509250925092565b60008060008060808587031215614030578081fd5b843561403b8161473a565b9350602085013561404b8161473a565b93969395505050506040820135916060013590565b600080600080600080600060e0888a03121561407a578283fd5b87356140858161473a565b965060208801356140958161473a565b95506040880135945060608801359350608088013560ff811681146140b8578384fd5b9699959850939692959460a0840135945060c09093013592915050565b600080604083850312156140e7578182fd5b82356140f28161473a565b946020939093013593505050565b60008060008060808587031215614115578384fd5b84356141208161473a565b93506020850135925060408501356141378161473a565b9396929550929360600135925050565b60008060006060848603121561415b578283fd5b83356141668161473a565b95602085013595506040909401359392505050565b60008060008060808587031215614190578182fd5b843561419b8161473a565b966020860135965060408601359560600135945092505050565b600080600080600060a086880312156141cc578283fd5b85356141d78161473a565b97602087013597506040870135966060810135965060800135945092505050565b6000806040838503121561420a578182fd5b61421383613f19565b915061422160208401613f19565b90509250929050565b60008060006060848603121561423e578081fd5b83356142498161473a565b92506020840135915060408401356142608161473a565b809150509250925092565b60006020828403121561427c578081fd5b5051919050565b60008060408385031215614295578182fd5b823591506020830135613f8e8161473a565b8060005b60028110156142d857815180518552602090810151151581860152604090940193909101906001016142ab565b50505050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6080810161060082846142a7565b60a0810161432782856142a7565b8260808301529392505050565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b9384526001600160a01b039283166020850152604084019190915216606082015260800190565b6000602080835283518082850152825b818110156143b257858101830151858201604001528201614396565b818111156143c35783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600c908201526b1313d5d7d25397d31253525560a21b604082015260600190565b6020808252600d908201526c4e4f545f454d455247454e435960981b604082015260600190565b6020808252601390820152722a27a5a2a72fa120a620a721a2afa2a92927a960691b604082015260600190565b6020808252600a908201526926a0aa242fa2a92927a960b11b604082015260600190565b6020808252600d908201526c13505492d15517d313d0d2d151609a1b604082015260600190565b602080825260169082015275125394d551919250d251539517d513d2d15397d3d55560521b604082015260600190565b6020808252600b908201526a27a7262cafa927aaaa22a960a91b604082015260600190565b602080825260169082015275125394d551919250d251539517d65517d05353d5539560521b604082015260600190565b60208082526019908201527f494e53554646494349454e545f544f4b454e5f414d4f554e5400000000000000604082015260600190565b6020808252600d908201526c13505492d15517d4105554d151609a1b604082015260600190565b60208082526010908201526f1393d517d093d3d514d514905414115160821b604082015260600190565b6020808252601490820152731053149150511657d093d3d514d514905414115160621b604082015260600190565b602080825260119082015270121251d217d31417d3d55517d312535255607a1b604082015260600190565b602080825260139082015272125394d551919250d251539517d65517d3d555606a1b604082015260600190565b6020808252601590820152742727aa2fa2a6a2a923a2a721acafa420a7222622a960591b604082015260600190565b60208082526013908201527252504f57455f534c4f575f434f4e564552474560681b604082015260600190565b60208082526010908201526f2caa2fa120a620a721a2afa2a92927a960811b604082015260600190565b6020808252600e908201526d121251d217d3d55517d31253525560921b604082015260600190565b82815260a08101610b7260208301846142a7565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526060830152608082015260a00190565b60ff91909116815260200190565b6001600160a01b0381168114611ef957600080fdfe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545434453413a20696e76616c6964207369676e6174757265202773272076616c7565416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c45434453413a20696e76616c6964207369676e6174757265202776272076616c75659ea8a9dd7d3733c6dd274b7139f05a2bfce1a4bb22f0f7bdc1ccd49c267b858d536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b0125e00e49da02c483342c755697d93f614193f2e91b7f8c6a1aeb43923449464736f6c63430007060033416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c5361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000000000861f247b04f2393f49ba57b60c63174c3e11893b000000000000000000000000654e4fbad01cb0f483069714ecc53ac87a895716000000000000000000000000fb98b335551a418cd0737375a2ea0ded62ea213b