[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InsufficientInputAmount", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidity", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidityBurned", "type": "error" }, { "inputs": [], "name": "InsufficientOutputAmount", "type": "error" }, { "inputs": [], "name": "InvalidK", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [], "name": "InvalidTo", "type": "error" }, { "inputs": [], "name": "LOCKED", "type": "error" }, { "inputs": [], "name": "NotFactory", "type": "error" }, { "inputs": [], "name": "Overflow", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "Sync", "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": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "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": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "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": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenIn", "type": "address" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" }, { "internalType": "address", "name": "_poolPod", "type": "address" }, { "internalType": "bool", "name": "_stable", "type": "bool" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "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": [], "name": "poolPod", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve0", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve1", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "sweep", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "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": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
6101606040523480156200001257600080fd5b50604080516020808201835260008083528351808501855260018152603160f81b81840152845180840186528281528551938401909552908252919283929160036200005f83826200025e565b5060046200006e82826200025e565b50620000809150839050600562000134565b610120526200009181600662000134565b61014052815160208084019190912060e052815190820120610100524660a0526200011f60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525060016009556200039f565b600060208351101562000154576200014c836200016d565b905062000167565b816200016184826200025e565b5060ff90505b92915050565b600080829050601f81511115620001a4578260405163305a27a960e01b81526004016200019b91906200032a565b60405180910390fd5b8051620001b1826200037a565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001e457607f821691505b6020821081036200020557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025957600081815260208120601f850160051c81016020861015620002345750805b601f850160051c820191505b81811015620002555782815560010162000240565b5050505b505050565b81516001600160401b038111156200027a576200027a620001b9565b62000292816200028b8454620001cf565b846200020b565b602080601f831160018114620002ca5760008415620002b15750858301515b600019600386901b1c1916600185901b17855562000255565b600085815260208120601f198616915b82811015620002fb57888601518255948401946001909101908401620002da565b50858210156200031a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b8181101562000359578581018301518582016040015282016200033b565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002055760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161381a620003fa6000396000610d6d01526000610d42015260006120cb015260006120a301526000611ffe0152600061202801526000612052015261381a6000f3fe608060405234801561001057600080fd5b50600436106102115760003560e01c80636a62784211610125578063ba9a7a56116100ad578063d505accf1161007c578063d505accf146104ab578063dd62ed3e146104be578063f140a35a146104d1578063fecf9734146104e4578063fff6cae9146104f757600080fd5b8063ba9a7a5614610469578063bc25cf7714610472578063c45a015514610485578063d21220a71461049857600080fd5b806384b0196e116100f457806384b0196e146103f857806389afcb441461041357806395d89b411461043b578063a457c2d714610443578063a9059cbb1461045657600080fd5b80636a627842146103a057806370a08231146103b35780637464fc3d146103dc5780637ecebe00146103e557600080fd5b8063313ce567116101a857806339509351116101775780633950935114610336578063443cb4bc146103495780635909c0d5146103745780635a3d54931461037d5780635a76f25e1461038657600080fd5b8063313ce56714610304578063318a0b0e1461031357806335faa416146103265780633644e5151461032e57600080fd5b80630dfe1681116101e45780630dfe1681146102a057806318160ddd146102cb57806322be3de1146102dd57806323b872dd146102f157600080fd5b8063022c0d9f1461021657806306fdde031461022b5780630902f1ac14610249578063095ea7b31461027d575b600080fd5b610229610224366004612ef7565b6104ff565b005b610233610923565b6040516102409190612fdb565b60405180910390f35b6102516109b5565b604080516001600160701b03948516815293909216602084015263ffffffff1690820152606001610240565b61029061028b366004612fee565b6109df565b6040519015158152602001610240565b600c546102b3906001600160a01b031681565b6040516001600160a01b039091168152602001610240565b6002545b604051908152602001610240565b600e5461029090600160a01b900460ff1681565b6102906102ff366004613018565b6109f9565b60405160128152602001610240565b600e546102b3906001600160a01b031681565b610229610a1f565b6102cf610a75565b610290610344366004612fee565b610a84565b60105461035c906001600160701b031681565b6040516001600160701b039091168152602001610240565b6102cf60135481565b6102cf60145481565b60105461035c90600160701b90046001600160701b031681565b6102cf6103ae366004613054565b610aa6565b6102cf6103c1366004613054565b6001600160a01b031660009081526020819052604090205490565b6102cf60155481565b6102cf6103f3366004613054565b610d16565b610400610d34565b604051610240979695949392919061306f565b610426610421366004613054565b610dbd565b60408051928352602083019190915201610240565b6102336110d2565b610290610451366004612fee565b6110e1565b610290610464366004612fee565b61116c565b6102cf6103e881565b610229610480366004613054565b61117a565b600f546102b3906001600160a01b031681565b600d546102b3906001600160a01b031681565b6102296104b9366004613114565b6112d4565b6102cf6104cc366004613181565b611438565b6102cf6104df3660046131b4565b611463565b6102296104f23660046131e5565b611526565b61022961180f565b610507611917565b84158015610513575083155b15610531576040516342301c2360e01b815260040160405180910390fd5b60008061053c6109b5565b5091509150816001600160701b0316871015806105625750806001600160701b03168610155b156105805760405163bb55fd2760e01b815260040160405180910390fd5b600c54600d5460009182916001600160a01b03918216919081169089168214806105bb5750806001600160a01b0316896001600160a01b0316145b156105d957604051630521f43160e31b815260040160405180910390fd5b8a156105f3576105f36001600160a01b0383168a8d611970565b891561060d5761060d6001600160a01b0382168a8c611970565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610675919061323b565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa1580156106bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e0919061323b565b92505050600089856001600160701b03166106fb919061326a565b8311610708576000610725565b61071b8a6001600160701b03871661326a565b610725908461326a565b9050600061073c8a6001600160701b03871661326a565b8311610749576000610766565b61075c8a6001600160701b03871661326a565b610766908461326a565b905081158015610774575080155b156107925760405163098fb56160e01b815260040160405180910390fd5b600f54604051631711922960e31b81523060048201526000916001600160a01b03169063b88c914890602401602060405180830381865afa1580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff919061323b565b90506000612710610810838661327d565b61081a91906132aa565b610826876103e861327d565b610830919061326a565b90506000612710610841848661327d565b61084b91906132aa565b610857876103e861327d565b610861919061326a565b905061087f896001600160701b0316896001600160701b03166119c7565b61088983836119c7565b10156108a857604051632f62f0d960e21b815260040160405180910390fd5b5050506108b7848488886119f7565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350505050505061091c6001600955565b5050505050565b6060600a8054610932906132be565b80601f016020809104026020016040519081016040528092919081815260200182805461095e906132be565b80156109ab5780601f10610980576101008083540402835291602001916109ab565b820191906000526020600020905b81548152906001019060200180831161098e57829003601f168201915b5050505050905090565b6010546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000336109ed818585611b83565b60019150505b92915050565b600033610a07858285611ca7565b610a12858585611d21565b60019150505b9392505050565b610a27611917565b601054610a47906001600160701b0380821691600160701b900416611ec5565b601054610a66906001600160701b03600160701b82048116911661327d565b601555610a736001600955565b565b6000610a7f611ff1565b905090565b6000336109ed818585610a978383611438565b610aa191906132f2565b611b83565b6000610ab0611917565b600080610abb6109b5565b50600c546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b31919061323b565b600d546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610b7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba3919061323b565b90506000610bba6001600160701b0386168461326a565b90506000610bd16001600160701b0386168461326a565b9050610bdd8686611ec5565b6000610be860025490565b905080600003610c25576103e8610c07610c02848661327d565b61211c565b610c11919061326a565b9750610c2060016103e8612204565b610c6c565b610c696001600160701b038816610c3c838661327d565b610c4691906132aa565b6001600160701b038816610c5a848661327d565b610c6491906132aa565b6122c3565b97505b87600003610c8d5760405163bb55fd2760e01b815260040160405180910390fd5b610c978989612204565b610ca3858589896119f7565b601054610cc2906001600160701b03600160701b82048116911661327d565b601555604080518481526020810184905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250505050505050610d116001600955565b919050565b6001600160a01b0381166000908152600760205260408120546109f3565b600060608082808083610d687f000000000000000000000000000000000000000000000000000000000000000060056122d9565b610d937f000000000000000000000000000000000000000000000000000000000000000060066122d9565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600080610dc8611917565b600080610dd36109b5565b50600c54600d546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e51919061323b565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf919061323b565b30600090815260208190526040902054909150610edc8787611ec5565b6000610ee760025490565b905080610ef4858461327d565b610efe91906132aa565b995080610f0b848461327d565b610f1591906132aa565b9850891580610f22575088155b15610f405760405163749383ad60e01b815260040160405180910390fd5b610f4a308361237d565b610f5e6001600160a01b0387168c8c611970565b610f726001600160a01b0386168c8b611970565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa158015610fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fda919061323b565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa158015611021573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611045919061323b565b925061105384848a8a6119f7565b601054611072906001600160701b03600160701b82048116911661327d565b601555604080518b8152602081018b90526001600160a01b038d169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a350505050505050506110cd6001600955565b915091565b6060600b8054610932906132be565b600033816110ef8286611438565b9050838110156111545760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6111618286868403611b83565b506001949350505050565b6000336109ed818585611d21565b611182611917565b600c54600d546010546040516370a0823160e01b81523060048201526001600160a01b0393841693909216916112279185916001600160701b039091169085906370a0823190602401602060405180830381865afa1580156111e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120c919061323b565b611216919061326a565b6001600160a01b0385169190611970565b6010546040516370a0823160e01b81523060048201526112c5918591600160701b9091046001600160701b0316906001600160a01b038516906370a0823190602401602060405180830381865afa158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa919061323b565b6112b4919061326a565b6001600160a01b0384169190611970565b50506112d16001600955565b50565b834211156113245760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161114b565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113538c6124af565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006113ae826124d7565b905060006113be82878787612504565b9050896001600160a01b0316816001600160a01b0316146114215760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161114b565b61142c8a8a8a611b83565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b601054600f54604051631711922960e31b81523060048201526000926001600160701b0380821693600160701b909204169184916001600160a01b03169063b88c914890602401602060405180830381865afa1580156114c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114eb919061323b565b90506127106114fa828861327d565b61150491906132aa565b61150e908761326a565b955061151c8686858561252e565b9695505050505050565b600f8054336001600160a01b031991821617909155600e80546001600160a81b031916600160a01b841515028316176001600160a01b0385811691909117909155600d80548316868316179055600c8054909216908616908117909155604080516395d89b4160e01b81529051600092916395d89b4191600480830192869291908290030181865afa1580156115c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115e8919081019061331b565b90506000846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561162a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611652919081019061331b565b905082156116c157818160405160200161166d9291906133bd565b604051602081830303815290604052600a908161168a9190613458565b50818160405160200161169e929190613518565b604051602081830303815290604052600b90816116bb9190613458565b50611724565b81816040516020016116d4929190613565565b604051602081830303815290604052600a90816116f19190613458565b5081816040516020016117059291906135bc565b604051602081830303815290604052600b90816117229190613458565b505b856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178691906135dc565b61179190600a6136dd565b601181905550846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f991906135dc565b61180490600a6136dd565b601255505050505050565b611817611917565b600c546040516370a0823160e01b815230600482015261190d916001600160a01b0316906370a0823190602401602060405180830381865afa158015611861573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611885919061323b565b600d546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156118cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f1919061323b565b6010546001600160701b0380821691600160701b9004166119f7565b610a736001600955565b6002600954036119695760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161114b565b6002600955565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119c29084906126d6565b505050565b600e54600090600160a01b900460ff16156119ed576119e683836127ab565b90506109f3565b6119e6828461327d565b6000611a08640100000000426136ec565b601054909150600090611a2890600160e01b900463ffffffff1683613700565b905060008163ffffffff16118015611a4857506001600160701b03841615155b8015611a5c57506001600160701b03831615155b15611aeb578063ffffffff16611a8485611a7586612848565b6001600160e01b031690612861565b6001600160e01b0316611a97919061327d565b60136000828254611aa891906132f2565b909155505063ffffffff8116611ac184611a7587612848565b6001600160e01b0316611ad4919061327d565b60146000828254611ae591906132f2565b90915550505b6010805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081026001600160e01b03199095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b038316611be55760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161114b565b6001600160a01b038216611c465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161114b565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611cb38484611438565b90506000198114611d1b5781811015611d0e5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161114b565b611d1b8484848403611b83565b50505050565b6001600160a01b038316611d855760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161114b565b6001600160a01b038216611de75760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161114b565b6001600160a01b03831660009081526020819052604090205481811015611e5f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161114b565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611d1b565b600e546015546001600160a01b03909116908015611d1b576000611ef8610c026001600160701b0380871690881661327d565b90506000611f058361211c565b905080821115611fe957600f5460408051639d5f105b60e01b815290516000926001600160a01b031691639d5f105b9160048083019260209291908290030181865afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d919061323b565b90506000611f8b838561326a565b600254611f98919061327d565b9050600083611fa98461271061326a565b611fb58761271061327d565b611fbf91906132aa565b611fc991906132f2565b90506000611fd782846132aa565b9050801561142c5761142c8882612204565b505050505050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561204a57507f000000000000000000000000000000000000000000000000000000000000000046145b1561207457507f000000000000000000000000000000000000000000000000000000000000000090565b610a7f604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60008160000361212e57506000919050565b6000600161213b84612876565b901c6001901b9050600181848161215457612154613294565b048201901c9050600181848161216c5761216c613294565b048201901c9050600181848161218457612184613294565b048201901c9050600181848161219c5761219c613294565b048201901c905060018184816121b4576121b4613294565b048201901c905060018184816121cc576121cc613294565b048201901c905060018184816121e4576121e4613294565b048201901c9050610a18818285816121fe576121fe613294565b046122c3565b6001600160a01b03821661225a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161114b565b806002600082825461226c91906132f2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60008183106122d25781610a18565b5090919050565b606060ff83146122ec576119e68361290a565b8180546122f8906132be565b80601f0160208091040260200160405190810160405280929190818152602001828054612324906132be565b80156123715780601f1061234657610100808354040283529160200191612371565b820191906000526020600020905b81548152906001019060200180831161235457829003601f168201915b505050505090506109f3565b6001600160a01b0382166123dd5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161114b565b6001600160a01b038216600090815260208190526040902054818110156124515760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161114b565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b60006109f36124e4611ff1565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061251587878787612949565b9150915061252281612a0d565b5090505b949350505050565b600e54600090600160a01b900460ff161561268657600061254f84846119c7565b60115490915061256785670de0b6b3a764000061327d565b61257191906132aa565b60125490945061258984670de0b6b3a764000061327d565b61259391906132aa565b600c5490935060009081906001600160a01b038881169116146125b75784866125ba565b85855b600c5491935091506001600160a01b038881169116146125f8576012546125e989670de0b6b3a764000061327d565b6125f391906132aa565b612617565b60115461260d89670de0b6b3a764000061327d565b61261791906132aa565b9750600061262f612628848b6132f2565b8584612b57565b612639908361326a565b600c54909150670de0b6b3a7640000906001600160a01b038a811691161461266357601154612667565b6012545b612671908361327d565b61267b91906132aa565b945050505050612526565b600c5460009081906001600160a01b038781169116146126a75783856126aa565b84845b90925090506126b987836132f2565b6126c3828961327d565b6126cd91906132aa565b92505050612526565b600061272b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612cc89092919063ffffffff16565b905080516000148061274c57508080602001905181019061274c9190613724565b6119c25760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161114b565b6000670de0b6b3a7640000828185816127c4828061327d565b6127ce91906132aa565b6127d8919061327d565b6127e291906132aa565b6127ec919061327d565b6127f691906132aa565b670de0b6b3a764000080848161280c828061327d565b61281691906132aa565b612820919061327d565b61282a91906132aa565b612834908661327d565b61283e91906132aa565b610a1891906132f2565b60006109f3600160701b6001600160701b038416613741565b6000610a186001600160701b03831684613773565b600080608083901c1561288b57608092831c92015b604083901c1561289d57604092831c92015b602083901c156128af57602092831c92015b601083901c156128c157601092831c92015b600883901c156128d357600892831c92015b600483901c156128e557600492831c92015b600283901c156128f757600292831c92015b600183901c156109f35760010192915050565b6060600061291783612cd7565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156129805750600090506003612a04565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156129d4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166129fd57600060019250925050612a04565b9150600090505b94509492505050565b6000816004811115612a2157612a21613799565b03612a295750565b6001816004811115612a3d57612a3d613799565b03612a8a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161114b565b6002816004811115612a9e57612a9e613799565b03612aeb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161114b565b6003816004811115612aff57612aff613799565b036112d15760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161114b565b6000805b60ff811015612c9a576000612b7086856119c7565b905084811015612c0e576000612b868786612cff565b612b90838861326a565b612ba290670de0b6b3a764000061327d565b612bac91906132aa565b905080600003612bfc57858203612bc857849350505050610a18565b85612bdd88612bd88860016132f2565b6119c7565b1115612bf857612bee8560016132f2565b9350505050610a18565b5060015b612c0681866132f2565b945050612c87565b6000612c1a8786612cff565b612c24878461326a565b612c3690670de0b6b3a764000061327d565b612c4091906132aa565b905080600003612c795785821480612c65575085612c6388612bd860018961326a565b105b15612c7557849350505050610a18565b5060015b612c83818661326a565b9450505b5080612c92816137af565b915050612b5b565b5060405162461bcd60e51b8152602060048201526002602482015261217960f01b604482015260640161114b565b60606125268484600085612d67565b600060ff8216601f8111156109f357604051632cd44ac360e21b815260040160405180910390fd5b6000670de0b6b3a76400008381612d16828061327d565b612d2091906132aa565b612d2a919061327d565b612d3491906132aa565b670de0b6b3a764000080612d48858061327d565b612d5291906132aa565b612d5d86600361327d565b612834919061327d565b606082471015612dc85760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161114b565b600080866001600160a01b03168587604051612de491906137c8565b60006040518083038185875af1925050503d8060008114612e21576040519150601f19603f3d011682016040523d82523d6000602084013e612e26565b606091505b5091509150612e3787838387612e42565b979650505050505050565b60608315612eb1578251600003612eaa576001600160a01b0385163b612eaa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161114b565b5081612526565b6125268383815115612ec65781518083602001fd5b8060405162461bcd60e51b815260040161114b9190612fdb565b80356001600160a01b0381168114610d1157600080fd5b600080600080600060808688031215612f0f57600080fd5b8535945060208601359350612f2660408701612ee0565b9250606086013567ffffffffffffffff80821115612f4357600080fd5b818801915088601f830112612f5757600080fd5b813581811115612f6657600080fd5b896020828501011115612f7857600080fd5b9699959850939650602001949392505050565b60005b83811015612fa6578181015183820152602001612f8e565b50506000910152565b60008151808452612fc7816020860160208601612f8b565b601f01601f19169290920160200192915050565b602081526000610a186020830184612faf565b6000806040838503121561300157600080fd5b61300a83612ee0565b946020939093013593505050565b60008060006060848603121561302d57600080fd5b61303684612ee0565b925061304460208501612ee0565b9150604084013590509250925092565b60006020828403121561306657600080fd5b610a1882612ee0565b60ff60f81b881681526000602060e08184015261308f60e084018a612faf565b83810360408501526130a1818a612faf565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156130f3578351835292840192918401916001016130d7565b50909c9b505050505050505050505050565b60ff811681146112d157600080fd5b600080600080600080600060e0888a03121561312f57600080fd5b61313888612ee0565b965061314660208901612ee0565b95506040880135945060608801359350608088013561316481613105565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561319457600080fd5b61319d83612ee0565b91506131ab60208401612ee0565b90509250929050565b600080604083850312156131c757600080fd5b823591506131ab60208401612ee0565b80151581146112d157600080fd5b600080600080608085870312156131fb57600080fd5b61320485612ee0565b935061321260208601612ee0565b925061322060408601612ee0565b91506060850135613230816131d7565b939692955090935050565b60006020828403121561324d57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156109f3576109f3613254565b80820281158282048414176109f3576109f3613254565b634e487b7160e01b600052601260045260246000fd5b6000826132b9576132b9613294565b500490565b600181811c908216806132d257607f821691505b6020821081036124d157634e487b7160e01b600052602260045260246000fd5b808201808211156109f3576109f3613254565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561332d57600080fd5b815167ffffffffffffffff8082111561334557600080fd5b818401915084601f83011261335957600080fd5b81518181111561336b5761336b613305565b604051601f8201601f19908116603f0116810190838211818310171561339357613393613305565b816040528281528760208487010111156133ac57600080fd5b612e37836020830160208801612f8b565b6c029ba30b136329020a6a690169609d1b8152600083516133e581600d850160208801612f8b565b602f60f81b600d91840191820152835161340681600e840160208801612f8b565b01600e01949350505050565b601f8211156119c257600081815260208120601f850160051c810160208610156134395750805b601f850160051c820191505b81811015611fe957828155600101613445565b815167ffffffffffffffff81111561347257613472613305565b6134868161348084546132be565b84613412565b602080601f8311600181146134bb57600084156134a35750858301515b600019600386901b1c1916600185901b178555611fe9565b600085815260208120601f198616915b828110156134ea578886015182559484019460019091019084016134cb565b50858210156135085787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6473414d4d2d60d81b815260008351613538816005850160208801612f8b565b602f60f81b6005918401918201528351613559816006840160208801612f8b565b01600601949350505050565b6e02b37b630ba34b6329020a6a690169608d1b81526000835161358f81600f850160208801612f8b565b602f60f81b600f9184019182015283516135b0816010840160208801612f8b565b01601001949350505050565b6476414d4d2d60d81b815260008351613538816005850160208801612f8b565b6000602082840312156135ee57600080fd5b8151610a1881613105565b600181815b8085111561363457816000190482111561361a5761361a613254565b8085161561362757918102915b93841c93908002906135fe565b509250929050565b60008261364b575060016109f3565b81613658575060006109f3565b816001811461366e576002811461367857613694565b60019150506109f3565b60ff84111561368957613689613254565b50506001821b6109f3565b5060208310610133831016604e8410600b84101617156136b7575081810a6109f3565b6136c183836135f9565b80600019048211156136d5576136d5613254565b029392505050565b6000610a1860ff84168361363c565b6000826136fb576136fb613294565b500690565b63ffffffff82811682821603908082111561371d5761371d613254565b5092915050565b60006020828403121561373657600080fd5b8151610a18816131d7565b6001600160e01b0382811682821681810283169291811582850482141761376a5761376a613254565b50505092915050565b60006001600160e01b038381168061378d5761378d613294565b92169190910492915050565b634e487b7160e01b600052602160045260246000fd5b6000600182016137c1576137c1613254565b5060010190565b600082516137da818460208701612f8b565b919091019291505056fea26469706673582212201dc099aab18fe3a54baceccbdae2c39f96debed091cdea162bb49371b4ab1d5464736f6c63430008130033