9 txs
11 calls
constructor
constructor(address utilsAdr)
functions
contractBalance
viewfunction contractBalance(address token) view returns (uint256 balance)
controller
viewfunction controller() view returns (address)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
factory
viewfunction factory() view returns (address)
funder
viewfunction funder() view returns (address)
getController
viewfunction getController() view returns (address _controller)
getFunder
viewfunction getFunder() view returns (address _funder)
getSqrtPriceX96FromPrice
purefunction getSqrtPriceX96FromPrice(int8 decimalDiff, uint80 price_12Decimals) pure returns (uint160 sqrtPriceX96)
getTotalValueEth12
viewfunction getTotalValueEth12() view returns (uint128 valueEth12)
getTotalValueUsd12
viewfunction getTotalValueUsd12() view returns (uint128 valueUsd12)
getUsd12ValueIn
viewfunction getUsd12ValueIn(address token) view returns (uint128 valueUsd12)
indexFromPositionId
viewfunction indexFromPositionId(uint256) view returns (uint8)
indexFromTokenAddress
viewfunction indexFromTokenAddress(address) view returns (uint8)
isTokenApprovedForSwap
viewfunction isTokenApprovedForSwap(address) view returns (bool)
manager
viewfunction manager() view returns (address)
nLiquidityPositions
viewfunction nLiquidityPositions() view returns (uint8)
nTokensHeld
viewfunction nTokensHeld() view returns (uint8)
numLiquidityPositionsByToken
viewfunction numLiquidityPositionsByToken(address) view returns (uint16)
owner
viewfunction owner() view returns (address)
positions
viewfunction positions(uint256) view returns (address pool, uint256 lastFeeX128, uint256 tokenId, address base, address quote)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
swapRouter
viewfunction swapRouter() view returns (address)
tokensHeld
viewfunction tokensHeld(uint256) view returns (address)
utils
viewfunction utils() view returns (address)
validEmergencyTokens
viewfunction validEmergencyTokens(address) view returns (bool)
addEmergencyTokens
nonpayablefunction addEmergencyTokens(address[] tokens)
closeLiquidity
nonpayablefunction closeLiquidity(uint256 tokenId)
collectFees
nonpayablefunction collectFees(uint256 tokenId)
createV3Position
nonpayablefunction createV3Position(address pool, address base, address quote, uint80 lowPrice12, uint80 highPrice12, uint256 toAdd) returns (uint256 tokenId, uint8 idx)
depositEth
payablefunction depositEth() payable
depositToken
nonpayablefunction depositToken(address token, uint256 amount)
destroyPosition
nonpayablefunction destroyPosition(uint256 tokenId)
emergencyCircuitBreaker
nonpayablefunction emergencyCircuitBreaker(address storeOfValueToken)
fillLiquidity
nonpayablefunction fillLiquidity(uint256 positionId)
lockEmergencyTokens
nonpayablefunction lockEmergencyTokens()
obtainTokens
nonpayablefunction obtainTokens(address token0, address token1, uint256 amount0, uint256 amount1)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address token)
setController
nonpayablefunction setController(address newController)
setFunder
nonpayablefunction setFunder(address newFunder)
setUtils
nonpayablefunction setUtils(address utilsAdr)
swapTokens
nonpayablefunction swapTokens(address from, address to, uint256 maxIn, uint256 maxOut, uint24 slippageE6) returns (uint256 amountIn, uint256 amountOut)
swapTokensInto
nonpayablefunction swapTokensInto(address tokenFrom, address tokenTo, uint256 maxIn, uint256 maxOut) returns (uint256 tokensIn, uint256 tokensOut)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawEth
nonpayablefunction withdrawEth(address destination, uint256 amount)
withdrawLiquidity
nonpayablefunction withdrawLiquidity(uint256 tokenId)
withdrawToken
nonpayablefunction withdrawToken(address token, address destination, uint256 amount)
events
ControllerSet
event ControllerSet(address newController, address oldController)
Deposited
event Deposited(address token, uint256 amount)
EmergencyCircuitBreakerFlipped
event EmergencyCircuitBreakerFlipped(address storeOfValueToken)
FunderSet
event FunderSet(address newController, address oldController)
LiquidityFeesCollected
event LiquidityFeesCollected(uint256 poolPosition, address base, address quote, uint256 baseTaken, uint256 quoteTaken)
LiquidityModified
event LiquidityModified(uint256 poolPosition, address base, address quote, int128 liquidityChange)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PositionBurned
event PositionBurned(uint256 poolPosition, address base, address quote, uint256 baseTaken, uint256 quoteTaken)
PositionMinted
event PositionMinted(uint256 poolPosition, address base, address quote, uint80 minPrice, uint80 maxPrice, uint256 toAdd)
TokensSwapped
event TokensSwapped(address from, address to, uint256 fromAmt, uint256 toAmt)
Withdrawn
event Withdrawn(address token, uint256 amount)
errors
No errors.
creation bytecode
0x61010060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a0527388e6a0c2ddd26feeb64f039a2c41296fcb3f564060c05273c36442b4a4522e871399cd717abdd847ab11fe8860e052600e805460ff199081169091556038805482169055603b8054909116905534801561008e575f80fd5b506040516165733803806165738339810160408190526100ad916104d0565b6100b633610331565b6080516001600160a01b039081165f908152600160208190526040808320805460ff19908116841790915560a05190941680845281842080548616841790559280527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb498054909416909117909255905163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f19602482015263095ea7b3906044016020604051808303815f875af1158015610176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019a91906104fd565b5060a05160e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af11580156101ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021191906104fd565b5060805160405163095ea7b360e01b815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b039091169063095ea7b3906044016020604051808303815f875af1158015610274573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061029891906104fd565b5060805160e05160405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af11580156102eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030f91906104fd565b5061031933610380565b610322336103e7565b61032b81610447565b5061051c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610388610471565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a91015b60405180910390a15050565b6103ef610471565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691016103db565b61044f610471565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b031633146104ce5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b5f602082840312156104e0575f80fd5b81516001600160a01b03811681146104f6575f80fd5b9392505050565b5f6020828403121561050d575f80fd5b815180151581146104f6575f80fd5b60805160a05160c05160e051615f1d6106565f395f81816105940152818161136d015281816116b8015281816119b901528181611c1601528181611d5b015281816124ca01528181612a720152818161375901528181614089015261538e01525f50505f8181610d1501528181610d6101528181610dda01528181610e6601528181610f910152818161102e0152818161107d0152818161121c01528181611f59015281816122b90152818161279f015281816128540152818161292001528181612ca701528181612d490152818161361c01528181613c8301528181613cb20152818161435801526143b401525f8181611f9d01528181612363015281816127df0152818161282a0152818161356701528181613cdc01528181613db50152818161413b0152818161424401526142a00152615f1d5ff3fe6080604052600436106102e5575f3560e01c8063677342ce11610181578063b17acdcd116100d4578063c4b19b5411610083578063f2fde38b11610060578063f2fde38b14610993578063f60b36e3146109b2578063f77c4791146109d157005b8063c4b19b5414610919578063c53b770214610938578063df2a558b1461096557005b8063bf0e622b116100b1578063bf0e622b14610889578063c31c9c07146108cb578063c45a0155146108f257005b8063b17acdcd14610832578063b3a5794314610851578063bc3291981461087057005b80638da5cb5b116101305780639a7fe3a11161010d5780639a7fe3a1146107d15780639ba69249146107f0578063a9e88b8f1461080457005b80638da5cb5b1461074157806392eefe9b1461075d57806399fbab881461077c57005b8063715018a61161015e578063715018a6146106f157806381720479146107055780638abb98451461072457005b8063677342ce1461067d578063699535011461069c5780636a0f27c2146106bb57005b8063329aa41411610239578063481c6a75116101e85780634a2539c3116101c55780634a2539c3146106135780635a29638d1461063257806363011d1a1461065157005b8063481c6a7514610583578063495915d3146105b657806349c69fd8146105d557005b806339040ed11161021657806339040ed11461052257806342d9843e1461054d578063439370b11461057b57005b8063329aa414146104c557806332c4171d146104e4578063338b5dea1461050357005b8063145a6ae0116102955780631b9a91a4116102725780631b9a91a41461046a5780631fba9eda146104895780633018205f146104a857005b8063145a6ae0146103da578063150b7a02146103f957806319cc33571461045657005b806308092e9a116102c357806308092e9a146103685780630a861f2a1461039c5780630acc8cd1146103bb57005b8062ae3bf8146102ee57806301e336671461030d578063041ae8801461032c57005b366102ec57005b005b3480156102f9575f80fd5b506102ec610308366004615440565b6109f0565b348015610318575f80fd5b506102ec61032736600461545b565b610b3c565b348015610337575f80fd5b5060035461034b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610373575f80fd5b506103876103823660046154a9565b610caa565b6040805192835260208301919091520161035f565b3480156103a7575f80fd5b506102ec6103b6366004615504565b6112e9565b3480156103c6575f80fd5b506102ec6103d5366004615440565b6115cc565b3480156103e5575f80fd5b506102ec6103f4366004615504565b611634565b348015610404575f80fd5b5061043d61041336600461551b565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040516001600160e01b0319909116815260200161035f565b348015610461575f80fd5b506102ec611ad7565b348015610475575f80fd5b506102ec6104843660046155b4565b611aee565b348015610494575f80fd5b5061034b6104a33660046155f5565b611ba1565b3480156104b3575f80fd5b506002546001600160a01b031661034b565b3480156104d0575f80fd5b506102ec6104df366004615504565b611be5565b3480156104ef575f80fd5b506102ec6104fe366004615630565b611e5e565b34801561050e575f80fd5b506102ec61051d3660046155b4565b61202b565b34801561052d575f80fd5b50600e5461053b9060ff1681565b60405160ff909116815260200161035f565b348015610558575f80fd5b5061053b610567366004615504565b60396020525f908152604090205460ff1681565b6102ec612195565b34801561058e575f80fd5b5061034b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105c1575f80fd5b506102ec6105d0366004615673565b6121cf565b3480156105e0575f80fd5b506106036105ef366004615440565b603a6020525f908152604090205460ff1681565b604051901515815260200161035f565b34801561061e575f80fd5b506102ec61062d366004615504565b6123e5565b34801561063d575f80fd5b5060045461034b906001600160a01b031681565b34801561065c575f80fd5b50610665612786565b6040516001600160801b03909116815260200161035f565b348015610688575f80fd5b50610665610697366004615504565b612de2565b3480156106a7575f80fd5b506102ec6106b6366004615440565b612f63565b3480156106c6575f80fd5b506106da6106d53660046156e4565b612f8d565b6040805192835260ff90911660208301520161035f565b3480156106fc575f80fd5b506102ec613464565b348015610710575f80fd5b5061038761071f366004615630565b613477565b34801561072f575f80fd5b506003546001600160a01b031661034b565b34801561074c575f80fd5b505f546001600160a01b031661034b565b348015610768575f80fd5b506102ec610777366004615440565b613495565b348015610787575f80fd5b5061079b610796366004615504565b6134f4565b604080516001600160a01b039687168152602081019590955284019290925283166060830152909116608082015260a00161035f565b3480156107dc575f80fd5b506106656107eb366004615440565b613537565b3480156107fb575f80fd5b506106656135e8565b34801561080f575f80fd5b5061060361081e366004615440565b60016020525f908152604090205460ff1681565b34801561083d575f80fd5b506102ec61084c366004615504565b6136c4565b34801561085c575f80fd5b5061034b61086b366004615759565b613966565b34801561087b575f80fd5b5060385461053b9060ff1681565b348015610894575f80fd5b506108b86108a3366004615440565b60056020525f908152604090205461ffff1681565b60405161ffff909116815260200161035f565b3480156108d6575f80fd5b5061034b73e592427a0aece92de3edee1f18e0157c0586156481565b3480156108fd575f80fd5b5061034b731f98431c8ad98523631ae4a59f267346ea31f98481565b348015610924575f80fd5b5061034b610933366004615504565b6139a7565b348015610943575f80fd5b50610957610952366004615440565b6139c6565b60405190815260200161035f565b348015610970575f80fd5b5061053b61097f366004615440565b600f6020525f908152604090205460ff1681565b34801561099e575f80fd5b506102ec6109ad366004615440565b613a61565b3480156109bd575f80fd5b506102ec6109cc366004615440565b613af1565b3480156109dc575f80fd5b5060025461034b906001600160a01b031681565b6109f8613d5a565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681101580610a515750816001600160a01b031660068260ff1660088110610a4357610a436157a1565b01546001600160a01b031614155b610aa25760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74202772657363756527206465706f73697473000000000000000060448201526064015b60405180910390fd5b816001600160a01b031663a9059cbb610ac25f546001600160a01b031690565b610acb856139c6565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610b13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3791906157c4565b505050565b6003546001600160a01b03163314610b855760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610bea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c0e91906157c4565b610c5a5760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610a99565b610c6383613db3565b604080516001600160a01b0385168152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5910160405180910390a1505050565b6002545f9081906001600160a01b0316331480610cc657503330145b610d015760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6001600160a01b038716158015610d4957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b15610dd857838510610d5b5783610d5d565b845b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015610db8575f80fd5b505af1158015610dca573d5f803e3d5ffd5b508594506112df9350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316148015610e2057506001600160a01b038616155b15610ece57838510610e325783610e34565b845b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290529092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015610eaf575f80fd5b505af1158015610ec1573d5f803e3d5ffd5b508493506112df92505050565b600480546040517f64aa79a30000000000000000000000000000000000000000000000000000000081526001600160a01b038a8116938201939093528883166024820152604481018890526064810187905262ffffff861660848201525f92839216906364aa79a39060a401606060405180830381865afa158015610f55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7991906157dd565b90955090925090506001600160a01b038916611000577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004015f604051808303818588803b158015610fe8575f80fd5b505af1158015610ffa573d5f803e3d5ffd5b50505050505b5f6040518061010001604052805f6001600160a01b03168c6001600160a01b03161461102c578b61104e565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b031681526020015f6001600160a01b03168b6001600160a01b03161461107b578a61109d565b7f00000000000000000000000000000000000000000000000000000000000000005b6001600160a01b03168152602001846001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110b919061581c565b62ffffff168152602001306001600160a01b031681526020014281526020018681526020018381526020015f6001600160a01b0316815250905073e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663414bf389826040518263ffffffff1660e01b81526004016111859190615837565b6020604051808303815f875af11580156111a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c591906158c8565b93506001600160a01b038a16156111df576111df8a613db3565b6001600160a01b038916611280576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d906024015f604051808303815f87803b158015611265575f80fd5b505af1158015611277573d5f803e3d5ffd5b50505050611289565b61128989613f88565b604080516001600160a01b03808d1682528b166020820152908101869052606081018590527f25f1d03755df23c30e25db2dbd3891e31ce084bdfbfc46f9fe5e446ee5f9b2d49060800160405180910390a15050505b9550959350505050565b6003546001600160a01b031633146113325760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152336024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e906064015f604051808303815f87803b1580156113b6575f80fd5b505af11580156113c8573d5f803e3d5ffd5b5050505f8281526039602052604081205460ff169150601082600881106113f1576113f16157a1565b60385460059190910291909101915060ff9081169083161080156114185750828160020154145b15610b375760038101546001600160a01b03165f908152600560205260408120805461ffff1691611448836158f3565b82546101009290920a61ffff81810219909316918316021790915560048301546001600160a01b03165f9081526005602052604081208054909216925061148e836158f3565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f6114be8361590f565b82546101009290920a60ff81810219909316918316021790915560385416159050610b375760385460109060ff16600881106114fc576114fc6157a1565b6005020160108360ff1660088110611516576115166157a1565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558160395f601060ff84166008811061159b5761159b6157a1565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff160217905550505050565b6115d4613d5a565b600380546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917f9fb5233a5c1113ee4f5aafa72ecf995c4c5bc0c057ecbcad707ea04ebc829c6691015b60405180910390a15050565b6002546001600160a01b0316331461167d5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b611686816136c4565b5f8181526039602052604081205460ff1690601082600881106116ab576116ab6157a1565b6005020190505f805f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88896040518263ffffffff1660e01b815260040161170491815260200190565b61018060405180830381865afa158015611720573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117449190615953565b50505050975097509750509650965050505f865f015f9054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156117a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117cb9190615a4e565b50505050505090505f6117dd876139c6565b90506118086117eb876139c6565b600160c01b6118036001600160a01b03861680615ad1565b6144bd565b6118129082615ae8565b90505f61183061182187614567565b61182a87614567565b846149a3565b6004549091505f9081906001600160a01b031663c72e160b866118528b614567565b61185b8b614567565b60646118716001600160801b038a166062615ad1565b61187b9190615b0f565b6040516001600160e01b031960e087901b1681526001600160a01b0394851660048201529284166024840152921660448201526001600160801b0390911660648201526084016040805180830381865afa1580156118db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ff9190615b22565b9150915061190f8a8a8484611e5e565b5f6040518060c001604052808f815260200161192a8d6139c6565b81526020016119388c6139c6565b81525f602080830182905260408084018390524260609485015280517f219f5d170000000000000000000000000000000000000000000000000000000081528551600482015291850151602483015284015160448201529183015160648301526080830151608483015260a083015160a48301529192506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063219f5d179060c4016060604051808303815f875af11580156119ff573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a239190615b44565b8095508196508293505050507f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c8f8e6003015f9054906101000a90046001600160a01b03168f6004015f9054906101000a90046001600160a01b03168b85611a8b9190615b5f565b604051611abe94939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a1505050505050505050505050505050565b611adf613d5a565b603b805460ff19166001179055565b6003546001600160a01b03163314611b375760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015611b6a573d5f803e3d5ffd5b50604080515f8152602081018390527f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59101611628565b5f80611bc78369ffffffffffffffffffff16600160c01b86600c0160ff16600a0a6144bd565b9050611bd281612de2565b6001600160801b03169150505b92915050565b6040517f99fbab88000000000000000000000000000000000000000000000000000000008152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906399fbab889060240161018060405180830381865afa158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c889190615953565b5050505f8b815260396020526040812054929a5060ff90921698509096506010955087945050600884109250611cc391505057611cc36157a1565b6005020190506001600160801b03831615611e58576040805160a0810182528581526001600160801b03858116602083019081525f83850181815260608501918252426080860190815295517f0c49ccbe0000000000000000000000000000000000000000000000000000000081528551600482015292519093166024830152915160448201529051606482015291516084830152907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690630c49ccbe9060a40160408051808303815f875af1158015611da8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dcc9190615b22565b5050600382015460048301547f1172e6c2fa5b068f7396efd2ed20f26bf1ce7899860acd635416a62a99bb975c9187916001600160a01b039182169116611e1288615b7e565b604051611e4594939291909384526001600160a01b03928316602085015291166040830152600f0b606082015260800190565b60405180910390a1611e56856136c4565b505b50505050565b5f611e68856139c6565b90505f611e74856139c6565b9050838210158015611e865750828110155b15611e92575050611e58565b5f805f848710611ea457848703611ea6565b5f5b9150838610611eb757838603611eb9565b5f5b90508685108015611ec957508584115b15611f0b5785840392505f611eee898b86620f4240620f7cd888025b04613a98610caa565b91505080831115611f0157808303611f03565b5f5b925050611f52565b8584108015611f1957508685115b15611f525786850392505f611f398a8a86620f4240620f7cd88702611ee5565b91505080821115611f4c57808203611f4e565b5f5b9150505b611f7f89897f00000000000000000000000000000000000000000000000000000000000000008585614a0c565b9092509050611f9189895f8585614a0c565b9092509050611fc389897f00000000000000000000000000000000000000000000000000000000000000008585614a0c565b909250905081158015611fd4575080155b6120205760405162461bcd60e51b815260206004820152600b60248201527f556e64657266756e6465640000000000000000000000000000000000000000006044820152606401610a99565b505050505050505050565b6003546001600160a01b031633146120745760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303815f875af11580156120dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061210191906157c4565b61214d5760405162461bcd60e51b815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152606401610a99565b61215682613f88565b604080516001600160a01b0384168152602081018390527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49101611628565b604080515f81523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b6121d7613d5a565b603b5460ff161561222a5760405162461bcd60e51b815260206004820152600660248201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152606401610a99565b5f6122336135e8565b600802662386f26fc100000190505f5b60ff8116831115611e58575f84848360ff16818110612264576122646157a1565b90506020020160208101906122799190615440565b6001600160a01b038181165f81815260016020819052604091829020805460ff19169091179055600480549151633d7e854360e11b8152908101929092527f0000000000000000000000000000000000000000000000000000000000000000831660248301526001600160801b0387166044830152929350911690637afd0a86906064016020604051808303815f875af1158015612319573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061233d9190615bba565b5060048054604051633d7e854360e11b81526001600160a01b03848116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201525f6044820152911690637afd0a86906064016020604051808303815f875af11580156123b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123db9190615bba565b5050600101612243565b6002546001600160a01b0316331461242e5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b5f8181526039602052604081205460ff169060108260088110612453576124536157a1565b60050201600381015460048201549192506001600160a01b0390811691165f61247b836139c6565b90505f612487836139c6565b905061249287611be5565b61249b876136c4565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c68906024015f604051808303815f87803b158015612513575f80fd5b505af1158015612525573d5f803e3d5ffd5b505050505f82612534866139c6565b61253e9190615bd5565b90505f8261254b866139c6565b6125559190615bd5565b6001600160a01b0387165f908152600560205260408120805492935061ffff9092169190612582836158f3565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b0387165f908152600560205260408120805490921692506125c4836158f3565b825461ffff9182166101009390930a9283029190920219909116179055506038805460ff16905f6125f48361590f565b82546101009290920a60ff818102199093169183160217909155603854161590506126fe5760385460109060ff1660088110612632576126326157a1565b6005020160108960ff166008811061264c5761264c6157a1565b82546005919091029190910180546001600160a01b03199081166001600160a01b03938416178255600180850154908301556002808501549083015560038085015490830180548316918516919091179055600493840154939091018054909116929091169190911790558760395f601060ff8416600881106126d1576126d16157a1565b600502016002015481526020019081526020015f205f6101000a81548160ff021916908360ff1602179055505b6103e88210156127115761271186613db3565b6103e88110156127245761272485613db3565b604080518a81526001600160a01b038881166020830152871681830152606081018490526080810183905290517f5501b833962ceaf131361ff8d59683c382ab00f523035d0fc4c2ffc19bef3a459181900360a00190a1505050505050505050565b5f612794620f424047615b0f565b9050620f42406127c37f00000000000000000000000000000000000000000000000000000000000000006139c6565b6127cd9190615b0f565b6127d79082615be8565b90505f6128037f00000000000000000000000000000000000000000000000000000000000000006139c6565b905061c3508111156128d957600480546040516332d2f46960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093527f000000000000000000000000000000000000000000000000000000000000000083166024820152604481018490529116906365a5e8d290606401602060405180830381865afa1580156128a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128cc9190615c07565b6128d69083615be8565b91505b5f5b600e5460ff9081169082161015612a57576004546001600160a01b03166365a5e8d2600660ff841660088110612913576129136157a1565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000600660ff861660088110612955576129556157a1565b01546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156129b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d791906158c8565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381865afa158015612a27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a4b9190615c07565b909201916001016128db565b505f5b60385460ff9081169082161015612ddd575f805f805f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab8860108860ff1660088110612ab557612ab56157a1565b60050201600201546040518263ffffffff1660e01b8152600401612adb91815260200190565b61018060405180830381865afa158015612af7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b1b9190615953565b50505050975097509750509650965050505f60108760ff1660088110612b4357612b436157a1565b6005020154604080517f3850c7bd00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691633850c7bd9160048082019260e0929091908290030181865afa158015612ba6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bca9190615a4e565b50506004549495505f948594506001600160a01b0316925063c72e160b9150859050612bf589614567565b612bfe89614567565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b03871660648201526084016040805180830381865afa158015612c5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c829190615b22565b600480546040516332d2f46960e11b81526001600160a01b038d8116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810185905293955091935016906365a5e8d290606401602060405180830381865afa158015612d00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d249190615c07565b600480546040516332d2f46960e11b81526001600160a01b038b8116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810185905292909d019c16906365a5e8d290606401602060405180830381865afa158015612da1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dc59190615c07565b909a0199505060019096019550612a5a945050505050565b505090565b5f815f03612df157505f919050565b8160017001000000000000000000000000000000008210612e175760809190911c9060401b5b680100000000000000008210612e325760409190911c9060201b5b6401000000008210612e495760209190911c9060101b5b620100008210612e5e5760109190911c9060081b5b6101008210612e725760089190911c9060041b5b60108210612e855760049190911c9060021b5b60088210612e915760011b5b6001818581612ea257612ea2615afb565b048201901c90506001818581612eba57612eba615afb565b048201901c90506001818581612ed257612ed2615afb565b048201901c90506001818581612eea57612eea615afb565b048201901c90506001818581612f0257612f02615afb565b048201901c90506001818581612f1a57612f1a615afb565b048201901c90506001818581612f3257612f32615afb565b0491909101901c5f612f448286615b0f565b9050808210612f535780612f55565b815b95945050505050565b919050565b612f6b613d5a565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002545f9081906001600160a01b03163314612fda5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610a99565b603854600860ff909116106130315760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f66206d656d6f7279000000000000000000000000000000000000006044820152606401610a99565b856001600160a01b0316876001600160a01b0316036130925760405162461bcd60e51b815260206004820152600a60248201527f53616d6520746f6b656e000000000000000000000000000000000000000000006044820152606401610a99565b5f866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130f39190615c20565b886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561312f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131539190615c20565b61315d9190615c39565b90505f61316f898961086b858b611ba1565b90505f6131818a8a61086b868b611ba1565b90505f8b6001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156131c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e49190615a4e565b5050505050509050816001600160a01b0316836001600160a01b0316111561320a579091905b5f61321684848a6149a3565b90505f6132288e8e8e86898988614b0b565b6001600160a01b038f165f9081526005602052604081208054939b5091935061ffff9092169161325783615c59565b82546101009290920a61ffff8181021990931691831602179091556001600160a01b038e165f9081526005602052604081208054909216925061329983615c59565b91906101000a81548161ffff021916908361ffff160217905550506040518060a001604052808f6001600160a01b031681526020018281526020018981526020018e6001600160a01b031681526020018d6001600160a01b0316815250601060385f9054906101000a900460ff1660ff166008811061331a5761331a6157a1565b82516005919091029190910180546001600160a01b03199081166001600160a01b0393841617825560208085015160018401556040808601516002850155606086015160038501805485169187169190911790556080909501516004909301805490921692909316919091179055603880545f8c81526039909352928220805460ff94851660ff19909116179055805490921698508891906133bb83615c79565b91906101000a81548160ff021916908360ff160217905550507f29cd472535c058e9f744cc9cead6f8c38cbe5ea230674d825060f275884bdd72888e8e8e8e8e60405161344b969594939291909586526001600160a01b03948516602087015292909316604085015269ffffffffffffffffffff908116606085015291909116608083015260a082015260c00190565b60405180910390a1505050505050965096945050505050565b61346c613d5a565b6134755f614d41565b565b5f8061348886868686613a98610caa565b9150915094509492505050565b61349d613d5a565b600280546001600160a01b038381166001600160a01b03198316811790935560408051938452911660208301819052917e7582b62407f53d49cfc72e7ddab574c06ef3b8aced104b54b7bed4681ee54a9101611628565b60108160088110613503575f80fd5b6005020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092908116911685565b5f80613542836139c6565b600480546040516332d2f46960e11b81526001600160a01b03878116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526044810184905292935016906365a5e8d290606401602060405180830381865afa1580156135bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135e19190615c07565b9392505050565b600480546040517fea4bc51c0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116938201939093525f9264e8d4a5100092169063ea4bc51c90602401602060405180830381865afa158015613673573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136979190615c8e565b69ffffffffffffffffffff166136ab612786565b6136b59190615ca9565b6136bf9190615ccb565b905090565b5f818152603960209081526040808320548151608081018352858152309381019384526001600160801b038184018181526060830182815294517ffc6f78650000000000000000000000000000000000000000000000000000000081528351600482015295516001600160a01b039081166024880152905182166044870152935116606485015260ff909116939092909182917f00000000000000000000000000000000000000000000000000000000000000009091169063fc6f78659060840160408051808303815f875af11580156137a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c49190615b22565b915091505f60108560ff16600881106137df576137df6157a1565b600502018054600482015460038301549293506001600160a01b03918216925f9291821691161061386f57816001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa158015613846573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386a91906158c8565b6138cf565b816001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138cf91906158c8565b60018401819055600484015460038501549192506001600160a01b03908116911611156138fa579293925b60038301546004840154604080518b81526001600160a01b03938416602082015292909116828201526060820187905260808201869052517ff75febe5036272e29c10c008070a13657798560aaa45a46b302b112d865ff1f29181900360a00190a15050505050505050565b5f826001600160a01b0316846001600160a01b031610156139885750806135e1565b61399f6001600160a01b038316600160c01b615b0f565b949350505050565b600681600881106139b6575f80fd5b01546001600160a01b0316905081565b5f6001600160a01b03821615613a5a576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613a31573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a5591906158c8565b611bdf565b4792915050565b613a69613d5a565b6001600160a01b038116613ae55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a99565b613aee81614d41565b50565b6002546001600160a01b0316331480613b1357505f546001600160a01b031633145b613b5f5760405162461bcd60e51b815260206004820152600d60248201527f4163636573732064656e696564000000000000000000000000000000000000006044820152606401610a99565b6001600160a01b0381165f9081526001602052604090205460ff16613bc65760405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420746f6b656e000000000000000000000000000000000000006044820152606401610a99565b60385460ff165b60ff811615613c49576040517f4a2539c300000000000000000000000000000000000000000000000000000000815260ff5f199290920191821660048201523090634a2539c3906024015f604051808303815f87803b158015613c2e575f80fd5b505af1158015613c40573d5f803e3d5ffd5b50505050613bcd565b50600e5460ff165b60ff811615613cac575f1901613ca7600660ff831660088110613c7657613c766157a1565b01546001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000614d90565b613c51565b50613cd77f000000000000000000000000000000000000000000000000000000000000000082614d90565b613d017f000000000000000000000000000000000000000000000000000000000000000082614d90565b613d0b5f82614d90565b600280546001600160a01b03191690556040516001600160a01b03821681527f2cc79b200fc7fdf7af6be005fc77813bfacedb82066816356eed5b7df46194709060200160405180910390a150565b5f546001600160a01b031633146134755760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a99565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161480613dfa57506001600160a01b038116155b15613e025750565b6001600160a01b0381165f908152600f6020526040902054600e5460ff918216911681108015613e5a5750816001600160a01b031660068260ff1660088110613e4d57613e4d6157a1565b01546001600160a01b0316145b8015613e6e57506064613e6c836139c6565b105b8015613e9357506001600160a01b0382165f9081526005602052604090205461ffff16155b15613f8457600e805460ff16905f613eaa8361590f565b82546101009290920a60ff818102199093169183160217909155600e54161580159150613edf5750600e5460ff828116911614155b15613f8457600e5460069060ff1660088110613efd57613efd6157a1565b01546001600160a01b0316600660ff831660088110613f1e57613f1e6157a1565b0180546001600160a01b0319166001600160a01b039290921691909117905580600f5f600660ff841660088110613f5757613f576157a1565b01546001600160a01b0316815260208101919091526040015f20805460ff191660ff929092169190911790555b5050565b6001600160a01b03811615801590613fb857506001600160a01b0381165f908152603a602052604090205460ff16155b15614126576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273e592427a0aece92de3edee1f18e0157c0586156460048201525f1960248201526001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015614034573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061405891906157c4565b506040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f19602483015282169063095ea7b3906044016020604051808303815f875af11580156140de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061410291906157c4565b506001600160a01b0381165f908152603a60205260409020805460ff191660011790555b6001600160a01b0381161580159061417057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15613aee576001600160a01b0381165f818152600f602052604090205460069060ff16600881106141a3576141a36157a1565b01546001600160a01b03161415806141db5750600e546001600160a01b0382165f908152600f602052604090205460ff918216911610155b15613aee57600e54600860ff909116106142375760405162461bcd60e51b815260206004820152600d60248201527f4f7574206f66206d656d6f7279000000000000000000000000000000000000006044820152606401610a99565b5f6142406135e8565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146143565760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af192505050801561431b575060408051601f3d908101601f1916820190925261431891810190615bba565b60015b614354573d808015614348576040519150601f19603f3d011682016040523d82523d5f602084013e61434d565b606091505b5050614356565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146144375760048054604051633d7e854360e11b81526001600160a01b03858116938201939093527f0000000000000000000000000000000000000000000000000000000000000000831660248201526001600160801b0384166044820152911690637afd0a86906064016020604051808303815f875af1158015614411573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144359190615bba565b505b600e54829060069060ff1660088110614452576144526157a1565b0180546001600160a01b039283166001600160a01b0319909116179055600e80549184165f908152600f60205260408120805460ff191660ff9485161790558154909216916144a083615c79565b91906101000a81548160ff021916908360ff160217905550505050565b5f80805f19858709858702925082811083820303915050805f036144f1575f84116144e6575f80fd5b5082900490506135e1565b8084116144fc575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f805f8360020b1261457c578260020b614589565b8260020b61458990615cf8565b9050614598620d89e719615d12565b62ffffff168111156145ec5760405162461bcd60e51b815260206004820152600160248201527f54000000000000000000000000000000000000000000000000000000000000006044820152606401610a99565b5f816001165f0361460e57700100000000000000000000000000000000614620565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561465f57608061465a826ffff97272373d413259a46990580e213a615ad1565b901c90505b6004821615614689576080614684826ffff2e50f5f656932ef12357cf3c7fdcc615ad1565b901c90505b60088216156146b35760806146ae826fffe5caca7e10e4e61c3624eaa0941cd0615ad1565b901c90505b60108216156146dd5760806146d8826fffcb9843d60f6159c9db58835c926644615ad1565b901c90505b6020821615614707576080614702826fff973b41fa98c081472e6896dfb254c0615ad1565b901c90505b604082161561473157608061472c826fff2ea16466c96a3843ec78b326b52861615ad1565b901c90505b608082161561475b576080614756826ffe5dee046a99a2a811c461f1969c3053615ad1565b901c90505b610100821615614786576080614781826ffcbe86c7900a88aedcffc83b479aa3a4615ad1565b901c90505b6102008216156147b15760806147ac826ff987a7253ac413176f2b074cf7815e54615ad1565b901c90505b6104008216156147dc5760806147d7826ff3392b0822b70005940c7a398e4b70f3615ad1565b901c90505b610800821615614807576080614802826fe7159475a2c29b7443b29c7fa6e889d9615ad1565b901c90505b61100082161561483257608061482d826fd097f3bdfd2022b8845ad8f792aa5825615ad1565b901c90505b61200082161561485d576080614858826fa9f746462d870fdf8a65dc1f90e061e5615ad1565b901c90505b614000821615614888576080614883826f70d869a156d2a1b890bb3df62baf32f7615ad1565b901c90505b6180008216156148b35760806148ae826f31be135f97d08fd981231505542fcfa6615ad1565b901c90505b620100008216156148df5760806148da826f09aa508b5b7a84e1c677de54f3e99bc9615ad1565b901c90505b6202000082161561490a576080614905826e5d6af8dedb81196699c329225ee604615ad1565b901c90505b6204000082161561493457608061492f826d2216e584f5fa1ea926041bedfe98615ad1565b901c90505b6208000082161561495c576080614957826b048a170391f7dc42444e8fa2615ad1565b901c90505b5f8460020b131561497557614972815f19615b0f565b90505b61498464010000000082615d2a565b15614990576001614992565b5f5b61399f9060ff16602083901c615ae8565b5f826001600160a01b0316846001600160a01b031611156149c2579192915b5f6149ed856001600160a01b0316856001600160a01b03166c010000000000000000000000006144bd565b9050612f5583826149fe8888615d3d565b6001600160a01b03166144bd565b5f80846001600160a01b0316876001600160a01b031614158015614a425750846001600160a01b0316866001600160a01b031614155b15614aff575f614a51866139c6565b9050620f42408110158015614a6557505f85115b15614ab5575f80614a95888b85620f4240614a838c620f7cd8615ad1565b614a8d9190615b0f565b613a98610caa565b91509150818303925086811015614aae57808703614ab0565b5f5b965050505b620f42408110158015614ac757505f84115b15614afd575f614ae4878984620f4240614a838a620f7cd8615ad1565b91505084811015614af757808503614af9565b5f5b9450505b505b50919590945092505050565b5f805f896001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614b4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b6e9190615d5c565b62ffffff1690506018818260020b614b8589614e7a565b60020b81614b9557614b95615afb565b050262ffffff1668ffffffffffffffffff16901b811790506030818260020b614bbd88614e7a565b60020b81614bcd57614bcd615afb565b050262ffffff1668ffffffffffffffffff16901b81179050614c5289898987858f6001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015614c29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c4d919061581c565b6151d8565b9250876001600160a01b0316896001600160a01b031610614cd257896001600160a01b031663461413196040518163ffffffff1660e01b8152600401602060405180830381865afa158015614ca9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ccd91906158c8565b614d32565b896001600160a01b031663f30583996040518163ffffffff1660e01b8152600401602060405180830381865afa158015614d0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d3291906158c8565b91505097509795505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f614d9a836139c6565b9050816001600160a01b0316836001600160a01b031614610b37576040517f08092e9a0000000000000000000000000000000000000000000000000000000081526001600160a01b03808516600483015283166024820152604481018290525f196064820152620124f8608482015230906308092e9a9060a40160408051808303815f875af1925050508015614e4d575060408051601f3d908101601f19168201909252614e4a91810190615b22565b60015b611e56573d808015611e56576040519150601f19603f3d011682016040523d82523d5f602084013e611e56565b5f6401000276a36001600160a01b03831610801590614eb5575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b614f015760405162461bcd60e51b815260206004820152600160248201527f52000000000000000000000000000000000000000000000000000000000000006044820152606401610a99565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110614fa957614f9f607f82615bd5565b83901c9150614fba565b614fb481607f615bd5565b83901b91505b5f6040614fc8608084615d75565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c8561514a9190615d94565b90505f60806151696f028f6481ab7f045a5af012a19d003aaa84615d75565b901d90505f608061518a846fdb2df09e81959a81455e260799a0632f615dc3565b901d90508060020b8260020b146151c957886001600160a01b03166151ae82614567565b6001600160a01b031611156151c357816151cb565b806151cb565b815b9998505050505050505050565b5f80866001600160a01b0316886001600160a01b0316116151f957876151fb565b865b90505f876001600160a01b0316896001600160a01b03161161521d578761521f565b885b6004549091505f9081906001600160a01b031663c72e160b8a61524d65ffffffffffff60188c901c16614567565b61526560308c68ffffffffffffffffff16901c614567565b60405160e085901b6001600160e01b03191681526001600160a01b039384166004820152918316602483015290911660448201526001600160801b038b1660648201526084016040805180830381865afa1580156152c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906152e99190615b22565b915091506152f984848484611e5e565b5f604051806101600160405280866001600160a01b03168152602001856001600160a01b031681526020018862ffffff16815260200160188a68ffffffffffffffffff16901c60020b815260200160308a68ffffffffffffffffff16901c60020b81526020018481526020018381526020015f81526020015f8152602001306001600160a01b031681526020014281525090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388316456826040518263ffffffff1660e01b81526004016153d89190615dea565b6080604051808303815f875af11580156153f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906154189190615eae565b50919e9d5050505050505050505050505050565b6001600160a01b0381168114613aee575f80fd5b5f60208284031215615450575f80fd5b81356135e18161542c565b5f805f6060848603121561546d575f80fd5b83356154788161542c565b925060208401356154888161542c565b929592945050506040919091013590565b62ffffff81168114613aee575f80fd5b5f805f805f60a086880312156154bd575f80fd5b85356154c88161542c565b945060208601356154d88161542c565b9350604086013592506060860135915060808601356154f681615499565b809150509295509295909350565b5f60208284031215615514575f80fd5b5035919050565b5f805f805f6080868803121561552f575f80fd5b853561553a8161542c565b9450602086013561554a8161542c565b935060408601359250606086013567ffffffffffffffff81111561556c575f80fd5b8601601f8101881361557c575f80fd5b803567ffffffffffffffff811115615592575f80fd5b8860208284010111156155a3575f80fd5b959894975092955050506020019190565b5f80604083850312156155c5575f80fd5b82356155d08161542c565b946020939093013593505050565b69ffffffffffffffffffff81168114613aee575f80fd5b5f8060408385031215615606575f80fd5b8235805f0b8114615615575f80fd5b91506020830135615625816155de565b809150509250929050565b5f805f8060808587031215615643575f80fd5b843561564e8161542c565b9350602085013561565e8161542c565b93969395505050506040820135916060013590565b5f8060208385031215615684575f80fd5b823567ffffffffffffffff81111561569a575f80fd5b8301601f810185136156aa575f80fd5b803567ffffffffffffffff8111156156c0575f80fd5b8560208260051b84010111156156d4575f80fd5b6020919091019590945092505050565b5f805f805f8060c087890312156156f9575f80fd5b86356157048161542c565b955060208701356157148161542c565b945060408701356157248161542c565b93506060870135615734816155de565b92506080870135615744816155de565b9598949750929591949360a090920135925050565b5f805f6060848603121561576b575f80fd5b83356157768161542c565b925060208401356157868161542c565b915060408401356157968161542c565b809150509250925092565b634e487b7160e01b5f52603260045260245ffd5b80518015158114612f5e575f80fd5b5f602082840312156157d4575f80fd5b6135e1826157b5565b5f805f606084860312156157ef575f80fd5b83516157fa8161542c565b602085015160409095015190969495509392505050565b8051612f5e81615499565b5f6020828403121561582c575f80fd5b81516135e181615499565b5f610100820190506001600160a01b0383511682526001600160a01b03602084015116602083015262ffffff6040840151166040830152606083015161588860608401826001600160a01b03169052565b506080830151608083015260a083015160a083015260c083015160c083015260e08301516158c160e08401826001600160a01b03169052565b5092915050565b5f602082840312156158d8575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f61ffff821680615906576159066158df565b5f190192915050565b5f60ff821680615906576159066158df565b8051612f5e8161542c565b8051600281900b8114612f5e575f80fd5b80516001600160801b0381168114612f5e575f80fd5b5f805f805f805f805f805f806101808d8f03121561596f575f80fd5b8c516bffffffffffffffffffffffff8116811461598a575f80fd5b9b5061599860208e01615921565b9a506159a660408e01615921565b99506159b460608e01615921565b98506159c260808e01615811565b97506159d060a08e0161592c565b96506159de60c08e0161592c565b95506159ec60e08e0161593d565b6101008e01516101208f015191965094509250615a0c6101408e0161593d565b9150615a1b6101608e0161593d565b90509295989b509295989b509295989b565b805161ffff81168114612f5e575f80fd5b805160ff81168114612f5e575f80fd5b5f805f805f805f60e0888a031215615a64575f80fd5b8751615a6f8161542c565b9650615a7d6020890161592c565b9550615a8b60408901615a2d565b9450615a9960608901615a2d565b9350615aa760808901615a2d565b9250615ab560a08901615a3e565b9150615ac360c089016157b5565b905092959891949750929550565b8082028115828204841417611bdf57611bdf6158df565b80820180821115611bdf57611bdf6158df565b634e487b7160e01b5f52601260045260245ffd5b5f82615b1d57615b1d615afb565b500490565b5f8060408385031215615b33575f80fd5b505080516020909101519092909150565b5f805f60608486031215615b56575f80fd5b6157fa8461593d565b6001600160801b038281168282160390811115611bdf57611bdf6158df565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103615bb257615bb26158df565b5f0392915050565b5f60208284031215615bca575f80fd5b81516135e18161542c565b81810381811115611bdf57611bdf6158df565b6001600160801b038181168382160190811115611bdf57611bdf6158df565b5f60208284031215615c17575f80fd5b6135e18261593d565b5f60208284031215615c30575f80fd5b6135e182615a3e565b5f82810b9082900b03607f198112607f82131715611bdf57611bdf6158df565b5f61ffff821661ffff8103615c7057615c706158df565b60010192915050565b5f60ff821660ff8103615c7057615c706158df565b5f60208284031215615c9e575f80fd5b81516135e1816155de565b6001600160801b0381811683821602908116908181146158c1576158c16158df565b5f6001600160801b03831680615ce357615ce3615afb565b806001600160801b0384160491505092915050565b5f600160ff1b8203615d0c57615d0c6158df565b505f0390565b5f8160020b627fffff198103615bb257615bb26158df565b5f82615d3857615d38615afb565b500690565b6001600160a01b038281168282160390811115611bdf57611bdf6158df565b5f60208284031215615d6c575f80fd5b6135e18261592c565b8181035f8312801583831316838312821617156158c1576158c16158df565b8082025f8212600160ff1b84141615615daf57615daf6158df565b8181058314821517611bdf57611bdf6158df565b8082018281125f831280158216821582161715615de257615de26158df565b505092915050565b81516001600160a01b0316815261016081016020830151615e1660208401826001600160a01b03169052565b506040830151615e2d604084018262ffffff169052565b506060830151615e42606084018260020b9052565b506080830151615e57608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100830151610100830152610120830151615e9e6101208401826001600160a01b03169052565b5061014092830151919092015290565b5f805f8060808587031215615ec1575f80fd5b84519350615ed16020860161593d565b604086015160609096015194979096509250505056fea264697066735822122007a836a68aa47cfbe5612a8b948459bfd9722cf419fbe3be922a4411f5134f8564736f6c634300081a0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d