/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Signer, Contract, ContractFactory, Overrides } from "ethers"; import { Provider, TransactionRequest } from "@ethersproject/providers"; import type { SpotPool } from "../SpotPool"; export class SpotPool__factory extends ContractFactory { constructor(signer?: Signer) { super(_abi, _bytecode, signer); } deploy( _baseToken: string, _tradeToken: string, overrides?: Overrides & { from?: string | Promise } ): Promise { return super.deploy( _baseToken, _tradeToken, overrides || {} ) as Promise; } getDeployTransaction( _baseToken: string, _tradeToken: string, overrides?: Overrides & { from?: string | Promise } ): TransactionRequest { return super.getDeployTransaction(_baseToken, _tradeToken, overrides || {}); } attach(address: string): SpotPool { return super.attach(address) as SpotPool; } connect(signer: Signer): SpotPool__factory { return super.connect(signer) as SpotPool__factory; } static connect( address: string, signerOrProvider: Signer | Provider ): SpotPool { return new Contract(address, _abi, signerOrProvider) as SpotPool; } } const _abi = [ { inputs: [ { internalType: "address", name: "_baseToken", type: "address", }, { internalType: "address", name: "_tradeToken", type: "address", }, ], stateMutability: "nonpayable", type: "constructor", }, { inputs: [], name: "PRECISION", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "ROUNDLIMIT", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint128", name: "x", type: "uint128", }, { internalType: "int128", name: "y", type: "int128", }, ], name: "addDelta", outputs: [ { internalType: "uint128", name: "z", type: "uint128", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "L", type: "uint256", }, ], name: "baseGivenLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "baseToken", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, ], name: "bidsLeft", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "claimFilledOrder", outputs: [ { internalType: "uint256", name: "claimedAmount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "claimPartiallyFilledOrder", outputs: [ { internalType: "uint256", name: "baseAmount", type: "uint256", }, { internalType: "uint256", name: "tradeAmount", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "tickLower", type: "uint16", }, { internalType: "uint16", name: "tickUpper", type: "uint16", }, { internalType: "uint128", name: "amount0Requested", type: "uint128", }, { internalType: "uint128", name: "amount1Requested", type: "uint128", }, ], name: "collect", outputs: [ { internalType: "uint256", name: "amount0", type: "uint256", }, { internalType: "uint256", name: "amount1", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "entry", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "factory", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "fee", outputs: [ { internalType: "uint24", name: "", type: "uint24", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "feeGrowthGlobalBase", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "feeGrowthGlobalTrade", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getCurPrice", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "to", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "getLiq", outputs: [ { internalType: "uint128", name: "", type: "uint128", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "getMaxLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint256", name: "pDelta", type: "uint256", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "getNextPriceLimit", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "getNumCross", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "getOneTimeLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "liquidity", outputs: [ { internalType: "uint128", name: "", type: "uint128", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "B", type: "uint256", }, ], name: "liquidityGivenBase", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "T", type: "uint256", }, ], name: "liquidityGivenTrade", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "lock", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "buyTradeForBase", type: "bool", }, ], name: "makerClaim", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "bool", name: "buyTradeForBase", type: "bool", }, { internalType: "uint256", name: "amountIn", type: "uint256", }, { internalType: "uint16", name: "point", type: "uint16", }, ], name: "makerTrade", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "owner", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "placeLimitOrder", outputs: [ { internalType: "uint256", name: "amountToEscrow", type: "uint256", }, { internalType: "uint128", name: "numCross", type: "uint128", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "point", type: "uint16", }, ], name: "pointToPrice", outputs: [ { internalType: "uint160", name: "", type: "uint160", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "positionIsFilled", outputs: [ { internalType: "bool", name: "", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "bytes32", name: "", type: "bytes32", }, ], name: "positions", outputs: [ { internalType: "uint128", name: "bidCrossId", type: "uint128", }, { internalType: "uint128", name: "askCrossId", type: "uint128", }, { internalType: "uint128", name: "askLiq", type: "uint128", }, { internalType: "uint128", name: "bidLiq", type: "uint128", }, { internalType: "uint128", name: "liquidity", type: "uint128", }, { internalType: "uint256", name: "feeGrowthInside0LastX128", type: "uint256", }, { internalType: "uint256", name: "feeGrowthInside1LastX128", type: "uint256", }, { internalType: "uint256", name: "tokensOwed0", type: "uint256", }, { internalType: "uint256", name: "tokensOwed1", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [], name: "priceDelta", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint256", name: "price", type: "uint256", }, ], name: "priceToPoint", outputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "pointLower", type: "uint16", }, { internalType: "uint16", name: "pointUpper", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "provide", outputs: [ { internalType: "uint256", name: "amount0", type: "uint256", }, { internalType: "uint256", name: "amount1", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint16", name: "pointLower", type: "uint16", }, { internalType: "uint16", name: "pointUpper", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "provideLiquidity", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bool", name: "isAsk", type: "bool", }, ], name: "reduceLimitOrder", outputs: [ { internalType: "uint256", name: "amountToReturn", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "uint16", name: "pointLower", type: "uint16", }, { internalType: "uint16", name: "pointUpper", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, ], name: "remove", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "address", name: "_entry", type: "address", }, ], name: "setEntry", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint128", name: "liq", type: "uint128", }, ], name: "setLiquidity", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "price", type: "uint256", }, ], name: "setPriceAndPoint", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "slot0", outputs: [ { internalType: "uint160", name: "curPrice", type: "uint160", }, { internalType: "uint16", name: "point", type: "uint16", }, { internalType: "uint8", name: "feeProtocol", type: "uint8", }, { internalType: "bool", name: "unlocked", type: "bool", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "bool", name: "buyTradeForBase", type: "bool", }, { internalType: "int256", name: "amountIn", type: "int256", }, { internalType: "uint256", name: "priceLimit", type: "uint256", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "takerTrade", outputs: [ { internalType: "uint256", name: "poolamountIn", type: "uint256", }, { internalType: "uint256", name: "poolamountOut", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [], name: "tickSpacing", outputs: [ { internalType: "int24", name: "", type: "int24", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "", type: "uint16", }, ], name: "ticks", outputs: [ { internalType: "uint128", name: "liquidityGross", type: "uint128", }, { internalType: "int128", name: "liquidityNet", type: "int128", }, { internalType: "uint256", name: "feeGrowthOutsideBase", type: "uint256", }, { internalType: "uint256", name: "feeGrowthOutsideTrade", type: "uint256", }, { internalType: "int56", name: "tickCumulativeOutside", type: "int56", }, { internalType: "uint160", name: "secondsPerLiquidityOutsideX128", type: "uint160", }, { internalType: "uint32", name: "secondsOutside", type: "uint32", }, { internalType: "bool", name: "initialized", type: "bool", }, { internalType: "uint128", name: "askLiquidityGross", type: "uint128", }, { internalType: "uint128", name: "bidLiquidityGross", type: "uint128", }, { internalType: "uint128", name: "askNumCross", type: "uint128", }, { internalType: "uint128", name: "bidNumCross", type: "uint128", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "address", name: "recipient", type: "address", }, { internalType: "bool", name: "moveUp", type: "bool", }, { internalType: "int256", name: "amountSpecified", type: "int256", }, { internalType: "uint256", name: "priceLimit", type: "uint256", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "trade", outputs: [ { internalType: "uint256", name: "amountIn", type: "uint256", }, { internalType: "uint256", name: "amountOut", type: "uint256", }, ], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "p2", type: "uint256", }, { internalType: "uint256", name: "p1", type: "uint256", }, { internalType: "uint256", name: "L", type: "uint256", }, ], name: "tradeGivenLiquidity", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [], name: "tradeToken", outputs: [ { internalType: "address", name: "", type: "address", }, ], stateMutability: "view", type: "function", }, { inputs: [ { internalType: "uint16", name: "pointLower", type: "uint16", }, { internalType: "uint16", name: "pointUpper", type: "uint16", }, { internalType: "uint128", name: "amount", type: "uint128", }, { internalType: "bytes", name: "data", type: "bytes", }, ], name: "withdrawLiquidity", outputs: [], stateMutability: "nonpayable", type: "function", }, { inputs: [ { internalType: "uint256", name: "curPrice", type: "uint256", }, { internalType: "uint256", name: "b", type: "uint256", }, { internalType: "uint256", name: "a", type: "uint256", }, ], name: "xMax", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "curPrice", type: "uint256", }, { internalType: "uint256", name: "b", type: "uint256", }, { internalType: "uint256", name: "a", type: "uint256", }, ], name: "xMaxRoundUp", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, { inputs: [ { internalType: "uint256", name: "curPrice", type: "uint256", }, { internalType: "bool", name: "moveUp", type: "bool", }, ], name: "yInt", outputs: [ { internalType: "uint256", name: "", type: "uint256", }, ], stateMutability: "pure", type: "function", }, ]; const _bytecode = "0x6101406040523480156200001257600080fd5b5060405162004cb438038062004cb48339810160408190526200003591620000e6565b6001600160a01b0380821660e052821661010052600060a081905260c081905261012052818162000070670de0b6b3a764000060646200011e565b600280546001600160801b0319166001600160801b0392909216919091179055505033608052600880546001600160a01b03199081166001600160a01b039485161790915560098054909116919092161790556200015c565b80516001600160a01b0381168114620000e157600080fd5b919050565b60008060408385031215620000fa57600080fd5b6200010583620000c9565b91506200011560208401620000c9565b90509250929050565b60006001600160801b03828116848216811515828404821116156200015357634e487b7160e01b600052601160045260246000fd5b02949350505050565b60805160a05160c05160e0516101005161012051614ad7620001dd60003960006109010152600081816108da015281816113d8015261168801526000818161093b015281816113fe01526116ae015260006108b30152600081816109620152610e770152600081816106bb01528181611ecb01526128980152614ad76000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80636ed755961161019d578063b29d9b6e116100e9578063d83678ac116100a2578063e6277e551161007c578063e6277e55146109ab578063e7c3614f146109be578063f83d08ba146109d1578063f9734a24146109d957600080fd5b8063d83678ac14610936578063ddca3f431461095d578063e37699c91461099857600080fd5b8063b29d9b6e14610766578063b501c28414610779578063b9033a391461078c578063c45a0155146108ae578063c55dae63146108d5578063d0c93a7c146108fc57600080fd5b80639b60808911610156578063ad066f9a11610130578063ad066f9a14610725578063ae0f28f41461072c578063af0d37bc14610740578063b04a69fd1461075357600080fd5b80639b608089146106f0578063a74d74d414610703578063aaf5eb681461071657600080fd5b80636ed755961461065a5780637f1d9ae61461067d57806380c0c3e7146106905780638ce26999146106a35780638da5cb5b146106b65780639314b03f146106dd57600080fd5b80633850c7bd1161025c5780634970aa8811610215578063578c8579116101ef578063578c8579146106055780635bfa896a14610618578063659a544a1461062657806367f239dd1461062f57600080fd5b80634970aa88146105195780634a3ca7171461052c578063514ea4bf1461053f57600080fd5b80633850c7bd146104315780633d718da01461049d5780633df0fec0146104cd578063402d44fb146104e057806342b6c9fb146104f357806342bc52921461050657600080fd5b80631d2637ab116102ae5780631d2637ab146103975780631dae2436146103a05780632130ce0d146103b55780632353b18e146103e5578063302097c81461040b57806332530d7f1461041e57600080fd5b80624b2045146102f5578063098bcc561461032257806311e715d6146103355780631376ff3e14610350578063159054ea146103635780631a6865021461036c575b600080fd5b61030861030336600461407f565b6109ec565b604080519283526020830191909152015b60405180910390f35b610308610330366004614120565b61117e565b6001546001600160a01b03165b604051908152602001610319565b61034261035e36600461418b565b6112a3565b61034261271081565b60025461037f906001600160801b031681565b6040516001600160801b039091168152602001610319565b61034260075481565b6103b36103ae3660046141e3565b6114b5565b005b6103c86103c336600461418b565b61150b565b604080519283526001600160801b03909116602083015201610319565b6103f86103f33660046141e3565b611794565b60405161ffff9091168152602001610319565b6103b36104193660046141fc565b6117c0565b61030861042c36600461423a565b61198d565b600154610466906001600160a01b0381169061ffff600160a01b8204169060ff600160b01b8204811691600160b81b90041684565b604080516001600160a01b03909516855261ffff909316602085015260ff9091169183019190915215156060820152608001610319565b6103b36104ab366004614281565b600280546001600160801b0319166001600160801b0392909216919091179055565b6103086104db36600461407f565b611b9e565b61037f6104ee36600461429e565b611c2c565b61034261050136600461423a565b611cec565b6103b36105143660046142de565b611ec9565b6103b36105273660046142f9565b611f4f565b61034261053a366004614371565b6120c0565b6105aa61054d3660046141e3565b600460208190526000918252604090912080546001820154600283015460038401549484015460058501546006909501546001600160801b0380861697600160801b96879004821697828716979096048216959190941693929189565b604080516001600160801b039a8b168152988a1660208a015296891696880196909652938716606087015295909116608085015260a084015260c083019390935260e082019290925261010081019190915261012001610319565b6103b36106133660046142f9565b6120dd565b610342662386f26fc1000081565b61034260065481565b600554610642906001600160a01b031681565b6040516001600160a01b039091168152602001610319565b61066d61066836600461423a565b61229d565b6040519015158152602001610319565b61030861068b36600461439d565b612358565b61034261069e3660046143e8565b612467565b6106426106b1366004614414565b6124a5565b6106427f000000000000000000000000000000000000000000000000000000000000000081565b6103426106eb3660046143e8565b6124c4565b61037f6106fe36600461423a565b6124da565b61034261071136600461442f565b61252f565b610342670de0b6b3a764000081565b6000610342565b61034261073a366004614414565b50600090565b61030861074e366004614454565b612587565b6103426107613660046143e8565b612688565b6103426107743660046143e8565b6126be565b6103426107873660046144be565b6126d4565b61082a61079a366004614414565b60036020819052600091825260409091208054600182015460028301549383015460048401546005909401546001600160801b0380851696600160801b95869004600f0b9694959094600685900b94600160381b81046001600160a01b031694600160d81b820463ffffffff1694600160f81b90920460ff1693828416938190048316928083169291909104168c565b604080516001600160801b039d8e168152600f9c909c0b60208d01528b019990995260608a019790975260069590950b60808901526001600160a01b0390931660a088015263ffffffff90911660c0870152151560e08601528516610100850152841661012084015283166101408301529190911661016082015261018001610319565b6106427f000000000000000000000000000000000000000000000000000000000000000081565b6106427f000000000000000000000000000000000000000000000000000000000000000081565b6109237f000000000000000000000000000000000000000000000000000000000000000081565b60405160029190910b8152602001610319565b6106427f000000000000000000000000000000000000000000000000000000000000000081565b6109847f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff9091168152602001610319565b6103426109a6366004614371565b61270b565b6103b36109b9366004614371565b612719565b6103426109cc3660046143e8565b61284e565b6103b3612896565b6103426109e73660046143e8565b61291b565b60055460009081906001600160a01b0316331480610a0957503330145b610a2e5760405162461bcd60e51b8152600401610a25906144f3565b60405180910390fd5b60005460ff1615610a515760405162461bcd60e51b8152600401610a2590614516565b6000805460ff1916600117905560408051808201909152600f81526e2d2d2d4e65772054726164652d2d2d60881b6020820152610a8d9061295c565b60408051608080820183526001546001600160a01b03808216845261ffff600160a01b830416602080860182905260ff600160b01b8504811687890152600160b81b90940490931615156060808701919091528651610100810188528d81526000948101859052865190931696830196909652948101949094529192662386f26fc10000929181018b610b2257600754610b26565b6006545b8152600060208083018290526002546001600160801b03166040808501829052606094850191909152805193840181528284529083018290528281018290528301519293509091908b1390610b7b90856129a2565b8015610b8557508b155b15610bd557600183604001818151610b9d9190614551565b9052506040830151610bae90611794565b61ffff16606084018190526001805461ffff60a01b1916600160a01b830217905560208601525b825115801590610be9575089836040015114155b1561104357610c4560405180610100016040528060008152602001600061ffff1681526020016000151581526020016000815260200160008152602001600081526020016000815260200160006001600160801b031681525090565b604084015181526060840151610c5c90868f6126d4565b60608201528c610c7c5760018460600151610c779190614569565b610c8c565b6060840151610c8c90600161458c565b61ffff1660208201526060840151610ca6906003906129b6565b6001600160801b031660e082015281610ce357610cde8160e001518560c00151610cd091906145b2565b6001600160801b0316612ac5565b610d08565b610d088160e001518560c00151610cfa91906145b2565b6001600160801b0316612afc565b83526040840151610d19908e61252f565b60408085018290528501518451610d3092906126be565b836020018181525050610d62604051806040016040528060088152602001675f5f5f5f5f5f5f5f60c01b81525061295c565b610d9060405180604001604052806008815260200167435552505249434560c01b8152508560400151612b33565b610ddc6040518060400160405280601e81526020017f74726164696e673b206c69717569646974792c20616d6f756e746c65667400008152508560c001516001600160801b0316612b33565b8351610df090610deb906145d4565b612b7c565b610e3c6040518060400160405280601881526020017f6e65787470726963656c696d69742f706f696e746e65787400000000000000008152508260600151836020015161ffff16612bc1565b610e63604051806040016040528060018152602001606160f81b8152508460000151612b33565b610e9c8460400151826060015186600001517f000000000000000000000000000000000000000000000000000000000000000087612c08565b60c085015260a08401908152608084019182526040808801939093528251808401909352600e83526d185b5bdd5b9d1a5b985b991bdd5d60921b602084015290519051610eea929190612bc1565b610f186040518060400160405280600381526020016239963160e91b81525084602001518560400151612bc1565b8115610f3a57608081015184518590610f329083906145f1565b905250610f52565b608081015184518590610f4e908390614630565b9052505b8060a0015184602001818151610f689190614551565b90525060c08401516001600160801b031615610faf5760c08085015190820151610f9a916001600160801b0316612e2a565b84608001818151610fab9190614551565b9052505b80606001518460400151141561103d5760e08101516001600160801b031615610fe4576060840151610fe4906003908f612e3f565b6020810151600654600754600092610ffe92600392612f36565b90508d6110115761100e81614671565b90505b61101f8560c0015182611c2c565b6001600160801b031660c086015250602081015161ffff1660608501525b50610bd5565b6110508360400151612f89565b600180546001600160a01b0319166001600160a01b03929092169190911790556020850151606084015161ffff9182169116146110ad5760608301516001805461ffff909216600160a01b0261ffff60a01b199092169190911790555b8260c001516001600160801b03168360e001516001600160801b0316146110f35760c0830151600280546001600160801b0319166001600160801b039092169190911790555b8b156111025760808301516006555b806111335761271083602001516111199190614551565b83516111248d6145d4565b61112e9190614630565b611160565b8b61114e578251611144908c6145f1565b8360200151611160565b825161115a908c6145f1565b83602001515b6000805460ff19169055909e909d509b505050505050505050505050565b60055460009081906001600160a01b031633148061119b57503330145b6111b75760405162461bcd60e51b8152600401610a25906144f3565b60005460ff16156111da5760405162461bcd60e51b8152600401610a2590614516565b6000805460ff191660011781556111f46004898989612fa4565b90508060050154856001600160801b03161161121957846001600160801b031661121f565b80600501545b92508060060154846001600160801b03161161124457836001600160801b031661124a565b80600601545b9150821561126c578281600501600082825461126691906146a1565b90915550505b811561128c578181600601600082825461128691906146a1565b90915550505b506000805460ff1916905590969095509350505050565b6005546000906001600160a01b03163314806112be57503330145b6112da5760405162461bcd60e51b8152600401610a25906144f3565b60005460ff16156112fd5760405162461bcd60e51b8152600401610a2590614516565b6000805460ff191660019081179091555461ffff851690611326906001600160a01b0316611794565b61ffff1614156113845760405162461bcd60e51b815260206004820152602360248201527f43616e277420726564756365206f7264657220666f722063757272656e74207460448201526269636b60e81b6064820152608401610a25565b60006113a0338661139681600161458c565b6004929190612fa4565b90506113b86113ae85614671565b829085600061300f565b6113cf856113c586614671565b60039190866130e4565b6000836113fc577f000000000000000000000000000000000000000000000000000000000000000061141e565b7f00000000000000000000000000000000000000000000000000000000000000005b905083611465576114606114366106b188600161458c565b6001600160a01b0316611448886124a5565b6001600160a01b0316876001600160801b031661291b565b6114a0565b6114a06114766106b188600161458c565b6001600160a01b0316611488886124a5565b6001600160a01b0316876001600160801b0316612467565b6000805460ff19169055979650505050505050565b6114be81611794565b6001805461ffff92909216600160a01b0261ffff60a01b199092169190911790556114e881612f89565b600180546001600160a01b0319166001600160a01b039290921691909117905550565b60055460009081906001600160a01b031633148061152857503330145b6115445760405162461bcd60e51b8152600401610a25906144f3565b60005460ff16156115675760405162461bcd60e51b8152600401610a2590614516565b6000805460ff1916600117905582801561159d57506001546001600160a01b0316611591866124a5565b6001600160a01b031611155b156115db5760405162461bcd60e51b815260206004820152600e60248201526d61736b2062656c6f77207072696560901b6044820152606401610a25565b8215801561160557506001546001600160a01b03166115f9866124a5565b6001600160a01b031610155b156116445760405162461bcd60e51b815260206004820152600f60248201526e626964732061626f7665207072696560881b6044820152606401610a25565b6000611656878761139681600161458c565b9050611664600387866131b5565b91506116728186868561300f565b61167f60038787876130e4565b6000846116ac577f00000000000000000000000000000000000000000000000000000000000000006116ce565b7f00000000000000000000000000000000000000000000000000000000000000005b905084611715576117106116e66106b189600161458c565b6001600160a01b03166116f8896124a5565b6001600160a01b0316886001600160801b031661291b565b611750565b6117506117266106b189600161458c565b6001600160a01b0316611738896124a5565b6001600160a01b0316886001600160801b0316612467565b935061177d60405180604001604052806009815260200168185b5bdd5b9d189a5960ba1b81525085612b33565b50506000805460ff19169055909590945092505050565b6000670de0b6b3a76400006117b083662386f26fc10000612e2a565b6117ba91906146ce565b92915050565b60008030632130ce0d33856117fd6117dc6106b183600161458c565b6001600160a01b03166117ee896124a5565b6001600160a01b03168a612688565b6040516001600160e01b031960e086901b1681526001600160a01b03909316600484015261ffff90911660248301526001600160801b031660448201528715606482015260840160408051808303816000875af1158015611862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188691906146e2565b91509150841561190d576008546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906118c490339030908790600401614707565b6020604051808303816000875af11580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611907919061472b565b50611986565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061194190339030908790600401614707565b6020604051808303816000875af1158015611960573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611984919061472b565b505b5050505050565b60055460009081906001600160a01b03163314806119aa57503330145b6119c65760405162461bcd60e51b8152600401610a25906144f3565b60005460ff16156119e95760405162461bcd60e51b8152600401610a2590614516565b6000805460ff1916600190811782556040805160808101825282546001600160a01b038116825261ffff600160a01b8204166020830152600160b01b810460ff90811693830193909352600160b81b9004909116151560608201529190611a59908890889061139690829061458c565b60015490915061ffff871690611a77906001600160a01b0316611794565b61ffff1614611abc5760405162461bcd60e51b81526020600482015260116024820152704e6f742063757272656e7420707269636560781b6044820152606401610a25565b600085611add576001820154600160801b90046001600160801b0316611aec565b60018201546001600160801b03165b9050611b04611afa82614671565b839088600061300f565b611b1b87611b1183614671565b60039190896130e4565b611b52611b2c6106b189600161458c565b6001600160a01b031684600001516001600160a01b0316836001600160801b0316612467565b9350611b8683600001516001600160a01b0316611b6e896124a5565b6001600160a01b0316836001600160801b031661291b565b6000805460ff19169055989397509295505050505050565b604051624b204560e01b815260009081903090624b204590611bce908b908b908b908b908b908b90600401614771565b60408051808303816000875af1158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1091906147b3565b9092509050611c218882848a61320d565b965096945050505050565b60008082600f0b1215611c99576001600160801b038316611c4c83614671565b611c5690856147d7565b9150816001600160801b031610611c945760405162461bcd60e51b81526020600482015260026024820152614c5360f01b6044820152606401610a25565b6117ba565b6001600160801b038316611cad83856145b2565b9150816001600160801b031610156117ba5760405162461bcd60e51b81526020600482015260026024820152614c4160f01b6044820152606401610a25565b6005546000906001600160a01b0316331480611d0757503330145b611d235760405162461bcd60e51b8152600401610a25906144f3565b60005460ff1615611d465760405162461bcd60e51b8152600401610a2590614516565b6000805460ff191660019081178255611d68908690869061139690829061458c565b90506000611d78600386866131b5565b9050600084611d915782546001600160801b0316611da4565b8254600160801b90046001600160801b03165b9050806001600160801b0316826001600160801b031611611dfd5760405162461bcd60e51b8152602060048201526013602482015272141bdcda5d1a5bdb881b9bdd08199a5b1b1959606a1b6044820152606401610a25565b600085611e1e576001840154600160801b90046001600160801b0316611e2d565b60018401546001600160801b03165b90508515611e5f57611e58611e466106b189600161458c565b6001600160a01b0316611b6e896124a5565b9450611e9d565b611e9a611e706106b189600161458c565b6001600160a01b0316611e82896124a5565b6001600160a01b0316836001600160801b0316612467565b94505b611eb3611ea982614671565b859088600061300f565b50506000805460ff191690555090949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314611f2d5760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610a25565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b604051632bc34def60e21b81526000908190309063af0d37bc90611f819033908b908b908b908b908b906004016147f7565b60408051808303816000875af1158015611f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc391906147b3565b6008546040516323b872dd60e01b81529294509092506001600160a01b0316906323b872dd90611ffb90339030908790600401614707565b6020604051808303816000875af115801561201a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203e919061472b565b506009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061207390339030908690600401614707565b6020604051808303816000875af1158015612092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b6919061472b565b5050505050505050565b60006120cd6003846129b6565b6001600160801b03169392505050565b604051633f8ecd7360e11b815233600482015261ffff8087166024830152851660448201526001600160801b038416606482015260009081903090637f1d9ae69060840160408051808303816000875af115801561213f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216391906147b3565b6040516304c5e62b60e11b815233600482015261ffff808b166024830152891660448201526001600160801b036064820181905260848201529193509150309063098bcc569060a40160408051808303816000875af11580156121ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ee91906147b3565b505060085460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015612241573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612265919061472b565b5060095460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401612073565b6000806122b0858561139681600161458c565b905060006122c0600386866131b5565b90506000846122d95782546001600160801b03166122ec565b8254600160801b90046001600160801b03165b905060008561230f576001840154600160801b90046001600160801b031661231e565b60018401546001600160801b03165b90506000816001600160801b031611801561234a5750816001600160801b0316836001600160801b0316115b9450505050505b9392505050565b60055460009081906001600160a01b031633148061237557503330145b6123915760405162461bcd60e51b8152600401610a25906144f3565b60005460ff16156123b45760405162461bcd60e51b8152600401610a2590614516565b6000805460ff19166001178155604080516080810182526001600160a01b038916815261ffff80891660208301528716918101919091528190819061240a906060810161240089614671565b600f0b90526135ad565b925092509250600082118061241f5750600081115b1561244f578183600501546124349190614551565b8184600601546124449190614551565b600685015560058401555b6000805460ff19169055909890975095505050505050565b6000828410156124895760405162461bcd60e51b8152600401610a259061483d565b61249d8261249785876146a1565b90613825565b949350505050565b60006117ba6124bf662386f26fc1000061ffff8516614860565b612f89565b600061249d826124d485876146a1565b9061383a565b60008161250a576124f1848461139681600161458c565b60010154600160801b90046001600160801b031661249d565b61251a848461139681600161458c565b600101546001600160801b0316949350505050565b60008061253b84611794565b905082158015612556575061255461ffff82168561487f565b155b61256857612563816124a5565b612576565b6125766106b1600183614569565b6001600160a01b0316949350505050565b60055460009081906001600160a01b03163314806125a457503330145b6125c05760405162461bcd60e51b8152600401610a25906144f3565b60005460ff16156125e35760405162461bcd60e51b8152600401610a2590614516565b6000805460ff191660011790556001600160801b0385166126315760405162461bcd60e51b81526020600482015260086024820152670c08185b5bdd5b9d60c21b6044820152606401610a25565b61266e60405180608001604052808a6001600160a01b031681526020018961ffff1681526020018861ffff16815260200187600f0b8152506135ad565b6000805460ff19169055909a909950975050505050505050565b6000828410156126aa5760405162461bcd60e51b8152600401610a259061483d565b61249d6126b784866146a1565b8390612e2a565b600061249d826126ce85876146a1565b90612e2a565b600081156126fd57826126e885600161458c565b61ffff166126f69190614860565b9050612351565b6126f68361ffff8616614860565b60006120cd600384846131b5565b6040516342b6c9fb60e01b815233600482015261ffff831660248201528115604482015260009030906342b6c9fb906064016020604051808303816000875af115801561276a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061278e9190614893565b905081156128125760095460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044015b6020604051808303816000875af11580156127e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280c919061472b565b50505050565b60085460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016127c9565b505050565b6000828410156128705760405162461bcd60e51b8152600401610a259061483d565b61249d6126b760026128828688614551565b61288c91906146ce565b61249786886146a1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146128fa5760405162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b6044820152606401610a25565b6001805460ff60b81b198116600160b81b9182900460ff1615909102179055565b60008284101561293d5760405162461bcd60e51b8152600401610a259061483d565b61249d61294b858585612467565b600061295685612afc565b8661384f565b61299f8160405160240161297091906148f9565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b17905261389d565b50565b60006129ae828461487f565b159392505050565b61ffff811660009081526020838152604080832081516101808101835281546001600160801b038082168352600160801b91829004600f0b95830195909552600183015493820193909352600282015460608201526003820154600681900b6080830152600160381b81046001600160a01b031660a0830152600160d81b810463ffffffff1660c0830152600160f81b900460ff16151560e08201526004820154808516610100830181905290849004851661012083015260059092015480851661014083015292909204909216610160820152901580612aa357506101208101516001600160801b0316155b612aaf57612aaf61490c565b80610120015181610100015161249d91906145b2565b60008115612adf57611c94670de0b6b3a76400008361383a565b6117ba612aed836001614551565b670de0b6b3a76400009061383a565b60008115612b1657611c94670de0b6b3a764000083612e2a565b6117ba612b24836001614551565b670de0b6b3a764000090612e2a565b612b788282604051602401612b49929190614922565b60408051601f198184030181529190526020810180516001600160e01b03166309710a9d60e41b17905261389d565b5050565b61299f81604051602401612b9291815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f5b1bba960e01b17905261389d565b612849838383604051602401612bd993929190614944565b60408051601f198184030181529190526020810180516001600160e01b031663969cdd0360e01b17905261389d565b600080808088881015818812801590612d7d578115612cba57612c3b89886020015189600001518a6040015160016138be565b96509350898610612c9a5786518a9650612c59906126ce8d896146a1565b9350612c93612c6b89620f4240614969565b62ffffff16620f4240612c8c878b602001518c600001518d6040015161384f565b9190613a05565b9450612d48565b612c93612caa89620f4240614969565b8a9062ffffff16620f4240613a05565b612cde612ccb8a8960200151613a24565b6020890151895160408b015160006138be565b96509350898611612d355786518a9650612cfc906126ce888e6146a1565b9450612d1385600089600001518a6040015161384f565b9350612c93612d2589620f4240614969565b869062ffffff16620f4240613a05565b612d45612caa89620f4240614969565b94505b612d76612d6b620f4240612d5c8b82614969565b62ffffff8c8116929116613a05565b8690620f4240613a05565b9250612e1c565b8115612dfa576000612d8e8a6145d4565b88519091508c90612d9f9083613a3b565b612da99190614551565b96508a8710612de157612dc18b8d8a600001516126be565b8b97509550612710612dd387836146a1565b11612ddc578095505b612de5565b8095505b612df68660008a600001518f613a50565b9450505b612e0d8462ffffff8a16620f4240613a05565b9250612e198385614551565b93505b505095509550955095915050565b600061235183670de0b6b3a764000084613a05565b61ffff821660009081526020849052604090208115612edb576004810180546001600160801b03191690556005810180546001600160801b0316906000612e8583614987565b91906101000a8154816001600160801b0302191690836001600160801b0316021790555050612ed6604051806040016040528060068152602001657469636b3f3f60d01b8152508461ffff16612b33565b61280c565b6004810180546001600160801b03908116909155600582018054600160801b9004909116906010612f0b83614987565b91906101000a8154816001600160801b0302191690836001600160801b031602179055505050505050565b61ffff8316600090815260208590526040902080546001820154600160801b909104600f0b9190612f6790856146a1565b60018201556002810154612f7b90846146a1565b600290910155949350505050565b806001600160a01b0381168114612f9f57600080fd5b919050565b6040805160609490941b6bffffffffffffffffffffffff191660208086019190915260f093841b6001600160f01b031990811660348701529290931b909116603684015280516018818503018152603890930181528251928201929092206000908152929052902090565b811561307957600184015461302d906001600160801b031684611c2c565b6001850180546001600160801b0319166001600160801b03929092169190911790556000600f84900b1315612ed65783546001600160801b03808316600160801b02911617845561280c565b600184015461309890600160801b90046001600160801b031684611c2c565b6001850180546001600160801b03928316600160801b0292169190911790556000600f84900b131561280c5783546001600160801b0319166001600160801b0391909116179092555050565b801561314d5761ffff8316600090815260208590526040902060040154613114906001600160801b031683611c2c565b61ffff8416600090815260208690526040902060040180546001600160801b0319166001600160801b039290921691909117905561280c565b61ffff831660009081526020859052604090206004015461317e90600160801b90046001600160801b031683611c2c565b61ffff8416600090815260208690526040902060040180546001600160801b03928316600160801b02921691909117905550505050565b6000816131e85761ffff8316600090815260208590526040902060050154600160801b90046001600160801b031661249d565b505061ffff16600090815260209190915260409020600501546001600160801b031690565b80156134be57604080518082018252600881526762616c616e63657360c01b602082015260095491516370a0823160e01b815230600482015261330f926001600160a01b0316906370a0823190602401602060405180830381865afa15801561327a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329e9190614893565b6008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a9190614893565b612bc1565b61333860405180604001604052806006815260200165746f6769766560d01b8152508484612bc1565b60095460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529091169063a9059cbb906044016020604051808303816000875af115801561338b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133af919061472b565b50604080518082018252600781526662616c6f66726560c81b602082015260085491516370a0823160e01b81526001600160a01b0387811660048301526134419316906370a0823190602401602060405180830381865afa158015613418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061343c9190614893565b612b33565b6008546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061347590879030908790600401614707565b6020604051808303816000875af1158015613494573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b8919061472b565b5061280c565b60085460405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690529091169063a9059cbb906044016020604051808303816000875af1158015613511573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613535919061472b565b506009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd9061356a90879030908790600401614707565b6020604051808303816000875af1158015613589573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611986919061472b565b604080516080810182526001546001600160a01b038116825261ffff600160a01b820416602080840182905260ff600160b01b8404811685870152600160b81b9093049092161515606080850191909152855192860151948601519086015160009586958695909461362194919390613a91565b93508460600151600f0b60001461381d57846020015161ffff16816020015161ffff1610156136b3576136ac61365a86604001516124a5565b6001600160a01b031661367087602001516124a5565b6001600160a01b031660008860600151600f0b121561369f57876060015161369790614671565b600f0b612467565b8760600151600f0b612467565b915061381d565b846040015161ffff16816020015161ffff1610156137c05760025460408601516001600160801b039091169061372e906136ec906124a5565b6001600160a01b031683600001516001600160a01b031660008960600151600f0b121561372157886060015161369790614671565b8860600151600f0b612467565b925061378a82600001516001600160a01b031661374e88602001516124a5565b6001600160a01b031660008960600151600f0b121561377d57886060015161377590614671565b600f0b61291b565b8860600151600f0b61291b565b935061379a818760600151611c2c565b600280546001600160801b0319166001600160801b03929092169190911790555061381d565b61381a6137d086604001516124a5565b6001600160a01b03166137e687602001516124a5565b6001600160a01b031660008860600151600f0b121561380d57876060015161377590614671565b8760600151600f0b61291b565b92505b509193909250565b60006123518383670de0b6b3a7640000613a05565b600061235183670de0b6b3a764000084613b1d565b600061385b8286613825565b61388a8661386a876002614860565b6138749190614551565b6002613880878a613825565b61249791906146ce565b6138949190614551565b95945050505050565b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b6000808215613994576000670de0b6b3a76400006002866138df898b613825565b6138e99190614551565b6138f39190614a92565b6138fd91906146ce565b9050600061390b878a613825565b613916906002614860565b9050600061393f670de0b6b3a76400006139308486614551565b61393a9190614860565b613b4b565b905060008761394e8a8c613825565b6139589190614551565b9050613968896126ce83856146a1565b95508761397f6139788c89614551565b8b90613825565b6139899190614551565b9450505050506139fb565b600060026139a2878a613825565b6139ac91906146ce565b6139b68789613825565b6139c09087614551565b6139ca91906146a1565b90506139d68882613825565b9250846139ed6139e68a8a6146a1565b8890613825565b6139f79190614551565b9150505b9550959350505050565b828202811515841585830485141716613a1d57600080fd5b0492915050565b600081831115613a345781612351565b5090919050565b60006123518383670de0b6b3a7640000613b1d565b6000613a5c8286613a3b565b61388a86613a6b876002614860565b613a759190614551565b6002613a81878a613a3b565b613a8b91906146ce565b90613a3b565b6000613aa06004878787612fa4565b60065460075491925090600f85900b15613aed57600654600754613acf916003918a9188918a91906000613c24565b50600654600754613aeb91600391899188918a91906001613c24565b505b600080613aff60038a8a898888613d2b565b9092509050613b1085888484613e17565b5050505095945050505050565b828202811515841585830485141716613b3557600080fd5b6001826001830304018115150290509392505050565b600181600160801b8110613b645760409190911b9060801c5b680100000000000000008110613b7f5760209190911b9060401c5b6401000000008110613b965760109190911b9060201c5b620100008110613bab5760089190911b9060101c5b6101008110613bbf5760049190911b9060081c5b60108110613bd25760029190911b9060041c5b60088110613be1578160011b91505b5080820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c80820481811015613c1e578091505b50919050565b61ffff8616600090815260208890526040812080546001600160801b031682613c4d8289611c2c565b6001600160801b038381161590821615811415955090915015613ca0578861ffff168a61ffff1611613c885760018301879055600283018690555b6003830180546001600160f81b0316600160f81b1790555b82546001600160801b0319166001600160801b03821617835584613ce6578254613ce190613cdc90600f8b810b91600160801b9004900b614630565b614000565b613d04565b8254613d0490613cdc90600f8b810b91600160801b9004900b6145f1565b83546001600160801b03918216600160801b02911617909255509098975050505050505050565b61ffff80861660008181526020899052604080822088851683529082209193849391929184918291908a1610613d6c57505060018201546002830154613d90565b6001840154613d7b90896146a1565b9150836002015487613d8d91906146a1565b90505b6000808b61ffff168b61ffff161015613db457505060018301546002840154613dd8565b6001850154613dc3908b6146a1565b9150846002015489613dd591906146a1565b90505b81613de3858c6146a1565b613ded91906146a1565b975080613dfa848b6146a1565b613e0491906146a1565b9650505050505050965096945050505050565b604080516101208101825285546001600160801b038082168352600160801b918290048116602084015260018801548082169484019490945292048216606082015260028601549091166080820152600385015460a0820152600485015460c0820152600585015460e082015260068501546101008201526000600f85900b613ee757600082608001516001600160801b031611613edc5760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610a25565b506080810151613ef8565b613ef5826080015186611c2c565b90505b6000613f2483608001516001600160801b0316670de0b6b3a76400008560a0015188612c8c91906146a1565b90506000613f5284608001516001600160801b0316670de0b6b3a76400008660c0015188612c8c91906146a1565b905086600f0b600014613f7d576002880180546001600160801b0319166001600160801b0385161790555b60038801869055600488018590556001600160801b038216151580613fab57506000816001600160801b0316115b156120b657816001600160801b0316886005016000828254613fcd9190614551565b92505081905550806001600160801b0316886006016000828254613ff19190614551565b90915550505050505050505050565b80600f81900b8114612f9f57600080fd5b80356001600160a01b0381168114612f9f57600080fd5b801515811461299f57600080fd5b60008083601f84011261404857600080fd5b50813567ffffffffffffffff81111561406057600080fd5b60208301915083602082850101111561407857600080fd5b9250929050565b60008060008060008060a0878903121561409857600080fd5b6140a187614011565b955060208701356140b181614028565b94506040870135935060608701359250608087013567ffffffffffffffff8111156140db57600080fd5b6140e789828a01614036565b979a9699509497509295939492505050565b803561ffff81168114612f9f57600080fd5b6001600160801b038116811461299f57600080fd5b600080600080600060a0868803121561413857600080fd5b61414186614011565b945061414f602087016140f9565b935061415d604087016140f9565b9250606086013561416d8161410b565b9150608086013561417d8161410b565b809150509295509295909350565b600080600080608085870312156141a157600080fd5b6141aa85614011565b93506141b8602086016140f9565b925060408501356141c88161410b565b915060608501356141d881614028565b939692955090935050565b6000602082840312156141f557600080fd5b5035919050565b60008060006060848603121561421157600080fd5b833561421c81614028565b925060208401359150614231604085016140f9565b90509250925092565b60008060006060848603121561424f57600080fd5b61425884614011565b9250614266602085016140f9565b9150604084013561427681614028565b809150509250925092565b60006020828403121561429357600080fd5b81356123518161410b565b600080604083850312156142b157600080fd5b82356142bc8161410b565b91506020830135600f81900b81146142d357600080fd5b809150509250929050565b6000602082840312156142f057600080fd5b61235182614011565b60008060008060006080868803121561431157600080fd5b61431a866140f9565b9450614328602087016140f9565b935060408601356143388161410b565b9250606086013567ffffffffffffffff81111561435457600080fd5b61436088828901614036565b969995985093965092949392505050565b6000806040838503121561438457600080fd5b61438d836140f9565b915060208301356142d381614028565b600080600080608085870312156143b357600080fd5b6143bc85614011565b93506143ca602086016140f9565b92506143d8604086016140f9565b915060608501356141d88161410b565b6000806000606084860312156143fd57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561442657600080fd5b612351826140f9565b6000806040838503121561444257600080fd5b8235915060208301356142d381614028565b60008060008060008060a0878903121561446d57600080fd5b61447687614011565b9550614484602088016140f9565b9450614492604088016140f9565b935060608701356144a28161410b565b9250608087013567ffffffffffffffff8111156140db57600080fd5b6000806000606084860312156144d357600080fd5b6144dc846140f9565b925060208401359150604084013561427681614028565b6020808252600990820152684e6f7420456e74727960b81b604082015260600190565b6020808252600b908201526a4552525f5245454e54525960a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600082198211156145645761456461453b565b500190565b600061ffff838116908316818110156145845761458461453b565b039392505050565b600061ffff8083168185168083038211156145a9576145a961453b565b01949350505050565b60006001600160801b038083168185168083038211156145a9576145a961453b565b6000600160ff1b8214156145ea576145ea61453b565b5060000390565b60008083128015600160ff1b85018412161561460f5761460f61453b565b6001600160ff1b038401831381161561462a5761462a61453b565b50500390565b600080821280156001600160ff1b03849003851316156146525761465261453b565b600160ff1b839003841281161561466b5761466b61453b565b50500190565b600081600f0b6f7fffffffffffffffffffffffffffffff198114156146985761469861453b565b60000392915050565b6000828210156146b3576146b361453b565b500390565b634e487b7160e01b600052601260045260246000fd5b6000826146dd576146dd6146b8565b500490565b600080604083850312156146f557600080fd5b8251915060208301516142d38161410b565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561473d57600080fd5b815161235181614028565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b0387168152851515602082015284604082015283606082015260a0608082015260006147a760a083018486614748565b98975050505050505050565b600080604083850312156147c657600080fd5b505080516020909101519092909150565b60006001600160801b03838116908316818110156145845761458461453b565b6001600160a01b038716815261ffff8681166020830152851660408201526001600160801b038416606082015260a0608082018190526000906147a79083018486614748565b602080825260099082015268383934b1b29022a92960b91b604082015260600190565b600081600019048311821515161561487a5761487a61453b565b500290565b60008261488e5761488e6146b8565b500690565b6000602082840312156148a557600080fd5b5051919050565b6000815180845260005b818110156148d2576020818501810151868301820152016148b6565b818111156148e4576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061235160208301846148ac565b634e487b7160e01b600052600160045260246000fd5b60408152600061493560408301856148ac565b90508260208301529392505050565b60608152600061495760608301866148ac565b60208301949094525060400152919050565b600062ffffff8083168185168083038211156145a9576145a961453b565b60006001600160801b03808316818114156149a4576149a461453b565b6001019392505050565b600181815b808511156149e95781600019048211156149cf576149cf61453b565b808516156149dc57918102915b93841c93908002906149b3565b509250929050565b600082614a00575060016117ba565b81614a0d575060006117ba565b8160018114614a235760028114614a2d57614a49565b60019150506117ba565b60ff841115614a3e57614a3e61453b565b50506001821b6117ba565b5060208310610133831016604e8410600b8410161715614a6c575081810a6117ba565b614a7683836149ae565b8060001904821115614a8a57614a8a61453b565b029392505050565b600061235160ff8416836149f156fea26469706673582212200ac332dab8f1ddc52a43189599c20a5d046e24655888ab8b9e530aec17ba2df564736f6c634300080a0033";