31 txs
33 calls
constructor
constructor(address _owner, address _positionManager, address wrappedNative, address link, address _registrar, address _fastGasFeed)
functions
batchCount
viewfunction batchCount() view returns (uint128)
batchIdToUserDepositAmount
viewfunction batchIdToUserDepositAmount(uint128, address) view returns (uint128)
checkUpkeep
viewfunction checkUpkeep(bytes checkData) view returns (bool upkeepNeeded, bytes performData)
claim
viewfunction claim(uint128) view returns (address pool, uint128 token0Amount, uint128 token1Amount, uint128 feePerUser, bool direction, bool isReadyForClaim)
FAST_GAS_HEARTBEAT
viewfunction FAST_GAS_HEARTBEAT() view returns (uint256)
fastGasFeed
viewfunction fastGasFeed() view returns (address)
findSpot
viewfunction findSpot(address pool, uint256 startingNode, int24 targetTick, bool direction) view returns (uint256 proposedHead, uint256 proposedTail)
getClaim
viewfunction getClaim(uint128 batchId) view returns (tuple)
getFeePerUser
viewfunction getFeePerUser(uint128 batchId) view returns (uint128)
getGasPrice
viewfunction getGasPrice() view returns (uint256)
getOrderBook
viewfunction getOrderBook(uint256 id) view returns (tuple)
getPositionFromTicks
viewfunction getPositionFromTicks(address, bool, int24, int24) view returns (uint256)
isOrderReadyForClaim
viewfunction isOrderReadyForClaim(uint128 batchId) view returns (bool)
isShutdown
viewfunction isShutdown() view returns (bool)
LINK
viewfunction LINK() view returns (address)
MAX_FILLS_PER_UPKEEP
viewfunction MAX_FILLS_PER_UPKEEP() view returns (uint16)
MAX_GAS_LIMIT
viewfunction MAX_GAS_LIMIT() view returns (uint32)
MAX_GAS_PRICE
viewfunction MAX_GAS_PRICE() view returns (uint32)
maxFillsPerUpkeep
viewfunction maxFillsPerUpkeep() view returns (uint16)
minimumAssets
viewfunction minimumAssets(address) view returns (uint256)
orderBook
viewfunction orderBook(uint256) view returns (bool direction, int24 tickUpper, int24 tickLower, uint64 userCount, uint128 batchId, uint128 token0Amount, uint128 token1Amount, uint256 head, uint256 tail)
owner
viewfunction owner() view returns (address)
poolToData
viewfunction poolToData(address) view returns (uint256 centerHead, uint256 centerTail, address token0, address token1, uint24 fee)
POSITION_MANAGER
viewfunction POSITION_MANAGER() view returns (address)
registrar
viewfunction registrar() view returns (address)
tokenToSwapFees
viewfunction tokenToSwapFees(address) view returns (uint256)
upkeepGasLimit
viewfunction upkeepGasLimit() view returns (uint32)
upkeepGasPrice
viewfunction upkeepGasPrice() view returns (uint32)
WRAPPED_NATIVE
viewfunction WRAPPED_NATIVE() view returns (address)
cancelOrder
nonpayablefunction cancelOrder(address pool, int24 targetTick, bool direction, uint256 deadline) returns (uint128 amount0, uint128 amount1, uint128 batchId)
claimOrder
payablefunction claimOrder(uint128 batchId, address user) payable returns (address, uint256)
initiateShutdown
nonpayablefunction initiateShutdown()
liftShutdown
nonpayablefunction liftShutdown()
newOrder
nonpayablefunction newOrder(address pool, int24 targetTick, uint128 amount, bool direction, uint256 startingNode, uint256 deadline) returns (uint128)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
performUpkeep
nonpayablefunction performUpkeep(bytes performData)
setFastGasFeed
nonpayablefunction setFastGasFeed(address feed)
setMaxFillsPerUpkeep
nonpayablefunction setMaxFillsPerUpkeep(uint16 newVal)
setMinimumAssets
nonpayablefunction setMinimumAssets(uint256 amount, address asset)
setRegistrar
nonpayablefunction setRegistrar(address _registrar)
setUpkeepGasLimit
nonpayablefunction setUpkeepGasLimit(uint32 gasLimit)
setUpkeepGasPrice
nonpayablefunction setUpkeepGasPrice(uint32 gasPrice)
setupLimitOrder
nonpayablefunction setupLimitOrder(address pool, uint256 initialUpkeepFunds)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawNative
nonpayablefunction withdrawNative()
withdrawSwapFees
nonpayablefunction withdrawSwapFees(address tokenFeeIsIn)
events
CancelOrder
event CancelOrder(address user, uint128 amount0, uint128 amount1, (bool direction, int24 tickUpper, int24 tickLower, uint64 userCount, uint128 batchId, uint128 token0Amount, uint128 token1Amount, uint256 head, uint256 tail) affectedOrder)
ClaimOrder
event ClaimOrder(address user, uint128 batchId, uint256 amount)
LimitOrderSetup
event LimitOrderSetup(address pool)
NewOrder
event NewOrder(address user, address pool, uint128 amount, uint128 userTotal, (bool direction, int24 tickUpper, int24 tickLower, uint64 userCount, uint128 batchId, uint128 token0Amount, uint128 token1Amount, uint256 head, uint256 tail) affectedOrder)
OrderFilled
event OrderFilled(uint256 batchId, address pool)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
ShutdownChanged
event ShutdownChanged(bool isShutdown)
errors
LimitOrderRegistry__AmountShouldBeZero
error LimitOrderRegistry__AmountShouldBeZero()
LimitOrderRegistry__CenterITM
error LimitOrderRegistry__CenterITM()
LimitOrderRegistry__ContractNotShutdown
error LimitOrderRegistry__ContractNotShutdown()
LimitOrderRegistry__ContractShutdown
error LimitOrderRegistry__ContractShutdown()
LimitOrderRegistry__DirectionMisMatch
error LimitOrderRegistry__DirectionMisMatch()
LimitOrderRegistry__InvalidBatchId
error LimitOrderRegistry__InvalidBatchId()
LimitOrderRegistry__InvalidFillsPerUpkeep
error LimitOrderRegistry__InvalidFillsPerUpkeep()
LimitOrderRegistry__InvalidGasLimit
error LimitOrderRegistry__InvalidGasLimit()
LimitOrderRegistry__InvalidGasPrice
error LimitOrderRegistry__InvalidGasPrice()
LimitOrderRegistry__InvalidPositionId
error LimitOrderRegistry__InvalidPositionId()
LimitOrderRegistry__InvalidTargetTick
error LimitOrderRegistry__InvalidTargetTick(int24 targetTick, int24 tickSpacing)
LimitOrderRegistry__InvalidTickRange
error LimitOrderRegistry__InvalidTickRange(int24 upper, int24 lower)
LimitOrderRegistry__MinimumNotMet
error LimitOrderRegistry__MinimumNotMet(address asset, uint256 minimum, uint256 amount)
LimitOrderRegistry__MinimumNotSet
error LimitOrderRegistry__MinimumNotSet(address asset)
LimitOrderRegistry__NoLiquidityInOrder
error LimitOrderRegistry__NoLiquidityInOrder()
LimitOrderRegistry__NoOrdersToFulfill
error LimitOrderRegistry__NoOrdersToFulfill()
LimitOrderRegistry__OrderITM
error LimitOrderRegistry__OrderITM(int24 currentTick, int24 targetTick, bool direction)
LimitOrderRegistry__OrderNotInList
error LimitOrderRegistry__OrderNotInList(uint256 tokenId)
LimitOrderRegistry__OrderNotReadyToClaim
error LimitOrderRegistry__OrderNotReadyToClaim(uint128 batchId)
LimitOrderRegistry__PoolAlreadySetup
error LimitOrderRegistry__PoolAlreadySetup(address pool)
LimitOrderRegistry__PoolNotSetup
error LimitOrderRegistry__PoolNotSetup(address pool)
LimitOrderRegistry__UserNotFound
error LimitOrderRegistry__UserNotFound(address user, uint256 batchId)
LimitOrderRegistry__ZeroFeesToWithdraw
error LimitOrderRegistry__ZeroFeesToWithdraw(address token)
LimitOrderRegistry__ZeroNativeBalance
error LimitOrderRegistry__ZeroNativeBalance()
creation bytecode
0x60e0604052600680546001600160d01b0319166a01000a0000001e000493e01790553480156200002e57600080fd5b50604051620061fa380380620061fa8339810160408190526200005191620000f7565b600080546001600160a01b0319166001600160a01b03881690811782556040518892907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0394851660a05292841660805290831660c052600980549184166001600160a01b0319928316179055600a8054929093169116179055506200018b565b6001600160a01b0381168114620000f457600080fd5b50565b60008060008060008060c087890312156200011157600080fd5b86516200011e81620000de565b60208801519096506200013181620000de565b60408801519095506200014481620000de565b60608801519094506200015781620000de565b60808801519093506200016a81620000de565b60a08801519092506200017d81620000de565b809150509295509295509295565b60805160a05160c051615f9e6200025c600039600081816103b301528181612b0101528181612cce0152612d660152600081816103ff01528181613b4101528181613b8801528181613cc801528181613da501528181613e3501528181613e8601528181613f1601528181614479015281816144c0015281816145d2015281816146740152818161470401528181614755015281816147e50152818161481d0152818161495b0152614b9a015260008181610bf5015281816110270152818161167001526117270152615f9e6000f3fe60806040526004361061027d5760003560e01c80638ac9972f1161014f578063bf86d690116100c1578063e3bbb4f11161007a578063e3bbb4f114610c17578063e3f5aa5114610c2d578063ec81205514610c44578063ed12b33514610c64578063f2fde38b14610c91578063faab9d3914610cb157600080fd5b8063bf86d69014610b28578063c9d6e63014610b49578063cd3547b414610b69578063cda5197614610b96578063d368f97614610bb6578063d999984d14610be357600080fd5b8063a20b6e3411610113578063a20b6e341461096a578063a31d1b7614610a55578063a9ea1f8014610a75578063b17a24ae14610a92578063b1e057a414610ab2578063b752ceb214610ad457600080fd5b80638ac9972f146106f05780638da5cb5b1461073a5780638e06ffd51461075a578063935f450e1461079b57806397bb2b83146108d257600080fd5b80632c1f969e116101f357806350431ce4116101ac57806350431ce41461059357806353410e7b146105a85780635e2c576e146105c857806360e72adb146105dd5780636e04ff0d1461069a578063713b9dc1146106c857600080fd5b80632c1f969e146104d357806330e7c992146104e95780633cccf2291461050957806343854af514610529578063455259cb1461055e5780634585e33b1461057357600080fd5b8063151da32e11610245578063151da32e1461036f5780631b6b6d23146103a15780631bea83fe146103ed5780631c4c4d56146104215780631dd969d21461045e5780632b20e397146104b357600080fd5b806306f13056146102825780630a680e18146102c65780630cc2106d146102dd5780631467feac146102fd578063150b7a0214610336575b600080fd5b34801561028e57600080fd5b506006546102a990600160501b90046001600160801b031681565b6040516001600160801b0390911681526020015b60405180910390f35b3480156102d257600080fd5b506102db610cd1565b005b3480156102e957600080fd5b506102db6102f8366004614f8d565b610d79565b34801561030957600080fd5b5060065461032190600160201b900463ffffffff1681565b60405163ffffffff90911681526020016102bd565b34801561034257600080fd5b5061035661035136600461503f565b610df3565b6040516001600160e01b031990911681526020016102bd565b61038261037d366004615102565b610e04565b604080516001600160a01b0390931683526020830191909152016102bd565b3480156103ad57600080fd5b506103d57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102bd565b3480156103f957600080fd5b506103d57f000000000000000000000000000000000000000000000000000000000000000081565b34801561042d57600080fd5b506102a961043c36600461513b565b6001600160801b03908116600090815260026020819052604090912001541690565b34801561046a57600080fd5b506104a5610479366004615175565b600460209081526000948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102bd565b3480156104bf57600080fd5b506009546103d5906001600160a01b031681565b3480156104df57600080fd5b506104a5611c2081565b3480156104f557600080fd5b506102db610504366004614f8d565b6110d7565b34801561051557600080fd5b506102db6105243660046151d1565b611147565b34801561053557600080fd5b506105496105443660046151ee565b611193565b604080519283526020830191909152016102bd565b34801561056a57600080fd5b506104a56112a3565b34801561057f57600080fd5b506102db61058e366004615236565b6113a3565b34801561059f57600080fd5b506102db61162e565b3480156105b457600080fd5b506102a96105c33660046152a7565b611770565b3480156105d457600080fd5b506102db611f6f565b3480156105e957600080fd5b506106516105f836600461513b565b60026020819052600091825260409091208054600182015491909201546001600160a01b03909216916001600160801b0380831692600160801b908190048216929182169160ff918104821691600160881b9091041686565b604080516001600160a01b0390971687526001600160801b03958616602088015293851693860193909352921660608401529015156080830152151560a082015260c0016102bd565b3480156106a657600080fd5b506106ba6106b5366004615236565b612001565b6040516102bd929190615365565b3480156106d457600080fd5b506106dd601481565b60405161ffff90911681526020016102bd565b3480156106fc57600080fd5b5061071061070b366004615380565b612352565b604080516001600160801b03948516815292841660208401529216918101919091526060016102bd565b34801561074657600080fd5b506000546103d5906001600160a01b031681565b34801561076657600080fd5b506102a9610775366004615102565b60076020908152600092835260408084209091529082529020546001600160801b031681565b3480156107a757600080fd5b5061086b6107b636600461513b565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506001600160801b03908116600090815260026020818152604092839020835160c08101855281546001600160a01b03168152600182015480871693820193909352600160801b9283900486169481019490945290910154928316606083015260ff908304811615156080830152600160881b909204909116151560a082015290565b6040516102bd919081516001600160a01b031681526020808301516001600160801b03908116918301919091526040808401518216908301526060808401519091169082015260808083015115159082015260a09182015115159181019190915260c00190565b3480156108de57600080fd5b506109316108ed3660046151d1565b600360208190526000918252604090912080546001820154600283015492909301549092916001600160a01b039081169190811690600160a01b900462ffffff1685565b6040805195865260208601949094526001600160a01b039283169385019390935216606083015262ffffff16608082015260a0016102bd565b34801561097657600080fd5b506109f66109853660046153d1565b60086020526000908152604090208054600182015460028084015460039094015460ff8416946101008504830b94600160201b810490930b936001600160401b03600160381b850416936001600160801b03600160781b90910481169382821693600160801b909304909116919089565b604080519915158a52600298890b60208b01529690970b958801959095526001600160401b0390931660608701526001600160801b039182166080870152811660a08601521660c084015260e0830152610100820152610120016102bd565b348015610a6157600080fd5b506102db610a703660046151d1565b61295e565b348015610a8157600080fd5b506006546103219063ffffffff1681565b348015610a9e57600080fd5b506102db610aad3660046153fa565b6129f5565b348015610abe57600080fd5b506006546106dd90600160401b900461ffff1681565b348015610ae057600080fd5b50610b18610aef36600461513b565b6001600160801b031660009081526002602081905260409091200154600160881b900460ff1690565b60405190151581526020016102bd565b348015610b3457600080fd5b50600954610b1890600160a01b900460ff1681565b348015610b5557600080fd5b506102db610b64366004615417565b612a79565b348015610b7557600080fd5b506104a5610b843660046151d1565b60016020526000908152604090205481565b348015610ba257600080fd5b506102db610bb1366004615443565b61312e565b348015610bc257600080fd5b50610bd6610bd13660046153d1565b613172565b6040516102bd9190615468565b348015610bef57600080fd5b506103d57f000000000000000000000000000000000000000000000000000000000000000081565b348015610c2357600080fd5b506103216103e881565b348015610c3957600080fd5b50610321620b71b081565b348015610c5057600080fd5b50600a546103d5906001600160a01b031681565b348015610c7057600080fd5b506104a5610c7f3660046151d1565b60056020526000908152604090205481565b348015610c9d57600080fd5b506102db610cac3660046151d1565b61321f565b348015610cbd57600080fd5b506102db610ccc3660046151d1565b613294565b600954600160a01b900460ff1615610cfc57604051637856112960e11b815260040160405180910390fd5b6000546001600160a01b03163314610d2f5760405162461bcd60e51b8152600401610d2690615521565b60405180910390fd5b6009805460ff60a01b1916600160a01b179055604051600181527fb8527b93c36dabdfe078af41be789ba946a4adcfeafcf9d8de21d51629859e3c906020015b60405180910390a1565b6000546001600160a01b03163314610da35760405162461bcd60e51b8152600401610d2690615521565b6103e863ffffffff82161115610dcc5760405163eec915d760e01b815260040160405180910390fd5b6006805463ffffffff909216600160201b0267ffffffff0000000019909216919091179055565b630a85bd0160e11b5b949350505050565b6001600160801b0382166000908152600260208190526040822090810154829190600160881b900460ff16610e575760405163327c783360e01b81526001600160801b0386166004820152602401610d26565b6001600160801b0380861660009081526007602090815260408083206001600160a01b038916845290915281205490911690819003610ec35760405163775c73bf60e01b81526001600160a01b03861660048201526001600160801b0387166024820152604401610d26565b6001600160801b03861660009081526007602090815260408083206001600160a01b0389168452909152812080546001600160801b0319169055600283015481908190600160801b900460ff1615610f5857505050600182015482546001600160a01b03908116600090815260036020819052604090912001546001600160801b0380841693600160801b9004169116610f95565b505050600182015482546001600160a01b039081166000908152600360205260409020600201546001600160801b03600160801b84048116931691165b600083610fa2868561555d565b610fac9190615592565b9050610fc26001600160a01b0383168a836132e0565b600286015433906001600160801b03163410611014576002870154600090610ff3906001600160801b0316346155a6565b9050801561100e5761100e6001600160a01b0383168261335e565b50611073565b600287015461105a906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690839030906001600160801b03166133b4565b3415611073576110736001600160a01b0382163461335e565b604080516001600160a01b038c1681526001600160801b038d1660208201529081018390527f7694d48c5e21d47a725e1e62a0159727e60d57f1e42d9f83e30199fffaefc8ac9060600160405180910390a1509096509450505050505b9250929050565b6000546001600160a01b031633146111015760405162461bcd60e51b8152600401610d2690615521565b620b71b063ffffffff8216111561112b576040516301eadab160e31b815260040160405180910390fd5b6006805463ffffffff191663ffffffff92909216919091179055565b6000546001600160a01b031633146111715760405162461bcd60e51b8152600401610d2690615521565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038481166000818152600360208181526040808420815160a0810183528154815260018201548185015260028201548816818401529301549586166060840152600160a01b90950462ffffff16608083015284516334324e9f60e21b8152945192948594929385939263d0c93a7c92600480820193918290030181865afa158015611229573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124d91906155cf565b905061125981876155ec565b60020b15611288576040516327deee8960e21b8152600287810b600483015282900b6024820152604401610d26565b6112948288888861343e565b90999098509650505050505050565b600a546000906001600160a01b03161561138057600080600a60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190615628565b509350509250506000814261134691906155a6565b9050611c208111156113785760065461137090600160201b900463ffffffff16633b9aca0061555d565b935050505090565b509092915050565b60065461139e90600160201b900463ffffffff16633b9aca0061555d565b905090565b600080806113b384860186615678565b6001600160a01b038084166000908152600360205260409020600201549396509194509250166114015760405163d495675960e01b81526001600160a01b0384166004820152602401610d26565b6001600160a01b0383166000908152600360205260408120906114226112a3565b600654611435919063ffffffff1661555d565b90506000856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b91906156b9565b5050505050915050600080866114b55784600101546114b8565b84545b905060005b600654600160401b900461ffff168110156115ed5781156115ed576000828152600860205260408120805490919061150f908790600160201b8104600290810b91610100810490910b9060ff16613890565b905060008160028111156115255761152561575b565b036115d357611537848c848a8d61392d565b8961154657816003015461154c565b81600201545b6002808401805460038087018054600090815260086020908152604080832088018690558354958352808320909401949094559384905583905586546001600160801b03600160781b90910416835290839052902001805460ff60881b1916600160881b1790558254670100000000000000600160f81b03191683556001955093506115da565b50506115ed565b5050806115e690615771565b90506114bd565b508161160c57604051630f72fa0160e11b815260040160405180910390fd5b861561161a57808555611622565b600185018190555b50505050505050505050565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610d2690615521565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e3919061578a565b905047811580156116f2575080155b15611710576040516336f53c8f60e21b815260040160405180910390fd5b811561175057600054611750906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169116846132e0565b801561176c5760005461176c906001600160a01b03168261335e565b5050565b600954600090600160a01b900460ff161561179e57604051637856112960e11b815260040160405180910390fd5b6001600160a01b03878116600090815260036020526040902060020154166117e45760405163d495675960e01b81526001600160a01b0388166004820152602401610d26565b33600085611810576001600160a01b03808a16600090815260036020819052604090912001541661182f565b6001600160a01b03808a16600090815260036020526040902060020154165b9050611844876001600160801b031682613aa6565b6118626001600160a01b03821683306001600160801b038b166133b4565b506040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810191909152886001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156118da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118fe91906156b9565b5050505060029190910b83525050604080516334324e9f60e21b815290516000916001600160a01b038c169163d0c93a7c916004808201926020929091908290030181865afa158015611955573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197991906155cf565b9050611985818a6155ec565b60020b156119b4576040516327deee8960e21b815260028a810b600483015282900b6024820152604401610d26565b86156119db57600289900b60208301526119ce818a6157a3565b60020b60408301526119f8565b6119e5818a6157c8565b600290810b602084015289900b60408301525b506000611a138260000151836040015184602001518a613890565b90506001816002811115611a2957611a2961575b565b14611a6057815160405163ea7469e760e01b8152600291820b6004820152908a900b60248201528715156044820152606401610d26565b506001600160a01b038916600090815260046020908152604080832089158015855290835281842085830151600290810b86529084528285208685015190910b8552909252909120546080830152611ac6576001600160801b03871660a0820152611ad6565b6001600160801b03871660c08201525b8060800151600003611c6d576001600160a01b03898116600090815260036020818152604092839020835160a0808201865282548252600183015482850152600283015487168287015291909301549485166060840152600160a01b90940462ffffff166080830152840151918401519284015160c08501519193611b619385939092908c8b613b25565b60808301819052611b7890829088908c908b613f4b565b604080830151608084018051600090815260086020908152848220805462ffffff958616600160201b0266ffffff0000000019909116179055860151825182529390208054939092166101000263ffffff001990931692909217905551611be0908890613fb7565b611bef8260800151848a614048565b6001600160801b031660608301526080820151825160208401516040850151611c1d938e93909290916141df565b5060808101516001600160a01b038a1660009081526004602090815260408083208a15158452825280832081860151600290810b85529083528184208387015190910b8452909152902055611ee5565b608080820151600090815260086020908152604091829020825161012081018452815460ff811615158252610100808204600290810b95840195909552600160201b8204850b958301959095526001600160401b03600160381b82041660608301526001600160801b03600160781b909104811695820195909552600182015480861660a08301819052600160801b90910490951660c08201529181015460e0830152600301549181019190915290151580611d36575060008160c001516001600160801b0316115b15611e05578051151587151514611d605760405163e86e44c160e01b815260040160405180910390fd5b6001600160a01b038a8116600090815260036020818152604092839020835160a08082018652825482526001830154938201939093526002820154861694810194909452909101549283166060830152600160a01b90920462ffffff166080808301919091528401519184015160c08501519192611de2928492908c8b61445f565b611df18360800151858b614048565b6001600160801b0316606084015250611ee3565b6001600160a01b038a8116600090815260036020818152604092839020835160a0810185528154815260018201549281019290925260028101548516938201939093529101549182166060820152600160a01b90910462ffffff16608080830191909152830151611e7c90829089908d908c613f4b565b611e8a888460800151613fb7565b611ea48184608001518560a001518660c001518c8b61445f565b611eb38360800151858b614048565b6001600160801b031660608401526080830151835160208501516040860151611ee1938f93909290916141df565b505b505b7f559322b66708f28c8fe1386f8cd96634d0c2fdb250d925b71a6c15e11e26069c828a8984606001516008600087608001518152602001908152602001600020604051611f36959493929190615873565b60405180910390a160800151600090815260086020526040902054600160781b90046001600160801b03169150505b9695505050505050565b6000546001600160a01b03163314611f995760405162461bcd60e51b8152600401610d2690615521565b600954600160a01b900460ff16611fc357604051632960b58960e11b815260040160405180910390fd5b6009805460ff60a01b19169055604051600081527fb8527b93c36dabdfe078af41be789ba946a4adcfeafcf9d8de21d51629859e3c90602001610d6f565b6000606081612012848601866151d1565b90506000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015612054573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207891906156b9565b505050506001600160a01b03858116600090815260036020818152604092839020835160a0810185528154815260018201549281019290925260028101548516938201939093529101549182166060820152600160a01b90910462ffffff1660808201529193509091506120ec9050614f41565b600080806120fc426103846158b0565b85519091501561221b578451600090815260086020908152604091829020825161012081018452815460ff81161515808352610100808304600290810b968501879052600160201b8404810b978501889052600160381b84046001600160401b03166060860152600160781b9093046001600160801b039081166080860152600186015480821660a0870152600160801b90041660c08501529184015460e08401526003909301549082015296506121b79289929091613890565b925060008360028111156121cd576121cd61575b565b0361221b57604080516001600160a01b03891660208201526001918101829052606081018390529099508992506080015b6040516020818303038152906040529750505050505050506110d0565b60208501511561232257602085810151600090815260088252604090819020815161012081018352815460ff81161515808352610100808304600290810b978501889052600160201b8404810b968501879052600160381b84046001600160401b03166060860152600160781b9093046001600160801b039081166080860152600186015480821660a0870152600160801b90041660c08501529184015460e08401526003909301549082015296506122d692899291613890565b925060008360028111156122ec576122ec61575b565b0361232257604080516001600160a01b038916602082015260009181018290526060810183905260019a509092506080016121fe565b60408051600060208201819052910160405160208183030381529060405298509850505050505050509250929050565b6000806000806000886001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015612398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bc91906156b9565b505050505091505060008060008b6001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242b91906155cf565b9050612437818c6155ec565b60020b15612466576040516327deee8960e21b815260028c810b600483015282900b6024820152604401610d26565b8915612480578a925061247981846157a3565b9150612490565b61248a818c6157c8565b92508a91505b50600061249f8483858d613890565b905060018160028111156124b5576124b561575b565b146124e95760405163ea7469e760e01b8152600285810b60048301528c900b60248201528a15156044820152606401610d26565b506001600160a01b038b1660009081526004602090815260408083208c151584528252808320600285810b85529083528184209086900b8452909152812054945084900361254a576040516327bd01f960e21b815260040160405180910390fd5b505050600081815260086020526040812080549091600160781b9091046001600160801b0316900361258f5760405163d17ecf4960e01b815260040160405180910390fd5b8054600160781b90046001600160801b03908116600081815260076020908152604080832033808552925282205492965090929091168083036125ff5760405163775c73bf60e01b81526001600160a01b03831660048201526001600160801b0387166024820152604401610d26565b8354600160381b90046001600160401b031684600761261d836158c3565b82546001600160401b039182166101009390930a9283029190920219909116179055506001600160801b03861660009081526007602090815260408083206001600160a01b0386168452909152812080546001600160801b0319169055845460ff1615612724575060018401546001600160801b0390811690821681036126c0576001850180546001600160801b0319169055670de0b6b3a764000093506127c3565b806001600160801b0316826001600160801b0316670de0b6b3a76400006126e7919061555d565b6126f19190615592565b93506126fd82826158e6565b6001860180546001600160801b0319166001600160801b03929092169190911790556127c3565b5060018401546001600160801b03600160801b90910481169082168103612766576001850180546001600160801b03169055670de0b6b3a764000093506127c3565b806001600160801b0316826001600160801b0316670de0b6b3a764000061278d919061555d565b6127979190615592565b93506127a382826158e6565b6001860180546001600160801b03928316600160801b0292169190911790555b6127cf868e868d614816565b604051919a5098507f61e6e7599d7fb0402072db6fa40efca86866f1c441dc2515a79575743ab59cf79061280a9085908c908c908a9061590d565b60405180910390a183670de0b6b3a76400000361284e5761282c868e87614db6565b6000600186015584546fffffffffffffffffffffffffffffffff60781b191685555b5050825460ff16156128e6576001600160801b038716156128a0576001600160a01b03808c1660009081526003602052604090206002015461289b9116826001600160801b038a166132e0565b6128b9565b604051634a68d63560e11b815260040160405180910390fd5b6001600160801b038616156128e1576040516395f95a0760e01b815260040160405180910390fd5b612950565b6001600160801b038616156128a0576001600160a01b03808c16600090815260036020819052604090912001546129289116826001600160801b0389166132e0565b6001600160801b03871615612950576040516395f95a0760e01b815260040160405180910390fd5b505050509450945094915050565b6000546001600160a01b031633146129885760405162461bcd60e51b8152600401610d2690615521565b6001600160a01b038116600090815260016020526040812054908190036129cd5760405163117373e160e01b81526001600160a01b0383166004820152602401610d26565b6001600160a01b0380831660008181526001602052604081208190555461176c9216836132e0565b6000546001600160a01b03163314612a1f5760405162461bcd60e51b8152600401610d2690615521565b61ffff81161580612a345750601461ffff8216115b15612a52576040516394aa3c9160e01b815260040160405180910390fd5b6006805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000546001600160a01b03163314612aa35760405162461bcd60e51b8152600401610d2690615521565b6001600160a01b038281166000908152600360205260409020600201541615612aea57604051635edc3a1b60e11b81526001600160a01b0383166004820152602401610d26565b8015612f1c57600054612b2b906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911630846133b4565b60408051808201825260018152603160f81b6020909101819052600954825163181f5a7760e01b8152925191926001600160a01b039091169163181f5a77916004808201926000929091908290030181865afa158015612b8f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bb79190810190615961565b601081518110612bc957612bc961594b565b01602001516001600160f81b03191603612d55576000604051806080016040528060488152602001615f216048913980516020918201206040805160008185015281518082039094018452810190526006549091903090612c3c9063ffffffff811690600160401b900461ffff166159ce565b600054604080516001600160a01b038a81166020830152909216910160408051601f1981840301815290829052612c8095949392918990604d9030906024016159fa565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092526009549151630200057560e51b81529092506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692634000aea092612d0b92919091169086908690600401615ab1565b6020604051808303816000875af1158015612d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4e9190615ad8565b5050612f1c565b600954612d8f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683614e7a565b604080516101408101825260146101008201908152734c696d6974204f7264657220526567697374727960601b61012083015281528151600060208083018290529093908301910160408051808303601f19018152918152908252306020830152600654910190612e129063ffffffff811690600160401b900461ffff166159ce565b63ffffffff1681526000546001600160a01b031660208083019190915260408051920191612e51918791016001600160a01b0391909116815260200190565b60405160208183030381529060405281526020016000604051602001612e80919060ff91909116815260200190565b60408051808303601f190181529181529082526001600160601b038516602090920191909152600954905163022de76960e21b81529192506001600160a01b0316906308b79da490612ed6908490600401615af5565b6020604051808303816000875af1158015612ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f19919061578a565b50505b6040518060a001604052806000815260200160008152602001836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f979190615be3565b6001600160a01b03168152602001836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130079190615be3565b6001600160a01b03168152602001836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015613053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130779190615c13565b62ffffff9081169091526001600160a01b0384811660008181526003602081815260409283902087518155878201516001820155878401516002820180549188166001600160a01b0319909216919091179055606088015192018054608090980151909616600160a01b026001600160b81b031990971691909416179490941790925591519081527f250d91a5317f78e9f385385f5e6073f9a759b17cfa6f5d2374163436fbb44ae4910160405180910390a15050565b6000546001600160a01b031633146131585760405162461bcd60e51b8152600401610d2690615521565b6001600160a01b0316600090815260056020526040902055565b61317a614f41565b50600090815260086020908152604091829020825161012081018452815460ff811615158252610100808204600290810b95840195909552600160201b8204850b958301959095526001600160401b03600160381b82041660608301526001600160801b03600160781b90910481166080830152600183015480821660a0840152600160801b90041660c08201529181015460e0830152600301549181019190915290565b6000546001600160a01b031633146132495760405162461bcd60e51b8152600401610d2690615521565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146132be5760405162461bcd60e51b8152600401610d2690615521565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600060405163a9059cbb60e01b8152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806133585760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610d26565b50505050565b600080600080600085875af19050806133af5760405162461bcd60e51b815260206004820152601360248201527211551217d514905394d1915497d19052531151606a1b6044820152606401610d26565b505050565b60006040516323b872dd60e01b81528460048201528360248201528260448201526020600060648360008a5af13d15601f3d11600160005114161716915050806134375760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d26565b5050505050565b600080613449614f41565b856000036135db5783801561345e5750865115155b1561350f57508551600081815260086020908152604091829020825161012081018452815460ff811615158252610100808204600290810b95840195909552600160201b8204850b958301959095526001600160401b03600160381b82041660608301526001600160801b03600160781b90910481166080830152600183015480821660a0840152600160801b90041660c08201529181015460e083015260030154918101919091529095506136b0565b831580156135205750602087015115155b156135ce5750602080870151600081815260088352604090819020815161012081018352815460ff811615158252610100808204600290810b97840197909752600160201b8204870b948301949094526001600160401b03600160381b82041660608301526001600160801b03600160781b90910481166080830152600183015480821660a0840152600160801b90041660c08201529381015460e0850152600301549083015295506136b0565b6000809250925050613887565b50600085815260086020908152604091829020825161012081018452815460ff81161515808352610100808304600290810b96850196909652600160201b8304860b96840196909652600160381b82046001600160401b03166060840152600160781b9091046001600160801b039081166080840152600184015480821660a0850152600160801b90041660c08301529282015460e082015260039091015492810192909252841515146136a557604051630eb5001960e41b815260048101879052602401610d26565b6136b0868289614ef1565b855b84156137a1578560020b826040015160020b126136da57610100909101519092509050613887565b8160e001516000036136f3576000935091506138879050565b5060e090810151600081815260086020908152604091829020825161012081018452815460ff811615158252610100808204600290810b95840195909552600160201b8204850b958301959095526001600160401b03600160381b82041660608301526001600160801b03600160781b90910481166080830152600183015480821660a0840152600160801b90041660c08201529181015494820194909452600390930154908301526136b2565b8560020b826020015160020b136137c15760e09091015192509050613887565b8161010001516000036137db579250600091506138879050565b5061010090810151600081815260086020908152604091829020825161012081018452815460ff811615158252868104600290810b94830194909452600160201b8104840b94820194909452600160381b84046001600160401b03166060820152600160781b9093046001600160801b039081166080850152600182015480821660a0860152600160801b90041660c08401529081015460e083015260030154928101929092526136b2565b94509492505050565b60008360020b8360020b036138c957604051600162993c7b60e01b03198152600284810b600483015285900b6024820152604401610d26565b8115613902578260020b8560020b13156138e557506000610dfc565b8360020b8560020b126138fa57506002610dfc565b506001610dfc565b8360020b8560020b121561391857506000610dfc565b8260020b8560020b136138fa57506002610dfc565b8254600160781b81046001600160801b03166000908152600260205260409020600160381b9091046001600160401b0316906139698285615592565b6002820180546001600160801b0319166001600160801b039290921691909117905580546001600160a01b0319166001600160a01b0387161781556000806139bb8989670de0b6b3a764000088614816565b8854919350915060ff16156139ed576001808801546001600160801b03838116600160801b0291161790840155613a1d565b6001878101546001600160801b0319600160801b918290046001600160801b039081169092021690841617908401555b865460028401805460ff9092161515600160801b0260ff60801b1990921691909117905560006001880155865460408051600160781b9092046001600160801b031682526001600160a01b038a1660208301527f74ebbab24ee8774729982ac100f931306b160f431f7f1483cc380186d56754bc910160405180910390a1505050505050505050565b6001600160a01b03811660009081526005602052604081205490819003613aeb57604051630b90e8fb60e21b81526001600160a01b0383166004820152602401610d26565b808310156133af576040516360d7e97160e01b81526001600160a01b03831660048201526024810182905260448101849052606401610d26565b60008215613b74576040880151613b6f906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160801b038816614e7a565b613bb6565b6060880151613bb6906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160801b038716614e7a565b60006001600160801b03861615613be557612710613bd68761270f615c2e565b613be09190615c54565b613be8565b60005b905060006001600160801b03861615613c1957612710613c0a8761270f615c2e565b613c149190615c54565b613c1c565b60005b905060006040518061016001604052808c604001516001600160a01b031681526020018c606001516001600160a01b031681526020018c6080015162ffffff1681526020018a60020b81526020018b60020b8152602001896001600160801b03168152602001886001600160801b03168152602001846001600160801b03168152602001836001600160801b03168152602001306001600160a01b0316815260200186815250905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166388316456836040518263ffffffff1660e01b8152600401613d129190615c7a565b6080604051808303816000875af1158015613d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d559190615d49565b505050905080600003613d7b576040516327bd01f960e21b815260040160405180910390fd5b868015613e1c575060408c8101519051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015613df6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e1a919061578a565b115b15613e5b5760408c0151613e5b906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006000614e7a565b86158015613efd575060608c0151604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152600092169063dd62ed3e90604401602060405180830381865afa158015613ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613efb919061578a565b115b15613f3c5760608c0151613f3c906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006000614e7a565b9b9a5050505050505050505050565b600080613f5a8787878661343e565b9150915080600014613f875760008181526008602052604080822060020186905585825290206003018190555b8115613fae5760008281526008602052604080822060030186905585825290206002018290555b50505050505050565b600081815260086020526040902060068054600160501b90046001600160801b031690600a613fe583615d87565b82546101009290920a6001600160801b0381810219909316918316021790915582547fff00000000000000000000000000000000ffffffffffffffffffffffffffff0016600160781b929091169190910260ff1916179215159290921790915550565b6000838152600860205260408120805460ff16156140a9576001810180548491906000906140809084906001600160801b0316615dad565b92506101000a8154816001600160801b0302191690836001600160801b031602179055506140f4565b828160010160108282829054906101000a90046001600160801b03166140cf9190615dad565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b80546001600160801b03600160781b909104811660008181526007602090815260408083206001600160a01b038a1684529091528120549192919091169081900361417d578254600160381b90046001600160401b031683600761415783615dcd565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b6141878582615dad565b6001600160801b0383811660009081526007602090815260408083206001600160a01b038c168452909152902080546001600160801b031916929091169190911790556141d48582615dad565b979650505050505050565b6001600160a01b03858116600090815260036020818152604092839020835160a08101855281548152600182015492810192909252600280820154861694830194909452909101549283166060820152600160a01b90920462ffffff16608083015283810b9085900b131561435357806020015160000361427d576001600160a01b0386166000908152600360205260409020600101859055614457565b602081810151600090815260088252604090819020815161012081018352815460ff811615158252610100808204600290810b968401879052600160201b8304810b95840195909552600160381b82046001600160401b03166060840152600160781b9091046001600160801b039081166080840152600184015480821660a0850152600160801b90041660c08301528383015460e083015260039092015491810191909152919085900b131561434d576001600160a01b03871660009081526003602052604090206001018690555b50614457565b8160020b8460020b121561445757805160000361438a576001600160a01b0386166000908152600360205260409020859055614457565b8051600090815260086020908152604091829020825161012081018452815460ff811615158252610100808204600290810b95840195909552600160201b8204850b958301869052600160381b82046001600160401b03166060840152600160781b9091046001600160801b039081166080840152600184015480821660a0850152600160801b90041660c08301528383015460e083015260039092015491810191909152919084900b1215613fae576001600160a01b0387166000908152600360205260409020869055505b505050505050565b81156144ac5760408601516144a7906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160801b038716614e7a565b6144ee565b60608601516144ee906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160801b038616614e7a565b60006001600160801b0385161561451d5761271061450e8661270f615c2e565b6145189190615c54565b614520565b60005b905060006001600160801b03851615614551576127106145428661270f615c2e565b61454c9190615c54565b614554565b60005b6040805160c0810182528981526001600160801b0389811660208301908152898216838501908152878316606085019081529286166080850190815260a085018a8152955163219f5d1760e01b81528551600482015292516024840152905160448301529151606482015290516084820152915160a48301529192507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063219f5d179060c4016060604051808303816000875af1158015614623573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146479190615de9565b5050508480156146eb57506040898101519051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152600092169063dd62ed3e90604401602060405180830381865afa1580156146c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146e9919061578a565b115b1561472a57604089015161472a906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006000614e7a565b841580156147cc57506060890151604051636eb1769f60e11b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152600092169063dd62ed3e90604401602060405180830381865afa1580156147a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147ca919061578a565b115b1561480b57606089015161480b906001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006000614e7a565b505050505050505050565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166399fbab88886040518263ffffffff1660e01b815260040161486991815260200190565b61018060405180830381865afa158015614887573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148ab9190615e20565b50505050975050505050505050670de0b6b3a764000085826001600160801b03166148d6919061555d565b6148e09190615592565b6040805160a0810182528981526001600160801b0380841660208301908152600083850181815260608501828152608086018c81529651630624e65f60e11b81528651600482015293519094166024840152516044830152915160648201529251608484015292935091908190819081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630c49ccbe9060a40160408051808303816000875af11580156149a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149c79190615efc565b604080516080810182526000808252602082018190529181018290526060810191909152919550935091506149f99050565b6000808a670de0b6b3a764000003614a1c57506001600160801b03905080614a22565b50839050825b604080516080810182528e81523060208083018290526001600160801b03958616838501529390941660608201526001600160a01b038e81166000908152600394859052838120600281015495015493516370a0823160e01b815260048101969096529195509283169391909216919083906370a0823190602401602060405180830381865afa158015614aba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ade919061578a565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015614b28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b4c919061578a565b6040805163fc6f786560e01b81528751600482015260208801516001600160a01b039081166024830152918801516001600160801b03908116604483015260608901511660648201529192507f0000000000000000000000000000000000000000000000000000000000000000169063fc6f78659060840160408051808303816000875af1158015614be2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c069190615efc565b50506040516370a0823160e01b8152306004820152600090889084906001600160a01b038816906370a0823190602401602060405180830381865afa158015614c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c77919061578a565b614c8191906155a6565b614c8b91906158e6565b6040516370a0823160e01b8152306004820152909150600090889084906001600160a01b038816906370a0823190602401602060405180830381865afa158015614cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cfd919061578a565b614d0791906155a6565b614d1191906158e6565b90506001600160801b03821615614d59576001600160a01b038616600090815260016020526040812080546001600160801b0385169290614d539084906158b0565b90915550505b6001600160801b03811615614d9f576001600160a01b038516600090815260016020526040812080546001600160801b0384169290614d999084906158b0565b90915550505b50969f959e50949c50505050505050505050505050565b6001600160a01b03821660009081526003602052604090208054600190910154818503614e0c576000828152600860209081526040808320600201546001600160a01b0388168452600390925290912055614e40565b808503614e405760008181526008602090815260408083206003908101546001600160a01b03891685529252909120600101555b5050600280820180546003938401805460009081526008602052604080822090950183905581549281529384209094015581905590555050565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d11600160005114161716915050806133585760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610d26565b60e0820151158015614f065750610100820151155b156133af5780518314801590614f20575082816020015114155b156133af57604051630eb5001960e41b815260048101849052602401610d26565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915290565b600060208284031215614f9f57600080fd5b813563ffffffff81168114614fb357600080fd5b9392505050565b6001600160a01b0381168114614fcf57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561501057615010614fd2565b604052919050565b60006001600160401b0382111561503157615031614fd2565b50601f01601f191660200190565b6000806000806080858703121561505557600080fd5b843561506081614fba565b9350602085013561507081614fba565b92506040850135915060608501356001600160401b0381111561509257600080fd5b8501601f810187136150a357600080fd5b80356150b66150b182615018565b614fe8565b8181528860208385010111156150cb57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6001600160801b0381168114614fcf57600080fd5b6000806040838503121561511557600080fd5b8235615120816150ed565b9150602083013561513081614fba565b809150509250929050565b60006020828403121561514d57600080fd5b8135614fb3816150ed565b8015158114614fcf57600080fd5b8060020b8114614fcf57600080fd5b6000806000806080858703121561518b57600080fd5b843561519681614fba565b935060208501356151a681615158565b925060408501356151b681615166565b915060608501356151c681615166565b939692955090935050565b6000602082840312156151e357600080fd5b8135614fb381614fba565b6000806000806080858703121561520457600080fd5b843561520f81614fba565b935060208501359250604085013561522681615166565b915060608501356151c681615158565b6000806020838503121561524957600080fd5b82356001600160401b038082111561526057600080fd5b818501915085601f83011261527457600080fd5b81358181111561528357600080fd5b86602082850101111561529557600080fd5b60209290920196919550909350505050565b60008060008060008060c087890312156152c057600080fd5b86356152cb81614fba565b955060208701356152db81615166565b945060408701356152eb816150ed565b935060608701356152fb81615158565b9598949750929560808101359460a0909101359350915050565b60005b83811015615330578181015183820152602001615318565b50506000910152565b60008151808452615351816020860160208601615315565b601f01601f19169290920160200192915050565b8215158152604060208201526000610dfc6040830184615339565b6000806000806080858703121561539657600080fd5b84356153a181614fba565b935060208501356153b181615166565b925060408501356153c181615158565b9396929550929360600135925050565b6000602082840312156153e357600080fd5b5035919050565b61ffff81168114614fcf57600080fd5b60006020828403121561540c57600080fd5b8135614fb3816153ea565b6000806040838503121561542a57600080fd5b823561543581614fba565b946020939093013593505050565b6000806040838503121561545657600080fd5b82359150602083013561513081614fba565b600061012082019050825115158252602083015160020b60208301526040830151615498604084018260020b9052565b5060608301516154b360608401826001600160401b03169052565b5060808301516154ce60808401826001600160801b03169052565b5060a08301516154e960a08401826001600160801b03169052565b5060c083015161550460c08401826001600160801b03169052565b5060e083015160e083015261010080840151818401525092915050565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561557757615577615547565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826155a1576155a161557c565b500490565b818103818111156155b9576155b9615547565b92915050565b80516155ca81615166565b919050565b6000602082840312156155e157600080fd5b8151614fb381615166565b60008260020b806155ff576155ff61557c565b808360020b0791505092915050565b805169ffffffffffffffffffff811681146155ca57600080fd5b600080600080600060a0868803121561564057600080fd5b6156498661560e565b945060208601519350604086015192506060860151915061566c6080870161560e565b90509295509295909350565b60008060006060848603121561568d57600080fd5b833561569881614fba565b925060208401356156a881615158565b929592945050506040919091013590565b600080600080600080600060e0888a0312156156d457600080fd5b87516156df81614fba565b60208901519097506156f081615166565b6040890151909650615701816153ea565b6060890151909550615712816153ea565b6080890151909450615723816153ea565b60a089015190935060ff8116811461573a57600080fd5b60c089015190925061574b81615158565b8091505092959891949750929550565b634e487b7160e01b600052602160045260246000fd5b60006001820161578357615783615547565b5060010190565b60006020828403121561579c57600080fd5b5051919050565b600282810b9082900b03627fffff198112627fffff821317156155b9576155b9615547565b600281810b9083900b01627fffff8113627fffff19821217156155b9576155b9615547565b805460ff811615158352600881901c60020b6020840152602081901c60020b6040840152603881901c6001600160401b031660608401526001600160801b03607882901c8116608085015260018301546001600160801b038282161660a0860152915050608081901c60c084015250600281015460e08301526003015461010090910152565b6001600160a01b038681168252851660208201526001600160801b038481166040830152831660608201526101a08101611f6560808301846157ed565b808201808211156155b9576155b9615547565b60006001600160401b038216806158dc576158dc615547565b6000190192915050565b6001600160801b0382811682821603908082111561590657615906615547565b5092915050565b6001600160a01b03851681526001600160801b03848116602083015283166040820152610180810161594260608301846157ed565b95945050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561597357600080fd5b81516001600160401b0381111561598957600080fd5b8201601f8101841361599a57600080fd5b80516159a86150b182615018565b8181528560208385010111156159bd57600080fd5b615942826020830160208601615315565b600063ffffffff808316818516818304811182151516156159f1576159f1615547565b02949350505050565b600061012080835260148184015250734c696d6974204f7264657220526567697374727960601b610140830152610160806020840152615a3c8184018c615339565b6001600160a01b038b8116604086015263ffffffff8b1660608601528916608085015283810360a08501529050615a738188615339565b9150506001600160601b03851660c083015260ff841660e0830152615aa46101008301846001600160a01b03169052565b9998505050505050505050565b60018060a01b03841681528260208201526060604082015260006159426060830184615339565b600060208284031215615aea57600080fd5b8151614fb381615158565b6020815260008251610100806020850152615b14610120850183615339565b91506020850151601f1980868503016040870152615b328483615339565b935060408701519150615b5060608701836001600160a01b03169052565b606087015163ffffffff81166080880152915060808701516001600160a01b03811660a0880152915060a08701519150808685030160c0870152615b948483615339565b935060c08701519150808685030160e087015250615bb28382615339565b92505060e0850151615bce828601826001600160601b03169052565b5090949350505050565b80516155ca81614fba565b600060208284031215615bf557600080fd5b8151614fb381614fba565b805162ffffff811681146155ca57600080fd5b600060208284031215615c2557600080fd5b614fb382615c00565b60006001600160801b03808316818516818304811182151516156159f1576159f1615547565b60006001600160801b0380841680615c6e57615c6e61557c565b92169190910492915050565b81516001600160a01b0316815261016081016020830151615ca660208401826001600160a01b03169052565b506040830151615cbd604084018262ffffff169052565b506060830151615cd2606084018260020b9052565b506080830151615ce7608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151615d2d828501826001600160a01b03169052565b505061014092830151919092015290565b80516155ca816150ed565b60008060008060808587031215615d5f57600080fd5b845193506020850151615d71816150ed565b6040860151606090960151949790965092505050565b60006001600160801b03808316818103615da357615da3615547565b6001019392505050565b6001600160801b0381811683821601908082111561590657615906615547565b60006001600160401b03808316818103615da357615da3615547565b600080600060608486031215615dfe57600080fd5b8351615e09816150ed565b602085015160409095015190969495509392505050565b6000806000806000806000806000806000806101808d8f031215615e4357600080fd5b8c516001600160601b0381168114615e5a57600080fd5b9b50615e6860208e01615bd8565b9a50615e7660408e01615bd8565b9950615e8460608e01615bd8565b9850615e9260808e01615c00565b9750615ea060a08e016155bf565b9650615eae60c08e016155bf565b9550615ebc60e08e01615d3e565b94506101008d015193506101208d01519250615edb6101408e01615d3e565b9150615eea6101608e01615d3e565b90509295989b509295989b509295989b565b60008060408385031215615f0f57600080fd5b50508051602090910151909290915056fe726567697374657228737472696e672c62797465732c616464726573732c75696e7433322c616464726573732c62797465732c75696e7439362c75696e74382c6164647265737329a2646970667358221220050050e9eeef002bff0490b18116493419b20249972b8e2abbd9ef060d3e423f64736f6c63430008100033000000000000000000000000e75358526ef4441db03ccaeb9a87f180fae80eb90000000000000000000000007b8a01b39d58278b5de7e48c8449c9f4f5170613000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c000000000000000000000000404460c6a5ede2d891e8297795264fde62adbb75000000000000000000000000f671f60bcc964b309d22424886ff202807381b320000000000000000000000000000000000000000000000000000000000000000