0 txs
8.63m calls
constructor
constructor()
functions
devFees
viewfunction devFees() view returns (uint256)
firstEmptyOpenLimitIndex
viewfunction firstEmptyOpenLimitIndex(address _trader, uint16 _pairIndex) view returns (uint8)
firstEmptyTradeIndex
viewfunction firstEmptyTradeIndex(address _trader, uint16 _pairIndex) view returns (uint8)
getOpenLimitOrder
viewfunction getOpenLimitOrder(address _trader, uint16 _pairIndex, uint8 _index) view returns (tuple)
getOpenLimitOrderByIndex
viewfunction getOpenLimitOrderByIndex(uint16 _pairIndex, uint256 _index) view returns (tuple)
getOpenLimitOrders
viewfunction getOpenLimitOrders(uint16 _pairIndex) view returns (tuple[])
getOpenTrade
viewfunction getOpenTrade(address _trader, uint16 _pairIndex, uint8 _index) view returns (tuple)
getOpenTradeInfo
viewfunction getOpenTradeInfo(address _trader, uint16 _pairIndex, uint8 _index) view returns (tuple)
getPairOpeningInterestInfo
viewfunction getPairOpeningInterestInfo(uint16 _pairIndex) view returns (uint256, uint256, uint256)
getPendingOrderIds
viewfunction getPendingOrderIds(address _trader) view returns (uint256[])
getPendingRemoveCollateral
viewfunction getPendingRemoveCollateral(uint256 orderId) view returns (tuple)
hasOpenLimitOrder
viewfunction hasOpenLimitOrder(address _trader, uint16 _pairIndex, uint8 _index) view returns (bool)
maxPendingMarketOrders
viewfunction maxPendingMarketOrders() view returns (uint8)
maxTradesPerPair
viewfunction maxTradesPerPair() view returns (uint8)
openInterest
viewfunction openInterest(uint16 pairIndex, uint256) view returns (uint256)
openLimitOrderIds
viewfunction openLimitOrderIds(address trader, uint16 pairIndex, uint8 orderIndex) view returns (uint256)
openLimitOrdersCount
viewfunction openLimitOrdersCount(address trader, uint16 pairIndex) view returns (uint8)
openTrades
viewfunction openTrades(address trader, uint16 pairIndex, uint8 tradeIndex) view returns (uint256 collateral, uint192 openPrice, uint192 tp, uint192 sl, address trader, uint32 leverage, uint16 pairIndex, uint8 index, bool buy)
openTradesCount
viewfunction openTradesCount(address trader, uint16 pairIndex) view returns (uint32)
openTradesInfo
viewfunction openTradesInfo(address trader, uint16 pairIndex, uint8 tradeIndex) view returns (uint256 tradeId, uint256 oiNotional, uint32 initialLeverage, uint32 tpLastUpdated, uint32 slLastUpdated, uint32 createdAt, bool beingMarketClosed)
orderTriggerBlock
viewfunction orderTriggerBlock(address trader, uint16 pairIndex, uint8 index, uint8 orderType) view returns (uint256)
pairLimitOrders
viewfunction pairLimitOrders(uint16 pairIndex, uint256) view returns (uint256 collateral, uint192 targetPrice, uint192 tp, uint192 sl, address trader, uint32 leverage, uint32 createdAt, uint32 lastUpdated, uint16 pairIndex, uint8 orderType, uint8 index, bool buy)
pairTraders
viewfunction pairTraders(uint16 pairIndex, uint256) view returns (address)
pairTradersArray
viewfunction pairTradersArray(uint16 _pairIndex) view returns (address[])
pairTradersCount
viewfunction pairTradersCount(uint16 _pairIndex) view returns (uint256)
pairTradersId
viewfunction pairTradersId(address trader, uint16 pairIndex) view returns (uint256)
pendingMarketCloseCount
viewfunction pendingMarketCloseCount(address trader, uint16 pairIndex) view returns (uint8)
pendingMarketOpenCount
viewfunction pendingMarketOpenCount(address trader, uint16 pairIndex) view returns (uint8)
pendingOrderIds
viewfunction pendingOrderIds(address trader, uint256) view returns (uint256)
pendingOrderIdsCount
viewfunction pendingOrderIdsCount(address _trader) view returns (uint256)
registry
viewfunction registry() view returns (address)
reqID_pendingAutomationOrder
viewfunction reqID_pendingAutomationOrder(uint256 orderId) view returns (address trader, uint16 pairIndex, uint8 index, uint8 orderType)
reqID_pendingMarketOrder
viewfunction reqID_pendingMarketOrder(uint256 orderId) view returns (uint256 block, uint192 wantedPrice, uint32 slippageP, tuple trade, uint16 percentage)
reqID_pendingRemoveCollateral
viewfunction reqID_pendingRemoveCollateral(uint256) view returns (uint256 removeAmount, address trader, uint16 pairIndex, uint8 index)
totalOpenLimitOrders
viewfunction totalOpenLimitOrders(uint16 pairIndex) view returns (uint256)
totalOpenTradesCount
viewfunction totalOpenTradesCount() view returns (uint32)
usdc
viewfunction usdc() view returns (address)
claimFees
nonpayablefunction claimFees(uint256 _amount)
handleOpeningFees
nonpayablefunction handleOpeningFees(uint16 _pairIndex, uint256 latestPrice, uint256 _leveragedPositionSize, uint32 leverage, bool isBuy) returns (uint256 devFee, uint256 vaultFee)
handleOracleFee
nonpayablefunction handleOracleFee(uint256 _amount)
initialize
nonpayablefunction initialize(address _registry, address _usdc)
refundOracleFee
nonpayablefunction refundOracleFee(uint256 _amount)
setMaxOpenInterest
nonpayablefunction setMaxOpenInterest(uint16 _pairIndex, uint256 _newMaxOpenInterest)
setMaxOpenInterestArray
nonpayablefunction setMaxOpenInterestArray(uint16[] _indices, uint256[] _newMaxOpenInterests)
setMaxPendingMarketOrders
nonpayablefunction setMaxPendingMarketOrders(uint256 _maxPendingMarketOrders)
setMaxTradesPerPair
nonpayablefunction setMaxTradesPerPair(uint256 _maxTradesPerPair)
setTrigger
nonpayablefunction setTrigger(address _trader, uint16 _pairIndex, uint8 _index, uint8 _orderType)
storeOpenLimitOrder
nonpayablefunction storeOpenLimitOrder(tuple o)
storePendingAutomationOrder
nonpayablefunction storePendingAutomationOrder(tuple _automationOrder, uint256 _orderId)
storePendingMarketOrder
nonpayablefunction storePendingMarketOrder(tuple _order, uint256 _id, bool _open)
storePendingRemoveCollateral
nonpayablefunction storePendingRemoveCollateral(tuple request, uint256 orderId)
storeTrade
nonpayablefunction storeTrade(tuple _trade, tuple _tradeInfo)
transferUsdc
nonpayablefunction transferUsdc(address _from, address _to, uint256 _amount)
unregisterOpenLimitOrder
nonpayablefunction unregisterOpenLimitOrder(address _trader, uint16 _pairIndex, uint8 _index)
unregisterPendingAutomationOrder
nonpayablefunction unregisterPendingAutomationOrder(uint256 _orderId)
unregisterPendingMarketOrder
nonpayablefunction unregisterPendingMarketOrder(uint256 _id, bool _open)
unregisterPendingRemoveCollateral
nonpayablefunction unregisterPendingRemoveCollateral(uint256 orderId)
unregisterTrade
nonpayablefunction unregisterTrade(address _trader, uint16 _pairIndex, uint8 _index, uint256 _collateralToClose)
unregisterTrigger
nonpayablefunction unregisterTrigger(address _trader, uint16 _pairIndex, uint8 _index, uint8 _orderType)
updateOpenLimitOrder
nonpayablefunction updateOpenLimitOrder(tuple _o)
updateSl
nonpayablefunction updateSl(address _trader, uint16 _pairIndex, uint8 _index, uint256 _newSl)
updateTp
nonpayablefunction updateTp(address _trader, uint16 _pairIndex, uint8 _index, uint256 _newTp)
updateTrade
nonpayablefunction updateTrade(tuple _t)
events
Initialized
event Initialized(uint64 version)
MaxOpenInterestUpdated
event MaxOpenInterestUpdated(uint16 indexed pairIndex, uint256 value)
MaxPendingMarketOrdersUpdated
event MaxPendingMarketOrdersUpdated(uint256 value)
MaxTradesPerPairUpdated
event MaxTradesPerPairUpdated(uint256 value)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NoOpenLimitOrder
error NoOpenLimitOrder(address _trader, uint16 _pairIndex, uint8 _index)
NotCallbacks
error NotCallbacks(address a)
NotEmptyIndex
error NotEmptyIndex()
NotGov
error NotGov(address a)
NotInitializing
error NotInitializing()
NotManager
error NotManager(address a)
NotTrading
error NotTrading(address a)
NotTradingOrCallbacks
error NotTradingOrCallbacks(address a)
NullAddr
error NullAddr()
RefundOracleFeeFailed
error RefundOracleFeeFailed()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WrongParams
error WrongParams()
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b6040516144c39081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630224e9a7146129325750806303d8428c1461286457806304d8c2291461282a5780630eb2eb3c1461275057806310b5d24d146125595780631aa430cc146124fd57806323d1f4ed146124ca57806328fb80e8146124285780632e32ceb3146124045780633842b7f3146123415780633d3aa417146123035780633e413bee146122da57806343201e5e146122b857806344cebb1c146121c857806346afea581461215f578063485cc95514611f825780634f78648814611ecc57806353e80a1614611e165780635430713114611ce35780635482f20414611cb6578063578daf8714611c6a5780635b77b23014611c355780635c76ac9e14611b8157806378ead4b814611b555780637a52327314611b035780637b10399914611ada5780638049fde714611ab6578063806f988e146119e757806380a075e4146119945780638b94ef68146119725780638cde284214611913578063909e44d41461189957806392a3a16a14611826578063958e5b50146117ce5780639c818b23146116f4578063a1a793551461164c578063a42266e614611625578063a5858b3a14611603578063ac68a7481461153d578063b05e072214610fb3578063b66e6b0514610f39578063bcc9f1d314610ee1578063c55ef9b114610e8c578063cab9458014610e5b578063cb7b7f1c14610e39578063cc03b49214610de7578063d0ae735314610da0578063d32719e414610d6b578063d81294b214610d16578063d8f1f38914610cf4578063dc2123ff14610c73578063e5453d2c146109fb578063e71f8f4b146109a6578063e96006fc146108e5578063e9f5cb93146105d1578063ea842ff41461051a578063ecf56a1f14610482578063efb90b701461044b578063f3608d12146103f3578063f65d9dbe146103d0578063f6809d3c14610368578063f7b3c6fd1461032e5763fd22e644146102d457600080fd5b346103295760006103266102e736612b50565b926102f3929192613e42565b60018060a01b03168552600960205261ffff604086209116855260205260ff604085209116845260205260408320612b9c565b55005b600080fd5b34610329576020366003190112610329576001600160a01b0361034f612a24565b16600052600d6020526020604060002054604051908152f35b346103295760403660031901126103295761038161294d565b7f50c2f04d7172c7554c1a9e990d72a0d17326cfc6c340869ba6a966426b51a326602061ffff602435936103b36141cb565b1692836000526012825280600260406000200155604051908152a2005b3461032957600036600319011261032957602060035460ff60405191831c168152f35b346103295760403660031901126103295761040c612a24565b61041461295e565b9060018060a01b0316600052600660205261ffff60406000209116600052602052602063ffffffff60406000205416604051908152f35b34610329576040366003190112610329576020610477610469612a24565b61047161295e565b90613cc8565b60ff60405191168152f35b346103295760203660031901126103295760043561049e614242565b80158015610510575b6104fe576020816104d87f45036b675cdf5a5cb725fd0951df6ff4f3017c8394672f0c2ae404fedb80b79d936142f7565b65ff00000000006003549160281b169065ff0000000000191617600355604051908152a1005b604051635863f78960e01b8152600490fd5b5060ff81116104a7565b3461032957606036600319011261032957610533612a24565b61053b612a3a565b9060443590610548613d4e565b6001600160a01b0390811630810361056b57509161056992600054166142b9565b005b9190806000541693604051936323b872dd60e01b6020860152602485015216604483015260648201526064815260a08101918183106001600160401b038411176105bb5761056992604052614357565b634e487b7160e01b600052604160045260246000fd5b346103295736600319016101e08112610329576101a013610329576101a4356101c435801515810361032957610605613ef4565b6001600160a01b03806106166131b8565b16600052602091600d835260406000208054600160401b8110156105bb57610648816106619360018994018155612a60565b90919082549060031b91821b91600019901b1916179055565b6000848152600b845260409020600435815560018101906001600160c01b03806106896132df565b16906001600160401b0360c01b91828554161784556044359363ffffffff94858116810361032957815463ffffffff60c01b191660c09190911b63ffffffff60c01b1617905560643560028401556003830160843582811680910361032957838254161790556004830160a4358281168091036103295783825416179055600583019160c4359182168092036103295782541617905560068101918461072d6131b8565b84546001600160a01b0319169116178355610104359081168103610329578261075b6107c992600795612dfe565b6107826107666131f4565b825461ffff60c01b191660c09190911b61ffff60c01b16178255565b6107a761078d613215565b825460ff60d01b191660d09190911b60ff60d01b16178255565b6107af6132cf565b815460ff60d81b191690151560d81b60ff60d81b16179055565b0193610184359461ffff9586811680910361032957815461ffff19161790556107f0613f7b565b90600052600b84526040600020556000146108495761080d6131b8565b16600052600e81526040600020916108236131f4565b16600052526040600020805460ff61083c818316613cb7565b60ff199092169116179055005b806108559392936131b8565b16600052600f835260406000208261086b6131f4565b1660005283526040600020805460ff610885818316613cb7565b169060ff19161790556108966131b8565b16600052600582526040600020906108ac6131f4565b16600052815260406000209060ff6108c2613215565b16600090815291905260409020600201805460ff60801b1916600160801b179055005b34610329576020806003193601126103295761ffff61090261294d565b1660005260108152604060002060405190818382549182815201908192600052846000209060005b8682821061098957868661094082880383612c95565b604051928392818401908285525180915260408401929160005b82811061096957505050500390f35b83516001600160a01b03168552869550938101939281019260010161095a565b83546001600160a01b03168552909301926001928301920161092a565b34610329576040366003190112610329576109bf612a24565b6109c761295e565b9060018060a01b0316600052600e60205261ffff60406000209116600052602052602060ff60406000205416604051908152f35b346103295761018036600319011261032957610a15613ef4565b61ffff80610a216131e2565b166000526020600a815260406000208054600160401b8110156105bb57610a4d91600182018155612aaa565b610c5d576004358155600181016001600160c01b0380610a6b6132df565b16916001600160401b0360c01b92838254161790556002830160443582811680910361032957838254161790556003830191606435918216809203610329578254161790556001600160a01b0390600481019082610ac76131a2565b83546001600160a01b031916911617825563ffffffff9160a435838116810361032957610af49082612dfe565b60c435838116810361032957815463ffffffff60c01b191660c09190911b63ffffffff60c01b1617815560e43592831683036103295780546001600160e01b031660e09390931b6001600160e01b0319169290921790915560050183610b586131e2565b1661ffff198254161781556101243590600382101561032957610b7e610bc69282612e21565b610ba3610b89613215565b825463ff000000191660189190911b63ff00000016178255565b610bab6132cf565b815464ff00000000191690151560201b60ff60201b16179055565b82610bcf6131e2565b16600052600a82526040600020546000198101908111610c475781610bf26131a2565b1660005260078352604060002084610c086131e2565b166000528352604060002060ff610c1d613215565b166000528352604060002055610c316131a2565b16600052600881526040600020916108236131e2565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052600060045260246000fd5b3461032957602036600319011261032957600435610c8f614242565b80158015610cea575b6104fe57602081610cc97fa35182f1631d65ee3d5be93b376025acd50301fa6407e8211223e30fae83bd2f936142f7565b60ff60201b60035491841b169060ff60201b191617600355604051908152a1005b5060ff8111610c98565b3461032957610569610d0536612be4565b92610d11929192613ef4565b614036565b3461032957604036600319011261032957610d2f612a24565b610d3761295e565b9060018060a01b0316600052600f60205261ffff60406000209116600052602052602060ff60406000205416604051908152f35b346103295760203660031901126103295761ffff610d8761294d565b16600052600a6020526020604060002054604051908152f35b3461032957602036600319011261032957600435610dbc613ef4565b60025490818111610dd557610dd091612df1565b600255005b60405163797013df60e01b8152600490fd5b3461032957604036600319011261032957610e00612a24565b610e0861295e565b9060018060a01b0316600052601160205261ffff604060002091166000526020526020604060002054604051908152f35b3461032957610569610e4a36612be4565b92610e56929192613e42565b613937565b346103295760403660031901126103295760243580151581036103295761056990610e84613d4e565b6004356136b7565b3461032957604036600319011261032957610ea5612a24565b610ead61295e565b9060018060a01b0316600052600860205261ffff60406000209116600052602052602060ff60406000205416604051908152f35b3461032957604036600319011261032957610efa612a24565b6001600160a01b03166000908152600d602052604090208054602435919082101561032957602091610f2b91612a60565b90546040519160031b1c8152f35b3461032957602036600319011261032957600435600052600b6020526101a06040600020805490610fab60018201549163ffffffff61ffff6007610f7f60028501612cb6565b930154169360405195865260018060c01b038116602087015260c01c1660408501526060840190612ac6565b610180820152f35b346103295736600319016102008112610329576101201361032957604051610fda81612c27565b60043581526024356001600160c01b03811681036103295760208201526044356001600160c01b03811681036103295760408201526064356001600160c01b03811681036103295760608201526084356001600160a01b038116810361032957608082015260a43563ffffffff811681036103295760a082015261ffff60c4351660c435036103295760c43560c082015260ff60e4351660e435036103295760e43560e08201526101043515156101043503610329576101043561010082015260e036610123190112610329576040516110b381612c43565b61012435815261014435602082015263ffffffff610164351661016435036103295761016435604082015263ffffffff610184351661018435036103295761018435606082015263ffffffff6101a435166101a43503610329576101a435608082015263ffffffff6101c435166101c43503610329576101c43560a08201526101e43515156101e43503610329576101e43560c0820152611152613e42565b608082015160c083015160ff916111769161ffff16906001600160a01b0316613cc8565b1660e083019081526080830180516001600160a01b03908116600090815260046020818152604080842060c08a015161ffff1685528252808420965160ff1684529581529185902087518155918701516001830180546001600160c01b03199081166001600160c01b0393841617909155958801516002840180548816918316919091179055606088015160038401805490971691161790945591519190920180546001600160a01b03191691909216908117825560a0840151909161129f916112469063ffffffff1682612dfe565b60c085810151825461ffff60c01b1916911b61ffff60c01b1617815560e0850151815460ff60d01b191660d09190911b60ff60d01b16178155610100850151815460ff60d81b191690151560d81b60ff60d81b16179055565b6000526006602052604060002061ffff60c0840151166000526020526040600020805463ffffffff6112d28183166136a2565b169063ffffffff191617905560035463ffffffff6112f18183166136a2565b169063ffffffff19161760035560018060a01b036080830151166000526006602052604060002061ffff60c084015116600052602052600163ffffffff6040600020541614611496575b61064861056992600060c084015260018060a01b036080820151166000526005602052604060002061ffff60c083015116600052602052604060002060ff60e083015116600052602052604060002092805184556002602082015194856001820155019063ffffffff60408201511663ffffffff198354161782556113e763ffffffff606083015116839067ffffffff0000000082549160201b169067ffffffff000000001916179055565b6080810151825463ffffffff60401b191660409190911b63ffffffff60401b1617825560a08101519082549060c060ff60801b910151151560801b169163ffffffff60601b9060601b169064ffffffffff60601b19161717905561010061ffff60c083015116910151151560001461148d5760ff60005b1690600052601260205261148760406000209361147b8386612b40565b90549060031b1c613195565b92612b40565b60ff600161145e565b60c08201805161ffff9081166000908152601060208181526040808420546080890180516001600160a01b039081168752601185528387208951891688528552838720929092559651909516845291905290209151825491169390600160401b8110156105bb57610569946115178261064895600161153595018155612a60565b90919060018060a01b038084549260031b9316831b921b1916179055565b92505061133b565b3461032957602036600319011261032957600435611559614242565b6002549081811180156115fb575b6104fe5761157781600493612df1565b6002556000546001546040516391cca3db60e01b8152936001600160a01b03928316926020928692918391165afa9081156115ef57610569936000926115be575b506142b9565b6115e191925060203d6020116115e8575b6115d98183612c95565b810190613176565b90846115b8565b503d6115cf565b6040513d6000823e3d90fd5b508015611567565b346103295761056961161436612be4565b92611620929192613ef4565b614103565b346103295760203660031901126103295761163e613d4e565b610dd0600435600254613195565b34610329576020366003190112610329576000606060405161166d81612c5e565b828152826020820152826040820152015260043560005260136020526080604060002060ff60405161169e81612c5e565b600183549384835201549060018060a01b03906020810191808416835261ffff928560606040850194868860a01c168652019560b01c168552604051968752511660208601525116604084015251166060820152f35b34610329576040366003190112610329576001600160401b0360043581811161032957611725903690600401612bb4565b90916024359081116103295761173f903690600401612bb4565b916117486141cb565b8281036104fe5760005b81811061175b57005b8061177161176c6001938589613692565b613206565b7f50c2f04d7172c7554c1a9e990d72a0d17326cfc6c340869ba6a966426b51a32661ffff6117a0848989613692565b35926117aa6141cb565b1691826000526020906012825280600260406000200155604051908152a201611752565b346103295760203660031901126103295760043560005260136020526080604060002060ff6001825492015460405192835260018060a01b038116602084015261ffff8160a01c16604084015260b01c166060820152f35b346103295760403660031901126103295761183f61294d565b61ffff6024359161184e6134d6565b50169081600052600a6020526040600020548110156104fe5761188461188a9161018093600052600a6020526040600020612aaa565b50612d3c565b611897604051809261297c565bf35b3461032957602036600319011261032957600435600052600c60205260406000205460ff8160b81c169060ff6040519160018060a01b038116835261ffff8160a01c16602084015260b01c16604082015260068210156118fd576080916060820152f35b634e487b7160e01b600052602160045260246000fd5b346103295761032661192436612b50565b91611930949394613ef4565b611938613f7b565b9460018060a01b0316600052600960205261ffff6040600020911660005260205260ff604060002091166000526020526040600020612b9c565b34610329576101203660031901126103295761198c613d4e565b610569613530565b346103295760206119de6119a736612b50565b6001600160a01b03909316600090815260098652604080822061ffff909416825292865282812060ff909216815290855220612b9c565b54604051908152f35b3461032957606036600319011261032957611a00612a24565b611a0861295e565b90611a11612a50565b91611a1a6134d6565b50611a26838284613234565b15611a815761188a916101809361ffff611884931680600052600a60205260406000209260018060a01b0316600052600760205260406000209060005260205260ff6040600020911660005260205260406000205490612aaa565b604051634577dcc760e11b81526001600160a01b03909216600483015261ffff16602482015260ff9091166044820152606490fd5b3461032957600036600319011261032957602060ff60035460281c16604051908152f35b34610329576000366003190112610329576001546040516001600160a01b039091168152602090f35b3461032957604036600319011261032957611b1c61294d565b61ffff602435911660005260126020526040600020600382101561032957602091611b4691612b40565b90549060031b1c604051908152f35b34610329576040366003190112610329576020610477611b73612a24565b611b7b61295e565b90613486565b3461032957602080600319360112610329576001600160a01b03611ba3612a24565b16600052600d8152604060002060405190818382549182815201908192600052846000209060005b86828210611c21578686611be182880383612c95565b604051928392818401908285525180915260408401929160005b828110611c0a57505050500390f35b835185528695509381019392810192600101611bfb565b835485529093019260019283019201611bcb565b346103295760203660031901126103295761ffff611c5161294d565b1660005260106020526020604060002054604051908152f35b346103295760203660031901126103295761ffff611c8661294d565b16600052601260205260606040600020805490600260018201549101549060405192835260208301526040820152f35b3461032957602036600319011261032957611ccf613e42565b6004356000908152600c6020526040812055005b346103295760603660031901126103295760e0611cfe612a24565b611d0661295e565b611d0e612a50565b9060405192611d1c84612c43565b60008452600060c060209582878201528260408201528260608201528260808201528260a0820152015260018060a01b03166000526005835261ffff60406000209116600052825260ff60406000209116600052815260406000209060405191611d8583612c43565b8054928381526002600183015492848301938452015492839163ffffffff80948180946040850190828816825260608601938389831c16855260ff60c06080890198868c60401c168a528660a082019c60601c168c52019b60801c1615158b526040519b8c5251908b0152511660408901525116606087015251166080850152511660a083015251151560c0820152f35b3461032957606036600319011261032957611e2f612a24565b611e3761295e565b611e3f612a50565b9160018060a01b0316600052600560205261ffff6040600020911660005260205260ff6040600020911660005260205260e0604060002060ff815491600260018201549101549063ffffffff9060405194855260208501528082166040850152808260201c166060850152808260401c1660808501528160601c1660a084015260801c16151560c0820152f35b3461032957606036600319011261032957611ee5612a24565b611eed61295e565b611ef5612a50565b916000610100604051611f0781612c27565b8281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152015260018060a01b0316600052600460205261ffff6040600020911660005260205260ff60406000209116600052602052610120611f756040600020612cb6565b6118976040518092612ac6565b34610329576040366003190112610329576004356001600160a01b038181169182900361032957611fb1612a3a565b917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009283549260ff8460401c1615936001600160401b03811680159081612157575b600114908161214d575b159081612144575b506121325767ffffffffffffffff198116600117865584612113575b5082158015612109575b6120f75760018060a01b03199116816000541617600055600154161760015565320a000000006003547fa35182f1631d65ee3d5be93b376025acd50301fa6407e8211223e30fae83bd2f6020604051600a8152a165ffff000000001916176003557f45036b675cdf5a5cb725fd0951df6ff4f3017c8394672f0c2ae404fedb80b79d602060405160328152a16120bd57005b805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6040516379e8589360e11b8152600490fd5b508082161561202b565b68ffffffffffffffffff19166801000000000000000117855585612021565b60405163f92ee8a960e01b8152600490fd5b90501587612005565b303b159150611ffd565b869150611ff3565b3461032957606036600319011261032957612178612a24565b61218061295e565b612188612a50565b9160018060a01b0316600052600760205261ffff6040600020911660005260205260ff604060002091166000526020526020604060002054604051908152f35b34610329576040366003190112610329576121e161294d565b6024359061ffff809116600052600a60205260406000209182548110156103295761221160ff9161018094612aaa565b5080549260018060c01b0380600184015416928160028201541691600382015416600482015492600563ffffffff9301549560405198895260208901526040880152606087015260018060a01b0382166080870152808260a01c1660a08701528160c01c1660c086015260e01c60e0850152811661010084015261229e6101208401838360101c1661296f565b818160181c1661014084015260201c161515610160820152f35b3461032957610180366003190112610329576122d2613ef4565b6105696132f5565b34610329576000366003190112610329576000546040516001600160a01b039091168152602090f35b34610329576060366003190112610329576020612337612321612a24565b61232961295e565b612331612a50565b91613234565b6040519015158152f35b346103295761234f36612a8e565b612357613ef4565b6000908152600c60205260409020906060906001600160a01b0361237a826131ce565b84546001600160a01b03191691161783556123b661239a60208301613206565b845461ffff60a01b191660a09190911b61ffff60a01b16178455565b6123df6123c560408301613226565b845460ff60b01b191660b09190911b60ff60b01b16178455565b0135600681101561032957815460ff60b81b191660b89190911b60ff60b81b16179055005b3461032957600036600319011261032957602063ffffffff60035416604051908152f35b346103295761056961243936612a8e565b612441613ef4565b60005260136020526124b060606001604060002084358155019260018060a01b0361246e602083016131ce565b85546001600160a01b03191691161784556124aa61248e60408301613206565b855461ffff60a01b191660a09190911b61ffff60a01b16178555565b01613226565b815460ff60b01b191660b09190911b60ff60b01b16179055565b34610329576020366003190112610329576124e3613e42565b600435600090815260136020526040812081815560010155005b346103295760403660031901126103295761251661294d565b61ffff60243591166000526010602052604060002080548210156103295760209161254091612a60565b905460405160039290921b1c6001600160a01b03168152f35b346103295760a03660031901126103295761257261294d565b602435604435916064359163ffffffff8316809303610329576084359182151583036103295761ffff906125a4613e42565b169182600052602094601286526126016125fb64e8d4a51000670de0b6b3a76400006125f382826125da8a604060002054613163565b0404978960005260128c52600160406000200154613163565b040494613ecb565b93613ecb565b9260008482039412818512811691851390151617610c4757600154604051630d2020dd60e01b81526870616972496e666f7360b81b60048201526001600160a01b039390929188908490602490829088165afa9283156115ef57600093612731575b501561270a579160409491612679608494613ecb565b945b865197889687956307f46e3360e41b87526004870152602486015260448501526064840152165afa80156115ef576000916000916126d1575b506040926126c483600254613195565b6002558351928352820152f35b9150506040813d604011612702575b816126ed60409383612c95565b810103126103295780519082015160406126b4565b3d91506126e0565b61271690949194613ecb565b91600160ff1b8314610c47576040946084936000039461267b565b612749919350883d8a116115e8576115d98183612c95565b9188612663565b346103295760603660031901126103295761012061276c612a24565b60ff61277661295e565b61277e612a50565b60018060a01b038094166000526004602052604060002061ffff809316600052602052826040600020911660005260205260406000209081549360018060c01b0392836001820154169360048160028401541691600384015416920154946040519788526020880152604087015260608601528216608085015263ffffffff8260a01c1660a08501528160c01c1660c0840152818160d01c1660e084015260d81c161515610100820152f35b3461032957606036600319011261032957610569612846612a24565b61284e61295e565b612856612a50565b9161285f613d4e565b612e52565b34610329576020806003193601126103295761ffff61288161294d565b16600052600a815260406000209081546001600160401b0381116105bb57604051906128b2838260051b0183612c95565b8082528282018094600052836000206000915b8383106129155760408051878152865181890181905289928201908960005b8281106128f15784840385f35b90919282610180826129066001948a5161297c565b019601910194929190946128e4565b60068660019261292485612d3c565b8152019201920191906128c5565b34610329576000366003190112610329576020906002548152f35b6004359061ffff8216820361032957565b6024359061ffff8216820361032957565b9060038210156118fd5752565b80518252602081015160018060c01b038091166020840152806040830151166040840152606082015116606083015260018060a01b03608082015116608083015260a081015163ffffffff80911660a08401528060c08301511660c084015260e08201511660e083015261010061ffff818301511690830152612a08610120808301519084019061296f565b61014060ff818301511690830152610160809101511515910152565b600435906001600160a01b038216820361032957565b602435906001600160a01b038216820361032957565b6044359060ff8216820361032957565b8054821015612a785760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b6003190160a08112610329576080136103295760049060843590565b8054821015612a78576000526006602060002091020190600090565b80518252602081015160018060c01b038091166020840152806040830151166040840152606082015116606083015260018060a01b03608082015116608083015263ffffffff60a08201511660a083015261ffff60c08201511660c083015260ff60e08201511660e0830152610100809101511515910152565b6003821015612a78570190600090565b6080906003190112610329576004356001600160a01b0381168103610329579060243561ffff81168103610329579060443560ff81168103610329579060643560068110156103295790565b9060068110156118fd57600052602052604060002090565b9181601f84011215610329578235916001600160401b038311610329576020808501948460051b01011161032957565b6080906003190112610329576004356001600160a01b0381168103610329579060243561ffff81168103610329579060443560ff81168103610329579060643590565b61012081019081106001600160401b038211176105bb57604052565b60e081019081106001600160401b038211176105bb57604052565b608081019081106001600160401b038211176105bb57604052565b61018081019081106001600160401b038211176105bb57604052565b90601f801991011681019081106001600160401b038211176105bb57604052565b90604051612cc381612c27565b61010060ff600483958054855260018060c01b038060018301541660208701528060028301541660408701526003820154166060860152015460018060a01b038116608085015263ffffffff8160a01c1660a085015261ffff8160c01c1660c0850152818160d01c1660e085015260d81c161515910152565b90604051612d4981612c79565b600581938054835260018060c01b038060018301541660208501528060028301541660408501526003820154166060840152600481015460018060a01b038116608085015263ffffffff808260a01c1660a08601528160c01c1660c085015260e01c60e0840152015461ffff811661010083015260ff8160101c1660038110156118fd576101609160ff91610120850152818160181c1661014085015260201c161515910152565b91908203918211610c4757565b805463ffffffff60a01b191660a09290921b63ffffffff60a01b16919091179055565b9060038110156118fd5762ff000082549160101b169062ff00001916179055565b60ff168015610c47576000190190565b90612e5e838284613234565b1561315e5760018060a01b0380921690600091808352602090600782526040948585209361ffff80911694858752845286862060ff80991690818852855287872054868852600a928387528989209485546000199687820191821161314a5790612ec791612aaa565b50898b52858952612eda848d8d20612aaa565b919091613136578d818303613001575b505050888a528488526004612f01848d8d20612aaa565b5001541689526007875289892090888a528488526005612f23848d8d20612aaa565b50015416895286528888208789528387528a6005612f43848d8d20612aaa565b50015460181c1689528652888820558387526007855287872086885285528787209087528452858781205584865283528585209081548015612fed570190612f8b8282612aaa565b612fd95760058188809355826001820155826002820155826003820155826004820155015555835260088152838320918352522090815490612fce818316612e42565b169060ff1916179055565b634e487b7160e01b87526004879052602487fd5b634e487b7160e01b87526031600452602487fd5b60058061312e94845481556001810160018060c01b039081600188015416906001600160401b0360c01b91828254161790556002830182600289015416828254161790556003830191600388015416908254161790556130d060048201600487018981541660018060a01b03198354161782556130b363ffffffff61308c81845460a01c1685612dfe565b8254845463ffffffff60c01b191660c091821c92909216901b63ffffffff60c01b16178355565b5481546001600160e01b03166001600160e01b0319909116179055565b0192018581541661ffff198454161783556130f182825460101c1684612e21565b8054835463ff0000001916601891821c841690911b63ff00000016178355548b1c1660ff60201b825491151560201b169060ff60201b1916179055565b38808d612eea565b634e487b7160e01b8c5260048c905260248cfd5b634e487b7160e01b8c52601160045260248cfd5b505050565b81810292918115918404141715610c4757565b9081602091031261032957516001600160a01b03811681036103295790565b91908201809211610c4757565b6084356001600160a01b03811681036103295790565b60e4356001600160a01b03811681036103295790565b356001600160a01b03811681036103295790565b6101043561ffff811681036103295790565b6101243561ffff811681036103295790565b3561ffff811681036103295790565b6101443560ff811681036103295790565b3560ff811681036103295790565b91909161ffff8093166000818152600a602052604081208054156132c65761328a90604060018060a01b0380961693848152600760205281812086825260205260ff828220981697888252602052205490612aaa565b50926004840154161493846132b6575b5050826132a657505090565b6005015460181c60ff1614919050565b600583015416149250388061329a565b50935050505090565b6101643580151581036103295790565b6024356001600160c01b03811681036103295790565b6084356001600160a01b03811680820361032957610104359061ffff821692838303610329576101443560ff8116938482036103295761333492613234565b1561315e5761337391600093808552600a6020526040852092855260076020526040852090855260205260408420908452602052604083205490612aaa565b509060043582556101643580151581036134825760058301805464ff00000000191691151560201b60ff60201b1691909117815560a4359263ffffffff8416840361347e576133c6600482019485612dfe565b6001600160c01b03604435818116929083900361347657600281016001600160401b0360c01b938482541617905560643582811680910361347a576003820190848254161790556024359182168092036134765760010191825416179055610124359160038310156134735750613471929161344191612e21565b61345161344c613f7b565b614006565b81546001600160e01b031660e09190911b6001600160e01b031916179055565b565b80fd5b8480fd5b8580fd5b8280fd5b5080fd5b9160009160ff9360ff60035460201c16935b84868216106134b35760405163fc33f1bd60e01b8152600490fd5b6134be818484613234565b156134cd576001018516613498565b93505050915090565b604051906134e382612c79565b816101606000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152826101408201520152565b6084356001600160a01b0381169081810361032957600082815260206004815260408083209360c4359061ffff82169586830361347a5786865284528285209460e4359360ff85169687860361347e578783528652808220958299835260058152818320839984528152818320908398845252812095600486019763ffffffff998a8a5460a01c161561368557600435885560a4358b81169a8b820361347a57906135da91612dfe565b6001600160c01b036044358181169081900361347a578160028b015416810361366a575b5060643598818a16809a0361347a5760030154168803613641575b5050505050505050600201918254908116821161363557505050565b63ffffffff1916179055565b61347e5761348257613473575091600294939161365d93614103565b9038808080808080613619565b935091505082839161367f8594898989614036565b386135fe565b5050505050505050505050565b9190811015612a785760051b0190565b63ffffffff809116908114610c475760010190565b80600052600b90600b60205260406000206040519060a082018281106001600160401b038211176105bb5760409081528154835260018201546001600160c01b038116602085015260c01c63ffffffff169083015261ffff600761371d60028401612cb6565b928360608601520154166080830152608060018060a01b0391015116600052600d60205260406000209060005b825481101561391c578361375e8285612a60565b90549060031b1c146137725760010161374a565b92939460001461386f576060018051608001516001600160a01b03166000908152600e60209081526040808320935160c0015161ffff16835292905220805460ff6137be818316612e42565b169060ff19161790555b805460001992838201918211610c47576106486137e86137f69385612a60565b90549060031b1c9184612a60565b805480156138595782019161380b8383612a60565b909182549160031b1b191690555560005260205260006007604082208281558260018201556138556002820160046000918281558260018201558260028201558260038201550155565b0155565b634e487b7160e01b600052603160045260246000fd5b606081018051608001516001600160a01b03166000908152600f60209081526040808320935160c0015161ffff16835292905220805460ff9190826138b5818316612e42565b169060ff191617905560018060a01b03608060608401510151166000526005602052604060002061ffff60c0606085015101511660005260205260e060606040600020930151015116600052602052600260406000200160ff60801b1981541690556137c8565b505050505050565b63ffffffff168015610c47576000190190565b91909260018060a01b0383166000526004602052604060002061ffff8516600052602052604060002060ff8316600052602052604060002060018060a01b0384166000526005602052604060002061ffff8616600052602052604060002060ff841660005260205260406000209160048201549163ffffffff8360a01c1615613cae576139c8826001860154613163565b918154938415613c985760d81c60ff1615613c8e57613a2060005b61ffff8a166000526012602052610648604060002060ff613a18613a0982861684612b40565b90548b8b049160031b1c612df1565b931690612b40565b8154808203613c575750505050505060018060a01b0382166000526006602052604060002061ffff8416600052602052600163ffffffff6040600020541614613b5f575b60018060a01b0382166000526004602052604060002061ffff8416600052602052604060002060ff8216600052602052613aba604060002060046000918281558260018201558260028201558260038201550155565b60018060a01b0382166000526005602052604060002061ffff841660005260205260ff604060002091166000526020526000600260408220828155826001820155015560018060a01b0316600052600660205261ffff60406000209116600052602052604060002080549063ffffffff613b35818416613924565b1663ffffffff198093161790556003549063ffffffff613b56818416613924565b16911617600355565b60018060a01b0382166000526011602052604060002061ffff8416600052602052604060002054601060205260406000209081549060001991828101908111610c4757613baf613bcb9185612a60565b905460039190911b1c6001600160a01b03166115178386612a60565b613bd58184612a60565b60018060a01b0391549060031b1c166000526011602052604060002061ffff871660005260205260406000205560018060a01b0384166000526011602052604060002061ffff86166000526020526000604081205581548015613859570190613c3e8282612a60565b81549060018060a01b039060031b1b1916905555613a64565b60029850613c6e929394959750613c7b9650612df1565b9055046001830154612df1565b600182015501805460ff60801b19169055565b613a2060016139e3565b634e487b7160e01b600052601260045260246000fd5b50505050505050565b60ff1660ff8114610c475760010190565b909160009160ff936003549060ff60209260201c16945b86811686811015613d3c576001600160a01b03851660009081526004808652604080832061ffff871684528752808320938352928652919020015460a01c63ffffffff1615613d32576001018616613cdf565b9450505050915090565b60405163fc33f1bd60e01b8152600490fd5b600154604051630d2020dd60e01b8082526674726164696e6760c81b6004830152916001600160a01b03908116916020908181602481875afa80156115ef578391600091613e25575b50163314159283613dc6575b5050509050613dae57565b604051633f7084a560e01b8152336004820152602490fd5b919381935060246040518094819382526863616c6c6261636b7360b81b60048301525afa9182156115ef57600092613e08575b50501633141580388080613da3565b613e1e9250803d106115e8576115d98183612c95565b3880613df9565b613e3c9150833d85116115e8576115d98183612c95565b38613d97565b600154604051630d2020dd60e01b81526863616c6c6261636b7360b81b60048201526001600160a01b03916020908290602490829086165afa9081156115ef57600091613eac575b50163303613e9457565b60405163bde4d0f160e01b8152336004820152602490fd5b613ec5915060203d6020116115e8576115d98183612c95565b38613e8a565b6001600160ff1b038111613edc5790565b6024906040519063123baf0360e11b82526004820152fd5b600154604051630d2020dd60e01b81526674726164696e6760c81b60048201526001600160a01b03916020908290602490829086165afa9081156115ef57600091613f5c575b50163303613f4457565b6040516346daa3ad60e01b8152336004820152602490fd5b613f75915060203d6020116115e8576115d98183612c95565b38613f3a565b61a4b146148015613ffa575b8015613fee575b613f96574390565b60405163a3b1b31d60e01b815260208160048160645afa9081156115ef57600091613fbf575090565b90506020813d602011613fe6575b81613fda60209383612c95565b81010312610329575190565b3d9150613fcd565b5062066eee4614613f8e565b5062066eed4614613f87565b63ffffffff90818111614017571690565b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b6001600160c01b039291908385116104fe5760018060a01b03169160009083825260206004815260409361ffff858520911690818552825260ff858520931692838552825284842095845260058252848420908452815283832091835252209163ffffffff600483015460a01c16156140fd5760026140b761347195614324565b920191166001600160401b0360c01b82541617905560026140d961344c613f7b565b91019067ffffffff0000000082549160201b169067ffffffff000000001916179055565b50505050565b6001600160c01b039291908385116104fe5760018060a01b03169160009083825260206004815260409361ffff858520911690818552825260ff858520931692838552825284842095845260058252848420908452815283832091835252209163ffffffff600483015460a01c16156140fd57600361418461347195614324565b920191166001600160401b0360c01b82541617905560026141a661344c613f7b565b9101805463ffffffff60401b191660409290921b63ffffffff60401b16919091179055565b60015460405163481c6a7560e01b81526001600160a01b03916020908290600490829086165afa9081156115ef57600091614223575b5016330361420b57565b604051632a19e83360e01b8152336004820152602490fd5b61423c915060203d6020116115e8576115d98183612c95565b38614201565b6001546040516312d43a5160e01b81526001600160a01b03916020908290600490829086165afa9081156115ef5760009161429a575b5016330361428257565b60405163093650d560e01b8152336004820152602490fd5b6142b3915060203d6020116115e8576115d98183612c95565b38614278565b60405163a9059cbb60e01b60208201526001600160a01b039092166024830152604480830193909352918152613471916142f282612c5e565b614357565b60ff81116143055760ff1690565b604490604051906306dfcc6560e41b8252600860048301526024820152fd5b6001600160c01b0390818111614338571690565b604490604051906306dfcc6560e41b825260c060048301526024820152fd5b60018060a01b031690600080826020829451910182865af13d1561441e573d906001600160401b03821161440a57906143b291604051916143a26020601f19601f8401160184612c95565b82523d84602084013e5b8461442a565b9081519182151592836143e2575b5050506143ca5750565b60249060405190635274afe760e01b82526004820152fd5b81929350906020918101031261348257602001519081159182150361347357503880806143c0565b634e487b7160e01b83526041600452602483fd5b6143b2906060906143ac565b90614451575080511561443f57805190602001fd5b604051630a12f52160e11b8152600490fd5b81511580614484575b614462575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561445a56fea2646970667358221220577beac067d3fc9bbe6af236d2828220ec56915b80ca5c19e6073e55b70f6f3f64736f6c63430008180033