0 txs
0 calls
constructor
constructor()
functions
currentFee
viewfunction currentFee() view returns (uint24)
factory
viewfunction factory() view returns (address)
fee
viewfunction fee() view returns (uint24)
feeGrowthGlobal0X128
viewfunction feeGrowthGlobal0X128() view returns (uint256)
feeGrowthGlobal1X128
viewfunction feeGrowthGlobal1X128() view returns (uint256)
lastPeriod
viewfunction lastPeriod() view returns (uint256)
liquidity
viewfunction liquidity() view returns (uint128)
maxLiquidityPerTick
viewfunction maxLiquidityPerTick() view returns (uint128)
nfpManager
viewfunction nfpManager() view returns (address)
observations
viewfunction observations(uint256 index) view returns (uint32 blockTimestamp, int56 tickCumulative, uint160 secondsPerLiquidityCumulativeX128, bool initialized)
observe
viewfunction observe(uint32[] secondsAgos) view returns (int56[] tickCumulatives, uint160[] secondsPerLiquidityCumulativeX128s)
periodCumulativesInside
viewfunction periodCumulativesInside(uint32 period, int24 tickLower, int24 tickUpper) view returns (uint160 secondsPerLiquidityInsideX128)
periods
viewfunction periods(uint256 period) view returns (uint32 previousPeriod, int24 startTick, int24 lastTick, uint160 endSecondsPerLiquidityPeriodX128)
positionPeriodDebt
viewfunction positionPeriodDebt(uint256 period, address owner, uint256 index, int24 tickLower, int24 tickUpper) view returns (int256 secondsDebtX96)
positionPeriodSecondsInRange
viewfunction positionPeriodSecondsInRange(uint256 period, address owner, uint256 index, int24 tickLower, int24 tickUpper) view returns (uint256 periodSecondsInsideX96)
positions
viewfunction positions(bytes32 key) view returns (uint128, uint256, uint256, uint128, uint128)
protocolFees
viewfunction protocolFees() view returns (uint128, uint128)
readStorage
viewfunction readStorage(bytes32[] slots) view returns (bytes32[] returnData)
slot0
viewfunction slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked)
snapshotCumulativesInside
viewfunction snapshotCumulativesInside(int24 tickLower, int24 tickUpper) view returns (int56 tickCumulativeInside, uint160 secondsPerLiquidityInsideX128, uint32 secondsInside)
tickBitmap
viewfunction tickBitmap(int16 tick) view returns (uint256)
ticks
viewfunction ticks(int24 tick) view returns (uint128 liquidityGross, int128 liquidityNet, uint256 feeGrowthOutside0X128, uint256 feeGrowthOutside1X128, int56 tickCumulativeOutside, uint160 secondsPerLiquidityOutsideX128, uint32 secondsOutside, bool initialized)
tickSpacing
viewfunction tickSpacing() view returns (int24)
token0
viewfunction token0() view returns (address)
token1
viewfunction token1() view returns (address)
_advancePeriod
nonpayablefunction _advancePeriod()
burn
nonpayablefunction burn(int24 tickLower, int24 tickUpper, uint128 amount) returns (uint256 amount0, uint256 amount1)
burn
nonpayablefunction burn(uint256 index, int24 tickLower, int24 tickUpper, uint128 amount) returns (uint256 amount0, uint256 amount1)
collect
nonpayablefunction collect(address recipient, int24 tickLower, int24 tickUpper, uint128 amount0Requested, uint128 amount1Requested) returns (uint128 amount0, uint128 amount1)
collect
nonpayablefunction collect(address recipient, uint256 index, int24 tickLower, int24 tickUpper, uint128 amount0Requested, uint128 amount1Requested) returns (uint128 amount0, uint128 amount1)
collectProtocol
nonpayablefunction collectProtocol(address recipient, uint128 amount0Requested, uint128 amount1Requested) returns (uint128 amount0, uint128 amount1)
flash
nonpayablefunction flash(address recipient, uint256 amount0, uint256 amount1, bytes data)
increaseObservationCardinalityNext
nonpayablefunction increaseObservationCardinalityNext(uint16 observationCardinalityNext)
initialize
nonpayablefunction initialize(address _factory, address _nfpManager, address _token0, address _token1, uint24 _fee, int24 _tickSpacing)
initialize
nonpayablefunction initialize(uint160 sqrtPriceX96)
mint
nonpayablefunction mint(address recipient, int24 tickLower, int24 tickUpper, uint128 amount, bytes data) returns (uint256 amount0, uint256 amount1)
mint
nonpayablefunction mint(address recipient, uint256 index, int24 tickLower, int24 tickUpper, uint128 amount, bytes data) returns (uint256 amount0, uint256 amount1)
setFee
nonpayablefunction setFee(uint24 _fee)
setFeeProtocol
nonpayablefunction setFeeProtocol()
swap
nonpayablefunction swap(address recipient, bool zeroForOne, int256 amountSpecified, uint160 sqrtPriceLimitX96, bytes data) returns (int256 amount0, int256 amount1)
events
Burn
event Burn(address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
Collect
event Collect(address indexed owner, address recipient, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount0, uint128 amount1)
CollectProtocol
event CollectProtocol(address indexed sender, address indexed recipient, uint128 amount0, uint128 amount1)
Flash
event Flash(address indexed sender, address indexed recipient, uint256 amount0, uint256 amount1, uint256 paid0, uint256 paid1)
IncreaseObservationCardinalityNext
event IncreaseObservationCardinalityNext(uint16 observationCardinalityNextOld, uint16 observationCardinalityNextNew)
Initialize
event Initialize(uint160 sqrtPriceX96, int24 tick)
Mint
event Mint(address sender, address indexed owner, int24 indexed tickLower, int24 indexed tickUpper, uint128 amount, uint256 amount0, uint256 amount1)
SetFeeProtocol
event SetFeeProtocol(uint8 feeProtocol0Old, uint8 feeProtocol1Old, uint8 feeProtocol0New, uint8 feeProtocol1New)
Swap
event Swap(address indexed sender, address indexed recipient, int256 amount0, int256 amount1, uint160 sqrtPriceX96, uint128 liquidity, int24 tick)
errors
No errors.
creation bytecode
0x6080604052600080516020620058ed8339815191526000553480156200002457600080fd5b5060006200003c6200005960201b620030ae1760201c565b6201000f01805463ff00000019166301000000179055506200006c565b600080516020620058ed83398151915290565b615871806200007c6000396000f3fe608060405234801561001057600080fd5b50600436106102c85760003560e01c806398bbc3c71161017b578063d340ef8a116100d8578063ea4a11041161008c578063f305839911610071578063f3058399146105bd578063f30dba93146105c5578063f637731d146105ec576102c8565b8063ea4a110414610587578063eabb5622146105aa576102c8565b8063ddca3f43116100bd578063ddca3f431461054c578063dfc8b61514610554578063e57c0ca914610567576102c8565b8063d340ef8a1461052f578063da3c300d14610537576102c8565b8063add5887e1161012f578063c45a015511610114578063c45a01551461050a578063d0c93a7c14610512578063d21220a714610527576102c8565b8063add5887e146104ef578063c2e0f9b214610502576102c8565b8063a02f106911610160578063a02f1069146104a7578063a34123a7146104ba578063a38807f2146104cd576102c8565b806398bbc3c71461048c5780639918fbb614610494576102c8565b80634f1eb3d811610229578063725d13ae116101dd5780638221b8c1116101c25780638221b8c11461044557806385b6672914610458578063883bdbfd1461046b576102c8565b8063725d13ae1461042a5780637b7d549d1461043d576102c8565b80635339c2961161020e5780635339c296146103fc5780636847456a1461040f57806370cf754a14610422576102c8565b80634f1eb3d8146103c5578063514ea4bf146103d8576102c8565b806332148f67116102805780633c8a7d8d116102655780633c8a7d8d1461038a578063461413191461039d578063490e6cbc146103b2576102c8565b806332148f671461035a5780633850c7bd1461036f576102c8565b80631a686502116102b15780631a6865021461030c5780631ad8b03b14610321578063252c09d714610337576102c8565b80630dfe1681146102cd578063128acb08146102eb575b600080fd5b6102d56105ff565b6040516102e29190614fce565b60405180910390f35b6102fe6102f9366004614829565b61061b565b6040516102e292919061528b565b6103146113bf565b6040516102e291906155d5565b6103296113db565b6040516102e2929190615641565b61034a610345366004614c24565b611421565b6040516102e294939291906157a5565b61036d610368366004614df8565b6114b3565b005b6103776115e0565b6040516102e297969594939291906156ca565b6102fe6103983660046148b0565b611698565b6103a56116bb565b6040516102e29190615282565b61036d6103c0366004614abb565b6116ce565b6103296103d33660046148ff565b611a3e565b6103eb6103e6366004614c24565b611a5e565b6040516102e295949392919061567c565b6103a561040a366004614c5d565b611ab7565b6102fe61041d366004614eec565b611ae4565b610314611c90565b61036d6104383660046147ae565b611cac565b61036d611e4d565b6102fe6104533660046149b5565b611ebb565b61032961046636600461496b565b612122565b61047e610479366004614b23565b612272565b6040516102e292919061507f565b6102d561237c565b6103a56104a2366004614e94565b612398565b6103296104b5366004614a47565b61245d565b6102fe6104c8366004614cca565b612676565b6104e06104db366004614c98565b612692565b6040516102e2939291906152f1565b6102d56104fd366004614f3a565b6127a1565b61036d612839565b6102d5612b07565b61051a612b20565b6040516102e29190615260565b6102d5612b3d565b6103a5612b59565b61053f612b6c565b6040516102e29190615728565b61053f612b8b565b6103a5610562366004614e94565b612ba5565b61057a610575366004614b23565b612c62565b6040516102e2919061503b565b61059a610595366004614c24565b612cfb565b6040516102e29493929190615775565b61036d6105b8366004614e7a565b612d86565b6103a5612de9565b6105d86105d3366004614c7e565b612dfc565b6040516102e29897969594939291906155e9565b61036d6105fa366004614e14565b612e97565b60006106096130ae565b600201546001600160a01b0316905090565b600080610626612839565b60006106306130ae565b9050866106585760405162461bcd60e51b815260040161064f90615408565b60405180910390fd5b6040805160e08101825260058301546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c082018190526106f85760405162461bcd60e51b815260040161064f90615506565b886107435780600001516001600160a01b0316876001600160a01b031611801561073e575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038816105b610775565b80600001516001600160a01b0316876001600160a01b031610801561077557506401000276a36001600160a01b038816115b6107915760405162461bcd60e51b815260040161064f906154cd565b60058201805460ff60f01b191690556107a8614533565b6107b0614577565b600062093a806107be6130d2565b63ffffffff16816107cb57fe5b0463ffffffff1690506040518061010001604052808d6107f65760048660a0015160ff16901c610809565b60108660a0015160ff168161080757fe5b065b60ff168152600b8701546001600160801b0316602082015260400161082c6130d2565b63ffffffff168152602001600060060b815260200160006001600160a01b0316815260200160001515815260200160008d131515815260200186600601600084815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1681525092506040518061012001604052808c81526020016000815260200185600001516001600160a01b03168152602001856020015160020b81526020018d6108e15786600901546108e7565b86600801545b815260006020808301829052868101516001600160801b031660408085019190915260e088015163ffffffff16835260068a0180835281842054600160501b90046001600160a01b0316606086015295835294905292909220546401000000009004600290810b900b60809092019190915290505b8051158015906109825750886001600160a01b031681604001516001600160a01b031614155b15610efb5761098f6145c3565b60408201516001600160a01b03168152606082015160038601546109c291600d880191600160b81b900460020b8f6130d6565b15156040830152600290810b810b60208301819052620d89e719910b12156109f357620d89e7196020820152610a12565b6020810151620d89e860029190910b1315610a1257620d89e860208201525b610a1f8160200151613218565b6001600160a01b031660608201526040820151610aa0908d610a59578b6001600160a01b031683606001516001600160a01b031611610a73565b8b6001600160a01b031683606001516001600160a01b0316105b610a81578260600151610a83565b8b5b60c0850151855160038a0154600160a01b900462ffffff1661354a565b60c08086019190915260a085019190915260808401919091526001600160a01b03909116604084015283015115610b1057610ae48160c0015182608001510161373c565b825103825260a0810151610b0690610afb9061373c565b602084015190613752565b6020830152610b4b565b610b1d8160a0015161373c565b825101825260c08101516080820151610b4591610b3a910161373c565b60208401519061376e565b60208301525b825160ff1615610b9e5760006064846000015160050260320160ff168360c001510281610b7457fe5b60c0840180519290910491829003905260a0840180519091016001600160801b0316905250610bd7565b600060648260c0015160050281610bb157fe5b60c0840180519290910491829003905260a0840180519091016001600160801b03169052505b60c08201516001600160801b031615610c1657610c0a8160c00151600160801b8460c001516001600160801b0316613784565b60808301805190910190525b80606001516001600160a01b031682604001516001600160a01b03161415610eba57806040015115610e91578260a00151610d1757734a76a2f26cb26d4d4246470cc95e4da4ab0a0e92634e81939d86600f01856040015160008860200151896040015189602001518b606001516040518863ffffffff1660e01b8152600401610ca69796959493929190615215565b604080518083038186803b158015610cbd57600080fd5b505af4158015610cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf59190614cf5565b6001600160a01b03166080850152600690810b900b6060840152600160a08401525b610d1f6145ff565b8c15610d3e576080830151602082015260098601546040820152610d53565b60088601546020820152608083015160408201525b73fc07c1996f8987e39e271b389c39a148baf24ba463bf7ca94e87600c01604051806101000160405280866020015160020b8152602001856020015181526020018560400151815260200188608001516001600160a01b031681526020018760e00151815260200187610100015160020b8152602001886060015160060b8152602001886040015163ffffffff168152506040518363ffffffff1660e01b8152600401610e0192919061534d565b60206040518083038186803b158015610e1957600080fd5b505af4158015610e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e519190614c3c565b600f90810b900b81528c15610e6f578051600003600f90810b900b81525b610e818360c001518260000151613833565b6001600160801b031660c0840152505b8b610ea0578060200151610ea9565b60018160200151035b600290810b900b6060830152610ef5565b80600001516001600160a01b031682604001516001600160a01b031614610ef557610ee882604001516138e9565b600290810b900b60608301525b5061095c565b826020015160020b816060015160020b1461107657600080734a76a2f26cb26d4d4246470cc95e4da4ab0a0e9263875f3f1287600f0187604001518760400151896020015189602001518b606001518c608001516040518863ffffffff1660e01b8152600401610f719796959493929190615140565b604080518083038186803b158015610f8857600080fd5b505af4158015610f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc09190614e4c565b6040850151606086015160058a0180547fffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b61ffff95861602177fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b95909416949094029290921762ffffff60a01b1916600160a01b62ffffff60029490940b9390931692909202919091176001600160a01b0319166001600160a01b039091161790555061109d9050565b60408101516005850180546001600160a01b0319166001600160a01b039092169190911790555b8060c001516001600160801b031682602001516001600160801b0316146110e55760c0810151600b850180546001600160801b0319166001600160801b039092169190911790555b8a15611139576080810151600885015560a08101516001600160801b0316156111345760a0810151600a850180546001600160801b031981166001600160801b03918216909301169190911790555b611183565b6080810151600985015560a08101516001600160801b0316156111835760a0810151600a850180546001600160801b03808216600160801b92839004821690940116029190911790555b8160c0015115158b1515146111a057602081015181518b036111ad565b80600001518a0381602001515b90965094508a1561127c5760008512156111de5760038401546111de906001600160a01b03168d6000889003613c15565b60006111e8613d5c565b60405163654b648760e01b8152909150339063654b648790611214908a908a908e908e90600401615299565b600060405180830381600087803b15801561122e57600080fd5b505af1158015611242573d6000803e3d6000fd5b5050505061124e613d5c565b6112588289613e81565b11156112765760405162461bcd60e51b815260040161064f90615523565b5061133c565b60008612156112a25760028401546112a2906001600160a01b03168d6000899003613c15565b60006112ac613e91565b60405163654b648760e01b8152909150339063654b6487906112d8908a908a908e908e90600401615299565b600060405180830381600087803b1580156112f257600080fd5b505af1158015611306573d6000803e3d6000fd5b50505050611312613e91565b61131c8288613e81565b111561133a5760405162461bcd60e51b815260040161064f90615523565b505b8b6001600160a01b0316336001600160a01b03167fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67888885604001518660c0015187606001516040516113939594939291906152b9565b60405180910390a3505050600501805460ff60f01b1916600160f01b1790559097909650945050505050565b60006113c96130ae565b600b01546001600160801b0316905090565b60008060006113e86130ae565b60408051808201909152600a91909101546001600160801b03808216808452600160801b90920416602090920182905293509150509091565b60008060008060006114316130ae565b600f018661ffff811061144057fe5b60408051608081018252919092015463ffffffff81168083526401000000008204600690810b810b900b602084018190526b01000000000000000000000083046001600160a01b0316948401859052600160f81b90920460ff161515606090930183905299909850919650945092505050565b6114bb613f14565b60006114c56130ae565b6005810154604051630e51299960e01b8152919250600160d81b900461ffff1690600090734a76a2f26cb26d4d4246470cc95e4da4ab0a0e9290630e5129999061151a90600f8701908690899060040161510c565b60206040518083038186803b15801561153257600080fd5b505af4158015611546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a9190614e30565b60058401805461ffff808416600160d81b810261ffff60d81b19909316929092179092559192508316146115d2577fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a82826040516115c9929190615713565b60405180910390a15b5050506115dd613f5c565b50565b6000806000806000806000806115f46130ae565b6040805160e081018252600592909201546001600160a01b038116808452600160a01b8204600290810b810b900b6020850181905261ffff600160b81b84048116948601859052600160c81b8404811660608701819052600160d81b85049091166080870181905260ff600160e81b8604811660a08901819052600160f01b90960416151560c0909701879052929e919d50939b5092995097509550909350915050565b6000806116ab8860008989898989611ebb565b915091505b965096945050505050565b60006116c56130ae565b60090154905090565b6116d6613f14565b60006116e06130ae565b600b8101549091506001600160801b03168061170e5760405162461bcd60e51b815260040161064f9061545c565b6003820154600090611731908890600160a01b900462ffffff16620f4240613f85565b6003840154909150600090611757908890600160a01b900462ffffff16620f4240613f85565b90506000611763613d5c565b9050600061176f613e91565b90508915611790576002860154611790906001600160a01b03168c8c613c15565b88156117af5760038601546117af906001600160a01b03168c8b613c15565b604051633797d3b360e21b8152339063de5f4ecc906117d890879087908d908d90600401615299565b600060405180830381600087803b1580156117f257600080fd5b505af1158015611806573d6000803e3d6000fd5b50505050611812614623565b61181a613d5c565b8152611824613e91565b602082015280516118358487613e81565b11156118535760405162461bcd60e51b815260040161064f906153cf565b60208101516118628386613e81565b11156118805760405162461bcd60e51b815260040161064f90615424565b611888614623565b81518490038082526020808401518590039083015215611931576005880154600160e81b9004600f16600081156118cd57825160ff831690816118c757fe5b046118d0565b60005b90506001600160801b0381161561190557600a8a0180546001600160801b038082168401166001600160801b03199091161790555b61192381846000015103600160801b8b6001600160801b0316613784565b60088b018054909101905550505b6020810151156119ce576005880154600160e81b900460041c600f166000811561196b578160ff1683602001518161196557fe5b0461196e565b60005b90506001600160801b038116156119a257600a8a0180546001600160801b03600160801b8083048216850182160291161790555b6119c081846020015103600160801b8b6001600160801b0316613784565b60098b018054909101905550505b8c6001600160a01b0316336001600160a01b03167fbdbdb71d7860376ba52b25a5028beea23581364a40522f6bcfb86bb1f2dca6338e8e85600001518660200151604051611a1f9493929190615738565b60405180910390a35050505050505050611a37613f5c565b5050505050565b600080611a508760008888888861245d565b915091509550959350505050565b600080600080600080611a6f6130ae565b6000978852600e01602052505060409094208054600182015460028301546003909301546001600160801b03928316989197509295508183169450600160801b909204169150565b6000611ac16130ae565b600d0160008360010b60010b81526020019081526020016000205490505b919050565b600080611aef613f14565b611af7612839565b6000806000731c16c172abcf809b89c0cb838c0bb4d9add01daf6368e5d9076040518060a00160405280336001600160a01b031681526020018c81526020018b60020b81526020018a60020b8152602001611b5a8a6001600160801b0316613fbf565b600003600f0b8152506040518263ffffffff1660e01b8152600401611b7f9190615540565b60606040518083038186803b158015611b9757600080fd5b505af4158015611bab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bcf9190614d81565b9250925092508160000394508060000393506000851180611bf05750600084115b15611c2f576003830180546001600160801b038082168089018216600160801b93849004831689019092169092029091176001600160801b0319161790555b8660020b8860020b336001600160a01b03167f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c898989604051611c749392919061565b565b60405180910390a4505050611c87613f5c565b94509492505050565b6000611c9a6130ae565b600401546001600160801b0316905090565b6000611cb66130ae565b6201000f8101549091506301000000900460ff1615611cd457600080fd5b80546001600160a01b038089166001600160a01b0319928316178355600183018054898316908416179055600280840180548984169085161790556003840180546201000f8601805462ffffff191662ffffff808b169182179092559388900b16600160b81b027fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff600160a01b9490940262ffffff60a01b19958b1692909616919091179390931693909317161790556040516382c66f8760e01b815273fc07c1996f8987e39e271b389c39a148baf24ba4906382c66f8790611dbb908590600401615260565b60206040518083038186803b158015611dd357600080fd5b505af4158015611de7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0b9190614dae565b6004820180546001600160801b03929092166001600160801b03199092169190911790556201000f01805463ff00000019166301000000179055505050505050565b611e55613f14565b73a2fb4a2f2e7bb3f8e97aced35ab6e59bea226262637b7d549d6040518163ffffffff1660e01b815260040160006040518083038186803b158015611e9957600080fd5b505af4158015611ead573d6000803e3d6000fd5b50505050611eb9613f5c565b565b600080611ec6613f14565b611ece612839565b6000856001600160801b031611611ee457600080fd5b611eec614623565b731c16c172abcf809b89c0cb838c0bb4d9add01daf6368e5d9076040518060a001604052808d6001600160a01b031681526020018c81526020018b60020b81526020018a60020b8152602001611f4a8a6001600160801b0316613fbf565b600f0b8152506040518263ffffffff1660e01b8152600401611f6c9190615540565b60606040518083038186803b158015611f8457600080fd5b505af4158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190614d81565b60208401819052818452909450925060009050808415611fe157611fde613d5c565b91505b8315611ff257611fef613e91565b90505b604051633e48f41760e01b81523390633e48f4179061201b90889088908c908c90600401615299565b600060405180830381600087803b15801561203557600080fd5b505af1158015612049573d6000803e3d6000fd5b5050505060008511156120865761205e613d5c565b6120688387613e81565b11156120865760405162461bcd60e51b815260040161064f90615494565b83156120bc57612094613e91565b61209e8286613e81565b11156120bc5760405162461bcd60e51b815260040161064f906154ea565b8860020b8a60020b8d6001600160a01b03167f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde338c8a8a6040516121039493929190614fe2565b60405180910390a4505050612116613f5c565b97509795505050505050565b60008061212d613f14565b60006121376130ae565b8054604080516331056e5760e21b815290519293506001600160a01b039091169163c415b95c91600480820192602092909190829003018186803b15801561217e57600080fd5b505afa158015612192573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b69190614792565b6001600160a01b0316336001600160a01b0316146121d357600080fd5b6040516385b6672960e01b815273a2fb4a2f2e7bb3f8e97aced35ab6e59bea226262906385b667299061220e90899089908990600401615011565b604080518083038186803b15801561222557600080fd5b505af4158015612239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225d9190614dca565b925092505061226a613f5c565b935093915050565b606080600061227f6130ae565b9050734a76a2f26cb26d4d4246470cc95e4da4ab0a0e926326e0776782600f016122a76130d2565b6005850154600b8601546040517fffffffff0000000000000000000000000000000000000000000000000000000060e087901b16815261231b9493928c928c92600160a01b830460020b9261ffff600160b81b82048116936001600160801b031692600160c81b9092041690600401615188565b60006040518083038186803b15801561233357600080fd5b505af4158015612347573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261236f9190810190614b63565b92509250505b9250929050565b60006123866130ae565b600101546001600160a01b0316905090565b6040805160a0810182528681526001600160a01b0386166020820152808201859052600284810b606083015283900b6080820152905163d2e6311b60e01b8152600091731c16c172abcf809b89c0cb838c0bb4d9add01daf9163d2e6311b916124039160040161558c565b60206040518083038186803b15801561241b57600080fd5b505af415801561242f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124539190614d69565b9695505050505050565b600080612468613f14565b60006124726130ae565b90506000731c16c172abcf809b89c0cb838c0bb4d9add01daf639c766c9d83600e01338c8c8c6040518663ffffffff1660e01b81526004016124b895949392919061531b565b60206040518083038186803b1580156124d057600080fd5b505af41580156124e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125089190614d69565b60038101549091506001600160801b03908116908716116125295785612538565b60038101546001600160801b03165b60038201549094506001600160801b03600160801b9091048116908616116125605784612576565b6003810154600160801b90046001600160801b03165b92506001600160801b038416156125ca576003810180546001600160801b031981166001600160801b0391821687900382161790915560028301546125ca916001600160a01b03909116908c908716613c15565b6001600160801b0383161561261f57600380820180546001600160801b03600160801b8083048216889003821602918116919091179091559083015461261f916001600160a01b03909116908c908616613c15565b8660020b8860020b336001600160a01b03167f70935338e69775456a85ddef226c395fb668b63fa0115f5f20610b388e6ca9c08d888860405161266493929190615011565b60405180910390a450506116b0613f5c565b6000806126866000868686611ae4565b91509150935093915050565b60008060008360020b8560020b126126bc5760405162461bcd60e51b815260040161064f906153eb565b620d89e719600286900b12156126e45760405162461bcd60e51b815260040161064f906154b0565b620d89e8600285900b131561270b5760405162461bcd60e51b815260040161064f90615477565b6040516351c403f960e11b8152734a76a2f26cb26d4d4246470cc95e4da4ab0a0e929063a38807f290612744908890889060040161526e565b60606040518083038186803b15801561275c57600080fd5b505af4158015612770573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127949190614d2b565b9250925092509250925092565b6040516356eac43f60e11b8152600090734a76a2f26cb26d4d4246470cc95e4da4ab0a0e929063add5887e906127df90879087908790600401615753565b60206040518083038186803b1580156127f757600080fd5b505af415801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f9190614792565b90505b9392505050565b60006128436130ae565b60078101549091508062093a806128586130d2565b63ffffffff168161286557fe5b0463ffffffff1614612b03576040805160e08101825260058401546001600160a01b0381168252600160a01b8104600290810b810b900b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b8104909216608082015260ff600160e81b8304811660a0830152600160f01b909204909116151560c0820152600062093a806129016130d2565b63ffffffff168161290e57fe5b0463ffffffff1690508084600701819055506000734a76a2f26cb26d4d4246470cc95e4da4ab0a0e9263c51185d886600f018560400151856040518463ffffffff1660e01b815260040161296493929190615126565b60206040518083038186803b15801561297c57600080fd5b505af4158015612990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b49190614792565b6020848101516000878152600689019092526040909120805469ffffff00000000000000191667010000000000000062ffffff60029490940b9390931692909202919091177fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b038416021790559050612a3861463d565b63ffffffff8086168252602094850151600290810b810b868401908152600095865260068901909652604094859020835181549751968501516060909501516001600160a01b0316600160501b027fffff0000000000000000000000000000000000000000ffffffffffffffffffff95840b62ffffff9081166701000000000000000269ffffff00000000000000199990950b166401000000000266ffffff00000000199290951663ffffffff19909916989098171692909217949094169390931716929092179055505b5050565b6000612b116130ae565b546001600160a01b0316905090565b6000612b2a6130ae565b60030154600160b81b900460020b905090565b6000612b476130ae565b600301546001600160a01b0316905090565b6000612b636130ae565b60070154905090565b6000612b766130ae565b60030154600160a01b900462ffffff16919050565b6000612b956130ae565b6201000f015462ffffff16905090565b600080612bb06130ae565b90506000731c16c172abcf809b89c0cb838c0bb4d9add01daf639c766c9d83600e01898989896040518663ffffffff1660e01b8152600401612bf695949392919061531b565b60206040518083038186803b158015612c0e57600080fd5b505af4158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190614d69565b6000988952600401602052505060409095205495945050505050565b6060818067ffffffffffffffff81118015612c7c57600080fd5b50604051908082528060200260200182016040528015612ca6578160200160208202803683370190505b50915060005b81811015612cf3576000858583818110612cc257fe5b90506020020135905060008154905080858481518110612cde57fe5b60209081029190910101525050600101612cac565b505092915050565b6000806000806000612d0b6130ae565b600096875260060160209081526040968790208751608081018952905463ffffffff81168083526401000000008204600290810b810b810b9484018590526701000000000000008304810b810b900b9983018a9052600160501b9091046001600160a01b031660609092018290529891979650945092505050565b60405163755dab1160e11b815273a2fb4a2f2e7bb3f8e97aced35ab6e59bea2262629063eabb562290612dbd908490600401615728565b60006040518083038186803b158015612dd557600080fd5b505af4158015611a37573d6000803e3d6000fd5b6000612df36130ae565b60080154905090565b6000806000806000806000806000612e126130ae565b60029a8b0b8b0b6000908152600c9190910160205260409020805460018201549b8201546003909201546001600160801b0382169d600160801b909204600f0b9c9b50919950600682900b985067010000000000000082046001600160a01b03169750600160d81b820463ffffffff169650600160f81b90910460ff16945092505050565b6000612ea16130ae565b60058101549091506001600160a01b031615612ecf5760405162461bcd60e51b815260040161064f90615440565b6000612eda836138e9565b9050600080734a76a2f26cb26d4d4246470cc95e4da4ab0a0e9263eed5cff985600f0160006040518363ffffffff1660e01b8152600401612f1c9291906150f8565b604080518083038186803b158015612f3357600080fd5b505af4158015612f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f6b9190614e4c565b91509150612f77612839565b6040805160e0810182526001600160a01b038716808252600286810b60208401819052600084860181905261ffff888116606087018190529088166080870181905260a0870192909252600160c09096019590955260058a018054600160f01b6001600160a01b031990911690951762ffffff60a01b1916600160a01b62ffffff9490950b9390931693909302919091177fffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffff16600160c81b9094029390931761ffff60d81b1916600160d81b909302929092177fff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16179055517f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c959061309f90879086906156ae565b60405180910390a15050505050565b7f568f905fee3c29dbecf3583ddfaf086f7336b6bee88b499cc887c595fb7bf1da90565b4290565b60008060008460020b8660020b816130ea57fe5b05905060008660020b12801561311157508460020b8660020b8161310a57fe5b0760020b15155b1561311b57600019015b83156131905760008061312d83613fd0565b600182810b810b600090815260208d9052604090205460ff83169190911b8001600019019081168015159750929450909250908561317257888360ff16860302613185565b8861317c82613fe2565b840360ff168603025b96505050505061320e565b60008061319f83600101613fd0565b91509150600060018260ff166001901b031990506000818b60008660010b60010b81526020019081526020016000205416905080600014159550856131f157888360ff0360ff16866001010102613207565b88836131fc83614082565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b1261322f578260020b613237565b8260020b6000035b9050620d89e8811115613275576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b60006001821661328957600160801b61329b565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff16905060028216156132cf576ffff97272373d413259a46990580e213a0260801c5b60048216156132ee576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561330d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561332c576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561334b576fff973b41fa98c081472e6896dfb254c00260801c5b604082161561336a576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613389576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156133a9576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156133c9576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156133e9576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613409576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613429576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613449576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613469576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613489576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156134aa576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156134ca576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156134e9576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613506576b048a170391f7dc42444e8fa20260801c5b60008460020b131561352157806000198161351d57fe5b0490505b640100000000810615613535576001613538565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a1610158187128015906135cf5760006135838989620f42400362ffffff16620f4240613784565b90508261359c576135978c8c8c600161416c565b6135a9565b6135a98b8d8c60016141e7565b95508581106135ba578a96506135c9565b6135c68c8b83866142a4565b96505b50613619565b816135e6576135e18b8b8b60006141e7565b6135f3565b6135f38a8c8b600061416c565b935083886000031061360757899550613619565b6136168b8a8a600003856142f0565b95505b6001600160a01b038a811690871614821561367c578080156136385750815b61364e57613649878d8c60016141e7565b613650565b855b955080801561365d575081155b6136735761366e878d8c600061416c565b613675565b845b94506136c6565b8080156136865750815b61369c576136978c888c600161416c565b61369e565b855b95508080156136ab575081155b6136c1576136bc8c888c60006141e7565b6136c3565b845b94505b811580156136d657508860000385115b156136e2578860000394505b81801561370157508a6001600160a01b0316876001600160a01b031614155b1561371057858903935061372d565b61372a868962ffffff168a620f42400362ffffff16613f85565b93505b50505095509550955095915050565b6000600160ff1b821061374e57600080fd5b5090565b8082038281131560008312151461376857600080fd5b92915050565b8181018281121560008312151461376857600080fd5b60008080600019858709868602925082811090839003039050806137ba57600084116137af57600080fd5b508290049050612832565b8084116137c657600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60008082600f0b121561389857826001600160801b03168260000384039150816001600160801b031610613893576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b613768565b826001600160801b03168284019150816001600160801b03161015613768576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b03831610801590613925575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b61395a576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106139fb57607f810383901c9150613a05565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14613c0657886001600160a01b0316613bea82613218565b6001600160a01b03161115613bff5781613c01565b805b613c08565b815b9998505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c915780518252601f199092019160209182019101613c72565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cf3576040519150601f19603f3d011682016040523d82523d6000602084013e613cf8565b606091505b5091509150818015613d26575080511580613d265750808060200190516020811015613d2357600080fd5b50515b611a37576040805162461bcd60e51b81526020600482015260026024820152612a2360f11b604482015290519081900360640190fd5b600080613d676130ae565b6002810154604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1781529151815194955060009485946001600160a01b03169382918083835b60208310613de05780518252601f199092019160209182019101613dc1565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114613e40576040519150601f19603f3d011682016040523d82523d6000602084013e613e45565b606091505b5091509150818015613e5957506020815110155b613e6257600080fd5b808060200190516020811015613e7757600080fd5b5051935050505090565b8082018281101561376857600080fd5b600080613e9c6130ae565b6003810154604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1781529151815194955060009485946001600160a01b031693829180838360208310613de05780518252601f199092019160209182019101613dc1565b6000613f1e6130ae565b6005810154909150600160f01b900460ff16613f4c5760405162461bcd60e51b815260040161064f90615506565b600501805460ff60f01b19169055565b6001613f666130ae565b6005018054911515600160f01b0260ff60f01b19909216919091179055565b6000613f92848484613784565b905060008280613f9e57fe5b8486091115612832576000198110613fb557600080fd5b6001019392505050565b80600f81900b8114611adf57600080fd5b60020b600881901d9161010090910790565b6000808211613ff057600080fd5b600160801b821061400357608091821c91015b68010000000000000000821061401b57604091821c91015b640100000000821061402f57602091821c91015b62010000821061404157601091821c91015b610100821061405257600891821c91015b6010821061406257600491821c91015b6004821061407257600291821c91015b60028210611adf57600101919050565b600080821161409057600080fd5b5060ff6001600160801b038216156140ab57607f19016140b3565b608082901c91505b67ffffffffffffffff8216156140cc57603f19016140d4565b604082901c91505b63ffffffff8216156140e957601f19016140f1565b602082901c91505b61ffff82161561410457600f190161410c565b601082901c91505b60ff82161561411e5760071901614126565b600882901c91505b600f8216156141385760031901614140565b600482901c91505b6003821615614152576001190161415a565b600282901c91505b6001821615611adf5760001901919050565b6000836001600160a01b0316856001600160a01b0316111561418c579293925b816141b9576141b4836001600160801b03168686036001600160a01b0316600160601b613784565b6141dc565b6141dc836001600160801b03168686036001600160a01b0316600160601b613f85565b90505b949350505050565b6000836001600160a01b0316856001600160a01b03161115614207579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b166001600160a01b03868603811690871661424357600080fd5b8361427357866001600160a01b03166142668383896001600160a01b0316613784565b8161426d57fe5b04614299565b61429961428a8383896001600160a01b0316613f85565b886001600160a01b031661433c565b979650505050505050565b600080856001600160a01b0316116142bb57600080fd5b6000846001600160801b0316116142d157600080fd5b816142e3576141b48585856001614347565b6141dc8585856001614428565b600080856001600160a01b03161161430757600080fd5b6000846001600160801b03161161431d57600080fd5b8161432f576141b48585856000614428565b6141dc8585856000614347565b808204910615150190565b600081156143ba5760006001600160a01b0384111561437d5761437884600160601b876001600160801b0316613784565b614395565b6001600160801b038516606085901b8161439357fe5b045b90506143b26143ad6001600160a01b03881683613e81565b61451d565b9150506141df565b60006001600160a01b038411156143e8576143e384600160601b876001600160801b0316613f85565b6143ff565b6143ff606085901b6001600160801b03871661433c565b905080866001600160a01b03161161441657600080fd5b6001600160a01b0386160390506141df565b6000826144365750836141df565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b1682156144d6576001600160a01b0386168481029085828161447657fe5b0414156144a7578181018281106144a55761449b83896001600160a01b031683613f85565b93505050506141df565b505b6144cd826144c8878a6001600160a01b031686816144c157fe5b0490613e81565b61433c565b925050506141df565b6001600160a01b038616848102908582816144ed57fe5b041480156144fa57508082115b61450357600080fd5b80820361449b6143ad846001600160a01b038b1684613f85565b806001600160a01b0381168114611adf57600080fd5b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b60405180606001604052806000600f0b815260200160008152602001600081525090565b604051806040016040528060008152602001600081525090565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60008083601f840112614675578182fd5b50813567ffffffffffffffff81111561468c578182fd5b602083019150836020808302850101111561237557600080fd5b600082601f8301126146b6578081fd5b815160206146cb6146c6836157fa565b6157d6565b82815281810190858301838502870184018810156146e7578586fd5b855b8581101561470e5781516146fc81615818565b845292840192908401906001016146e9565b5090979650505050505050565b60008083601f84011261472c578182fd5b50813567ffffffffffffffff811115614743578182fd5b60208301915083602082850101111561237557600080fd5b8035600281900b8114611adf57600080fd5b8051600681900b8114611adf57600080fd5b803562ffffff81168114611adf57600080fd5b6000602082840312156147a3578081fd5b815161283281615818565b60008060008060008060c087890312156147c6578182fd5b86356147d181615818565b955060208701356147e181615818565b945060408701356147f181615818565b9350606087013561480181615818565b925061480f6080880161477f565b915061481d60a0880161475b565b90509295509295509295565b60008060008060008060a08789031215614841578384fd5b863561484c81615818565b955060208701358015158114614860578485fd5b945060408701359350606087013561487781615818565b9250608087013567ffffffffffffffff811115614892578283fd5b61489e89828a0161471b565b979a9699509497509295939492505050565b60008060008060008060a087890312156148c8578384fd5b86356148d381615818565b95506148e16020880161475b565b94506148ef6040880161475b565b935060608701356148778161582d565b600080600080600060a08688031215614916578283fd5b853561492181615818565b945061492f6020870161475b565b935061493d6040870161475b565b9250606086013561494d8161582d565b9150608086013561495d8161582d565b809150509295509295909350565b60008060006060848603121561497f578081fd5b833561498a81615818565b9250602084013561499a8161582d565b915060408401356149aa8161582d565b809150509250925092565b600080600080600080600060c0888a0312156149cf578485fd5b87356149da81615818565b9650602088013595506149ef6040890161475b565b94506149fd6060890161475b565b93506080880135614a0d8161582d565b925060a088013567ffffffffffffffff811115614a28578182fd5b614a348a828b0161471b565b989b979a50959850939692959293505050565b60008060008060008060c08789031215614a5f578384fd5b8635614a6a81615818565b955060208701359450614a7f6040880161475b565b9350614a8d6060880161475b565b92506080870135614a9d8161582d565b915060a0870135614aad8161582d565b809150509295509295509295565b600080600080600060808688031215614ad2578283fd5b8535614add81615818565b94506020860135935060408601359250606086013567ffffffffffffffff811115614b06578182fd5b614b128882890161471b565b969995985093965092949392505050565b60008060208385031215614b35578182fd5b823567ffffffffffffffff811115614b4b578283fd5b614b5785828601614664565b90969095509350505050565b60008060408385031215614b75578182fd5b825167ffffffffffffffff80821115614b8c578384fd5b818501915085601f830112614b9f578384fd5b81516020614baf6146c6836157fa565b82815281810190858301838502870184018b1015614bcb578889fd5b8896505b84871015614bf457614be08161476d565b835260019690960195918301918301614bcf565b5091880151919650909350505080821115614c0d578283fd5b50614c1a858286016146a6565b9150509250929050565b600060208284031215614c35578081fd5b5035919050565b600060208284031215614c4d578081fd5b815180600f0b8114612832578182fd5b600060208284031215614c6e578081fd5b81358060010b8114612832578182fd5b600060208284031215614c8f578081fd5b6128328261475b565b60008060408385031215614caa578182fd5b614cb38361475b565b9150614cc16020840161475b565b90509250929050565b600080600060608486031215614cde578081fd5b614ce78461475b565b925061499a6020850161475b565b60008060408385031215614d07578182fd5b614d108361476d565b91506020830151614d2081615818565b809150509250929050565b600080600060608486031215614d3f578081fd5b614d488461476d565b92506020840151614d5881615818565b60408501519092506149aa81615852565b600060208284031215614d7a578081fd5b5051919050565b600080600060608486031215614d95578081fd5b8351925060208401519150604084015190509250925092565b600060208284031215614dbf578081fd5b81516128328161582d565b60008060408385031215614ddc578182fd5b8251614de78161582d565b6020840151909250614d208161582d565b600060208284031215614e09578081fd5b813561283281615842565b600060208284031215614e25578081fd5b813561283281615818565b600060208284031215614e41578081fd5b815161283281615842565b60008060408385031215614e5e578182fd5b8251614e6981615842565b6020840151909250614d2081615842565b600060208284031215614e8b578081fd5b6128328261477f565b600080600080600060a08688031215614eab578283fd5b853594506020860135614ebd81615818565b935060408601359250614ed26060870161475b565b9150614ee06080870161475b565b90509295509295909350565b60008060008060808587031215614f01578182fd5b84359350614f116020860161475b565b9250614f1f6040860161475b565b91506060850135614f2f8161582d565b939692955090935050565b600080600060608486031215614f4e578081fd5b8335614f5981615852565b9250614f676020850161475b565b9150614f756040850161475b565b90509250925092565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b60060b9052565b6001600160801b03169052565b61ffff169052565b63ffffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b039490941684526001600160801b039290921660208401526040830152606082015260800190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6020808252825182820181905260009190848201906040850190845b8181101561507357835183529284019291840191600101615057565b50909695505050505050565b604080825283519082018190526000906020906060840190828701845b828110156150bb57815160060b8452928401929084019060010161509c565b50505083810382850152845180825285830191830190845b8181101561470e5783516001600160a01b0316835292840192918401916001016150d3565b91825263ffffffff16602082015260400190565b92835261ffff918216602084015216604082015260600190565b92835261ffff919091166020830152604082015260600190565b96875261ffff958616602088015263ffffffff94909416604087015260029290920b60608601526001600160801b03166080850152821660a08401521660c082015260e00190565b600060e082018a8352602063ffffffff808c168286015260e06040860152828a8452610100860190508b9350845b8b8110156151dd5784356151c981615852565b8316825293830193908301906001016151b6565b50809450505050508560020b60608301526151fb6080830186614fbc565b61520860a0830185614faf565b613c0860c0830184614fbc565b96875263ffffffff958616602088015293909416604086015260029190910b606085015261ffff90811660808501526001600160801b0390921660a08401521660c082015260e00190565b60029190910b815260200190565b600292830b8152910b602082015260400190565b90815260200190565b918252602082015260400190565b600085825284602083015260606040830152612453606083018486614f7e565b94855260208501939093526001600160a01b039190911660408401526001600160801b0316606083015260020b608082015260a00190565b60069390930b83526001600160a01b0391909116602083015263ffffffff16604082015260600190565b9485526001600160a01b039390931660208501526040840191909152600290810b60608401520b608082015260a00190565b600061012082019050838252825160020b602083015260208301516040830152604083015160608301526001600160a01b036060840151166080830152608083015160a083015260a083015160020b60c083015260c08301516153b360e0840182614fa8565b5060e08301516153c7610100840182614fc4565b509392505050565b602080825260029082015261046360f41b604082015260600190565b602080825260039082015262544c5560e81b604082015260600190565b602080825260029082015261415360f01b604082015260600190565b602080825260029082015261463160f01b604082015260600190565b602080825260029082015261414960f01b604082015260600190565b6020808252600190820152601360fa1b604082015260600190565b60208082526003908201526254554d60e81b604082015260600190565b60208082526002908201526104d360f41b604082015260600190565b602080825260039082015262544c4d60e81b604082015260600190565b60208082526003908201526214d41360ea1b604082015260600190565b6020808252600290820152614d3160f01b604082015260600190565b6020808252600390820152624c4f4b60e81b604082015260600190565b60208082526003908201526249494160e81b604082015260600190565b600060a0820190506001600160a01b03835116825260208301516020830152604083015160020b6040830152606083015160020b60608301526080830151600f0b608083015292915050565b600060a082019050825182526001600160a01b03602084015116602083015260408301516040830152606083015160020b6060830152608083015160020b608083015292915050565b6001600160801b0391909116815260200190565b6001600160801b03989098168852600f9690960b60208801526040870194909452606086019290925260060b60808501526001600160a01b031660a084015263ffffffff1660c0830152151560e08201526101000190565b6001600160801b0392831681529116602082015260400190565b6001600160801b039390931683526020830191909152604082015260600190565b6001600160801b0395861681526020810194909452604084019290925283166060830152909116608082015260a00190565b6001600160a01b0392909216825260020b602082015260400190565b6001600160a01b0397909716875260029590950b602087015261ffff93841660408701529183166060860152909116608084015260ff1660a0830152151560c082015260e00190565b61ffff92831681529116602082015260400190565b62ffffff91909116815260200190565b93845260208401929092526040830152606082015260800190565b63ffffffff939093168352600291820b6020840152900b604082015260600190565b63ffffffff949094168452600292830b6020850152910b60408301526001600160a01b0316606082015260800190565b63ffffffff94909416845260069290920b60208401526001600160a01b031660408301521515606082015260800190565b60405181810167ffffffffffffffff811182821017156157f257fe5b604052919050565b600067ffffffffffffffff82111561580e57fe5b5060209081020190565b6001600160a01b03811681146115dd57600080fd5b6001600160801b03811681146115dd57600080fd5b61ffff811681146115dd57600080fd5b63ffffffff811681146115dd57600080fdfea164736f6c6343000706000a568f905fee3c29dbecf3583ddfaf086f7336b6bee88b499cc887c595fb7bf1da