diff --git a/.eslintrc.json b/.eslintrc.json index d145ca3..3191bde 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,15 +1,18 @@ { - "extends": [ - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended" // Add this line - ], - "parser": "@typescript-eslint/parser", // Specify the parser - "plugins": [ - "@typescript-eslint" // Include the plugin - ], + "extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended"], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], "rules": { "no-restricted-globals": ["error", "globalThis"], "@typescript-eslint/no-explicit-any": "warn", "@typescript-eslint/no-unused-vars": "warn" - } + }, + "overrides": [ + { + "files": ["*.ts", "*.tsx"], + "parserOptions": { + "project": "./tsconfig.json" + } + } + ] } diff --git a/components/app/Global/UserWallet/index.tsx b/components/app/Global/UserWallet/index.tsx index ea00254..46de3ca 100644 --- a/components/app/Global/UserWallet/index.tsx +++ b/components/app/Global/UserWallet/index.tsx @@ -9,15 +9,15 @@ import { useModalStore } from "@/store/modalStore"; import WalletModal from "./WalletModal"; import { useWalletStore } from "@/store/walletStore"; -interface UserWalletProps { - // isConnected: boolean; - // userAddress: SecretString; - // balanceSCRT: number; - // balanceADMT: number; - // onConnect: () => void; -} +// interface UserWalletProps { +// // isConnected: boolean; +// // userAddress: SecretString; +// // balanceSCRT: number; +// // balanceADMT: number; +// // onConnect: () => void; +// } -const UserWallet: React.FC = ( +const UserWallet: React.FC = ( { // isConnected, // userAddress, diff --git a/package.json b/package.json index 45d40dd..cb775a5 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,9 @@ "@radix-ui/react-toast": "^1.1.5", "@radix-ui/themes": "^2.0.3", "@shadeprotocol/shadejs": "^1.5.4", - "@typescript-eslint/eslint-plugin": "^7.12.0", - "@typescript-eslint/parser": "^7.12.0", - "@typescript-eslint/typescript-estree": "^7.12.0", + "@typescript-eslint/eslint-plugin": "^8.2.0", + "@typescript-eslint/parser": "^8.2.0", + "@typescript-eslint/typescript-estree": "^8.2.0", "async-await-retry": "^2.1.0", "axios": "^1.7.2", "bignumber.js": "^9.1.2", @@ -36,6 +36,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "decimal.js": "^10.4.3", + "eslint": "8", "gray-matter": "^4.0.3", "lucide-react": "^0.362.0", "marked": "^12.0.2", @@ -65,8 +66,7 @@ "@types/react-dom": "^18.3.0", "@types/seedrandom": "^3.0.8", "autoprefixer": "^10.4.19", - "eslint": "8", - "eslint-config-next": "14.1.3", + "eslint-config-next": "^14.2.5", "postcss": "^8.4.38", "tailwindcss": "^3.4.4", "typescript": "^5.5.4" diff --git a/pages/app/testing/decimals/index.tsx b/pages/app/testing/decimals/index.tsx deleted file mode 100644 index ee42756..0000000 --- a/pages/app/testing/decimals/index.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { useState, useEffect } from "react"; -import { SecretNetworkClient } from "secretjs"; -import { Window as KeplrWindow } from "@keplr-wallet/types"; -import { processPoolsData } from "../../../../utils/secretjs/decimals/utils/processPoolData"; -import { fullPoolsData } from "../../../../components/app/Testing/fullPoolsData"; - -const QueryTokenDecimals = () => { - const [secretjs, setSecretjs] = useState(null); - const [address, setAddress] = useState(""); - const [tokenDetails, setTokenDetails] = useState< - { - contract_addr: string; - decimals: number; - }[] - >([]); - const [error, setError] = useState(null); - - useEffect(() => { - const connectKeplr = async () => { - if (!window.keplr) { - alert("Please install Keplr extension"); - return; - } - - try { - await window.keplr.enable("secret-4"); - - const offlineSigner = ( - window as unknown as KeplrWindow - ).getOfflineSigner?.("secret-4"); - const accounts = await offlineSigner?.getAccounts(); - - const client = new SecretNetworkClient({ - chainId: "secret-4", - url: "https://rpc.ankr.com/http/scrt_cosmos", - wallet: offlineSigner, - walletAddress: accounts?.[0].address, - }); - - setSecretjs(client); - setAddress(accounts?.[0].address); - } catch (error) { - setError("Failed to connect to Keplr: " + (error as Error).message); - } - }; - - connectKeplr(); - }, []); - - return ( -
-
-

Query Token Decimals

- {address ? ( -
-

Connected as: {address}

- {secretjs && ( - - )} - {tokenDetails.length > 0 ? ( -
-

Token Details

-
-                  {JSON.stringify(tokenDetails, null, 2)}
-                
-
- ) : ( -
-                {JSON.stringify(tokenDetails.length, null, 2)}
-              
- )} - {error &&

{error}

} -
- ) : ( -

Connecting to Keplr...

- )} -
-
- ); -}; - -export default QueryTokenDecimals; diff --git a/pages/app/testing/gptSwap.tsx b/pages/app/testing/gptSwap.tsx index d3fb618..46b2d72 100644 --- a/pages/app/testing/gptSwap.tsx +++ b/pages/app/testing/gptSwap.tsx @@ -1,513 +1,518 @@ -import { useState } from "react"; -import { SecretNetworkClient, Wallet } from "secretjs"; -import BigNumber from "bignumber.js"; -import { - OfflineAminoSigner, - OfflineDirectSigner, - Window, -} from "@keplr-wallet/types"; - -import { SwapPair } from "@/utils/secretjs/SecretSwapSite/types/SwapPair"; -import { AsyncSender } from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/asyncSender"; -import { - GAS_FOR_BASE_SWAP_ROUTE, - GAS_FOR_SWAP_NATIVE_COIN, -} from "@/utils/secretjs/SecretSwapSite/utils/gasPrices"; -import { getOfferAndAskPools } from "@/utils/secretjs/SecretSwapSite/SwapFunctions/getOfferAndAskPools"; -import { Signer } from "secretjs/dist/wallet_amino"; -import { getFeeForExecute } from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt"; -import { SwapTokenMap } from "@/utils/secretjs/SecretSwapSite/types/SwapToken"; - -const connectKeplr = async () => { - await (window as Window).keplr?.enable("secret-4"); - const offlineSigner = (window as Window).getOfflineSigner?.("secret-4"); - const accounts = await offlineSigner?.getAccounts(); - return { - address: accounts?.[0].address, - signer: offlineSigner, - }; -}; - -const createClient = async (signer: Signer) => { - const accounts = await signer.getAccounts(); - const client = new SecretNetworkClient({ - url: "https://scrt.public-rpc.com", - wallet: signer, - walletAddress: accounts[0].address, - chainId: "secret-4", - }); - return client; -}; - -const SwapForm = () => { - const [fromToken, setFromToken] = useState(""); - const [toToken, setToToken] = useState(""); - const [fromAmount, setFromAmount] = useState(""); - const [expectedReturn, setExpectedReturn] = useState(""); - const [keplrConnection, setKeplrConnection] = useState<{ - address: string | undefined; - signer: Signer | undefined; - } | null>(null); - const [client, setClient] = useState(null); - const [error, setError] = useState(""); - - const handleConnectKeplr = async () => { - try { - const keplrConn = await connectKeplr(); - if (!keplrConn?.signer) throw new Error("Keplr signer not found"); - const secretjs = await createClient(keplrConn.signer); - setKeplrConnection(keplrConn); - setClient(secretjs); - } catch (err) { - setError("Failed to connect to Keplr"); - console.error(err); - } - }; - - const handleSwap = async () => { - if (!keplrConnection || !client || !keplrConnection.address) { - setError("Please connect to Keplr first"); - return; - } - - try { - const bestRouteData = getBestRoute({ - fromInput: parseFloat(fromAmount), - toInput: parseFloat(expectedReturn), - cachedGasFeesUnfilledCoin: [0.12], - isToEstimated: true, - routes: [["a", "b"]], - tokens: { - a: { address: fromToken, code_hash: "..." }, - b: { address: toToken, code_hash: "..." }, - }, - pairs: new Map([ - ["a:b", { contract_addr: "secret1...", asset_infos: [] }], - ]), - balances: { a: "1000000", b: "1000000" }, - }); - - if (bestRouteData.bestRoute) { - const hops = await getHops( - bestRouteData.bestRoute, - bestRouteData.pairs, - client - ); - - await executeRouterSwap( - new AsyncSender(client), - keplrConnection.address, - fromToken, - fromAmount, - hops, - expectedReturn, - bestRouteData.bestRoute - ); - } else { - setError("No valid route found"); - } - } catch (err) { - setError("Swap failed"); - console.error(err); - } - }; - - return ( -
-

Token Swap

- {error &&
{error}
} -
- - setFromToken(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md" - /> -
-
- - setToToken(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md" - /> -
-
- - setFromAmount(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md" - /> -
-
- - setExpectedReturn(e.target.value)} - className="mt-1 block w-full p-2 border border-gray-300 rounded-md" - /> -
-
- - -
-
- ); -}; - -export default SwapForm; - -const getHops = async ( - bestRoute: string[], - pairs: Map, - secretjs: SecretNetworkClient -) => { - // Placeholder function to get hops - // Replace with your actual implementation - return bestRoute.map((token) => ({ - from_token: { address: token, code_hash: "..." }, - pair_address: pairs.get(token)?.contract_addr || "", - pair_code_hash: "...", - })); -}; - -export function getBestRoute({ - fromInput, - toInput, - cachedGasFeesUnfilledCoin, - isToEstimated, - routes, - tokens, - pairs, - balances, -}: BestRouteParams): { - bestRoute: string[] | null; - allRoutesOutputs: RouteOutput[]; - bestRouteToInput: BigNumber; - bestRouteFromInput: BigNumber; -} { - const allRoutesOutputs: RouteOutput[] = []; - let bestRoute: string[] | null = null; - - let bestRouteToInput = new BigNumber(-Infinity); - let bestRouteToInputWithGas = new BigNumber(-Infinity); - let bestRouteFromInput = new BigNumber(Infinity); - let bestRouteFromInputWithGas = new BigNumber(Infinity); - - for (const route of routes) { - if (isToEstimated || toInput === null) { - let from = new BigNumber(fromInput); - let to = new BigNumber(0); - for (let i = 0; i < route.length - 1; i++) { - const fromToken = route[i]; - const toToken = route[i + 1]; - const pair = pairs.get( - `${fromToken}${SwapPair.id_delimiter}${toToken}` - ); - if (!pair) break; - - const { offer_pool, ask_pool } = getOfferAndAskPools( - fromToken, - toToken, - pair, - tokens, - balances - ); - - const offer_amount = from; - if ( - offer_pool.isEqualTo(0) || - ask_pool.isEqualTo(0) || - offer_amount.isNaN() || - offer_amount.isLessThanOrEqualTo(0) - ) { - to = new BigNumber(0); - break; - } - - const { return_amount } = compute_swap( - offer_pool, - ask_pool, - offer_amount - ); - - if (return_amount.isNaN() || return_amount.isLessThanOrEqualTo(0)) { - to = new BigNumber(0); - break; - } - - to = return_amount; - - if (i < route.length - 2) { - from = return_amount; - } - } - - const toWithGas = to.minus(cachedGasFeesUnfilledCoin[route.length - 1]); - allRoutesOutputs.push({ route, toOutput: to, toWithGas }); - - if (toWithGas.isGreaterThan(bestRouteToInputWithGas)) { - bestRouteFromInput = new BigNumber(fromInput); - bestRouteToInput = to; - bestRouteToInputWithGas = toWithGas; - bestRoute = route; - } - } else { - let from = new BigNumber(0); - let to = new BigNumber(toInput); - for (let i = route.length - 1; i > 0; i--) { - const fromToken = route[i - 1]; - const toToken = route[i]; - const pair = pairs.get( - `${fromToken}${SwapPair.id_delimiter}${toToken}` - ); - if (!pair) break; - - const { offer_pool, ask_pool } = getOfferAndAskPools( - fromToken, - toToken, - pair, - tokens, - balances - ); - - const ask_amount = to; - if ( - offer_pool.isEqualTo(0) || - ask_pool.isEqualTo(0) || - ask_amount.gt(ask_pool) || - ask_amount.isNaN() || - ask_amount.isZero() - ) { - from = new BigNumber(Infinity); - break; - } - - const { offer_amount } = compute_offer_amount( - offer_pool, - ask_pool, - ask_amount - ); - - if (offer_amount.isNaN() || offer_amount.isLessThanOrEqualTo(0)) { - from = new BigNumber(Infinity); - break; - } - - from = offer_amount; - - if (i > 1) { - to = offer_amount; - } - } - - const fromWithGas = from.plus( - cachedGasFeesUnfilledCoin[route.length - 1] - ); - - allRoutesOutputs.push({ route, fromOutput: from, fromWithGas }); - - if (fromWithGas.isLessThan(bestRouteFromInputWithGas)) { - bestRouteFromInput = from; - bestRouteFromInputWithGas = fromWithGas; - bestRouteToInput = new BigNumber(toInput); - bestRoute = route; - } - } - } - - return { bestRoute, allRoutesOutputs, bestRouteToInput, bestRouteFromInput }; +// import { useState } from "react"; +// import { SecretNetworkClient, Wallet } from "secretjs"; +// import BigNumber from "bignumber.js"; +// import { +// OfflineAminoSigner, +// OfflineDirectSigner, +// Window, +// } from "@keplr-wallet/types"; + +// import { SwapPair } from "@/utils/secretjs/SecretSwapSite/types/SwapPair"; +// import { AsyncSender } from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/asyncSender"; +// import { +// GAS_FOR_BASE_SWAP_ROUTE, +// GAS_FOR_SWAP_NATIVE_COIN, +// } from "@/utils/secretjs/SecretSwapSite/utils/gasPrices"; +// import { getOfferAndAskPools } from "@/utils/secretjs/SecretSwapSite/SwapFunctions/getOfferAndAskPools"; +// import { Signer } from "secretjs/dist/wallet_amino"; +// import { getFeeForExecute } from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt"; +// import { SwapTokenMap } from "@/utils/secretjs/SecretSwapSite/types/SwapToken"; + +// const connectKeplr = async () => { +// await (window as Window).keplr?.enable("secret-4"); +// const offlineSigner = (window as Window).getOfflineSigner?.("secret-4"); +// const accounts = await offlineSigner?.getAccounts(); +// return { +// address: accounts?.[0].address, +// signer: offlineSigner, +// }; +// }; + +// const createClient = async (signer: Signer) => { +// const accounts = await signer.getAccounts(); +// const client = new SecretNetworkClient({ +// url: "https://scrt.public-rpc.com", +// wallet: signer, +// walletAddress: accounts[0].address, +// chainId: "secret-4", +// }); +// return client; +// }; + +// const SwapForm = () => { +// const [fromToken, setFromToken] = useState(""); +// const [toToken, setToToken] = useState(""); +// const [fromAmount, setFromAmount] = useState(""); +// const [expectedReturn, setExpectedReturn] = useState(""); +// const [keplrConnection, setKeplrConnection] = useState<{ +// address: string | undefined; +// signer: Signer | undefined; +// } | null>(null); +// const [client, setClient] = useState(null); +// const [error, setError] = useState(""); + +// const handleConnectKeplr = async () => { +// try { +// const keplrConn = await connectKeplr(); +// if (!keplrConn?.signer) throw new Error("Keplr signer not found"); +// const secretjs = await createClient(keplrConn.signer); +// setKeplrConnection(keplrConn); +// setClient(secretjs); +// } catch (err) { +// setError("Failed to connect to Keplr"); +// console.error(err); +// } +// }; + +// const handleSwap = async () => { +// if (!keplrConnection || !client || !keplrConnection.address) { +// setError("Please connect to Keplr first"); +// return; +// } + +// try { +// const bestRouteData = getBestRoute({ +// fromInput: parseFloat(fromAmount), +// toInput: parseFloat(expectedReturn), +// cachedGasFeesUnfilledCoin: [0.12], +// isToEstimated: true, +// routes: [["a", "b"]], +// tokens: { +// a: { address: fromToken, code_hash: "..." }, +// b: { address: toToken, code_hash: "..." }, +// }, +// pairs: new Map([ +// ["a:b", { contract_addr: "secret1...", asset_infos: [] }], +// ]), +// balances: { a: "1000000", b: "1000000" }, +// }); + +// if (bestRouteData.bestRoute) { +// const hops = await getHops( +// bestRouteData.bestRoute, +// bestRouteData.pairs, +// client +// ); + +// await executeRouterSwap( +// new AsyncSender(client), +// keplrConnection.address, +// fromToken, +// fromAmount, +// hops, +// expectedReturn, +// bestRouteData.bestRoute +// ); +// } else { +// setError("No valid route found"); +// } +// } catch (err) { +// setError("Swap failed"); +// console.error(err); +// } +// }; + +// return ( +//
+//

Token Swap

+// {error &&
{error}
} +//
+// +// setFromToken(e.target.value)} +// className="mt-1 block w-full p-2 border border-gray-300 rounded-md" +// /> +//
+//
+// +// setToToken(e.target.value)} +// className="mt-1 block w-full p-2 border border-gray-300 rounded-md" +// /> +//
+//
+// +// setFromAmount(e.target.value)} +// className="mt-1 block w-full p-2 border border-gray-300 rounded-md" +// /> +//
+//
+// +// setExpectedReturn(e.target.value)} +// className="mt-1 block w-full p-2 border border-gray-300 rounded-md" +// /> +//
+//
+// +// +//
+//
+// ); +// }; + +// export default SwapForm; + +// const getHops = async ( +// bestRoute: string[], +// pairs: Map, +// secretjs: SecretNetworkClient +// ) => { +// // Placeholder function to get hops +// // Replace with your actual implementation +// return bestRoute.map((token) => ({ +// from_token: { address: token, code_hash: "..." }, +// pair_address: pairs.get(token)?.contract_addr || "", +// pair_code_hash: "...", +// })); +// }; + +// export function getBestRoute({ +// fromInput, +// toInput, +// cachedGasFeesUnfilledCoin, +// isToEstimated, +// routes, +// tokens, +// pairs, +// balances, +// }: BestRouteParams): { +// bestRoute: string[] | null; +// allRoutesOutputs: RouteOutput[]; +// bestRouteToInput: BigNumber; +// bestRouteFromInput: BigNumber; +// } { +// const allRoutesOutputs: RouteOutput[] = []; +// let bestRoute: string[] | null = null; + +// let bestRouteToInput = new BigNumber(-Infinity); +// let bestRouteToInputWithGas = new BigNumber(-Infinity); +// let bestRouteFromInput = new BigNumber(Infinity); +// let bestRouteFromInputWithGas = new BigNumber(Infinity); + +// for (const route of routes) { +// if (isToEstimated || toInput === null) { +// let from = new BigNumber(fromInput); +// let to = new BigNumber(0); +// for (let i = 0; i < route.length - 1; i++) { +// const fromToken = route[i]; +// const toToken = route[i + 1]; +// const pair = pairs.get( +// `${fromToken}${SwapPair.id_delimiter}${toToken}` +// ); +// if (!pair) break; + +// const { offer_pool, ask_pool } = getOfferAndAskPools( +// fromToken, +// toToken, +// pair, +// tokens, +// balances +// ); + +// const offer_amount = from; +// if ( +// offer_pool.isEqualTo(0) || +// ask_pool.isEqualTo(0) || +// offer_amount.isNaN() || +// offer_amount.isLessThanOrEqualTo(0) +// ) { +// to = new BigNumber(0); +// break; +// } + +// const { return_amount } = compute_swap( +// offer_pool, +// ask_pool, +// offer_amount +// ); + +// if (return_amount.isNaN() || return_amount.isLessThanOrEqualTo(0)) { +// to = new BigNumber(0); +// break; +// } + +// to = return_amount; + +// if (i < route.length - 2) { +// from = return_amount; +// } +// } + +// const toWithGas = to.minus(cachedGasFeesUnfilledCoin[route.length - 1]); +// allRoutesOutputs.push({ route, toOutput: to, toWithGas }); + +// if (toWithGas.isGreaterThan(bestRouteToInputWithGas)) { +// bestRouteFromInput = new BigNumber(fromInput); +// bestRouteToInput = to; +// bestRouteToInputWithGas = toWithGas; +// bestRoute = route; +// } +// } else { +// let from = new BigNumber(0); +// let to = new BigNumber(toInput); +// for (let i = route.length - 1; i > 0; i--) { +// const fromToken = route[i - 1]; +// const toToken = route[i]; +// const pair = pairs.get( +// `${fromToken}${SwapPair.id_delimiter}${toToken}` +// ); +// if (!pair) break; + +// const { offer_pool, ask_pool } = getOfferAndAskPools( +// fromToken, +// toToken, +// pair, +// tokens, +// balances +// ); + +// const ask_amount = to; +// if ( +// offer_pool.isEqualTo(0) || +// ask_pool.isEqualTo(0) || +// ask_amount.gt(ask_pool) || +// ask_amount.isNaN() || +// ask_amount.isZero() +// ) { +// from = new BigNumber(Infinity); +// break; +// } + +// const { offer_amount } = compute_offer_amount( +// offer_pool, +// ask_pool, +// ask_amount +// ); + +// if (offer_amount.isNaN() || offer_amount.isLessThanOrEqualTo(0)) { +// from = new BigNumber(Infinity); +// break; +// } + +// from = offer_amount; + +// if (i > 1) { +// to = offer_amount; +// } +// } + +// const fromWithGas = from.plus( +// cachedGasFeesUnfilledCoin[route.length - 1] +// ); + +// allRoutesOutputs.push({ route, fromOutput: from, fromWithGas }); + +// if (fromWithGas.isLessThan(bestRouteFromInputWithGas)) { +// bestRouteFromInput = from; +// bestRouteFromInputWithGas = fromWithGas; +// bestRouteToInput = new BigNumber(toInput); +// bestRoute = route; +// } +// } +// } + +// return { bestRoute, allRoutesOutputs, bestRouteToInput, bestRouteFromInput }; +// } + +// export async function executeRouterSwap( +// secretjsSender: AsyncSender, +// secretAddress: string, +// fromToken: string, +// fromAmount: string, +// hops: (null | { +// from_token: { address: string; code_hash: string } | "scrt"; +// pair_address: string; +// pair_code_hash: string; +// })[], +// expected_return: string, +// bestRoute: string[] +// ) { +// const AMM_ROUTER_CONTRACT = "secret1..."; // Your AMM router contract address + +// const msg = { +// receive: { +// from: secretAddress, +// amount: fromAmount, +// msg: btoa( +// JSON.stringify({ +// to: secretAddress, +// hops, +// expected_return, +// }) +// ), +// }, +// }; + +// if (fromToken === "uscrt") { +// return secretjsSender.asyncExecute( +// AMM_ROUTER_CONTRACT, +// secretAddress, +// msg, +// "", +// [ +// { +// amount: fromAmount, +// denom: "uscrt", +// }, +// ], +// getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE) +// ); +// } else { +// return secretjsSender.asyncExecute( +// fromToken, +// secretAddress, +// { +// send: { +// recipient: AMM_ROUTER_CONTRACT, +// amount: fromAmount, +// msg: btoa( +// JSON.stringify({ +// to: secretAddress, +// hops, +// expected_return, +// }) +// ), +// }, +// }, +// "", +// [], +// getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE) +// ); +// } +// } + +// export async function executeSwapUscrt( +// secretjsSender: AsyncSender, +// secretAddress: string, +// pair: SwapPair, +// fromAmount: string, +// expected_return: string +// ) { +// return secretjsSender.asyncExecute( +// pair.contract_addr, +// secretAddress, +// { +// swap: { +// offer_asset: { +// info: { native_token: { denom: "uscrt" } }, +// amount: fromAmount, +// }, +// expected_return, +// }, +// }, +// "", +// [ +// { +// amount: fromAmount, +// denom: "uscrt", +// }, +// ], +// getFeeForExecute(GAS_FOR_SWAP_NATIVE_COIN) +// ); +// } + +// interface SwapToken { +// address: string; +// code_hash: string; +// } + +// interface RouteOutput { +// route: string[]; +// toOutput?: BigNumber; +// toWithGas?: BigNumber; +// fromOutput?: BigNumber; +// fromWithGas?: BigNumber; +// } + +// interface BestRouteParams { +// fromInput: number; +// toInput: number; +// cachedGasFeesUnfilledCoin: number[]; +// isToEstimated: boolean; +// routes: string[][]; +// tokens: SwapTokenMap; +// pairs: Map; +// balances: Record; +// } +// export const compute_offer_amount = ( +// offer_pool: BigNumber, +// ask_pool: BigNumber, +// ask_amount: BigNumber +// ): { +// offer_amount: BigNumber; +// spread_amount: BigNumber; +// commission_amount: BigNumber; +// } => { +// // ask => offer +// // offer_amount = cp / (ask_pool - ask_amount / (1 - commission_rate)) - offer_pool +// const cp = offer_pool.multipliedBy(ask_pool); +// const one_minus_commission = new BigNumber(1).minus(COMMISSION_RATE); + +// const offer_amount = cp +// .multipliedBy( +// new BigNumber(1).dividedBy( +// ask_pool.minus( +// ask_amount.multipliedBy(reverse_decimal(one_minus_commission)) +// ) +// ) +// ) +// .minus(offer_pool); + +// const before_commission_deduction = ask_amount.multipliedBy( +// reverse_decimal(one_minus_commission) +// ); + +// let spread_amount = new BigNumber(0); +// try { +// spread_amount = offer_amount +// .multipliedBy(ask_pool.dividedBy(offer_pool)) +// .minus(before_commission_deduction); +// } catch (e) {} + +// const commission_amount = +// before_commission_deduction.multipliedBy(COMMISSION_RATE); +// return { offer_amount, spread_amount, commission_amount }; +// }; + +// export const reverse_decimal = (decimal: BigNumber): BigNumber => { +// if (decimal.isEqualTo(0)) { +// return new BigNumber(0); +// } + +// return DECIMAL_FRACTIONAL.dividedBy(decimal.multipliedBy(DECIMAL_FRACTIONAL)); +// }; +// const DECIMAL_FRACTIONAL = new BigNumber(1_000_000_000); +// const COMMISSION_RATE = new BigNumber(0.3 / 100); + +// placeholder export so it doesn't error out. empty file otherwise. +export default function GptSwap() { + return
; } - -export async function executeRouterSwap( - secretjsSender: AsyncSender, - secretAddress: string, - fromToken: string, - fromAmount: string, - hops: (null | { - from_token: { address: string; code_hash: string } | "scrt"; - pair_address: string; - pair_code_hash: string; - })[], - expected_return: string, - bestRoute: string[] -) { - const AMM_ROUTER_CONTRACT = "secret1..."; // Your AMM router contract address - - const msg = { - receive: { - from: secretAddress, - amount: fromAmount, - msg: btoa( - JSON.stringify({ - to: secretAddress, - hops, - expected_return, - }) - ), - }, - }; - - if (fromToken === "uscrt") { - return secretjsSender.asyncExecute( - AMM_ROUTER_CONTRACT, - secretAddress, - msg, - "", - [ - { - amount: fromAmount, - denom: "uscrt", - }, - ], - getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE) - ); - } else { - return secretjsSender.asyncExecute( - fromToken, - secretAddress, - { - send: { - recipient: AMM_ROUTER_CONTRACT, - amount: fromAmount, - msg: btoa( - JSON.stringify({ - to: secretAddress, - hops, - expected_return, - }) - ), - }, - }, - "", - [], - getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE) - ); - } -} - -export async function executeSwapUscrt( - secretjsSender: AsyncSender, - secretAddress: string, - pair: SwapPair, - fromAmount: string, - expected_return: string -) { - return secretjsSender.asyncExecute( - pair.contract_addr, - secretAddress, - { - swap: { - offer_asset: { - info: { native_token: { denom: "uscrt" } }, - amount: fromAmount, - }, - expected_return, - }, - }, - "", - [ - { - amount: fromAmount, - denom: "uscrt", - }, - ], - getFeeForExecute(GAS_FOR_SWAP_NATIVE_COIN) - ); -} - -interface SwapToken { - address: string; - code_hash: string; -} - -interface RouteOutput { - route: string[]; - toOutput?: BigNumber; - toWithGas?: BigNumber; - fromOutput?: BigNumber; - fromWithGas?: BigNumber; -} - -interface BestRouteParams { - fromInput: number; - toInput: number; - cachedGasFeesUnfilledCoin: number[]; - isToEstimated: boolean; - routes: string[][]; - tokens: SwapTokenMap; - pairs: Map; - balances: Record; -} -export const compute_offer_amount = ( - offer_pool: BigNumber, - ask_pool: BigNumber, - ask_amount: BigNumber -): { - offer_amount: BigNumber; - spread_amount: BigNumber; - commission_amount: BigNumber; -} => { - // ask => offer - // offer_amount = cp / (ask_pool - ask_amount / (1 - commission_rate)) - offer_pool - const cp = offer_pool.multipliedBy(ask_pool); - const one_minus_commission = new BigNumber(1).minus(COMMISSION_RATE); - - const offer_amount = cp - .multipliedBy( - new BigNumber(1).dividedBy( - ask_pool.minus( - ask_amount.multipliedBy(reverse_decimal(one_minus_commission)) - ) - ) - ) - .minus(offer_pool); - - const before_commission_deduction = ask_amount.multipliedBy( - reverse_decimal(one_minus_commission) - ); - - let spread_amount = new BigNumber(0); - try { - spread_amount = offer_amount - .multipliedBy(ask_pool.dividedBy(offer_pool)) - .minus(before_commission_deduction); - } catch (e) {} - - const commission_amount = - before_commission_deduction.multipliedBy(COMMISSION_RATE); - return { offer_amount, spread_amount, commission_amount }; -}; - -export const reverse_decimal = (decimal: BigNumber): BigNumber => { - if (decimal.isEqualTo(0)) { - return new BigNumber(0); - } - - return DECIMAL_FRACTIONAL.dividedBy(decimal.multipliedBy(DECIMAL_FRACTIONAL)); -}; -const DECIMAL_FRACTIONAL = new BigNumber(1_000_000_000); -const COMMISSION_RATE = new BigNumber(0.3 / 100); diff --git a/pages/app/testing/poolDetails.tsx b/pages/app/testing/poolDetails.tsx index d5d1e42..564d56e 100644 --- a/pages/app/testing/poolDetails.tsx +++ b/pages/app/testing/poolDetails.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from "react"; import { SecretNetworkClient } from "secretjs"; import { Window as KeplrWindow } from "@keplr-wallet/types"; -import { queryPoolDetails as addresses } from "./queryPoolDetails"; +import { queryPoolDetails as addresses } from "../../../components/app/Testing/queryPoolDetails"; // const addresses = [ // { diff --git a/pages/app/testing/swap.tsx b/pages/app/testing/swap.tsx index a3fd512..b570d6a 100644 --- a/pages/app/testing/swap.tsx +++ b/pages/app/testing/swap.tsx @@ -1,160 +1,164 @@ -import React, { useState } from "react"; -import { NextPage } from "next"; -import { - OfflineAminoSigner, - OfflineDirectSigner, - Window, -} from "@keplr-wallet/types"; -import "tailwindcss/tailwind.css"; -import { getBestRoute } from "@/utils/secretjs/SecretSwapSite/SwapFunctions/getBestRoute"; -import { getHops } from "@/utils/secretjs/SecretSwapSite/SwapFunctions/getHops"; -import { executeRouterSwap } from "@/utils/secretjs/SecretSwapSite/executeRouterSwap"; -import { SecretNetworkClient } from "secretjs"; +// import React, { useState } from "react"; +// import { NextPage } from "next"; +// import { +// OfflineAminoSigner, +// OfflineDirectSigner, +// Window, +// } from "@keplr-wallet/types"; +// import "tailwindcss/tailwind.css"; +// import { getBestRoute } from "@/utils/secretjs/SecretSwapSite/SwapFunctions/getBestRoute"; +// import { getHops } from "@/utils/secretjs/SecretSwapSite/SwapFunctions/getHops"; +// import { executeRouterSwap } from "@/utils/secretjs/SecretSwapSite/executeRouterSwap"; +// import { SecretNetworkClient } from "secretjs"; -const connectKeplr = async () => { - await (window as Window).keplr?.enable("secret-4"); - const offlineSigner = (window as Window).getOfflineSigner?.("secret-4"); - const accounts = await offlineSigner?.getAccounts(); - return { - address: accounts?.[0].address, - signer: offlineSigner, - }; -}; +// const connectKeplr = async () => { +// await (window as Window).keplr?.enable("secret-4"); +// const offlineSigner = (window as Window).getOfflineSigner?.("secret-4"); +// const accounts = await offlineSigner?.getAccounts(); +// return { +// address: accounts?.[0].address, +// signer: offlineSigner, +// }; +// }; -const createClient = async ( - signer: OfflineAminoSigner & OfflineDirectSigner -) => { - const accounts = await signer.getAccounts(); - const client = new SecretNetworkClient({ - url: "https://grpc-web.secret-4.api.trivium.network:9091", - wallet: signer, - walletAddress: accounts[0].address, - chainId: "secret-4", - }); - return client; -}; +// const createClient = async ( +// signer: OfflineAminoSigner & OfflineDirectSigner +// ) => { +// const accounts = await signer.getAccounts(); +// const client = new SecretNetworkClient({ +// url: "https://grpc-web.secret-4.api.trivium.network:9091", +// wallet: signer, +// walletAddress: accounts[0].address, +// chainId: "secret-4", +// }); +// return client; +// }; -const SwapPage: NextPage = () => { - const [fromToken, setFromToken] = useState(""); - const [toToken, setToToken] = useState(""); - const [fromAmount, setFromAmount] = useState(""); - const [expectedReturn, setExpectedReturn] = useState(""); - const [status, setStatus] = useState(""); +// const SwapPage: NextPage = () => { +// const [fromToken, setFromToken] = useState(""); +// const [toToken, setToToken] = useState(""); +// const [fromAmount, setFromAmount] = useState(""); +// const [expectedReturn, setExpectedReturn] = useState(""); +// const [status, setStatus] = useState(""); - const handleSubmit = async (event: React.FormEvent) => { - event.preventDefault(); - setStatus("Connecting to Keplr..."); +// const handleSubmit = async (event: React.FormEvent) => { +// event.preventDefault(); +// setStatus("Connecting to Keplr..."); - const keplrConnection = await connectKeplr(); - if (!keplrConnection.signer) { - console.error("No signer found"); - setStatus("No signer found. Make sure Keplr is connected."); - return; - } +// const keplrConnection = await connectKeplr(); +// if (!keplrConnection.signer) { +// console.error("No signer found"); +// setStatus("No signer found. Make sure Keplr is connected."); +// return; +// } - setStatus("Creating client..."); - const secretjs = await createClient(keplrConnection.signer); +// setStatus("Creating client..."); +// const secretjs = await createClient(keplrConnection.signer); - setStatus("Calculating best route..."); - const bestRouteData = getBestRoute({ - fromInput: Number(fromAmount), - toInput: Number(expectedReturn), - cachedGasFeesUnfilledCoin: [0.12], // Example value - isToEstimated: true, - routes: [["a", "b"]], // Example route, should be dynamic - tokens: { - a: { address: fromToken, code_hash: "..." }, // Fill with actual data - b: { address: toToken, code_hash: "..." }, // Fill with actual data - }, - pairs: new Map([ - ["a:b", { contract_addr: "secret1...", asset_infos: [] }], - ]), // Fill with actual data - balances: { a: "1000000", b: "1000000" }, // Fill with actual data - }); +// setStatus("Calculating best route..."); +// const bestRouteData = getBestRoute({ +// fromInput: Number(fromAmount), +// toInput: Number(expectedReturn), +// cachedGasFeesUnfilledCoin: [0.12], // Example value +// isToEstimated: true, +// routes: [["a", "b"]], // Example route, should be dynamic +// tokens: { +// a: { address: fromToken, code_hash: "..." }, // Fill with actual data +// b: { address: toToken, code_hash: "..." }, // Fill with actual data +// }, +// pairs: new Map([ +// ["a:b", { contract_addr: "secret1...", asset_infos: [] }], +// ]), // Fill with actual data +// balances: { a: "1000000", b: "1000000" }, // Fill with actual data +// }); - if (bestRouteData.bestRoute) { - setStatus("Constructing hops..."); - const hops = await getHops( - bestRouteData.bestRoute, - bestRouteData.pairs, - secretjs - ); +// if (bestRouteData.bestRoute) { +// setStatus("Constructing hops..."); +// const hops = await getHops( +// bestRouteData.bestRoute, +// bestRouteData.pairs, +// secretjs +// ); - setStatus("Executing swap..."); - await executeRouterSwap( - keplrConnection.signer, - keplrConnection.address, - fromToken, - fromAmount, - hops, - expectedReturn, - bestRouteData.bestRoute - ); +// setStatus("Executing swap..."); +// await executeRouterSwap( +// keplrConnection.signer, +// keplrConnection.address, +// fromToken, +// fromAmount, +// hops, +// expectedReturn, +// bestRouteData.bestRoute +// ); - setStatus("Swap executed successfully!"); - } else { - console.error("No valid route found"); - setStatus("No valid route found"); - } - }; +// setStatus("Swap executed successfully!"); +// } else { +// console.error("No valid route found"); +// setStatus("No valid route found"); +// } +// }; - return ( -
-
-

Swap Tokens

-
- - setFromToken(e.target.value)} - className="w-full px-3 py-2 border rounded" - required - /> -
-
- - setToToken(e.target.value)} - className="w-full px-3 py-2 border rounded" - required - /> -
-
- - setFromAmount(e.target.value)} - className="w-full px-3 py-2 border rounded" - required - /> -
-
- - setExpectedReturn(e.target.value)} - className="w-full px-3 py-2 border rounded" - required - /> -
- - {status &&

{status}

} -
-
- ); -}; +// return ( +//
+//
+//

Swap Tokens

+//
+// +// setFromToken(e.target.value)} +// className="w-full px-3 py-2 border rounded" +// required +// /> +//
+//
+// +// setToToken(e.target.value)} +// className="w-full px-3 py-2 border rounded" +// required +// /> +//
+//
+// +// setFromAmount(e.target.value)} +// className="w-full px-3 py-2 border rounded" +// required +// /> +//
+//
+// +// setExpectedReturn(e.target.value)} +// className="w-full px-3 py-2 border rounded" +// required +// /> +//
+// +// {status &&

{status}

} +//
+//
+// ); +// }; -export default SwapPage; +// export default SwapPage; + +export default function EmptyPage() { + return
Empty Page
; +} diff --git a/utils/secretjs/SecretSwapSite/Swap/utils.tsx b/utils/secretjs/SecretSwapSite/Swap/utils.tsx deleted file mode 100644 index 711c9b4..0000000 --- a/utils/secretjs/SecretSwapSite/Swap/utils.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import BigNumber from "bignumber.js"; -import { humanizeBalance } from "@/utils/secretjs/SecretSwapSite/utils"; -import { TxResponse } from "secretjs"; - -export function compareNormalize( - number1: BigNumber.Value, - number2: { amount: BigNumber.Value; decimals: number } -): boolean { - return humanizeBalance( - new BigNumber(number2.amount as any), - number2.decimals - ).isLessThan(new BigNumber(number1)); -} - -export function storeTxResultLocally(txResult: TxResponse) { - if (!localStorage || !localStorage.setItem || !txResult.transactionHash) { - return; - } - const result = { - data: new TextDecoder().decode(Uint8Array.from(txResult.data.flatMap((arr) => Array.from(arr)))), - logs: txResult.arrayLog, - }; - localStorage.setItem(txResult.transactionHash, JSON.stringify(result)); -} - -export const shareOfPoolNumberFormat = new Intl.NumberFormat("en", { - maximumFractionDigits: 10, -}); diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions.ts b/utils/secretjs/SecretSwapSite/SwapFunctions.ts deleted file mode 100644 index a710af5..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions.ts +++ /dev/null @@ -1,40 +0,0 @@ -import BigNumber from "bignumber.js"; -import { - extractError, -} from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils"; -// import { RouteOutput } from '@/components/Swap/RouteRow'; -import { humanizeBalance } from "@/utils/secretjs/SecretSwapSite/utils"; -import { storeTxResultLocally } from "@/utils/secretjs/SecretSwapSite/Swap/utils"; -import { TxResponse } from "secretjs"; -import extractValueFromLogs from "./blockchain-bridge/scrt/utils/extractValueFromLogs"; - -export function storeResult( - result: TxResponse, - fromAmount: string, - fromDecimals: number, - bestRoute: string[], - toDecimals: number, -) { - if (result?.code) { - const error = extractError(result); - throw new Error(error); - } - - storeTxResultLocally(result); - - const sent = humanizeBalance( - new BigNumber(fromAmount), - fromDecimals, - ).toFixed(); - const received = humanizeBalance( - new BigNumber( - extractValueFromLogs(result, "return_amount", bestRoute != null), - ), - toDecimals, - ).toFixed(); - - const fromTokenFromTxn = extractValueFromLogs(result, "offer_asset", false); - const toTokenFromTxn = extractValueFromLogs(result, "ask_asset", true); - - return { fromTokenFromTxn, toTokenFromTxn, sent, received }; -} diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/executeRouterSwap.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/executeRouterSwap.ts deleted file mode 100644 index 9e7dbad..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/executeRouterSwap.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { - getFeeForExecute, -} from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils"; -import { AsyncSender } from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/asyncSender"; -import { - GAS_FOR_BASE_SWAP_ROUTE, -} from "@/utils/secretjs/SecretSwapSite/utils/gasPrices"; -import useGlobalConfigStore from "@/store/useGlobalConfigStore"; - -export function executeRouterSwap( - secretjsSender: AsyncSender, - secretAddress: string, - fromToken: string, - fromAmount: string, - hops: (null | { - from_token: { snip20: { address: string; code_hash: string } } | "scrt"; - pair_address: string; - pair_code_hash: string; - expected_return?: string; - })[], - expected_return: string, - bestRoute: string[], -) { - const { AMM_ROUTER_CONTRACT } = useGlobalConfigStore.getState().config; - - if (fromToken === "uscrt") { - return secretjsSender.asyncExecute( - AMM_ROUTER_CONTRACT, - secretAddress, - { - receive: { - from: secretAddress, - amount: fromAmount, - msg: btoa( - JSON.stringify({ - to: secretAddress, - hops, - expected_return, - }), - ), - }, - }, - "", - [ - { - amount: fromAmount, - denom: "uscrt", - }, - ], - getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE), - ); - } else { - return secretjsSender.asyncExecute( - fromToken, - secretAddress, - { - send: { - recipient: AMM_ROUTER_CONTRACT, - amount: fromAmount, - msg: btoa( - JSON.stringify({ - to: secretAddress, - hops, - expected_return, - }), - ), - }, - }, - "", - [], - getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE), - ); - } -} diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/executeSwapUscrt.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/executeSwapUscrt.ts deleted file mode 100644 index 589c704..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/executeSwapUscrt.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { SwapPair } from "../types/SwapPair"; -import { GAS_FOR_SWAP_NATIVE_COIN } from "../utils/gasPrices"; -import { getFeeForExecute } from "../blockchain-bridge/scrt"; -import { AsyncSender } from "../blockchain-bridge/scrt/asyncSender"; - -export function executeSwapUscrt( - secretjsSender: AsyncSender, - secretAddress: string, - pair: SwapPair, - fromAmount: string, - expected_return: string, -) { - // call the swap function directly since this is with uscrt - return secretjsSender.asyncExecute( - pair.contract_addr, - secretAddress, - { - swap: { - offer_asset: { - info: { native_token: { denom: "uscrt" } }, - amount: fromAmount, - }, - expected_return, - // offer_asset: Asset, - // expected_return: Option - // belief_price: Option, - // max_spread: Option, - // to: Option, // TODO - }, - }, - "", - [ - { - amount: fromAmount, - denom: "uscrt", - }, - ], - getFeeForExecute(GAS_FOR_SWAP_NATIVE_COIN), - ); -} diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/extractError.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/extractError.ts deleted file mode 100644 index 0ccd822..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/extractError.ts +++ /dev/null @@ -1,13 +0,0 @@ -export const extractError = (result: { raw_log?: string; code: number }) => { - if ( - result?.raw_log && - result.raw_log.includes("Operation fell short of expected_return") - ) { - return "Swap fell short of expected return (slippage error)"; - } - if (result?.raw_log) { - return result.raw_log; - } - console.error(result); - return `Unknown error`; -}; diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/getBestRoute.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/getBestRoute.ts deleted file mode 100644 index 538bcf5..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/getBestRoute.ts +++ /dev/null @@ -1,177 +0,0 @@ -import BigNumber from "bignumber.js"; -import { - compute_offer_amount, - compute_swap, -} from "../blockchain-bridge/scrt/swap/swap"; -import { SwapPair } from "../types/SwapPair"; -import { getOfferAndAskPools } from "./getOfferAndAskPools"; -import { SwapTokenMap } from "../types/SwapToken"; - -export type RouteOutput = { - route: string[]; - toOutput?: BigNumber; - toWithGas?: BigNumber; - fromOutput?: BigNumber; - fromWithGas?: BigNumber; -}; - -export function getBestRoute({ - fromInput, - toInput, - cachedGasFeesUnfilledCoin, - isToEstimated, - routes, - tokens, - pairs, - balances, -}: { - fromInput: number; - toInput: number; - cachedGasFeesUnfilledCoin: number[]; - isToEstimated: boolean; - routes: string[][]; - tokens: SwapTokenMap; - pairs: Map; - balances: { [key: string]: string }; -}) { - const allRoutesOutputs: Array = []; - let bestRoute: string[] | null = null; - - let bestRouteToInput, - bestRouteToInputWithGas = new BigNumber(-Infinity); - let bestRouteFromInput, - bestRouteFromInputWithGas = new BigNumber(Infinity); - - for (let i = 0; i < routes.length; i++) { - const route = routes[i]; - - if (isToEstimated /* top input is filled */ || toInput === null) { - let from = new BigNumber(fromInput); - let to = new BigNumber(0); - for (let i = 0; i < route.length - 1; i++) { - const fromToken = route[i]; - const toToken = route[i + 1]; - const pair: SwapPair | undefined = pairs.get( - `${fromToken}${SwapPair.id_delimiter}${toToken}`, - ); - if (!pair) { - break; - } - - const { offer_pool, ask_pool } = getOfferAndAskPools( - fromToken, - toToken, - pair, - tokens, - balances, - ); - - const offer_amount = from; - if ( - offer_pool.isEqualTo(0) || - ask_pool.isEqualTo(0) || - offer_amount.isNaN() || - offer_amount.isLessThanOrEqualTo(0) - ) { - to = new BigNumber(0); - break; - } - - const { return_amount } = compute_swap( - offer_pool, - ask_pool, - offer_amount, - ); - - if (return_amount.isNaN() || return_amount.isLessThanOrEqualTo(0)) { - to = new BigNumber(0); - break; - } - - to = return_amount; - - if (i < route.length - 2) { - // setup for next iteration - from = return_amount; - } - } - - const toWithGas = to.minus(cachedGasFeesUnfilledCoin[route.length - 1]); - - allRoutesOutputs.push({ route, toOutput: to, toWithGas }); - - if (toWithGas.isGreaterThan(bestRouteToInputWithGas)) { - bestRouteFromInput = new BigNumber(fromInput); - bestRouteToInput = to; - bestRouteToInputWithGas = toWithGas; - bestRoute = route; - } - } else { - // isFromEstimated - // bottom input is filled - let from = new BigNumber(0); - let to = new BigNumber(toInput); - for (let i = route.length - 1; i > 0; i--) { - const fromToken = route[i - 1]; - const toToken = route[i]; - const pair: SwapPair | undefined = pairs.get( - `${fromToken}${SwapPair.id_delimiter}${toToken}`, - ); - if (!pair) { - break; - } - const { offer_pool, ask_pool } = getOfferAndAskPools( - fromToken, - toToken, - pair, - tokens, - balances, - ); - - const ask_amount = to; - if ( - offer_pool.isEqualTo(0) || - ask_pool.isEqualTo(0) || - ask_amount.gt(ask_pool) || - ask_amount.isNaN() || - ask_amount.isZero() - ) { - from = new BigNumber(Infinity); - break; - } - - const { offer_amount } = compute_offer_amount( - offer_pool, - ask_pool, - ask_amount, - ); - - if (offer_amount.isNaN() || offer_amount.isLessThanOrEqualTo(0)) { - from = new BigNumber(Infinity); - break; - } - - from = offer_amount; - - if (i > 1) { - // setup for next iteration - to = offer_amount; - } - } - - const fromWithGas = from.plus( - cachedGasFeesUnfilledCoin[route.length - 1], - ); - - allRoutesOutputs.push({ route, fromOutput: from, fromWithGas }); - - if (fromWithGas.isLessThan(bestRouteFromInputWithGas)) { - bestRouteFromInput = from; - bestRouteFromInputWithGas = fromWithGas; - bestRouteToInput = new BigNumber(toInput); - bestRoute = route; - } - } - } - return { bestRoute, allRoutesOutputs, bestRouteToInput, bestRouteFromInput }; -} diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/getHops.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/getHops.ts deleted file mode 100644 index 3e1830a..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/getHops.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { SecretNetworkClient } from "secretjs"; -import { PairMap, SwapPair } from "../types/SwapPair"; -import { Token } from "../types/trade"; - -function getTokenDetails( - fromToken: string, - pair: SwapPair | undefined -): { address: string; code_hash: string } | "scrt" { - if (fromToken === "uscrt") { - return "scrt"; - } else { - const tokenInfo = pair?.asset_infos.find( - (a) => (a.info as Token)?.token?.contract_addr === fromToken - )?.info as Token; - - return { - address: fromToken, - code_hash: tokenInfo.token.token_code_hash, - }; - } -} - -// getTokenDetails("secret1k0jntykt7e4g3y88ltc60czgjuqdy4c9e8fzek", undefined); - -function getPairCodeHash( - pair_address: string, - secretjs: SecretNetworkClient -): Promise { - return SwapPair.getPairCodeHash(pair_address, secretjs); -} - -async function constructHop( - fromToken: string, - toToken: string, - pairs: PairMap, - secretjs: SecretNetworkClient -) { - const pair = pairs.get(`${fromToken}${SwapPair.id_delimiter}${toToken}`); - if (!pair) { - return null; - } - - const from_token = getTokenDetails(fromToken, pair); - const pair_code_hash = await getPairCodeHash(pair.contract_addr, secretjs); - - return { - from_token, - pair_address: pair.contract_addr, - pair_code_hash, - }; -} - -export async function getHops( - bestRoute: string[], - pairs: PairMap, - secretjs: SecretNetworkClient -) { - const hops = await Promise.all( - bestRoute.slice(0, -1).map(async (fromToken, idx) => { - const toToken = bestRoute[idx + 1]; - return constructHop(fromToken, toToken, pairs, secretjs); - }) - ); - return hops.filter((x) => x !== null); -} diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/getOfferAndAskPools.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/getOfferAndAskPools.ts deleted file mode 100644 index 44872a5..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/getOfferAndAskPools.ts +++ /dev/null @@ -1,42 +0,0 @@ -import BigNumber from "bignumber.js"; -import { SwapPair } from "../types/SwapPair"; -import { SwapTokenMap } from "../types/SwapToken"; -import { humanizeBalance } from "../utils"; - -export function getOfferAndAskPools( - fromToken: string, - toToken: string, - pair: SwapPair, - tokens: SwapTokenMap, - balances: { [key: string]: string } -): { offer_pool: BigNumber; ask_pool: BigNumber } { - if (!pair) { - return { offer_pool: new BigNumber(0), ask_pool: new BigNumber(0) }; - } - - const fromDecimals = tokens.get(fromToken)?.decimals ?? 18; - const toDecimals = tokens.get(toToken)?.decimals ?? 18; - - // we normalize offer_pool & ask_pool - // we could also canonicalize offer_amount & ask_amount - // but this way is less code because we get the results normalized - - const offer_pool = humanizeBalance( - new BigNumber(balances[`${fromToken}-${pair.identifier()}`]), - fromDecimals - ); - const ask_pool = humanizeBalance( - new BigNumber(balances[`${toToken}-${pair.identifier()}`]), - toDecimals - ); - - // this condition tested as never true, - // therefore commented out in case a revert is needed later. 2021-01-13 - // if (offer_pool.isNaN() || ask_pool.isNaN()) { - // const balances = await this.props.refreshPools({ pair }); - // offer_pool = humanizeBalance(new BigNumber(balances[`${fromToken}-${pair.identifier()}`] as any), fromDecimals); - // ask_pool = humanizeBalance(new BigNumber(balances[`${toToken}-${pair.identifier()}`] as any), toDecimals); - // } - - return { offer_pool, ask_pool }; -} diff --git a/utils/secretjs/SecretSwapSite/SwapFunctions/storeResult.ts b/utils/secretjs/SecretSwapSite/SwapFunctions/storeResult.ts deleted file mode 100644 index 90c14ef..0000000 --- a/utils/secretjs/SecretSwapSite/SwapFunctions/storeResult.ts +++ /dev/null @@ -1,40 +0,0 @@ -import BigNumber from "bignumber.js"; -import { - extractError, -} from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils"; -// import { RouteOutput } from '@/components/Swap/RouteRow'; -import { humanizeBalance } from "@/utils/secretjs/SecretSwapSite/utils"; -import { storeTxResultLocally } from "@/utils/secretjs/SecretSwapSite/Swap/utils"; -import { TxResponse } from "secretjs"; -import extractValueFromLogs from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/extractValueFromLogs"; - -export function storeResult( - result: TxResponse, - fromAmount: string, - fromDecimals: number, - bestRoute: string[], - toDecimals: number, -) { - if (result?.code) { - const error = extractError(result); - throw new Error(error); - } - - storeTxResultLocally(result); - - const sent = humanizeBalance( - new BigNumber(fromAmount), - fromDecimals, - ).toFixed(); - const received = humanizeBalance( - new BigNumber( - extractValueFromLogs(result, "return_amount", bestRoute != null), - ), - toDecimals, - ).toFixed(); - - const fromTokenFromTxn = extractValueFromLogs(result, "offer_asset", false); - const toTokenFromTxn = extractValueFromLogs(result, "ask_asset", true); - - return { fromTokenFromTxn, toTokenFromTxn, sent, received }; -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/index.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/index.ts deleted file mode 100644 index 3954b41..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -// export * from './eth'; -// export * from './eth/getBalances'; -// export * from './scrt'; -// export { networkFromToken } from './eth/networks'; -// export { NETWORKS } from './eth/networks'; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MerkleDistributor.json b/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MerkleDistributor.json deleted file mode 100644 index 0eb3c20..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MerkleDistributor.json +++ /dev/null @@ -1,13344 +0,0 @@ -{ - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "token_", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "merkleRoot_", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Claimed", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - } - ], - "name": "claim", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "collectDust", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "isClaimed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "merkleRoot", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "allSourcePaths": { - "1": "/home/toml/.brownie/packages/OpenZeppelin/openzeppelin-contracts@3.1.0/contracts/cryptography/MerkleProof.sol", - "4": "/home/toml/.brownie/packages/OpenZeppelin/openzeppelin-contracts@3.1.0/contracts/token/ERC20/IERC20.sol", - "6": "contracts/MerkleDistributor.sol", - "7": "contracts/interfaces/IMerkleDistributor.sol" - }, - "ast": { - "absolutePath": "contracts/MerkleDistributor.sol", - "exportedSymbols": { - "MerkleDistributor": [ - 223 - ] - }, - "id": 224, - "license": "UNLICENSED", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1, - "literals": [ - "solidity", - "=", - "0.6", - ".11" - ], - "nodeType": "PragmaDirective", - "src": "39:24:6" - }, - { - "absolutePath": "/home/toml/.brownie/packages/OpenZeppelin/openzeppelin-contracts@3.1.0/contracts/token/ERC20/IERC20.sol", - "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol", - "id": 2, - "nodeType": "ImportDirective", - "scope": 224, - "sourceUnit": 477, - "src": "65:56:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "/home/toml/.brownie/packages/OpenZeppelin/openzeppelin-contracts@3.1.0/contracts/cryptography/MerkleProof.sol", - "file": "@openzeppelin/contracts/cryptography/MerkleProof.sol", - "id": 3, - "nodeType": "ImportDirective", - "scope": 224, - "sourceUnit": 399, - "src": "122:62:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "contracts/interfaces/IMerkleDistributor.sol", - "file": "./interfaces/IMerkleDistributor.sol", - "id": 4, - "nodeType": "ImportDirective", - "scope": 224, - "sourceUnit": 264, - "src": "185:45:6", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 5, - "name": "IMerkleDistributor", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 263, - "src": "262:18:6", - "typeDescriptions": { - "typeIdentifier": "t_contract$_IMerkleDistributor_$263", - "typeString": "contract IMerkleDistributor" - } - }, - "id": 6, - "nodeType": "InheritanceSpecifier", - "src": "262:18:6" - } - ], - "contractDependencies": [ - 263 - ], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 223, - "linearizedBaseContracts": [ - 223, - 263 - ], - "name": "MerkleDistributor", - "nodeType": "ContractDefinition", - "nodes": [ - { - "baseFunctions": [ - 230 - ], - "constant": false, - "functionSelector": "fc0c546a", - "id": 9, - "mutability": "immutable", - "name": "token", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 8, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "312:8:6" - }, - "scope": 223, - "src": "287:39:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 7, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "287:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "public" - }, - { - "baseFunctions": [ - 235 - ], - "constant": false, - "functionSelector": "2eb4a7ab", - "id": 12, - "mutability": "immutable", - "name": "merkleRoot", - "nodeType": "VariableDeclaration", - "overrides": { - "id": 11, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "357:8:6" - }, - "scope": 223, - "src": "332:44:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 10, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "332:7:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "public" - }, - { - "constant": false, - "id": 16, - "mutability": "mutable", - "name": "claimedBitMap", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 223, - "src": "426:49:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - }, - "typeName": { - "id": 15, - "keyType": { - "id": 13, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "434:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Mapping", - "src": "426:27:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - }, - "valueType": { - "id": 14, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "445:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - }, - "value": null, - "visibility": "private" - }, - { - "constant": false, - "id": 18, - "mutability": "mutable", - "name": "deployer", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 223, - "src": "481:16:6", - "stateVariable": true, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 17, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "481:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "body": { - "id": 38, - "nodeType": "Block", - "src": "560:96:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 27, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 25, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "570:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 26, - "name": "token_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 20, - "src": "578:6:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "570:14:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 28, - "nodeType": "ExpressionStatement", - "src": "570:14:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 31, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 29, - "name": "merkleRoot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12, - "src": "594:10:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "id": 30, - "name": "merkleRoot_", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 22, - "src": "607:11:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "594:24:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 32, - "nodeType": "ExpressionStatement", - "src": "594:24:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 36, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 33, - "name": "deployer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18, - "src": "628:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 34, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "639:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 35, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "639:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "628:21:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 37, - "nodeType": "ExpressionStatement", - "src": "628:21:6" - } - ] - }, - "documentation": null, - "id": 39, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 23, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 20, - "mutability": "mutable", - "name": "token_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 39, - "src": "516:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 19, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "516:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 22, - "mutability": "mutable", - "name": "merkleRoot_", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 39, - "src": "532:19:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 21, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "532:7:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "515:37:6" - }, - "returnParameters": { - "id": 24, - "nodeType": "ParameterList", - "parameters": [], - "src": "560:0:6" - }, - "scope": 223, - "src": "504:152:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "baseFunctions": [ - 242 - ], - "body": { - "id": 78, - "nodeType": "Block", - "src": "732:255:6", - "statements": [ - { - "assignments": [ - 48 - ], - "declarations": [ - { - "constant": false, - "id": 48, - "mutability": "mutable", - "name": "claimedWordIndex", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 78, - "src": "742:24:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 47, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "742:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 52, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 51, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 49, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 41, - "src": "769:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "323536", - "id": 50, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "777:3:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "src": "769:11:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "742:38:6" - }, - { - "assignments": [ - 54 - ], - "declarations": [ - { - "constant": false, - "id": 54, - "mutability": "mutable", - "name": "claimedBitIndex", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 78, - "src": "790:23:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 53, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "790:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 58, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 57, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 55, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 41, - "src": "816:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "hexValue": "323536", - "id": 56, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "824:3:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "src": "816:11:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "790:37:6" - }, - { - "assignments": [ - 60 - ], - "declarations": [ - { - "constant": false, - "id": 60, - "mutability": "mutable", - "name": "claimedWord", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 78, - "src": "837:19:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 59, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "837:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 64, - "initialValue": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 61, - "name": "claimedBitMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16, - "src": "859:13:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 63, - "indexExpression": { - "argumentTypes": null, - "id": 62, - "name": "claimedWordIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 48, - "src": "873:16:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "859:31:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "837:53:6" - }, - { - "assignments": [ - 66 - ], - "declarations": [ - { - "constant": false, - "id": 66, - "mutability": "mutable", - "name": "mask", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 78, - "src": "900:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 65, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "900:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 71, - "initialValue": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 69, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 67, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "916:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "argumentTypes": null, - "id": 68, - "name": "claimedBitIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 54, - "src": "921:15:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "916:20:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 70, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "915:22:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "900:37:6" - }, - { - "expression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 76, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 74, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 72, - "name": "claimedWord", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 60, - "src": "954:11:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "&", - "rightExpression": { - "argumentTypes": null, - "id": 73, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "968:4:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "954:18:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 75, - "name": "mask", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 66, - "src": "976:4:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "954:26:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 46, - "id": 77, - "nodeType": "Return", - "src": "947:33:6" - } - ] - }, - "documentation": null, - "functionSelector": "9e34070f", - "id": 79, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "isClaimed", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 43, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "708:8:6" - }, - "parameters": { - "id": 42, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 41, - "mutability": "mutable", - "name": "index", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 79, - "src": "681:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 40, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "681:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "680:15:6" - }, - "returnParameters": { - "id": 46, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 45, - "mutability": "mutable", - "name": "", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 79, - "src": "726:4:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 44, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "726:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "725:6:6" - }, - "scope": 223, - "src": "662:325:6", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 109, - "nodeType": "Block", - "src": "1037:226:6", - "statements": [ - { - "assignments": [ - 85 - ], - "declarations": [ - { - "constant": false, - "id": 85, - "mutability": "mutable", - "name": "claimedWordIndex", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 109, - "src": "1047:24:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 84, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1047:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 89, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 88, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 86, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "1074:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "/", - "rightExpression": { - "argumentTypes": null, - "hexValue": "323536", - "id": 87, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1082:3:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "src": "1074:11:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1047:38:6" - }, - { - "assignments": [ - 91 - ], - "declarations": [ - { - "constant": false, - "id": 91, - "mutability": "mutable", - "name": "claimedBitIndex", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 109, - "src": "1095:23:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 90, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1095:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 95, - "initialValue": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 94, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 92, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 81, - "src": "1121:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "%", - "rightExpression": { - "argumentTypes": null, - "hexValue": "323536", - "id": 93, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1129:3:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_256_by_1", - "typeString": "int_const 256" - }, - "value": "256" - }, - "src": "1121:11:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1095:37:6" - }, - { - "expression": { - "argumentTypes": null, - "id": 107, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 96, - "name": "claimedBitMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16, - "src": "1142:13:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 98, - "indexExpression": { - "argumentTypes": null, - "id": 97, - "name": "claimedWordIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "1156:16:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "nodeType": "IndexAccess", - "src": "1142:31:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 106, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 99, - "name": "claimedBitMap", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 16, - "src": "1188:13:6", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_uint256_$_t_uint256_$", - "typeString": "mapping(uint256 => uint256)" - } - }, - "id": 101, - "indexExpression": { - "argumentTypes": null, - "id": 100, - "name": "claimedWordIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 85, - "src": "1202:16:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "1188:31:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "BinaryOperation", - "operator": "|", - "rightExpression": { - "argumentTypes": null, - "components": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 104, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "hexValue": "31", - "id": 102, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1235:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_1_by_1", - "typeString": "int_const 1" - }, - "value": "1" - }, - "nodeType": "BinaryOperation", - "operator": "<<", - "rightExpression": { - "argumentTypes": null, - "id": 103, - "name": "claimedBitIndex", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 91, - "src": "1240:15:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1235:20:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "id": 105, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "1234:22:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1188:68:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1142:114:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 108, - "nodeType": "ExpressionStatement", - "src": "1142:114:6" - } - ] - }, - "documentation": null, - "id": 110, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "_setClaimed", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 82, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 81, - "mutability": "mutable", - "name": "index", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 110, - "src": "1014:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 80, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1014:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1013:15:6" - }, - "returnParameters": { - "id": 83, - "nodeType": "ParameterList", - "parameters": [], - "src": "1037:0:6" - }, - "scope": 223, - "src": "993:270:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "private" - }, - { - "baseFunctions": [ - 254 - ], - "body": { - "id": 173, - "nodeType": "Block", - "src": "1420:593:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 127, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "nodeType": "UnaryOperation", - "operator": "!", - "prefix": true, - "src": "1438:17:6", - "subExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 125, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "1449:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 124, - "name": "isClaimed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 79, - "src": "1439:9:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", - "typeString": "function (uint256) view returns (bool)" - } - }, - "id": 126, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1439:16:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4d65726b6c654469737472696275746f723a2044726f7020616c726561647920636c61696d65642e", - "id": 128, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1457:42:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_3dd4fedd52cf57495a0383b3611a398031abfe6e8cda07bccd9f5f795a45333c", - "typeString": "literal_string \"MerkleDistributor: Drop already claimed.\"" - }, - "value": "MerkleDistributor: Drop already claimed." - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_3dd4fedd52cf57495a0383b3611a398031abfe6e8cda07bccd9f5f795a45333c", - "typeString": "literal_string \"MerkleDistributor: Drop already claimed.\"" - } - ], - "id": 123, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1430:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 129, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1430:70:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 130, - "nodeType": "ExpressionStatement", - "src": "1430:70:6" - }, - { - "assignments": [ - 132 - ], - "declarations": [ - { - "constant": false, - "id": 132, - "mutability": "mutable", - "name": "node", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 173, - "src": "1547:12:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "typeName": { - "id": 131, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1547:7:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "value": null, - "visibility": "internal" - } - ], - "id": 141, - "initialValue": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 136, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "1589:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 137, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 114, - "src": "1596:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 138, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "1605:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 134, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -1, - "src": "1572:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 135, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberName": "encodePacked", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "1572:16:6", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", - "typeString": "function () pure returns (bytes memory)" - } - }, - "id": 139, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1572:40:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "id": 133, - "name": "keccak256", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -8, - "src": "1562:9:6", - "typeDescriptions": { - "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", - "typeString": "function (bytes memory) pure returns (bytes32)" - } - }, - "id": 140, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1562:51:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "1547:66:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 145, - "name": "merkleProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 119, - "src": "1663:11:6", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", - "typeString": "bytes32[] calldata" - } - }, - { - "argumentTypes": null, - "id": 146, - "name": "merkleRoot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 12, - "src": "1676:10:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "argumentTypes": null, - "id": 147, - "name": "node", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 132, - "src": "1688:4:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", - "typeString": "bytes32[] calldata" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - ], - "expression": { - "argumentTypes": null, - "id": 143, - "name": "MerkleProof", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 398, - "src": "1644:11:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_MerkleProof_$398_$", - "typeString": "type(library MerkleProof)" - } - }, - "id": 144, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "verify", - "nodeType": "MemberAccess", - "referencedDeclaration": 397, - "src": "1644:18:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_bool_$", - "typeString": "function (bytes32[] memory,bytes32,bytes32) pure returns (bool)" - } - }, - "id": 148, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1644:49:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f662e", - "id": 149, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1707:35:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6afb067511959dbd4bc272e5aed6b4a5d429e99f0f504267fbd07e02406282d2", - "typeString": "literal_string \"MerkleDistributor: Invalid proof.\"" - }, - "value": "MerkleDistributor: Invalid proof." - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_6afb067511959dbd4bc272e5aed6b4a5d429e99f0f504267fbd07e02406282d2", - "typeString": "literal_string \"MerkleDistributor: Invalid proof.\"" - } - ], - "id": 142, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1623:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 150, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1623:129:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 151, - "nodeType": "ExpressionStatement", - "src": "1623:129:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 153, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "1822:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 152, - "name": "_setClaimed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 110, - "src": "1810:11:6", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 154, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1810:18:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 155, - "nodeType": "ExpressionStatement", - "src": "1810:18:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 161, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 114, - "src": "1882:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 162, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "1891:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 158, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "1866:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 157, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 476, - "src": "1859:6:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$476_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 159, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1859:13:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$476", - "typeString": "contract IERC20" - } - }, - "id": 160, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 425, - "src": "1859:22:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 163, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1859:39:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "4d65726b6c654469737472696275746f723a205472616e73666572206661696c65642e", - "id": 164, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1912:37:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_783c2b0153f1de5bc91d20a6a00fab231491ffa4eb21c15a6c6746946abb735e", - "typeString": "literal_string \"MerkleDistributor: Transfer failed.\"" - }, - "value": "MerkleDistributor: Transfer failed." - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_783c2b0153f1de5bc91d20a6a00fab231491ffa4eb21c15a6c6746946abb735e", - "typeString": "literal_string \"MerkleDistributor: Transfer failed.\"" - } - ], - "id": 156, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1838:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 165, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1838:121:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 166, - "nodeType": "ExpressionStatement", - "src": "1838:121:6" - }, - { - "eventCall": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 168, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 112, - "src": "1983:5:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - { - "argumentTypes": null, - "id": 169, - "name": "account", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 114, - "src": "1990:7:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 170, - "name": "amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 116, - "src": "1999:6:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 167, - "name": "Claimed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 262, - "src": "1975:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (uint256,address,uint256)" - } - }, - "id": 171, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "1975:31:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 172, - "nodeType": "EmitStatement", - "src": "1970:36:6" - } - ] - }, - "documentation": null, - "functionSelector": "2e7ba6ef", - "id": 174, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "claim", - "nodeType": "FunctionDefinition", - "overrides": { - "id": 121, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1411:8:6" - }, - "parameters": { - "id": 120, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 112, - "mutability": "mutable", - "name": "index", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 174, - "src": "1293:13:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 111, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1293:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 114, - "mutability": "mutable", - "name": "account", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 174, - "src": "1316:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 113, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1316:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 116, - "mutability": "mutable", - "name": "amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 174, - "src": "1341:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 115, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "1341:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 119, - "mutability": "mutable", - "name": "merkleProof", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 174, - "src": "1365:30:6", - "stateVariable": false, - "storageLocation": "calldata", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_calldata_ptr", - "typeString": "bytes32[]" - }, - "typeName": { - "baseType": { - "id": 117, - "name": "bytes32", - "nodeType": "ElementaryTypeName", - "src": "1365:7:6", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "id": 118, - "length": null, - "nodeType": "ArrayTypeName", - "src": "1365:9:6", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr", - "typeString": "bytes32[]" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "1283:118:6" - }, - "returnParameters": { - "id": 122, - "nodeType": "ParameterList", - "parameters": [], - "src": "1420:0:6" - }, - "scope": 223, - "src": "1269:744:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 221, - "nodeType": "Block", - "src": "2082:311:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 185, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 182, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": -15, - "src": "2100:3:6", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 183, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2100:10:6", - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "id": 184, - "name": "deployer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18, - "src": "2114:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2100:22:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "216465706c6f796572", - "id": 186, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2124:11:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6cb5532cb4c61edd0634d44b8b17c586c2f1587df412729c6fd7e83b39536cf3", - "typeString": "literal_string \"!deployer\"" - }, - "value": "!deployer" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_6cb5532cb4c61edd0634d44b8b17c586c2f1587df412729c6fd7e83b39536cf3", - "typeString": "literal_string \"!deployer\"" - } - ], - "id": 181, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2092:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 187, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2092:44:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 188, - "nodeType": "ExpressionStatement", - "src": "2092:44:6" - }, - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 192, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 190, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 176, - "src": "2154:6:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "argumentTypes": null, - "id": 191, - "name": "token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 9, - "src": "2164:5:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2154:15:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "argumentTypes": null, - "hexValue": "21746f6b656e", - "id": 193, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2171:8:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6b08df48b67a8acda5828e85af8c62865fe7bd53995164d29920fdc8d1b5e5d9", - "typeString": "literal_string \"!token\"" - }, - "value": "!token" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_6b08df48b67a8acda5828e85af8c62865fe7bd53995164d29920fdc8d1b5e5d9", - "typeString": "literal_string \"!token\"" - } - ], - "id": 189, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "2146:7:6", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 194, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2146:34:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 195, - "nodeType": "ExpressionStatement", - "src": "2146:34:6" - }, - { - "condition": { - "argumentTypes": null, - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 201, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "argumentTypes": null, - "id": 196, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 176, - "src": "2194:6:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "hexValue": "30", - "id": 199, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2212:1:6", - "subdenomination": null, - "typeDescriptions": { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - }, - "value": "0" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_rational_0_by_1", - "typeString": "int_const 0" - } - ], - "id": 198, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2204:7:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 197, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2204:7:6", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 200, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2204:10:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "src": "2194:20:6", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": { - "id": 219, - "nodeType": "Block", - "src": "2320:67:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 215, - "name": "deployer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18, - "src": "2358:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "argumentTypes": null, - "id": 216, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 178, - "src": "2368:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 212, - "name": "_token", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 176, - "src": "2341:6:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 211, - "name": "IERC20", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 476, - "src": "2334:6:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_IERC20_$476_$", - "typeString": "type(contract IERC20)" - } - }, - "id": 213, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2334:14:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_IERC20_$476", - "typeString": "contract IERC20" - } - }, - "id": 214, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": 425, - "src": "2334:23:6", - "typeDescriptions": { - "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", - "typeString": "function (address,uint256) external returns (bool)" - } - }, - "id": 217, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2334:42:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 218, - "nodeType": "ExpressionStatement", - "src": "2334:42:6" - } - ] - }, - "id": 220, - "nodeType": "IfStatement", - "src": "2190:197:6", - "trueBody": { - "id": 210, - "nodeType": "Block", - "src": "2216:98:6", - "statements": [ - { - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 207, - "name": "_amount", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 178, - "src": "2295:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "id": 204, - "name": "deployer", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 18, - "src": "2276:8:6", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 203, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2268:8:6", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_payable_$", - "typeString": "type(address payable)" - }, - "typeName": { - "id": 202, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2268:8:6", - "stateMutability": "payable", - "typeDescriptions": { - "typeIdentifier": null, - "typeString": null - } - } - }, - "id": 205, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2268:17:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address_payable", - "typeString": "address payable" - } - }, - "id": 206, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "transfer", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "2268:26:6", - "typeDescriptions": { - "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", - "typeString": "function (uint256)" - } - }, - "id": 208, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "2268:35:6", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 209, - "nodeType": "ExpressionStatement", - "src": "2268:35:6" - } - ] - } - } - ] - }, - "documentation": null, - "functionSelector": "b14b990f", - "id": 222, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "collectDust", - "nodeType": "FunctionDefinition", - "overrides": null, - "parameters": { - "id": 179, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 176, - "mutability": "mutable", - "name": "_token", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 222, - "src": "2040:14:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 175, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2040:7:6", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 178, - "mutability": "mutable", - "name": "_amount", - "nodeType": "VariableDeclaration", - "overrides": null, - "scope": 222, - "src": "2056:15:6", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "typeName": { - "id": 177, - "name": "uint256", - "nodeType": "ElementaryTypeName", - "src": "2056:7:6", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "2039:33:6" - }, - "returnParameters": { - "id": 180, - "nodeType": "ParameterList", - "parameters": [], - "src": "2082:0:6" - }, - "scope": 223, - "src": "2019:374:6", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "external" - } - ], - "scope": 224, - "src": "232:2163:6" - } - ], - "src": "39:2357:6" - }, - "bytecode": "60c060405234801561001057600080fd5b506040516107f53803806107f58339818101604052604081101561003357600080fd5b5080516020909101516001600160601b0319606083901b1660805260a0819052600180546001600160a01b031916331790556001600160a01b039091169061075861009d6000398061024252806103ea5250806102b3528061047f52806105c452506107586000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80632e7ba6ef1461005c5780632eb4a7ab146100ea5780639e34070f14610104578063b14b990f14610135578063fc0c546a14610161575b600080fd5b6100e86004803603608081101561007257600080fd5b8135916001600160a01b0360208201351691604082013591908101906080810160608201356401000000008111156100a957600080fd5b8201836020820111156100bb57600080fd5b803590602001918460208302840111640100000000831117156100dd57600080fd5b509092509050610185565b005b6100f26103e8565b60408051918252519081900360200190f35b6101216004803603602081101561011a57600080fd5b503561040c565b604080519115158252519081900360200190f35b6100e86004803603604081101561014b57600080fd5b506001600160a01b038135169060200135610432565b6101696105c2565b604080516001600160a01b039092168252519081900360200190f35b61018e8561040c565b156101ca5760405162461bcd60e51b81526004018080602001828103825260288152602001806106b76028913960400191505060405180910390fd5b6040805160208082018890526bffffffffffffffffffffffff19606088901b168284015260548083018790528351808403909101815260748301808552815191830191909120609492860280850184019095528582529361026d939192879287928392909101908490808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506105e69050565b6102a85760405162461bcd60e51b81526004018080602001828103825260218152602001806106df6021913960400191505060405180910390fd5b6102b18661068f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b505050506040513d602081101561035b57600080fd5b50516103985760405162461bcd60e51b81526004018080602001828103825260238152602001806107006023913960400191505060405180910390fd5b604080518781526001600160a01b038716602082015280820186905290517f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269181900360600190a1505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6101008104600090815260208190526040902054600160ff9092169190911b9081161490565b6001546001600160a01b0316331461047d576040805162461bcd60e51b815260206004820152600960248201526810b232b83637bcb2b960b91b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156104ed576040805162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015290519081900360640190fd5b6001600160a01b03821661053b576001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610535573d6000803e3d6000fd5b506105be565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b15801561059157600080fd5b505af11580156105a5573d6000803e3d6000fd5b505050506040513d60208110156105bb57600080fd5b50505b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081815b855181101561068457600086828151811061060257fe5b60200260200101519050808311610649578281604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925061067b565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016105eb565b509092149392505050565b610100810460009081526020819052604090208054600160ff9093169290921b909117905556fe4d65726b6c654469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f662e4d65726b6c654469737472696275746f723a205472616e73666572206661696c65642ea2646970667358221220e2ccd08e0e2b6cde7913977c01f24b47e119a47ca5077788e8ab63bbdd49e0fe64736f6c634300060b0033", - "bytecodeSha1": "796e9312f62ff52261adcb06535f8b480e08c04a", - "compiler": { - "evm_version": "istanbul", - "optimizer": { - "enabled": true, - "runs": 200 - }, - "version": "0.6.11+commit.5ef660b1" - }, - "contractName": "MerkleDistributor", - "coverageMap": { - "branches": { - "1": { - "MerkleProof.verify": { - "21": [ - 749, - 777, - false - ] - } - }, - "4": {}, - "6": { - "MerkleDistributor.claim": { - "15": [ - 1438, - 1455, - true - ], - "16": [ - 1644, - 1693, - true - ], - "17": [ - 1859, - 1898, - true - ] - }, - "MerkleDistributor.collectDust": { - "18": [ - 2100, - 2122, - true - ], - "19": [ - 2154, - 2169, - true - ], - "20": [ - 2194, - 2214, - false - ] - } - }, - "7": {} - }, - "statements": { - "1": { - "MerkleProof.verify": { - "10": [ - 875, - 945 - ], - "11": [ - 1062, - 1132 - ], - "12": [ - 680, - 683 - ], - "13": [ - 1242, - 1269 - ] - } - }, - "4": {}, - "6": { - "MerkleDistributor._setClaimed": { - "14": [ - 1142, - 1256 - ] - }, - "MerkleDistributor.claim": { - "0": [ - 1430, - 1500 - ], - "1": [ - 1623, - 1752 - ], - "2": [ - 1810, - 1828 - ], - "3": [ - 1838, - 1959 - ], - "4": [ - 1970, - 2006 - ] - }, - "MerkleDistributor.collectDust": { - "6": [ - 2092, - 2136 - ], - "7": [ - 2146, - 2180 - ], - "8": [ - 2268, - 2303 - ], - "9": [ - 2334, - 2376 - ] - }, - "MerkleDistributor.isClaimed": { - "5": [ - 947, - 980 - ] - } - }, - "7": {} - } - }, - "dependencies": [ - "OpenZeppelin/openzeppelin-contracts@3.1.0/IERC20", - "IMerkleDistributor", - "OpenZeppelin/openzeppelin-contracts@3.1.0/MerkleProof" - ], - "deployedBytecode": "608060405234801561001057600080fd5b50600436106100575760003560e01c80632e7ba6ef1461005c5780632eb4a7ab146100ea5780639e34070f14610104578063b14b990f14610135578063fc0c546a14610161575b600080fd5b6100e86004803603608081101561007257600080fd5b8135916001600160a01b0360208201351691604082013591908101906080810160608201356401000000008111156100a957600080fd5b8201836020820111156100bb57600080fd5b803590602001918460208302840111640100000000831117156100dd57600080fd5b509092509050610185565b005b6100f26103e8565b60408051918252519081900360200190f35b6101216004803603602081101561011a57600080fd5b503561040c565b604080519115158252519081900360200190f35b6100e86004803603604081101561014b57600080fd5b506001600160a01b038135169060200135610432565b6101696105c2565b604080516001600160a01b039092168252519081900360200190f35b61018e8561040c565b156101ca5760405162461bcd60e51b81526004018080602001828103825260288152602001806106b76028913960400191505060405180910390fd5b6040805160208082018890526bffffffffffffffffffffffff19606088901b168284015260548083018790528351808403909101815260748301808552815191830191909120609492860280850184019095528582529361026d939192879287928392909101908490808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506105e69050565b6102a85760405162461bcd60e51b81526004018080602001828103825260218152602001806106df6021913960400191505060405180910390fd5b6102b18661068f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb86866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561033157600080fd5b505af1158015610345573d6000803e3d6000fd5b505050506040513d602081101561035b57600080fd5b50516103985760405162461bcd60e51b81526004018080602001828103825260238152602001806107006023913960400191505060405180910390fd5b604080518781526001600160a01b038716602082015280820186905290517f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269181900360600190a1505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6101008104600090815260208190526040902054600160ff9092169190911b9081161490565b6001546001600160a01b0316331461047d576040805162461bcd60e51b815260206004820152600960248201526810b232b83637bcb2b960b91b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156104ed576040805162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015290519081900360640190fd5b6001600160a01b03821661053b576001546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610535573d6000803e3d6000fd5b506105be565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519184169163a9059cbb916044808201926020929091908290030181600087803b15801561059157600080fd5b505af11580156105a5573d6000803e3d6000fd5b505050506040513d60208110156105bb57600080fd5b50505b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600081815b855181101561068457600086828151811061060257fe5b60200260200101519050808311610649578281604051602001808381526020018281526020019250505060405160208183030381529060405280519060200120925061067b565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016105eb565b509092149392505050565b610100810460009081526020819052604090208054600160ff9093169290921b909117905556fe4d65726b6c654469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f662e4d65726b6c654469737472696275746f723a205472616e73666572206661696c65642ea2646970667358221220e2ccd08e0e2b6cde7913977c01f24b47e119a47ca5077788e8ab63bbdd49e0fe64736f6c634300060b0033", - "deployedSourceMap": "232:2163:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1269:744;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1269:744:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:744:6;;-1:-1:-1;1269:744:6;-1:-1:-1;1269:744:6;:::i;:::-;;332:44;;;:::i;:::-;;;;;;;;;;;;;;;;662:325;;;;;;;;;;;;;;;;-1:-1:-1;662:325:6;;:::i;:::-;;;;;;;;;;;;;;;;;;2019:374;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2019:374:6;;;;;;;;:::i;287:39::-;;;:::i;:::-;;;;-1:-1:-1;;;;;287:39:6;;;;;;;;;;;;;;1269:744;1439:16;1449:5;1439:9;:16::i;:::-;1438:17;1430:70;;;;-1:-1:-1;;;1430:70:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1572:40;;;;;;;;;;-1:-1:-1;;1572:40:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1562:51;;;;;;;;;1644:49;;;;;;;;;;;;;;;1562:51;1644:49;;1572:40;;1663:11;;;;;;1644:49;;;;1663:11;;1644:49;1663:11;1644:49;;;;;;;;;-1:-1:-1;1676:10:6;;-1:-1:-1;1688:4:6;;-1:-1:-1;1644:18:6;;-1:-1:-1;1644:49:6:i;:::-;1623:129;;;;-1:-1:-1;;;1623:129:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1810:18;1822:5;1810:11;:18::i;:::-;1866:5;-1:-1:-1;;;;;1859:22:6;;1882:7;1891:6;1859:39;;;;;;;;;;;;;-1:-1:-1;;;;;1859:39:6;-1:-1:-1;;;;;1859:39:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1859:39:6;1838:121;;;;-1:-1:-1;;;1838:121:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1975:31;;;;;;-1:-1:-1;;;;;1975:31:6;;;;;;;;;;;;;;;;;;;;;;;1269:744;;;;;;:::o;332:44::-;;;:::o;662:325::-;777:3;769:11;;726:4;859:31;;;;;;;;;;;916:1;816:11;;;;916:20;;;;954:18;;;:26;;662:325::o;2019:374::-;2114:8;;-1:-1:-1;;;;;2114:8:6;2100:10;:22;2092:44;;;;;-1:-1:-1;;;2092:44:6;;;;;;;;;;;;-1:-1:-1;;;2092:44:6;;;;;;;;;;;;;;;2164:5;-1:-1:-1;;;;;2154:15:6;:6;-1:-1:-1;;;;;2154:15:6;;;2146:34;;;;;-1:-1:-1;;;2146:34:6;;;;;;;;;;;;-1:-1:-1;;;2146:34:6;;;;;;;;;;;;;;;-1:-1:-1;;;;;2194:20:6;;2190:197;;2276:8;;2268:35;;-1:-1:-1;;;;;2276:8:6;;;;2268:35;;;;;2295:7;;2276:8;2268:35;2276:8;2268:35;2295:7;2276:8;2268:35;;;;;;;;;;;;;;;;;;;;;2190:197;;;2358:8;;2334:42;;;-1:-1:-1;;;2334:42:6;;-1:-1:-1;;;;;2358:8:6;;;2334:42;;;;;;;;;;;;:23;;;;;;:42;;;;;;;;;;;;;;;2358:8;2334:23;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2190:197:6;2019:374;;:::o;287:39::-;;;:::o;497:779:1:-;588:4;627;588;642:515;666:5;:12;662:1;:16;642:515;;;699:20;722:5;728:1;722:8;;;;;;;;;;;;;;699:31;;765:12;749;:28;745:402;;917:12;931;900:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;890:55;;;;;;875:70;;745:402;;;1104:12;1118;1087:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1077:55;;;;;;1062:70;;745:402;-1:-1:-1;680:3:1;;642:515;;;-1:-1:-1;1249:20:1;;;;497:779;-1:-1:-1;;;497:779:1:o;993:270:6:-;1082:3;1074:11;;1047:24;1188:31;;;;;;;;;;;;1235:1;1121:11;;;;1235:20;;;;1188:68;;;1142:114;;993:270::o", - "language": "Solidity", - "natspec": { - "kind": "dev", - "methods": {}, - "version": 1 - }, - "offset": [ - 232, - 2395 - ], - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x57 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2E7BA6EF EQ PUSH2 0x5C JUMPI DUP1 PUSH4 0x2EB4A7AB EQ PUSH2 0xEA JUMPI DUP1 PUSH4 0x9E34070F EQ PUSH2 0x104 JUMPI DUP1 PUSH4 0xB14B990F EQ PUSH2 0x135 JUMPI DUP1 PUSH4 0xFC0C546A EQ PUSH2 0x161 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x72 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xBB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0xDD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP SWAP1 SWAP3 POP SWAP1 POP PUSH2 0x185 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF2 PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x121 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x11A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x40C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0xE8 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x14B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD AND SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH2 0x432 JUMP JUMPDEST PUSH2 0x169 PUSH2 0x5C2 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x18E DUP6 PUSH2 0x40C JUMP JUMPDEST ISZERO PUSH2 0x1CA JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6B7 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP9 SWAP1 MSTORE PUSH12 0xFFFFFFFFFFFFFFFFFFFFFFFF NOT PUSH1 0x60 DUP9 SWAP1 SHL AND DUP3 DUP5 ADD MSTORE PUSH1 0x54 DUP1 DUP4 ADD DUP8 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x74 DUP4 ADD DUP1 DUP6 MSTORE DUP2 MLOAD SWAP2 DUP4 ADD SWAP2 SWAP1 SWAP2 KECCAK256 PUSH1 0x94 SWAP3 DUP7 MUL DUP1 DUP6 ADD DUP5 ADD SWAP1 SWAP6 MSTORE DUP6 DUP3 MSTORE SWAP4 PUSH2 0x26D SWAP4 SWAP2 SWAP3 DUP8 SWAP3 DUP8 SWAP3 DUP4 SWAP3 SWAP1 SWAP2 ADD SWAP1 DUP5 SWAP1 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP PUSH32 0x0 SWAP3 POP DUP6 SWAP2 POP PUSH2 0x5E6 SWAP1 POP JUMP JUMPDEST PUSH2 0x2A8 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x6DF PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x2B1 DUP7 PUSH2 0x68F JUMP JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH4 0xA9059CBB DUP7 DUP7 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x331 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x345 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x35B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x398 JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x23 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x700 PUSH1 0x23 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP8 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x20 DUP3 ADD MSTORE DUP1 DUP3 ADD DUP7 SWAP1 MSTORE SWAP1 MLOAD PUSH32 0x4EC90E965519D92681267467F775ADA5BD214AA92C0DC93D90A5E880CE9ED026 SWAP2 DUP2 SWAP1 SUB PUSH1 0x60 ADD SWAP1 LOG1 POP POP POP POP POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH2 0x100 DUP2 DIV PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 SHL SWAP1 DUP2 AND EQ SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x47D JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x9 PUSH1 0x24 DUP3 ADD MSTORE PUSH9 0x10B232B83637BCB2B9 PUSH1 0xB9 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x4ED JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x6 PUSH1 0x24 DUP3 ADD MSTORE PUSH6 0x10BA37B5B2B7 PUSH1 0xD1 SHL PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH2 0x53B JUMPI PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP3 ISZERO PUSH2 0x8FC MUL SWAP1 DUP4 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x535 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x5BE JUMP JUMPDEST PUSH1 0x1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH4 0xA9059CBB PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP5 SWAP1 MSTORE SWAP1 MLOAD SWAP2 DUP5 AND SWAP2 PUSH4 0xA9059CBB SWAP2 PUSH1 0x44 DUP1 DUP3 ADD SWAP3 PUSH1 0x20 SWAP3 SWAP1 SWAP2 SWAP1 DUP3 SWAP1 SUB ADD DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x591 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5A5 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP POP JUMPDEST POP POP JUMP JUMPDEST PUSH32 0x0 DUP2 JUMP JUMPDEST PUSH1 0x0 DUP2 DUP2 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x684 JUMPI PUSH1 0x0 DUP7 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x602 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP DUP1 DUP4 GT PUSH2 0x649 JUMPI DUP3 DUP2 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP PUSH2 0x67B JUMP JUMPDEST DUP1 DUP4 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP3 POP JUMPDEST POP PUSH1 0x1 ADD PUSH2 0x5EB JUMP JUMPDEST POP SWAP1 SWAP3 EQ SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x100 DUP2 DIV PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 SHL SWAP1 SWAP2 OR SWAP1 SSTORE JUMP INVALID 0x4D PUSH6 0x726B6C654469 PUSH20 0x7472696275746F723A2044726F7020616C726561 PUSH5 0x7920636C61 PUSH10 0x6D65642E4D65726B6C65 DIFFICULTY PUSH10 0x737472696275746F723A KECCAK256 0x49 PUSH15 0x76616C69642070726F6F662E4D6572 PUSH12 0x6C654469737472696275746F PUSH19 0x3A205472616E73666572206661696C65642EA2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE2 0xCC 0xD0 DUP15 0xE 0x2B PUSH13 0xDE7913977C01F24B47E119A47C 0xA5 SMOD PUSH24 0x88E8AB63BBDD49E0FE64736F6C634300060B003300000000 ", - "pcMap": { - "0": { - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0x80" - }, - "2": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "4": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "MSTORE", - "path": "6" - }, - "5": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "CALLVALUE", - "path": "6" - }, - "6": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "7": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "ISZERO", - "path": "6" - }, - "8": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0x10" - }, - "11": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "12": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "14": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "15": { - "dev": "Cannot send ether to nonpayable function", - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "REVERT", - "path": "6" - }, - "16": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPDEST", - "path": "6" - }, - "17": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "POP", - "path": "6" - }, - "18": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "20": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "CALLDATASIZE", - "path": "6" - }, - "21": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "LT", - "path": "6" - }, - "22": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0x57" - }, - "25": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "26": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "28": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "29": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0xE0" - }, - "31": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "SHR", - "path": "6" - }, - "32": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "33": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH4", - "path": "6", - "value": "0x2E7BA6EF" - }, - "38": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "EQ", - "path": "6" - }, - "39": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0x5C" - }, - "42": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "43": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "44": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH4", - "path": "6", - "value": "0x2EB4A7AB" - }, - "49": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "EQ", - "path": "6" - }, - "50": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0xEA" - }, - "53": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "54": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "55": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH4", - "path": "6", - "value": "0x9E34070F" - }, - "60": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "EQ", - "path": "6" - }, - "61": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0x104" - }, - "64": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "65": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "66": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH4", - "path": "6", - "value": "0xB14B990F" - }, - "71": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "EQ", - "path": "6" - }, - "72": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0x135" - }, - "75": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "76": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "77": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH4", - "path": "6", - "value": "0xFC0C546A" - }, - "82": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "EQ", - "path": "6" - }, - "83": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH2", - "path": "6", - "value": "0x161" - }, - "86": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPI", - "path": "6" - }, - "87": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "JUMPDEST", - "path": "6" - }, - "88": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "90": { - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "DUP1", - "path": "6" - }, - "91": { - "first_revert": true, - "fn": null, - "offset": [ - 232, - 2395 - ], - "op": "REVERT", - "path": "6" - }, - "92": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "93": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH2", - "path": "6", - "value": "0xE8" - }, - "96": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "98": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP1", - "path": "6" - }, - "99": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "CALLDATASIZE", - "path": "6" - }, - "100": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SUB", - "path": "6" - }, - "101": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x80" - }, - "103": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP2", - "path": "6" - }, - "104": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "LT", - "path": "6" - }, - "105": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ISZERO", - "path": "6" - }, - "106": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH2", - "path": "6", - "value": "0x72" - }, - "109": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPI", - "path": "6" - }, - "110": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "112": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP1", - "path": "6" - }, - "113": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "REVERT", - "path": "6" - }, - "114": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "115": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP2", - "path": "6" - }, - "116": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "117": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP2", - "path": "6" - }, - "118": { - "op": "PUSH1", - "value": "0x1" - }, - "120": { - "op": "PUSH1", - "value": "0x1" - }, - "122": { - "op": "PUSH1", - "value": "0xA0" - }, - "124": { - "op": "SHL" - }, - "125": { - "op": "SUB" - }, - "126": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "128": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP3", - "path": "6" - }, - "129": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "130": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "131": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "AND", - "path": "6" - }, - "132": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP2", - "path": "6" - }, - "133": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "135": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP3", - "path": "6" - }, - "136": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "137": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "138": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP2", - "path": "6" - }, - "139": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP1", - "path": "6" - }, - "140": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP2", - "path": "6" - }, - "141": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "142": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP1", - "path": "6" - }, - "143": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x80" - }, - "145": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP2", - "path": "6" - }, - "146": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "147": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x60" - }, - "149": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP3", - "path": "6" - }, - "150": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "151": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "152": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH5", - "path": "6", - "value": "0x100000000" - }, - "158": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP2", - "path": "6" - }, - "159": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "GT", - "path": "6" - }, - "160": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ISZERO", - "path": "6" - }, - "161": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH2", - "path": "6", - "value": "0xA9" - }, - "164": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPI", - "path": "6" - }, - "165": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "167": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP1", - "path": "6" - }, - "168": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "REVERT", - "path": "6" - }, - "169": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "170": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP3", - "path": "6" - }, - "171": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "172": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP4", - "path": "6" - }, - "173": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "175": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP3", - "path": "6" - }, - "176": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "177": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "GT", - "path": "6" - }, - "178": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ISZERO", - "path": "6" - }, - "179": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH2", - "path": "6", - "value": "0xBB" - }, - "182": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPI", - "path": "6" - }, - "183": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "185": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP1", - "path": "6" - }, - "186": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "REVERT", - "path": "6" - }, - "187": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "188": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP1", - "path": "6" - }, - "189": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "190": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP1", - "path": "6" - }, - "191": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "193": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "194": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP2", - "path": "6" - }, - "195": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP5", - "path": "6" - }, - "196": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "198": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP4", - "path": "6" - }, - "199": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "MUL", - "path": "6" - }, - "200": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP5", - "path": "6" - }, - "201": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ADD", - "path": "6" - }, - "202": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "GT", - "path": "6" - }, - "203": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH5", - "path": "6", - "value": "0x100000000" - }, - "209": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP4", - "path": "6" - }, - "210": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "GT", - "path": "6" - }, - "211": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "OR", - "path": "6" - }, - "212": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "ISZERO", - "path": "6" - }, - "213": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH2", - "path": "6", - "value": "0xDD" - }, - "216": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPI", - "path": "6" - }, - "217": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "219": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "DUP1", - "path": "6" - }, - "220": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "REVERT", - "path": "6" - }, - "221": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "222": { - "op": "POP" - }, - "223": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP1", - "path": "6" - }, - "224": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP3", - "path": "6" - }, - "225": { - "op": "POP" - }, - "226": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "SWAP1", - "path": "6" - }, - "227": { - "op": "POP" - }, - "228": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "PUSH2", - "path": "6", - "value": "0x185" - }, - "231": { - "fn": "MerkleDistributor.claim", - "jump": "i", - "offset": [ - 1269, - 2013 - ], - "op": "JUMP", - "path": "6" - }, - "232": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "233": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "STOP", - "path": "6" - }, - "234": { - "offset": [ - 332, - 376 - ], - "op": "JUMPDEST", - "path": "6" - }, - "235": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "PUSH2", - "path": "6", - "value": "0xF2" - }, - "238": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "PUSH2", - "path": "6", - "value": "0x3E8" - }, - "241": { - "fn": "MerkleDistributor.claim", - "jump": "i", - "offset": [ - 332, - 376 - ], - "op": "JUMP", - "path": "6" - }, - "242": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "JUMPDEST", - "path": "6" - }, - "243": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "245": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "DUP1", - "path": "6" - }, - "246": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "MLOAD", - "path": "6" - }, - "247": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "SWAP2", - "path": "6" - }, - "248": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "DUP3", - "path": "6" - }, - "249": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "MSTORE", - "path": "6" - }, - "250": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "MLOAD", - "path": "6" - }, - "251": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "SWAP1", - "path": "6" - }, - "252": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "DUP2", - "path": "6" - }, - "253": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "SWAP1", - "path": "6" - }, - "254": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "SUB", - "path": "6" - }, - "255": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "257": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "ADD", - "path": "6" - }, - "258": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "SWAP1", - "path": "6" - }, - "259": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "RETURN", - "path": "6" - }, - "260": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "JUMPDEST", - "path": "6" - }, - "261": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH2", - "path": "6", - "value": "0x121" - }, - "264": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "266": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "DUP1", - "path": "6" - }, - "267": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "CALLDATASIZE", - "path": "6" - }, - "268": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "SUB", - "path": "6" - }, - "269": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "271": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "DUP2", - "path": "6" - }, - "272": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "LT", - "path": "6" - }, - "273": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "ISZERO", - "path": "6" - }, - "274": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH2", - "path": "6", - "value": "0x11A" - }, - "277": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "JUMPI", - "path": "6" - }, - "278": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "280": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "DUP1", - "path": "6" - }, - "281": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "REVERT", - "path": "6" - }, - "282": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "JUMPDEST", - "path": "6" - }, - "283": { - "op": "POP" - }, - "284": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "285": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH2", - "path": "6", - "value": "0x40C" - }, - "288": { - "fn": "MerkleDistributor.isClaimed", - "jump": "i", - "offset": [ - 662, - 987 - ], - "op": "JUMP", - "path": "6" - }, - "289": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "JUMPDEST", - "path": "6" - }, - "290": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "292": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "DUP1", - "path": "6" - }, - "293": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "MLOAD", - "path": "6" - }, - "294": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "SWAP2", - "path": "6" - }, - "295": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "ISZERO", - "path": "6" - }, - "296": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "ISZERO", - "path": "6" - }, - "297": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "DUP3", - "path": "6" - }, - "298": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "MSTORE", - "path": "6" - }, - "299": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "MLOAD", - "path": "6" - }, - "300": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "SWAP1", - "path": "6" - }, - "301": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "DUP2", - "path": "6" - }, - "302": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "SWAP1", - "path": "6" - }, - "303": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "SUB", - "path": "6" - }, - "304": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "306": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "ADD", - "path": "6" - }, - "307": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "SWAP1", - "path": "6" - }, - "308": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "RETURN", - "path": "6" - }, - "309": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "JUMPDEST", - "path": "6" - }, - "310": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH2", - "path": "6", - "value": "0xE8" - }, - "313": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "315": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "DUP1", - "path": "6" - }, - "316": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "CALLDATASIZE", - "path": "6" - }, - "317": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "SUB", - "path": "6" - }, - "318": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "320": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "DUP2", - "path": "6" - }, - "321": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "LT", - "path": "6" - }, - "322": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "ISZERO", - "path": "6" - }, - "323": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH2", - "path": "6", - "value": "0x14B" - }, - "326": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "JUMPI", - "path": "6" - }, - "327": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "329": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "DUP1", - "path": "6" - }, - "330": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "REVERT", - "path": "6" - }, - "331": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "JUMPDEST", - "path": "6" - }, - "332": { - "op": "POP" - }, - "333": { - "op": "PUSH1", - "value": "0x1" - }, - "335": { - "op": "PUSH1", - "value": "0x1" - }, - "337": { - "op": "PUSH1", - "value": "0xA0" - }, - "339": { - "op": "SHL" - }, - "340": { - "op": "SUB" - }, - "341": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "DUP2", - "path": "6" - }, - "342": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "343": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "AND", - "path": "6" - }, - "344": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "SWAP1", - "path": "6" - }, - "345": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "347": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "ADD", - "path": "6" - }, - "348": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "CALLDATALOAD", - "path": "6" - }, - "349": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "PUSH2", - "path": "6", - "value": "0x432" - }, - "352": { - "fn": "MerkleDistributor.collectDust", - "jump": "i", - "offset": [ - 2019, - 2393 - ], - "op": "JUMP", - "path": "6" - }, - "353": { - "offset": [ - 287, - 326 - ], - "op": "JUMPDEST", - "path": "6" - }, - "354": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "PUSH2", - "path": "6", - "value": "0x169" - }, - "357": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "PUSH2", - "path": "6", - "value": "0x5C2" - }, - "360": { - "fn": "MerkleDistributor.collectDust", - "jump": "i", - "offset": [ - 287, - 326 - ], - "op": "JUMP", - "path": "6" - }, - "361": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "JUMPDEST", - "path": "6" - }, - "362": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "364": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "DUP1", - "path": "6" - }, - "365": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "MLOAD", - "path": "6" - }, - "366": { - "op": "PUSH1", - "value": "0x1" - }, - "368": { - "op": "PUSH1", - "value": "0x1" - }, - "370": { - "op": "PUSH1", - "value": "0xA0" - }, - "372": { - "op": "SHL" - }, - "373": { - "op": "SUB" - }, - "374": { - "offset": [ - 287, - 326 - ], - "op": "SWAP1", - "path": "6" - }, - "375": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "SWAP3", - "path": "6" - }, - "376": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "AND", - "path": "6" - }, - "377": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "DUP3", - "path": "6" - }, - "378": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "MSTORE", - "path": "6" - }, - "379": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "MLOAD", - "path": "6" - }, - "380": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "SWAP1", - "path": "6" - }, - "381": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "DUP2", - "path": "6" - }, - "382": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "SWAP1", - "path": "6" - }, - "383": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "SUB", - "path": "6" - }, - "384": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "386": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "ADD", - "path": "6" - }, - "387": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "SWAP1", - "path": "6" - }, - "388": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "RETURN", - "path": "6" - }, - "389": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "JUMPDEST", - "path": "6" - }, - "390": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1439, - 1455 - ], - "op": "PUSH2", - "path": "6", - "statement": 0, - "value": "0x18E" - }, - "393": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1449, - 1454 - ], - "op": "DUP6", - "path": "6" - }, - "394": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1439, - 1448 - ], - "op": "PUSH2", - "path": "6", - "value": "0x40C" - }, - "397": { - "fn": "MerkleDistributor.claim", - "jump": "i", - "offset": [ - 1439, - 1455 - ], - "op": "JUMP", - "path": "6" - }, - "398": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1439, - 1455 - ], - "op": "JUMPDEST", - "path": "6" - }, - "399": { - "branch": 15, - "fn": "MerkleDistributor.claim", - "offset": [ - 1438, - 1455 - ], - "op": "ISZERO", - "path": "6" - }, - "400": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH2", - "path": "6", - "value": "0x1CA" - }, - "403": { - "branch": 15, - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "JUMPI", - "path": "6" - }, - "404": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "406": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "MLOAD", - "path": "6" - }, - "407": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "411": { - "op": "PUSH1", - "value": "0xE5" - }, - "413": { - "op": "SHL" - }, - "414": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP2", - "path": "6" - }, - "415": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "MSTORE", - "path": "6" - }, - "416": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "418": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "ADD", - "path": "6" - }, - "419": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP1", - "path": "6" - }, - "420": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP1", - "path": "6" - }, - "421": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "423": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "ADD", - "path": "6" - }, - "424": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP3", - "path": "6" - }, - "425": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP2", - "path": "6" - }, - "426": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "SUB", - "path": "6" - }, - "427": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP3", - "path": "6" - }, - "428": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "MSTORE", - "path": "6" - }, - "429": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x28" - }, - "431": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP2", - "path": "6" - }, - "432": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "MSTORE", - "path": "6" - }, - "433": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "435": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "ADD", - "path": "6" - }, - "436": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP1", - "path": "6" - }, - "437": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH2", - "path": "6", - "value": "0x6B7" - }, - "440": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x28" - }, - "442": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "SWAP2", - "path": "6" - }, - "443": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "CODECOPY", - "path": "6" - }, - "444": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "446": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "ADD", - "path": "6" - }, - "447": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "SWAP2", - "path": "6" - }, - "448": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "POP", - "path": "6" - }, - "449": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "POP", - "path": "6" - }, - "450": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "452": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "MLOAD", - "path": "6" - }, - "453": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "DUP1", - "path": "6" - }, - "454": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "SWAP2", - "path": "6" - }, - "455": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "SUB", - "path": "6" - }, - "456": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "SWAP1", - "path": "6" - }, - "457": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "REVERT", - "path": "6" - }, - "458": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1430, - 1500 - ], - "op": "JUMPDEST", - "path": "6" - }, - "459": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "461": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP1", - "path": "6" - }, - "462": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MLOAD", - "path": "6" - }, - "463": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "465": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP1", - "path": "6" - }, - "466": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP3", - "path": "6" - }, - "467": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "ADD", - "path": "6" - }, - "468": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP9", - "path": "6" - }, - "469": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP1", - "path": "6" - }, - "470": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MSTORE", - "path": "6" - }, - "471": { - "op": "PUSH12", - "value": "0xFFFFFFFFFFFFFFFFFFFFFFFF" - }, - "484": { - "op": "NOT" - }, - "485": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "PUSH1", - "path": "6", - "value": "0x60" - }, - "487": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP9", - "path": "6" - }, - "488": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP1", - "path": "6" - }, - "489": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SHL", - "path": "6" - }, - "490": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "AND", - "path": "6" - }, - "491": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP3", - "path": "6" - }, - "492": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP5", - "path": "6" - }, - "493": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "ADD", - "path": "6" - }, - "494": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MSTORE", - "path": "6" - }, - "495": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "PUSH1", - "path": "6", - "value": "0x54" - }, - "497": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP1", - "path": "6" - }, - "498": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP4", - "path": "6" - }, - "499": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "ADD", - "path": "6" - }, - "500": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP8", - "path": "6" - }, - "501": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP1", - "path": "6" - }, - "502": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MSTORE", - "path": "6" - }, - "503": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP4", - "path": "6" - }, - "504": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MLOAD", - "path": "6" - }, - "505": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP1", - "path": "6" - }, - "506": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP5", - "path": "6" - }, - "507": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SUB", - "path": "6" - }, - "508": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP1", - "path": "6" - }, - "509": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP2", - "path": "6" - }, - "510": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "ADD", - "path": "6" - }, - "511": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP2", - "path": "6" - }, - "512": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MSTORE", - "path": "6" - }, - "513": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "PUSH1", - "path": "6", - "value": "0x74" - }, - "515": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP4", - "path": "6" - }, - "516": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "ADD", - "path": "6" - }, - "517": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP1", - "path": "6" - }, - "518": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "DUP6", - "path": "6" - }, - "519": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "MSTORE", - "path": "6" - }, - "520": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "DUP2", - "path": "6" - }, - "521": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "MLOAD", - "path": "6" - }, - "522": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "SWAP2", - "path": "6" - }, - "523": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "DUP4", - "path": "6" - }, - "524": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "ADD", - "path": "6" - }, - "525": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "SWAP2", - "path": "6" - }, - "526": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "SWAP1", - "path": "6" - }, - "527": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "SWAP2", - "path": "6" - }, - "528": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "KECCAK256", - "path": "6" - }, - "529": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "PUSH1", - "path": "6", - "statement": 1, - "value": "0x94" - }, - "531": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP3", - "path": "6" - }, - "532": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP7", - "path": "6" - }, - "533": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "MUL", - "path": "6" - }, - "534": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP1", - "path": "6" - }, - "535": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP6", - "path": "6" - }, - "536": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "ADD", - "path": "6" - }, - "537": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP5", - "path": "6" - }, - "538": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "ADD", - "path": "6" - }, - "539": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP1", - "path": "6" - }, - "540": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP6", - "path": "6" - }, - "541": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "MSTORE", - "path": "6" - }, - "542": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP6", - "path": "6" - }, - "543": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP3", - "path": "6" - }, - "544": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "MSTORE", - "path": "6" - }, - "545": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1562, - 1613 - ], - "op": "SWAP4", - "path": "6" - }, - "546": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "PUSH2", - "path": "6", - "value": "0x26D" - }, - "549": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP4", - "path": "6" - }, - "550": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP2", - "path": "6" - }, - "551": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1572, - 1612 - ], - "op": "SWAP3", - "path": "6" - }, - "552": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "DUP8", - "path": "6" - }, - "553": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "SWAP3", - "path": "6" - }, - "554": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "DUP8", - "path": "6" - }, - "555": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "SWAP3", - "path": "6" - }, - "556": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "DUP4", - "path": "6" - }, - "557": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "SWAP3", - "path": "6" - }, - "558": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP1", - "path": "6" - }, - "559": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP2", - "path": "6" - }, - "560": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "ADD", - "path": "6" - }, - "561": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP1", - "path": "6" - }, - "562": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "DUP5", - "path": "6" - }, - "563": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "SWAP1", - "path": "6" - }, - "564": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP1", - "path": "6" - }, - "565": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1663, - 1674 - ], - "op": "DUP3", - "path": "6" - }, - "566": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "DUP5", - "path": "6" - }, - "567": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "CALLDATACOPY", - "path": "6" - }, - "568": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "570": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP3", - "path": "6" - }, - "571": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "ADD", - "path": "6" - }, - "572": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP2", - "path": "6" - }, - "573": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP1", - "path": "6" - }, - "574": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "SWAP2", - "path": "6" - }, - "575": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "MSTORE", - "path": "6" - }, - "576": { - "op": "POP" - }, - "577": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1676, - 1686 - ], - "op": "PUSH32", - "path": "6", - "value": "0x0" - }, - "610": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1676, - 1686 - ], - "op": "SWAP3", - "path": "6" - }, - "611": { - "op": "POP" - }, - "612": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1688, - 1692 - ], - "op": "DUP6", - "path": "6" - }, - "613": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1688, - 1692 - ], - "op": "SWAP2", - "path": "6" - }, - "614": { - "op": "POP" - }, - "615": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1662 - ], - "op": "PUSH2", - "path": "6", - "value": "0x5E6" - }, - "618": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1662 - ], - "op": "SWAP1", - "path": "6" - }, - "619": { - "op": "POP" - }, - "620": { - "fn": "MerkleDistributor.claim", - "jump": "i", - "offset": [ - 1644, - 1693 - ], - "op": "JUMP", - "path": "6" - }, - "621": { - "branch": 16, - "fn": "MerkleDistributor.claim", - "offset": [ - 1644, - 1693 - ], - "op": "JUMPDEST", - "path": "6" - }, - "622": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH2", - "path": "6", - "value": "0x2A8" - }, - "625": { - "branch": 16, - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "JUMPI", - "path": "6" - }, - "626": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "628": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "MLOAD", - "path": "6" - }, - "629": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "633": { - "op": "PUSH1", - "value": "0xE5" - }, - "635": { - "op": "SHL" - }, - "636": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP2", - "path": "6" - }, - "637": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "MSTORE", - "path": "6" - }, - "638": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "640": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "ADD", - "path": "6" - }, - "641": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP1", - "path": "6" - }, - "642": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP1", - "path": "6" - }, - "643": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "645": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "ADD", - "path": "6" - }, - "646": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP3", - "path": "6" - }, - "647": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP2", - "path": "6" - }, - "648": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "SUB", - "path": "6" - }, - "649": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP3", - "path": "6" - }, - "650": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "MSTORE", - "path": "6" - }, - "651": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x21" - }, - "653": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP2", - "path": "6" - }, - "654": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "MSTORE", - "path": "6" - }, - "655": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "657": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "ADD", - "path": "6" - }, - "658": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP1", - "path": "6" - }, - "659": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH2", - "path": "6", - "value": "0x6DF" - }, - "662": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x21" - }, - "664": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "SWAP2", - "path": "6" - }, - "665": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "CODECOPY", - "path": "6" - }, - "666": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "668": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "ADD", - "path": "6" - }, - "669": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "SWAP2", - "path": "6" - }, - "670": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "POP", - "path": "6" - }, - "671": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "POP", - "path": "6" - }, - "672": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "674": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "MLOAD", - "path": "6" - }, - "675": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "DUP1", - "path": "6" - }, - "676": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "SWAP2", - "path": "6" - }, - "677": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "SUB", - "path": "6" - }, - "678": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "SWAP1", - "path": "6" - }, - "679": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "REVERT", - "path": "6" - }, - "680": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1623, - 1752 - ], - "op": "JUMPDEST", - "path": "6" - }, - "681": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1810, - 1828 - ], - "op": "PUSH2", - "path": "6", - "statement": 2, - "value": "0x2B1" - }, - "684": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1822, - 1827 - ], - "op": "DUP7", - "path": "6" - }, - "685": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1810, - 1821 - ], - "op": "PUSH2", - "path": "6", - "value": "0x68F" - }, - "688": { - "fn": "MerkleDistributor.claim", - "jump": "i", - "offset": [ - 1810, - 1828 - ], - "op": "JUMP", - "path": "6" - }, - "689": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1810, - 1828 - ], - "op": "JUMPDEST", - "path": "6" - }, - "690": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1866, - 1871 - ], - "op": "PUSH32", - "path": "6", - "statement": 3, - "value": "0x0" - }, - "723": { - "op": "PUSH1", - "value": "0x1" - }, - "725": { - "op": "PUSH1", - "value": "0x1" - }, - "727": { - "op": "PUSH1", - "value": "0xA0" - }, - "729": { - "op": "SHL" - }, - "730": { - "op": "SUB" - }, - "731": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1881 - ], - "op": "AND", - "path": "6" - }, - "732": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1881 - ], - "op": "PUSH4", - "path": "6", - "value": "0xA9059CBB" - }, - "737": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1882, - 1889 - ], - "op": "DUP7", - "path": "6" - }, - "738": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1891, - 1897 - ], - "op": "DUP7", - "path": "6" - }, - "739": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "741": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MLOAD", - "path": "6" - }, - "742": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP4", - "path": "6" - }, - "743": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH4", - "path": "6", - "value": "0xFFFFFFFF" - }, - "748": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "AND", - "path": "6" - }, - "749": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0xE0" - }, - "751": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "SHL", - "path": "6" - }, - "752": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP2", - "path": "6" - }, - "753": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MSTORE", - "path": "6" - }, - "754": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "756": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ADD", - "path": "6" - }, - "757": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "758": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP4", - "path": "6" - }, - "759": { - "op": "PUSH1", - "value": "0x1" - }, - "761": { - "op": "PUSH1", - "value": "0x1" - }, - "763": { - "op": "PUSH1", - "value": "0xA0" - }, - "765": { - "op": "SHL" - }, - "766": { - "op": "SUB" - }, - "767": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "AND", - "path": "6" - }, - "768": { - "op": "PUSH1", - "value": "0x1" - }, - "770": { - "op": "PUSH1", - "value": "0x1" - }, - "772": { - "op": "PUSH1", - "value": "0xA0" - }, - "774": { - "op": "SHL" - }, - "775": { - "op": "SUB" - }, - "776": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "AND", - "path": "6" - }, - "777": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP2", - "path": "6" - }, - "778": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MSTORE", - "path": "6" - }, - "779": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "781": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ADD", - "path": "6" - }, - "782": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP3", - "path": "6" - }, - "783": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP2", - "path": "6" - }, - "784": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MSTORE", - "path": "6" - }, - "785": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "787": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ADD", - "path": "6" - }, - "788": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "SWAP3", - "path": "6" - }, - "789": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "790": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "791": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "792": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "794": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "796": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MLOAD", - "path": "6" - }, - "797": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "798": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP4", - "path": "6" - }, - "799": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "SUB", - "path": "6" - }, - "800": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP2", - "path": "6" - }, - "801": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "803": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP8", - "path": "6" - }, - "804": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "805": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "EXTCODESIZE", - "path": "6" - }, - "806": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ISZERO", - "path": "6" - }, - "807": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "808": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ISZERO", - "path": "6" - }, - "809": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH2", - "path": "6", - "value": "0x331" - }, - "812": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "JUMPI", - "path": "6" - }, - "813": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "815": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "816": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "REVERT", - "path": "6" - }, - "817": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "JUMPDEST", - "path": "6" - }, - "818": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "819": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "GAS", - "path": "6" - }, - "820": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "CALL", - "path": "6" - }, - "821": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ISZERO", - "path": "6" - }, - "822": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "823": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ISZERO", - "path": "6" - }, - "824": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH2", - "path": "6", - "value": "0x345" - }, - "827": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "JUMPI", - "path": "6" - }, - "828": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "829": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "831": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "832": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "RETURNDATACOPY", - "path": "6" - }, - "833": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "834": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "836": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "REVERT", - "path": "6" - }, - "837": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "JUMPDEST", - "path": "6" - }, - "838": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "839": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "840": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "841": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "POP", - "path": "6" - }, - "842": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "844": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MLOAD", - "path": "6" - }, - "845": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "846": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "848": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP2", - "path": "6" - }, - "849": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "LT", - "path": "6" - }, - "850": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "ISZERO", - "path": "6" - }, - "851": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH2", - "path": "6", - "value": "0x35B" - }, - "854": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "JUMPI", - "path": "6" - }, - "855": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "857": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "DUP1", - "path": "6" - }, - "858": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "REVERT", - "path": "6" - }, - "859": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "JUMPDEST", - "path": "6" - }, - "860": { - "op": "POP" - }, - "861": { - "branch": 17, - "fn": "MerkleDistributor.claim", - "offset": [ - 1859, - 1898 - ], - "op": "MLOAD", - "path": "6" - }, - "862": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH2", - "path": "6", - "value": "0x398" - }, - "865": { - "branch": 17, - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "JUMPI", - "path": "6" - }, - "866": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "868": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "MLOAD", - "path": "6" - }, - "869": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "873": { - "op": "PUSH1", - "value": "0xE5" - }, - "875": { - "op": "SHL" - }, - "876": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP2", - "path": "6" - }, - "877": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "MSTORE", - "path": "6" - }, - "878": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "880": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "ADD", - "path": "6" - }, - "881": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP1", - "path": "6" - }, - "882": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP1", - "path": "6" - }, - "883": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "885": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "ADD", - "path": "6" - }, - "886": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP3", - "path": "6" - }, - "887": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP2", - "path": "6" - }, - "888": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "SUB", - "path": "6" - }, - "889": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP3", - "path": "6" - }, - "890": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "MSTORE", - "path": "6" - }, - "891": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x23" - }, - "893": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP2", - "path": "6" - }, - "894": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "MSTORE", - "path": "6" - }, - "895": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "897": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "ADD", - "path": "6" - }, - "898": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP1", - "path": "6" - }, - "899": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH2", - "path": "6", - "value": "0x700" - }, - "902": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x23" - }, - "904": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "SWAP2", - "path": "6" - }, - "905": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "CODECOPY", - "path": "6" - }, - "906": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "908": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "ADD", - "path": "6" - }, - "909": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "SWAP2", - "path": "6" - }, - "910": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "POP", - "path": "6" - }, - "911": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "POP", - "path": "6" - }, - "912": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "914": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "MLOAD", - "path": "6" - }, - "915": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "DUP1", - "path": "6" - }, - "916": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "SWAP2", - "path": "6" - }, - "917": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "SUB", - "path": "6" - }, - "918": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "SWAP1", - "path": "6" - }, - "919": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "REVERT", - "path": "6" - }, - "920": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1838, - 1959 - ], - "op": "JUMPDEST", - "path": "6" - }, - "921": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "PUSH1", - "path": "6", - "statement": 4, - "value": "0x40" - }, - "923": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP1", - "path": "6" - }, - "924": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "MLOAD", - "path": "6" - }, - "925": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP8", - "path": "6" - }, - "926": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP2", - "path": "6" - }, - "927": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "MSTORE", - "path": "6" - }, - "928": { - "op": "PUSH1", - "value": "0x1" - }, - "930": { - "op": "PUSH1", - "value": "0x1" - }, - "932": { - "op": "PUSH1", - "value": "0xA0" - }, - "934": { - "op": "SHL" - }, - "935": { - "op": "SUB" - }, - "936": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP8", - "path": "6" - }, - "937": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "AND", - "path": "6" - }, - "938": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "940": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP3", - "path": "6" - }, - "941": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "ADD", - "path": "6" - }, - "942": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "MSTORE", - "path": "6" - }, - "943": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP1", - "path": "6" - }, - "944": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP3", - "path": "6" - }, - "945": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "ADD", - "path": "6" - }, - "946": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP7", - "path": "6" - }, - "947": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "SWAP1", - "path": "6" - }, - "948": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "MSTORE", - "path": "6" - }, - "949": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "SWAP1", - "path": "6" - }, - "950": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "MLOAD", - "path": "6" - }, - "951": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "PUSH32", - "path": "6", - "value": "0x4EC90E965519D92681267467F775ADA5BD214AA92C0DC93D90A5E880CE9ED026" - }, - "984": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "SWAP2", - "path": "6" - }, - "985": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "DUP2", - "path": "6" - }, - "986": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "SWAP1", - "path": "6" - }, - "987": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "SUB", - "path": "6" - }, - "988": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "PUSH1", - "path": "6", - "value": "0x60" - }, - "990": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "ADD", - "path": "6" - }, - "991": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "SWAP1", - "path": "6" - }, - "992": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1975, - 2006 - ], - "op": "LOG1", - "path": "6" - }, - "993": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "POP", - "path": "6" - }, - "994": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "POP", - "path": "6" - }, - "995": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "POP", - "path": "6" - }, - "996": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "POP", - "path": "6" - }, - "997": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "POP", - "path": "6" - }, - "998": { - "fn": "MerkleDistributor.claim", - "offset": [ - 1269, - 2013 - ], - "op": "POP", - "path": "6" - }, - "999": { - "fn": "MerkleDistributor.claim", - "jump": "o", - "offset": [ - 1269, - 2013 - ], - "op": "JUMP", - "path": "6" - }, - "1000": { - "offset": [ - 332, - 376 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1001": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "PUSH32", - "path": "6", - "value": "0x0" - }, - "1034": { - "fn": "MerkleDistributor.claim", - "offset": [ - 332, - 376 - ], - "op": "DUP2", - "path": "6" - }, - "1035": { - "fn": "MerkleDistributor.claim", - "jump": "o", - "offset": [ - 332, - 376 - ], - "op": "JUMP", - "path": "6" - }, - "1036": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 662, - 987 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1037": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 777, - 780 - ], - "op": "PUSH2", - "path": "6", - "value": "0x100" - }, - "1040": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 769, - 780 - ], - "op": "DUP2", - "path": "6" - }, - "1041": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 769, - 780 - ], - "op": "DIV", - "path": "6" - }, - "1042": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 726, - 730 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1044": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "SWAP1", - "path": "6" - }, - "1045": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "DUP2", - "path": "6" - }, - "1046": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "MSTORE", - "path": "6" - }, - "1047": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "1049": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "DUP2", - "path": "6" - }, - "1050": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "SWAP1", - "path": "6" - }, - "1051": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "MSTORE", - "path": "6" - }, - "1052": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1054": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "SWAP1", - "path": "6" - }, - "1055": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "KECCAK256", - "path": "6" - }, - "1056": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 859, - 890 - ], - "op": "SLOAD", - "path": "6" - }, - "1057": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 916, - 917 - ], - "op": "PUSH1", - "path": "6", - "value": "0x1" - }, - "1059": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 816, - 827 - ], - "op": "PUSH1", - "path": "6", - "value": "0xFF" - }, - "1061": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 816, - 827 - ], - "op": "SWAP1", - "path": "6" - }, - "1062": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 816, - 827 - ], - "op": "SWAP3", - "path": "6" - }, - "1063": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 816, - 827 - ], - "op": "AND", - "path": "6" - }, - "1064": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 916, - 936 - ], - "op": "SWAP2", - "path": "6" - }, - "1065": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 916, - 936 - ], - "op": "SWAP1", - "path": "6" - }, - "1066": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 916, - 936 - ], - "op": "SWAP2", - "path": "6" - }, - "1067": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 916, - 936 - ], - "op": "SHL", - "path": "6" - }, - "1068": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 954, - 972 - ], - "op": "SWAP1", - "path": "6", - "statement": 5 - }, - "1069": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 954, - 972 - ], - "op": "DUP2", - "path": "6" - }, - "1070": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 954, - 972 - ], - "op": "AND", - "path": "6" - }, - "1071": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 954, - 980 - ], - "op": "EQ", - "path": "6" - }, - "1072": { - "fn": "MerkleDistributor.isClaimed", - "offset": [ - 954, - 980 - ], - "op": "SWAP1", - "path": "6" - }, - "1073": { - "fn": "MerkleDistributor.isClaimed", - "jump": "o", - "offset": [ - 662, - 987 - ], - "op": "JUMP", - "path": "6" - }, - "1074": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1075": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2114, - 2122 - ], - "op": "PUSH1", - "path": "6", - "statement": 6, - "value": "0x1" - }, - "1077": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2114, - 2122 - ], - "op": "SLOAD", - "path": "6" - }, - "1078": { - "op": "PUSH1", - "value": "0x1" - }, - "1080": { - "op": "PUSH1", - "value": "0x1" - }, - "1082": { - "op": "PUSH1", - "value": "0xA0" - }, - "1084": { - "op": "SHL" - }, - "1085": { - "op": "SUB" - }, - "1086": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2114, - 2122 - ], - "op": "AND", - "path": "6" - }, - "1087": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2100, - 2110 - ], - "op": "CALLER", - "path": "6" - }, - "1088": { - "branch": 18, - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2100, - 2122 - ], - "op": "EQ", - "path": "6" - }, - "1089": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH2", - "path": "6", - "value": "0x47D" - }, - "1092": { - "branch": 18, - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "JUMPI", - "path": "6" - }, - "1093": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1095": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "DUP1", - "path": "6" - }, - "1096": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "MLOAD", - "path": "6" - }, - "1097": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1101": { - "op": "PUSH1", - "value": "0xE5" - }, - "1103": { - "op": "SHL" - }, - "1104": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "DUP2", - "path": "6" - }, - "1105": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "MSTORE", - "path": "6" - }, - "1106": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "1108": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "1110": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "DUP3", - "path": "6" - }, - "1111": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "ADD", - "path": "6" - }, - "1112": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "MSTORE", - "path": "6" - }, - "1113": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x9" - }, - "1115": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x24" - }, - "1117": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "DUP3", - "path": "6" - }, - "1118": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "ADD", - "path": "6" - }, - "1119": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "MSTORE", - "path": "6" - }, - "1120": { - "op": "PUSH9", - "value": "0x10B232B83637BCB2B9" - }, - "1130": { - "op": "PUSH1", - "value": "0xB9" - }, - "1132": { - "op": "SHL" - }, - "1133": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x44" - }, - "1135": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "DUP3", - "path": "6" - }, - "1136": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "ADD", - "path": "6" - }, - "1137": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "MSTORE", - "path": "6" - }, - "1138": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "SWAP1", - "path": "6" - }, - "1139": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "MLOAD", - "path": "6" - }, - "1140": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "SWAP1", - "path": "6" - }, - "1141": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "DUP2", - "path": "6" - }, - "1142": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "SWAP1", - "path": "6" - }, - "1143": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "SUB", - "path": "6" - }, - "1144": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "PUSH1", - "path": "6", - "value": "0x64" - }, - "1146": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "ADD", - "path": "6" - }, - "1147": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "SWAP1", - "path": "6" - }, - "1148": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "REVERT", - "path": "6" - }, - "1149": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2092, - 2136 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1150": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2164, - 2169 - ], - "op": "PUSH32", - "path": "6", - "statement": 7, - "value": "0x0" - }, - "1183": { - "op": "PUSH1", - "value": "0x1" - }, - "1185": { - "op": "PUSH1", - "value": "0x1" - }, - "1187": { - "op": "PUSH1", - "value": "0xA0" - }, - "1189": { - "op": "SHL" - }, - "1190": { - "op": "SUB" - }, - "1191": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2154, - 2169 - ], - "op": "AND", - "path": "6" - }, - "1192": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2154, - 2160 - ], - "op": "DUP3", - "path": "6" - }, - "1193": { - "op": "PUSH1", - "value": "0x1" - }, - "1195": { - "op": "PUSH1", - "value": "0x1" - }, - "1197": { - "op": "PUSH1", - "value": "0xA0" - }, - "1199": { - "op": "SHL" - }, - "1200": { - "op": "SUB" - }, - "1201": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2154, - 2169 - ], - "op": "AND", - "path": "6" - }, - "1202": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2154, - 2169 - ], - "op": "EQ", - "path": "6" - }, - "1203": { - "branch": 19, - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2154, - 2169 - ], - "op": "ISZERO", - "path": "6" - }, - "1204": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH2", - "path": "6", - "value": "0x4ED" - }, - "1207": { - "branch": 19, - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "JUMPI", - "path": "6" - }, - "1208": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1210": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "DUP1", - "path": "6" - }, - "1211": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "MLOAD", - "path": "6" - }, - "1212": { - "op": "PUSH3", - "value": "0x461BCD" - }, - "1216": { - "op": "PUSH1", - "value": "0xE5" - }, - "1218": { - "op": "SHL" - }, - "1219": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "DUP2", - "path": "6" - }, - "1220": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "MSTORE", - "path": "6" - }, - "1221": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "1223": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "1225": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "DUP3", - "path": "6" - }, - "1226": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "ADD", - "path": "6" - }, - "1227": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "MSTORE", - "path": "6" - }, - "1228": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x6" - }, - "1230": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x24" - }, - "1232": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "DUP3", - "path": "6" - }, - "1233": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "ADD", - "path": "6" - }, - "1234": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "MSTORE", - "path": "6" - }, - "1235": { - "op": "PUSH6", - "value": "0x10BA37B5B2B7" - }, - "1242": { - "op": "PUSH1", - "value": "0xD1" - }, - "1244": { - "op": "SHL" - }, - "1245": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x44" - }, - "1247": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "DUP3", - "path": "6" - }, - "1248": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "ADD", - "path": "6" - }, - "1249": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "MSTORE", - "path": "6" - }, - "1250": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "SWAP1", - "path": "6" - }, - "1251": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "MLOAD", - "path": "6" - }, - "1252": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "SWAP1", - "path": "6" - }, - "1253": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "DUP2", - "path": "6" - }, - "1254": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "SWAP1", - "path": "6" - }, - "1255": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "SUB", - "path": "6" - }, - "1256": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "PUSH1", - "path": "6", - "value": "0x64" - }, - "1258": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "ADD", - "path": "6" - }, - "1259": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "SWAP1", - "path": "6" - }, - "1260": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "REVERT", - "path": "6" - }, - "1261": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2146, - 2180 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1262": { - "op": "PUSH1", - "value": "0x1" - }, - "1264": { - "op": "PUSH1", - "value": "0x1" - }, - "1266": { - "op": "PUSH1", - "value": "0xA0" - }, - "1268": { - "op": "SHL" - }, - "1269": { - "op": "SUB" - }, - "1270": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2194, - 2214 - ], - "op": "DUP3", - "path": "6" - }, - "1271": { - "branch": 20, - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2194, - 2214 - ], - "op": "AND", - "path": "6" - }, - "1272": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2190, - 2387 - ], - "op": "PUSH2", - "path": "6", - "value": "0x53B" - }, - "1275": { - "branch": 20, - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2190, - 2387 - ], - "op": "JUMPI", - "path": "6" - }, - "1276": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "PUSH1", - "path": "6", - "statement": 8, - "value": "0x1" - }, - "1278": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "SLOAD", - "path": "6" - }, - "1279": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1281": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "MLOAD", - "path": "6" - }, - "1282": { - "op": "PUSH1", - "value": "0x1" - }, - "1284": { - "op": "PUSH1", - "value": "0x1" - }, - "1286": { - "op": "PUSH1", - "value": "0xA0" - }, - "1288": { - "op": "SHL" - }, - "1289": { - "op": "SUB" - }, - "1290": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "SWAP1", - "path": "6" - }, - "1291": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "SWAP2", - "path": "6" - }, - "1292": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "AND", - "path": "6" - }, - "1293": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "SWAP1", - "path": "6" - }, - "1294": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "DUP3", - "path": "6" - }, - "1295": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "ISZERO", - "path": "6" - }, - "1296": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "PUSH2", - "path": "6", - "value": "0x8FC" - }, - "1299": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "MUL", - "path": "6" - }, - "1300": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "SWAP1", - "path": "6" - }, - "1301": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2295, - 2302 - ], - "op": "DUP4", - "path": "6" - }, - "1302": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2295, - 2302 - ], - "op": "SWAP1", - "path": "6" - }, - "1303": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1305": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "DUP2", - "path": "6" - }, - "1306": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "DUP2", - "path": "6" - }, - "1307": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "DUP2", - "path": "6" - }, - "1308": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2295, - 2302 - ], - "op": "DUP6", - "path": "6" - }, - "1309": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2276, - 2284 - ], - "op": "DUP9", - "path": "6" - }, - "1310": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "DUP9", - "path": "6" - }, - "1311": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "CALL", - "path": "6" - }, - "1312": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "SWAP4", - "path": "6" - }, - "1313": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "POP", - "path": "6" - }, - "1314": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "POP", - "path": "6" - }, - "1315": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "POP", - "path": "6" - }, - "1316": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "POP", - "path": "6" - }, - "1317": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "ISZERO", - "path": "6" - }, - "1318": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "DUP1", - "path": "6" - }, - "1319": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "ISZERO", - "path": "6" - }, - "1320": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "PUSH2", - "path": "6", - "value": "0x535" - }, - "1323": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "JUMPI", - "path": "6" - }, - "1324": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "1325": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1327": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "DUP1", - "path": "6" - }, - "1328": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "RETURNDATACOPY", - "path": "6" - }, - "1329": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "1330": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1332": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "REVERT", - "path": "6" - }, - "1333": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1334": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2268, - 2303 - ], - "op": "POP", - "path": "6" - }, - "1335": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2190, - 2387 - ], - "op": "PUSH2", - "path": "6", - "value": "0x5BE" - }, - "1338": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2190, - 2387 - ], - "op": "JUMP", - "path": "6" - }, - "1339": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2190, - 2387 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1340": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2358, - 2366 - ], - "op": "PUSH1", - "path": "6", - "statement": 9, - "value": "0x1" - }, - "1342": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2358, - 2366 - ], - "op": "SLOAD", - "path": "6" - }, - "1343": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1345": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1346": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "MLOAD", - "path": "6" - }, - "1347": { - "op": "PUSH4", - "value": "0xA9059CBB" - }, - "1352": { - "op": "PUSH1", - "value": "0xE0" - }, - "1354": { - "op": "SHL" - }, - "1355": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP2", - "path": "6" - }, - "1356": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "MSTORE", - "path": "6" - }, - "1357": { - "op": "PUSH1", - "value": "0x1" - }, - "1359": { - "op": "PUSH1", - "value": "0x1" - }, - "1361": { - "op": "PUSH1", - "value": "0xA0" - }, - "1363": { - "op": "SHL" - }, - "1364": { - "op": "SUB" - }, - "1365": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2358, - 2366 - ], - "op": "SWAP3", - "path": "6" - }, - "1366": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2358, - 2366 - ], - "op": "DUP4", - "path": "6" - }, - "1367": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2358, - 2366 - ], - "op": "AND", - "path": "6" - }, - "1368": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x4" - }, - "1370": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP3", - "path": "6" - }, - "1371": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ADD", - "path": "6" - }, - "1372": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "MSTORE", - "path": "6" - }, - "1373": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x24" - }, - "1375": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP2", - "path": "6" - }, - "1376": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ADD", - "path": "6" - }, - "1377": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP5", - "path": "6" - }, - "1378": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP1", - "path": "6" - }, - "1379": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "MSTORE", - "path": "6" - }, - "1380": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP1", - "path": "6" - }, - "1381": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "MLOAD", - "path": "6" - }, - "1382": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "SWAP2", - "path": "6" - }, - "1383": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "DUP5", - "path": "6" - }, - "1384": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "AND", - "path": "6" - }, - "1385": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "SWAP2", - "path": "6" - }, - "1386": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "PUSH4", - "path": "6", - "value": "0xA9059CBB" - }, - "1391": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "SWAP2", - "path": "6" - }, - "1392": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x44" - }, - "1394": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1395": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP3", - "path": "6" - }, - "1396": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ADD", - "path": "6" - }, - "1397": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP3", - "path": "6" - }, - "1398": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "1400": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP3", - "path": "6" - }, - "1401": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP1", - "path": "6" - }, - "1402": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP2", - "path": "6" - }, - "1403": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP1", - "path": "6" - }, - "1404": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP3", - "path": "6" - }, - "1405": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SWAP1", - "path": "6" - }, - "1406": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "SUB", - "path": "6" - }, - "1407": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ADD", - "path": "6" - }, - "1408": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP2", - "path": "6" - }, - "1409": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2358, - 2366 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1411": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2357 - ], - "op": "DUP8", - "path": "6" - }, - "1412": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1413": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "EXTCODESIZE", - "path": "6" - }, - "1414": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ISZERO", - "path": "6" - }, - "1415": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1416": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ISZERO", - "path": "6" - }, - "1417": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH2", - "path": "6", - "value": "0x591" - }, - "1420": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "JUMPI", - "path": "6" - }, - "1421": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1423": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1424": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "REVERT", - "path": "6" - }, - "1425": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1426": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "POP", - "path": "6" - }, - "1427": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "GAS", - "path": "6" - }, - "1428": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "CALL", - "path": "6" - }, - "1429": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ISZERO", - "path": "6" - }, - "1430": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1431": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ISZERO", - "path": "6" - }, - "1432": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH2", - "path": "6", - "value": "0x5A5" - }, - "1435": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "JUMPI", - "path": "6" - }, - "1436": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "1437": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1439": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1440": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "RETURNDATACOPY", - "path": "6" - }, - "1441": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "1442": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1444": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "REVERT", - "path": "6" - }, - "1445": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1446": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "POP", - "path": "6" - }, - "1447": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "POP", - "path": "6" - }, - "1448": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "POP", - "path": "6" - }, - "1449": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "POP", - "path": "6" - }, - "1450": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1452": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "MLOAD", - "path": "6" - }, - "1453": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "RETURNDATASIZE", - "path": "6" - }, - "1454": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "1456": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP2", - "path": "6" - }, - "1457": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "LT", - "path": "6" - }, - "1458": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "ISZERO", - "path": "6" - }, - "1459": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH2", - "path": "6", - "value": "0x5BB" - }, - "1462": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "JUMPI", - "path": "6" - }, - "1463": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1465": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "DUP1", - "path": "6" - }, - "1466": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "REVERT", - "path": "6" - }, - "1467": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2334, - 2376 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1468": { - "op": "POP" - }, - "1469": { - "op": "POP" - }, - "1470": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2190, - 2387 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1471": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "POP", - "path": "6" - }, - "1472": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 2019, - 2393 - ], - "op": "POP", - "path": "6" - }, - "1473": { - "fn": "MerkleDistributor.collectDust", - "jump": "o", - "offset": [ - 2019, - 2393 - ], - "op": "JUMP", - "path": "6" - }, - "1474": { - "offset": [ - 287, - 326 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1475": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "PUSH32", - "path": "6", - "value": "0x0" - }, - "1508": { - "fn": "MerkleDistributor.collectDust", - "offset": [ - 287, - 326 - ], - "op": "DUP2", - "path": "6" - }, - "1509": { - "fn": "MerkleDistributor.collectDust", - "jump": "o", - "offset": [ - 287, - 326 - ], - "op": "JUMP", - "path": "6" - }, - "1510": { - "fn": "MerkleProof.verify", - "offset": [ - 497, - 1276 - ], - "op": "JUMPDEST", - "path": "1" - }, - "1511": { - "fn": "MerkleProof.verify", - "offset": [ - 588, - 592 - ], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "1513": { - "fn": "MerkleProof.verify", - "offset": [ - 627, - 631 - ], - "op": "DUP2", - "path": "1" - }, - "1514": { - "fn": "MerkleProof.verify", - "offset": [ - 588, - 592 - ], - "op": "DUP2", - "path": "1" - }, - "1515": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "JUMPDEST", - "path": "1" - }, - "1516": { - "fn": "MerkleProof.verify", - "offset": [ - 666, - 671 - ], - "op": "DUP6", - "path": "1" - }, - "1517": { - "fn": "MerkleProof.verify", - "offset": [ - 666, - 678 - ], - "op": "MLOAD", - "path": "1" - }, - "1518": { - "fn": "MerkleProof.verify", - "offset": [ - 662, - 663 - ], - "op": "DUP2", - "path": "1" - }, - "1519": { - "fn": "MerkleProof.verify", - "offset": [ - 662, - 678 - ], - "op": "LT", - "path": "1" - }, - "1520": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "ISZERO", - "path": "1" - }, - "1521": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "PUSH2", - "path": "1", - "value": "0x684" - }, - "1524": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "JUMPI", - "path": "1" - }, - "1525": { - "fn": "MerkleProof.verify", - "offset": [ - 699, - 719 - ], - "op": "PUSH1", - "path": "1", - "value": "0x0" - }, - "1527": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 727 - ], - "op": "DUP7", - "path": "1" - }, - "1528": { - "fn": "MerkleProof.verify", - "offset": [ - 728, - 729 - ], - "op": "DUP3", - "path": "1" - }, - "1529": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "DUP2", - "path": "1" - }, - "1530": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "MLOAD", - "path": "1" - }, - "1531": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "DUP2", - "path": "1" - }, - "1532": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "LT", - "path": "1" - }, - "1533": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "PUSH2", - "path": "1", - "value": "0x602" - }, - "1536": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "JUMPI", - "path": "1" - }, - "1537": { - "dev": "Index out of range", - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "INVALID", - "path": "1" - }, - "1538": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "JUMPDEST", - "path": "1" - }, - "1539": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1541": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "MUL", - "path": "1" - }, - "1542": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1544": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "ADD", - "path": "1" - }, - "1545": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "ADD", - "path": "1" - }, - "1546": { - "fn": "MerkleProof.verify", - "offset": [ - 722, - 730 - ], - "op": "MLOAD", - "path": "1" - }, - "1547": { - "fn": "MerkleProof.verify", - "offset": [ - 699, - 730 - ], - "op": "SWAP1", - "path": "1" - }, - "1548": { - "fn": "MerkleProof.verify", - "offset": [ - 699, - 730 - ], - "op": "POP", - "path": "1" - }, - "1549": { - "fn": "MerkleProof.verify", - "offset": [ - 765, - 777 - ], - "op": "DUP1", - "path": "1" - }, - "1550": { - "fn": "MerkleProof.verify", - "offset": [ - 749, - 761 - ], - "op": "DUP4", - "path": "1" - }, - "1551": { - "branch": 21, - "fn": "MerkleProof.verify", - "offset": [ - 749, - 777 - ], - "op": "GT", - "path": "1" - }, - "1552": { - "fn": "MerkleProof.verify", - "offset": [ - 745, - 1147 - ], - "op": "PUSH2", - "path": "1", - "value": "0x649" - }, - "1555": { - "branch": 21, - "fn": "MerkleProof.verify", - "offset": [ - 745, - 1147 - ], - "op": "JUMPI", - "path": "1" - }, - "1556": { - "fn": "MerkleProof.verify", - "offset": [ - 917, - 929 - ], - "op": "DUP3", - "path": "1", - "statement": 10 - }, - "1557": { - "fn": "MerkleProof.verify", - "offset": [ - 931, - 943 - ], - "op": "DUP2", - "path": "1" - }, - "1558": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "1560": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "MLOAD", - "path": "1" - }, - "1561": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1563": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "ADD", - "path": "1" - }, - "1564": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP1", - "path": "1" - }, - "1565": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP4", - "path": "1" - }, - "1566": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP2", - "path": "1" - }, - "1567": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "MSTORE", - "path": "1" - }, - "1568": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1570": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "ADD", - "path": "1" - }, - "1571": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP3", - "path": "1" - }, - "1572": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP2", - "path": "1" - }, - "1573": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "MSTORE", - "path": "1" - }, - "1574": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1576": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "ADD", - "path": "1" - }, - "1577": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "SWAP3", - "path": "1" - }, - "1578": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "POP", - "path": "1" - }, - "1579": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "POP", - "path": "1" - }, - "1580": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "POP", - "path": "1" - }, - "1581": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "1583": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "MLOAD", - "path": "1" - }, - "1584": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1586": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP2", - "path": "1" - }, - "1587": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP4", - "path": "1" - }, - "1588": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "SUB", - "path": "1" - }, - "1589": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "SUB", - "path": "1" - }, - "1590": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "DUP2", - "path": "1" - }, - "1591": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "MSTORE", - "path": "1" - }, - "1592": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "SWAP1", - "path": "1" - }, - "1593": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "1595": { - "fn": "MerkleProof.verify", - "offset": [ - 900, - 944 - ], - "op": "MSTORE", - "path": "1" - }, - "1596": { - "fn": "MerkleProof.verify", - "offset": [ - 890, - 945 - ], - "op": "DUP1", - "path": "1" - }, - "1597": { - "fn": "MerkleProof.verify", - "offset": [ - 890, - 945 - ], - "op": "MLOAD", - "path": "1" - }, - "1598": { - "fn": "MerkleProof.verify", - "offset": [ - 890, - 945 - ], - "op": "SWAP1", - "path": "1" - }, - "1599": { - "fn": "MerkleProof.verify", - "offset": [ - 890, - 945 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1601": { - "fn": "MerkleProof.verify", - "offset": [ - 890, - 945 - ], - "op": "ADD", - "path": "1" - }, - "1602": { - "fn": "MerkleProof.verify", - "offset": [ - 890, - 945 - ], - "op": "KECCAK256", - "path": "1" - }, - "1603": { - "fn": "MerkleProof.verify", - "offset": [ - 875, - 945 - ], - "op": "SWAP3", - "path": "1" - }, - "1604": { - "fn": "MerkleProof.verify", - "offset": [ - 875, - 945 - ], - "op": "POP", - "path": "1" - }, - "1605": { - "fn": "MerkleProof.verify", - "offset": [ - 745, - 1147 - ], - "op": "PUSH2", - "path": "1", - "value": "0x67B" - }, - "1608": { - "fn": "MerkleProof.verify", - "offset": [ - 745, - 1147 - ], - "op": "JUMP", - "path": "1" - }, - "1609": { - "fn": "MerkleProof.verify", - "offset": [ - 745, - 1147 - ], - "op": "JUMPDEST", - "path": "1" - }, - "1610": { - "fn": "MerkleProof.verify", - "offset": [ - 1104, - 1116 - ], - "op": "DUP1", - "path": "1", - "statement": 11 - }, - "1611": { - "fn": "MerkleProof.verify", - "offset": [ - 1118, - 1130 - ], - "op": "DUP4", - "path": "1" - }, - "1612": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "1614": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "MLOAD", - "path": "1" - }, - "1615": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1617": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "ADD", - "path": "1" - }, - "1618": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP1", - "path": "1" - }, - "1619": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP4", - "path": "1" - }, - "1620": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP2", - "path": "1" - }, - "1621": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "MSTORE", - "path": "1" - }, - "1622": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1624": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "ADD", - "path": "1" - }, - "1625": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP3", - "path": "1" - }, - "1626": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP2", - "path": "1" - }, - "1627": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "MSTORE", - "path": "1" - }, - "1628": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1630": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "ADD", - "path": "1" - }, - "1631": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "SWAP3", - "path": "1" - }, - "1632": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "POP", - "path": "1" - }, - "1633": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "POP", - "path": "1" - }, - "1634": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "POP", - "path": "1" - }, - "1635": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "1637": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "MLOAD", - "path": "1" - }, - "1638": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1640": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP2", - "path": "1" - }, - "1641": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP4", - "path": "1" - }, - "1642": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "SUB", - "path": "1" - }, - "1643": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "SUB", - "path": "1" - }, - "1644": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "DUP2", - "path": "1" - }, - "1645": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "MSTORE", - "path": "1" - }, - "1646": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "SWAP1", - "path": "1" - }, - "1647": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "PUSH1", - "path": "1", - "value": "0x40" - }, - "1649": { - "fn": "MerkleProof.verify", - "offset": [ - 1087, - 1131 - ], - "op": "MSTORE", - "path": "1" - }, - "1650": { - "fn": "MerkleProof.verify", - "offset": [ - 1077, - 1132 - ], - "op": "DUP1", - "path": "1" - }, - "1651": { - "fn": "MerkleProof.verify", - "offset": [ - 1077, - 1132 - ], - "op": "MLOAD", - "path": "1" - }, - "1652": { - "fn": "MerkleProof.verify", - "offset": [ - 1077, - 1132 - ], - "op": "SWAP1", - "path": "1" - }, - "1653": { - "fn": "MerkleProof.verify", - "offset": [ - 1077, - 1132 - ], - "op": "PUSH1", - "path": "1", - "value": "0x20" - }, - "1655": { - "fn": "MerkleProof.verify", - "offset": [ - 1077, - 1132 - ], - "op": "ADD", - "path": "1" - }, - "1656": { - "fn": "MerkleProof.verify", - "offset": [ - 1077, - 1132 - ], - "op": "KECCAK256", - "path": "1" - }, - "1657": { - "fn": "MerkleProof.verify", - "offset": [ - 1062, - 1132 - ], - "op": "SWAP3", - "path": "1" - }, - "1658": { - "fn": "MerkleProof.verify", - "offset": [ - 1062, - 1132 - ], - "op": "POP", - "path": "1" - }, - "1659": { - "fn": "MerkleProof.verify", - "offset": [ - 745, - 1147 - ], - "op": "JUMPDEST", - "path": "1" - }, - "1660": { - "op": "POP" - }, - "1661": { - "fn": "MerkleProof.verify", - "offset": [ - 680, - 683 - ], - "op": "PUSH1", - "path": "1", - "statement": 12, - "value": "0x1" - }, - "1663": { - "fn": "MerkleProof.verify", - "offset": [ - 680, - 683 - ], - "op": "ADD", - "path": "1" - }, - "1664": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "PUSH2", - "path": "1", - "value": "0x5EB" - }, - "1667": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "JUMP", - "path": "1" - }, - "1668": { - "fn": "MerkleProof.verify", - "offset": [ - 642, - 1157 - ], - "op": "JUMPDEST", - "path": "1" - }, - "1669": { - "op": "POP" - }, - "1670": { - "fn": "MerkleProof.verify", - "offset": [ - 1249, - 1269 - ], - "op": "SWAP1", - "path": "1", - "statement": 13 - }, - "1671": { - "fn": "MerkleProof.verify", - "offset": [ - 1249, - 1269 - ], - "op": "SWAP3", - "path": "1" - }, - "1672": { - "fn": "MerkleProof.verify", - "offset": [ - 1249, - 1269 - ], - "op": "EQ", - "path": "1" - }, - "1673": { - "fn": "MerkleProof.verify", - "offset": [ - 1249, - 1269 - ], - "op": "SWAP4", - "path": "1" - }, - "1674": { - "fn": "MerkleProof.verify", - "offset": [ - 497, - 1276 - ], - "op": "SWAP3", - "path": "1" - }, - "1675": { - "op": "POP" - }, - "1676": { - "op": "POP" - }, - "1677": { - "op": "POP" - }, - "1678": { - "fn": "MerkleProof.verify", - "jump": "o", - "offset": [ - 497, - 1276 - ], - "op": "JUMP", - "path": "1" - }, - "1679": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 993, - 1263 - ], - "op": "JUMPDEST", - "path": "6" - }, - "1680": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1082, - 1085 - ], - "op": "PUSH2", - "path": "6", - "value": "0x100" - }, - "1683": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1074, - 1085 - ], - "op": "DUP2", - "path": "6" - }, - "1684": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1074, - 1085 - ], - "op": "DIV", - "path": "6" - }, - "1685": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1047, - 1071 - ], - "op": "PUSH1", - "path": "6", - "value": "0x0" - }, - "1687": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "SWAP1", - "path": "6", - "statement": 14 - }, - "1688": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "DUP2", - "path": "6" - }, - "1689": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "MSTORE", - "path": "6" - }, - "1690": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "PUSH1", - "path": "6", - "value": "0x20" - }, - "1692": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "DUP2", - "path": "6" - }, - "1693": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "SWAP1", - "path": "6" - }, - "1694": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "MSTORE", - "path": "6" - }, - "1695": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "PUSH1", - "path": "6", - "value": "0x40" - }, - "1697": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "SWAP1", - "path": "6" - }, - "1698": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "KECCAK256", - "path": "6" - }, - "1699": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "DUP1", - "path": "6" - }, - "1700": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1219 - ], - "op": "SLOAD", - "path": "6" - }, - "1701": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1235, - 1236 - ], - "op": "PUSH1", - "path": "6", - "value": "0x1" - }, - "1703": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1121, - 1132 - ], - "op": "PUSH1", - "path": "6", - "value": "0xFF" - }, - "1705": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1121, - 1132 - ], - "op": "SWAP1", - "path": "6" - }, - "1706": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1121, - 1132 - ], - "op": "SWAP4", - "path": "6" - }, - "1707": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1121, - 1132 - ], - "op": "AND", - "path": "6" - }, - "1708": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1235, - 1255 - ], - "op": "SWAP3", - "path": "6" - }, - "1709": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1235, - 1255 - ], - "op": "SWAP1", - "path": "6" - }, - "1710": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1235, - 1255 - ], - "op": "SWAP3", - "path": "6" - }, - "1711": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1235, - 1255 - ], - "op": "SHL", - "path": "6" - }, - "1712": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1256 - ], - "op": "SWAP1", - "path": "6" - }, - "1713": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1256 - ], - "op": "SWAP2", - "path": "6" - }, - "1714": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1188, - 1256 - ], - "op": "OR", - "path": "6" - }, - "1715": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1142, - 1256 - ], - "op": "SWAP1", - "path": "6" - }, - "1716": { - "fn": "MerkleDistributor._setClaimed", - "offset": [ - 1142, - 1256 - ], - "op": "SSTORE", - "path": "6" - }, - "1717": { - "fn": "MerkleDistributor._setClaimed", - "jump": "o", - "offset": [ - 993, - 1263 - ], - "op": "JUMP", - "path": "6" - } - }, - "sha1": "4cb1e59127354a0cb85d563c69292e4c3f58ea2b", - "source": "// SPDX-License-Identifier: UNLICENSED\npragma solidity =0.6.11;\n\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts/cryptography/MerkleProof.sol\";\nimport \"./interfaces/IMerkleDistributor.sol\";\n\ncontract MerkleDistributor is IMerkleDistributor {\n address public immutable override token;\n bytes32 public immutable override merkleRoot;\n\n // This is a packed array of booleans.\n mapping(uint256 => uint256) private claimedBitMap;\n address deployer;\n\n constructor(address token_, bytes32 merkleRoot_) public {\n token = token_;\n merkleRoot = merkleRoot_;\n deployer = msg.sender;\n }\n\n function isClaimed(uint256 index) public view override returns (bool) {\n uint256 claimedWordIndex = index / 256;\n uint256 claimedBitIndex = index % 256;\n uint256 claimedWord = claimedBitMap[claimedWordIndex];\n uint256 mask = (1 << claimedBitIndex);\n return claimedWord & mask == mask;\n }\n\n function _setClaimed(uint256 index) private {\n uint256 claimedWordIndex = index / 256;\n uint256 claimedBitIndex = index % 256;\n claimedBitMap[claimedWordIndex] =\n claimedBitMap[claimedWordIndex] |\n (1 << claimedBitIndex);\n }\n\n function claim(\n uint256 index,\n address account,\n uint256 amount,\n bytes32[] calldata merkleProof\n ) external override {\n require(!isClaimed(index), \"MerkleDistributor: Drop already claimed.\");\n\n // Verify the merkle proof.\n bytes32 node = keccak256(abi.encodePacked(index, account, amount));\n require(\n MerkleProof.verify(merkleProof, merkleRoot, node),\n \"MerkleDistributor: Invalid proof.\"\n );\n\n // Mark it claimed and send the token.\n _setClaimed(index);\n require(\n IERC20(token).transfer(account, amount),\n \"MerkleDistributor: Transfer failed.\"\n );\n\n emit Claimed(index, account, amount);\n }\n\n function collectDust(address _token, uint256 _amount) external {\n require(msg.sender == deployer, \"!deployer\");\n require(_token != token, \"!token\");\n if (_token == address(0)) {\n // token address(0) = ETH\n payable(deployer).transfer(_amount);\n } else {\n IERC20(_token).transfer(deployer, _amount);\n }\n }\n}\n", - "sourceMap": "232:2163:6:-:0;;;504:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;504:152:6;;;;;;;-1:-1:-1;;;;;;570:14:6;;;;;;;594:24;;;;628:8;:21;;-1:-1:-1;;;;;;628:21:6;639:10;628:21;;;-1:-1:-1;;;;;232:2163:6;;;;;;-1:-1:-1;232:2163:6;;;;;", - "sourcePath": "contracts/MerkleDistributor.sol", - "type": "contract" -} \ No newline at end of file diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MultiSigSwapWallet.json b/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MultiSigSwapWallet.json deleted file mode 100644 index ddc120c..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MultiSigSwapWallet.json +++ /dev/null @@ -1,976 +0,0 @@ -{ - "deploy": { - "VM:-": { - "linkReferences": {}, - "autoDeployLib": true - }, - "main:1": { - "linkReferences": {}, - "autoDeployLib": true - }, - "ropsten:3": { - "linkReferences": {}, - "autoDeployLib": true - }, - "rinkeby:4": { - "linkReferences": {}, - "autoDeployLib": true - }, - "kovan:42": { - "linkReferences": {}, - "autoDeployLib": true - }, - "görli:5": { - "linkReferences": {}, - "autoDeployLib": true - }, - "Custom": { - "linkReferences": {}, - "autoDeployLib": true - } - }, - "data": { - "bytecode": { - "linkReferences": {}, - "object": "6080604052600a805460ff191690553480156200001b57600080fd5b50604051620028a5380380620028a5833981810160405260608110156200004157600080fd5b81019080805160405193929190846401000000008211156200006257600080fd5b9083019060208201858111156200007857600080fd5b82518660208202830111640100000000821117156200009657600080fd5b82525081516020918201928201910280838360005b83811015620000c5578181015183820152602001620000ab565b5050505091909101604090815260208301519201518551929450925083905060328211801590620000f65750818111155b80156200010257508015155b80156200010e57508115155b6200011857600080fd5b826001600160a01b0381166200012d57600080fd5b60005b8651811015620001ff57600360008883815181106200014b57fe5b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16158015620001a7575060006001600160a01b03168782815181106200019357fe5b60200260200101516001600160a01b031614155b620001b157600080fd5b600160036000898481518110620001c457fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000130565b5085516200021590600690602089019062000247565b505050600892909255600780546001600160a01b0319166001600160a01b039290921691909117905550620002d29050565b8280548282559060005260206000209081019282156200029f579160200282015b828111156200029f57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000268565b50620002ad929150620002b1565b5090565b5b80821115620002ad5780546001600160a01b0319168155600101620002b2565b6125c380620002e26000396000f3fe6080604052600436106102135760003560e01c80638509309511610118578063c01a8c84116100a0578063d74f8edd1161006f578063d74f8edd14610a16578063dc8452cd14610a2b578063e20056e614610a40578063ea5416a514610a7b578063ee22610b14610aae5761021d565b8063c01a8c841461098f578063c415b95c146109b9578063c5925420146109ce578063d48bfca7146109e35761021d565b8063a0e67e2b116100e7578063a0e67e2b146108d1578063a8abe69a146108e6578063b5dc40c314610926578063b77bf60014610950578063ba51a6df146109655761021d565b806385093095146106865780638600c9d5146106eb5780638b51d13f146107c75780639ace38c2146107f15761021d565b8063558b7dd11161019b5780636350ae121161016a5780636350ae12146105905780637065cb48146105c3578063753d7563146105f6578063784547a7146106295780637f0d3697146106535761021d565b8063558b7dd11461048d5780635c975abb146104a25780635fa7b584146104b7578063627dd56a146104ea5761021d565b806320ea8d86116101e257806320ea8d86146103735780632f54bf6e1461039d5780633411c81c146103e45780634f64b2be1461041d57806354741525146104475761021d565b8063025e7c271461022257806312fde4b714610268578063173825d91461027d57806320aeb817146102b25761021d565b3661021d57600080fd5b600080fd5b34801561022e57600080fd5b5061024c6004803603602081101561024557600080fd5b5035610ad8565b604080516001600160a01b039092168252519081900360200190f35b34801561027457600080fd5b5061024c610aff565b34801561028957600080fd5b506102b0600480360360208110156102a057600080fd5b50356001600160a01b0316610b0e565b005b3480156102be57600080fd5b506102b0600480360360608110156102d557600080fd5b8101906020810181356401000000008111156102f057600080fd5b82018360208201111561030257600080fd5b8035906020019184600183028401116401000000008311171561032457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316610c93565b34801561037f57600080fd5b506102b06004803603602081101561039657600080fd5b5035610ea7565b3480156103a957600080fd5b506103d0600480360360208110156103c057600080fd5b50356001600160a01b0316610f5d565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103d06004803603604081101561040757600080fd5b50803590602001356001600160a01b0316610f72565b34801561042957600080fd5b5061024c6004803603602081101561044057600080fd5b5035610f92565b34801561045357600080fd5b5061047b6004803603604081101561046a57600080fd5b508035151590602001351515610f9f565b60408051918252519081900360200190f35b34801561049957600080fd5b506102b061100b565b3480156104ae57600080fd5b506103d0611026565b3480156104c357600080fd5b506102b0600480360360208110156104da57600080fd5b50356001600160a01b031661102f565b6102b06004803603602081101561050057600080fd5b81019060208101813564010000000081111561051b57600080fd5b82018360208201111561052d57600080fd5b8035906020019184600183028401116401000000008311171561054f57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061106d945050505050565b34801561059c57600080fd5b506102b0600480360360208110156105b357600080fd5b50356001600160a01b031661122b565b3480156105cf57600080fd5b506102b0600480360360208110156105e657600080fd5b50356001600160a01b0316611296565b34801561060257600080fd5b506103d06004803603602081101561061957600080fd5b50356001600160a01b03166113aa565b34801561063557600080fd5b506103d06004803603602081101561064c57600080fd5b50356113bf565b34801561065f57600080fd5b5061047b6004803603602081101561067657600080fd5b50356001600160a01b031661144a565b34801561069257600080fd5b5061069b61145c565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106d75781810151838201526020016106bf565b505050509050019250505060405180910390f35b3480156106f757600080fd5b5061047b600480360360c081101561070e57600080fd5b6001600160a01b0382358116926020810135926040820135926060830135169160808101359181019060c0810160a082013564010000000081111561075257600080fd5b82018360208201111561076457600080fd5b8035906020019184600183028401116401000000008311171561078657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114be945050505050565b3480156107d357600080fd5b5061047b600480360360208110156107ea57600080fd5b50356115af565b3480156107fd57600080fd5b5061081b6004803603602081101561081457600080fd5b503561161e565b60405180886001600160a01b03168152602001878152602001806020018615158152602001858152602001846001600160a01b03168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015610890578181015183820152602001610878565b50505050905090810190601f1680156108bd5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b3480156108dd57600080fd5b5061069b6116fa565b3480156108f257600080fd5b5061069b6004803603608081101561090957600080fd5b50803590602081013590604081013515159060600135151561175a565b34801561093257600080fd5b5061069b6004803603602081101561094957600080fd5b50356118b3565b34801561095c57600080fd5b5061047b611a57565b34801561097157600080fd5b506102b06004803603602081101561098857600080fd5b5035611a5d565b34801561099b57600080fd5b506102b0600480360360208110156109b257600080fd5b5035611ada565b3480156109c557600080fd5b5061024c611b9f565b3480156109da57600080fd5b506102b0611bae565b3480156109ef57600080fd5b506102b060048036036020811015610a0657600080fd5b50356001600160a01b0316611bc6565b348015610a2257600080fd5b5061047b611c49565b348015610a3757600080fd5b5061047b611c4e565b348015610a4c57600080fd5b506102b060048036036040811015610a6357600080fd5b506001600160a01b0381358116916020013516611c54565b348015610a8757600080fd5b5061047b60048036036020811015610a9e57600080fd5b50356001600160a01b0316611de6565b348015610aba57600080fd5b506102b060048036036020811015610ad157600080fd5b5035611e01565b60068181548110610ae557fe5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b031690565b333014610b1a57600080fd5b6001600160a01b038116600090815260036020526040902054819060ff16610b4157600080fd5b6001600160a01b0382166000908152600360205260408120805460ff191690555b60065460001901811015610c1557826001600160a01b031660068281548110610b8757fe5b6000918252602090912001546001600160a01b03161415610c0d57600680546000198101908110610bb457fe5b600091825260209091200154600680546001600160a01b039092169183908110610bda57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610c15565b600101610b62565b506006805480610c2157fe5b600082815260209020810160001990810180546001600160a01b03191690550190556006546008541115610c5b57600654610c5b90611a5d565b6040516001600160a01b038316907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25050565b600a5460ff1615610ca357600080fd5b6001600160a01b038116600090815260208190526040902054819060ff16610cca57600080fd5b6040805160078082528183019092528591600091606091602082018180368337019050509050600091505b60078260ff16108015610d245750828260ff1681518110610d1257fe5b01602001516001600160f81b03191615155b15610d7457828260ff1681518110610d3857fe5b602001015160f81c60f81b818360ff1681518110610d5257fe5b60200101906001600160f81b031916908160001a905350600190910190610cf5565b6040805180820190915260078152667365637265743160c81b6020918201528151908201207fb8b37f62ec82443e5b5557c5a187fe3686790620cc04c06187c48f8636caac8914610dc457600080fd5b84610dda6001600160a01b03821633308a612051565b7f7bad95c5817621d8789091ae63d99bf8f7bed9ea4963b10c3d3c6bb7273522b33389898960405180856001600160a01b0316815260200180602001848152602001836001600160a01b03168152602001828103825285818151815260200191508051906020019080838360005b83811015610e60578181015183820152602001610e48565b50505050905090810190601f168015610e8d5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15050505050505050565b3360008181526003602052604090205460ff16610ec357600080fd5b60008281526002602090815260408083203380855292529091205483919060ff16610eed57600080fd5b600084815260016020526040902060030154849060ff1615610f0e57600080fd5b6000858152600260209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60036020526000908152604090205460ff1681565b600260209081526000928352604080842090915290825290205460ff1681565b60058181548110610ae557fe5b6000805b60095481101561100457838015610fcc575060008181526001602052604090206003015460ff16155b80610ff05750828015610ff0575060008181526001602052604090206003015460ff165b15610ffc576001820191505b600101610fa3565b5092915050565b33301461101757600080fd5b600a805460ff19166001179055565b600a5460ff1681565b3360008181526003602052604090205460ff1661104b57600080fd5b506001600160a01b03166000908152602081905260409020805460ff19169055565b600a5460ff161561107d57600080fd5b6040805160078082528183019092528291600091606091602082018180368337019050509050600091505b60078260ff161080156110d75750828260ff16815181106110c557fe5b01602001516001600160f81b03191615155b1561112757828260ff16815181106110eb57fe5b602001015160f81c60f81b818360ff168151811061110557fe5b60200101906001600160f81b031916908160001a9053506001909101906110a8565b6040805180820190915260078152667365637265743160c81b6020918201528151908201207fb8b37f62ec82443e5b5557c5a187fe3686790620cc04c06187c48f8636caac891461117757600080fd5b6000341161118457600080fd5b7f9c33cc77aa0c536ad2721956a5c74fe1ec4101d9c797f25b34cd9ff94344e5ea34856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111ea5781810151838201526020016111d2565b50505050905090810190601f1680156112175780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150505050565b33301461123757600080fd5b806001600160a01b03811661124b57600080fd5b600780546001600160a01b0319166001600160a01b0384169081179091556040517f3908cc4801f68d354a4e28f598ec87870f4b8a4b9a945c81b641d1b677575d5290600090a25050565b3330146112a257600080fd5b6001600160a01b038116600090815260036020526040902054819060ff16156112ca57600080fd5b816001600160a01b0381166112de57600080fd5b600680549050600101600854603282111580156112fb5750818111155b801561130657508015155b801561131157508115155b61131a57600080fd5b6001600160a01b038516600081815260036020526040808220805460ff1916600190811790915560068054918201815583527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b60006020819052908152604090205460ff1681565b600080805b60065481101561143e57600084815260026020526040812060068054919291849081106113ed57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611421576001820191505b60085482141561143657600192505050611445565b6001016113c4565b5060009150505b919050565b60046020526000908152604090205481565b606060058054806020026020016040519081016040528092919081815260200182805480156114b457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611496575b5050505050905090565b3360008181526003602052604081205490919060ff166114dd57600080fd5b6001600160a01b03851660009081526004602052604090205485908790158061151d57506001600160a01b03821660009081526004602052604090205481115b61156e576040805162461bcd60e51b815260206004820152601c60248201527f5472616e73616374696f6e20616c726561647920636f6d707574656400000000604482015290519081900360640190fd5b61157c8a8a8a8a8a8a6120b1565b6001600160a01b038816600090815260046020526040902089905593506115a284611ada565b5050509695505050505050565b6000805b60065481101561161857600083815260026020526040812060068054919291849081106115dc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611610576001820191505b6001016115b3565b50919050565b6001602081815260009283526040928390208054818401546002808401805488516101009882161598909802600019011691909104601f81018690048602870186019097528686526001600160a01b0390921695909492938301828280156116c75780601f1061169c576101008083540402835291602001916116c7565b820191906000526020600020905b8154815290600101906020018083116116aa57829003601f168201915b505050600384015460048501546005860154600690960154949560ff909216949093506001600160a01b03909116915087565b606060068054806020026020016040519081016040528092919081815260200182805480156114b4576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611496575050505050905090565b60608060095467ffffffffffffffff8111801561177657600080fd5b506040519080825280602002602001820160405280156117a0578160200160208202803683370190505b5090506000805b600954811015611821578580156117d0575060008181526001602052604090206003015460ff16155b806117f457508480156117f4575060008181526001602052604090206003015460ff165b15611819578083838151811061180657fe5b6020026020010181815250506001820191505b6001016117a7565b87870367ffffffffffffffff8111801561183a57600080fd5b50604051908082528060200260200182016040528015611864578160200160208202803683370190505b5093508790505b868110156118a85782818151811061187f57fe5b6020026020010151848983038151811061189557fe5b602090810291909101015260010161186b565b505050949350505050565b600654606090819067ffffffffffffffff811180156118d157600080fd5b506040519080825280602002602001820160405280156118fb578160200160208202803683370190505b5090506000805b6006548110156119be576000858152600260205260408120600680549192918490811061192b57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156119b6576006818154811061196557fe5b9060005260206000200160009054906101000a90046001600160a01b031683838151811061198f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001820191505b600101611902565b8167ffffffffffffffff811180156119d557600080fd5b506040519080825280602002602001820160405280156119ff578160200160208202803683370190505b509350600090505b81811015611a4f57828181518110611a1b57fe5b6020026020010151848281518110611a2f57fe5b6001600160a01b0390921660209283029190910190910152600101611a07565b505050919050565b60095481565b333014611a6957600080fd5b6006548160328211801590611a7e5750818111155b8015611a8957508015155b8015611a9457508115155b611a9d57600080fd5b60088390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526003602052604090205460ff16611af657600080fd5b60008281526001602052604090205482906001600160a01b0316611b1957600080fd5b60008381526002602090815260408083203380855292529091205484919060ff1615611b4457600080fd5b6000858152600260209081526040808320338085529252808320805460ff191660011790555187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a3611b9885611e01565b5050505050565b6007546001600160a01b031681565b333014611bba57600080fd5b600a805460ff19169055565b3360008181526003602052604090205460ff16611be257600080fd5b506001600160a01b03166000818152602081905260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b603281565b60085481565b333014611c6057600080fd5b6001600160a01b038216600090815260036020526040902054829060ff16611c8757600080fd5b6001600160a01b038216600090815260036020526040902054829060ff1615611caf57600080fd5b826001600160a01b038116611cc357600080fd5b60005b600654811015611d4b57856001600160a01b031660068281548110611ce757fe5b6000918252602090912001546001600160a01b03161415611d43578460068281548110611d1057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d4b565b600101611cc6565b506001600160a01b03808616600081815260036020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a26040516001600160a01b038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b6001600160a01b031660009081526004602052604090205490565b3360008181526003602052604090205460ff16611e1d57600080fd5b60008281526002602090815260408083203380855292529091205483919060ff16611e4757600080fd5b600084815260016020526040902060030154849060ff1615611e6857600080fd5b611e71856113bf565b15611b9857600085815260016020819052604090912060038101805460ff1916909217909155600681015415611f205760058101546001600160a01b0316611ef75760075460068201546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611ef1573d6000803e3d6000fd5b50611f20565b600581015460075460068301546001600160a01b0392831692611f1e9284929116906121e8565b505b610bb85a1015611f2f57600080fd5b805460018083015460028085018054604080516020601f600019988516156101000298909801909316949094049586018290048202840182019052848352611fdc956001600160a01b03169490830182828015611fcd5780601f10611fa257610100808354040283529160200191611fcd565b820191906000526020600020905b815481529060010190602001808311611fb057829003601f168201915b5050505050610bb85a0361223f565b156120115760405186907f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d90600090a2612049565b60405186907f11a1ae95f9e191458d449e99f17d81683ad9bff69f2a453c2d5ff43fe7c875bb90600090a260038101805460ff191690555b505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526120ab908590612257565b50505050565b6000866001600160a01b0381166120c757600080fd5b6009546040805160e0810182526001600160a01b038b8116825260208083018c8152838501898152600060608601819052608086018e90528c851660a087015260c086018c90528781526001808552969020855181546001600160a01b031916951694909417845590519483019490945592518051949650919390926121549260028501929101906124d0565b50606082015160038201805460ff19169115159190911790556080820151600482015560a08201516005820180546001600160a01b0319166001600160a01b0390921691909117905560c09091015160069091015560098054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261223a908490612257565b505050565b6000806000845160208601878987f195945050505050565b60606122ac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123089092919063ffffffff16565b80519091501561223a578080602001905160208110156122cb57600080fd5b505161223a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612564602a913960400191505060405180910390fd5b6060612317848460008561231f565b949350505050565b606061232a856124ca565b61237b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106123ba5780518252601f19909201916020918201910161239b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461241c576040519150601f19603f3d011682016040523d82523d6000602084013e612421565b606091505b509150915081156124355791506123179050565b8051156124455780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561248f578181015183820152602001612477565b50505050905090810190601f1680156124bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061251157805160ff191683800117855561253e565b8280016001018555821561253e579182015b8281111561253e578251825591602001919060010190612523565b5061254a92915061254e565b5090565b5b8082111561254a576000815560010161254f56fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122068fa3909d388ec01570072dbb28dd0e4361b535c92ebdd71c5c042e257f153cb64736f6c634300060c0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0xA DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x1B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH3 0x28A5 CODESIZE SUB DUP1 PUSH3 0x28A5 DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 LT ISZERO PUSH3 0x41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD PUSH1 0x40 MLOAD SWAP4 SWAP3 SWAP2 SWAP1 DUP5 PUSH5 0x100000000 DUP3 GT ISZERO PUSH3 0x62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP1 DUP4 ADD SWAP1 PUSH1 0x20 DUP3 ADD DUP6 DUP2 GT ISZERO PUSH3 0x78 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MLOAD DUP7 PUSH1 0x20 DUP3 MUL DUP4 ADD GT PUSH5 0x100000000 DUP3 GT OR ISZERO PUSH3 0x96 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 MSTORE POP DUP2 MLOAD PUSH1 0x20 SWAP2 DUP3 ADD SWAP3 DUP3 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH3 0xC5 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH3 0xAB JUMP JUMPDEST POP POP POP POP SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD DUP6 MLOAD SWAP3 SWAP5 POP SWAP3 POP DUP4 SWAP1 POP PUSH1 0x32 DUP3 GT DUP1 ISZERO SWAP1 PUSH3 0xF6 JUMPI POP DUP2 DUP2 GT ISZERO JUMPDEST DUP1 ISZERO PUSH3 0x102 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH3 0x10E JUMPI POP DUP2 ISZERO ISZERO JUMPDEST PUSH3 0x118 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH3 0x12D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH3 0x1FF JUMPI PUSH1 0x3 PUSH1 0x0 DUP9 DUP4 DUP2 MLOAD DUP2 LT PUSH3 0x14B JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO DUP1 ISZERO PUSH3 0x1A7 JUMPI POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 DUP3 DUP2 MLOAD DUP2 LT PUSH3 0x193 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO JUMPDEST PUSH3 0x1B1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x3 PUSH1 0x0 DUP10 DUP5 DUP2 MLOAD DUP2 LT PUSH3 0x1C4 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP3 MSTORE DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x40 ADD PUSH1 0x0 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x1 ADD PUSH3 0x130 JUMP JUMPDEST POP DUP6 MLOAD PUSH3 0x215 SWAP1 PUSH1 0x6 SWAP1 PUSH1 0x20 DUP10 ADD SWAP1 PUSH3 0x247 JUMP JUMPDEST POP POP POP PUSH1 0x8 SWAP3 SWAP1 SWAP3 SSTORE PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE POP PUSH3 0x2D2 SWAP1 POP JUMP JUMPDEST DUP3 DUP1 SLOAD DUP3 DUP3 SSTORE SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 ADD SWAP3 DUP3 ISZERO PUSH3 0x29F JUMPI SWAP2 PUSH1 0x20 MUL DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH3 0x29F JUMPI DUP3 MLOAD DUP3 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND OR DUP3 SSTORE PUSH1 0x20 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH3 0x268 JUMP JUMPDEST POP PUSH3 0x2AD SWAP3 SWAP2 POP PUSH3 0x2B1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH3 0x2AD JUMPI DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP2 SSTORE PUSH1 0x1 ADD PUSH3 0x2B2 JUMP JUMPDEST PUSH2 0x25C3 DUP1 PUSH3 0x2E2 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x213 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x85093095 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0xC01A8C84 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xD74F8EDD GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0xA16 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0xA2B JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0xA40 JUMPI DUP1 PUSH4 0xEA5416A5 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0xAAE JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x98F JUMPI DUP1 PUSH4 0xC415B95C EQ PUSH2 0x9B9 JUMPI DUP1 PUSH4 0xC5925420 EQ PUSH2 0x9CE JUMPI DUP1 PUSH4 0xD48BFCA7 EQ PUSH2 0x9E3 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0xA0E67E2B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x926 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x950 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x965 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x85093095 EQ PUSH2 0x686 JUMPI DUP1 PUSH4 0x8600C9D5 EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x7C7 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x7F1 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x558B7DD1 GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x6350AE12 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x6350AE12 EQ PUSH2 0x590 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x5C3 JUMPI DUP1 PUSH4 0x753D7563 EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x629 JUMPI DUP1 PUSH4 0x7F0D3697 EQ PUSH2 0x653 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x558B7DD1 EQ PUSH2 0x48D JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x5FA7B584 EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0x627DD56A EQ PUSH2 0x4EA JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x20EA8D86 GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x3E4 JUMPI DUP1 PUSH4 0x4F64B2BE EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x447 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x25E7C27 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x12FDE4B7 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x27D JUMPI DUP1 PUSH4 0x20AEB817 EQ PUSH2 0x2B2 JUMPI PUSH2 0x21D JUMP JUMPDEST CALLDATASIZE PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xAD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH2 0xAFF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB0E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC93 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x396 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF5D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF92 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xF9F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH2 0x100B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH2 0x1026 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x102F JUMP JUMPDEST PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x106D SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x122B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1296 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13AA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x635 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x13BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x144A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH2 0x145C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6D7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6BF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP4 ADD CALLDATALOAD AND SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 ADD PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x752 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x764 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x786 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x14BE SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x15AF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x81B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x161E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x890 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x878 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8BD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH2 0x16FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x175A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x932 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x18B3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH2 0x1A57 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x988 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x99B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1ADA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH2 0x1B9F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH2 0x1BAE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BC6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH2 0x1C49 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH2 0x1C4E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1C54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xABA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E01 JUMP JUMPDEST PUSH1 0x6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xAE5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xB1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 NOT ADD DUP2 LT ISZERO PUSH2 0xC15 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xB87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xC0D JUMPI PUSH1 0x6 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xBB4 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xBDA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0xC15 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB62 JUMP JUMPDEST POP PUSH1 0x6 DUP1 SLOAD DUP1 PUSH2 0xC21 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE ADD SWAP1 SSTORE PUSH1 0x6 SLOAD PUSH1 0x8 SLOAD GT ISZERO PUSH2 0xC5B JUMPI PUSH1 0x6 SLOAD PUSH2 0xC5B SWAP1 PUSH2 0x1A5D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND PUSH2 0xCCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x7 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE DUP6 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH1 0x7 DUP3 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0xD24 JUMPI POP DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xD12 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xD74 JUMPI DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xD38 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP2 DUP4 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xD52 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xCF5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x73656372657431 PUSH1 0xC8 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH32 0xB8B37F62EC82443E5B5557C5A187FE3686790620CC04C06187C48F8636CAAC89 EQ PUSH2 0xDC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0xDDA PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER ADDRESS DUP11 PUSH2 0x2051 JUMP JUMPDEST PUSH32 0x7BAD95C5817621D8789091AE63D99BF8F7BED9EA4963B10C3D3C6BB7273522B3 CALLER DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE60 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE48 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE8D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xEC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND PUSH2 0xEED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xAE5 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x9 SLOAD DUP2 LT ISZERO PUSH2 0x1004 JUMPI DUP4 DUP1 ISZERO PUSH2 0xFCC JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xFF0 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xFF0 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xFFC JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xFA3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1017 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x104B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x107D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x7 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH1 0x7 DUP3 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x10D7 JUMPI POP DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x10C5 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1127 JUMPI DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x10EB JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP2 DUP4 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1105 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x10A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x73656372657431 PUSH1 0xC8 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH32 0xB8B37F62EC82443E5B5557C5A187FE3686790620CC04C06187C48F8636CAAC89 EQ PUSH2 0x1177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE GT PUSH2 0x1184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x9C33CC77AA0C536AD2721956A5C74FE1EC4101D9C797F25B34CD9FF94344E5EA CALLVALUE DUP6 PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11EA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11D2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1217 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1237 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x124B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x3908CC4801F68D354A4E28F598EC87870F4B8A4B9A945C81B641D1B677575D52 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x12A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x12CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x12DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x8 SLOAD PUSH1 0x32 DUP3 GT ISZERO DUP1 ISZERO PUSH2 0x12FB JUMPI POP DUP2 DUP2 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1306 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1311 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST PUSH2 0x131A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x143E JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x13ED JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1421 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x8 SLOAD DUP3 EQ ISZERO PUSH2 0x1436 JUMPI PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x1445 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13C4 JUMP JUMPDEST POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x5 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B4 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1496 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 SWAP1 PUSH1 0xFF AND PUSH2 0x14DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP1 DUP8 SWAP1 ISZERO DUP1 PUSH2 0x151D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT JUMPDEST PUSH2 0x156E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20616C726561647920636F6D707574656400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x157C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x20B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP10 SWAP1 SSTORE SWAP4 POP PUSH2 0x15A2 DUP5 PUSH2 0x1ADA JUMP JUMPDEST POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x1618 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x15DC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1610 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x15B3 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP2 DUP5 ADD SLOAD PUSH1 0x2 DUP1 DUP5 ADD DUP1 SLOAD DUP9 MLOAD PUSH2 0x100 SWAP9 DUP3 AND ISZERO SWAP9 SWAP1 SWAP9 MUL PUSH1 0x0 NOT ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP7 SWAP1 DIV DUP7 MUL DUP8 ADD DUP7 ADD SWAP1 SWAP8 MSTORE DUP7 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP6 SWAP1 SWAP5 SWAP3 SWAP4 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x16C7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x169C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x16C7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x16AA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD SWAP5 SWAP6 PUSH1 0xFF SWAP1 SWAP3 AND SWAP5 SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x6 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B4 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1496 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x9 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17A0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x9 SLOAD DUP2 LT ISZERO PUSH2 0x1821 JUMPI DUP6 DUP1 ISZERO PUSH2 0x17D0 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x17F4 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x17F4 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1819 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1806 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x17A7 JUMP JUMPDEST DUP8 DUP8 SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x183A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1864 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x18A8 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x187F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH2 0x1895 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x186B JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x60 SWAP1 DUP2 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x18D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x18FB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x19BE JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x192B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x19B6 JUMPI PUSH1 0x6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1965 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x198F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1902 JUMP JUMPDEST DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x19D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x19FF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A4F JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1A1B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A2F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1A07 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 ISZERO SWAP1 PUSH2 0x1A7E JUMPI POP DUP2 DUP2 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1A89 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1A94 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST PUSH2 0x1A9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x8 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1B44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1B98 DUP6 PUSH2 0x1E01 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1BE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE SWAP1 SWAP2 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1C60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND PUSH2 0x1C87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1CAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1CC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x1D4B JUMPI DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1CE7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1D43 JUMPI DUP5 PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1D10 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1CC6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E71 DUP6 PUSH2 0x13BF JUMP JUMPDEST ISZERO PUSH2 0x1B98 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP2 ADD SLOAD ISZERO PUSH2 0x1F20 JUMPI PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EF7 JUMPI PUSH1 0x7 SLOAD PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1EF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1F20 JUMP JUMPDEST PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0x7 SLOAD PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH2 0x1F1E SWAP3 DUP5 SWAP3 SWAP2 AND SWAP1 PUSH2 0x21E8 JUMP JUMPDEST POP JUMPDEST PUSH2 0xBB8 GAS LT ISZERO PUSH2 0x1F2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x0 NOT SWAP9 DUP6 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV SWAP6 DUP7 ADD DUP3 SWAP1 DIV DUP3 MUL DUP5 ADD DUP3 ADD SWAP1 MSTORE DUP5 DUP4 MSTORE PUSH2 0x1FDC SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1FCD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FA2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1FCD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1FB0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0xBB8 GAS SUB PUSH2 0x223F JUMP JUMPDEST ISZERO PUSH2 0x2011 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x5B6B431D4476A211BB7D41C20D1AAB9AE2321DEEE0D20BE3D9FC9B1093FA6E3D SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x2049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x11A1AE95F9E191458D449E99F17D81683AD9BFF69F2A453C2D5FF43FE7C875BB SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x20AB SWAP1 DUP6 SWAP1 PUSH2 0x2257 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP13 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP7 ADD DUP15 SWAP1 MSTORE DUP13 DUP6 AND PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD DUP13 SWAP1 MSTORE DUP8 DUP2 MSTORE PUSH1 0x1 DUP1 DUP6 MSTORE SWAP7 SWAP1 KECCAK256 DUP6 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 AND SWAP5 SWAP1 SWAP5 OR DUP5 SSTORE SWAP1 MLOAD SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x2154 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x24D0 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SSTORE PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x223A SWAP1 DUP5 SWAP1 PUSH2 0x2257 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 MLOAD PUSH1 0x20 DUP7 ADD DUP8 DUP10 DUP8 CALL SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x22AC DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2308 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x223A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x223A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2564 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x2317 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x231F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x232A DUP6 PUSH2 0x24CA JUMP JUMPDEST PUSH2 0x237B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x23BA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x239B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x241C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2421 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2435 JUMPI SWAP2 POP PUSH2 0x2317 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2445 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x248F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2477 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x24BC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2511 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x253E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x253E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x253E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2523 JUMP JUMPDEST POP PUSH2 0x254A SWAP3 SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x254A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x254F JUMP INVALID MSTORE8 PUSH2 0x6665 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x756363656564A264697066735822122068FA3909 0xD3 DUP9 0xEC ADD JUMPI STOP PUSH19 0xDBB28DD0E4361B535C92EBDD71C5C042E257F1 MSTORE8 0xCB PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", - "sourceMap": "828:17513:0:-:0;;;2176:26;;;-1:-1:-1;;2176:26:0;;;6675:462;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6675:462:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;6675:462:0;;;;;;;;;;;;;;;6795:14;;6675:462;;-1:-1:-1;6675:462:0;-1:-1:-1;6675:462:0;;-1:-1:-1;1685:2:0;3990:29;;;;;:65;;;4045:10;4032:9;:23;;3990:65;:92;;;;-1:-1:-1;4068:14:0;;;3990:92;:124;;;;-1:-1:-1;4099:15:0;;;3990:124;3982:133;;;;;;6835:13;-1:-1:-1;;;;;3534:22:0;::::1;3526:31;;;::::0;::::1;;6871:6:::2;6866:167;6887:7;:14;6883:1;:18;6866:167;;;6932:7;:19;6940:7;6948:1;6940:10;;;;;;;;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;6932:19:0::2;::::0;;;::::2;::::0;;;;;;-1:-1:-1;6932:19:0;;::::2;;6931:20;:48:::0;::::2;;;;6977:1;-1:-1:-1::0;;;;;6955:24:0::2;:7;6963:1;6955:10;;;;;;;;;;;;;;-1:-1:-1::0;;;;;6955:24:0::2;;;6931:48;6923:57;;;::::0;::::2;;7017:4;6995:7;:19;7003:7;7011:1;7003:10;;;;;;;;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;6995:19:0::2;::::0;;;::::2;::::0;;;;;;-1:-1:-1;6995:19:0;:26;;-1:-1:-1;;6995:26:0::2;::::0;::::2;;::::0;;;::::2;::::0;;-1:-1:-1;6903:3:0::2;6866:167;;;-1:-1:-1::0;7043:16:0;;::::2;::::0;:6:::2;::::0;:16:::2;::::0;::::2;::::0;::::2;:::i;:::-;-1:-1:-1::0;;;7070:8:0::2;:20:::0;;;;7101:12:::2;:28:::0;;-1:-1:-1;;;;;;7101:28:0::2;-1:-1:-1::0;;;;;7101:28:0;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;828:17513:0;;-1:-1:-1;828:17513:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;828:17513:0;-1:-1:-1;;;;;828:17513:0;;;;;;;;;;;-1:-1:-1;828:17513:0;;;;;;;-1:-1:-1;828:17513:0;;;-1:-1:-1;828:17513:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;;828:17513:0;;;;;;;;;;;;;;" - }, - "deployedBytecode": { - "immutableReferences": {}, - "linkReferences": {}, - "object": "6080604052600436106102135760003560e01c80638509309511610118578063c01a8c84116100a0578063d74f8edd1161006f578063d74f8edd14610a16578063dc8452cd14610a2b578063e20056e614610a40578063ea5416a514610a7b578063ee22610b14610aae5761021d565b8063c01a8c841461098f578063c415b95c146109b9578063c5925420146109ce578063d48bfca7146109e35761021d565b8063a0e67e2b116100e7578063a0e67e2b146108d1578063a8abe69a146108e6578063b5dc40c314610926578063b77bf60014610950578063ba51a6df146109655761021d565b806385093095146106865780638600c9d5146106eb5780638b51d13f146107c75780639ace38c2146107f15761021d565b8063558b7dd11161019b5780636350ae121161016a5780636350ae12146105905780637065cb48146105c3578063753d7563146105f6578063784547a7146106295780637f0d3697146106535761021d565b8063558b7dd11461048d5780635c975abb146104a25780635fa7b584146104b7578063627dd56a146104ea5761021d565b806320ea8d86116101e257806320ea8d86146103735780632f54bf6e1461039d5780633411c81c146103e45780634f64b2be1461041d57806354741525146104475761021d565b8063025e7c271461022257806312fde4b714610268578063173825d91461027d57806320aeb817146102b25761021d565b3661021d57600080fd5b600080fd5b34801561022e57600080fd5b5061024c6004803603602081101561024557600080fd5b5035610ad8565b604080516001600160a01b039092168252519081900360200190f35b34801561027457600080fd5b5061024c610aff565b34801561028957600080fd5b506102b0600480360360208110156102a057600080fd5b50356001600160a01b0316610b0e565b005b3480156102be57600080fd5b506102b0600480360360608110156102d557600080fd5b8101906020810181356401000000008111156102f057600080fd5b82018360208201111561030257600080fd5b8035906020019184600183028401116401000000008311171561032457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356001600160a01b0316610c93565b34801561037f57600080fd5b506102b06004803603602081101561039657600080fd5b5035610ea7565b3480156103a957600080fd5b506103d0600480360360208110156103c057600080fd5b50356001600160a01b0316610f5d565b604080519115158252519081900360200190f35b3480156103f057600080fd5b506103d06004803603604081101561040757600080fd5b50803590602001356001600160a01b0316610f72565b34801561042957600080fd5b5061024c6004803603602081101561044057600080fd5b5035610f92565b34801561045357600080fd5b5061047b6004803603604081101561046a57600080fd5b508035151590602001351515610f9f565b60408051918252519081900360200190f35b34801561049957600080fd5b506102b061100b565b3480156104ae57600080fd5b506103d0611026565b3480156104c357600080fd5b506102b0600480360360208110156104da57600080fd5b50356001600160a01b031661102f565b6102b06004803603602081101561050057600080fd5b81019060208101813564010000000081111561051b57600080fd5b82018360208201111561052d57600080fd5b8035906020019184600183028401116401000000008311171561054f57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061106d945050505050565b34801561059c57600080fd5b506102b0600480360360208110156105b357600080fd5b50356001600160a01b031661122b565b3480156105cf57600080fd5b506102b0600480360360208110156105e657600080fd5b50356001600160a01b0316611296565b34801561060257600080fd5b506103d06004803603602081101561061957600080fd5b50356001600160a01b03166113aa565b34801561063557600080fd5b506103d06004803603602081101561064c57600080fd5b50356113bf565b34801561065f57600080fd5b5061047b6004803603602081101561067657600080fd5b50356001600160a01b031661144a565b34801561069257600080fd5b5061069b61145c565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106d75781810151838201526020016106bf565b505050509050019250505060405180910390f35b3480156106f757600080fd5b5061047b600480360360c081101561070e57600080fd5b6001600160a01b0382358116926020810135926040820135926060830135169160808101359181019060c0810160a082013564010000000081111561075257600080fd5b82018360208201111561076457600080fd5b8035906020019184600183028401116401000000008311171561078657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506114be945050505050565b3480156107d357600080fd5b5061047b600480360360208110156107ea57600080fd5b50356115af565b3480156107fd57600080fd5b5061081b6004803603602081101561081457600080fd5b503561161e565b60405180886001600160a01b03168152602001878152602001806020018615158152602001858152602001846001600160a01b03168152602001838152602001828103825287818151815260200191508051906020019080838360005b83811015610890578181015183820152602001610878565b50505050905090810190601f1680156108bd5780820380516001836020036101000a031916815260200191505b509850505050505050505060405180910390f35b3480156108dd57600080fd5b5061069b6116fa565b3480156108f257600080fd5b5061069b6004803603608081101561090957600080fd5b50803590602081013590604081013515159060600135151561175a565b34801561093257600080fd5b5061069b6004803603602081101561094957600080fd5b50356118b3565b34801561095c57600080fd5b5061047b611a57565b34801561097157600080fd5b506102b06004803603602081101561098857600080fd5b5035611a5d565b34801561099b57600080fd5b506102b0600480360360208110156109b257600080fd5b5035611ada565b3480156109c557600080fd5b5061024c611b9f565b3480156109da57600080fd5b506102b0611bae565b3480156109ef57600080fd5b506102b060048036036020811015610a0657600080fd5b50356001600160a01b0316611bc6565b348015610a2257600080fd5b5061047b611c49565b348015610a3757600080fd5b5061047b611c4e565b348015610a4c57600080fd5b506102b060048036036040811015610a6357600080fd5b506001600160a01b0381358116916020013516611c54565b348015610a8757600080fd5b5061047b60048036036020811015610a9e57600080fd5b50356001600160a01b0316611de6565b348015610aba57600080fd5b506102b060048036036020811015610ad157600080fd5b5035611e01565b60068181548110610ae557fe5b6000918252602090912001546001600160a01b0316905081565b6007546001600160a01b031690565b333014610b1a57600080fd5b6001600160a01b038116600090815260036020526040902054819060ff16610b4157600080fd5b6001600160a01b0382166000908152600360205260408120805460ff191690555b60065460001901811015610c1557826001600160a01b031660068281548110610b8757fe5b6000918252602090912001546001600160a01b03161415610c0d57600680546000198101908110610bb457fe5b600091825260209091200154600680546001600160a01b039092169183908110610bda57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610c15565b600101610b62565b506006805480610c2157fe5b600082815260209020810160001990810180546001600160a01b03191690550190556006546008541115610c5b57600654610c5b90611a5d565b6040516001600160a01b038316907f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9090600090a25050565b600a5460ff1615610ca357600080fd5b6001600160a01b038116600090815260208190526040902054819060ff16610cca57600080fd5b6040805160078082528183019092528591600091606091602082018180368337019050509050600091505b60078260ff16108015610d245750828260ff1681518110610d1257fe5b01602001516001600160f81b03191615155b15610d7457828260ff1681518110610d3857fe5b602001015160f81c60f81b818360ff1681518110610d5257fe5b60200101906001600160f81b031916908160001a905350600190910190610cf5565b6040805180820190915260078152667365637265743160c81b6020918201528151908201207fb8b37f62ec82443e5b5557c5a187fe3686790620cc04c06187c48f8636caac8914610dc457600080fd5b84610dda6001600160a01b03821633308a612051565b7f7bad95c5817621d8789091ae63d99bf8f7bed9ea4963b10c3d3c6bb7273522b33389898960405180856001600160a01b0316815260200180602001848152602001836001600160a01b03168152602001828103825285818151815260200191508051906020019080838360005b83811015610e60578181015183820152602001610e48565b50505050905090810190601f168015610e8d5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a15050505050505050565b3360008181526003602052604090205460ff16610ec357600080fd5b60008281526002602090815260408083203380855292529091205483919060ff16610eed57600080fd5b600084815260016020526040902060030154849060ff1615610f0e57600080fd5b6000858152600260209081526040808320338085529252808320805460ff191690555187927ff6a317157440607f36269043eb55f1287a5a19ba2216afeab88cd46cbcfb88e991a35050505050565b60036020526000908152604090205460ff1681565b600260209081526000928352604080842090915290825290205460ff1681565b60058181548110610ae557fe5b6000805b60095481101561100457838015610fcc575060008181526001602052604090206003015460ff16155b80610ff05750828015610ff0575060008181526001602052604090206003015460ff165b15610ffc576001820191505b600101610fa3565b5092915050565b33301461101757600080fd5b600a805460ff19166001179055565b600a5460ff1681565b3360008181526003602052604090205460ff1661104b57600080fd5b506001600160a01b03166000908152602081905260409020805460ff19169055565b600a5460ff161561107d57600080fd5b6040805160078082528183019092528291600091606091602082018180368337019050509050600091505b60078260ff161080156110d75750828260ff16815181106110c557fe5b01602001516001600160f81b03191615155b1561112757828260ff16815181106110eb57fe5b602001015160f81c60f81b818360ff168151811061110557fe5b60200101906001600160f81b031916908160001a9053506001909101906110a8565b6040805180820190915260078152667365637265743160c81b6020918201528151908201207fb8b37f62ec82443e5b5557c5a187fe3686790620cc04c06187c48f8636caac891461117757600080fd5b6000341161118457600080fd5b7f9c33cc77aa0c536ad2721956a5c74fe1ec4101d9c797f25b34cd9ff94344e5ea34856040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156111ea5781810151838201526020016111d2565b50505050905090810190601f1680156112175780820380516001836020036101000a031916815260200191505b50935050505060405180910390a150505050565b33301461123757600080fd5b806001600160a01b03811661124b57600080fd5b600780546001600160a01b0319166001600160a01b0384169081179091556040517f3908cc4801f68d354a4e28f598ec87870f4b8a4b9a945c81b641d1b677575d5290600090a25050565b3330146112a257600080fd5b6001600160a01b038116600090815260036020526040902054819060ff16156112ca57600080fd5b816001600160a01b0381166112de57600080fd5b600680549050600101600854603282111580156112fb5750818111155b801561130657508015155b801561131157508115155b61131a57600080fd5b6001600160a01b038516600081815260036020526040808220805460ff1916600190811790915560068054918201815583527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b03191684179055517ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d9190a25050505050565b60006020819052908152604090205460ff1681565b600080805b60065481101561143e57600084815260026020526040812060068054919291849081106113ed57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611421576001820191505b60085482141561143657600192505050611445565b6001016113c4565b5060009150505b919050565b60046020526000908152604090205481565b606060058054806020026020016040519081016040528092919081815260200182805480156114b457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611496575b5050505050905090565b3360008181526003602052604081205490919060ff166114dd57600080fd5b6001600160a01b03851660009081526004602052604090205485908790158061151d57506001600160a01b03821660009081526004602052604090205481115b61156e576040805162461bcd60e51b815260206004820152601c60248201527f5472616e73616374696f6e20616c726561647920636f6d707574656400000000604482015290519081900360640190fd5b61157c8a8a8a8a8a8a6120b1565b6001600160a01b038816600090815260046020526040902089905593506115a284611ada565b5050509695505050505050565b6000805b60065481101561161857600083815260026020526040812060068054919291849081106115dc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff1615611610576001820191505b6001016115b3565b50919050565b6001602081815260009283526040928390208054818401546002808401805488516101009882161598909802600019011691909104601f81018690048602870186019097528686526001600160a01b0390921695909492938301828280156116c75780601f1061169c576101008083540402835291602001916116c7565b820191906000526020600020905b8154815290600101906020018083116116aa57829003601f168201915b505050600384015460048501546005860154600690960154949560ff909216949093506001600160a01b03909116915087565b606060068054806020026020016040519081016040528092919081815260200182805480156114b4576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611496575050505050905090565b60608060095467ffffffffffffffff8111801561177657600080fd5b506040519080825280602002602001820160405280156117a0578160200160208202803683370190505b5090506000805b600954811015611821578580156117d0575060008181526001602052604090206003015460ff16155b806117f457508480156117f4575060008181526001602052604090206003015460ff165b15611819578083838151811061180657fe5b6020026020010181815250506001820191505b6001016117a7565b87870367ffffffffffffffff8111801561183a57600080fd5b50604051908082528060200260200182016040528015611864578160200160208202803683370190505b5093508790505b868110156118a85782818151811061187f57fe5b6020026020010151848983038151811061189557fe5b602090810291909101015260010161186b565b505050949350505050565b600654606090819067ffffffffffffffff811180156118d157600080fd5b506040519080825280602002602001820160405280156118fb578160200160208202803683370190505b5090506000805b6006548110156119be576000858152600260205260408120600680549192918490811061192b57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205460ff16156119b6576006818154811061196557fe5b9060005260206000200160009054906101000a90046001600160a01b031683838151811061198f57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506001820191505b600101611902565b8167ffffffffffffffff811180156119d557600080fd5b506040519080825280602002602001820160405280156119ff578160200160208202803683370190505b509350600090505b81811015611a4f57828181518110611a1b57fe5b6020026020010151848281518110611a2f57fe5b6001600160a01b0390921660209283029190910190910152600101611a07565b505050919050565b60095481565b333014611a6957600080fd5b6006548160328211801590611a7e5750818111155b8015611a8957508015155b8015611a9457508115155b611a9d57600080fd5b60088390556040805184815290517fa3f1ee9126a074d9326c682f561767f710e927faa811f7a99829d49dc421797a9181900360200190a1505050565b3360008181526003602052604090205460ff16611af657600080fd5b60008281526001602052604090205482906001600160a01b0316611b1957600080fd5b60008381526002602090815260408083203380855292529091205484919060ff1615611b4457600080fd5b6000858152600260209081526040808320338085529252808320805460ff191660011790555187927f4a504a94899432a9846e1aa406dceb1bcfd538bb839071d49d1e5e23f5be30ef91a3611b9885611e01565b5050505050565b6007546001600160a01b031681565b333014611bba57600080fd5b600a805460ff19169055565b3360008181526003602052604090205460ff16611be257600080fd5b506001600160a01b03166000818152602081905260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b603281565b60085481565b333014611c6057600080fd5b6001600160a01b038216600090815260036020526040902054829060ff16611c8757600080fd5b6001600160a01b038216600090815260036020526040902054829060ff1615611caf57600080fd5b826001600160a01b038116611cc357600080fd5b60005b600654811015611d4b57856001600160a01b031660068281548110611ce757fe5b6000918252602090912001546001600160a01b03161415611d43578460068281548110611d1057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611d4b565b600101611cc6565b506001600160a01b03808616600081815260036020526040808220805460ff1990811690915593881682528082208054909416600117909355915190917f8001553a916ef2f495d26a907cc54d96ed840d7bda71e73194bf5a9df7a76b9091a26040516001600160a01b038516907ff39e6e1eb0edcf53c221607b54b00cd28f3196fed0a24994dc308b8f611b682d90600090a25050505050565b6001600160a01b031660009081526004602052604090205490565b3360008181526003602052604090205460ff16611e1d57600080fd5b60008281526002602090815260408083203380855292529091205483919060ff16611e4757600080fd5b600084815260016020526040902060030154849060ff1615611e6857600080fd5b611e71856113bf565b15611b9857600085815260016020819052604090912060038101805460ff1916909217909155600681015415611f205760058101546001600160a01b0316611ef75760075460068201546040516001600160a01b039092169181156108fc0291906000818181858888f19350505050158015611ef1573d6000803e3d6000fd5b50611f20565b600581015460075460068301546001600160a01b0392831692611f1e9284929116906121e8565b505b610bb85a1015611f2f57600080fd5b805460018083015460028085018054604080516020601f600019988516156101000298909801909316949094049586018290048202840182019052848352611fdc956001600160a01b03169490830182828015611fcd5780601f10611fa257610100808354040283529160200191611fcd565b820191906000526020600020905b815481529060010190602001808311611fb057829003601f168201915b5050505050610bb85a0361223f565b156120115760405186907f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d90600090a2612049565b60405186907f11a1ae95f9e191458d449e99f17d81683ad9bff69f2a453c2d5ff43fe7c875bb90600090a260038101805460ff191690555b505050505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526120ab908590612257565b50505050565b6000866001600160a01b0381166120c757600080fd5b6009546040805160e0810182526001600160a01b038b8116825260208083018c8152838501898152600060608601819052608086018e90528c851660a087015260c086018c90528781526001808552969020855181546001600160a01b031916951694909417845590519483019490945592518051949650919390926121549260028501929101906124d0565b50606082015160038201805460ff19169115159190911790556080820151600482015560a08201516005820180546001600160a01b0319166001600160a01b0390921691909117905560c09091015160069091015560098054600101905560405182907fc0ba8fe4b176c1714197d43b9cc6bcf797a4a7461c5fe8d0ef6e184ae7601e5190600090a2509695505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261223a908490612257565b505050565b6000806000845160208601878987f195945050505050565b60606122ac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166123089092919063ffffffff16565b80519091501561223a578080602001905160208110156122cb57600080fd5b505161223a5760405162461bcd60e51b815260040180806020018281038252602a815260200180612564602a913960400191505060405180910390fd5b6060612317848460008561231f565b949350505050565b606061232a856124ca565b61237b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106123ba5780518252601f19909201916020918201910161239b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461241c576040519150601f19603f3d011682016040523d82523d6000602084013e612421565b606091505b509150915081156124355791506123179050565b8051156124455780518082602001fd5b8360405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561248f578181015183820152602001612477565b50505050905090810190601f1680156124bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b3b151590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061251157805160ff191683800117855561253e565b8280016001018555821561253e579182015b8281111561253e578251825591602001919060010190612523565b5061254a92915061254e565b5090565b5b8082111561254a576000815560010161254f56fe5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122068fa3909d388ec01570072dbb28dd0e4361b535c92ebdd71c5c042e257f153cb64736f6c634300060c0033", - "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x213 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x85093095 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0xC01A8C84 GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xD74F8EDD GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xD74F8EDD EQ PUSH2 0xA16 JUMPI DUP1 PUSH4 0xDC8452CD EQ PUSH2 0xA2B JUMPI DUP1 PUSH4 0xE20056E6 EQ PUSH2 0xA40 JUMPI DUP1 PUSH4 0xEA5416A5 EQ PUSH2 0xA7B JUMPI DUP1 PUSH4 0xEE22610B EQ PUSH2 0xAAE JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0xC01A8C84 EQ PUSH2 0x98F JUMPI DUP1 PUSH4 0xC415B95C EQ PUSH2 0x9B9 JUMPI DUP1 PUSH4 0xC5925420 EQ PUSH2 0x9CE JUMPI DUP1 PUSH4 0xD48BFCA7 EQ PUSH2 0x9E3 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0xA0E67E2B GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0xA0E67E2B EQ PUSH2 0x8D1 JUMPI DUP1 PUSH4 0xA8ABE69A EQ PUSH2 0x8E6 JUMPI DUP1 PUSH4 0xB5DC40C3 EQ PUSH2 0x926 JUMPI DUP1 PUSH4 0xB77BF600 EQ PUSH2 0x950 JUMPI DUP1 PUSH4 0xBA51A6DF EQ PUSH2 0x965 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x85093095 EQ PUSH2 0x686 JUMPI DUP1 PUSH4 0x8600C9D5 EQ PUSH2 0x6EB JUMPI DUP1 PUSH4 0x8B51D13F EQ PUSH2 0x7C7 JUMPI DUP1 PUSH4 0x9ACE38C2 EQ PUSH2 0x7F1 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x558B7DD1 GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x6350AE12 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x6350AE12 EQ PUSH2 0x590 JUMPI DUP1 PUSH4 0x7065CB48 EQ PUSH2 0x5C3 JUMPI DUP1 PUSH4 0x753D7563 EQ PUSH2 0x5F6 JUMPI DUP1 PUSH4 0x784547A7 EQ PUSH2 0x629 JUMPI DUP1 PUSH4 0x7F0D3697 EQ PUSH2 0x653 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x558B7DD1 EQ PUSH2 0x48D JUMPI DUP1 PUSH4 0x5C975ABB EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x5FA7B584 EQ PUSH2 0x4B7 JUMPI DUP1 PUSH4 0x627DD56A EQ PUSH2 0x4EA JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x20EA8D86 GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x20EA8D86 EQ PUSH2 0x373 JUMPI DUP1 PUSH4 0x2F54BF6E EQ PUSH2 0x39D JUMPI DUP1 PUSH4 0x3411C81C EQ PUSH2 0x3E4 JUMPI DUP1 PUSH4 0x4F64B2BE EQ PUSH2 0x41D JUMPI DUP1 PUSH4 0x54741525 EQ PUSH2 0x447 JUMPI PUSH2 0x21D JUMP JUMPDEST DUP1 PUSH4 0x25E7C27 EQ PUSH2 0x222 JUMPI DUP1 PUSH4 0x12FDE4B7 EQ PUSH2 0x268 JUMPI DUP1 PUSH4 0x173825D9 EQ PUSH2 0x27D JUMPI DUP1 PUSH4 0x20AEB817 EQ PUSH2 0x2B2 JUMPI PUSH2 0x21D JUMP JUMPDEST CALLDATASIZE PUSH2 0x21D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x22E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x245 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xAD8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x274 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH2 0xAFF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xB0E JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x2BE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x2D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x2F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x302 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x324 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP POP DUP3 CALLDATALOAD SWAP4 POP POP POP PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xC93 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x37F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x396 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xEA7 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3A9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF5D JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x407 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xF72 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x440 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0xF92 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x453 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x46A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0xF9F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x499 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH2 0x100B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH2 0x1026 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4C3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x102F JUMP JUMPDEST PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x500 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x51B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x52D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x54F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x106D SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x59C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5B3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x122B JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5CF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x5E6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1296 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x602 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x619 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x13AA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x635 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3D0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x64C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x13BF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x65F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x676 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x144A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x692 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH2 0x145C JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP4 MLOAD DUP2 DUP4 ADD MSTORE DUP4 MLOAD SWAP2 SWAP3 DUP4 SWAP3 SWAP1 DUP4 ADD SWAP2 DUP6 DUP2 ADD SWAP2 MUL DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x6D7 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x6BF JUMP JUMPDEST POP POP POP POP SWAP1 POP ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x6F7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xC0 DUP2 LT ISZERO PUSH2 0x70E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 CALLDATALOAD DUP2 AND SWAP3 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP3 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP3 PUSH1 0x60 DUP4 ADD CALLDATALOAD AND SWAP2 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP2 DUP2 ADD SWAP1 PUSH1 0xC0 DUP2 ADD PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x752 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x764 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x1 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x786 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x1F ADD PUSH1 0x20 DUP1 SWAP2 DIV MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x14BE SWAP5 POP POP POP POP POP JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x7EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x15AF JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7FD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x81B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x814 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x161E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP8 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP7 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD DUP6 DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP8 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x890 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x878 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x8BD JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP9 POP POP POP POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH2 0x16FA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8F2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x909 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 DUP2 ADD CALLDATALOAD SWAP1 PUSH1 0x40 DUP2 ADD CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x60 ADD CALLDATALOAD ISZERO ISZERO PUSH2 0x175A JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x932 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x69B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x949 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x18B3 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x95C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH2 0x1A57 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x971 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x988 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1A5D JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x99B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x9B2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1ADA JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9C5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x24C PUSH2 0x1B9F JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9DA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH2 0x1BAE JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9EF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA06 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1BC6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA22 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH2 0x1C49 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA37 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH2 0x1C4E JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xA63 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 CALLDATALOAD DUP2 AND SWAP2 PUSH1 0x20 ADD CALLDATALOAD AND PUSH2 0x1C54 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x47B PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xA9E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1DE6 JUMP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xABA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2B0 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xAD1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x1E01 JUMP JUMPDEST PUSH1 0x6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xAE5 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 POP DUP2 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0xB1A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND PUSH2 0xB41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x0 NOT ADD DUP2 LT ISZERO PUSH2 0xC15 JUMPI DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0xB87 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0xC0D JUMPI PUSH1 0x6 DUP1 SLOAD PUSH1 0x0 NOT DUP2 ADD SWAP1 DUP2 LT PUSH2 0xBB4 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x6 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP4 SWAP1 DUP2 LT PUSH2 0xBDA JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0xC15 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0xB62 JUMP JUMPDEST POP PUSH1 0x6 DUP1 SLOAD DUP1 PUSH2 0xC21 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 SWAP1 KECCAK256 DUP2 ADD PUSH1 0x0 NOT SWAP1 DUP2 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SSTORE ADD SWAP1 SSTORE PUSH1 0x6 SLOAD PUSH1 0x8 SLOAD GT ISZERO PUSH2 0xC5B JUMPI PUSH1 0x6 SLOAD PUSH2 0xC5B SWAP1 PUSH2 0x1A5D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP1 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xFF AND ISZERO PUSH2 0xCA3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND PUSH2 0xCCA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x7 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE DUP6 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH1 0x7 DUP3 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0xD24 JUMPI POP DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xD12 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0xD74 JUMPI DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xD38 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP2 DUP4 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0xD52 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xCF5 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x73656372657431 PUSH1 0xC8 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH32 0xB8B37F62EC82443E5B5557C5A187FE3686790620CC04C06187C48F8636CAAC89 EQ PUSH2 0xDC4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP5 PUSH2 0xDDA PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND CALLER ADDRESS DUP11 PUSH2 0x2051 JUMP JUMPDEST PUSH32 0x7BAD95C5817621D8789091AE63D99BF8F7BED9EA4963B10C3D3C6BB7273522B3 CALLER DUP10 DUP10 DUP10 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP6 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xE60 JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xE48 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xE8D JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0xEC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND PUSH2 0xEED JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0xF0E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0xF6A317157440607F36269043EB55F1287A5A19BA2216AFEAB88CD46CBCFB88E9 SWAP2 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 SWAP1 SWAP2 MSTORE SWAP1 DUP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x5 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0xAE5 JUMPI INVALID JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x9 SLOAD DUP2 LT ISZERO PUSH2 0x1004 JUMPI DUP4 DUP1 ISZERO PUSH2 0xFCC JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0xFF0 JUMPI POP DUP3 DUP1 ISZERO PUSH2 0xFF0 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0xFFC JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0xFA3 JUMP JUMPDEST POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1017 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x104B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST PUSH1 0xA SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x107D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x7 DUP1 DUP3 MSTORE DUP2 DUP4 ADD SWAP1 SWAP3 MSTORE DUP3 SWAP2 PUSH1 0x0 SWAP2 PUSH1 0x60 SWAP2 PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP POP SWAP1 POP PUSH1 0x0 SWAP2 POP JUMPDEST PUSH1 0x7 DUP3 PUSH1 0xFF AND LT DUP1 ISZERO PUSH2 0x10D7 JUMPI POP DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x10C5 JUMPI INVALID JUMPDEST ADD PUSH1 0x20 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND ISZERO ISZERO JUMPDEST ISZERO PUSH2 0x1127 JUMPI DUP3 DUP3 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x10EB JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD MLOAD PUSH1 0xF8 SHR PUSH1 0xF8 SHL DUP2 DUP4 PUSH1 0xFF AND DUP2 MLOAD DUP2 LT PUSH2 0x1105 JUMPI INVALID JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xF8 SHL SUB NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x10A8 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP3 ADD SWAP1 SWAP2 MSTORE PUSH1 0x7 DUP2 MSTORE PUSH7 0x73656372657431 PUSH1 0xC8 SHL PUSH1 0x20 SWAP2 DUP3 ADD MSTORE DUP2 MLOAD SWAP1 DUP3 ADD KECCAK256 PUSH32 0xB8B37F62EC82443E5B5557C5A187FE3686790620CC04C06187C48F8636CAAC89 EQ PUSH2 0x1177 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 CALLVALUE GT PUSH2 0x1184 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH32 0x9C33CC77AA0C536AD2721956A5C74FE1EC4101D9C797F25B34CD9FF94344E5EA CALLVALUE DUP6 PUSH1 0x40 MLOAD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x11EA JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x11D2 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x1217 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1237 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x124B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x40 MLOAD PUSH32 0x3908CC4801F68D354A4E28F598EC87870F4B8A4B9A945C81B641D1B677575D52 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x12A2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x12CA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x12DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 DUP1 SLOAD SWAP1 POP PUSH1 0x1 ADD PUSH1 0x8 SLOAD PUSH1 0x32 DUP3 GT ISZERO DUP1 ISZERO PUSH2 0x12FB JUMPI POP DUP2 DUP2 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1306 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1311 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST PUSH2 0x131A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE DUP4 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND DUP5 OR SWAP1 SSTORE MLOAD PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP2 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP2 SWAP1 MSTORE SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP1 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x143E JUMPI PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x13ED JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1421 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x8 SLOAD DUP3 EQ ISZERO PUSH2 0x1436 JUMPI PUSH1 0x1 SWAP3 POP POP POP PUSH2 0x1445 JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x13C4 JUMP JUMPDEST POP PUSH1 0x0 SWAP2 POP POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x5 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B4 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1496 JUMPI JUMPDEST POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP1 SWAP2 SWAP1 PUSH1 0xFF AND PUSH2 0x14DD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP6 SWAP1 DUP8 SWAP1 ISZERO DUP1 PUSH2 0x151D JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP2 GT JUMPDEST PUSH2 0x156E JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1C PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5472616E73616374696F6E20616C726561647920636F6D707574656400000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH2 0x157C DUP11 DUP11 DUP11 DUP11 DUP11 DUP11 PUSH2 0x20B1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP10 SWAP1 SSTORE SWAP4 POP PUSH2 0x15A2 DUP5 PUSH2 0x1ADA JUMP JUMPDEST POP POP POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x1618 JUMPI PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x15DC JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x1610 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x15B3 JUMP JUMPDEST POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x0 SWAP3 DUP4 MSTORE PUSH1 0x40 SWAP3 DUP4 SWAP1 KECCAK256 DUP1 SLOAD DUP2 DUP5 ADD SLOAD PUSH1 0x2 DUP1 DUP5 ADD DUP1 SLOAD DUP9 MLOAD PUSH2 0x100 SWAP9 DUP3 AND ISZERO SWAP9 SWAP1 SWAP9 MUL PUSH1 0x0 NOT ADD AND SWAP2 SWAP1 SWAP2 DIV PUSH1 0x1F DUP2 ADD DUP7 SWAP1 DIV DUP7 MUL DUP8 ADD DUP7 ADD SWAP1 SWAP8 MSTORE DUP7 DUP7 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP6 SWAP1 SWAP5 SWAP3 SWAP4 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x16C7 JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x169C JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x16C7 JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x16AA JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP PUSH1 0x3 DUP5 ADD SLOAD PUSH1 0x4 DUP6 ADD SLOAD PUSH1 0x5 DUP7 ADD SLOAD PUSH1 0x6 SWAP1 SWAP7 ADD SLOAD SWAP5 SWAP6 PUSH1 0xFF SWAP1 SWAP3 AND SWAP5 SWAP1 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP2 POP DUP8 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x6 DUP1 SLOAD DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP1 SLOAD DUP1 ISZERO PUSH2 0x14B4 JUMPI PUSH1 0x20 MUL DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1496 JUMPI POP POP POP POP POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP1 PUSH1 0x9 SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x1776 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x17A0 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x9 SLOAD DUP2 LT ISZERO PUSH2 0x1821 JUMPI DUP6 DUP1 ISZERO PUSH2 0x17D0 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND ISZERO JUMPDEST DUP1 PUSH2 0x17F4 JUMPI POP DUP5 DUP1 ISZERO PUSH2 0x17F4 JUMPI POP PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD PUSH1 0xFF AND JUMPDEST ISZERO PUSH2 0x1819 JUMPI DUP1 DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x1806 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD DUP2 DUP2 MSTORE POP POP PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x17A7 JUMP JUMPDEST DUP8 DUP8 SUB PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x183A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x1864 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP DUP8 SWAP1 POP JUMPDEST DUP7 DUP2 LT ISZERO PUSH2 0x18A8 JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x187F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP10 DUP4 SUB DUP2 MLOAD DUP2 LT PUSH2 0x1895 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x1 ADD PUSH2 0x186B JUMP JUMPDEST POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x6 SLOAD PUSH1 0x60 SWAP1 DUP2 SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x18D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x18FB JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x19BE JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 PUSH1 0x6 DUP1 SLOAD SWAP2 SWAP3 SWAP2 DUP5 SWAP1 DUP2 LT PUSH2 0x192B JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 KECCAK256 SWAP1 SWAP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 MSTORE DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x40 ADD SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x19B6 JUMPI PUSH1 0x6 DUP2 DUP2 SLOAD DUP2 LT PUSH2 0x1965 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 DUP4 DUP2 MLOAD DUP2 LT PUSH2 0x198F JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 MSTORE POP POP PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1902 JUMP JUMPDEST DUP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x19D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x19FF JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP4 POP PUSH1 0x0 SWAP1 POP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0x1A4F JUMPI DUP3 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x1A1B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x1A2F JUMPI INVALID JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x20 SWAP3 DUP4 MUL SWAP2 SWAP1 SWAP2 ADD SWAP1 SWAP2 ADD MSTORE PUSH1 0x1 ADD PUSH2 0x1A07 JUMP JUMPDEST POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x9 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1A69 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x6 SLOAD DUP2 PUSH1 0x32 DUP3 GT DUP1 ISZERO SWAP1 PUSH2 0x1A7E JUMPI POP DUP2 DUP2 GT ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1A89 JUMPI POP DUP1 ISZERO ISZERO JUMPDEST DUP1 ISZERO PUSH2 0x1A94 JUMPI POP DUP2 ISZERO ISZERO JUMPDEST PUSH2 0x1A9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x8 DUP4 SWAP1 SSTORE PUSH1 0x40 DUP1 MLOAD DUP5 DUP2 MSTORE SWAP1 MLOAD PUSH32 0xA3F1EE9126A074D9326C682F561767F710E927FAA811F7A99829D49DC421797A SWAP2 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 LOG1 POP POP POP JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1AF6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1B19 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP4 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP5 SWAP2 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1B44 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE MLOAD DUP8 SWAP3 PUSH32 0x4A504A94899432A9846E1AA406DCEB1BCFD538BB839071D49D1E5E23F5BE30EF SWAP2 LOG3 PUSH2 0x1B98 DUP6 PUSH2 0x1E01 JUMP JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1BBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xA DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1BE2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 DUP2 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 SWAP1 DUP2 OR SWAP1 SWAP2 SSTORE PUSH1 0x5 DUP1 SLOAD SWAP2 DUP3 ADD DUP2 SSTORE SWAP1 SWAP2 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP1 SWAP2 OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x32 DUP2 JUMP JUMPDEST PUSH1 0x8 SLOAD DUP2 JUMP JUMPDEST CALLER ADDRESS EQ PUSH2 0x1C60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND PUSH2 0x1C87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD DUP3 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1CAF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x1CC3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x1D4B JUMPI DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1CE7 JUMPI INVALID JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 SWAP1 SWAP2 KECCAK256 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND EQ ISZERO PUSH2 0x1D43 JUMPI DUP5 PUSH1 0x6 DUP3 DUP2 SLOAD DUP2 LT PUSH2 0x1D10 JUMPI INVALID JUMPDEST SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB MUL NOT AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND MUL OR SWAP1 SSTORE POP PUSH2 0x1D4B JUMP JUMPDEST PUSH1 0x1 ADD PUSH2 0x1CC6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 DUP3 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE SWAP4 DUP9 AND DUP3 MSTORE DUP1 DUP3 KECCAK256 DUP1 SLOAD SWAP1 SWAP5 AND PUSH1 0x1 OR SWAP1 SWAP4 SSTORE SWAP2 MLOAD SWAP1 SWAP2 PUSH32 0x8001553A916EF2F495D26A907CC54D96ED840D7BDA71E73194BF5A9DF7A76B90 SWAP2 LOG2 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND SWAP1 PUSH32 0xF39E6E1EB0EDCF53C221607B54B00CD28F3196FED0A24994DC308B8F611B682D SWAP1 PUSH1 0x0 SWAP1 LOG2 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST CALLER PUSH1 0x0 DUP2 DUP2 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x1E1D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 CALLER DUP1 DUP6 MSTORE SWAP3 MSTORE SWAP1 SWAP2 KECCAK256 SLOAD DUP4 SWAP2 SWAP1 PUSH1 0xFF AND PUSH2 0x1E47 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP5 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x3 ADD SLOAD DUP5 SWAP1 PUSH1 0xFF AND ISZERO PUSH2 0x1E68 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x1E71 DUP6 PUSH2 0x13BF JUMP JUMPDEST ISZERO PUSH2 0x1B98 JUMPI PUSH1 0x0 DUP6 DUP2 MSTORE PUSH1 0x1 PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 SWAP2 KECCAK256 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SWAP3 OR SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP2 ADD SLOAD ISZERO PUSH2 0x1F20 JUMPI PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x1EF7 JUMPI PUSH1 0x7 SLOAD PUSH1 0x6 DUP3 ADD SLOAD PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 DUP2 ISZERO PUSH2 0x8FC MUL SWAP2 SWAP1 PUSH1 0x0 DUP2 DUP2 DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH2 0x1EF1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP PUSH2 0x1F20 JUMP JUMPDEST PUSH1 0x5 DUP2 ADD SLOAD PUSH1 0x7 SLOAD PUSH1 0x6 DUP4 ADD SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND SWAP3 PUSH2 0x1F1E SWAP3 DUP5 SWAP3 SWAP2 AND SWAP1 PUSH2 0x21E8 JUMP JUMPDEST POP JUMPDEST PUSH2 0xBB8 GAS LT ISZERO PUSH2 0x1F2F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 SLOAD PUSH1 0x1 DUP1 DUP4 ADD SLOAD PUSH1 0x2 DUP1 DUP6 ADD DUP1 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 PUSH1 0x1F PUSH1 0x0 NOT SWAP9 DUP6 AND ISZERO PUSH2 0x100 MUL SWAP9 SWAP1 SWAP9 ADD SWAP1 SWAP4 AND SWAP5 SWAP1 SWAP5 DIV SWAP6 DUP7 ADD DUP3 SWAP1 DIV DUP3 MUL DUP5 ADD DUP3 ADD SWAP1 MSTORE DUP5 DUP4 MSTORE PUSH2 0x1FDC SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP5 SWAP1 DUP4 ADD DUP3 DUP3 DUP1 ISZERO PUSH2 0x1FCD JUMPI DUP1 PUSH1 0x1F LT PUSH2 0x1FA2 JUMPI PUSH2 0x100 DUP1 DUP4 SLOAD DIV MUL DUP4 MSTORE SWAP2 PUSH1 0x20 ADD SWAP2 PUSH2 0x1FCD JUMP JUMPDEST DUP3 ADD SWAP2 SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 JUMPDEST DUP2 SLOAD DUP2 MSTORE SWAP1 PUSH1 0x1 ADD SWAP1 PUSH1 0x20 ADD DUP1 DUP4 GT PUSH2 0x1FB0 JUMPI DUP3 SWAP1 SUB PUSH1 0x1F AND DUP3 ADD SWAP2 JUMPDEST POP POP POP POP POP PUSH2 0xBB8 GAS SUB PUSH2 0x223F JUMP JUMPDEST ISZERO PUSH2 0x2011 JUMPI PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x5B6B431D4476A211BB7D41C20D1AAB9AE2321DEEE0D20BE3D9FC9B1093FA6E3D SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH2 0x2049 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP7 SWAP1 PUSH32 0x11A1AE95F9E191458D449E99F17D81683AD9BFF69F2A453C2D5FF43FE7C875BB SWAP1 PUSH1 0x0 SWAP1 LOG2 PUSH1 0x3 DUP2 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP7 AND PUSH1 0x24 DUP4 ADD MSTORE DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x84 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0x23B872DD PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x20AB SWAP1 DUP6 SWAP1 PUSH2 0x2257 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH2 0x20C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 DUP1 MLOAD PUSH1 0xE0 DUP2 ADD DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 DUP2 AND DUP3 MSTORE PUSH1 0x20 DUP1 DUP4 ADD DUP13 DUP2 MSTORE DUP4 DUP6 ADD DUP10 DUP2 MSTORE PUSH1 0x0 PUSH1 0x60 DUP7 ADD DUP2 SWAP1 MSTORE PUSH1 0x80 DUP7 ADD DUP15 SWAP1 MSTORE DUP13 DUP6 AND PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD DUP13 SWAP1 MSTORE DUP8 DUP2 MSTORE PUSH1 0x1 DUP1 DUP6 MSTORE SWAP7 SWAP1 KECCAK256 DUP6 MLOAD DUP2 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP6 AND SWAP5 SWAP1 SWAP5 OR DUP5 SSTORE SWAP1 MLOAD SWAP5 DUP4 ADD SWAP5 SWAP1 SWAP5 SSTORE SWAP3 MLOAD DUP1 MLOAD SWAP5 SWAP7 POP SWAP2 SWAP4 SWAP1 SWAP3 PUSH2 0x2154 SWAP3 PUSH1 0x2 DUP6 ADD SWAP3 SWAP2 ADD SWAP1 PUSH2 0x24D0 JUMP JUMPDEST POP PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x3 DUP3 ADD DUP1 SLOAD PUSH1 0xFF NOT AND SWAP2 ISZERO ISZERO SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x4 DUP3 ADD SSTORE PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0x5 DUP3 ADD DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH1 0xC0 SWAP1 SWAP2 ADD MLOAD PUSH1 0x6 SWAP1 SWAP2 ADD SSTORE PUSH1 0x9 DUP1 SLOAD PUSH1 0x1 ADD SWAP1 SSTORE PUSH1 0x40 MLOAD DUP3 SWAP1 PUSH32 0xC0BA8FE4B176C1714197D43B9CC6BCF797A4A7461C5FE8D0EF6E184AE7601E51 SWAP1 PUSH1 0x0 SWAP1 LOG2 POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP1 DUP3 ADD DUP5 SWAP1 MSTORE DUP3 MLOAD DUP1 DUP4 SUB SWAP1 SWAP2 ADD DUP2 MSTORE PUSH1 0x64 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xE0 SHL SUB AND PUSH4 0xA9059CBB PUSH1 0xE0 SHL OR SWAP1 MSTORE PUSH2 0x223A SWAP1 DUP5 SWAP1 PUSH2 0x2257 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP5 MLOAD PUSH1 0x20 DUP7 ADD DUP8 DUP10 DUP8 CALL SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x22AC DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5361666545524332303A206C6F772D6C6576656C2063616C6C206661696C6564 DUP2 MSTORE POP DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x2308 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP1 MLOAD SWAP1 SWAP2 POP ISZERO PUSH2 0x223A JUMPI DUP1 DUP1 PUSH1 0x20 ADD SWAP1 MLOAD PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x22CB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP MLOAD PUSH2 0x223A JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x2A DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x2564 PUSH1 0x2A SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x60 PUSH2 0x2317 DUP5 DUP5 PUSH1 0x0 DUP6 PUSH2 0x231F JUMP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x60 PUSH2 0x232A DUP6 PUSH2 0x24CA JUMP JUMPDEST PUSH2 0x237B JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416464726573733A2063616C6C20746F206E6F6E2D636F6E7472616374000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x60 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 DUP8 PUSH1 0x40 MLOAD DUP1 DUP3 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 JUMPDEST PUSH1 0x20 DUP4 LT PUSH2 0x23BA JUMPI DUP1 MLOAD DUP3 MSTORE PUSH1 0x1F NOT SWAP1 SWAP3 ADD SWAP2 PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x239B JUMP JUMPDEST PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB DUP1 NOT DUP3 MLOAD AND DUP2 DUP5 MLOAD AND DUP1 DUP3 OR DUP6 MSTORE POP POP POP POP POP POP SWAP1 POP ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP8 GAS CALL SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH1 0x0 DUP2 EQ PUSH2 0x241C JUMPI PUSH1 0x40 MLOAD SWAP2 POP PUSH1 0x1F NOT PUSH1 0x3F RETURNDATASIZE ADD AND DUP3 ADD PUSH1 0x40 MSTORE RETURNDATASIZE DUP3 MSTORE RETURNDATASIZE PUSH1 0x0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY PUSH2 0x2421 JUMP JUMPDEST PUSH1 0x60 SWAP2 POP JUMPDEST POP SWAP2 POP SWAP2 POP DUP2 ISZERO PUSH2 0x2435 JUMPI SWAP2 POP PUSH2 0x2317 SWAP1 POP JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x2445 JUMPI DUP1 MLOAD DUP1 DUP3 PUSH1 0x20 ADD REVERT JUMPDEST DUP4 PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x248F JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0x2477 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x24BC JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST EXTCODESIZE ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP3 DUP1 SLOAD PUSH1 0x1 DUP2 PUSH1 0x1 AND ISZERO PUSH2 0x100 MUL SUB AND PUSH1 0x2 SWAP1 DIV SWAP1 PUSH1 0x0 MSTORE PUSH1 0x20 PUSH1 0x0 KECCAK256 SWAP1 PUSH1 0x1F ADD PUSH1 0x20 SWAP1 DIV DUP2 ADD SWAP3 DUP3 PUSH1 0x1F LT PUSH2 0x2511 JUMPI DUP1 MLOAD PUSH1 0xFF NOT AND DUP4 DUP1 ADD OR DUP6 SSTORE PUSH2 0x253E JUMP JUMPDEST DUP3 DUP1 ADD PUSH1 0x1 ADD DUP6 SSTORE DUP3 ISZERO PUSH2 0x253E JUMPI SWAP2 DUP3 ADD JUMPDEST DUP3 DUP2 GT ISZERO PUSH2 0x253E JUMPI DUP3 MLOAD DUP3 SSTORE SWAP2 PUSH1 0x20 ADD SWAP2 SWAP1 PUSH1 0x1 ADD SWAP1 PUSH2 0x2523 JUMP JUMPDEST POP PUSH2 0x254A SWAP3 SWAP2 POP PUSH2 0x254E JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST JUMPDEST DUP1 DUP3 GT ISZERO PUSH2 0x254A JUMPI PUSH1 0x0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x254F JUMP INVALID MSTORE8 PUSH2 0x6665 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS KECCAK256 PUSH16 0x7065726174696F6E20646964206E6F74 KECCAK256 PUSH20 0x756363656564A264697066735822122068FA3909 0xD3 DUP9 0xEC ADD JUMPI STOP PUSH19 0xDBB28DD0E4361B535C92EBDD71C5C042E257F1 MSTORE8 0xCB PUSH5 0x736F6C6343 STOP MOD 0xC STOP CALLER ", - "sourceMap": "828:17513:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4439:8;;;828:17513;;;;2040:23;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2040:23:0;;:::i;:::-;;;;-1:-1:-1;;;;;2040:23:0;;;;;;;;;;;;;;7145:115;;;;;;;;;;;;;:::i;8176:466::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8176:466:0;-1:-1:-1;;;;;8176:466:0;;:::i;:::-;;5711:450;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5711:450:0;;-1:-1:-1;;5711:450:0;;;-1:-1:-1;;;5711:450:0;;;-1:-1:-1;;;;;5711:450:0;;:::i;11059:288::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11059:288:0;;:::i;1910:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1910:39:0;-1:-1:-1;;;;;1910:39:0;;:::i;:::-;;;;;;;;;;;;;;;;;;1841:62;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1841:62:0;;;;;;-1:-1:-1;;;;;1841:62:0;;:::i;2010:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2010:23:0;;:::i;15977:309::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15977:309:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4463:87;;;;;;;;;;;;;:::i;2176:26::-;;;;;;;;;;;;;:::i;5087:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5087:198:0;-1:-1:-1;;;;;5087:198:0;;:::i;6169:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6169:215:0;;-1:-1:-1;6169:215:0;;-1:-1:-1;;;;;6169:215:0:i;7429:217::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7429:217:0;-1:-1:-1;;;;;7429:217:0;;:::i;7777:272::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7777:272:0;-1:-1:-1;;;;;7777:272:0;;:::i;1730:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1730:47:0;-1:-1:-1;;;;;1730:47:0;;:::i;13964:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13964:360:0;;:::i;1956:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1956:45:0;-1:-1:-1;;;;;1956:45:0;;:::i;4721:118::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10072:407;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10072:407:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10072:407:0;;-1:-1:-1;10072:407:0;;-1:-1:-1;;;;;10072:407:0:i;15453:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15453:248:0;;:::i;1786:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1786:48:0;;:::i;:::-;;;;;-1:-1:-1;;;;;1786:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1786:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16374:112;;;;;;;;;;;;;:::i;17652:686::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17652:686:0;;;;;;;;;;;;;;;;;;;;;:::i;16687:590::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16687:590:0;;:::i;2141:28::-;;;;;;;;;;;;;:::i;9509:207::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9509:207:0;;:::i;10589:342::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10589:342:0;;:::i;2070:35::-;;;;;;;;;;;;;:::i;4558:155::-;;;;;;;;;;;;;:::i;4847:232::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4847:232:0;-1:-1:-1;;;;;4847:232:0;;:::i;1646:41::-;;;;;;;;;;;;;:::i;2114:20::-;;;;;;;;;;;;;:::i;8849:485::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8849:485:0;;;;;;;;;;:::i;5293:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5293:147:0;-1:-1:-1;;;;;5293:147:0;;:::i;11934:1002::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11934:1002:0;;:::i;2040:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2040:23:0;;-1:-1:-1;2040:23:0;:::o;7145:115::-;7240:12;;-1:-1:-1;;;;;7240:12:0;7145:115;:::o;8176:466::-;2483:10;2505:4;2483:27;2475:36;;;;;;-1:-1:-1;;;;;2699:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;8257:5;;2699:14:::1;;2691:23;;;::::0;::::1;;-1:-1:-1::0;;;;;8280:14:0;::::2;8297:5;8280:14:::0;;;:7:::2;:14;::::0;;;;:22;;-1:-1:-1;;8280:22:0::2;::::0;;8313:178:::2;8334:6;:13:::0;-1:-1:-1;;8334:17:0;8330:21;::::2;8313:178;;;8388:5;-1:-1:-1::0;;;;;8375:18:0::2;:6;8382:1;8375:9;;;;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;8375:9:0::2;:18;8371:120;;;8426:6;8433:13:::0;;-1:-1:-1;;8433:17:0;;;8426:25;::::2;;;;;;::::0;;;::::2;::::0;;;::::2;::::0;8414:6:::2;:9:::0;;-1:-1:-1;;;;;8426:25:0;;::::2;::::0;8421:1;;8414:9;::::2;;;;;;;;;;;;;:37;;;;;-1:-1:-1::0;;;;;8414:37:0::2;;;;;-1:-1:-1::0;;;;;8414:37:0::2;;;;;;8470:5;;8371:120;8353:3;;8313:178;;;;8501:6;:12;;;;;;;;::::0;;;::::2;::::0;;;;-1:-1:-1;;8501:12:0;;;;;-1:-1:-1;;;;;;8501:12:0::2;::::0;;;;;8539:6:::2;:13:::0;8528:8:::2;::::0;:24:::2;8524:75;;;8585:6;:13:::0;8567:32:::2;::::0;:17:::2;:32::i;:::-;8615:19;::::0;-1:-1:-1;;;;;8615:19:0;::::2;::::0;::::2;::::0;;;::::2;2522:1:::1;8176:466:::0;:::o;5711:450::-;4294:6;;;;4293:7;4285:16;;;;;;-1:-1:-1;;;;;4203:21:0;::::1;:14;:21:::0;;;::::1;::::0;;;;;;;5846:13;;4203:21:::1;;4195:30;;;::::0;::::1;;3692:12:::2;::::0;;3702:1:::2;3692:12:::0;;;;;::::2;::::0;;;5882:10;;3644:7:::2;::::0;3666:23:::2;::::0;3692:12:::2;::::0;::::2;::::0;;::::2;::::0;::::2;;::::0;-1:-1:-1;3692:12:0::2;3666:38;;3724:1;3720:5;;3715:98;3731:1;3727;:5;;;:25;;;;;3736:8;3745:1;3736:11;;;;;;;;;;::::0;::::2;::::0;;-1:-1:-1;;;;;;3736:11:0;:16;::::2;3727:25;3715:98;;;3790:8;3799:1;3790:11;;;;;;;;;;;;;;;;;;3774:10;3785:1;3774:13;;;;;;;;;;;;;:27;-1:-1:-1::0;;;;;3774:27:0::2;;;;;;;;-1:-1:-1::0;3754:3:0::2;::::0;;::::2;::::0;3715:98:::2;;;3866:16;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;3866:16:0::2;::::0;;::::2;::::0;3831:21;;;;::::2;::::0;3856:27;3831:52:::2;3823:61;;;::::0;::::2;;5932:13:::0;5957:58:::3;-1:-1:-1::0;;;;;5957:22:0;::::3;5980:10;6000:4;6007:7:::0;5957:22:::3;:58::i;:::-;6033:120;6057:10;6082;6107:7;6129:13;6033:120;;;;-1:-1:-1::0;;;;;6033:120:0::3;;;;;;;;;;;;;;-1:-1:-1::0;;;;;6033:120:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::3;::::0;;;::::3;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3895:1;4236::::2;;;4312::::1;5711:450:::0;;;:::o;11059:288::-;11136:10;2699:14;;;;:7;:14;;;;;;;;2691:23;;;;;;2963:28:::1;::::0;;;:13:::1;:28;::::0;;;;;;;11178:10:::1;2963:35:::0;;;;;;;;;11163:13;;11178:10;2963:35:::1;;2955:44;;;::::0;::::1;;3229:27:::2;::::0;;;:12:::2;:27;::::0;;;;:36:::2;;::::0;11207:13;;3229:36:::2;;3228:37;3220:46;;;::::0;::::2;;11281:5:::3;11238:28:::0;;;:13:::3;:28;::::0;;;;;;;11267:10:::3;11238:40:::0;;;;;;;;:48;;-1:-1:-1;;11238:48:0::3;::::0;;11302:37;11252:13;;11302:37:::3;::::0;::::3;3010:1:::2;2725::::1;;11059:288:::0;;:::o;1910:39::-;;;;;;;;;;;;;;;:::o;1841:62::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2010:23::-;;;;;;;;;;15977:309;16071:10;;16099:179;16120:16;;16116:1;:20;16099:179;;;16160:7;:36;;;;-1:-1:-1;16172:15:0;;;;:12;:15;;;;;:24;;;;;16171:25;16160:36;:89;;;;16213:8;:36;;;;-1:-1:-1;16225:15:0;;;;:12;:15;;;;;:24;;;;;16213:36;16156:122;;;16277:1;16268:10;;;;16156:122;16138:3;;16099:179;;;;15977:309;;;;:::o;4463:87::-;2483:10;2505:4;2483:27;2475:36;;;;;;4529:6:::1;:13:::0;;-1:-1:-1;;4529:13:0::1;4538:4;4529:13;::::0;;4463:87::o;2176:26::-;;;;;;:::o;5087:198::-;5160:10;2699:14;;;;:7;:14;;;;;;;;2691:23;;;;;;-1:-1:-1;;;;;;5248:29:0::1;:14;:29:::0;;;::::1;::::0;;;;;;5241:36;;-1:-1:-1;;5241:36:0::1;::::0;;5087:198::o;6169:215::-;4294:6;;;;4293:7;4285:16;;;;;;3692:12:::1;::::0;;3702:1:::1;3692:12:::0;;;;;::::1;::::0;;;6258:10;;3644:7:::1;::::0;3666:23:::1;::::0;3692:12:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;3692:12:0::1;3666:38;;3724:1;3720:5;;3715:98;3731:1;3727;:5;;;:25;;;;;3736:8;3745:1;3736:11;;;;;;;;;;::::0;::::1;::::0;;-1:-1:-1;;;;;;3736:11:0;:16;::::1;3727:25;3715:98;;;3790:8;3799:1;3790:11;;;;;;;;;;;;;;;;;;3774:10;3785:1;3774:13;;;;;;;;;;;;;:27;-1:-1:-1::0;;;;;3774:27:0::1;;;;;;;;-1:-1:-1::0;3754:3:0::1;::::0;;::::1;::::0;3715:98:::1;;;3866:16;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;3866:16:0::1;::::0;;::::1;::::0;3831:21;;;;::::1;::::0;3856:27;3831:52:::1;3823:61;;;::::0;::::1;;6314:1:::2;6302:9;:13;6294:22;;;::::0;::::2;;6349:27;6354:9;6365:10;6349:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::2;::::0;;;::::2;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4312:1:::1;;;6169:215:::0;:::o;7429:217::-;2483:10;2505:4;2483:27;2475:36;;;;;;7530:13;-1:-1:-1;;;;;3534:22:0;::::1;3526:31;;;::::0;::::1;;7561:12:::2;:28:::0;;-1:-1:-1;;;;;;7561:28:0::2;-1:-1:-1::0;;;;;7561:28:0;::::2;::::0;;::::2;::::0;;;7605:33:::2;::::0;::::2;::::0;-1:-1:-1;;7605:33:0::2;2522:1:::1;7429:217:::0;:::o;7777:272::-;2483:10;2505:4;2483:27;2475:36;;;;;;-1:-1:-1;;;;;2601:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;7861:5;;2601:14:::1;;2600:15;2592:24;;;::::0;::::1;;7881:5:::0;-1:-1:-1;;;;;3534:22:0;::::2;3526:31;;;::::0;::::2;;7910:6:::3;:13;;;;7926:1;7910:17;7929:8;;1685:2;3990:10;:29;;:65;;;;;4045:10;4032:9;:23;;3990:65;:92;;;;-1:-1:-1::0;4068:14:0;;::::3;3990:92;:124;;;;-1:-1:-1::0;4099:15:0;;::::3;3990:124;3982:133;;;::::0;::::3;;-1:-1:-1::0;;;;;7955:14:0;::::4;;::::0;;;:7:::4;:14;::::0;;;;;:21;;-1:-1:-1;;7955:21:0::4;7972:4;7955:21:::0;;::::4;::::0;;;7987:6:::4;:18:::0;;;;::::4;::::0;;;;;::::4;::::0;;-1:-1:-1;;;;;;7987:18:0::4;::::0;::::4;::::0;;8021:20;::::4;::::0;7955:14;8021:20:::4;3568:1:::3;;2627::::2;2522::::1;7777:272:::0;:::o;1730:47::-;;;;;;;;;;;;;;;;:::o;13964:360::-;14041:4;;;14088:206;14109:6;:13;14105:17;;14088:206;;;14148:28;;;;:13;:28;;;;;14177:6;:9;;14148:28;;;14184:1;;14177:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14177:9:0;14148:39;;;;;;;;;;;;;;;14144:72;;;14215:1;14206:10;;;;14144:72;14244:8;;14235:5;:17;14231:51;;;14278:4;14271:11;;;;;;14231:51;14124:3;;14088:206;;;;14311:5;14304:12;;;13964:360;;;;:::o;1956:45::-;;;;;;;;;;;;;:::o;4721:118::-;4784:16;4825:6;4818:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4818:13:0;;;;;;;;;;;;;;;;;;;;;;;4721:118;:::o;10072:407::-;10217:10;10275:18;2699:14;;;:7;:14;;;;;;10275:18;;10217:10;2699:14;;2691:23;;;;;;-1:-1:-1;;;;;3362:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;10247:5;;10254;;3362:25;;:57:::1;;-1:-1:-1::0;;;;;;3391:20:0;::::1;;::::0;;;:13:::1;:20;::::0;;;;;:28;-1:-1:-1;3362:57:0::1;3354:98;;;::::0;;-1:-1:-1;;;3354:98:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10327:59:::2;10342:11;10355:5;10362;10369;10376:3;10381:4;10327:14;:59::i;:::-;-1:-1:-1::0;;;;;10397:20:0;::::2;;::::0;;;:13:::2;:20;::::0;;;;:28;;;10311:75;-1:-1:-1;10438:33:0::2;10311:75:::0;10438:18:::2;:33::i;:::-;2725:1:::1;;10072:407:::0;;;;;;;;;:::o;15453:248::-;15539:10;;15567:126;15588:6;:13;15584:17;;15567:126;;;15625:28;;;;:13;:28;;;;;15654:6;:9;;15625:28;;;15661:1;;15654:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15654:9:0;15625:39;;;;;;;;;;;;;;;15621:72;;;15692:1;15683:10;;;;15621:72;15603:3;;15567:126;;;;15453:248;;;:::o;1786:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1786:48:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1786:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1786:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1786:48:0;;;;-1:-1:-1;1786:48:0;:::o;16374:112::-;16431:16;16472:6;16465:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16465:13:0;;;;;;;;;;;;;;;;;;;;;;16374:112;:::o;17652:686::-;17764:29;17811:32;17857:16;;17846:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17846:28:0;;17811:63;;17885:10;17910:6;17927:253;17943:16;;17939:1;:20;17927:253;;;17983:7;:36;;;;-1:-1:-1;17995:15:0;;;;:12;:15;;;;;:24;;;;;17994:25;17983:36;:89;;;;18036:8;:36;;;;-1:-1:-1;18048:15:0;;;;:12;:15;;;;;:24;;;;;18036:36;17979:201;;;18134:1;18106:18;18125:5;18106:25;;;;;;;;;;;;;:29;;;;;18163:1;18154:10;;;;17979:201;17961:3;;17927:253;;;18224:4;18219:2;:9;18208:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18208:21:0;;18190:39;;18249:4;18245:8;;18240:90;18259:2;18255:1;:6;18240:90;;;18309:18;18328:1;18309:21;;;;;;;;;;;;;;18281:15;18301:4;18297:1;:8;18281:25;;;;;;;;;;;;;;;;;:49;18263:3;;18240:90;;;17652:686;;;;;;;;;:::o;16687:590::-;16869:6;:13;16769:31;;;;16855:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16855:28:0;;16818:65;;16894:10;16919:6;16936:194;16952:6;:13;16948:17;;16936:194;;;16989:28;;;;:13;:28;;;;;17018:6;:9;;16989:28;;;17025:1;;17018:9;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17018:9:0;16989:39;;;;;;;;;;;;;;;16985:145;;;17076:6;17083:1;17076:9;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17076:9:0;17049:17;17067:5;17049:24;;;;;;;;;;;;;:36;-1:-1:-1;;;;;17049:36:0;;;-1:-1:-1;;;;;17049:36:0;;;;;17113:1;17104:10;;;;16985:145;16967:3;;16936:194;;;17171:5;17157:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17157:20:0;;17140:37;;17197:1;17193:5;;17188:81;17204:5;17200:1;:9;17188:81;;;17249:17;17267:1;17249:20;;;;;;;;;;;;;;17229:14;17244:1;17229:17;;;;;;;;-1:-1:-1;;;;;17229:40:0;;;:17;;;;;;;;;;;:40;17211:3;;17188:81;;;16687:590;;;;;;:::o;2141:28::-;;;;:::o;9509:207::-;2483:10;2505:4;2483:27;2475:36;;;;;;9602:6:::1;:13:::0;9617:9;1685:2:::1;3990:29:::0;::::1;::::0;::::1;::::0;:65:::1;;;4045:10;4032:9;:23;;3990:65;:92;;;;-1:-1:-1::0;4068:14:0;;::::1;3990:92;:124;;;;-1:-1:-1::0;4099:15:0;;::::1;3990:124;3982:133;;;::::0;::::1;;9644:8:::2;:20:::0;;;9680:28:::2;::::0;;;;;;;::::2;::::0;;;;::::2;::::0;;::::2;2522:1:::1;;9509:207:::0;:::o;10589:342::-;10666:10;2699:14;;;;:7;:14;;;;;;;;2691:23;;;;;;2859:1:::1;2808:27:::0;;;:12:::1;:27;::::0;;;;:39;10701:13;;-1:-1:-1;;;;;2808:39:0::1;2800:62;;;::::0;::::1;;3104:28:::2;::::0;;;:13:::2;:28;::::0;;;;;;;10749:10:::2;3104:35:::0;;;;;;;;;10734:13;;10749:10;3104:35:::2;;3103:36;3095:45;;;::::0;::::2;;10777:28:::3;::::0;;;:13:::3;:28;::::0;;;;;;;10806:10:::3;10777:40:::0;;;;;;;;:47;;-1:-1:-1;;10777:47:0::3;10820:4;10777:47;::::0;;10840:39;10791:13;;10840:39:::3;::::0;::::3;10890:33;10909:13;10890:18;:33::i;:::-;2873:1:::2;;2725::::1;10589:342:::0;;:::o;2070:35::-;;;-1:-1:-1;;;;;2070:35:0;;:::o;4558:155::-;2483:10;2505:4;2483:27;2475:36;;;;;;4691:6:::1;:14:::0;;-1:-1:-1;;4691:14:0::1;::::0;;4558:155::o;4847:232::-;4917:10;2699:14;;;;:7;:14;;;;;;;;2691:23;;;;;;-1:-1:-1;;;;;;4998:29:0::1;:14;:29:::0;;;::::1;::::0;;;;;;:36;;-1:-1:-1;;4998:36:0::1;5030:4;4998:36:::0;;::::1;::::0;;;5045:6:::1;:26:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;5045:26:0::1;::::0;;::::1;::::0;;4847:232::o;1646:41::-;1685:2;1646:41;:::o;2114:20::-;;;;:::o;8849:485::-;2483:10;2505:4;2483:27;2475:36;;;;;;-1:-1:-1;;;;;2699:14:0;::::1;;::::0;;;:7:::1;:14;::::0;;;;;8949:5;;2699:14:::1;;2691:23;;;::::0;::::1;;-1:-1:-1::0;;;;;2601:14:0;::::2;;::::0;;;:7:::2;:14;::::0;;;;;8979:8;;2601:14:::2;;2600:15;2592:24;;;::::0;::::2;;9002:8:::0;-1:-1:-1;;;;;3534:22:0;::::3;3526:31;;;::::0;::::3;;9033:6:::4;9028:157;9049:6;:13:::0;9045:17;::::4;9028:157;;;9099:5;-1:-1:-1::0;;;;;9086:18:0::4;:6;9093:1;9086:9;;;;;;;;;::::0;;;::::4;::::0;;;::::4;::::0;-1:-1:-1;;;;;9086:9:0::4;:18;9082:103;;;9137:8;9125:6;9132:1;9125:9;;;;;;;;;;;;;;;;:20;;;;;-1:-1:-1::0;;;;;9125:20:0::4;;;;;-1:-1:-1::0;;;;;9125:20:0::4;;;;;;9164:5;;9082:103;9064:3;;9028:157;;;-1:-1:-1::0;;;;;;9195:14:0;;::::4;9212:5;9195:14:::0;;;:7:::4;:14;::::0;;;;;:22;;-1:-1:-1;;9195:22:0;;::::4;::::0;;;9228:17;;::::4;::::0;;;;;:24;;;;::::4;9195:22:::0;9228:24:::4;::::0;;;9268:19;;9195:14;;9268:19:::4;::::0;::::4;9303:23;::::0;-1:-1:-1;;;;;9303:23:0;::::4;::::0;::::4;::::0;;;::::4;2627:1:::3;2725::::2;2522::::1;8849:485:::0;;:::o;5293:147::-;-1:-1:-1;;;;;5404:28:0;5375:4;5404:28;;;:13;:28;;;;;;;5293:147::o;11934:1002::-;12011:10;2699:14;;;;:7;:14;;;;;;;;2691:23;;;;;;2963:28:::1;::::0;;;:13:::1;:28;::::0;;;;;;;12053:10:::1;2963:35:::0;;;;;;;;;12038:13;;12053:10;2963:35:::1;;2955:44;;;::::0;::::1;;3229:27:::2;::::0;;;:12:::2;:27;::::0;;;;:36:::2;;::::0;12082:13;;3229:36:::2;;3228:37;3220:46;;;::::0;::::2;;12117:26:::3;12129:13;12117:11;:26::i;:::-;12113:816;;;12160:23;12186:27:::0;;;:12:::3;:27;::::0;;;;;;;12230:12:::3;::::0;::::3;:19:::0;;-1:-1:-1;;12230:19:0::3;::::0;;::::3;::::0;;;12270:7:::3;::::0;::::3;::::0;:11;12266:344:::3;;12352:9;::::0;::::3;::::0;-1:-1:-1;;;;;12352:9:0::3;12348:247;;12400:12;::::0;12422:7:::3;::::0;::::3;::::0;12400:30:::3;::::0;-1:-1:-1;;;;;12400:12:0;;::::3;::::0;:30;::::3;;;::::0;12422:7;12400:12:::3;:30:::0;:12;:30;12422:7;12400:12;:30;::::3;;;;;;;;;;;;;::::0;::::3;;;;;;12348:247;;;12501:9;::::0;::::3;::::0;12553:12:::3;::::0;12567:7:::3;::::0;::::3;::::0;-1:-1:-1;;;;;12501:9:0;;::::3;::::0;12534:41:::3;::::0;12501:9;;12553:12;::::3;::::0;12534:18:::3;:41::i;:::-;12348:247;;12647:4;12634:9;:17;;12626:26;;;::::0;::::3;;12687:15:::0;;;12704:9;;::::3;::::0;12715:8:::3;::::0;;::::3;12673:69:::0;;::::3;::::0;;::::3;;-1:-1:-1::0;;12673:69:0;;::::3;;12687:15;12673:69;::::0;;;;;;::::3;::::0;;;::::3;::::0;;::::3;::::0;;::::3;::::0;::::3;::::0;;;;;;;;;::::3;::::0;-1:-1:-1;;;;;12687:15:0::3;::::0;12673:69;;::::3;12715:8:::0;12673:69;;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12737:4;12725:9;:16;12673:13;:69::i;:::-;12669:249;;;12766:23;::::0;12775:13;;12766:23:::3;::::0;;;::::3;12669:249;;;12833:30;::::0;12849:13;;12833:30:::3;::::0;;;::::3;12882:12;::::0;::::3;:20:::0;;-1:-1:-1;;12882:20:0::3;::::0;;12669:249:::3;12113:816;3010:1:::2;2725::::1;;11934:1002:::0;;:::o;877:203:3:-;1004:68;;;-1:-1:-1;;;;;1004:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1004:68:3;-1:-1:-1;;;1004:68:3;;;977:96;;997:5;;977:19;:96::i;:::-;877:203;;;;:::o;14683:557:0:-;14850:18;14823:11;-1:-1:-1;;;;;3534:22:0;;3526:31;;;;;;14902:16:::1;::::0;14959:200:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;14959:200:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;14959:200:0;;;;;;;;;;;;;;::::1;::::0;;;;;;;;;;14929:27;;;14959:200;14929:27;;;;;;:230;;;;-1:-1:-1;;;;;;14929:230:0::1;::::0;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;14902:16;;-1:-1:-1;14959:200:0;;14929:27;;:230:::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;14929:230:0::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;14929:230:0::1;::::0;::::1;;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;;14929:230:0::1;-1:-1:-1::0;;;;;14929:230:0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;15170:16:::1;:21:::0;;-1:-1:-1;15170:21:0::1;::::0;;15207:25:::1;::::0;15218:13;;15207:25:::1;::::0;-1:-1:-1;;15207:25:0::1;14683:557:::0;;;;;;;;;:::o;696:175:3:-;805:58;;;-1:-1:-1;;;;;805:58:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;805:58:3;-1:-1:-1;;;805:58:3;;;778:86;;798:5;;778:19;:86::i;:::-;696:175;;;:::o;13117:691:0:-;13243:12;13701:1;13681;13578:4;13572:11;13479:4;13473;13469:15;13445:5;13415:11;13391:5;13368:422;13357:433;13342:459;-1:-1:-1;;;;;13342:459:0:o;2959:751:3:-;3378:23;3404:69;3432:4;3404:69;;;;;;;;;;;;;;;;;3412:5;-1:-1:-1;;;;;3404:27:3;;;:69;;;;;:::i;:::-;3487:17;;3378:95;;-1:-1:-1;3487:21:3;3483:221;;3627:10;3616:30;;;;;;;;;;;;;;;-1:-1:-1;3616:30:3;3608:85;;;;-1:-1:-1;;;3608:85:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3573:194:4;3676:12;3707:53;3730:6;3738:4;3744:1;3747:12;3707:22;:53::i;:::-;3700:60;3573:194;-1:-1:-1;;;;3573:194:4:o;4920:958::-;5050:12;5082:18;5093:6;5082:10;:18::i;:::-;5074:60;;;;;-1:-1:-1;;;5074:60:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;5205:12;5219:23;5246:6;-1:-1:-1;;;;;5246:11:4;5266:8;5277:4;5246:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5246:36:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5204:78;;;;5296:7;5292:580;;;5326:10;-1:-1:-1;5319:17:4;;-1:-1:-1;5319:17:4;5292:580;5437:17;;:21;5433:429;;5695:10;5689:17;5755:15;5742:10;5738:2;5734:19;5727:44;5644:145;5834:12;5827:20;;-1:-1:-1;;;5827:20:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:413;1078:20;1116:8;;;718:413::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;" - }, - "gasEstimates": { - "creation": { - "codeDepositCost": "1933400", - "executionCost": "infinite", - "totalCost": "infinite" - }, - "external": { - "MAX_OWNER_COUNT()": "242", - "SupportedTokens()": "infinite", - "addOwner(address)": "66724", - "addToken(address)": "63797", - "changeRequirement(uint256)": "22343", - "confirmTransaction(uint256)": "infinite", - "confirmations(uint256,address)": "1313", - "executeTransaction(uint256)": "infinite", - "feeCollector()": "1104", - "getConfirmationCount(uint256)": "infinite", - "getConfirmations(uint256)": "infinite", - "getFeeCollector()": "1106", - "getOwners()": "infinite", - "getTokenNonce(address)": "1252", - "getTransactionCount(bool,bool)": "infinite", - "getTransactionIds(uint256,uint256,bool,bool)": "infinite", - "isConfirmed(uint256)": "infinite", - "isOwner(address)": "1204", - "owners(uint256)": "2017", - "pauseSwaps()": "21035", - "paused()": "1078", - "removeOwner(address)": "infinite", - "removeToken(address)": "22092", - "replaceFeeCollector(address)": "22318", - "replaceOwner(address,address)": "infinite", - "required()": "1064", - "revokeConfirmation(uint256)": "25482", - "secretTxNonce(address)": "1257", - "submitTransaction(address,uint256,uint256,address,uint256,bytes)": "infinite", - "swap(bytes)": "infinite", - "swapToken(bytes,uint256,address)": "infinite", - "tokenWhitelist(address)": "1228", - "tokens(uint256)": "2082", - "transactionCount()": "1109", - "transactions(uint256)": "infinite", - "unPauseSwaps()": "21072" - }, - "internal": { - "addTransaction(address,uint256,uint256,address,uint256,bytes memory)": "infinite", - "collectFee(uint256)": "infinite", - "external_call(address,uint256,bytes memory,uint256)": "infinite" - } - }, - "methodIdentifiers": { - "MAX_OWNER_COUNT()": "d74f8edd", - "SupportedTokens()": "85093095", - "addOwner(address)": "7065cb48", - "addToken(address)": "d48bfca7", - "changeRequirement(uint256)": "ba51a6df", - "confirmTransaction(uint256)": "c01a8c84", - "confirmations(uint256,address)": "3411c81c", - "executeTransaction(uint256)": "ee22610b", - "feeCollector()": "c415b95c", - "getConfirmationCount(uint256)": "8b51d13f", - "getConfirmations(uint256)": "b5dc40c3", - "getFeeCollector()": "12fde4b7", - "getOwners()": "a0e67e2b", - "getTokenNonce(address)": "ea5416a5", - "getTransactionCount(bool,bool)": "54741525", - "getTransactionIds(uint256,uint256,bool,bool)": "a8abe69a", - "isConfirmed(uint256)": "784547a7", - "isOwner(address)": "2f54bf6e", - "owners(uint256)": "025e7c27", - "pauseSwaps()": "558b7dd1", - "paused()": "5c975abb", - "removeOwner(address)": "173825d9", - "removeToken(address)": "5fa7b584", - "replaceFeeCollector(address)": "6350ae12", - "replaceOwner(address,address)": "e20056e6", - "required()": "dc8452cd", - "revokeConfirmation(uint256)": "20ea8d86", - "secretTxNonce(address)": "7f0d3697", - "submitTransaction(address,uint256,uint256,address,uint256,bytes)": "8600c9d5", - "swap(bytes)": "627dd56a", - "swapToken(bytes,uint256,address)": "20aeb817", - "tokenWhitelist(address)": "753d7563", - "tokens(uint256)": "4f64b2be", - "transactionCount()": "b77bf600", - "transactions(uint256)": "9ace38c2", - "unPauseSwaps()": "c5925420" - } - }, - "abi": [ - { - "inputs": [ - { - "internalType": "address[]", - "name": "_owners", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_required", - "type": "uint256" - }, - { - "internalType": "address payable", - "name": "_feeCollector", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "Confirmation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "collector", - "type": "address" - } - ], - "name": "FeeCollectorChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerAddition", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnerRemoval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "required", - "type": "uint256" - } - ], - "name": "RequirementChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "Revocation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "Submission", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "recipient", - "type": "bytes" - } - ], - "name": "Swap", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "recipient", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "tokenAddress", - "type": "address" - } - ], - "name": "SwapToken", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "Withdraw", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "WithdrawFailure", - "type": "event" - }, - { - "inputs": [], - "name": "MAX_OWNER_COUNT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SupportedTokens", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "addOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_tokenAddress", - "type": "address" - } - ], - "name": "addToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_required", - "type": "uint256" - } - ], - "name": "changeRequirement", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "confirmTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "confirmations", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "executeTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "feeCollector", - "outputs": [ - { - "internalType": "address payable", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "getConfirmationCount", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "getConfirmations", - "outputs": [ - { - "internalType": "address[]", - "name": "_confirmations", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getFeeCollector", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getOwners", - "outputs": [ - { - "internalType": "address[]", - "name": "", - "type": "address[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_tokenAddress", - "type": "address" - } - ], - "name": "getTokenNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "pending", - "type": "bool" - }, - { - "internalType": "bool", - "name": "executed", - "type": "bool" - } - ], - "name": "getTransactionCount", - "outputs": [ - { - "internalType": "uint256", - "name": "count", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "from", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "to", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "pending", - "type": "bool" - }, - { - "internalType": "bool", - "name": "executed", - "type": "bool" - } - ], - "name": "getTransactionIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "_transactionIds", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "isConfirmed", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "isOwner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "owners", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pauseSwaps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "removeOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_tokenAddress", - "type": "address" - } - ], - "name": "removeToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "_feeCollector", - "type": "address" - } - ], - "name": "replaceFeeCollector", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "replaceOwner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "required", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "name": "revokeConfirmation", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "secretTxNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "submitTransaction", - "outputs": [ - { - "internalType": "uint256", - "name": "transactionId", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_recipient", - "type": "bytes" - } - ], - "name": "swap", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_recipient", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "_tokenAddress", - "type": "address" - } - ], - "name": "swapToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "tokenWhitelist", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "tokens", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "transactionCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "transactions", - "outputs": [ - { - "internalType": "address", - "name": "destination", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "bool", - "name": "executed", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "address", - "name": "token", - "type": "address" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unPauseSwaps", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ] -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MyERC20.json b/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MyERC20.json deleted file mode 100644 index eed5b59..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/out/MyERC20.json +++ /dev/null @@ -1,1096 +0,0 @@ -{ - "contractName": "MyERC20", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "internalType": "string", - "name": "symbol", - "type": "string" - }, - { - "internalType": "uint8", - "name": "decimals", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "MinterRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addMinter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burn", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "burnFrom", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "subtractedValue", - "type": "uint256" - } - ], - "name": "decreaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedValue", - "type": "uint256" - } - ], - "name": "increaseAllowance", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "renounceMinter", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "metadata": "{\"compiler\":{\"version\":\"0.5.17+commit.d19bba13\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MinterAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"MinterRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnFrom\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceMinter\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"methods\":{\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. * Requirements: * - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(uint256)\":{\"details\":\"Destroys `amount` tokens from the caller. * See {ERC20-_burn}.\"},\"burnFrom(address,uint256)\":{\"details\":\"See {ERC20-_burnFrom}.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. * NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"Atomically decreases the allowance granted to `spender` by the caller. * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. * Emits an {Approval} event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"Atomically increases the allowance granted to `spender` by the caller. * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. * Emits an {Approval} event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address.\"},\"mint(address,uint256)\":{\"details\":\"See {ERC20-_mint}. * Requirements: * - the caller must have the {MinterRole}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. * Requirements: * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. * Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for `sender`'s tokens of at least `amount`.\"}}},\"userdoc\":{\"methods\":{}}},\"settings\":{\"compilationTarget\":{\"/Users/yuriy/pro5/ethhmy-bridge.contract/contracts/lib/MyERC20.sol\":\"MyERC20\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/yuriy/pro5/ethhmy-bridge.contract/contracts/lib/MyERC20.sol\":{\"keccak256\":\"0x5226c7f10a207bda5d691208ac07f7980404c046ae7e152e92621000919229e4\",\"urls\":[\"bzz-raw://bcdfa5ff238bf775e794e0f1e2dbcd2ad19ca3a25077b98691a7a3a29e7b5d1c\",\"dweb:/ipfs/QmYiep7TLVJwVi6YnUKpfZb29aSGrNg58CUqW5EZVmGLkR\"]},\"@openzeppelin/contracts/GSN/Context.sol\":{\"keccak256\":\"0x90a3995645af7562d84b9d69363ffa5ae7217714ab61e951bf7bc450f40e4061\",\"urls\":[\"bzz-raw://216ef9d6b614db4eb46970b4e84903f2534a45572dd30a79f0041f1a5830f436\",\"dweb:/ipfs/QmNPrJ4MWKUAWzKXpUqeyKRUfosaoANZAqXgvepdrCwZAG\"]},\"@openzeppelin/contracts/access/Roles.sol\":{\"keccak256\":\"0xb002c378d7b82a101bd659c341518953ca0919d342c0a400196982c0e7e7bcdb\",\"urls\":[\"bzz-raw://00a788c4631466c220b385bdd100c571d24b2deccd657615cfbcef6cadf669a4\",\"dweb:/ipfs/QmTEwDbjJNxmMNCDMqtuou3dyM8Wtp8Q9NFvn7SAVM7Jf3\"]},\"@openzeppelin/contracts/access/roles/MinterRole.sol\":{\"keccak256\":\"0xbe8eef6f2cb4e427f5c5d8a76865ccd06e55a4f1d6671ba312d45bfa705aedbf\",\"urls\":[\"bzz-raw://badf338a5e22c8658c01fe2ce89b487d9dbf6d2d9d5eb49df7415383e2498765\",\"dweb:/ipfs/QmP5aMkvFwMJyuQjKE8ADh5tkWYqonb4KjgkAjgYEVVFAv\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x640b6dee7a4b830bdfd52b5031a07fc2b12209f5b2e29e5d364a7d37f69d8076\",\"urls\":[\"bzz-raw://31113152e1ddb78fe7a4197f247591ca894e93f916867beb708d8e747b6cc74f\",\"dweb:/ipfs/QmbZaJyXdpsYGykVhHH9qpVGQg9DGCxE2QufbCUy3daTgq\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xb15af804e2bc97db51e4e103f13de9fe13f87e6b835d7a88c897966c0e58506e\",\"urls\":[\"bzz-raw://1e8cff8437557fc915a3bed968fcd8f2df9809599e665ef69c2c9ce628548055\",\"dweb:/ipfs/QmP5spYP8vs2jvLF8zNrXUbqB79hMsoEvMHiLcBxerWKcm\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol\":{\"keccak256\":\"0x9b94356691f3cbf90a5d83ae3fdf6a5a662bb004d2bd8b034160d60221807e64\",\"urls\":[\"bzz-raw://14a9d33db455302b8bb9fdb28998efefbe5a1cb41b29e31391609f646b2ab351\",\"dweb:/ipfs/Qmd4wFr6GEMZnnxgXeq3gmp7cs8tqDuHp3TVNhCbjnux2V\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\":{\"keccak256\":\"0x4a3a810b7ebe742e897e1fd428b3eeed2196d3acea58eaf9c566ed10d545d2ed\",\"urls\":[\"bzz-raw://28d03f328e19e4099d5013de0649afaeaabac1a614e130767ab1cb4aca9775b6\",\"dweb:/ipfs/Qmb9iW7yNuYehB2NfhRMs9TakqbLVQhBhmGMkaDZ5g1Eb4\"]},\"@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol\":{\"keccak256\":\"0xa2b957cf89692c504962afb7506999155f83385373f808243246cd5879de5940\",\"urls\":[\"bzz-raw://c44ae0ad1bce141c33b962f8b4e9228bdf8df36c8ac363b4f0bf9498b8bfc32a\",\"dweb:/ipfs/QmcSBRdFwVvy2wFZrBwo5cvqNP4UHh9Eyzf8jnxBgnPqfe\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xe5bb0f57cff3e299f360052ba50f1ea0fff046df2be070b6943e0e3c3fdad8a9\",\"urls\":[\"bzz-raw://59fd025151435da35faa8093a5c7a17de02de9d08ad27275c5cdf05050820d91\",\"dweb:/ipfs/QmQMvwEcPhoRXzbXyrdoeRtvLoifUW9Qh7Luho7bmUPRkc\"]}},\"version\":1}", - "bytecode": "0x60806040523480156200001157600080fd5b506040516200158f3803806200158f833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052602090810151855190935085925084918491620001c0916003919086019062000361565b508151620001d690600490602085019062000361565b506005805460ff191660ff92909216919091179055506200020b9050620001fc62000214565b6001600160e01b036200021916565b50505062000403565b335b90565b620002348160066200026b60201b62000e621790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6200028082826001600160e01b03620002f816565b15620002d3576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b60006001600160a01b038216620003415760405162461bcd60e51b81526004018080602001828103825260228152602001806200156d6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620003a457805160ff1916838001178555620003d4565b82800160010185558215620003d4579182015b82811115620003d4578251825591602001919060010190620003b7565b50620003e2929150620003e6565b5090565b6200021691905b80821115620003e25760008155600101620003ed565b61115a80620004136000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806398650275116100715780639865027514610332578063a457c2d71461033a578063a9059cbb14610366578063aa271e1a14610392578063dd62ed3e146103b85761010b565b806370a08231146102b257806379cc6790146102d857806395d89b4114610304578063983b2d561461030c5761010b565b8063313ce567116100de578063313ce5671461021d578063395093511461023b57806340c10f191461026757806342966c68146102935761010b565b806306fdde0314610110578063095ea7b31461018d57806318160ddd146101cd57806323b872dd146101e7575b600080fd5b6101186103e6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015257818101518382015260200161013a565b50505050905090810190601f16801561017f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b9600480360360408110156101a357600080fd5b506001600160a01b03813516906020013561047c565b604080519115158252519081900360200190f35b6101d5610499565b60408051918252519081900360200190f35b6101b9600480360360608110156101fd57600080fd5b506001600160a01b0381358116916020810135909116906040013561049f565b61022561052c565b6040805160ff9092168252519081900360200190f35b6101b96004803603604081101561025157600080fd5b506001600160a01b038135169060200135610535565b6101b96004803603604081101561027d57600080fd5b506001600160a01b038135169060200135610589565b6102b0600480360360208110156102a957600080fd5b50356105e0565b005b6101d5600480360360208110156102c857600080fd5b50356001600160a01b03166105f4565b6102b0600480360360408110156102ee57600080fd5b506001600160a01b03813516906020013561060f565b61011861061d565b6102b06004803603602081101561032257600080fd5b50356001600160a01b031661067e565b6102b06106cd565b6101b96004803603604081101561035057600080fd5b506001600160a01b0381351690602001356106df565b6101b96004803603604081101561037c57600080fd5b506001600160a01b03813516906020013561074d565b6101b9600480360360208110156103a857600080fd5b50356001600160a01b0316610761565b6101d5600480360360408110156103ce57600080fd5b506001600160a01b038135811691602001351661077a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104725780601f1061044757610100808354040283529160200191610472565b820191906000526020600020905b81548152906001019060200180831161045557829003601f168201915b5050505050905090565b60006104906104896107a5565b84846107a9565b50600192915050565b60025490565b60006104ac848484610895565b610522846104b86107a5565b61051d85604051806060016040528060288152602001611029602891396001600160a01b038a166000908152600160205260408120906104f66107a5565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6109f116565b6107a9565b5060019392505050565b60055460ff1690565b60006104906105426107a5565b8461051d85600160006105536107a5565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610a8816565b600061059b6105966107a5565b610761565b6105d65760405162461bcd60e51b8152600401808060200182810382526030815260200180610fd86030913960400191505060405180910390fd5b6104908383610ae9565b6105f16105eb6107a5565b82610bd9565b50565b6001600160a01b031660009081526020819052604090205490565b6106198282610cd5565b5050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104725780601f1061044757610100808354040283529160200191610472565b6106896105966107a5565b6106c45760405162461bcd60e51b8152600401808060200182810382526030815260200180610fd86030913960400191505060405180910390fd5b6105f181610d29565b6106dd6106d86107a5565b610d71565b565b60006104906106ec6107a5565b8461051d8560405180606001604052806025815260200161110160259139600160006107166107a5565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6109f116565b600061049061075a6107a5565b8484610895565b600061077460068363ffffffff610db916565b92915050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166107ee5760405162461bcd60e51b81526004018080602001828103825260248152602001806110dd6024913960400191505060405180910390fd5b6001600160a01b0382166108335760405162461bcd60e51b8152600401808060200182810382526022815260200180610f906022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166108da5760405162461bcd60e51b81526004018080602001828103825260258152602001806110b86025913960400191505060405180910390fd5b6001600160a01b03821661091f5760405162461bcd60e51b8152600401808060200182810382526023815260200180610f4b6023913960400191505060405180910390fd5b61096281604051806060016040528060268152602001610fb2602691396001600160a01b038616600090815260208190526040902054919063ffffffff6109f116565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610997908263ffffffff610a8816565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a45578181015183820152602001610a2d565b50505050905090810190601f168015610a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ae2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610b44576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254610b57908263ffffffff610a8816565b6002556001600160a01b038216600090815260208190526040902054610b83908263ffffffff610a8816565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610c1e5760405162461bcd60e51b81526004018080602001828103825260218152602001806110976021913960400191505060405180910390fd5b610c6181604051806060016040528060228152602001610f6e602291396001600160a01b038516600090815260208190526040902054919063ffffffff6109f116565b6001600160a01b038316600090815260208190526040902055600254610c8d908263ffffffff610e2016565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b610cdf8282610bd9565b61061982610ceb6107a5565b61051d84604051806060016040528060248152602001611073602491396001600160a01b0388166000908152600160205260408120906104f66107a5565b610d3a60068263ffffffff610e6216565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b610d8260068263ffffffff610ee316565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b038216610e005760405162461bcd60e51b81526004018080602001828103825260228152602001806110516022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6000610ae283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506109f1565b610e6c8282610db9565b15610ebe576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610eed8282610db9565b610f285760405162461bcd60e51b81526004018080602001828103825260218152602001806110086021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158202456fb3efffb510cf39af3243cdd6ab15585ab026529b07f4eafe3ded30cb7b964736f6c63430005110032526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061010b5760003560e01c806370a08231116100a257806398650275116100715780639865027514610332578063a457c2d71461033a578063a9059cbb14610366578063aa271e1a14610392578063dd62ed3e146103b85761010b565b806370a08231146102b257806379cc6790146102d857806395d89b4114610304578063983b2d561461030c5761010b565b8063313ce567116100de578063313ce5671461021d578063395093511461023b57806340c10f191461026757806342966c68146102935761010b565b806306fdde0314610110578063095ea7b31461018d57806318160ddd146101cd57806323b872dd146101e7575b600080fd5b6101186103e6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561015257818101518382015260200161013a565b50505050905090810190601f16801561017f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b9600480360360408110156101a357600080fd5b506001600160a01b03813516906020013561047c565b604080519115158252519081900360200190f35b6101d5610499565b60408051918252519081900360200190f35b6101b9600480360360608110156101fd57600080fd5b506001600160a01b0381358116916020810135909116906040013561049f565b61022561052c565b6040805160ff9092168252519081900360200190f35b6101b96004803603604081101561025157600080fd5b506001600160a01b038135169060200135610535565b6101b96004803603604081101561027d57600080fd5b506001600160a01b038135169060200135610589565b6102b0600480360360208110156102a957600080fd5b50356105e0565b005b6101d5600480360360208110156102c857600080fd5b50356001600160a01b03166105f4565b6102b0600480360360408110156102ee57600080fd5b506001600160a01b03813516906020013561060f565b61011861061d565b6102b06004803603602081101561032257600080fd5b50356001600160a01b031661067e565b6102b06106cd565b6101b96004803603604081101561035057600080fd5b506001600160a01b0381351690602001356106df565b6101b96004803603604081101561037c57600080fd5b506001600160a01b03813516906020013561074d565b6101b9600480360360208110156103a857600080fd5b50356001600160a01b0316610761565b6101d5600480360360408110156103ce57600080fd5b506001600160a01b038135811691602001351661077a565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104725780601f1061044757610100808354040283529160200191610472565b820191906000526020600020905b81548152906001019060200180831161045557829003601f168201915b5050505050905090565b60006104906104896107a5565b84846107a9565b50600192915050565b60025490565b60006104ac848484610895565b610522846104b86107a5565b61051d85604051806060016040528060288152602001611029602891396001600160a01b038a166000908152600160205260408120906104f66107a5565b6001600160a01b03168152602081019190915260400160002054919063ffffffff6109f116565b6107a9565b5060019392505050565b60055460ff1690565b60006104906105426107a5565b8461051d85600160006105536107a5565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff610a8816565b600061059b6105966107a5565b610761565b6105d65760405162461bcd60e51b8152600401808060200182810382526030815260200180610fd86030913960400191505060405180910390fd5b6104908383610ae9565b6105f16105eb6107a5565b82610bd9565b50565b6001600160a01b031660009081526020819052604090205490565b6106198282610cd5565b5050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104725780601f1061044757610100808354040283529160200191610472565b6106896105966107a5565b6106c45760405162461bcd60e51b8152600401808060200182810382526030815260200180610fd86030913960400191505060405180910390fd5b6105f181610d29565b6106dd6106d86107a5565b610d71565b565b60006104906106ec6107a5565b8461051d8560405180606001604052806025815260200161110160259139600160006107166107a5565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff6109f116565b600061049061075a6107a5565b8484610895565b600061077460068363ffffffff610db916565b92915050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3390565b6001600160a01b0383166107ee5760405162461bcd60e51b81526004018080602001828103825260248152602001806110dd6024913960400191505060405180910390fd5b6001600160a01b0382166108335760405162461bcd60e51b8152600401808060200182810382526022815260200180610f906022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166108da5760405162461bcd60e51b81526004018080602001828103825260258152602001806110b86025913960400191505060405180910390fd5b6001600160a01b03821661091f5760405162461bcd60e51b8152600401808060200182810382526023815260200180610f4b6023913960400191505060405180910390fd5b61096281604051806060016040528060268152602001610fb2602691396001600160a01b038616600090815260208190526040902054919063ffffffff6109f116565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610997908263ffffffff610a8816565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610a805760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610a45578181015183820152602001610a2d565b50505050905090810190601f168015610a725780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ae2576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610b44576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254610b57908263ffffffff610a8816565b6002556001600160a01b038216600090815260208190526040902054610b83908263ffffffff610a8816565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b038216610c1e5760405162461bcd60e51b81526004018080602001828103825260218152602001806110976021913960400191505060405180910390fd5b610c6181604051806060016040528060228152602001610f6e602291396001600160a01b038516600090815260208190526040902054919063ffffffff6109f116565b6001600160a01b038316600090815260208190526040902055600254610c8d908263ffffffff610e2016565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b610cdf8282610bd9565b61061982610ceb6107a5565b61051d84604051806060016040528060248152602001611073602491396001600160a01b0388166000908152600160205260408120906104f66107a5565b610d3a60068263ffffffff610e6216565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b610d8260068263ffffffff610ee316565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b60006001600160a01b038216610e005760405162461bcd60e51b81526004018080602001828103825260228152602001806110516022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b6000610ae283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506109f1565b610e6c8282610db9565b15610ebe576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b610eed8282610db9565b610f285760405162461bcd60e51b81526004018080602001828103825260218152602001806110086021913960400191505060405180910390fd5b6001600160a01b0316600090815260209190915260409020805460ff1916905556fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f206164647265737345524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a723158202456fb3efffb510cf39af3243cdd6ab15585ab026529b07f4eafe3ded30cb7b964736f6c63430005110032", - "sourceMap": "218:219:7:-;;;288:147;8:9:-1;5:2;;;30:1;27;20:12;5:2;288:147:7;;;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;288:147:7;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;288:147:7;;420:4:-1;411:14;;;;288:147:7;;;;;411:14:-1;288:147:7;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;288:147:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;213:10;;261:11;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;288:147:7;;420:4:-1;411:14;;;;288:147:7;;;;;411:14:-1;288:147:7;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;288:147:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;288:147:7;;;;;;;504:12:18;;288:147:7;;-1:-1:-1;409:4:7;;-1:-1:-1;415:6:7;;288:147;;504:12:18;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;526:16:18;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;552:9:18;:20;;-1:-1:-1;;552:20:18;;;;;;;;;;;;-1:-1:-1;318:24:14;;-1:-1:-1;329:12:14;:10;:12::i;:::-;-1:-1:-1;;;;;318:10:14;:24;:::i;:::-;288:147:7;;;218:219;;788:96:12;867:10;788:96;;:::o;786:119:14:-;842:21;855:7;842:8;:12;;;;;;:21;;;;:::i;:::-;878:20;;-1:-1:-1;;;;;878:20:14;;;;;;;;786:119;:::o;260:175:13:-;337:18;341:4;347:7;-1:-1:-1;;;;;337:3:13;:18;:::i;:::-;336:19;328:63;;;;;-1:-1:-1;;;328:63:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;401:20:13;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;401:27:13;424:4;401:27;;;260:175::o;779:200::-;851:4;-1:-1:-1;;;;;875:21:13;;867:68;;;;-1:-1:-1;;;867:68:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;952:20:13;:11;:20;;;;;;;;;;;;;;;779:200::o;218:219:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;218:219:7;;;-1:-1:-1;218:219:7;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;", - "deployedSourceMap": "218:219:7:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;218:219:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:81:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;644:81:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2500:149:16;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2500:149:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1559:89;;;:::i;:::-;;;;;;;;;;;;;;;;3107:300;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3107:300:16;;;;;;;;;;;;;;;;;:::i;1472:81:18:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3802:207:16;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;3802:207:16;;;;;;;;:::i;502:140:19:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;502:140:19;;;;;;;;:::i;439:81:17:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;439:81:17;;:::i;:::-;;1706:108:16;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1706:108:16;-1:-1:-1;;;;;1706:108:16;;:::i;577:101:17:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;577:101:17;;;;;;;;:::i;838:85:18:-;;;:::i;607:90:14:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;607:90:14;-1:-1:-1;;;;;607:90:14;;:::i;703:77::-;;;:::i;4496:258:16:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;4496:258:16;;;;;;;;:::i;2017:155::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2017:155:16;;;;;;;;:::i;494:107:14:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;494:107:14;-1:-1:-1;;;;;494:107:14;;:::i;2230:132:16:-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;2230:132:16;;;;;;;;;;:::i;644:81:18:-;713:5;706:12;;;;;;;;-1:-1:-1;;706:12:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;681:13;;706:12;;713:5;;706:12;;713:5;706:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;644:81;:::o;2500:149:16:-;2566:4;2582:39;2591:12;:10;:12::i;:::-;2605:7;2614:6;2582:8;:39::i;:::-;-1:-1:-1;2638:4:16;2500:149;;;;:::o;1559:89::-;1629:12;;1559:89;:::o;3107:300::-;3196:4;3212:36;3222:6;3230:9;3241:6;3212:9;:36::i;:::-;3258:121;3267:6;3275:12;:10;:12::i;:::-;3289:89;3327:6;3289:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3289:19:16;;;;;;:11;:19;;;;;;3309:12;:10;:12::i;:::-;-1:-1:-1;;;;;3289:33:16;;;;;;;;;;;;-1:-1:-1;3289:33:16;;;:89;;:37;:89;:::i;:::-;3258:8;:121::i;:::-;-1:-1:-1;3396:4:16;3107:300;;;;;:::o;1472:81:18:-;1537:9;;;;1472:81;:::o;3802:207:16:-;3882:4;3898:83;3907:12;:10;:12::i;:::-;3921:7;3930:50;3969:10;3930:11;:25;3942:12;:10;:12::i;:::-;-1:-1:-1;;;;;3930:25:16;;;;;;;;;;;;;;;;;-1:-1:-1;3930:25:16;;;:34;;;;;;;;;;;:50;:38;:50;:::i;502:140:19:-;576:4;395:22:14;404:12;:10;:12::i;:::-;395:8;:22::i;:::-;387:83;;;;-1:-1:-1;;;387:83:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;592:22:19;598:7;607:6;592:5;:22::i;439:81:17:-;486:27;492:12;:10;:12::i;:::-;506:6;486:5;:27::i;:::-;439:81;:::o;1706:108:16:-;-1:-1:-1;;;;;1789:18:16;1763:7;1789:18;;;;;;;;;;;;1706:108::o;577:101:17:-;645:26;655:7;664:6;645:9;:26::i;:::-;577:101;;:::o;838:85:18:-;909:7;902:14;;;;;;;;-1:-1:-1;;902:14:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;877:13;;902:14;;909:7;;902:14;;909:7;902:14;;;;;;;;;;;;;;;;;;;;;;;;607:90:14;395:22;404:12;:10;:12::i;395:22::-;387:83;;;;-1:-1:-1;;;387:83:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;671:19;682:7;671:10;:19::i;703:77::-;746:27;760:12;:10;:12::i;:::-;746:13;:27::i;:::-;703:77::o;4496:258:16:-;4581:4;4597:129;4606:12;:10;:12::i;:::-;4620:7;4629:96;4668:15;4629:96;;;;;;;;;;;;;;;;;:11;:25;4641:12;:10;:12::i;:::-;-1:-1:-1;;;;;4629:25:16;;;;;;;;;;;;;;;;;-1:-1:-1;4629:25:16;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;2017:155::-;2086:4;2102:42;2112:12;:10;:12::i;:::-;2126:9;2137:6;2102:9;:42::i;494:107:14:-;550:4;573:21;:8;586:7;573:21;:12;:21;:::i;:::-;566:28;494:107;-1:-1:-1;;494:107:14:o;2230:132:16:-;-1:-1:-1;;;;;2328:18:16;;;2302:7;2328:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2230:132::o;788:96:12:-;867:10;788:96;:::o;7350:332:16:-;-1:-1:-1;;;;;7443:19:16;;7435:68;;;;-1:-1:-1;;;7435:68:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7521:21:16;;7513:68;;;;-1:-1:-1;;;7513:68:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7592:18:16;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7643:32;;;;;;;;;;;;;;;;;7350:332;;;:::o;5228:464::-;-1:-1:-1;;;;;5325:20:16;;5317:70;;;;-1:-1:-1;;;5317:70:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5405:23:16;;5397:71;;;;-1:-1:-1;;;5397:71:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5499;5521:6;5499:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5499:17:16;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;5479:17:16;;;:9;:17;;;;;;;;;;;:91;;;;5603:20;;;;;;;:32;;5628:6;5603:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;5580:20:16;;;:9;:20;;;;;;;;;;;;:55;;;;5650:35;;;;;;;5580:20;;5650:35;;;;;;;;;;;;;5228:464;;;:::o;1732:187:15:-;1818:7;1853:12;1845:6;;;;1837:29;;;;-1:-1:-1;;;1837:29:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1837:29:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1888:5:15;;;1732:187::o;834:176::-;892:7;923:5;;;946:6;;;;938:46;;;;;-1:-1:-1;;;938:46:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;1002:1;834:176;-1:-1:-1;;;834:176:15:o;5962:302:16:-;-1:-1:-1;;;;;6037:21:16;;6029:65;;;;;-1:-1:-1;;;6029:65:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;6120:12;;:24;;6137:6;6120:24;:16;:24;:::i;:::-;6105:12;:39;-1:-1:-1;;;;;6175:18:16;;:9;:18;;;;;;;;;;;:30;;6198:6;6175:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;6154:18:16;;:9;:18;;;;;;;;;;;:51;;;;6220:37;;;;;;;6154:18;;:9;;6220:37;;;;;;;;;;5962:302;;:::o;6583:342::-;-1:-1:-1;;;;;6658:21:16;;6650:67;;;;-1:-1:-1;;;6650:67:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6749:68;6772:6;6749:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6749:18:16;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;6728:18:16;;:9;:18;;;;;;;;;;:89;6842:12;;:24;;6859:6;6842:24;:16;:24;:::i;:::-;6827:12;:39;6881:37;;;;;;;;6907:1;;-1:-1:-1;;;;;6881:37:16;;;;;;;;;;;;6583:342;;:::o;7860:229::-;7931:22;7937:7;7946:6;7931:5;:22::i;:::-;7963:119;7972:7;7981:12;:10;:12::i;:::-;7995:86;8034:6;7995:86;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7995:20:16;;;;;;:11;:20;;;;;;8016:12;:10;:12::i;786:119:14:-;842:21;:8;855:7;842:21;:12;:21;:::i;:::-;878:20;;-1:-1:-1;;;;;878:20:14;;;;;;;;786:119;:::o;911:127::-;970:24;:8;986:7;970:24;:15;:24;:::i;:::-;1009:22;;-1:-1:-1;;;;;1009:22:14;;;;;;;;911:127;:::o;779:200:13:-;851:4;-1:-1:-1;;;;;875:21:13;;867:68;;;;-1:-1:-1;;;867:68:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;952:20:13;:11;:20;;;;;;;;;;;;;;;779:200::o;1274:134:15:-;1332:7;1358:43;1362:1;1365;1358:43;;;;;;;;;;;;;;;;;:3;:43::i;260:175:13:-;337:18;341:4;347:7;337:3;:18::i;:::-;336:19;328:63;;;;;-1:-1:-1;;;328:63:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;401:20:13;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;401:27:13;424:4;401:27;;;260:175::o;510:180::-;589:18;593:4;599:7;589:3;:18::i;:::-;581:64;;;;-1:-1:-1;;;581:64:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;655:20:13;678:5;655:20;;;;;;;;;;;:28;;-1:-1:-1;;655:28:13;;;510:180::o", - "source": "pragma solidity 0.5.17;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol\";\n\ncontract MyERC20 is ERC20Burnable, ERC20Detailed, ERC20Mintable {\n constructor(\n string memory name,\n string memory symbol,\n uint8 decimals\n ) public ERC20Detailed(name, symbol, decimals) {}\n}", - "sourcePath": "/Users/yuriy/pro5/ethhmy-bridge.contract/contracts/lib/MyERC20.sol", - "ast": { - "absolutePath": "/Users/yuriy/pro5/ethhmy-bridge.contract/contracts/lib/MyERC20.sol", - "exportedSymbols": { - "MyERC20": [1250] - }, - "id": 1251, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1225, - "literals": ["solidity", "0.5", ".17"], - "nodeType": "PragmaDirective", - "src": "0:23:7" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol", - "id": 1226, - "nodeType": "ImportDirective", - "scope": 1251, - "sourceUnit": 2942, - "src": "25:63:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol", - "id": 1227, - "nodeType": "ImportDirective", - "scope": 1251, - "sourceUnit": 2884, - "src": "89:63:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol", - "id": 1228, - "nodeType": "ImportDirective", - "scope": 1251, - "sourceUnit": 2970, - "src": "153:63:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1229, - "name": "ERC20Burnable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2883, - "src": "238:13:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Burnable_$2883", - "typeString": "contract ERC20Burnable" - } - }, - "id": 1230, - "nodeType": "InheritanceSpecifier", - "src": "238:13:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1231, - "name": "ERC20Detailed", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2941, - "src": "253:13:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Detailed_$2941", - "typeString": "contract ERC20Detailed" - } - }, - "id": 1232, - "nodeType": "InheritanceSpecifier", - "src": "253:13:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1233, - "name": "ERC20Mintable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2969, - "src": "268:13:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Mintable_$2969", - "typeString": "contract ERC20Mintable" - } - }, - "id": 1234, - "nodeType": "InheritanceSpecifier", - "src": "268:13:7" - } - ], - "contractDependencies": [2069, 2257, 2849, 2883, 2941, 2969, 3038], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1250, - "linearizedBaseContracts": [1250, 2969, 2257, 2941, 2883, 2849, 3038, 2069], - "name": "MyERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1248, - "nodeType": "Block", - "src": "433:2:7", - "statements": [] - }, - "documentation": null, - "id": 1249, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 1243, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1236, - "src": "409:4:7", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 1244, - "name": "symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1238, - "src": "415:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 1245, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1240, - "src": "423:8:7", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 1246, - "modifierName": { - "argumentTypes": null, - "id": 1242, - "name": "ERC20Detailed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2941, - "src": "395:13:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20Detailed_$2941_$", - "typeString": "type(contract ERC20Detailed)" - } - }, - "nodeType": "ModifierInvocation", - "src": "395:37:7" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1241, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1236, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 1249, - "src": "309:18:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 1235, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "309:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1238, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 1249, - "src": "337:20:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 1237, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "337:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1240, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 1249, - "src": "367:14:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1239, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "367:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "299:88:7" - }, - "returnParameters": { - "id": 1247, - "nodeType": "ParameterList", - "parameters": [], - "src": "433:0:7" - }, - "scope": 1250, - "src": "288:147:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1251, - "src": "218:219:7" - } - ], - "src": "0:437:7" - }, - "legacyAST": { - "absolutePath": "/Users/yuriy/pro5/ethhmy-bridge.contract/contracts/lib/MyERC20.sol", - "exportedSymbols": { - "MyERC20": [1250] - }, - "id": 1251, - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 1225, - "literals": ["solidity", "0.5", ".17"], - "nodeType": "PragmaDirective", - "src": "0:23:7" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol", - "id": 1226, - "nodeType": "ImportDirective", - "scope": 1251, - "sourceUnit": 2942, - "src": "25:63:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20Burnable.sol", - "id": 1227, - "nodeType": "ImportDirective", - "scope": 1251, - "sourceUnit": 2884, - "src": "89:63:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol", - "file": "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol", - "id": 1228, - "nodeType": "ImportDirective", - "scope": 1251, - "sourceUnit": 2970, - "src": "153:63:7", - "symbolAliases": [], - "unitAlias": "" - }, - { - "baseContracts": [ - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1229, - "name": "ERC20Burnable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2883, - "src": "238:13:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Burnable_$2883", - "typeString": "contract ERC20Burnable" - } - }, - "id": 1230, - "nodeType": "InheritanceSpecifier", - "src": "238:13:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1231, - "name": "ERC20Detailed", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2941, - "src": "253:13:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Detailed_$2941", - "typeString": "contract ERC20Detailed" - } - }, - "id": 1232, - "nodeType": "InheritanceSpecifier", - "src": "253:13:7" - }, - { - "arguments": null, - "baseName": { - "contractScope": null, - "id": 1233, - "name": "ERC20Mintable", - "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 2969, - "src": "268:13:7", - "typeDescriptions": { - "typeIdentifier": "t_contract$_ERC20Mintable_$2969", - "typeString": "contract ERC20Mintable" - } - }, - "id": 1234, - "nodeType": "InheritanceSpecifier", - "src": "268:13:7" - } - ], - "contractDependencies": [2069, 2257, 2849, 2883, 2941, 2969, 3038], - "contractKind": "contract", - "documentation": null, - "fullyImplemented": true, - "id": 1250, - "linearizedBaseContracts": [1250, 2969, 2257, 2941, 2883, 2849, 3038, 2069], - "name": "MyERC20", - "nodeType": "ContractDefinition", - "nodes": [ - { - "body": { - "id": 1248, - "nodeType": "Block", - "src": "433:2:7", - "statements": [] - }, - "documentation": null, - "id": 1249, - "implemented": true, - "kind": "constructor", - "modifiers": [ - { - "arguments": [ - { - "argumentTypes": null, - "id": 1243, - "name": "name", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1236, - "src": "409:4:7", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 1244, - "name": "symbol", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1238, - "src": "415:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string memory" - } - }, - { - "argumentTypes": null, - "id": 1245, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1240, - "src": "423:8:7", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - } - ], - "id": 1246, - "modifierName": { - "argumentTypes": null, - "id": 1242, - "name": "ERC20Detailed", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 2941, - "src": "395:13:7", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_ERC20Detailed_$2941_$", - "typeString": "type(contract ERC20Detailed)" - } - }, - "nodeType": "ModifierInvocation", - "src": "395:37:7" - } - ], - "name": "", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 1241, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 1236, - "name": "name", - "nodeType": "VariableDeclaration", - "scope": 1249, - "src": "309:18:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 1235, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "309:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1238, - "name": "symbol", - "nodeType": "VariableDeclaration", - "scope": 1249, - "src": "337:20:7", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_string_memory_ptr", - "typeString": "string" - }, - "typeName": { - "id": 1237, - "name": "string", - "nodeType": "ElementaryTypeName", - "src": "337:6:7", - "typeDescriptions": { - "typeIdentifier": "t_string_storage_ptr", - "typeString": "string" - } - }, - "value": null, - "visibility": "internal" - }, - { - "constant": false, - "id": 1240, - "name": "decimals", - "nodeType": "VariableDeclaration", - "scope": 1249, - "src": "367:14:7", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 1239, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "367:5:7", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "value": null, - "visibility": "internal" - } - ], - "src": "299:88:7" - }, - "returnParameters": { - "id": 1247, - "nodeType": "ParameterList", - "parameters": [], - "src": "433:0:7" - }, - "scope": 1250, - "src": "288:147:7", - "stateMutability": "nonpayable", - "superFunction": null, - "visibility": "public" - } - ], - "scope": 1251, - "src": "218:219:7" - } - ], - "src": "0:437:7" - }, - "compiler": { - "name": "solc", - "version": "0.5.17+commit.d19bba13.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "3.2.0", - "updatedAt": "2020-09-15T21:52:29.114Z", - "devdoc": { - "methods": { - "allowance(address,address)": { - "details": "See {IERC20-allowance}." - }, - "approve(address,uint256)": { - "details": "See {IERC20-approve}. * Requirements: * - `spender` cannot be the zero address." - }, - "balanceOf(address)": { - "details": "See {IERC20-balanceOf}." - }, - "burn(uint256)": { - "details": "Destroys `amount` tokens from the caller. * See {ERC20-_burn}." - }, - "burnFrom(address,uint256)": { - "details": "See {ERC20-_burnFrom}." - }, - "decimals()": { - "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5,05` (`505 / 10 ** 2`). * Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. * NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}." - }, - "decreaseAllowance(address,uint256)": { - "details": "Atomically decreases the allowance granted to `spender` by the caller. * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. * Emits an {Approval} event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`." - }, - "increaseAllowance(address,uint256)": { - "details": "Atomically increases the allowance granted to `spender` by the caller. * This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. * Emits an {Approval} event indicating the updated allowance. * Requirements: * - `spender` cannot be the zero address." - }, - "mint(address,uint256)": { - "details": "See {ERC20-_mint}. * Requirements: * - the caller must have the {MinterRole}." - }, - "name()": { - "details": "Returns the name of the token." - }, - "symbol()": { - "details": "Returns the symbol of the token, usually a shorter version of the name." - }, - "totalSupply()": { - "details": "See {IERC20-totalSupply}." - }, - "transfer(address,uint256)": { - "details": "See {IERC20-transfer}. * Requirements: * - `recipient` cannot be the zero address. - the caller must have a balance of at least `amount`." - }, - "transferFrom(address,address,uint256)": { - "details": "See {IERC20-transferFrom}. * Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}; * Requirements: - `sender` and `recipient` cannot be the zero address. - `sender` must have a balance of at least `amount`. - the caller must have allowance for `sender`'s tokens of at least `amount`." - } - } - }, - "userdoc": { - "methods": {} - } -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/SwapPair.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/SwapPair.ts deleted file mode 100644 index 9a7a0f6..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/SwapPair.ts +++ /dev/null @@ -1,104 +0,0 @@ -import { Asset, NativeToken, Token } from './trade'; -import { getSymbolsFromPair, Pair } from '../../../blockchain-bridge/scrt/swap'; -import { SwapTokenMap } from './SwapToken'; -import { CosmWasmClient } from 'secretjs'; - -export class SwapPair { - pair_identifier: string; - asset_infos: Asset[]; - contract_addr: string; - liquidity_token: string; - static id_delimiter = '/'; - - constructor( - symbol0: string, - asset0: NativeToken | Token, - symbol1: string, - asset1: NativeToken | Token, - contract_addr: string, - liquidity_token: string, - pair_identifier: string, - ) { - this.asset_infos = []; - this.asset_infos.push(new Asset(symbol0, asset0)); - this.asset_infos.push(new Asset(symbol1, asset1)); - this.contract_addr = contract_addr; - this.liquidity_token = liquidity_token; - this.pair_identifier = pair_identifier; - } - - lpTokenSymbol(): string { - return `LP-${this.identifier()}`; - } - - identifier(): string { - return this.pair_identifier; - } - - assetIds(): string[] { - return this.pair_identifier.split(SwapPair.id_delimiter); - } - - isSymbolInPair(symbol: string): boolean { - return symbol.toUpperCase() === this.asset_infos[0].symbol || symbol.toUpperCase() === this.asset_infos[1].symbol; - } - - humanizedSymbol(): string { - return `${this.asset_infos[0].symbol}-${this.asset_infos[1].symbol}`; - } - - isIdInPair(id: string): boolean { - const pairIdentifiers = this.pair_identifier.split(SwapPair.id_delimiter); - - for (const pId of pairIdentifiers) { - if (pId.toLowerCase() === id) { - return true; - } - } - - return false; - } - - static fromPair(pair: Pair, tokenMap: SwapTokenMap) { - const identifiers = getSymbolsFromPair(pair); - - const symbol0 = tokenMap.get(identifiers[0]).symbol; - const symbol1 = tokenMap.get(identifiers[1]).symbol; - - const pair_identifier = pairIdFromTokenIds(identifiers[0], identifiers[1]); - - //const symbol0 = asset0.type === 'native_token' ? asset0.native_token.denom : asset0.token.contract_addr; - return new SwapPair( - symbol0, - pair.asset_infos[0], - symbol1, - pair.asset_infos[1], - pair.contract_addr, - pair.liquidity_token, - pair_identifier, - ); - } - - private static code_hash: string; - static getPairCodeHash(pair_address: string, secretjs: CosmWasmClient): Promise { - // TODO fix this if we ever have a factory with multiple pair_code_id - // For now this is the best way to avoid a lot of secretjs requests - return new Promise(async (accept, reject) => { - try { - if (!SwapPair.code_hash) { - SwapPair.code_hash = await secretjs.getCodeHashByContractAddr(pair_address); - } - accept(SwapPair.code_hash); - } catch (e) { - reject(e); - } - }); - } -} - -export const pairIdFromTokenIds = (id0: string, id1: string): string => { - return id0.localeCompare(id1) === -1 - ? `${id0}${SwapPair.id_delimiter}${id1}` - : `${id1}${SwapPair.id_delimiter}${id0}`; -}; -export type PairMap = Map; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/SwapToken.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/SwapToken.ts deleted file mode 100644 index feec85a..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/SwapToken.ts +++ /dev/null @@ -1,96 +0,0 @@ -// import { ITokenInfo } from "../../../stores/interfaces"; -// import { -// Snip20TokenInfo, -// validateBech32Address, -// } from "../../../blockchain-bridge"; -// import { tokenImages } from "../../../components/Earn/EarnRow"; -// import { sleep } from "utils"; - -export type SwapTokenMap = Map; - -export type SwapToken = { - symbol: string; - logo?: string; - identifier?: string; - decimals?: number; - address?: string; - name?: string; - balance?: string; - price?: number; -}; - -// export const getPricesForJSONTokens = async () => { -// for (let i = 0; i < 4; i++) { -// if (globalThis.config['PRICE_DATA']['SEFI/USDT'].price) { -// break -// } -// await sleep(1000) -// } -// return { -// 'secret15l9cqgz5uezgydrglaak5ahfac69kmx2qpd6xt': globalThis.config['PRICE_DATA']['SEFI/USDT'].price, -// 'uscrt': globalThis.config['PRICE_DATA']['SCRT/USD'].price, -// 'secret1yxcexylwyxlq58umhgsjgstgcg2a0ytfy4d9lt': globalThis.config['PRICE_DATA']['BUTT/USD'].price, -// 'secret14mzwd0ps5q277l20ly2q3aetqe3ev4m4260gf4': globalThis.config['PRICE_DATA']['ATOM/USD'].price, -// 'secret1zwwealwm0pcl9cul4nt6f38dsy6vzplw8lp3qg': globalThis.config['PRICE_DATA']['OSMO/USD'].price, -// 'secret1k8cge73c3nh32d4u0dsd5dgtmk63shtlrfscj5': globalThis.config['PRICE_DATA']['DVPN/USD'].price, -// 'secret19ungtd2c7srftqdwgq0dspwvrw63dhu79qxv88': globalThis.config['PRICE_DATA']['XMR/USD'].price, -// } -// } - -// export const SwapTokenFromSnip20Params = (address: string, token: Snip20TokenInfo) => { - -// const customTokenInfo: SwapToken = { -// symbol: token.symbol, -// address: address, -// decimals: token.decimals, -// logo: '/static/unknown.png', -// identifier: address, -// name: token.name, -// }; - -// return customTokenInfo; -// }; - -// export const TokenMapfromITokenInfo = async (tokens: ITokenInfo[]): Promise => { -// let swapTokens: SwapTokenMap = new Map(); - -// const tokenPrices = await getPricesForJSONTokens() - -// for (const t of tokens) { -// const secretAddress = validateBech32Address(t.dst_address) -// ? t.dst_address -// : validateBech32Address(t.src_address) -// ? t.src_address -// : ''; -// let symbol; -// if (t.display_props.symbol === 'SCRT') { -// symbol = 'SCRT'; -// } else if (t.display_props.symbol.toLowerCase() === 'sscrt') { -// symbol = 'sSCRT'; -// } else if (t.display_props.symbol.toLowerCase() === 'sefi') { -// symbol = 'SEFI'; -// } else if (t.display_props.symbol.toLowerCase() === 'sienna') { -// symbol = t.display_props.symbol.toUpperCase(); -// } else if (t.display_props.symbol.toLowerCase() === 'alter') { -// symbol = t.display_props.symbol.toUpperCase(); -// } else if (t.display_props.symbol.toLowerCase() === 'shd') { -// symbol = t.display_props.symbol.toUpperCase(); -// } else { -// symbol = 's' + t.display_props.symbol; -// } - -// const swapToken: SwapToken = { -// identifier: secretAddress, -// symbol: symbol, -// logo: t.display_props.symbol.startsWith("lp-") ? t.display_props.image : tokenImages[t.display_props.symbol.toUpperCase()], -// decimals: Number(t.decimals), -// name: t.name, -// address: secretAddress, -// price: secretAddress === 'secret15l9cqgz5uezgydrglaak5ahfac69kmx2qpd6xt' ? tokenPrices[secretAddress] : (Number(t.price) ? Number(t.price) : 0), -// }; - -// swapTokens.set(swapToken.identifier, swapToken); -// } - -// return swapTokens; -// }; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/trade.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/trade.ts deleted file mode 100644 index ca3ebff..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/TokenModalTypes/types/trade.ts +++ /dev/null @@ -1,148 +0,0 @@ -import { SwapToken } from "./SwapToken"; - -export enum TradeType { - EXACT_INPUT, - EXACT_OUTPUT, -} - -export enum Rounding { - ROUND_DOWN, - ROUND_HALF_UP, - ROUND_UP, -} - -export interface TokenInfo { - symbol: string; - address?: string; - token_code_hash?: string; -} - -export interface Token { - type: "token"; - token: { - contract_addr: string; - token_code_hash: string; - viewing_key: string; - }; -} - -export interface NativeToken { - type: "native_token"; - native_token: { - denom: string; - }; -} - -export class Currency { - public readonly amount: string; - public readonly token: Asset; - - isEqualToIdentifier(info: string) { - return this.token.info.type === "native_token" - ? this.token.info.native_token.denom === info - : this.token.info.token.contract_addr === info; - } - - constructor(token: Asset, amount: string) { - this.amount = amount; - this.token = token; - } -} - -export class Asset { - public info: Token | NativeToken; - public symbol: string; - - public isNative(): this is NativeToken { - return Asset._isNative(this.info); - } - - private static _isNative(info: any): info is NativeToken { - return "native_token" in info; - } - - static fromSwapToken(token: SwapToken): Asset { - const tokenInfo: TokenInfo = { - symbol: token.symbol, - address: token?.address, - }; - - return Asset.fromTokenInfo(tokenInfo); - } - - static fromTokenInfo(token: TokenInfo): Asset { - if (token.address) { - return new Asset(token.symbol, { - type: "token", - token: { - contract_addr: token.address, - token_code_hash: token.token_code_hash ?? "", - viewing_key: "", - }, - }); - } else { - return new Asset(token.symbol, { - type: "native_token", - native_token: { denom: `u${token.symbol.toLowerCase()}` }, - }); - } - } - - constructor(symbol: string, info: Token | NativeToken) { - this.info = info; - this.symbol = symbol; - } -} - -export class Trade { - /** - * The route of the trade, i.e. which pairs the trade goes through. - */ - //public readonly route: Route - /** - * The type of the trade, either exact in or exact out. - */ - public readonly tradeType: TradeType; - /** - * The input amount for the trade assuming no slippage. - */ - public readonly inputAmount: Currency; - /** - * The output amount for the trade assuming no slippage. - */ - public readonly outputAmount: Currency; - /** - * The price expressed in terms of output amount/input amount. - */ - //public readonly executionPrice: number - /** - * The mid price after the trade executes assuming no slippage. - */ - public readonly price: number; - - //public readonly pair: string - - getExactAmount(): string { - return this.tradeType === TradeType.EXACT_OUTPUT - ? this.outputAmount.amount - : this.inputAmount.amount; - } - - getEstimatedAmount(): string { - return this.tradeType === TradeType.EXACT_OUTPUT - ? this.inputAmount.amount - : this.outputAmount.amount; - } - - constructor( - inputAmount: Currency, - outputAmount: Currency, - tradeType: TradeType - ) { - this.inputAmount = inputAmount; - this.outputAmount = outputAmount; - this.tradeType = tradeType; - this.price = Number(outputAmount.amount) / Number(inputAmount.amount); - //this.executionPrice = Number(outputAmount.amount) / Number(inputAmount.amount); - } -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/asyncSender.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/asyncSender.ts deleted file mode 100644 index 527ad7e..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/asyncSender.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { Coin, SecretNetworkClient } from "secretjs"; -import retry from "async-await-retry"; -import { sleep } from "../utils"; -import { extractError } from "./utils"; -import { HandleMsg } from "@shadeprotocol/shadejs"; -class CustomError extends Error { - public txHash: string; - - constructor(message?: string) { - super(message); - this.txHash = ""; - } -} - -type StdFee = { - amount: readonly Coin[]; - gas: number; -}; - -export class AsyncSender extends SecretNetworkClient { - asyncExecute = async ( - contractAddress: string, - senderAddress: string, - handleMsg: HandleMsg, - memo?: string, - transferAmount?: readonly Coin[], - fee?: StdFee, - ) => { - let tx; - try { - tx = await this.tx.compute.executeContract( - { - contract_address: contractAddress, - msg: handleMsg, - sender: senderAddress, - sent_funds: [{ - denom: "uscrt", - amount: transferAmount || "", - } as Coin], - }, - { - memo, - gasLimit: fee?.gas || 2000000, - feeDenom: fee?.amount[0].denom || "uscrt", - feeGranter: senderAddress, - }, - ); - } catch (e) { - console.error(`failed to broadcast tx: ${e}`); - throw new CustomError("Failed to broadcast transaction"); - } - - try { - // optimistic - await sleep(3000); - const res = await retry( - async () => { - const result = await this.query.getTx(tx.transactionHash); - if (!result) { - throw new Error("Transaction not found"); - } - return result; - }, - undefined, - { retriesMax: 5, interval: 6000 }, - ); - - if (res?.code) { - const error = extractError(res); - throw new CustomError(error); - } - - return { - ...res, - transactionHash: tx.transactionHash, - }; - } catch (e) { - console.error(`failed to broadcast tx: ${e}`); - if ((e as Error).toString().includes("not found (HTTP 404)")) { - e = new CustomError( - `Timed out waiting for transaction. Your transaction is pending and may be processed soon. Check an explorer to confirm.`, - ); - } - // error.txHash = tx.transactionHash; - throw e; - } - }; -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/index.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/index.ts deleted file mode 100644 index 0f37e14..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -// export * from './bridge_rewards'; -export * from "./utils"; -// export * from "./snip20"; -export * from "./keplr"; -// export * from "./sefi"; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/keplr.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/keplr.ts deleted file mode 100644 index d05f8b4..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/keplr.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { sleep } from "../../utils"; -import { Keplr } from "@keplr-wallet/types"; -// todo: clean this shit up -// import { ERROR_WRONG_VIEWING_KEY } from '../../pages/Swap/utils'; - -export const ERROR_WRONG_VIEWING_KEY = "Viewing Key Error"; - -export const getViewingKey = async (params: { - keplr: Keplr; - chainId: string; - address: string; - currentBalance?: string; -}) => { - const { keplr, chainId, address, currentBalance } = params; - - if ( - typeof currentBalance === "string" && - currentBalance.includes(ERROR_WRONG_VIEWING_KEY) - ) { - // In case this tx was set_viewing_key in order to correct the wrong viewing key error - // Allow Keplr time to locally save the new viewing key - await sleep(1000); - } - - let viewingKey: string | undefined = undefined; - - let tries = 0; - while (true) { - tries += 1; - try { - viewingKey = await keplr.getSecret20ViewingKey(chainId, address); - } catch (error) {} - if (viewingKey || tries === 3) { - break; - } - await sleep(100); - } - - return viewingKey; -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/GetContractCodeHash.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/GetContractCodeHash.ts deleted file mode 100644 index 566ceee..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/GetContractCodeHash.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { SecretNetworkClient } from "secretjs"; - -export const GetContractCodeHash = async ({ - secretjs, - address, -}: { - secretjs: SecretNetworkClient; - address: string; -}): Promise => { - const response = await secretjs.query.compute.codeHashByContractAddress({ - contract_address: address, - }); - return response.code_hash; -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/GetSnip20Params.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/GetSnip20Params.ts deleted file mode 100644 index f5195d6..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/GetSnip20Params.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { SecretNetworkClient } from "secretjs"; -import { Snip20TokenInfo } from "./types/Snip20TokenInfo"; - -export const GetSnip20Params = async (params: { - secretjs: SecretNetworkClient; - address: string; - codeHash: string; -}): Promise => { - const { secretjs, address, codeHash } = params; - - try { - const response = await secretjs.query.compute.queryContract({ - contract_address: address, - code_hash: codeHash, - query: { - token_info: {}, - }, - }); - - const tokenInfo = response as { token_info: Snip20TokenInfo }; - - return { - name: tokenInfo.token_info.name, - symbol: tokenInfo.token_info.symbol, - decimals: tokenInfo.token_info.decimals, - total_supply: tokenInfo.token_info.total_supply, - }; - } catch (e) { - console.error("Failed to get token info", e); - throw Error("Failed to get info"); - } -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20GetBalance.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20GetBalance.ts deleted file mode 100644 index f727367..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20GetBalance.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { SecretNetworkClient } from "secretjs"; -import { sleep } from "../../../utils"; // Ensure correct path to import -import { GetContractCodeHash } from "./GetContractCodeHash"; // Ensure correct path to import -export const unlockToken = "Unlock"; - -interface BalanceQueryResponse { - balance?: { - amount: string; - }; - viewing_key_error?: string; -} - -export const Snip20GetBalance = async (params: { - secretjs: SecretNetworkClient; - token: string; - address: string; - key: string; -}): Promise => { - const { secretjs, address, token, key } = params; - - const codeHash = await GetContractCodeHash({ secretjs, address: token }); - if (!codeHash) { - throw new Error("Code hash not found for the specified address."); - } - - let balanceResponse: BalanceQueryResponse | undefined; - for (let i = 0; i < 4; i++) { - try { - const response = await secretjs.query.compute.queryContract({ - contract_address: token, - code_hash: codeHash, // Use the fetched code hash - query: { - balance: { - address, - key, - }, - }, - }); - balanceResponse = response as BalanceQueryResponse; - break; - } catch (err) { - const e = err as Error; - console.error(e); - if ( - e.message !== - "Failed to decrypt the following error message: rpc error: code = Unknown desc = contract: not found (HTTP 500)." - ) { - return unlockToken; - } - await sleep(1000); - } - } - - if (!balanceResponse) { - throw new Error("Failed to get balance response after several attempts."); - } - - if (balanceResponse.viewing_key_error) { - return "Fix Unlock"; - } - - if (balanceResponse.balance && Number(balanceResponse.balance.amount) === 0) { - return "0"; - } - - return balanceResponse.balance - ? balanceResponse.balance.amount - : "Unknown Balance"; -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20Send.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20Send.ts deleted file mode 100644 index 43dbcaa..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20Send.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { SecretNetworkClient, TxResponse } from "secretjs"; - -export const Snip20Send = async (params: { - secretjs: SecretNetworkClient; - address: string; - amount: string; - msg: string; - recipient: string; - fee?: { amount: [{ amount: string; denom: string }]; gas: string }; -}): Promise => { - const { secretjs, address, amount, msg, recipient, fee } = params; - - const executeMsg = { - send: { - amount, - recipient, - msg, - }, - }; - - const tx = await secretjs.tx.compute.executeContract( - { - sender: address, - contract_address: recipient, - code_hash: "", // Provide the correct code hash here - msg: executeMsg, - sent_funds: [], - }, - { - gasLimit: fee?.gas ? parseInt(fee.gas) : 200000, - gasPriceInFeeDenom: fee?.amount?.[0]?.amount - ? parseFloat(fee.amount[0].amount) - : 0.25, // Convert gas price to number - feeDenom: fee?.amount?.[0]?.denom || "uscrt", - }, - ); - - return tx; -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20SendToBridge.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20SendToBridge.ts deleted file mode 100644 index 342b947..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20SendToBridge.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { SecretNetworkClient, TxResponse } from "secretjs"; -import { Snip20Send } from "./Snip20Send"; // Ensure correct path to import Snip20Send -import { GetContractCodeHash } from "./GetContractCodeHash"; // Ensure correct path to import -import useGlobalConfigStore from "@/store/useGlobalConfigStore"; - -export const Snip20SendToBridge = async (params: { - secretjs: SecretNetworkClient; - address: string; - amount: string; - msg: string; - recipient?: string; - fee?: { amount: [{ amount: string; denom: string }]; gas: string }; -}): Promise => { - const { SCRT_SWAP_CONTRACT } = useGlobalConfigStore().config; - const recipientAddress = params.recipient || SCRT_SWAP_CONTRACT; - - // Fetch the code hash of the recipient contract - const codeHash = await GetContractCodeHash({ - secretjs: params.secretjs, - address: recipientAddress, - }); - if (!codeHash) { - throw new Error("Code hash not found for the specified recipient address."); - } - - const tx: TxResponse = await Snip20Send({ - ...params, - recipient: recipientAddress, - }); - - // Parse the transaction logs to find the tx_id - let tx_id: string | undefined; - if (tx.arrayLog) { - const txIdKvp = tx.arrayLog.find((kv) => kv.key === "tx_id"); - if (txIdKvp) { - tx_id = txIdKvp.value; - } - } - - if (!tx_id && tx.jsonLog) { - for (const log of tx.jsonLog) { - const txIdKvp = log.events.find((event) => event.type === "wasm") - ?.attributes.find((kv) => kv.key === "tx_id"); - if (txIdKvp) { - tx_id = txIdKvp.value; - break; - } - } - } - - if (!tx_id) { - throw new Error("Failed to get tx_id"); - } - - return tx_id; -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20SwapHash b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20SwapHash deleted file mode 100644 index 0a4750c..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/Snip20SwapHash +++ /dev/null @@ -1,5 +0,0 @@ -export const Snip20SwapHash = ( - params: { tx_id: string; address: string }, -): string => { - return `${params.tx_id}|${params.address}`; -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/index.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/index.ts deleted file mode 100644 index 73197a6..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from "./GetContractCodeHash"; -export * from "./GetSnip20Params"; -export * from "./types/Snip20TokenInfo"; -export * from "./Snip20Send"; -export * from "./Snip20GetBalance"; -export * from "./Snip20SendToBridge"; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/types/Snip20TokenInfo.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/types/Snip20TokenInfo.ts deleted file mode 100644 index 7ddb380..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/snip20/types/Snip20TokenInfo.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface Snip20TokenInfo { - name: string; - symbol: string; - decimals: number; - total_supply?: string; -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/swap/swap.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/swap/swap.ts deleted file mode 100644 index c96d35c..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/swap/swap.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { MsgExecuteContract, SecretNetworkClient, Wallet } from "secretjs"; -import BigNumber from "bignumber.js"; -import { - Keplr, - OfflineAminoSigner, - OfflineDirectSigner, - Window, -} from "@keplr-wallet/types"; -import { getBestRoute } from "../../../SwapFunctions/getBestRoute"; -import { getHops } from "../../../SwapFunctions/getHops"; -import { executeRouterSwap } from "../../../executeRouterSwap"; - -// Keplr Wallet Integration -const connectKeplr = async () => { - await (window as Window).keplr?.enable("secret-4"); - const offlineSigner = (window as Window).getOfflineSigner?.("secret-4"); - const accounts = await offlineSigner?.getAccounts(); - return { - address: accounts?.[0].address, - signer: offlineSigner, - }; -}; - -const createClient = async ( - signer: OfflineAminoSigner & OfflineDirectSigner -) => { - const accounts = await signer.getAccounts(); - const client = new SecretNetworkClient({ - url: "https://grpc-web.secret-4.api.trivium.network:9091", - wallet: signer, - walletAddress: accounts[0].address, - chainId: "secret-4", - }); - return client; -}; - -// (async () => { -// const keplrConnection = await connectKeplr(); -// if (!keplrConnection.signer) { -// console.error("No signer found"); -// return; -// } -// const secretjs = await createClient(keplrConnection.signer); - -// // Define the parameters for the swap -// const fromToken = "secret1..."; -// const toToken = "secret2..."; -// const fromAmount = "1000000"; // Example amount -// const expectedReturn = "990000"; // Example expected return - -// const bestRouteData = getBestRoute({ -// fromInput: 1, -// toInput: 1, -// cachedGasFeesUnfilledCoin: [0.12], -// isToEstimated: true, -// routes: [["a", "b"]], -// tokens: { -// a: { address: "secret1...", code_hash: "..." }, -// b: { address: "secret2...", code_hash: "..." }, -// }, -// pairs: new Map([["a:b", { contract_addr: "secret1...", asset_infos: [] }]]), -// balances: { a: "1000000", b: "1000000" }, -// }); - -// if (bestRouteData.bestRoute) { -// const hops = await getHops( -// bestRouteData.bestRoute, -// bestRouteData.pairs, -// secretjs, -// ); - -// await executeRouterSwap( -// keplrConnection.signer, -// keplrConnection.address, -// fromToken, -// fromAmount, -// hops, -// expectedReturn, -// bestRouteData.bestRoute, -// ); -// } else { -// console.error("No valid route found"); -// } -// })(); diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils.ts deleted file mode 100644 index 3e66f3f..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { decode } from "bech32"; -import { GAS_FOR_BASE_SWAP_ROUTE } from "@/utils/secretjs/SecretSwapSite/utils/gasPrices"; -import { Token } from "@/types"; -import { Coin, TxResponse } from "secretjs"; -import { useTokenStore } from "@/store/tokenStore"; - -const HRP = "secret"; -export const extractError = (result: TxResponse): string => { - // Check for slippage error in arrayLog - console.error(JSON.stringify(result, null, 2)); - if (result?.arrayLog) { - for (const log of result.arrayLog) { - if (log.key === "Operation fell short of expected_return") { - return "Swap fell short of expected return (slippage error)"; - } - } - } - - // Fallback to jsonLog for any other logs - if (result?.jsonLog) { - return JSON.stringify(result.jsonLog); - } - - console.error(result); - return `Unknown error`; -}; - -export * from "./utils/extractValueFromLogs"; - -// export const swapContractAddress = (network: NETWORKS): string => { -// switch (network) { -// case NETWORKS.ETH: -// return globalThis.config.SCRT_SWAP_CONTRACT; -// case NETWORKS.BSC: -// return globalThis.config.BSC_SCRT_SWAP_CONTRACT; -// case NETWORKS.PLSM: -// return globalThis.config.PLSM_SWAP_CONTRACT; -// } -// }; - -export const getScrtAddress = (address: string): string => { - try { - const decoded = decode(address, 46); - return decoded.prefix === HRP ? address : ""; - } catch { - return ""; - } -}; - -export const validateBech32Address = (address: string): boolean => { - return getScrtAddress(address) !== ""; -}; - -type StdFee = { - amount: readonly Coin[]; - gas: number; -}; -const gasPriceUscrt = 0.25; -export function getFeeForExecute(gas: number): StdFee { - return { - amount: [ - { - amount: String(Math.floor(gas * gasPriceUscrt) + 1), - denom: "uscrt", - }, - ], - gas: gas, - }; -} - -export function getFeeForExecuteUSD(numHops: number): number { - const getTokenBySymbol = (symbol: string): Token | null => { - return useTokenStore.getState().getTokenBySymbol(symbol); - }; - // if (numHops === 1) { - // return GAS_FOR_SWAP_DIRECT; - // } else { - // return numHops * GAS_FOR_BASE_SWAP_ROUTE; - // } - const gas = numHops * GAS_FOR_BASE_SWAP_ROUTE; - - return ( - ((Number(getTokenBySymbol("sSCRT")?.usdPrice) * gas) / 1_000_000) * - gasPriceUscrt - ); -} - -// Cache fees by numHops so we don't have to recompute as often -export function cacheFeesForExecuteUSD(): number[] { - return [ - 0, - getFeeForExecuteUSD(1), - getFeeForExecuteUSD(2), - getFeeForExecuteUSD(3), - getFeeForExecuteUSD(4), - ]; -} - -// todo: fix this up - proxy token -// export const secretTokenName = ( -// mode: EXCHANGE_MODE, -// token: Token[], -// label: string -// ): string => { -// if (label === "SEFI") { -// return "SEFI"; -// } else if (label === "WSCRT") { -// return mode === EXCHANGE_MODE.FROM_SCRT ? "SSCRT" : "WSCRT"; -// } else if (label === "WSIENNA") { -// return mode === EXCHANGE_MODE.FROM_SCRT ? "SIENNA" : "WSIENNA"; -// } else { -// return ( -// (mode === EXCHANGE_MODE.FROM_SCRT && token === TOKEN.ERC20 -// ? "secret" -// : "") + label -// ); -// } -// }; - -// export function notify( -// type: "success" | "error" | "errorWithHash", -// msg: string, -// hideAfterSec: number = 120, -// txHash?: string, -// useContainer: boolean = false -// ) { -// // if(globalThis.config.IS_MAINTENANCE === 'true') return; -// let cogoType: string = type; -// if (type === "error" && typeof msg === "string") { -// msg = msg.replaceAll("Failed to decrypt the following error message: ", ""); -// msg = msg.replace(/\. Decryption error of the error message:.+?/, ""); -// } - -// let onClick = () => { -// hide(); -// }; -// if (type === "errorWithHash") { -// cogoType = "warn"; -// onClick = () => { -// const url = `https://secretnodes.com/secret/chains/secret-4/transactions/${txHash}`; -// const win = window.open(url, "_blank"); -// win.focus(); -// hide(); -// }; -// } - -// // const { hide } = cogoToast[cogoType](msg, { -// // toastContainerID: "notifications_container", -// // hideAfter: hideAfterSec, -// // onClick, -// // }); -// // NotificationManager[type](undefined, msg, closesAfterMs); -// } diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/extractValueFromLogs.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/extractValueFromLogs.ts deleted file mode 100644 index ff4973a..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/extractValueFromLogs.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TxResponse } from "secretjs"; - -export default function extractValueFromLogs( - txResponse: TxResponse, - key: string, - lastValue?: boolean, -): string { - // Find the event with type 'wasm' - const wasmEvent = txResponse.events.find((e) => e.type === "wasm"); - - if (!wasmEvent) { - return ""; // Return an empty string if no wasm event is found - } - - // Convert attributes to an array and filter them by key - let wasmAttributes = Array.from(wasmEvent.attributes || []); - - if (lastValue) { - wasmAttributes = wasmAttributes.reverse(); // Reverse to get the last value if specified - } - - // Find the attribute with the specified key, converting Uint8Array to string - const attribute = wasmAttributes.find((a) => - new TextDecoder().decode(a.key) === key - ); - - // Return the value as a string, or an empty string if not found or undefined - return attribute ? new TextDecoder().decode(attribute.value) : ""; -} diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/swapContractAddress.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/swapContractAddress.ts deleted file mode 100644 index 94a0c1e..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/utils/swapContractAddress.ts +++ /dev/null @@ -1,19 +0,0 @@ -import useGlobalConfigStore from "@/store/useGlobalConfigStore"; -import { NETWORKS } from "../../../types/NETWORKS"; - -export const swapContractAddress = (network: NETWORKS): string => { - const { - SCRT_SWAP_CONTRACT, - BSC_SCRT_SWAP_CONTRACT, - PLSM_SWAP_CONTRACT, - } = useGlobalConfigStore.getState().config; - - switch (network) { - case NETWORKS.ETH: - return SCRT_SWAP_CONTRACT; - case NETWORKS.BSC: - return BSC_SCRT_SWAP_CONTRACT; - case NETWORKS.PLSM: - return PLSM_SWAP_CONTRACT; - } -}; diff --git a/utils/secretjs/SecretSwapSite/blockchain-bridge/utils.ts b/utils/secretjs/SecretSwapSite/blockchain-bridge/utils.ts deleted file mode 100644 index 5412d85..0000000 --- a/utils/secretjs/SecretSwapSite/blockchain-bridge/utils.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const sleep = (duration: number | undefined) => - new Promise((res) => setTimeout(res, duration)); - -export const networkToDisplay = (name?: string) => { - if (!name) { - return ""; - } - switch (name.toLowerCase().trim()) { - case "binancesmartchain": - return "Binance Smart Chain"; - case "ethereum": - return "Ethereum"; - case "secret": - return "Secret Network"; - case "secret20": - return "Secret Network"; - default: - return ""; - } -}; diff --git a/utils/secretjs/SecretSwapSite/executeRouterSwap.ts b/utils/secretjs/SecretSwapSite/executeRouterSwap.ts deleted file mode 100644 index f46fd86..0000000 --- a/utils/secretjs/SecretSwapSite/executeRouterSwap.ts +++ /dev/null @@ -1,69 +0,0 @@ -import useGlobalConfigStore from "@/store/useGlobalConfigStore"; -import { AsyncSender } from "./blockchain-bridge/scrt/asyncSender"; -import { getFeeForExecute } from "./blockchain-bridge/scrt/utils"; -import { GAS_FOR_BASE_SWAP_ROUTE } from "@/utils/secretjs/SecretSwapSite/utils/gasPrices"; - -export function executeRouterSwap( - secretjsSender: AsyncSender, - secretAddress: string, - fromToken: string, - fromAmount: string, - hops: (null | { - from_token: { snip20: { address: string; code_hash: string } } | "scrt"; - pair_address: string; - pair_code_hash: string; - expected_return?: string; - })[], - expected_return: string, - bestRoute: string[] -) { - const { AMM_ROUTER_CONTRACT } = useGlobalConfigStore.getState().config; - if (fromToken === "uscrt") { - return secretjsSender.asyncExecute( - AMM_ROUTER_CONTRACT, - secretAddress, - { - receive: { - from: secretAddress, - amount: fromAmount, - msg: btoa( - JSON.stringify({ - to: secretAddress, - hops, - expected_return, - }) - ), - }, - }, - "", - [ - { - amount: fromAmount, - denom: "uscrt", - }, - ], - getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE) - ); - } else { - return secretjsSender.asyncExecute( - fromToken, - secretAddress, - { - send: { - recipient: AMM_ROUTER_CONTRACT, - amount: fromAmount, - msg: btoa( - JSON.stringify({ - to: secretAddress, - hops, - expected_return, - }) - ), - }, - }, - "", - [], - getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE) - ); - } -} diff --git a/utils/secretjs/SecretSwapSite/ppp/uuu.ts b/utils/secretjs/SecretSwapSite/ppp/uuu.ts deleted file mode 100644 index e3ce942..0000000 --- a/utils/secretjs/SecretSwapSite/ppp/uuu.ts +++ /dev/null @@ -1,357 +0,0 @@ -// import { SecretNetworkClient } from "secretjs"; -// import BigNumber from "bignumber.js"; -// import { Keplr, Window } from "@keplr-wallet/types"; -// import { SwapPair } from "../types/SwapPair"; -// import { AsyncSender } from "../blockchain-bridge/scrt/asyncSender"; -// // import { getFeeForExecute } from "../utils/gasPrices"; -// import { -// GAS_FOR_BASE_SWAP_ROUTE, -// GAS_FOR_SWAP_NATIVE_COIN, -// } from "../utils/gasPrices"; -// import { getOfferAndAskPools } from "../SwapFunctions/getOfferAndAskPools"; -// // const { compute_offer_amount, compute_swap } = require("../blockchain-bridge/scrt/swap/swap"); -// import { -// compute_offer_amount, -// compute_swap, -// } from "../blockchain-bridge/scrt/swap/swap"; - -// // Keplr Wallet Integration -// const connectKeplr = async () => { -// await (window as Window).keplr?.enable("secret-4"); -// const offlineSigner = (window as Window).getOfflineSigner?.("secret-4"); -// const accounts = await offlineSigner?.getAccounts(); -// return { -// address: accounts?.[0].address, -// signer: offlineSigner, -// }; -// }; - -// const createClient = async (signer: ReturnType) => { -// const accounts = await signer.getAccounts(); -// const client = new SecretNetworkClient({ -// url: "https://grpc-web.secret-4.api.trivium.network:9091", -// wallet: signer, -// walletAddress: accounts?.[0].address, -// chainId: "secret-4", -// }); -// return client; -// }; - -// export function getBestRoute({ -// fromInput, -// toInput, -// cachedGasFeesUnfilledCoin, -// isToEstimated, -// routes, -// tokens, -// pairs, -// balances, -// }: BestRouteParams): { -// bestRoute: string[] | null; -// allRoutesOutputs: RouteOutput[]; -// bestRouteToInput: BigNumber; -// bestRouteFromInput: BigNumber; -// } { -// const allRoutesOutputs: RouteOutput[] = []; -// let bestRoute: string[] | null = null; - -// let bestRouteToInput = new BigNumber(-Infinity); -// let bestRouteToInputWithGas = new BigNumber(-Infinity); -// let bestRouteFromInput = new BigNumber(Infinity); -// let bestRouteFromInputWithGas = new BigNumber(Infinity); - -// for (const route of routes) { -// if (isToEstimated || toInput === null) { -// let from = new BigNumber(fromInput); -// let to = new BigNumber(0); -// for (let i = 0; i < route.length - 1; i++) { -// const fromToken = route[i]; -// const toToken = route[i + 1]; -// const pair = pairs.get( -// `${fromToken}${SwapPair.id_delimiter}${toToken}`, -// ); -// if (!pair) break; - -// const { offer_pool, ask_pool } = getOfferAndAskPools( -// fromToken, -// toToken, -// pair, -// tokens, -// balances, -// ); - -// const offer_amount = from; -// if ( -// offer_pool.isEqualTo(0) || -// ask_pool.isEqualTo(0) || -// offer_amount.isNaN() || -// offer_amount.isLessThanOrEqualTo(0) -// ) { -// to = new BigNumber(0); -// break; -// } - -// const { return_amount } = compute_swap( -// offer_pool, -// ask_pool, -// offer_amount, -// ); - -// if (return_amount.isNaN() || return_amount.isLessThanOrEqualTo(0)) { -// to = new BigNumber(0); -// break; -// } - -// to = return_amount; - -// if (i < route.length - 2) { -// from = return_amount; -// } -// } - -// const toWithGas = to.minus(cachedGasFeesUnfilledCoin[route.length - 1]); -// allRoutesOutputs.push({ route, toOutput: to, toWithGas }); - -// if (toWithGas.isGreaterThan(bestRouteToInputWithGas)) { -// bestRouteFromInput = new BigNumber(fromInput); -// bestRouteToInput = to; -// bestRouteToInputWithGas = toWithGas; -// bestRoute = route; -// } -// } else { -// let from = new BigNumber(0); -// let to = new BigNumber(toInput); -// for (let i = route.length - 1; i > 0; i--) { -// const fromToken = route[i - 1]; -// const toToken = route[i]; -// const pair = pairs.get( -// `${fromToken}${SwapPair.id_delimiter}${toToken}`, -// ); -// if (!pair) break; - -// const { offer_pool, ask_pool } = getOfferAndAskPools( -// fromToken, -// toToken, -// pair, -// tokens, -// balances, -// ); - -// const ask_amount = to; -// if ( -// offer_pool.isEqualTo(0) || -// ask_pool.isEqualTo(0) || -// ask_amount.gt(ask_pool) || -// ask_amount.isNaN() || -// ask_amount.isZero() -// ) { -// from = new BigNumber(Infinity); -// break; -// } - -// const { offer_amount } = compute_offer_amount( -// offer_pool, -// ask_pool, -// ask_amount, -// ); - -// if (offer_amount.isNaN() || offer_amount.isLessThanOrEqualTo(0)) { -// from = new BigNumber(Infinity); -// break; -// } - -// from = offer_amount; - -// if (i > 1) { -// to = offer_amount; -// } -// } - -// const fromWithGas = from.plus( -// cachedGasFeesUnfilledCoin[route.length - 1], -// ); - -// allRoutesOutputs.push({ route, fromOutput: from, fromWithGas }); - -// if (fromWithGas.isLessThan(bestRouteFromInputWithGas)) { -// bestRouteFromInput = from; -// bestRouteFromInputWithGas = fromWithGas; -// bestRouteToInput = new BigNumber(toInput); -// bestRoute = route; -// } -// } -// } - -// return { bestRoute, allRoutesOutputs, bestRouteToInput, bestRouteFromInput }; -// } - -// export async function executeRouterSwap( -// secretjsSender: AsyncSender, -// secretAddress: string, -// fromToken: string, -// fromAmount: string, -// hops: (null | { -// from_token: { address: string; code_hash: string } | "scrt"; -// pair_address: string; -// pair_code_hash: string; -// })[], -// expected_return: string, -// bestRoute: string[], -// ) { -// const AMM_ROUTER_CONTRACT = "secret1..."; // Your AMM router contract address - -// const msg = { -// receive: { -// from: secretAddress, -// amount: fromAmount, -// msg: btoa( -// JSON.stringify({ -// to: secretAddress, -// hops, -// expected_return, -// }), -// ), -// }, -// }; - -// if (fromToken === "uscrt") { -// return secretjsSender.asyncExecute( -// AMM_ROUTER_CONTRACT, -// secretAddress, -// msg, -// "", -// [ -// { -// amount: fromAmount, -// denom: "uscrt", -// }, -// ], -// getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE), -// ); -// } else { -// return secretjsSender.asyncExecute( -// fromToken, -// secretAddress, -// { -// send: { -// recipient: AMM_ROUTER_CONTRACT, -// amount: fromAmount, -// msg: btoa( -// JSON.stringify({ -// to: secretAddress, -// hops, -// expected_return, -// }), -// ), -// }, -// }, -// "", -// [], -// getFeeForExecute((bestRoute.length - 1) * GAS_FOR_BASE_SWAP_ROUTE), -// ); -// } -// } - -// export async function executeSwapUscrt( -// secretjsSender: AsyncSender, -// secretAddress: string, -// pair: SwapPair, -// fromAmount: string, -// expected_return: string, -// ) { -// return secretjsSender.asyncExecute( -// pair.contract_addr, -// secretAddress, -// { -// swap: { -// offer_asset: { -// info: { native_token: { denom: "uscrt" } }, -// amount: fromAmount, -// }, -// expected_return, -// }, -// }, -// "", -// [ -// { -// amount: fromAmount, -// denom: "uscrt", -// }, -// ], -// getFeeForExecute(GAS_FOR_SWAP_NATIVE_COIN), -// ); -// } - -// interface SwapToken { -// address: string; -// code_hash: string; -// } - -// // interface SwapPair { -// // contract_addr: string; -// // asset_infos: SwapToken[]; -// // } - -// interface RouteOutput { -// route: string[]; -// toOutput?: BigNumber; -// toWithGas?: BigNumber; -// fromOutput?: BigNumber; -// fromWithGas?: BigNumber; -// } - -// interface BestRouteParams { -// fromInput: number; -// toInput: number; -// cachedGasFeesUnfilledCoin: number[]; -// isToEstimated: boolean; -// routes: string[][]; -// tokens: Record; -// pairs: Map; -// balances: Record; -// } - -// (async () => { -// const keplrConnection = await connectKeplr(); -// const secretjs = await createClient(keplrConnection.signer); - -// // Define the parameters for the swap -// const fromToken = "secret1..."; -// const toToken = "secret2..."; -// const fromAmount = "1000000"; // Example amount -// const expectedReturn = "990000"; // Example expected return - -// const bestRouteData = getBestRoute({ -// fromInput: 1, -// toInput: 1, -// cachedGasFeesUnfilledCoin: [0.12], -// isToEstimated: true, -// routes: [["a", "b"]], -// tokens: { -// a: { address: "secret1...", code_hash: "..." }, -// b: { address: "secret2...", code_hash: "..." }, -// }, -// pairs: new Map([["a:b", { contract_addr: "secret1...", asset_infos: [] }]]), -// balances: { a: "1000000", b: "1000000" }, -// }); - -// if (bestRouteData.bestRoute) { -// const hops = await getHops( -// bestRouteData.bestRoute, -// bestRouteData.pairs, -// secretjs, -// ); - -// await executeRouterSwap( -// keplrConnection.signer, -// keplrConnection.address, -// fromToken, -// fromAmount, -// hops, -// expectedReturn, -// bestRouteData.bestRoute, -// ); -// } else { -// console.error("No valid route found"); -// } -// })(); diff --git a/utils/secretjs/SecretSwapSite/types/NETWORKS.ts b/utils/secretjs/SecretSwapSite/types/NETWORKS.ts deleted file mode 100644 index 9277f31..0000000 --- a/utils/secretjs/SecretSwapSite/types/NETWORKS.ts +++ /dev/null @@ -1,5 +0,0 @@ -export enum NETWORKS { - ETH = "ETH", - BSC = "BSC", - PLSM = "PLSM", -} diff --git a/utils/secretjs/SecretSwapSite/types/SwapPair.ts b/utils/secretjs/SecretSwapSite/types/SwapPair.ts deleted file mode 100644 index 700724c..0000000 --- a/utils/secretjs/SecretSwapSite/types/SwapPair.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { Asset, NativeToken, Token } from "./trade"; -import { - getSymbolsFromPair, - Pair, -} from "@/utils/secretjs/SecretSwapSite/blockchain-bridge/scrt/swap"; -import { SwapTokenMap } from "./SwapToken"; -import { SecretNetworkClient } from "secretjs"; - -export class SwapPair { - pair_identifier: string; - asset_infos: Asset[]; - contract_addr: string; - liquidity_token: string; - static id_delimiter = "/" as const; - - constructor( - symbol0: string, - asset0: NativeToken | Token, - symbol1: string, - asset1: NativeToken | Token, - contract_addr: string, - liquidity_token: string, - pair_identifier: string - ) { - this.asset_infos = []; - this.asset_infos.push(new Asset(symbol0, asset0)); - this.asset_infos.push(new Asset(symbol1, asset1)); - this.contract_addr = contract_addr; - this.liquidity_token = liquidity_token; - this.pair_identifier = pair_identifier; - } - - lpTokenSymbol(): string { - return `LP-${this.identifier()}`; - } - - identifier(): string { - return this.pair_identifier; - } - - assetIds(): string[] { - return this.pair_identifier.split(SwapPair.id_delimiter); - } - - isSymbolInPair(symbol: string): boolean { - return ( - symbol.toUpperCase() === this.asset_infos[0].symbol || - symbol.toUpperCase() === this.asset_infos[1].symbol - ); - } - - humanizedSymbol(): string { - return `${this.asset_infos[0].symbol}-${this.asset_infos[1].symbol}`; - } - - isIdInPair(id: string): boolean { - const pairIdentifiers = this.pair_identifier.split(SwapPair.id_delimiter); - - for (const pId of pairIdentifiers) { - if (pId.toLowerCase() === id) { - return true; - } - } - - return false; - } - - static fromPair(pair: Pair, tokenMap: SwapTokenMap) { - const identifiers = getSymbolsFromPair(pair); - - const symbol0 = tokenMap.get(identifiers[0])?.symbol; - const symbol1 = tokenMap.get(identifiers[1])?.symbol; - - if (!symbol0 || !symbol1) { - throw new Error( - "Failed to get token symbols for pair: " + JSON.stringify(pair) - ); - } - - const pair_identifier = pairIdFromTokenIds(identifiers[0], identifiers[1]); - - //const symbol0 = asset0.type === 'native_token' ? asset0.native_token.denom : asset0.token.contract_addr; - return new SwapPair( - symbol0, - pair.asset_infos[0], - symbol1, - pair.asset_infos[1], - pair.contract_addr, - pair.liquidity_token, - pair_identifier - ); - } - - private static code_hash: string; - static getPairCodeHash( - pair_address: string, - secretjs: SecretNetworkClient - ): Promise { - // TODO fix this if we ever have a factory with multiple pair_code_id - // For now this is the best way to avoid a lot of secretjs requests - return new Promise(async (accept, reject) => { - try { - if (!SwapPair.code_hash) { - const hashResponse = - await secretjs.query.compute.codeHashByContractAddress({ - contract_address: pair_address, - }); - if (!hashResponse.code_hash) { - throw new Error( - "Failed to get code hash from contract: " + pair_address - ); - } - SwapPair.code_hash = hashResponse.code_hash; - } - accept(SwapPair.code_hash); - } catch (e) { - reject(e); - } - }); - } -} - -export const pairIdFromTokenIds = (id0: string, id1: string): string => { - return id0.localeCompare(id1) === -1 - ? `${id0}${SwapPair.id_delimiter}${id1}` - : `${id1}${SwapPair.id_delimiter}${id0}`; -}; -export type PairMap = Map; diff --git a/utils/secretjs/SecretSwapSite/types/SwapToken.ts b/utils/secretjs/SecretSwapSite/types/SwapToken.ts deleted file mode 100644 index 5fad592..0000000 --- a/utils/secretjs/SecretSwapSite/types/SwapToken.ts +++ /dev/null @@ -1,105 +0,0 @@ -// import { ITokenInfo } from "../../../stores/interfaces"; -// import { -// Snip20TokenInfo, -// validateBech32Address, -// } from "../../../blockchain-bridge"; -// import { tokenImages } from "../../../components/Earn/EarnRow"; -// import { sleep } from "utils"; -// import useGlobalConfigStore from "@/store/useGlobalConfigStore"; - -import { Token } from "@/types"; - -export type SwapTokenMap = Map; - -export type SwapToken = { - symbol: string; - logo?: string; - identifier?: string; - decimals?: number; - address?: string; - name?: string; - balance?: string; - price?: number; -}; - -// export const getPricesForJSONTokens = async () => { -// const storePrices = useGlobalConfigStore((state) => state.PRICE_DATA); -// for (let i = 0; i < 4; i++) { -// if (globalThis.config["PRICE_DATA"]["SEFI/USDT"].price) { -// break; -// } -// await sleep(1000); -// } -// return { -// secret15l9cqgz5uezgydrglaak5ahfac69kmx2qpd6xt: -// globalThis.config["PRICE_DATA"]["SEFI/USDT"].price, -// uscrt: globalThis.config["PRICE_DATA"]["SCRT/USD"].price, -// secret1yxcexylwyxlq58umhgsjgstgcg2a0ytfy4d9lt: -// globalThis.config["PRICE_DATA"]["BUTT/USD"].price, -// secret14mzwd0ps5q277l20ly2q3aetqe3ev4m4260gf4: -// globalThis.config["PRICE_DATA"]["ATOM/USD"].price, -// secret1zwwealwm0pcl9cul4nt6f38dsy6vzplw8lp3qg: -// globalThis.config["PRICE_DATA"]["OSMO/USD"].price, -// secret1k8cge73c3nh32d4u0dsd5dgtmk63shtlrfscj5: -// globalThis.config["PRICE_DATA"]["DVPN/USD"].price, -// secret19ungtd2c7srftqdwgq0dspwvrw63dhu79qxv88: -// globalThis.config["PRICE_DATA"]["XMR/USD"].price, -// }; -// }; - -export const SwapTokenFromSnip20Params = (address: string, token: Token) => { - const customTokenInfo: SwapToken = { - symbol: token.symbol, - address: address, - decimals: token.decimals, - logo: "/static/unknown.png", - identifier: address, - name: token.name, - }; - - return customTokenInfo; -}; - -// export const TokenMapfromITokenInfo = async (tokens: ITokenInfo[]): Promise => { -// const swapTokens: SwapTokenMap = new Map(); - -// const tokenPrices = await getPricesForJSONTokens() - -// for (const t of tokens) { -// const secretAddress = validateBech32Address(t.dst_address) -// ? t.dst_address -// : validateBech32Address(t.src_address) -// ? t.src_address -// : ''; -// let symbol; -// if (t.display_props.symbol === 'SCRT') { -// symbol = 'SCRT'; -// } else if (t.display_props.symbol.toLowerCase() === 'sscrt') { -// symbol = 'sSCRT'; -// } else if (t.display_props.symbol.toLowerCase() === 'sefi') { -// symbol = 'SEFI'; -// } else if (t.display_props.symbol.toLowerCase() === 'sienna') { -// symbol = t.display_props.symbol.toUpperCase(); -// } else if (t.display_props.symbol.toLowerCase() === 'alter') { -// symbol = t.display_props.symbol.toUpperCase(); -// } else if (t.display_props.symbol.toLowerCase() === 'shd') { -// symbol = t.display_props.symbol.toUpperCase(); -// } else { -// symbol = 's' + t.display_props.symbol; -// } - -// const swapToken: SwapToken = { -// identifier: secretAddress, -// symbol: symbol, -// logo: t.display_props.symbol.startsWith("lp-") ? t.display_props.image : tokenImages[t.display_props.symbol.toUpperCase()], -// decimals: Number(t.decimals), -// name: t.name, -// address: secretAddress, -// price: secretAddress === 'secret15l9cqgz5uezgydrglaak5ahfac69kmx2qpd6xt' ? tokenPrices[secretAddress] : (Number(t.price) ? Number(t.price) : 0), -// }; - -// swapTokens.set(swapToken.identifier, swapToken); -// } - -// return swapTokens; -// }; diff --git a/utils/secretjs/SecretSwapSite/types/trade.ts b/utils/secretjs/SecretSwapSite/types/trade.ts deleted file mode 100644 index e48f41a..0000000 --- a/utils/secretjs/SecretSwapSite/types/trade.ts +++ /dev/null @@ -1,147 +0,0 @@ -import { SwapToken } from "./SwapToken"; - -export enum TradeType { - EXACT_INPUT, - EXACT_OUTPUT, -} - -export enum Rounding { - ROUND_DOWN, - ROUND_HALF_UP, - ROUND_UP, -} - -export interface TokenInfo { - symbol: string; - address?: string; - token_code_hash?: string; -} - -export interface Token { - type: "token"; - token: { - contract_addr: string; - token_code_hash: string; - viewing_key: string; - }; -} - -export interface NativeToken { - type: "native_token"; - native_token: { - denom: string; - }; -} - -export class Currency { - public readonly amount: string; - public readonly token: Asset; - - isEqualToIdentifier(info: string) { - return this.token.info.type === "native_token" - ? this.token.info.native_token.denom === info - : this.token.info.token.contract_addr === info; - } - - constructor(token: Asset, amount: string) { - this.amount = amount; - this.token = token; - } -} - -export class Asset { - public info: Token | NativeToken; - public symbol: string; - - public isNative(): this is NativeToken { - return Asset._isNative(this.info); - } - - private static _isNative(info: any): info is NativeToken { - return "native_token" in info; - } - - static fromSwapToken(token: SwapToken): Asset { - const tokenInfo: TokenInfo = { - symbol: token.symbol, - address: token?.address, - }; - - return Asset.fromTokenInfo(tokenInfo); - } - - static fromTokenInfo(token: TokenInfo): Asset { - if (token.address) { - return new Asset(token.symbol, { - type: "token", - token: { - contract_addr: token.address, - token_code_hash: token.token_code_hash ?? "", - viewing_key: "", - }, - }); - } else { - return new Asset(token.symbol, { - type: "native_token", - native_token: { denom: `u${token.symbol.toLowerCase()}` }, - }); - } - } - - constructor(symbol: string, info: Token | NativeToken) { - this.info = info; - this.symbol = symbol; - } -} - -export class Trade { - /** - * The route of the trade, i.e. which pairs the trade goes through. - */ - //public readonly route: Route - /** - * The type of the trade, either exact in or exact out. - */ - public readonly tradeType: TradeType; - /** - * The input amount for the trade assuming no slippage. - */ - public readonly inputAmount: Currency; - /** - * The output amount for the trade assuming no slippage. - */ - public readonly outputAmount: Currency; - /** - * The price expressed in terms of output amount/input amount. - */ - //public readonly executionPrice: number - /** - * The mid price after the trade executes assuming no slippage. - */ - // public readonly price: number; - - //public readonly pair: string - - getExactAmount(): string { - return this.tradeType === TradeType.EXACT_OUTPUT - ? this.outputAmount.amount - : this.inputAmount.amount; - } - - getEstimatedAmount(): string { - return this.tradeType === TradeType.EXACT_OUTPUT - ? this.inputAmount.amount - : this.outputAmount.amount; - } - - constructor( - inputAmount: Currency, - outputAmount: Currency, - tradeType: TradeType - ) { - this.inputAmount = inputAmount; - this.outputAmount = outputAmount; - this.tradeType = tradeType; - //this.executionPrice = Number(outputAmount.amount) / Number(inputAmount.amount); - } -} diff --git a/utils/secretjs/SecretSwapSite/utils/date.ts b/utils/secretjs/SecretSwapSite/utils/date.ts deleted file mode 100644 index d71005b..0000000 --- a/utils/secretjs/SecretSwapSite/utils/date.ts +++ /dev/null @@ -1,57 +0,0 @@ -import moment from 'moment'; - -moment.locale('en'); - -export function dateTimeFormat(date: number | Date | string): string { - return moment(date).format('DD.MM.YYYY HH:mm'); -} - -const oneDayMS = 1000 * 60 * 60 * 24; - -export function dateTimeAgoFormat(date: number): string { - if (Date.now() - date > oneDayMS) { - return moment(date).format('MM.DD.YYYY HH:mm'); - } - - return moment(date).fromNow(); -} - -export function dateFormat(date: number | Date | string, isFull?: boolean): string { - return moment(date).format(isFull ? 'DD.MM.YYYY, HH:mm' : 'DD.MM.YYYY'); -} - -export function timeFormat(date: number | Date | string): string { - return moment(date).format('HH:mm'); -} - -export function dateISOFormat(date: Date): string { - return `${moment(date).format('YYYY-MM-DDTHH:mm:ss.SSS')}Z`; - // return date.toISOString(); - Not work approach -} - -export function getMonthName(monthNumber: number): string { - return moment() - .month(monthNumber) - .format('MMMM'); -} -export function getMonthNameUpper(monthNumber: number): string { - const month = getMonthName(monthNumber); - return month.charAt(0).toUpperCase() + month.slice(1); -} - -export function getMonthNameUpperShort(monthNumber: number): string { - if (monthNumber === 4) return 'Май'; - const month = getMonthName(monthNumber); - return `${month.charAt(0).toUpperCase()}${month.slice(1, 3)}.`; -} - -export const isDefined = (value: any) => value !== null && value !== undefined; - -export const formatDaysLeftFrom = (date: Date | string) => { - return Math.max( - 0, - moment(date) - .startOf('day') - .diff(moment().startOf('day'), 'days'), - ).toString(); -}; diff --git a/utils/secretjs/SecretSwapSite/utils/decode.ts b/utils/secretjs/SecretSwapSite/utils/decode.ts deleted file mode 100644 index 2e32c22..0000000 --- a/utils/secretjs/SecretSwapSite/utils/decode.ts +++ /dev/null @@ -1,29 +0,0 @@ -export function b64DecodeUnicode(str: string) { - // Going backwards: from bytestream, to percent-encoding, to original string. - return decodeURIComponent( - atob(str) - .split('') - .map(function(c) { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join(''), - ); -} - -function s4() { - return Math.floor((1 + Math.random()) * 0x10000) - .toString(16) - .substring(1); -} - -export function guid(): string { - return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); -} - -export function normalizeHex(key) { - let result = String(key).toLowerCase(); - if (!result.startsWith('0x')) { - result = '0x' + result; - } - return result; -} diff --git a/utils/secretjs/SecretSwapSite/utils/errNotify.ts b/utils/secretjs/SecretSwapSite/utils/errNotify.ts deleted file mode 100644 index 226ddba..0000000 --- a/utils/secretjs/SecretSwapSite/utils/errNotify.ts +++ /dev/null @@ -1,8 +0,0 @@ -export default function errNotify( - customMsg: string, - err: string, - notify: (type: string, msg: string) => void -) { - notify("error", `Failed to stake: ${err}`); - console.log(`Failed to stake: ${err}`); -} diff --git a/utils/secretjs/SecretSwapSite/utils/errors.ts b/utils/secretjs/SecretSwapSite/utils/errors.ts deleted file mode 100644 index dfb7279..0000000 --- a/utils/secretjs/SecretSwapSite/utils/errors.ts +++ /dev/null @@ -1,53 +0,0 @@ -export const errorTypes = { - SILENT: 'SILENT', -}; - -export interface IDataError extends Error { - data?: any; -} - -export function createError(name: string, message: string, data?: any): IDataError { - const newError: IDataError = new Error(message); - - newError.name = name; - if (data) { - newError.data = data; - } - - return newError; -} - -export const silentError = createError(errorTypes.SILENT, ''); - -export function isSilentError(error: IDataError): boolean { - return error && error.name === errorTypes.SILENT; -} - -export function handleSilentError(error: IDataError) { - if (error.name === 'SILENT') { - return Promise.resolve(); - } - - throw error; -} - -export type HttpResponseError = Error & { - response: { - body: { - error: string; - text: string; - }; - }; -}; - -export function printError(error: any): string { - if (typeof error === 'string') { - return error; - } - if (typeof error === 'object') { - if ('message' in error) { - return error.message; - } - } - return ''; -} diff --git a/utils/secretjs/SecretSwapSite/utils/formatNumber.ts b/utils/secretjs/SecretSwapSite/utils/formatNumber.ts deleted file mode 100644 index 76a36ed..0000000 --- a/utils/secretjs/SecretSwapSite/utils/formatNumber.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { BigNumber } from "bignumber.js"; -// const BN = require('bn.js'); -import BN from "bn.js"; - -//https://stackoverflow.com/questions/9461621/format-a-number-as-2-5k-if-a-thousand-or-more-otherwise-900 -export const nFormatter = (num: number, digits: number) => { - const si = [ - { value: 1, symbol: "" }, - { value: 1e3, symbol: "K" }, - { value: 1e6, symbol: "M" }, - { value: 1e9, symbol: "G" }, - { value: 1e12, symbol: "T" }, - { value: 1e15, symbol: "P" }, - { value: 1e18, symbol: "E" }, - ]; - const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; - let i; - for (i = si.length - 1; i > 0; i--) { - if (num >= si[i].value) { - break; - } - } - return (num / si[i].value).toFixed(digits).replace(rx, "$1") + si[i].symbol; -}; - -export const numberFormatter = (num: number, digits: number) => { - const si = [ - { value: 1, symbol: "" }, - { value: 1e3, symbol: "K" }, - { value: 1e6, symbol: "M" }, - { value: 1e9, symbol: "B" }, - { value: 1e12, symbol: "T" }, - { value: 1e15, symbol: "Q" }, - { value: 1e18, symbol: "Qi" }, - ]; - const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; - let i; - for (i = si.length - 1; i > 0; i--) { - if (num >= si[i].value) { - break; - } - } - return ( - (num / si[i].value).toFixed(digits).replace(rx, "$1") + " " + si[i].symbol - ); -}; - -export const toFixedTrunc = (x: number, n: number) => { - const v = (typeof x === "string" ? x : x.toString()).split("."); - if (n <= 0) return v[0]; - let f = v[1] || ""; - if (f.length > n) return `${v[0]}.${f.substr(0, n)}`; - while (f.length < n) f += "0"; - return `${v[0]}.${f}`; -}; - -export const balanceNumberFormat = new Intl.NumberFormat("en-US", { - maximumFractionDigits: 6, - useGrouping: true, -}); - -export const valueToDecimals = ( - input: string, - numDecimalsInResult: number -): string => { - let numDecimalsInInput; - const decimalPos = input.indexOf("."); - - if (decimalPos !== -1) { - numDecimalsInInput = input.length - decimalPos - 1; - } else { - // No decimal point in the string - numDecimalsInInput = 0; - } - - let result = input.replace(".", ""); - - if (numDecimalsInResult >= numDecimalsInInput) { - result += "0".repeat(numDecimalsInResult - numDecimalsInInput); - } else { - // This situation may never happen. It's when the input has more decimal places than the result should have. - result = result.slice(0, numDecimalsInResult - numDecimalsInInput); - } - - return result; -}; - -export const zeroDecimalsFormatter = new Intl.NumberFormat("en-US", { - minimumFractionDigits: 0, - maximumFractionDigits: 0, -}); - -export function formatZeroDecimals(value: number | string) { - return zeroDecimalsFormatter.format(Number(value)); -} - -const twoDecimalsFormatter = new Intl.NumberFormat("en-US", { - minimumFractionDigits: 2, - maximumFractionDigits: 2, -}); - -const sixDecimalsFormatter = new Intl.NumberFormat("en-US", { - maximumFractionDigits: 6, -}); - -export function formatWithTwoDecimals(value: number | string) { - return twoDecimalsFormatter.format(Number(value)); -} - -export function formatWithSixDecimals(value: number | string) { - return sixDecimalsFormatter.format(Number(value)); -} - -export function formatWithTwoDecimalsRub(value: number) { - return `${formatWithTwoDecimals(value)} ₽`; -} - -/** - * This function will chop off decimals, but not chop off integers, - * so that there are no more than `sigFigs` digits, unless there are a lot of integer digits. - * Examples with sigFigs=6: - * 1.234567 => 1.23457 - * 123.456789 => 123.457 - * 123456789.123456 => 123456789 - */ -export function formatSignificantFigures( - value: number | string | BigNumber, - sigFigs: number -) { - value = Number(value); - - let maxFractionDigits = sigFigs - 1 - Math.floor(Math.log10(Math.abs(value))); - maxFractionDigits = Math.max(0, maxFractionDigits); - maxFractionDigits = Math.min(20, maxFractionDigits); - - return new Intl.NumberFormat("en-US", { - maximumFractionDigits: maxFractionDigits, - }).format(value); -} - -export function formatAsUSD(value: number | string | BigNumber) { - return ( - "$" + - new Intl.NumberFormat("en-US", { - minimumFractionDigits: 2, - maximumFractionDigits: 2, - }).format(Number(value)) + - " USD" - ); -} - -export function ones(value: number | string) { - return Number(value) / 1e18; -} - -export function truncateSymbol(symbol: string, num: number = 6) { - if (!symbol) { - return ""; - } - - if (symbol.length <= 6) { - return symbol; - } - - const first = symbol.slice(0, num); - return `${first}..`; -} - -export function truncateAddressString(address: string, num = 12) { - if (!address) { - return ""; - } - - const first = address.slice(0, num); - const last = address.slice(-num); - return `${first}...${last}`; -} - -export const sortedStringify = (obj: any) => - JSON.stringify(obj, Object.keys(obj).sort()); - -export const mulDecimals = ( - amount: string | number, - decimals: string | number -) => { - const decimalsMul = `10${new Array(Number(decimals)).join("0")}`; - const amountStr = new BigNumber(amount).multipliedBy(decimalsMul); - - return new BN(amountStr.toFixed()); -}; - -export const divDecimals = ( - amount: string | number, - decimals: string | number -) => { - if (decimals === 0) { - return String(amount); - } - - const decimalsMul = `10${new Array(Number(decimals)).join("0")}`; - const amountStr = new BigNumber(amount).dividedBy(decimalsMul); - - return amountStr.toFixed(); -}; - -export const UINT128_MAX = "340282366920938463463374607431768211454"; - -export const displayHumanizedBalance = ( - balance: BigNumber, - roundingMode: BigNumber.RoundingMode = BigNumber.ROUND_HALF_UP, - decimals: number = 6 -): string => - new Intl.NumberFormat("en-US", { - maximumFractionDigits: decimals, - useGrouping: true, - }).format(Number(balance.toFixed(decimals, roundingMode))); - -export const humanizeBalance = ( - balance: BigNumber, - decimals: number -): BigNumber => balance.dividedBy(new BigNumber(`1e${decimals}`)); - -export const canonicalizeBalance = ( - balance: BigNumber, - decimals: number -): BigNumber => balance.multipliedBy(new BigNumber(`1e${decimals}`)); diff --git a/utils/secretjs/SecretSwapSite/utils/formatSymbol.ts b/utils/secretjs/SecretSwapSite/utils/formatSymbol.ts deleted file mode 100644 index d99b9ca..0000000 --- a/utils/secretjs/SecretSwapSite/utils/formatSymbol.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { EXCHANGE_MODE } from 'stores/interfaces'; - -// todo: fix this up - proxy token -export const formatSymbol = (mode: EXCHANGE_MODE, symbol: string) => { - if (!symbol || symbol.trim() === '') return ''; - let value = symbol; - value = mode === EXCHANGE_MODE.TO_SCRT ? symbol : `secret${symbol}`; - if (symbol === 'SSCRT') value = mode === EXCHANGE_MODE.TO_SCRT ? 'WSCRT' : `secretSCRT`; - if (symbol === 'SIENNA') value = mode === EXCHANGE_MODE.TO_SCRT ? 'WSIENNA' : `SIENNA`; - return value; -}; diff --git a/utils/secretjs/SecretSwapSite/utils/gasPrices.ts b/utils/secretjs/SecretSwapSite/utils/gasPrices.ts deleted file mode 100644 index 468317c..0000000 --- a/utils/secretjs/SecretSwapSite/utils/gasPrices.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const GAS_FOR_CLAIM = { SEFI: 1_000_000, ALTER: 1_000_000, OTHER: 1_000_000 }; -export const PROPOSAL_BASE_FEE = 350_000; -export const GAS_FOR_EARN_DEPOSIT = { SEFI: 1_000_000, ALTER: 1_000_000, OTHER: 1_000_000 }; -export const GAS_FOR_EARN_WITHDRAW = { SEFI: 1_000_000, ALTER: 1_000_000, OTHER: 1_000_000 }; -export const GAS_FOR_CREATE_PAIR = 2_500_000; -export const GAS_FOR_PROVIDE = 1_000_000; -export const GAS_FOR_APPROVE = 200_000; -export const GAS_FOR_WITHDRAW_LP_FROM_SWAP = 1_200_000; -export const GAS_FOR_BASE_SWAP_ROUTE = 2_000_000; -export const GAS_FOR_SWAP_NATIVE_COIN = 500_000; -export const GAS_FOR_SWAP_DIRECT = 1_200_000; -export const GAS_FOR_VOTE = 250_000; -export const GAS_FOR_CREATE_VOTE = 250_000; -export const GAS_FOR_FINALIZE_VOTE = 250_000; -export const GAS_FOR_WRAP = 250_000; diff --git a/utils/secretjs/SecretSwapSite/utils/index.ts b/utils/secretjs/SecretSwapSite/utils/index.ts deleted file mode 100644 index 4ded813..0000000 --- a/utils/secretjs/SecretSwapSite/utils/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from './date'; -export * from './errors'; -export * from './formatNumber'; -export * from './reflection'; -export * from './misc'; -export * from './decode'; -export * from './validators'; -export * from './uuid'; -export * from './scrt'; -export * from './formatSymbol' diff --git a/utils/secretjs/SecretSwapSite/utils/misc.ts b/utils/secretjs/SecretSwapSite/utils/misc.ts deleted file mode 100644 index 45b55e8..0000000 --- a/utils/secretjs/SecretSwapSite/utils/misc.ts +++ /dev/null @@ -1,10 +0,0 @@ -export const sleep = (ms: number) => { - return new Promise((resolve) => setTimeout(resolve, ms)); -}; - -export const isEmptyObject = (obj: object) => { - for (const i in obj) { - return false; - } - return true; -}; diff --git a/utils/secretjs/SecretSwapSite/utils/reflection.spec.ts b/utils/secretjs/SecretSwapSite/utils/reflection.spec.ts deleted file mode 100644 index 0c3066f..0000000 --- a/utils/secretjs/SecretSwapSite/utils/reflection.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { P } from './reflection'; - -describe('reflection', () => { - interface TestInterface { - field1: number; - field2: number; - } - - it('field1', () => { - const result = P(p => p.field1); - expect(result).toBe('field1'); - }); - - it('field2', () => { - const result = P(m => m.field2); - expect(result).toBe('field2'); - }); -}); diff --git a/utils/secretjs/SecretSwapSite/utils/reflection.ts b/utils/secretjs/SecretSwapSite/utils/reflection.ts deleted file mode 100644 index 66010e2..0000000 --- a/utils/secretjs/SecretSwapSite/utils/reflection.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const P = (property: (object: T) => void) => { - const chaine = property.toString(); - const arr = chaine.match(/(\.)[\S]+/); - return arr[0].slice(1); -}; diff --git a/utils/secretjs/SecretSwapSite/utils/scrt.ts b/utils/secretjs/SecretSwapSite/utils/scrt.ts deleted file mode 100644 index 968bdc5..0000000 --- a/utils/secretjs/SecretSwapSite/utils/scrt.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const wrongNetwork = 'Wrong Network'; -export const unlockToken = 'Unlock'; -export const fixUnlockToken = 'Fix Unlock'; - -const gasPriceRatio = 0.25; - -export const toUscrtFee = (fee: number): string => { - return String(Math.floor(fee * gasPriceRatio) + 1); -}; diff --git a/utils/secretjs/SecretSwapSite/utils/uuid.ts b/utils/secretjs/SecretSwapSite/utils/uuid.ts deleted file mode 100644 index 977a6a5..0000000 --- a/utils/secretjs/SecretSwapSite/utils/uuid.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { v4 as uuidv4 } from 'uuid'; - -export const uuid = () => { - return uuidv4(); -}; diff --git a/utils/secretjs/SecretSwapSite/utils/validators.ts b/utils/secretjs/SecretSwapSite/utils/validators.ts deleted file mode 100644 index 0e0556f..0000000 --- a/utils/secretjs/SecretSwapSite/utils/validators.ts +++ /dev/null @@ -1,107 +0,0 @@ -// import * as _ from 'lodash'; - -// export function createValidate(func: (value: any, data?: any) => boolean, error: any) { -// return { -// validator(rule: any[], value: any, callback: (errors: any[]) => void, storeData?: any) { -// const errors = []; - -// if (func(value, storeData)) { -// errors.push(error); -// } -// callback(errors); -// }, -// }; -// } - -// interface ValidatorFunc { -// (rule: any[], value: T, callback: (errors: any[]) => void): void; -// } - -// export const maxLength = (length: number, msg?: string): ValidatorFunc => (_, value, callback) => { -// const errors = []; - -// if (value.length > length) { -// const defaultMsg = `Превышена допустимая длина текста (${length} символов)`; -// errors.push(msg || defaultMsg); -// } - -// callback(errors); -// }; - -// export const maxAmount = (amount: number, msg?: string): ValidatorFunc => (_, value, callback) => { -// const errors = []; - -// if (value && Number(value) > amount) { -// const defaultMsg = `Exceeded the maximum amount`; -// errors.push(msg || defaultMsg); -// } - -// callback(errors); -// }; - -// export const isTheSameAs = (fieldName: string, err: string) => { -// return { -// ...createValidate((value, formData) => _.get(formData, fieldName) !== value, err), -// validateType: 'requiredValidator', -// }; -// }; - -// export const nonEmptyFilesRule = (_: any, value: File[], cb: (errors: any[]) => void) => { -// const errors = []; - -// if (!value || value.length === 0) { -// errors.push('Прикрепите документы'); -// } - -// cb(errors); -// }; - -// export const isLengthBetween = (minLength: number, maxLength: number) => { -// return { -// validator(rule: any[], value: string, callback: (errors: any[]) => void, storeData?: any) { -// const errors = []; - -// if (!value || value.length < minLength || value.length > maxLength) { -// let error = `Длина значения должна быть от ${minLength} до ${maxLength} [${value.length}]`; -// if (minLength === maxLength) { -// error = `Длина значения должна быть ${minLength} [${value.length}]`; -// } -// errors.push(error); -// } - -// callback(errors); -// }, -// validateType: 'requiredValidator', -// }; -// }; - -// export const limitLength = (value: string | number, limit = 19) => String(value).slice(0, limit); - -// export const oneOfLengths = ( -// lengths: number[], -// message = `Длина значения может быть ${lengths.join(' или ')} символов`, -// ) => createValidate(value => !lengths.includes(value.length), message); - -// export const hasWords = (count: number, message: string) => -// createValidate((value: string) => { -// if (value) { -// const names = value.split(' ').filter(item => item !== ''); -// if (names.length >= count) { -// return false; -// } -// } -// return true; -// }, message); - -// export const moreThanZero = { -// validator(rule: any[], value: any, callback: (errors: any[]) => void, storeData?: any) { -// const errors = []; - -// if (!value || Number(value) <= 0) { -// errors.push('Value must be more than 0'); -// } - -// callback(errors); -// }, -// validateType: 'requiredValidator', -// }; diff --git a/yarn.lock b/yarn.lock index ba00949..cdb79fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -220,11 +220,16 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.10.0": version "4.10.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0" integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA== +"@eslint-community/regexpp@^4.6.1": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + "@eslint/eslintrc@^2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" @@ -372,10 +377,10 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-14.1.3.tgz#73007b64d487bbb95ed83145195f734fc1182d10" integrity sha512-VhgXTvrgeBRxNPjyfBsDIMvgsKDxjlpw4IAUsHCX8Gjl1vtHUYRT3+xfQ/wwvLPDd/6kqfLqk9Pt4+7gysuCKQ== -"@next/eslint-plugin-next@14.1.3": - version "14.1.3" - resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz#31ffb36dbd5d04537aff83eb69ec23007d081608" - integrity sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww== +"@next/eslint-plugin-next@14.2.5": + version "14.2.5" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.5.tgz#f7e3ff3efe40a2855e5f29bc2692175f85913ba8" + integrity sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g== dependencies: glob "10.3.10" @@ -1320,86 +1325,86 @@ resolved "https://registry.yarnpkg.com/@types/stylis/-/stylis-4.2.5.tgz#1daa6456f40959d06157698a653a9ab0a70281df" integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== -"@typescript-eslint/eslint-plugin@^7.12.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.14.1.tgz#90e2f76a5930d553ede124e1f541a39b4417465e" - integrity sha512-aAJd6bIf2vvQRjUG3ZkNXkmBpN+J7Wd0mfQiiVCJMu9Z5GcZZdcc0j8XwN/BM97Fl7e3SkTXODSk4VehUv7CGw== +"@typescript-eslint/eslint-plugin@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz#bf50e9c8dac6bdf15dd1b52ca29448550903558e" + integrity sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.14.1" - "@typescript-eslint/type-utils" "7.14.1" - "@typescript-eslint/utils" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/type-utils" "8.2.0" + "@typescript-eslint/utils" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^5.4.2 || ^6.0.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== +"@typescript-eslint/parser@^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.2.0.tgz#44356312aea8852a3a82deebdacd52ba614ec07a" + integrity sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg== dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/scope-manager" "7.2.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/typescript-estree" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" -"@typescript-eslint/parser@^7.12.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.14.1.tgz#13d97f357aed3c5719f259a6cc3d1a1f065d3692" - integrity sha512-8lKUOebNLcR0D7RvlcloOacTOWzOqemWEWkKSVpMZVF/XVcwjPR+3MD08QzbW9TCGJ+DwIc6zUSGZ9vd8cO1IA== +"@typescript-eslint/parser@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.2.0.tgz#de3993304feb98576d9ffbf10c83ca1bcb68a5dd" + integrity sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg== dependencies: - "@typescript-eslint/scope-manager" "7.14.1" - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/typescript-estree" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/typescript-estree" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== +"@typescript-eslint/scope-manager@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz#cfb437b09a84f95a0930a76b066e89e35d94e3da" + integrity sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" -"@typescript-eslint/scope-manager@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.14.1.tgz#63de7a577bc6fe8ee6e412a5b85499f654b93ee5" - integrity sha512-gPrFSsoYcsffYXTOZ+hT7fyJr95rdVe4kGVX1ps/dJ+DfmlnjFN/GcMxXcVkeHDKqsq6uAcVaQaIi3cFffmAbA== +"@typescript-eslint/scope-manager@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz#4a4bd7e7df5522acc8795c3b6f21e8c41b951138" + integrity sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw== dependencies: - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" -"@typescript-eslint/type-utils@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.14.1.tgz#c183f2f28c4c8578eb80aebc4ac9ace400160af6" - integrity sha512-/MzmgNd3nnbDbOi3LfasXWWe292+iuo+umJ0bCCMCPc1jLO/z2BQmWUUUXvXLbrQey/JgzdF/OV+I5bzEGwJkQ== +"@typescript-eslint/type-utils@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz#5cd7fef50f492e5a0f508bdd40678861a57c3549" + integrity sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w== dependencies: - "@typescript-eslint/typescript-estree" "7.14.1" - "@typescript-eslint/utils" "7.14.1" + "@typescript-eslint/typescript-estree" "8.2.0" + "@typescript-eslint/utils" "8.2.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== +"@typescript-eslint/types@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.2.0.tgz#0feb685f16de320e8520f13cca30779c8b7c403f" + integrity sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA== -"@typescript-eslint/types@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.14.1.tgz#a43a540dbe5df7f2a11269683d777fc50b4350aa" - integrity sha512-mL7zNEOQybo5R3AavY+Am7KLv8BorIv7HCYS5rKoNZKQD9tsfGUpO4KdAn3sSUvTiS4PQkr2+K0KJbxj8H9NDg== +"@typescript-eslint/types@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.2.0.tgz#dfe9895a2812f7c6bf7af863054c22a67060420c" + integrity sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ== -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== +"@typescript-eslint/typescript-estree@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz#5beda2876c4137f8440c5a84b4f0370828682556" + integrity sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA== dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@typescript-eslint/types" "7.2.0" + "@typescript-eslint/visitor-keys" "7.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1407,13 +1412,13 @@ semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/typescript-estree@7.14.1", "@typescript-eslint/typescript-estree@^7.12.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.14.1.tgz#ba7c9bac8744487749d19569e254d057754a1575" - integrity sha512-k5d0VuxViE2ulIO6FbxxSZaxqDVUyMbXcidC8rHvii0I56XZPv8cq+EhMns+d/EVIL41sMXqRbK3D10Oza1bbA== +"@typescript-eslint/typescript-estree@8.2.0", "@typescript-eslint/typescript-estree@^8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz#fbdb93a1c7ac7f1f96ae2de4fc97cd64c60ae894" + integrity sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA== dependencies: - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/visitor-keys" "7.14.1" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1421,30 +1426,30 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.14.1.tgz#3307b8226f99103dca2133d0ebcae38419d82c9d" - integrity sha512-CMmVVELns3nak3cpJhZosDkm63n+DwBlDX8g0k4QUa9BMnF+lH2lr3d130M1Zt1xxmB3LLk3NV7KQCq86ZBBhQ== +"@typescript-eslint/utils@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.2.0.tgz#02d442285925f28d520587185f295f932702e733" + integrity sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.14.1" - "@typescript-eslint/types" "7.14.1" - "@typescript-eslint/typescript-estree" "7.14.1" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/typescript-estree" "8.2.0" -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== +"@typescript-eslint/visitor-keys@7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz#5035f177752538a5750cca1af6044b633610bf9e" + integrity sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A== dependencies: - "@typescript-eslint/types" "6.21.0" + "@typescript-eslint/types" "7.2.0" eslint-visitor-keys "^3.4.1" -"@typescript-eslint/visitor-keys@7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.14.1.tgz#cc79b5ea154aea734b2a13b983670749f5742274" - integrity sha512-Crb+F75U1JAEtBeQGxSKwI60hZmmzaqA3z9sYsVm8X7W5cwLEm5bRe0/uXS6+MR/y8CVpKSR/ontIAIEPFcEkA== +"@typescript-eslint/visitor-keys@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz#f6abb3b6508898a117175ddc11f9b9869cc96834" + integrity sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q== dependencies: - "@typescript-eslint/types" "7.14.1" + "@typescript-eslint/types" "8.2.0" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": @@ -1458,9 +1463,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" - integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== ajv@^6.12.4: version "6.12.6" @@ -2231,7 +2236,14 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.3.1, debug@^4.3.2: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + +debug@^4.3.4: version "4.3.5" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== @@ -2548,14 +2560,14 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-next@14.1.3: - version "14.1.3" - resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.1.3.tgz#f5c75c088c5df35da2a02129cbf5dec9defb3f13" - integrity sha512-sUCpWlGuHpEhI0pIT0UtdSLJk5Z8E2DYinPTwsBiWaSYQomchdl0i60pjynY48+oXvtyWMQ7oE+G3m49yrfacg== +eslint-config-next@^14.2.5: + version "14.2.5" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.2.5.tgz#cdd43d89047eb7391ba25445d5855b4600b6adb9" + integrity sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA== dependencies: - "@next/eslint-plugin-next" "14.1.3" + "@next/eslint-plugin-next" "14.2.5" "@rushstack/eslint-patch" "^1.3.3" - "@typescript-eslint/parser" "^5.4.2 || ^6.0.0" + "@typescript-eslint/parser" "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0" eslint-import-resolver-node "^0.3.6" eslint-import-resolver-typescript "^3.5.2" eslint-plugin-import "^2.28.1" @@ -2738,9 +2750,9 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0"