UNPKG

@devasher/kuru-sdk

Version:

Ethers v6 SDK to interact with Kuru (forked from @kuru-labs/kuru-sdk)

1,413 lines 164 kB
{ "_format": "hh-sol-artifact-1", "contractName": "OrderBook", "sourceName": "contracts/OrderBook.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidity", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidSpread", "type": "error" }, { "inputs": [], "name": "LengthMismatch", "type": "error" }, { "inputs": [], "name": "MarketFeeError", "type": "error" }, { "inputs": [], "name": "MarketStateError", "type": "error" }, { "inputs": [], "name": "NativeAssetInsufficient", "type": "error" }, { "inputs": [], "name": "NativeAssetNotRequired", "type": "error" }, { "inputs": [], "name": "NativeAssetTransferFail", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OnlyOwnerAllowedError", "type": "error" }, { "inputs": [], "name": "OnlyVaultAllowed", "type": "error" }, { "inputs": [], "name": "OrderAlreadyFilledOrCancelled", "type": "error" }, { "inputs": [], "name": "PostOnlyError", "type": "error" }, { "inputs": [], "name": "PriceError", "type": "error" }, { "inputs": [], "name": "ProvisionError", "type": "error" }, { "inputs": [], "name": "SizeError", "type": "error" }, { "inputs": [], "name": "SlippageExceeded", "type": "error" }, { "inputs": [], "name": "TickSizeError", "type": "error" }, { "inputs": [], "name": "TooMuchSizeFilled", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnauthorizedCallContext", "type": "error" }, { "inputs": [], "name": "UpgradeFailed", "type": "error" }, { "inputs": [], "name": "WrongOrderTypeCancel", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40", "name": "orderId", "type": "uint40" }, { "indexed": false, "internalType": "uint40", "name": "flippedId", "type": "uint40" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint96", "name": "size", "type": "uint96" }, { "indexed": false, "internalType": "uint32", "name": "price", "type": "uint32" }, { "indexed": false, "internalType": "uint32", "name": "flippedPrice", "type": "uint32" }, { "indexed": false, "internalType": "bool", "name": "isBuy", "type": "bool" } ], "name": "FlipOrderCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40", "name": "orderId", "type": "uint40" }, { "indexed": false, "internalType": "uint96", "name": "size", "type": "uint96" } ], "name": "FlipOrderUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40[]", "name": "orderIds", "type": "uint40[]" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" } ], "name": "FlipOrdersCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40", "name": "orderId", "type": "uint40" }, { "indexed": false, "internalType": "uint40", "name": "flippedId", "type": "uint40" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint96", "name": "size", "type": "uint96" }, { "indexed": false, "internalType": "uint32", "name": "price", "type": "uint32" }, { "indexed": false, "internalType": "uint32", "name": "flippedPrice", "type": "uint32" }, { "indexed": false, "internalType": "bool", "name": "isBuy", "type": "bool" } ], "name": "FlippedOrderCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40", "name": "orderId", "type": "uint40" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint96", "name": "size", "type": "uint96" }, { "indexed": false, "internalType": "uint32", "name": "price", "type": "uint32" }, { "indexed": false, "internalType": "bool", "name": "isBuy", "type": "bool" } ], "name": "OrderCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40[]", "name": "orderId", "type": "uint40[]" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" } ], "name": "OrdersCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint40", "name": "orderId", "type": "uint40" }, { "indexed": false, "internalType": "address", "name": "makerAddress", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isBuy", "type": "bool" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint96", "name": "updatedSize", "type": "uint96" }, { "indexed": false, "internalType": "address", "name": "takerAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "txOrigin", "type": "address" }, { "indexed": false, "internalType": "uint96", "name": "filledSize", "type": "uint96" } ], "name": "Trade", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [ { "internalType": "uint32", "name": "_price", "type": "uint32" }, { "internalType": "uint96", "name": "size", "type": "uint96" }, { "internalType": "bool", "name": "_postOnly", "type": "bool" } ], "name": "addBuyOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_price", "type": "uint32" }, { "internalType": "uint32", "name": "_flippedPrice", "type": "uint32" }, { "internalType": "uint96", "name": "_size", "type": "uint96" }, { "internalType": "bool", "name": "_provisionOrRevert", "type": "bool" } ], "name": "addFlipBuyOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_price", "type": "uint32" }, { "internalType": "uint32", "name": "_flippedPrice", "type": "uint32" }, { "internalType": "uint96", "name": "_size", "type": "uint96" }, { "internalType": "bool", "name": "_provisionOrRevert", "type": "bool" } ], "name": "addFlipSellOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_bidPrice", "type": "uint32" }, { "internalType": "uint32", "name": "_askPrice", "type": "uint32" }, { "internalType": "uint96", "name": "_bidSize", "type": "uint96" }, { "internalType": "uint96", "name": "_askSize", "type": "uint96" } ], "name": "addPairedLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "_price", "type": "uint32" }, { "internalType": "uint96", "name": "size", "type": "uint96" }, { "internalType": "bool", "name": "_postOnly", "type": "bool" } ], "name": "addSellOrder", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "bidPrices", "type": "uint32[]" }, { "internalType": "uint32[]", "name": "askPrices", "type": "uint32[]" }, { "internalType": "uint96[]", "name": "bidSizes", "type": "uint96[]" }, { "internalType": "uint96[]", "name": "askSizes", "type": "uint96[]" } ], "name": "batchAddPairedLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint40[]", "name": "_orderIds", "type": "uint40[]" } ], "name": "batchCancelFlipOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint40[]", "name": "_orderIds", "type": "uint40[]" } ], "name": "batchCancelOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "prices", "type": "uint32[]" }, { "internalType": "uint32[]", "name": "flipPrices", "type": "uint32[]" }, { "internalType": "uint96[]", "name": "sizes", "type": "uint96[]" }, { "internalType": "bool[]", "name": "isBuy", "type": "bool[]" }, { "internalType": "bool", "name": "_provisionOrRevert", "type": "bool" } ], "name": "batchProvisionLiquidity", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "buyPrices", "type": "uint32[]" }, { "internalType": "uint96[]", "name": "buySizes", "type": "uint96[]" }, { "internalType": "uint32[]", "name": "sellPrices", "type": "uint32[]" }, { "internalType": "uint96[]", "name": "sellSizes", "type": "uint96[]" }, { "internalType": "uint40[]", "name": "orderIdsToCancel", "type": "uint40[]" }, { "internalType": "bool", "name": "postOnly", "type": "bool" } ], "name": "batchUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "bestBidAsk", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "collectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "getL2Book", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMarketParams", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint32", "name": "", "type": "uint32" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVaultParams", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint96", "name": "", "type": "uint96" }, { "internalType": "uint96", "name": "", "type": "uint96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "internalType": "enum IOrderBook.OrderBookType", "name": "_type", "type": "uint8" }, { "internalType": "address", "name": "_baseAssetAddress", "type": "address" }, { "internalType": "uint256", "name": "_baseAssetDecimals", "type": "uint256" }, { "internalType": "address", "name": "_quoteAssetAddress", "type": "address" }, { "internalType": "uint256", "name": "_quoteAssetDecimals", "type": "uint256" }, { "internalType": "address", "name": "_marginAccountAddress", "type": "address" }, { "internalType": "uint96", "name": "_sizePrecision", "type": "uint96" }, { "internalType": "uint32", "name": "_pricePrecision", "type": "uint32" }, { "internalType": "uint32", "name": "_tickSize", "type": "uint32" }, { "internalType": "uint96", "name": "_minSize", "type": "uint96" }, { "internalType": "uint96", "name": "_maxSize", "type": "uint96" }, { "internalType": "uint256", "name": "_takerFeeBps", "type": "uint256" }, { "internalType": "uint256", "name": "_makerFeeBps", "type": "uint256" }, { "internalType": "address", "name": "_kuruAmmVault", "type": "address" }, { "internalType": "uint96", "name": "_kuruAmmSpread", "type": "uint96" }, { "internalType": "address", "name": "__trustedForwarder", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint96", "name": "_quoteSize", "type": "uint96" }, { "internalType": "uint256", "name": "_minAmountOut", "type": "uint256" }, { "internalType": "bool", "name": "_isMargin", "type": "bool" }, { "internalType": "bool", "name": "_isFillOrKill", "type": "bool" } ], "name": "placeAndExecuteMarketBuy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint96", "name": "_size", "type": "uint96" }, { "internalType": "uint256", "name": "_minAmountOut", "type": "uint256" }, { "internalType": "bool", "name": "_isMargin", "type": "bool" }, { "internalType": "bool", "name": "_isFillOrKill", "type": "bool" } ], "name": "placeAndExecuteMarketSell", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_prices", "type": "uint32[]" }, { "internalType": "uint96[]", "name": "_sizes", "type": "uint96[]" }, { "internalType": "bool", "name": "_postOnly", "type": "bool" } ], "name": "placeMultipleBuyOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32[]", "name": "_prices", "type": "uint32[]" }, { "internalType": "uint96[]", "name": "_sizes", "type": "uint96[]" }, { "internalType": "bool", "name": "_postOnly", "type": "bool" } ], "name": "placeMultipleSellOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "s_buyPricePoints", "outputs": [ { "internalType": "uint40", "name": "head", "type": "uint40" }, { "internalType": "uint40", "name": "tail", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "s_buyTree", "outputs": [ { "internalType": "bytes32", "name": "level0", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "s_orderIdCounter", "outputs": [ { "internalType": "uint40", "name": "", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint40", "name": "", "type": "uint40" } ], "name": "s_orders", "outputs": [ { "internalType": "address", "name": "ownerAddress", "type": "address" }, { "internalType": "uint96", "name": "size", "type": "uint96" }, { "internalType": "uint40", "name": "prev", "type": "uint40" }, { "internalType": "uint40", "name": "next", "type": "uint40" }, { "internalType": "uint40", "name": "flippedId", "type": "uint40" }, { "internalType": "uint32", "name": "price", "type": "uint32" }, { "internalType": "uint32", "name": "flippedPrice", "type": "uint32" }, { "internalType": "bool", "name": "isBuy", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "s_sellPricePoints", "outputs": [ { "internalType": "uint40", "name": "head", "type": "uint40" }, { "internalType": "uint40", "name": "tail", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "s_sellTree", "outputs": [ { "internalType": "bytes32", "name": "level0", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_state", "type": "bool" } ], "name": "toggleMarkets", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint96", "name": "_vaultAskOrderSize", "type": "uint96" }, { "internalType": "uint96", "name": "_vaultBidOrderSize", "type": "uint96" }, { "internalType": "uint256", "name": "_askPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_bidPrice", "type": "uint256" } ], "name": "updateVaultOrdSz", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "vaultAskOrderSize", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "vaultBestAsk", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a080604052346099573060805263409feecd195460018116608c5760011c6002600160401b0319016048575b61776d908161009e82396080518181816111a9015261126b0152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a1602c565b63f92ee8a95f526004601cfd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816302b90c6514611e0e575080630e2e2ffe14611dbb5780631c0d9c2214611d1257806323afbff314611c905780632569296214611c475780632819fc0d146119505780632bf1360e1461192c5780632e2822b71461160157806340e79b1b146115c157806346fdfbb1146113c5578063474b848c146113a85780634792b6ea146113835780634d781103146113305780634f1ef2861461121757806351130ac6146111f157806352d1902d14611196578063532c46db146111705780635339c59f14610f5757806354d1f13d14610f13578063572b6c0514610ede5780636d1016b014610eb9578063715018a614610e7f5780637c51d6cf14610e5157806388bb4f6014610db65780638da5cb5b14610d8a57806390c9427c14610cea5780639ea5925814610c7f578063a09e904014610c3f578063a9914abd14610bc5578063b4de8b7014610b94578063ba42d8bd14610968578063badc92d11461094b578063c827fdcc146105da578063c87965721461052b578063cca97a3c14610397578063e55bb4e3146102eb578063e6d29b5114610294578063f04e283e14610247578063f2fde38b1461020a5763fee81cf4146101d4575f80fd5b34610206576020366003190112610206576101ed611f2e565b63389a75e1600c525f52602080600c2054604051908152f35b5f80fd5b60203660031901126102065761021e611f2e565b610226614b47565b8060601b1561023a5761023890614c21565b005b637448fbae5f526004601cfd5b60203660031901126102065761025b611f2e565b610263614b47565b63389a75e1600c52805f526020600c209081544211610287575f6102389255614c21565b636f5e88185f526004601cfd5b34610206576020366003190112610206576004355f5260086020526102e760405f2054604051918164ffffffffff80859460281c1691168390929164ffffffffff60209181604085019616845216910152565b0390f35b34610206576080366003190112610206576004356001600160601b03811680910361020657610318611e6b565b5f546001600160a01b0316330361038857600454906001600160601b0360601b9060601b16906001600160601b0360601b1916176004556001600160601b031960055416176005555f196003541461037d575b6001541561037557005b606435600155005b60443560035561036b565b631628c08760e31b5f5260045ffd5b346102065760a0366003190112610206576004356001600160401b038111610206576103c7903690600401611e28565b6024356001600160401b038111610206576103e6903690600401611e28565b6044356001600160401b03811161020657610405903690600401611e28565b6064959195356001600160401b03811161020657610427903690600401611e28565b9390956084359485151586036102065760ff60125460281c166104de578282036102065780840361020657838203610206575f5b82811061046457005b61046f81838b611fe1565b35908115158203610206578a818787878b8e975f146104ec576104a68580946104ab6104a66104bc996104b799976104b197611fe1565b612070565b9a611fe1565b94611fe1565b612081565b9260ff60125460281c166104de576001936104d8928b926124e8565b0161045b565b6225b2dd60e11b5f5260045ffd5b6104a68580946104ab6104a661050a996104b799976104b197611fe1565b9260ff60125460281c166104de57600193610526928b92612bdc565b6104d8565b34610206575f36600319011261020657601c54601754601b54601854601a546040516324facdb160e11b81526001600160a01b03948516600482015260248101939093529083166044830152606482015291602091839160849183915f91165af180156105cf576105a2575b5f601b819055601a55005b6105c39060203d6020116105c8575b6105bb8183612406565b810190612891565b610597565b503d6105b1565b6040513d5f823e3d90fd5b3461020657610220366003190112610206576105f4611f2e565b6024356003811015610206576044356001600160a01b03811690819003610206576084356001600160a01b03811692908390036102065760c4356001600160a01b03811692908390036102065760e435936001600160601b038516850361020657610104359063ffffffff8216820361020657610124359463ffffffff8616860361020657610144356001600160601b03811680910361020657610164356001600160601b03811681036102065761018435906101a435926101c4359460018060a01b038616809603610206576101e435966001600160601b03881680980361020657610204356001600160a01b0381169c908d90036102065763409feecd199e8f80546003819255610922575b50638b78c6d81954610915576001600160a01b0316801560ff1b8117638b78c6d819555f5f805160206177188339815191528180a385611f4002611f4081048703610901576127109004871115806108f6575b156108e7576001600160601b03600a8a061615806108de575b806108d3575b156108c4578e9d600a9a6005549c60018060a01b031960175416176017556018549460643560155560a43560165560018060a01b0319601c541617601c5571ffffffffffffffffffffffff0000000000006012549163ffffffff60901b9060901b169260301b16906601000000000000600160b01b031916171760125563ffffffff60a01b9060a01b16916001600160401b0360c01b161717601855601954916001600160601b0360601b9060601b16916001600160401b0360c01b16171760195560135560145560018060a01b03195f5416175f55046001600160601b0360601b9060601b169160ff60c01b9060c01b1690600160601b600160c81b03191617176005555f1960035560018060a01b0319600654161760065561089457005b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a1005b633cd146b160e01b5f5260045ffd5b506101f48910610774565b5088151561076e565b63a926954560e01b5f5260045ffd5b506127108610610755565b634e487b7160e01b5f52601160045260245ffd5b630dc149f05f526004601cfd5b909f90600181811c14303b101561093e5760ff1b1b9e5f610702565b63f92ee8a95f526004601cfd5b34610206575f366003190112610206576020600a54604051908152f35b34610206576020366003190112610206576004356001600160401b03811161020657610998903690600401611e28565b5f5b8181106109e057507f5f815e5292cf3b123df58ad6d4531c085d94d5717a3b02740369a04273fde96c916109db6109cf6134b3565b60405193849384612017565b0390a1005b6109f36109ee828486611fe1565b612005565b9064ffffffffff82165f52600760205260405f20600160405191610a16836123d6565b8054828060a01b038116845260a01c602084015201549064ffffffffff8216604082015264ffffffffff8260281c166060820152608081019164ffffffffff8160501c16835263ffffffff8160781c1660a083015260ff60c083019163ffffffff8160981c16835260b81c16151560e0830152610a9382866158d0565b610a9b6134b3565b82516001600160a01b03908116911603610b85575163ffffffff1615610b765760019364ffffffffff610ad693511680610add575b50615a06565b500161099a565b80610b6f915f52600760205260405f209060ff8860405193610afe856123d6565b8054828060a01b038116865260a01c6020860152015464ffffffffff8116604085015264ffffffffff8160281c16606085015264ffffffffff8160501c16608085015263ffffffff8160781c1660a085015263ffffffff8160981c1660c085015260b81c16151560e0830152615a06565b5087610ad0565b631765682760e31b5f5260045ffd5b63a0cdd78160e01b5f5260045ffd5b34610206575f366003190112610206576040610bae6134ee565b9050610bb86135d8565b8351928352602083015250f35b3461020657610bd336611f84565b9360ff60125460281c166104de57818403610c30575f5b848110610bf357005b610c016104a6828785611fe1565b90610c106104b7828688611fe1565b60ff60125460281c166104de5787610c2a916001946130e3565b01610bea565b631fec674760e31b5f5260045ffd5b3461020657606036600319011261020657610c58611e58565b610c60611e6b565b610c68611e81565b9060ff60125460281c166104de57610238926130e3565b3461020657610c8d36611f84565b9360ff60125460281c166104de57818403610c30575f5b848110610cad57005b610cbb6104a6828785611fe1565b90610cca6104b7828688611fe1565b60ff60125460281c166104de5787610ce49160019461211e565b01610ca4565b34610206575f3660031901126102065761016060125460018060a01b03601754166015546001600160601b0360185463ffffffff60165491601954926013549560145497866040519a868160901c168c5260301c1660208b015260408a0152606089015260018060a01b038216608089015260a088015260a01c1660c086015281811660e086015260601c16610100840152610120830152610140820152f35b34610206575f36600319011261020657638b78c6d819546040516001600160a01b039091168152602090f35b34610206575f3660031901126102065760018060a01b035f5416600154906001600160601b036002541691600354926004549160055490600a6001600160601b038360601c1602936001600160601b03851694850361090157610100966001600160601b03948593604051988952602089015260408801526060870152818116608087015260601c1660a08501521660c083015260e0820152f35b610e5a36611f44565b9060ff60129493945460281c166104de57602093610e7793612efc565b604051908152f35b5f36600319011261020657610e92614b47565b5f638b78c6d819545f805160206177188339815191528280a3600160ff1b638b78c6d81955005b3461020657610ec736611edd565b9160ff60125460281c166104de5761023893612bdc565b34610206576020366003190112610206576020610ef9611f2e565b6006546040516001600160a01b0392831691909216148152f35b5f3660031901126102065763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b346102065760c0366003190112610206576004356001600160401b03811161020657610f87903690600401611e28565b906024356001600160401b03811161020657610fa7903690600401611e28565b9290916044356001600160401b03811161020657610fc9903690600401611e28565b6064929192356001600160401b03811161020657610feb903690600401611e28565b9190926084356001600160401b0381116102065761100d903690600401611e28565b97909860a4359788151589036102065760ff60125460281c166104de57818103610c3057858503610c30578a5f5b8b80821061114f575050505f5b8181106110f4575b50505050505f5b818110611099575b5050505050508061106c57005b7f386974f41b61738b510019ccd5a3524a43eccf0d136929e09d524e87aeeca2c4916109db6109cf6134b3565b63ffffffff6110ac6104a6838589611fe1565b16156110ef576110c06104a6828488611fe1565b906110cf6104b7828688611fe1565b60ff60125460281c166104de57876110e9916001