@ref-finance/ref-sdk 1.1.5 → 1.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ref-sdk.umd.production.min.js","sources":["../src/constant.ts","../src/stable-swap.ts","../src/swap-widget/constant.ts","../src/metaIcons.ts","../src/indexer.ts","../src/v1-swap/parallelSwapLogic.ts","../src/v1-swap/smartRoutingLogic.js","../src/v1-swap/swap.ts","../src/utils.ts","../src/near.ts","../src/ref.ts","../src/dcl-swap/dcl-pool.ts","../src/error.ts","../src/v1-swap/instantSwap.ts","../src/v1-swap/pool.ts","../src/swap-widget/state.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/swap-widget/components.tsx","../src/swap-widget/defaultTokenList.ts","../src/dcl-swap/swap.ts","../src/dcl-swap/limit-order.ts","../src/swap-widget/index.tsx"],"sourcesContent":["import { TokenMetadata } from './types';\n\nexport const FEE_DIVISOR = 10000;\n\nexport const STABLE_LP_TOKEN_DECIMALS = 18;\nexport const RATED_POOL_LP_TOKEN_DECIMALS = 24;\nexport const STORAGE_TO_REGISTER_WITH_MFT = '0.1';\nexport const ONE_YOCTO_NEAR = '0.000000000000000000000001';\nlet ENV: string | undefined = '';\nexport function getConfig(\n env: string | undefined = ENV ||\n process.env.NEAR_ENV ||\n process.env.REACT_APP_REF_SDK_ENV\n) {\n ENV = env;\n switch (env) {\n case 'mainnet':\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: '',\n };\n case 'testnet':\n return {\n networkId: 'testnet',\n nodeUrl: 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: 'https://testnet-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'ref-finance-101.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dcl.ref-dev.testnet',\n };\n default:\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: '',\n };\n }\n}\n\nexport let config = getConfig();\n\nexport let REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n\nexport let WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n\nexport let REF_TOKEN_ID = config.REF_TOKEN_ID;\n\nexport let WNEAR_META_DATA: TokenMetadata = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n};\n\nexport let REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n};\n\nexport const NEAR_META_DATA: TokenMetadata = {\n id: 'NEAR',\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2AAAANgCAIAAADF8JzzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nO3d7VXb2rqw4eQd57/cgZ0KLCqwVwWIChAVYCrAqQBTgUUFERVEVBBTwTYdmArWO/by3uzMfBA+bHlK87r+nTP2WBFSjO/o8SN//Pvvvz8AAMB//T9nAgCA7wlEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAAC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ICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAID/+fDhw/8H0I0VimXUJpsAAAAASUVORK5CYII=',\n};\n\nexport const TokenLinks = {\n NEAR: 'https://awesomenear.com/near-protocol',\n wNEAR: 'https://awesomenear.com/near-protocol',\n REF: 'https://awesomenear.com/ref-finance',\n OCT: 'https://awesomenear.com/octopus-network',\n PARAS: 'https://awesomenear.com/paras',\n SKYWARD: 'https://awesomenear.com/skyward-finance',\n FLX: 'https://awesomenear.com/flux',\n PULSE: 'https://awesomenear.com/pulse',\n DBIO: 'https://awesomenear.com/debio-network',\n MYRIA: 'https://awesomenear.com/myriad-social',\n PXT: 'https://awesomenear.com/cryptoheroes',\n HAPI: 'https://awesomenear.com/hapi',\n OIN: 'https://awesomenear.com/oin-finance',\n ABR: 'https://awesomenear.com/allbridge',\n '1MIL': 'https://awesomenear.com/1millionnfts',\n MARMAJ: 'https://awesomenear.com/marmaj-foundation',\n marmaj: 'https://awesomenear.com/marmaj-foundation',\n USN: 'https://awesomenear.com/decentral-bank',\n '1INCH': 'https://awesomenear.com/1inch-network',\n GRT: 'https://awesomenear.com/the-graph',\n LINK: 'https://awesomenear.com/chainlink',\n Cheddar: 'https://awesomenear.com/cheddar-farm',\n AURORA: 'https://awesomenear.com/aurora-dev',\n $META: 'https://awesomenear.com/meta-pool',\n UMINT: 'https://awesomenear.com/youminter',\n UTO: 'https://awesomenear.com/secret-skellies-society',\n DEIP: 'https://awesomenear.com/deip',\n WOO: 'https://awesomenear.com/woo-dex',\n LINEAR: 'https://awesomenear.com/linear-protocol',\n PEM: 'https://awesomenear.com/pembrock-finance',\n ATO: 'https://awesomenear.com/atocha-protocol',\n SEAT: 'https://awesomenear.com/seatlab-nft',\n FAR: 'https://awesomenear.com/few-and-far',\n BSTN: 'https://awesomenear.com/bastion',\n BRRR: 'https://awesomenear.com/burrow',\n XNL: 'https://awesomenear.com/chronicle',\n KSW: 'https://awesomenear.com/killswitch-finance',\n STNEAR: 'https://awesomenear.com/meta-pool',\n NearX: 'https://awesomenear.com/stader',\n SD: 'https://awesomenear.com/stader',\n DISC: 'https://awesomenear.com/discovol',\n} as Record<string, string>;\n\nexport const CONSTANT_D = 1.0001;\n\nexport const POINTLEFTRANGE = -800000;\nexport const POINTRIGHTRANGE = 800000;\n\nexport const switchEnv = () => {\n config = getConfig();\n REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n REF_TOKEN_ID = config.REF_TOKEN_ID;\n REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n };\n WNEAR_META_DATA = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n };\n return {\n config,\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n REF_TOKEN_ID,\n REF_META_DATA,\n WNEAR_META_DATA,\n };\n};\n","import { StablePool } from './types';\nimport { FEE_DIVISOR } from './constant';\n\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from './utils';\n\nimport Big from 'big.js';\n\nimport _ from 'lodash';\n\nconst tradeFee = (amount: number, trade_fee: number) => {\n return (amount * trade_fee) / FEE_DIVISOR;\n};\n\nexport const calc_d = (amp: number, c_amounts: number[]) => {\n const token_num = c_amounts.length;\n const sum_amounts = _.sum(c_amounts);\n let d_prev = 0;\n let d = sum_amounts;\n for (let i = 0; i < 256; i++) {\n let d_prod = d;\n for (let c_amount of c_amounts) {\n d_prod = (d_prod * d) / (c_amount * token_num);\n }\n d_prev = d;\n const ann = amp * token_num ** token_num;\n const numerator = d_prev * (d_prod * token_num + ann * sum_amounts);\n const denominator = d_prev * (ann - 1) + d_prod * (token_num + 1);\n d = numerator / denominator;\n if (Math.abs(d - d_prev) <= 1) break;\n }\n return d;\n};\n\nexport const calc_y = (\n amp: number,\n x_c_amount: number,\n current_c_amounts: number[],\n index_x: number,\n index_y: number\n) => {\n const token_num = current_c_amounts.length;\n const ann = amp * token_num ** token_num;\n const d = calc_d(amp, current_c_amounts);\n let s = x_c_amount;\n let c = (d * d) / x_c_amount;\n for (let i = 0; i < token_num; i++) {\n if (i !== index_x && i !== index_y) {\n s += current_c_amounts[i];\n c = (c * d) / current_c_amounts[i];\n }\n }\n c = (c * d) / (ann * token_num ** token_num);\n const b = d / ann + s;\n let y_prev = 0;\n let y = d;\n for (let i = 0; i < 256; i++) {\n y_prev = y;\n const y_numerator = y ** 2 + c;\n const y_denominator = 2 * y + b - d;\n y = y_numerator / y_denominator;\n if (Math.abs(y - y_prev) <= 1) break;\n }\n\n return y;\n};\n\nexport const calc_swap = (\n amp: number,\n in_token_idx: number,\n in_c_amount: number,\n out_token_idx: number,\n old_c_amounts: number[],\n trade_fee: number\n) => {\n const y = calc_y(\n amp,\n in_c_amount + old_c_amounts[in_token_idx],\n old_c_amounts,\n in_token_idx,\n out_token_idx\n );\n const dy = old_c_amounts[out_token_idx] - y;\n const fee = tradeFee(dy, trade_fee);\n const amount_swapped = dy - fee;\n return [amount_swapped, fee, dy];\n};\n\nexport const getSwappedAmount = (\n tokenInId: string,\n tokenOutId: string,\n amountIn: string,\n stablePool: StablePool,\n STABLE_LP_TOKEN_DECIMALS: number\n) => {\n const amp = stablePool.amp;\n const trade_fee = stablePool.total_fee;\n\n // depended on pools\n const in_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenInId\n );\n const out_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenOutId\n );\n\n const rates = stablePool.rates.map(r =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r)\n );\n\n const base_old_c_amounts = stablePool.c_amounts.map(amount =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amount)\n );\n\n const old_c_amounts = base_old_c_amounts\n .map((amount, i) =>\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amount || 0).times(new Big(rates[i])).toString()\n )\n )\n )\n .map(amount => Number(amount));\n\n const in_c_amount = Number(\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amountIn).times(new Big(rates[in_token_idx])).toString()\n )\n )\n );\n\n const [amount_swapped, fee, dy] = calc_swap(\n amp,\n in_token_idx,\n in_c_amount,\n out_token_idx,\n old_c_amounts,\n trade_fee\n );\n\n return [\n amount_swapped / Number(rates[out_token_idx]),\n fee,\n dy / Number(rates[out_token_idx]),\n ];\n};\n","import { getConfig } from '../constant';\nexport const REF_WIDGET_STAR_TOKEN_LIST_KEY =\n 'REF_WIDGET_STAR_TOKEN_LIST_VALUE';\n\nexport const REF_WIDGET_ALL_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_TOKENS_LIST_VALUE';\n\nexport const REF_WIDGET_SWAP_IN_KEY = 'REF_WIDGET_SWAP_IN_VALUE';\n\nexport const REF_WIDGET_SWAP_OUT_KEY = 'REF_WIDGET_SWAP_OUT_VALUE';\n\nexport const REF_WIDGET_SWAP_DETAIL_KEY = 'REF_WIDGET_SWAP_DETAIL_VALUE';\n\nexport const DEFAULT_START_TOKEN_LIST_TESTNET = [\n 'wrap.testnet',\n 'usdtt.fakes.testnet',\n 'usdt.fakes.testnet',\n 'ref.fakes.testnet',\n 'usdn.testnet',\n 'eth.fakes.testnet',\n];\n\nexport const DEFAULT_START_TOKEN_LIST_MAINNET = [\n 'wrap.near',\n 'usdt.tether-token.near',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n 'token.v2.ref-finance.near',\n 'usn',\n 'aurora',\n 'token.sweat',\n];\n\nexport interface Theme {\n container: string; // container background\n buttonBg: string; // button background\n primary: string; // primary theme color\n secondary: string; // secondary theme color\n borderRadius: string; // border radius\n fontFamily: string; // font family\n hover: string; // hovering color\n active: string; // active color\n secondaryBg: string; // secondary background color\n borderColor: string; // border color\n iconDefault: string; // default icon color\n iconHover: string; // icon hovering color\n refIcon?: string; // ref icon color\n}\n\nexport const defaultTheme: Theme = {\n container: '#FFFFFF',\n buttonBg: '#00C6A2',\n primary: '#000000',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: '#F7F7F7',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(62, 62, 62, 1)',\n};\n\nexport const defaultDarkModeTheme: Theme = {\n container: '#26343E',\n buttonBg: '#00C6A2',\n primary: '#FFFFFF',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: 'rgba(0, 0, 0, 0.2)',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(183, 201, 214, 1)',\n refIcon: 'white',\n};\n","const icons: { [tokenId: string]: string } = {\n '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near':\n 'https://ref-finance-images.s3.amazonaws.com/images/woo-wtrue.png',\n 'wrap.near':\n 'data:image/png;base64,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',\n 'wrap.testnet':\n 'data:image/png;base64,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',\n '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near':\n 'https://assets.ref.finance/images/4943.png',\n 'berryclub.ek.near': 'https://assets.ref.finance/images/banana.png',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near':\n 'https://assets.ref.finance/images/825.png',\n '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near':\n 'https://assets.ref.finance/images/7083.png',\n '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near':\n 'https://assets.ref.finance/images/1975.png',\n 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near':\n 'https://assets.ref.finance/images/3408.png',\n '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near':\n 'https://assets.ref.finance/images/3717.png',\n '7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near':\n 'https://assets.ref.finance/images/7278.png',\n 'a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near':\n 'https://assets.ref.finance/images/3635.png',\n '50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near':\n 'https://assets.ref.finance/images/4195.png',\n '4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near':\n 'https://assets.ref.finance/images/4687.png',\n '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near':\n 'https://assets.ref.finance/images/2502.png',\n '6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near':\n 'https://assets.ref.finance/images/6758.png',\n 'c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near':\n 'https://assets.ref.finance/images/2586.png',\n 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near':\n 'https://assets.ref.finance/images/6719.png',\n '9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near':\n 'https://assets.ref.finance/images/1518.png',\n '0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near':\n 'https://assets.ref.finance/images/5864.png',\n 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near':\n 'https://assets.ref.finance/images/2396.png',\n '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near':\n 'https://assets.ref.finance/images/6941.png',\n '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near':\n 'https://assets.ref.finance/images/8104.png',\n 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near':\n 'https://assets.ref.finance/images/55sGoBm.png',\n 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near':\n 'https://assets.ref.finance/images/10052.png',\n 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near':\n 'https://assets.ref.finance/images/4222.png',\n 'token.cheddar.near': 'https://assets.ref.finance/images/cheddar.png',\n 'farm.berryclub.ek.near': 'https://assets.ref.finance/images/cucumber.png',\n 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near':\n 'https://assets.ref.finance/images/HAPI.png',\n};\n\nexport default icons;\n","import { config, WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from './constant';\nimport { REF_WIDGET_ALL_TOKENS_LIST_KEY } from './swap-widget/constant';\nimport { REPLACE_TOKENS } from './ref';\nimport metaIconDefaults from './metaIcons';\n\nexport const getTokenPriceList = async (): Promise<any> => {\n return await fetch(config.indexerUrl + '/list-token-price', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(list => {\n return list;\n });\n};\n\nexport const getTokens = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n icon:\n !cur.icon || REPLACE_TOKENS.includes(id)\n ? metaIconDefaults[id]\n : cur.icon,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\n\nexport const getWhiteListTokensIndexer = async (whiteListIds: string[]) => {\n return await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(res => {\n return whiteListIds.reduce((acc, cur, i) => {\n if (\n !res[cur] ||\n !Object.values(res[cur]) ||\n Object.values(res[cur]).length === 0\n )\n return acc;\n\n return {\n ...acc,\n [cur]: { ...res[cur], id: cur },\n };\n }, {});\n })\n .then(res => {\n return Object.values(res);\n });\n};\n","//@ts-nocheck\nimport Big from 'big.js';\n\nimport { Pool } from '../types';\n\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\ninterface FormatedPool extends Pool {\n x?: string;\n y?: string;\n gamma_bps?: Big;\n}\n\n///////////////////////////////\n// Parallel Swap Logic Below //\n///////////////////////////////\n\n/** formatPoolNew\n * This function appends to the existing standard Pool struct and adds attributes that simplify the parallel swap algorithms.\n * Adds attributes \"x\" (for input token reserves in pool), \"y\" (for output token reserves in pool), and \"gamma_bps\" (for 1- fee in bps)\n * Our convention for our algorithm has been to use \"x\" as the input token and \"y\" as the output token.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns newFormatPool\n */\nexport function formatPoolNew(\n pool: Pool,\n inputToken: string,\n outputToken: string\n) {\n let p: FormatedPool = pool;\n let x = p.supplies[inputToken];\n let y = p.supplies[outputToken];\n p['gamma_bps'] = new Big(10000).minus(p.fee);\n p['x'] = x;\n p['y'] = y;\n return p;\n}\n\n/** solveForMuFloat\n * This function takes the set of token pools, the total input of inputToken, and the names of inputToken and outputToken and\n * solves for the Lagrange Multiplier \"mu\". Note that mu must be allowed to be aritrary precision floating point number. Mu will\n * be used in subsequent function calls to determine the best allocations of intputToken to be made per pool.\n * For more detailed math on how this function was derived, please see the white paper:\n * https://github.com/giddyphysicist/ParallelSwapForRefFinance/blob/main/ParallelSwapWhitePaper.pdf\n * @param pools list of pools that contain inputToken and outputToken\n * @param totalDeltaX total allocation (among all pools) being input of inputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n */\nexport function solveForMuFloat(\n pools: Pool[],\n totalDeltaX: string,\n inputToken: string,\n outputToken: string\n) {\n if (pools.length > 0) {\n let numerator = new Big(totalDeltaX);\n let denominator = new Big(0);\n\n for (var i = 0; i < pools.length; i++) {\n let p = formatPoolNew(pools[i], inputToken, outputToken);\n let numAdd = new Big(p.x).times(10000).div(p.gamma_bps);\n numerator = numerator.plus(numAdd);\n let denomAdd = new Big(p.x)\n .times(p.y)\n .div(p.gamma_bps)\n .sqrt()\n .times(100);\n denominator = denominator.plus(denomAdd);\n }\n\n const mu = new Big(numerator).div(denominator);\n return mu;\n } else {\n // console.log('ERROR - could not find pools that satisfy token pair');\n const mu = NaN;\n return mu;\n }\n}\n\n/** calculate_dx_float\n * Once mu has been calculated for a set of pools and total input amount, the next step is\n * determining the total allocation per pool. This function evaluates the amount of input Token to be\n * allocated to the given pool. Note, in our original algorithmic convention, the 'x' variable was for the input token,\n * and the 'y' variable was for the output token. Here, the value dx is the part of the full amount of input token X.\n * Again, the detailed formulae for these operations can be found in the white paper referenced above.\n * @param mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dxFloat the allocation amount determined for the given pool\n */\nexport function calculate_dx_float(\n mu: number | Big,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n let p = formatPoolNew(pool, inputToken, outputToken);\n let radical = new Big(p.x).times(p.y).div(p.gamma_bps);\n let dxFloat = new Big(mu)\n .times(100)\n .times(radical.sqrt())\n .minus(new Big(p.x).times(10000).div(p.gamma_bps));\n return dxFloat;\n}\n\n/** calculate_dy_float\n * Once you have an allocation amount for a given pool, you can use the AMM constant-product formula to determine\n * the expected output amount of output Token.\n * Note, here, as earlier, our algorithmic convention uses \"y\" as the output token, and so \"dy\" is the fraction of\n * the total output of output Token, assuming there could be dy contributions from other parallel pools as well.\n * @param dx_float input allocation amount of inputToken for the given pool\n * @param pool a structure representing the reserves and fees for a given pool.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dyFloat the expected trade out amount out of outputToken\n */\nexport function calculate_dy_float(\n dx_float: number,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n if (dx_float <= 0) {\n return new Big(0);\n }\n let p = formatPoolNew(pool, inputToken, outputToken);\n let dx = new Big(dx_float);\n let denom = new Big(10000).times(p.x).plus(new Big(p.gamma_bps).times(dx));\n let numerator = new Big(p.y).times(dx).times(p.gamma_bps);\n let dyFloat = numerator.div(denom).round();\n return dyFloat;\n}\n\n/** calculateOptimalOutput\n * This is the main function, which calculates optimal values of inputToken to swap into each pool.\n * @param pools list of relevant AMM pools containing inputToken and outputToken\n * @param inputAmount the numeric total amount of inputToken to be traded into the group of swap pools.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns normalizedDxArray an array containing the amount allocations of inputToken per pool in the list of pools.\n */\nexport function calculateOptimalOutput(\n pools: Pool[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let mu = solveForMuFloat(pools, inputAmount, inputToken, outputToken);\n let dxArray: Big[] = [];\n let negativeDxValsFlag = false;\n for (var i = 0; i < pools.length; i++) {\n let pool = formatPoolNew(pools[i], inputToken, outputToken);\n let dx = calculate_dx_float(mu, pool, inputToken, outputToken);\n if (dx.lt(0)) {\n negativeDxValsFlag = true;\n }\n let dxInt = new Big(dx).round();\n dxArray.push(dxInt);\n }\n if (negativeDxValsFlag) {\n dxArray = reducePools(pools, dxArray, inputAmount, inputToken, outputToken);\n }\n let dxArraySum = new Big(0);\n for (var i = 0; i < dxArray.length; i++) {\n dxArraySum = dxArraySum.plus(dxArray[i]);\n }\n let tempAllocationsArray = [];\n for (var i = 0; i < dxArray.length; i++) {\n let ndx = new Big(dxArray[i])\n .times(inputAmount)\n .div(dxArraySum)\n .round();\n tempAllocationsArray.push(ndx);\n }\n let allocationsArray = checkIntegerSumOfAllocations(\n tempAllocationsArray,\n inputAmount\n );\n let normalizedDxArray = [];\n for (var i = 0; i < allocationsArray.length; i++) {\n let ndx = allocationsArray[i];\n normalizedDxArray.push(BigInt(ndx));\n pools[i]['partialAmountIn'] = ndx.toString();\n }\n return normalizedDxArray;\n}\n\n/** reducePools\n * This function is used to implement part of the non-linear slack variables in the lagrange - multiplier\n * solution for parallel swap. Part of what comes out of the math is that sometimes, the optimal allocation for a pool\n * can be negative, which makes no physical sense. When this occurs, that particular pool needs to be flagged and the\n * lagrange constraint applied to force the allocation to be zero.\n * This function takes an already-solved set of pools, input allocation per pool, the total input amount, and the\n * inputToken name and outputToken name, and determines which, if any, allocations need to be set to zero.\n * However, when this occurs, and a pool is essentially ignored from the list, then the calculation for mu must be re-done.\n * So the calculateOptimalOutput function is then called on the reduced set of pools, and if no negative allocation values remain,\n * then the allocations on the reduced set is determined, and values of zero are put in for the 'failed' pools.\n * @param pools list of pools that contain inputToken and outputToken\n * @param dxArray list of input allocation per pool\n * @param inputAmount total amount of inputToken to be traded among the pools\n * @param inputToken the name of the inputToken\n * @param outputToken the name of the outputToken\n * @returns newFullDxVec the new full list of input allocations the same length as dxArray, containing zeros for failed pools.\n */\nexport function reducePools(\n pools: Pool[],\n dxArray: Big[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let goodIndices = [];\n for (var i = 0; i < dxArray.length; i++) {\n let dx = dxArray[i];\n if (dx.gte(0)) {\n goodIndices.push(i);\n }\n }\n if (goodIndices.length < 1) {\n // console.log(\"ERROR OCCURRED -- ALL DX VALUES WERE NEGATIVE\")\n return dxArray;\n }\n let newPools = [];\n for (var j = 0; j < dxArray.length; j++) {\n if (goodIndices.includes(j)) {\n newPools.push(pools[j]);\n }\n }\n let newDxVec = calculateOptimalOutput(\n newPools,\n inputAmount,\n inputToken,\n outputToken\n );\n let goodInd2newdx = {};\n for (var k = 0; k < newDxVec.length; k++) {\n goodInd2newdx[goodIndices[k]] = newDxVec[k];\n }\n let newFullDxVec = [];\n for (var ii = 0; ii < pools.length; ii++) {\n if (goodIndices.includes(ii)) {\n newFullDxVec.push(goodInd2newdx[ii]);\n } else {\n newFullDxVec.push(0);\n }\n }\n return newFullDxVec;\n}\n\nexport function checkIntegerSumOfAllocations(\n allocations: Big[] | string[] | BigInt[],\n totalInput: Big | string | BigInt\n) {\n var totalInput = new Big(totalInput);\n var allocations:\n | Big[]\n | string[]\n | BigInt[] = allocations.map((item: Big | string | BigInt) =>\n new Big(item).round()\n );\n let alloSum = allocations\n .map(item => new Big(item))\n .reduce((a, b) => a.plus(b), new Big(0));\n let offset = totalInput.minus(alloSum);\n //get largest allocation.\n let currMax = new Big(0);\n let currMaxInd = 0;\n for (var i = 0; i < allocations.length; i++) {\n if (allocations[i].gt(currMax)) {\n currMaxInd = i;\n currMax = allocations[i];\n }\n }\n let newAllocations = [];\n for (var j = 0; j < allocations.length; j++) {\n if (j === currMaxInd) {\n newAllocations.push(allocations[j].plus(offset).toString());\n } else {\n newAllocations.push(allocations[j].toString());\n }\n }\n return newAllocations;\n}\n","/* eslint-disable no-undef */\n////////////////////////////////////////////////////////////////////////////\n// SMART ROUTE SWAP LOGIC\n////////////////////////////////////////////////////////////////////////////\nimport Big from 'big.js';\nimport { checkIntegerSumOfAllocations } from './parallelSwapLogic';\n\nimport { TokenMetadata } from '../types';\n\nimport { ftGetTokenMetadata } from '../ref';\n\nimport { percentLess, toNonDivisibleNumber } from '../utils';\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\nfunction bisqrt(value) {\n // For some ridiculous reason, the .sqrt() method for Big decimals is extremely slow (~10-20ms),\n // which isn't so bad until you need to use it a bunch of times.\n // Since we're dealing with super large numbers anyway, we can convert the Big decimal number into a BigInt,\n // then run this BigInt Newton iteration square root function instead, and then convert back into a\n // Big number. And it speeds up the operation by a crazy factor, ~10x faster.\n if (value < BigInt(0)) {\n throw 'square root of negative numbers is not supported';\n }\n\n if (value < BigInt(2)) {\n return value;\n }\n\n function newtonIteration(n, x0) {\n const x1 = (n / x0 + x0) >> BigInt(1);\n if (x0 === x1 || x0 === x1 - BigInt(1)) {\n return x0;\n }\n return newtonIteration(n, x1);\n }\n\n return newtonIteration(value, BigInt(1));\n}\n\nfunction getBetaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n let p = route[0];\n var beta = new Big(p.reserves[path[0]]);\n } else if (route.length == 2) {\n let p1 = route[0];\n let p2 = route[1];\n var beta = new Big(p1.reserves[path[0]]).times(\n new Big(p2.reserves[path[1]])\n );\n }\n return beta;\n}\n\nfunction getEpsilonForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n var epsilon = Big(gamma);\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let gamma1 = new Big(10000).minus(new Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(Big(10000));\n var epsilon = new Big(p2.reserves[path[1]])\n .times(new Big(gamma1))\n .plus(new Big(p1.reserves[path[1]]).times(gamma1).times(gamma2));\n }\n return epsilon;\n}\n\nfunction getAlphaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n //console.log('single hop')\n let p = route[0];\n let inputToken = path[0];\n let outputToken = path[1];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n let key1 = p.token1Id;\n let key2 = p.token2Id;\n let val1 = p.token1Supply;\n let val2 = p.token2Supply;\n p['reserves'] = { [key1]: val1, [key2]: val2 };\n var alpha = new Big(p.reserves[inputToken]).times(\n new Big(p.reserves[outputToken]).times(new Big(gamma))\n );\n } else if (route.length == 2) {\n //console.log('double hop')\n let p1 = route[0];\n let p2 = route[1];\n let key11 = p1.token1Id;\n let key12 = p1.token2Id;\n let val11 = p1.token1Supply;\n let val12 = p1.token2Supply;\n p1['reserves'] = { [key11]: val11, [key12]: val12 };\n let key21 = p2.token1Id;\n let key22 = p2.token2Id;\n let val21 = p2.token1Supply;\n let val22 = p2.token2Supply;\n p2['reserves'] = { [key21]: val21, [key22]: val22 };\n let inputToken = path[0];\n let middleToken = path[1];\n let outputToken = path[2];\n let gamma1 = new Big(10000).minus(Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(new Big(10000));\n let alpha1 = new Big(p1.reserves[inputToken])\n .times(new Big(p1.reserves[middleToken]))\n .times(gamma1);\n let alpha2 = new Big(p2.reserves[middleToken])\n .times(new Big(p2.reserves[outputToken]))\n .times(gamma2);\n var alpha = alpha1.times(alpha2);\n }\n return alpha;\n}\n\nfunction getAlphaSumFromRoutes(routes, nodeRoutes) {\n let alphaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let alpha = getAlphaForRoute(route, nodeRoute);\n // console.log('alpha is...');\n // console.log(alpha.toString());\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let radical = new Big(bisqrt(BigInt(new Big(alpha).round().toFixed())));\n // let radical = new Big(alpha).sqrt();\n let epsilon = getEpsilonForRoute(route, nodeRoute);\n let denom = new Big(epsilon);\n alphaSum = alphaSum.plus(radical.div(denom));\n }\n return alphaSum;\n}\n\nfunction getBetaSumFromRoutes(routes, nodeRoutes) {\n let betaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let num = new Big(getBetaForRoute(route, nodeRoute));\n let denom = new Big(getEpsilonForRoute(route, nodeRoute));\n betaSum = betaSum.plus(num.div(denom));\n }\n return betaSum;\n}\n\nfunction getPhiFromRoutes(routes, nodeRoutes, totalInput) {\n let alphaSum = getAlphaSumFromRoutes(routes, nodeRoutes);\n let betaSum = getBetaSumFromRoutes(routes, nodeRoutes);\n let phi = new Big(totalInput).plus(betaSum).div(alphaSum);\n return phi;\n}\n\nfunction getAllocationForRoute(phi, route, path) {\n let alpha = getAlphaForRoute(route, path);\n let beta = getBetaForRoute(route, path);\n let epsilon = getEpsilonForRoute(route, path);\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let allocation = new Big(phi)\n .abs()\n .times(new Big(bisqrt(BigInt(new Big(alpha).round().toFixed()))))\n .minus(beta)\n .div(epsilon);\n return allocation;\n}\n\nfunction getAllocationVectorForRoutes(phi, routes, nodeRoutes) {\n let allocationVec = [];\n for (var i in routes) {\n allocationVec.push(getAllocationForRoute(phi, routes[i], nodeRoutes[i]));\n }\n return allocationVec;\n}\n\nfunction getOptimalAllocationForRoutes(routes, nodeRoutes, totalInput) {\n // console.log(\"CALLING GET OPTIMAL ALLOCATION FOR ROUTES:\")\n // console.log(routes)\n var totalInput = new Big(totalInput);\n let phi = getPhiFromRoutes(routes, nodeRoutes, totalInput);\n // console.log('PHI CALCULATED TO BE...')\n // console.log(phi.toString())\n let allocations = getAllocationVectorForRoutes(phi, routes, nodeRoutes);\n if (allocations.every(item => item.lt(new Big(0)))) {\n allocations = allocations.map(item => item.times(new Big(-1.0)));\n }\n if (allocations.some(item => item.lt(new Big(0)))) {\n allocations = reduceRoutes(routes, nodeRoutes, allocations, totalInput);\n }\n let sumAllocations = allocations.reduce((a, b) => a.plus(b), new Big(0));\n let normalizedAllocations = allocations.map(a =>\n a.div(sumAllocations).times(new Big(totalInput))\n );\n return normalizedAllocations;\n}\n\nfunction reduceRoutes(routes, nodeRoutes, allocationVec, totalInput) {\n // console.log(\"RUNNING REDUCE ROUTES\")\n var totalInput = new Big(totalInput);\n let goodIndices = [];\n for (var i in allocationVec) {\n let dx = allocationVec[i];\n // console.log('DX IS...')\n // console.log(dx.toString())\n if (dx.gt(new Big(0))) {\n goodIndices.push(i);\n }\n }\n // console.log('GOOD INDICES ARE...');\n // console.log(goodIndices);\n let newRoutes = [];\n let newNodeRoutes = [];\n for (var i in goodIndices) {\n let goodIndex = goodIndices[i];\n newRoutes.push(routes[goodIndex]);\n newNodeRoutes.push(nodeRoutes[goodIndex]);\n }\n allocationVec = getOptimalAllocationForRoutes(\n newRoutes,\n newNodeRoutes,\n totalInput\n );\n let allocationDict = {};\n for (var i in goodIndices) {\n allocationDict[goodIndices[i]] = allocationVec[i];\n }\n var allocationVecNew = [];\n for (var i in routes) {\n if (goodIndices.includes(i)) {\n allocationVecNew.push(allocationDict[i]);\n } else {\n let zeroAllocation = new Big(0);\n allocationVecNew.push(zeroAllocation);\n }\n }\n return allocationVecNew;\n}\n\nfunction getNodeRoutesFromPathsAndPoolChains(paths, poolChains) {\n let multiplicity = [];\n for (var i in poolChains) {\n let pc = poolChains[i];\n let mul = pc\n .map(item => item.length)\n .reduce((elem1, elem2) => elem1 * elem2, 1);\n multiplicity.push(mul);\n }\n let nodeRoutes = [];\n for (var j in paths) {\n let path = paths[j];\n let m = multiplicity[j];\n for (var k = 0; k < m; k++) {\n nodeRoutes.push(path);\n }\n }\n return nodeRoutes;\n}\n\nfunction getPoolChainFromPaths(paths, pools, threshold = 0.001) {\n let poolChains = [];\n for (var pathInd in paths) {\n let path = paths[pathInd];\n let chain = [];\n let pairs = [];\n for (var i = 0; i < path.length - 1; i++) {\n pairs.push([path[i], path[i + 1]]);\n }\n for (var pairInd in pairs) {\n let pair = pairs[pairInd];\n // console.log(pair);\n let tokenPools = getPoolsByToken1ANDToken2(pools, pair[0], pair[1]);\n chain.push(tokenPools);\n }\n poolChains.push(chain);\n }\n // return poolChains;\n let culledPoolChains = getCulledPoolChains(poolChains, threshold);\n\n return culledPoolChains;\n}\n\nfunction getCulledPoolChains(poolChains, threshold = 0.001) {\n let newChains = [];\n for (var pathInd in poolChains) {\n let path = poolChains[pathInd];\n let newPath = [];\n for (var legInd in path) {\n let leg = path[legInd];\n let culledPath = cullPoolsWithInsufficientLiquidity(leg, threshold);\n newPath.push(culledPath);\n }\n newChains.push(newPath);\n }\n return newChains;\n}\n\nfunction getRoutesFromPoolChain(poolChains) {\n let routes = [];\n for (var pci in poolChains) {\n let poolChain = poolChains[pci];\n //get cartesian product of each pool chain to get the list of routes.\n let newRoutes = cartesianProduct(poolChain);\n routes.push(...newRoutes);\n }\n for (var i in routes) {\n if (!routes[i].length) {\n routes[i] = [routes[i]];\n }\n }\n return routes;\n}\n\nfunction getOutputSingleHop(pool, inputToken, outputToken, totalInput) {\n var totalInput = new Big(totalInput);\n // check if pool is forward or backward for inputToken/outputToken cf. token1Id/token2Id\n if (inputToken === pool.token1Id && outputToken === pool.token2Id) {\n // forward Pool\n var reserves = {\n [inputToken]: new Big(pool.token1Supply),\n [outputToken]: new Big(pool.token2Supply),\n };\n } else if (inputToken === pool.token2Id && outputToken === pool.token1Id) {\n // reverse pool\n var reserves = {\n [outputToken]: new Big(pool.token1Supply),\n [inputToken]: new Big(pool.token2Supply),\n };\n } else {\n return new Big(0);\n }\n let gamma = new Big(10000).minus(new Big(pool.fee)).div(new Big(10000));\n // console.log(totalInput)\n // console.log(gamma)\n // console.log(reserves)\n let num = totalInput.times(gamma).times(reserves[outputToken]);\n let denom = reserves[inputToken].plus(gamma.times(totalInput));\n return num.div(denom);\n}\n\nfunction getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n totalInput\n) {\n var totalInput = new Big(totalInput);\n for (var poolIndex in pools) {\n let p = pools[poolIndex];\n p['gamma'] = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n }\n let p1 = pools[0];\n let p2 = pools[1];\n\n if (inputToken === p1.token1Id && middleToken === p1.token2Id) {\n // forward Pool\n p1['reserves'] = {\n [inputToken]: new Big(p1.token1Supply),\n [middleToken]: new Big(p1.token2Supply),\n };\n } else if (middleToken === p1.token1Id && inputToken === p1.token2Id) {\n //reverse pool\n p1['reserves'] = {\n [middleToken]: new Big(p1.token1Supply),\n [inputToken]: new Big(p1.token2Supply),\n };\n }\n\n if (middleToken === p2.token1Id && outputToken === p2.token2Id) {\n // forward Pool\n p2['reserves'] = {\n [middleToken]: new Big(p2.token1Supply),\n [outputToken]: new Big(p2.token2Supply),\n };\n } else if (outputToken === p2.token1Id && middleToken === p2.token2Id) {\n //reverse pool\n p2['reserves'] = {\n [outputToken]: new Big(p2.token1Supply),\n [middleToken]: new Big(p2.token2Supply),\n };\n }\n\n let c1 = new Big(p1.reserves[middleToken]);\n let a1 = new Big(p1.reserves[inputToken]);\n let c2 = new Big(p2.reserves[middleToken]);\n let b2 = new Big(p2.reserves[outputToken]);\n let gamma1 = p1.gamma;\n let gamma2 = p2.gamma;\n let num = totalInput\n .times(c1)\n .times(b2)\n .times(gamma1)\n .times(gamma2);\n let denom = c2\n .times(a1)\n .plus(\n totalInput.times(c2.times(gamma1).plus(c1.times(gamma1).times(gamma2)))\n );\n // denom = c2*a1 + totalInput * (c2*gamma1 + c1*gamma1*gamma2)\n\n return num.div(denom);\n}\n\nfunction getOutputFromRoute(route, nodeRoute, allocation) {\n if (new Big(allocation).eq(new Big(0))) {\n return new Big(0);\n } else {\n var allocation = new Big(allocation);\n }\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // single hop\n let inputToken = nodeRoute[0];\n let outputToken = nodeRoute[1];\n let pool = route[0];\n var output = getOutputSingleHop(pool, inputToken, outputToken, allocation);\n } else if (route.length == 2) {\n // DOUBLE HOP\n let inputToken = nodeRoute[0];\n let middleToken = nodeRoute[1];\n let outputToken = nodeRoute[2];\n let pools = route;\n var output = getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n allocation\n );\n }\n return output;\n}\n\nfunction getOptOutputVec(routes, nodeRoutes, totalInput) {\n let allocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n let result = [];\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let allocation = allocations[i];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n result.push(output);\n }\n return {\n result: result,\n allocations: allocations,\n };\n //NOTE -- I made this return an object instead of the tuple returned in python. need to check the places it is called, and specify\n // result field instead of tuple 0 position, and allocations field instead of tuple 1 position.\n}\n\nfunction getBestOptInputAndOutputSlower(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return { input: inputRefined, output: res1 };\n } else {\n return { input: inputRaw, output: res2 };\n }\n}\n\nfunction getBestOptInputAndOutput(routes, nodeRoutes, totalInput) {\n // let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n // let outputRefined = refDict.result;\n // let inputRefined = refDict.allocations;\n // inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n let res = outputRaw\n .map(v => new Big(v))\n .reduce((bv1, bv2) => bv1.plus(bv2), new Big(0));\n\n return {\n input: inputRaw,\n output: res,\n };\n}\n\nfunction getBestOptOutput(routes, nodeRoutes, totalInput) {\n let outputRefined = getOptOutputVecRefined(routes, nodeRoutes, totalInput)\n .result;\n let outputRaw = getOptOutputVec(routes, nodeRoutes, totalInput).result;\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n if (res1.gt(res2)) {\n return res1;\n } else {\n return res2;\n }\n}\n\nfunction getBestOptInput(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return inputRefined;\n } else {\n return inputRaw;\n }\n}\n\nfunction getOptOutputVecRefined(routes, nodeRoutes, totalInput) {\n // need to calculate full result.\n // if direct pools exist, need to calculate parallel result. if not, this portion is set to zero output.\n\n // need to compare between outputs of the two results above.\n\n let initLengthRoutes = routes.length;\n let directRouteInds = [];\n for (var routeInd in routes) {\n let route = routes[routeInd];\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n directRouteInds.push(routeInd);\n }\n }\n // console.log('DIRECT ROUTE INDS ARE')\n // console.log(directRouteInds)\n // if (directRouteInds.length < 1) {\n var fullResultAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n var fullResult = [];\n for (var i in routes) {\n let r = routes[i];\n let nr = nodeRoutes[i];\n let a = fullResultAllocations[i];\n let output = getOutputFromRoute(r, nr, a);\n fullResult.push(output);\n }\n var fullResultTotal = fullResult.reduce((a, b) => a.plus(b), new Big(0));\n\n // } else {\n if (directRouteInds.length > 0) {\n // console.log('DOING SINGLE HOP ONLY')\n let droutes = [];\n let dnodeRoutes = [];\n for (var dri in directRouteInds) {\n let ind = directRouteInds[dri];\n droutes.push(routes[ind]);\n dnodeRoutes.push(nodeRoutes[ind]);\n }\n let dallocations = getOptimalAllocationForRoutes(\n droutes,\n dnodeRoutes,\n totalInput\n );\n let dallocDict = {};\n for (var dd in dallocations) {\n dallocDict[directRouteInds[dd]] = dallocations[dd];\n }\n var pallocations = [];\n\n for (var ii = 0; ii < initLengthRoutes; ii++) {\n if (directRouteInds.includes(ii.toString())) {\n //console.log('ADDING ALLOCATION FOR SINGLE ROUTE')\n pallocations.push(dallocDict[ii]);\n } else {\n pallocations.push(new Big(0));\n }\n }\n var presult = [];\n for (var j in routes) {\n let route = routes[j];\n let nodeRoute = nodeRoutes[j];\n let allocation = pallocations[j];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n presult.push(output);\n }\n var presultTotal = presult.reduce((a, b) => a.plus(b), new Big(0));\n } else {\n var presultTotal = new Big(0);\n }\n if (presultTotal.gt(fullResultTotal)) {\n var result = presult;\n var allocations = pallocations;\n } else {\n var result = fullResult;\n var allocations = fullResultAllocations;\n }\n // NEED TO COMPARE BETWEEEN DIRECT AND MULTI HOP TO GET BEST OUTPUT\n return {\n result: result,\n allocations: allocations,\n };\n}\n\nasync function getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength = 3,\n threshold = 0.001\n) {\n var totalInput = new Big(totalInput);\n let paths = await getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength\n );\n if (!paths.length) {\n return {\n allocations: [],\n outputs: new Big(0),\n routes: [],\n nodeRoutes: [],\n };\n }\n let poolChains = await getPoolChainFromPaths(paths, pools, threshold);\n\n let routes = await getRoutesFromPoolChain(poolChains);\n let nodeRoutes = await getNodeRoutesFromPathsAndPoolChains(paths, poolChains);\n // let allocations = await getBestOptInput(routes, nodeRoutes, totalInput);\n // // fix integer rounding for allocations:\n // allocations = checkIntegerSumOfAllocations(allocations, totalInput);\n // let outputs = getBestOptOutput(routes, nodeRoutes, totalInput);\n let inputOutput = await getBestOptInputAndOutput(\n routes,\n nodeRoutes,\n totalInput\n );\n let allocations = inputOutput.input;\n let outputs = inputOutput.output;\n\n return {\n allocations: allocations,\n outputs: outputs,\n routes: routes,\n nodeRoutes: nodeRoutes,\n };\n}\n\nfunction getHopsFromRoutes(routes, nodeRoutes, allocations) {\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n let hop = {\n pool: route[0],\n allocation: allocation,\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n };\n hops.push(hop);\n }\n return hops;\n}\n\nfunction distillHopsByPool(hops) {\n // console.log('some HOPS =');\n // console.log(hops);\n let distilledHops = [];\n let poolIds = [];\n let poolId2allocation = {};\n for (var i in hops) {\n let hop = hops[i];\n if (hop.allocation === '0') {\n continue;\n }\n // console.log(`HOP ${i} IS...`);\n // console.log(hop);\n let poolId = hop.pool['id'];\n if (poolIds.includes(poolId)) {\n poolId2allocation[poolId] = new Big(poolId2allocation[poolId])\n .plus(new Big(hop.allocation))\n .toString();\n } else {\n poolId2allocation[poolId] = new Big(hop.allocation).toString();\n poolIds.push(poolId);\n }\n }\n // let poolsWithOrder = [...new Set(...hops.map((item) => item.pool))]\n let keys = Object.keys(poolId2allocation);\n for (var j in keys) {\n var poolId = keys[j];\n let hop = hops.filter(\n item => item.pool.id.toString() === poolId.toString()\n )[0];\n let distilledHop = {\n pool: hop.pool,\n allocation: poolId2allocation[poolId],\n inputToken: hop.inputToken,\n outputToken: hop.outputToken,\n };\n distilledHops.push(distilledHop);\n }\n return distilledHops;\n}\n\nfunction getDistilledHopActions(distilledHops, slippageTolerance) {\n let actions = [];\n for (var i in distilledHops) {\n let hop = distilledHops[i];\n let expectedAmountOut = getOutputSingleHop(\n hop.pool,\n hop.inputToken,\n hop.outputToken,\n hop.allocation\n );\n let minimumAmountOut = new Big(expectedAmountOut)\n .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n .round()\n .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n let action = {\n pool_id: hop.pool.id,\n token_in: hop.inputToken,\n token_out: hop.outputToken,\n amount_in: hop.allocation,\n min_amount_out: minimumAmountOut,\n };\n actions.push(action);\n }\n return actions;\n}\nfunction getMiddleTokenTotalsFromFirstHopActions(firstHopActions) {\n let middleTokens = [...new Set(firstHopActions.map(item => item.token_out))];\n let middleTokenTotals = {};\n for (var i in middleTokens) {\n let middleToken = middleTokens[i];\n let mtActions = firstHopActions.filter(\n item => item.token_out === middleToken\n );\n let mtTotal = mtActions\n .map(item => new Big(item.min_amount_out))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n middleTokenTotals[middleToken] = mtTotal;\n }\n return middleTokenTotals;\n}\nfunction getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n) {\n // get routes that use middle token.\n // (input route alloction) /sum(input allocations of routes with middle token) * (total_middleToken)\n let mask = [];\n for (var i in nodeRoutes) {\n if (nodeRoutes[i][1] === middleToken) {\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n let froutes = [];\n let fallocations = [];\n let fnoderoutes = [];\n for (var i in routes) {\n if (mask[i]) {\n froutes.push(routes[i]);\n fallocations.push(allocations[i]);\n fnoderoutes.push(nodeRoutes[i]);\n }\n }\n let sumfallocations = fallocations.reduce(\n (a, b) => new Big(a).plus(new Big(b)),\n new Big(0)\n );\n let middleAllocations = fallocations.map(item =>\n new Big(item).div(sumfallocations).times(new Big(middleTokenTotal))\n );\n let secondHopRoutes = froutes.map(item => [item[1]]);\n let secondHopNodeRoutes = fnoderoutes.map(item => [item[1], item[2]]);\n middleAllocations = checkIntegerSumOfAllocations(\n middleAllocations,\n middleTokenTotal\n );\n return {\n routes: secondHopRoutes,\n nodeRoutes: secondHopNodeRoutes,\n allocations: middleAllocations,\n };\n}\n\nfunction getHopActionsFromRoutes(routes, nodeRoutes, allocations) {\n // console.log('INSIDE GET HOP ACTIONS FROM ROUTES');\n // console.log('ROUTES ARE...');\n // console.log(routes);\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n // console.log('ALLOCATIONS ARE...');\n // console.log(allocations);\n let totalInput = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (new Big(allocation).eq(new Big(0))) {\n continue;\n }\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n for (var j in route) {\n let pool = route[j];\n // console.log('J IS...');\n // console.log(j);\n // console.log('NODE ROUTE IS...');\n // console.log(nodeRoute);\n if (j == 0) {\n //first hop.\n // console.log(nodeRoute[0]);\n // console.log(nodeRoute[1]);\n var hop = {\n pool: pool,\n allocation: allocation.toString(),\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('FIRST HOP IS...');\n // console.log(hop);\n hops.push(hop);\n if (nodeRoute.length > 2) {\n var middleTokenAllocation = getOutputSingleHop(\n pool,\n nodeRoute[0],\n nodeRoute[1],\n allocation\n );\n }\n } else {\n // second hop\n var hop = {\n pool: pool,\n allocation: middleTokenAllocation.toString(),\n inputToken: nodeRoute[1],\n outputToken: nodeRoute[2],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('SECOND HOP IS...');\n // console.log(hop);\n hops.push(hop);\n }\n }\n }\n // console.log('HOP ACTIONS FOUND TO BE');\n // console.log(hops);\n return hops;\n}\n\n// TODO: Clean this function. I don't need all the \"actions\" just the hops.\n// TODO: re-order actions to ensure each route is complete with zero input for second hop before starting next route.\nfunction getActionListFromRoutesAndAllocations(\n routes,\n nodeRoutes,\n allocations\n) {\n // REPLACE THE CODE BELOW WITH THE FUNCTION HERE.\n return getHopActionsFromRoutes(routes, nodeRoutes, allocations);\n var actions = [];\n var all_hops = [];\n let firstHops = getHopsFromRoutes(routes, nodeRoutes, allocations);\n\n firstHops = firstHops.filter(hop => new Big(hop.allocation).gt(new Big(0)));\n all_hops.push(...firstHops);\n let distilledFirstHops = distillHopsByPool(firstHops);\n let firstHopActions = getDistilledHopActions(\n distilledFirstHops,\n slippageTolerance\n );\n actions.push(...firstHopActions);\n let middleTokenTotals = getMiddleTokenTotalsFromFirstHopActions(\n firstHopActions\n );\n // console.log('first hop actions are...');\n // console.log(firstHopActions);\n let middleTokens = Object.keys(middleTokenTotals);\n // console.log('middle token totals are...');\n // console.log(middleTokenTotals);\n // console.log('middle tokens are...');\n // console.log(middleTokens);\n for (var tokenIndex in middleTokens) {\n var secondHops = [];\n let middleToken = middleTokens[tokenIndex];\n // console.log('current middle token is ');\n // console.log(middleToken);\n let middleTokenTotal = middleTokenTotals[middleToken];\n // console.log('current middle token total is...');\n // console.log(middleTokenTotal);\n let middleTokenRoutesWithAllocations = getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n );\n // console.log('current middle tokens routes with allocations are...');\n // console.log(middleTokenRoutesWithAllocations);\n let middleTokenRoutes = middleTokenRoutesWithAllocations.routes;\n let middleTokenAllocations = middleTokenRoutesWithAllocations.allocations;\n let middleTokenNodeRoutes = middleTokenRoutesWithAllocations.nodeRoutes;\n // console.log('middle token routes are...');\n // console.log(middleTokenRoutes);\n // console.log('middle token allocations are...');\n // console.log(middleTokenAllocations);\n // console.log('middle token node routes are...');\n // console.log(middleTokenNodeRoutes);\n secondHops.push(\n ...getHopsFromRoutes(\n middleTokenRoutes,\n middleTokenNodeRoutes,\n middleTokenAllocations\n )\n );\n // console.log('CURRENT SECOND HOPS', secondHops);\n // console.log(secondHops.length);\n // console.log(secondHops.map((hop) => hop.allocation));\n // console.log('filter out zero allocation 2nd hops:');\n secondHops = secondHops.filter(hop =>\n new Big(hop.allocation).gt(new Big(0))\n );\n // console.log(secondHops);\n all_hops.push(...secondHops);\n // console.log('second hops are currently...');\n // console.log(secondHops);\n let distilledSecondHopsForToken = distillHopsByPool(secondHops);\n // console.log('distilled second hops are...');\n let secondHopActionsForToken = getDistilledHopActions(\n distilledSecondHopsForToken,\n slippageTolerance\n );\n // console.log(secondHopActionsForToken);\n actions.push(...secondHopActionsForToken);\n }\n\n //TODO: NEED TO RUN INTEGER ROUNDING FUNCTION ON MIDDLE TOKEN ALLOCATIONS\n\n // TODO: check the node routes. for double-hop cases, find the hop action for each hop.\n // For now, we are assuming no parallel swaps if there is a double-hop.\n\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n // We only have to worry about re-ordering the actions for cases (3) and (4).\n\n let orderedHops = orderHops(all_hops, routes, nodeRoutes, allocations);\n\n // console.log('ALL HOPS', all_hops);\n return orderedHops;\n // return actions;\n}\n\nfunction orderHops(hops, routes, nodeRoutes, allocations) {\n // first get rid of zero allocation routes\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n let filteredRoutes = [];\n let filteredNodeRoutes = [];\n let filteredAllocations = [];\n for (var i in routes) {\n // remove zero-allocation routes.\n let allocation = new Big(allocations[i]);\n if (allocation.gt(new Big(0))) {\n filteredAllocations.push(allocation);\n filteredRoutes.push(routes[i]);\n filteredNodeRoutes.push(nodeRoutes[i]);\n }\n // console.log('FILTERED NODE ROUTES ARE...');\n // console.log(filteredNodeRoutes);\n }\n // next check node routes to see if it is case 1, 2, 3, or 4.\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n if (filteredNodeRoutes.length === 1) {\n // only one route.\n let currentNodeRoute = filteredNodeRoutes[0];\n if (currentNodeRoute.length === 2) {\n // case 1.\n return hops;\n } else {\n // case 3. assume there are only 3 nodes (double-hop)\n //make sure order of hops is such that input token precedes output token.\n //make sure the amount_in for second hop is zero (which will grab all of output of first hop to use.)\n let firstHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[0]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[1]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n\n let orderedHops = [firstHop, secondHop];\n return orderedHops;\n }\n } else if (filteredNodeRoutes.length === 2) {\n // two routes.\n let lengthNodeRoutes = filteredNodeRoutes.map(nr => nr.length);\n // sub cases:\n // [2,2] -- parallel swap. (direct) -- case 2\n // [2,3] -- direct swap in parallel with double hop.\n // [3,2] -- double hop in parallel with direct swap.\n // [3,3] -- double hop in parallel with double hop. -- case 4\n let orderedHops = [];\n if (arrayEquals(lengthNodeRoutes, [2, 2])) {\n return hops;\n } else if (arrayEquals(lengthNodeRoutes, [2, 3])) {\n directNodeRoute = filteredNodeRoutes[0];\n doubleNodeRoute = filteredNodeRoutes[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 2])) {\n directNodeRoute = filteredNodeRoutes[1];\n doubleNodeRoute = filteredNodeRoutes[0];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 3])) {\n orderedHops = [];\n\n for (var i in filteredNodeRoutes) {\n let doubleNodeRoute = filteredNodeRoutes[i];\n let doubleHopMiddleToken = doubleNodeRoute[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === doubleNodeRoute[0] &&\n hop.outputToken === doubleHopMiddleToken\n )[0];\n let secondHop = hops.filter(\n hop =>\n hop.inputToken === doubleHopMiddleToken &&\n hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n orderedHops.push(firstHop);\n orderedHops.push(secondHop);\n }\n return orderedHops;\n } else {\n return hops;\n }\n for (var i in filteredNodeRoutes) {\n let currentNodeRoute = filteredNodeRoutes[i];\n if (currentNodeRoute.length === 2) {\n }\n }\n }\n\n return hops;\n}\n\n// function getActionListFromRoutesAndAllocationsORIG(\n// routes,\n// nodeRoutes,\n// allocations,\n// slippageTolerance\n// ) {\n// let actions = [];\n// for (var i in routes) {\n// let route = routes[i];\n// let nodeRoute = nodeRoutes[i];\n// let allocation = new Big(allocations[i]);\n// if (allocation.eq(new Big(0))) {\n// continue;\n// }\n// if (!route.length) {\n// route = [route];\n// }\n// if (route.length === 1) {\n// //single hop. only one action.\n// let pool = route[0];\n// let poolId = pool.id;\n// let inputToken = nodeRoute[0];\n// let outputToken = nodeRoute[1];\n// let expectedAmountOut = getOutputSingleHop(\n// pool,\n// inputToken,\n// outputToken,\n// allocation\n// );\n// let minimumAmountOut = expectedAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n// let action = {\n// pool_id: poolId,\n// token_in: inputToken,\n// token_out: outputToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOut.toString(),\n// };\n// actions.push(action);\n// } else if (route.length === 2) {\n// // double hop. two actions.\n// let pool1 = route[0];\n// let pool2 = route[1];\n// let pool1Id = pool1.id;\n// let pool2Id = pool2.id;\n// let inputToken = nodeRoute[0];\n// let middleToken = nodeRoute[1];\n// let outputToken = nodeRoute[2];\n// let expectedAmountOutFirstHop = getOutputSingleHop(\n// pool1,\n// inputToken,\n// middleToken,\n// allocation\n// );\n// let minimumAmountOutFirstHop = expectedAmountOutFirstHop\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n\n// let action1 = {\n// pool_id: pool1Id,\n// token_in: inputToken,\n// token_out: middleToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOutFirstHop,\n// };\n// let expectedFinalAmountOut = getOutputSingleHop(\n// pool2,\n// middleToken,\n// outputToken,\n// minimumAmountOutFirstHop\n// );\n// let minimumAMountOutSecondHop = expectedFinalAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString();\n// let action2 = {\n// pool_id: pool2Id,\n// token_in: middleToken,\n// token_out: outputToken,\n// amount_in: minimumAmountOutFirstHop,\n// min_amount_out: minimumAMountOutSecondHop,\n// };\n// actions.push(action1);\n// actions.push(action2);\n// }\n// }\n// return actions;\n// }\n\nfunction* range(start, end) {\n for (; start <= end; ++start) {\n yield start;\n }\n}\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction* numericCombinations(n, r, loc = []) {\n var idx = loc.length;\n if (idx === r) {\n yield loc;\n return;\n }\n for (let next of range(idx ? last(loc) + 1 : 0, n - r + idx)) {\n yield* numericCombinations(n, r, loc.concat(next));\n }\n}\n\nfunction* combinations(arr, r) {\n for (let idxs of numericCombinations(arr.length, r)) {\n yield idxs.map(i => arr[i]);\n }\n}\n\n// #middleTokenTotals = getMiddleTokenTotals(routes,nodeRoutes,allocations)\n// #TODO: complete this function with middle token checks.\n\n// #consider all routes of length 2 with non-zero allocation. (double-hops)\n// # among these, check for parallel swaps. That is, check for common node routes\n// # for first hop. Then check for common node routes on second hop.\n// # when common node routes occur for the first hop:\n// # 1. Calculate the total expected output of intermediate token.\n// # 2.\n// # when common node routes occur for the second hop:\n// # 1. get a ratio of the input allocations of the full routes associated with\n// # these common node routes. allocate the total intermediate token output\n// # toward these 2nd hop routes in the same ratio as their route input allocations.\n\nexport async function getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n maxPathLength = 3,\n threshold = 0.001,\n numberOfRoutesLimit = 2,\n MAX_NUMBER_PARALLEL_POOLS = 4,\n decimalsCulledPoolIds = []\n) {\n if (!totalInput) {\n return [];\n }\n var totalInput = new Big(totalInput);\n\n // remove pools that have an id from the decimalCulledPoolIds\n pools = pools.filter(p => !decimalsCulledPoolIds.includes(p.id));\n\n let resDict = await getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength,\n threshold\n );\n\n let allocations = resDict.allocations;\n\n // let outputs = resDict.outputs;\n let routes = resDict.routes;\n let nodeRoutes = resDict.nodeRoutes;\n\n let sortedIndexValues = argsort(allocations);\n let topIndices = sortedIndexValues.slice(0, 10);\n var reducedRoutes = [];\n var reducedNodeRoutes = [];\n for (var ind of topIndices) {\n reducedRoutes.push(routes[ind]);\n reducedNodeRoutes.push(nodeRoutes[ind]);\n }\n routes = reducedRoutes;\n nodeRoutes = reducedNodeRoutes;\n\n // TODO: compare pairs of routes to get the best allocation pair-wise.\n var currentBestOutput = new Big(0);\n var bestResDict = { routes: [] };\n var bestAllocations = resDict.allocations;\n var bestNodeRoutes = resDict.nodeRoutes;\n var bestRoutes = resDict.routes;\n // first check parallel swap with 4 actions. store result.\n var parallelNodeRoutes = [];\n var parallelRoutes = [];\n for (var n in bestRoutes) {\n let currentNodeRoute = bestNodeRoutes[n];\n if (currentNodeRoute.length == 2) {\n parallelNodeRoutes.push(currentNodeRoute);\n parallelRoutes.push(bestRoutes[n]);\n }\n }\n // console.log(`${parallelNodeRoutes.length} parallel routes found...`);\n var bestRoutesAreParallel = false;\n if (parallelNodeRoutes.length > 0) {\n // first calculate the expected result using only parallel routes.\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(parallelRoutes, parallelNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n parallelRoutes,\n parallelNodeRoutes,\n totalInput\n );\n let parallellAllocations = filteredAllocationsAndOutputs.allocations;\n let parallelOutputs = filteredAllocationsAndOutputs.result;\n\n if (parallellAllocations.length > MAX_NUMBER_PARALLEL_POOLS) {\n // now sort by allocation value to the top 4 parallel swaps:\n let sortIndices = argsort(parallellAllocations);\n\n sortIndices = sortIndices.slice(0, MAX_NUMBER_PARALLEL_POOLS);\n var filteredParallelRoutes = [];\n var filteredParallelNodeRoutes = [];\n for (var i in sortIndices) {\n filteredParallelRoutes.push(parallelRoutes[sortIndices[i]]);\n filteredParallelNodeRoutes.push(parallelNodeRoutes[sortIndices[i]]);\n }\n filteredAllocationsAndOutputs = getOptOutputVec(\n filteredParallelRoutes,\n filteredParallelNodeRoutes,\n totalInput\n );\n parallellAllocations = filteredAllocationsAndOutputs.allocations;\n parallelOutputs = filteredAllocationsAndOutputs.result;\n }\n\n let parallelOutput = parallelOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(parallelOutput).gt(currentBestOutput)) {\n bestAllocations = parallellAllocations;\n currentBestOutput = parallelOutput;\n // console.log(\n // 'BEST OUTPUT FROM PARALLEL SWAPS IS NOW... ',\n // currentBestOutput.toString()\n // );\n bestRoutes = parallelRoutes;\n bestNodeRoutes = parallelNodeRoutes;\n bestRoutesAreParallel = true;\n }\n }\n var canHaveTwoRoutes = false;\n // initialize this variable to check if we can have two routes, or if all routes share a pool for an edge case.\n // console.log('THE NUMBER OF ROUTES IS...', routes.length);\n\n for (var i in routes) {\n for (var j in routes) {\n if (j > i) {\n var route1 = routes[i];\n var route2 = routes[j];\n var nodeRoute1 = nodeRoutes[i];\n var nodeRoute2 = nodeRoutes[j];\n // check if they share a pool.\n let route1PoolIds = new Set(route1.map(r => r.id));\n let route2PoolIds = new Set(route2.map(r => r.id));\n var sharePool = false;\n for (var route1PoolId of route1PoolIds) {\n if (route2PoolIds.has(route1PoolId)) {\n sharePool = true;\n }\n }\n if (sharePool) {\n // routes are not independent. skip this pair.\n // console.log('skipping this pair because pool was shared.');\n continue;\n } else {\n canHaveTwoRoutes = true;\n let currentRoutes = [route1, route2];\n let currentNodeRoutes = [nodeRoute1, nodeRoute2];\n\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n\n // if (currentResDict.outputs.gt(currentBestOutput)) {\n // console.log('DIFF IS...', currentResDict.outputs.minus(currentBestOutput).toString());\n // bestResDict = currentResDict;\n // currentBestOutput = bestResDict.outputs;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n // console.log(bestResDict.routes);\n // console.log(bestResDict.allocations.map((i) => i.toString()));\n // console.log(bestResDict.outputs.toString());\n }\n }\n }\n }\n\n if (!canHaveTwoRoutes) {\n // now we need to check through the routes in single manner to find the best one:\n for (var i in routes) {\n let currentRoutes = [routes[i]];\n let currentNodeRoutes = [nodeRoutes[i]];\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(currentRoutes, currentNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce((a, b) => a.plus(b), new Big(0));\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n }\n }\n\n // resDict = bestResDict;\n\n allocations = bestAllocations;\n\n // let outputs = resDict.outputs;\n routes = bestRoutes;\n nodeRoutes = bestNodeRoutes;\n\n if (routes.length < 1) {\n return [];\n }\n\n // check the top numberOfRoutesLimit\n // console.log('initial allocations are...');\n // console.log(allocations.map((a) => a.toString()));\n // console.log('fixed allocations are...');\n // console.log(allocations.map((a) => new Big(a).toFixed()));\n //SORT BY ALLOCATIONS\n let allSortedIndices = argsort(allocations.map(a => new Big(a)));\n if (bestRoutesAreParallel) {\n numberOfRoutesLimit = 4;\n }\n let sortedIndices = allSortedIndices.slice(0, numberOfRoutesLimit);\n\n // console.log('sorted Indices are');\n // console.log(sortedIndices);\n var filteredRoutes = [];\n var filteredNodeRoutes = [];\n for (var i in sortedIndices) {\n let index = sortedIndices[i];\n filteredRoutes.push(routes[index]);\n filteredNodeRoutes.push(nodeRoutes[index]);\n }\n\n // console.log('filteredRoutes are ...');\n // console.log(filteredRoutes);\n for (var i in filteredRoutes) {\n if (!filteredRoutes[i].length) {\n filteredRoutes[i] = [filteredRoutes[i]];\n }\n }\n // console.log('filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n\n // THE BELOW CODE WILL ENSURE THAT ROUTES ARE INDEPENDENT (e.g. THE ROUTES WILL NOT SHARE A POOL)\n\n let route1PoolIds = filteredRoutes[0].map(pool => pool.id);\n // console.log('route 1 pool ids:');\n // console.log(route1PoolIds);\n if (filteredRoutes.length > 1) {\n let route2PoolIds = filteredRoutes[1].map(pool => pool.id);\n // console.log('route 2 pool ids:');\n // console.log(route2PoolIds);\n var sharedRoute = false;\n for (var i in route2PoolIds) {\n if (route1PoolIds.includes(route2PoolIds[i])) {\n // a pool was shared between routes. need to calculate a new second route.\n // console.log(\n // 'a pool was shared between routes. going to calculate a new second route'\n // );\n sharedRoute = true;\n break;\n }\n }\n }\n\n // NOTE -- this is a much simpler solution than that below. Instead of choosing the next best second route that doesn't share a\n // pool with the first route, we could just use the first route and allocate all inputs to it.\n // but, for larger transactions, it would be better to have option of two independent routes to spread out slippage.\n\n // if (sharedRoute) {\n // filteredRoutes = [filteredRoutes[0]];\n // filteredNodeRoutes = [filteredNodeRoutes[0]];\n // // TODO -- later can add in a second route that doesn't share a pool with first.\n // }\n\n // We're going to find the next-highest allocation route that doesn't share a pool with the first route.\n if (sharedRoute) {\n let allFilteredRoutes = [];\n let allFilteredNodeRoutes = [];\n for (var i in allSortedIndices) {\n allFilteredRoutes.push(routes[allSortedIndices[i]]);\n allFilteredNodeRoutes.push(nodeRoutes[allSortedIndices[i]]);\n }\n let firstRoute = allFilteredRoutes[0];\n // console.log('first route is...');\n // console.log(firstRoute);\n let firstRoutePoolIds = firstRoute.map(pool => pool.id);\n for (var i in allFilteredRoutes) {\n if (!allFilteredRoutes[i].length) {\n allFilteredRoutes[i] = [allFilteredRoutes[i]];\n }\n }\n // console.log('FIRST ROUTE POOL IDS ARE');\n // console.log(firstRoutePoolIds);\n let allFilteredRouteIds = allFilteredRoutes.map(route =>\n route.map(pool => pool.id)\n );\n // console.log('allFilteredRouteIds are ...');\n // console.log(allFilteredRouteIds);\n for (var i in allFilteredRouteIds) {\n // console.log('i is', i);\n // console.log('ALL FILTERED ROUTES [i] IS...');\n // console.log(allFilteredRouteIds[i]);\n for (var j in allFilteredRouteIds[i]) {\n // console.log('j is', j);\n // console.log('ALL FILTERED ROUTES [i][j] IS...');\n // console.log(allFilteredRouteIds[i][j]);\n if (firstRoutePoolIds.includes(allFilteredRouteIds[i][j])) {\n break;\n }\n\n var secondRoute = allFilteredRoutes[i];\n if (!secondRoute.length) {\n secondRoute = [secondRoute];\n }\n filteredRoutes = [allFilteredRoutes[0], secondRoute];\n filteredNodeRoutes = [\n allFilteredNodeRoutes[0],\n allFilteredNodeRoutes[i],\n ];\n break;\n }\n }\n // console.log('new filteredRoutes are ...');\n // console.log(filteredRoutes);\n // console.log('new filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n }\n\n // let filteredAllocations_check = getBestOptInput(\n // filteredRoutes,\n // filteredNodeRoutes,\n // totalInput\n // );\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(filteredRoutes, filteredNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n filteredRoutes,\n filteredNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n\n filteredAllocations = checkIntegerSumOfAllocations(\n filteredAllocations,\n totalInput\n ).map(stringAllo => new Big(stringAllo));\n\n let hops = getActionListFromRoutesAndAllocations(\n filteredRoutes,\n filteredNodeRoutes,\n filteredAllocations\n );\n\n var actions = [];\n // console.log('hops are...');\n // console.log(hops);\n\n for (var i in hops) {\n let hopInputTokenMeta = allTokens[hops[i].inputToken]\n ? allTokens[hops[i].inputToken]\n : await ftGetTokenMetadata(hops[i].inputToken, 'token input');\n\n let hopOutputTokenMeta = allTokens[hops[i].outputToken]\n ? allTokens[hops[i].outputToken]\n : await ftGetTokenMetadata(hops[i].outputToken, 'token sm');\n let hopOutputTokenDecimals = hopOutputTokenMeta.decimals;\n\n let expectedHopOutput = getOutputSingleHop(\n hops[i].pool,\n hops[i].inputToken,\n hops[i].outputToken,\n hops[i].allocation\n );\n let decimalEstimate = new Big(expectedHopOutput)\n .div(new Big(10).pow(hopOutputTokenDecimals))\n .toString();\n\n // Need to check if expected Hop Output is > 1. If not, then cull the corresponding pool and re-calculate.\n if (new Big(expectedHopOutput).lt(new Big(1))) {\n // purge the pool and recalculate.\n\n decimalsCulledPoolIds.push(hops[i].pool.id);\n return getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n (maxPathLength = maxPathLength),\n (threshold = threshold),\n (numberOfRoutesLimit = numberOfRoutesLimit),\n (MAX_NUMBER_PARALLEL_POOLS = MAX_NUMBER_PARALLEL_POOLS),\n (decimalsCulledPoolIds = decimalsCulledPoolIds)\n );\n }\n\n if (\n hops[i].inputToken == inputToken &&\n hops[i].outputToken == outputToken\n ) {\n var status = 'parallel swap';\n } else {\n var status = 'stableSmart';\n }\n\n let tokens = await Promise.all(\n hops[i].nodeRoute.map(async t =>\n allTokens[t] ? allTokens[t] : await ftGetTokenMetadata(t, 'smart')\n )\n );\n\n actions[i] = {\n estimate: decimalEstimate,\n pool: {\n fee: hops[i].pool.fee,\n gamma_bps: new Big(10000).minus(new Big(hops[i].pool.fee)), //.div(new Big(10000)), //hops[i].pool.gamma, //new Big(10000).minus(new Big(hops[i].pool.fee)).div(new Big(10000));\n id: hops[i].pool.id,\n partialAmountIn: new Big(hops[i].allocation).round().toString(),\n supplies: {\n [hops[i].pool.token1Id]: hops[i].pool.token1Supply,\n [hops[i].pool.token2Id]: hops[i].pool.token2Supply,\n },\n token0_ref_price: hops[i].pool.token0_price,\n tokenIds: [hops[i].pool.token1Id, hops[i].pool.token2Id],\n Dex: hops[i].pool.Dex,\n },\n status: status,\n token: hopInputTokenMeta,\n outputToken: hops[i].outputToken,\n inputToken: hops[i].inputToken,\n nodeRoute: hops[i].nodeRoute,\n route: hops[i].route,\n allRoutes: hops[i].allRoutes,\n allNodeRoutes: hops[i].allNodeRoutes,\n totalInputAmount: hops[i].totalInputAmount,\n allAllocations: hops[i].allAllocations,\n tokens: tokens,\n routeInputToken: inputToken,\n routeOutputToken: outputToken,\n overallPriceImpact: '0',\n };\n // console.log('INPUT TOKEN IS...');\n // console.log(hops[i].inputToken);\n actions[i].pool.x = actions[i].pool.supplies[hops[i].inputToken];\n actions[i].pool.y = actions[i].pool.supplies[hops[i].outputToken];\n }\n // now set partial amount in for second hops equal to zero:\n // also, set the total price impact value.\n let overallPriceImpact = await calculateSmartRouteV2PriceImpact(\n actions,\n allTokens\n );\n for (var i in actions) {\n let action = actions[i];\n action.overallPriceImpact = overallPriceImpact;\n if (action.outputToken === outputToken && action.inputToken != inputToken) {\n // only want to set second hop partial amount in to zero\n action.pool.partialAmountIn = '0';\n }\n }\n\n return actions;\n}\n\nasync function calculateSmartRouteV2PriceImpact(actions, allTokens) {\n // the goal is to take a weighted average of the price impact per route, treating each one at a time.\n // for single hop (parallel swaps), the price impact is calculated as before.\n // for double-hop, the market price, P, is determined using reserves of tokens in each pool in the route.\n // in both cases, we compare the 'market price', P , determined solely by reserves in pools, and the actual\n // average price, R, expected to be paid in the transaction.\n // the price impact is then defined as (P-R)/R * 100 and is a percentage number, returned as a string.\n\n let deltaY = actions\n .filter(a => a.outputToken == a.routeOutputToken)\n .map(a => new Big(a.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n // console.log('DELTA Y IS...');\n // console.log(deltaY.toString());\n\n let inputTokenMeta = actions[0].tokens[0];\n let deltaX = new Big(actions[0].totalInputAmount).div(\n new Big(10).pow(inputTokenMeta.decimals)\n );\n let R = deltaY.div(deltaX);\n var P = new Big(0);\n let routes = actions[0].allRoutes;\n let nodeRoutes = actions[0].allNodeRoutes;\n let allocations = actions[0].allAllocations.map(a => new Big(a));\n let totalAllocations = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0));\n\n let weights = allocations.map(a => a.div(totalAllocations));\n\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let tokens = await Promise.all(\n nodeRoute.map(async t => {\n return allTokens[t]\n ? allTokens[t]\n : await ftGetTokenMetadata(t, 'sm routes');\n })\n );\n let weight = weights[i];\n if (route.length == 1) {\n let num = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n let denom = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n var routeMarketPrice = num.div(denom);\n } else {\n let num1 = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n\n let denom1 = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let num2 = new Big(route[1].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let denom2 = new Big(route[1].reserves[nodeRoute[2]]).div(\n new Big(10).pow(tokens[2].decimals)\n );\n\n var routeMarketPrice = num1\n .div(denom1)\n .times(num2)\n .div(denom2);\n }\n P = P.plus(weight.times(new Big(1).div(routeMarketPrice)));\n }\n\n let priceImpact = P.minus(R)\n .div(R)\n .times(new Big(100))\n .toString();\n return priceImpact;\n}\n\nfunction decor(arr) {\n var res = [];\n for (var i in arr) {\n res.push([arr[i], i]);\n }\n return res;\n}\nfunction argsort(arr) {\n let undecor = a => a[1]; // leave only index\n let decorated = decor(arr);\n\n return decorated\n .sort((a, b) => new Big(b[0]).minus(new Big(a[0])))\n .map(undecor);\n}\n\nfunction getPoolsByToken1ORToken2(pools, token1, token2) {\n let filteredPools = pools.filter(\n item =>\n item.token1Id === token1 ||\n item.token2Id === token1 ||\n item.token1Id === token2 ||\n item.token2Id === token2\n );\n return filteredPools;\n}\n\nfunction getPoolsByToken1ANDToken2(\n pools,\n token1,\n token2,\n cullZeroLiquidityPools = true\n) {\n let filteredPools = pools.filter(\n item =>\n (item.token1Id === token1 && item.token2Id === token2) ||\n (item.token1Id === token2 && item.token2Id === token1)\n );\n if (cullZeroLiquidityPools) {\n filteredPools = filteredPools.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n }\n return filteredPools;\n}\n\nfunction getLiqudityOfPoolsFromList(pools) {\n let liquidities = [];\n for (var poolInd in pools) {\n let pool = pools[poolInd];\n pool.amounts = [pool.token1Supply, pool.token2Supply];\n let poolBigAmounts = pool.amounts.map(item => new Big(item));\n let liquidity = poolBigAmounts[0].times(poolBigAmounts[1]);\n liquidities.push(liquidity);\n }\n return liquidities;\n}\n\nfunction getNormalizedLiquiditiesFromList(pools) {\n let liquidities = getLiqudityOfPoolsFromList(pools);\n let maxLiq = bigMax(liquidities);\n let normalizedLiquidities = liquidities.map(item => item.div(maxLiq));\n return normalizedLiquidities;\n}\n\nfunction bigMax(arrayOfBigs) {\n if (arrayOfBigs.length < 1) {\n return null;\n }\n let maxElem = arrayOfBigs[0];\n for (var ind in arrayOfBigs) {\n let val = arrayOfBigs[ind];\n if (val.gt(maxElem)) {\n maxElem = val;\n }\n }\n return maxElem;\n}\n\nfunction cullPoolsWithInsufficientLiquidity(pools, threshold = 0.0001) {\n var thresh = new Big(threshold);\n let normLiq = getNormalizedLiquiditiesFromList(pools);\n let filteredPools = [];\n for (var i = 0; i < normLiq.length; i++) {\n if (normLiq[i] > thresh) {\n filteredPools.push(pools[i]);\n }\n }\n return filteredPools;\n}\n\nfunction cartesianProduct(a) {\n let result = a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));\n return result;\n}\n\nfunction addEdge(g, edge) {\n let src = edge[0];\n let dst = edge[1];\n if (Object.keys(g).includes(src)) {\n if (!Object.keys(g[src]).includes(dst)) {\n g[src][dst] = 1;\n }\n } else {\n g[src] = {};\n g[src][dst] = 1;\n }\n if (Object.keys(g).includes(dst)) {\n if (!Object.keys(g[dst]).includes(src)) {\n g[dst][src] = 1;\n }\n } else {\n g[dst] = {};\n g[dst][src] = 1;\n }\n}\n\nfunction addEdges(g, edgeList) {\n for (var n in edgeList) {\n let edge = edgeList[n];\n addEdge(g, edge);\n }\n}\n\nfunction deleteEdge(g, edge) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n let e1 = edge[0];\n let e2 = edge[1];\n if (Object.keys(gNew).includes(e1)) {\n if (Object.keys(gNew[e1]).includes(e2)) {\n delete gNew[e1][e2];\n }\n }\n if (Object.keys(gNew).includes(e2)) {\n if (Object.keys(gNew[e2]).includes(e1)) {\n delete gNew[e2][e1];\n }\n }\n return gNew;\n}\n\nfunction deleteNode(g, node) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n if (Object.keys(gNew).includes(node)) {\n delete gNew[node];\n }\n let keys = Object.keys(gNew);\n for (var nodeInd in keys) {\n let nodeNow = keys[nodeInd];\n if (Object.keys(gNew[nodeNow]).includes(node)) {\n delete gNew[nodeNow][node];\n }\n }\n return gNew;\n}\n\nfunction dijkstra(graph, s) {\n var solutions = {};\n solutions[s] = {};\n solutions[s].path = [];\n solutions[s].dist = 0;\n\n while (true) {\n var parent = null;\n var nearest = null;\n var dist = Infinity;\n\n //for each existing solution\n for (var n in solutions) {\n if (!solutions[n]) {\n solutions[n] = {};\n }\n if (!solutions[n].path) continue;\n var ndist = solutions[n].dist;\n var adj = graph[n];\n //for each of its adjacent nodes...\n for (var a in adj) {\n //without a solution already...\n if (!solutions[a]) {\n solutions[a] = {};\n }\n if (solutions[a].path) continue;\n //choose nearest node with lowest *total* cost\n var d = adj[a] + ndist;\n if (d < dist) {\n //reference parent\n parent = solutions[n].path;\n nearest = a;\n dist = d;\n }\n }\n }\n\n //no more solutions\n if (dist === Infinity) {\n break;\n }\n\n //extend parent's solution path\n solutions[nearest].path = parent.concat(nearest);\n //extend parent's cost\n solutions[nearest].dist = dist;\n }\n\n return solutions;\n}\n\nfunction shortestPath(g, src, dst, ignore_nodes = [], ignore_edges = []) {\n let gTemp = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure. If we can use lodash, could use _.cloneDeep(obj)\n // remove nodes\n for (var nodeInd in ignore_nodes) {\n let nodeNow = ignore_nodes[nodeInd];\n gTemp = deleteNode(gTemp, nodeNow);\n }\n // remove edges\n for (var edgeInd in ignore_edges) {\n let edgeNow = ignore_edges[edgeInd];\n gTemp = deleteEdge(gTemp, edgeNow);\n }\n let solution = dijkstra(gTemp, src)[dst];\n solution.path.unshift(src); // original algorithm doesn't include source node in path\n return solution;\n}\n\nfunction* count(firstval = 0, step = 1) {\n let x = firstval;\n while (true) {\n yield x;\n x = x + 1;\n }\n}\n\nclass PathBuffer {\n constructor() {\n this.paths = [];\n this.sortedpaths = [];\n //this.counter = count();\n }\n len() {\n return this.sortedpaths.length;\n }\n\n push(cost, path) {\n if (path && !arrayContains(this.paths, path)) {\n this.sortedpaths.push([cost, path]);\n this.sortedpaths.sort(function(a, b) {\n return a[0] - b[0];\n });\n //heappush(this.sortedpaths, (cost, this.counter.next().value,path));\n this.paths.push(path);\n }\n }\n\n pop() {\n //let val = heappop(this.sortedpaths);\n let val = this.sortedpaths.shift();\n let cost = val[0];\n let path = val[1];\n this.paths.splice(this.paths.indexOf(path), 1);\n return path;\n }\n}\n\nfunction arrayEquals(a, b) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((val, index) => val === b[index])\n );\n}\n\nfunction arrayContains(arr, obj) {\n // checks to see if the input array contains a reference object, obj, using\n // JSON.stringify() .\n let obj_json = JSON.stringify(obj);\n for (var itemInd in arr) {\n if (JSON.stringify(arr[itemInd]) == obj_json) {\n return true;\n }\n }\n return false;\n}\n\nfunction* yenFromPy(g, source, target) {\n //adapted from the python implementation in networkx.algorithms.simple_paths.shortest_simple_paths()\n let listA = [];\n let listB = new PathBuffer();\n let prev_path = null;\n\n while (true) {\n if (!prev_path) {\n let sol = shortestPath(g, source, target);\n let length = sol.dist;\n let path = sol.path;\n listB.push(length, path);\n } else {\n let ignore_nodes = [];\n let ignore_edges = [];\n for (var i = 1; i < prev_path.length; i++) {\n let root = prev_path.slice(0, i);\n let root_length = root.length;\n for (var pathInd in listA) {\n let path = listA[pathInd];\n\n if (arrayEquals(path.slice(0, i), root)) {\n let edgeToIgnore = [path[i - 1], path[i]];\n ignore_edges.push(edgeToIgnore);\n }\n }\n try {\n let sol = shortestPath(\n g,\n root[root.length - 1],\n target,\n (ignore_nodes = ignore_nodes),\n (ignore_edges = ignore_edges)\n );\n let length = sol.dist;\n let spur = sol.path;\n let path = root.slice(0, root.length - 1).concat(spur);\n listB.push(root_length + length, path);\n } catch (e) {\n //console.log(`yenFromPy error was... ${e}`)\n //dont do anything.\n }\n ignore_nodes.push(root[root.length - 1]);\n }\n }\n if (listB.sortedpaths) {\n try {\n let path = listB.pop();\n yield path;\n listA.push(path);\n prev_path = path;\n } catch (e) {\n break;\n }\n } else {\n break;\n }\n }\n}\n\nfunction getKShortestPaths(g, source, target, k, maxPathLength = 3) {\n let paths = [];\n if (maxPathLength < 2) {\n var maxPathLength = 2;\n }\n let gen = yenFromPy(g, source, target);\n for (var n = 1; n <= k; n++) {\n try {\n let res = gen.next().value;\n if (res && !arrayContains(paths, res)) {\n if (res.length > maxPathLength) {\n // console.log(\n // `found all hops of length ${\n // maxPathLength - 1\n // } or less... breaking out of generator`\n // );\n break;\n }\n paths.push(res);\n }\n } catch (e) {\n break;\n }\n }\n return paths;\n}\n\nasync function getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength = 3\n) {\n let graph = getGraphFromPoolList(pools);\n return getKShortestPaths(graph, inputToken, outputToken, 100, maxPathLength);\n}\n\nasync function getAllPathsBelowLengthN(g, source, target, N, limit = 100) {\n // use Yen's algorithm to find the paths of length N or below between source and target nodes in graph g.\n\n let paths = [];\n\n let gen = await yenFromPy(g, source, target);\n let currentPathLength = 0;\n let count = 1;\n while (currentPathLength <= N) {\n // console.log(`CURRENT PATH LENGTH IS ${currentPathLength}`)\n try {\n let res = await gen.next().value;\n // console.log(`RES IS ${res}`)\n if (res && !arrayContains(paths, res)) {\n if (res.length > currentPathLength) {\n currentPathLength = res.length;\n if (currentPathLength > N) {\n break;\n }\n }\n paths.push(res);\n }\n count = count + 1;\n if (count > limit) {\n break;\n }\n } catch (e) {\n // console.log(e)\n break;\n }\n }\n return paths;\n}\n\nfunction getGraphFromPoolList(poolList) {\n let pools = poolList.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n let transitions = pools.map(item => [item.token1Id, item.token2Id]);\n let g = {};\n addEdges(g, transitions);\n return g;\n}\n\n////////////////////////////////////\n\n// MAIN FUNCTION\n\n////////////////////////////////////\n\n// TODO -- incorporate the following integrated function, which tries to\n// account for stablecoins within the context of smart routing.\n\n//TODO -- need the right API / hooks for GETSTABLESWAPACTION function and GETPARALLELSWAPACTIONS functions.\n\n//TODO -- transform the actions generated in this function into tranaction to execute.\n\n//TRYING: GETSTABLESWAPACTION <==> instantSwapGetTransactions\n\nexport async function stableSmart(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n) {\n let smartRouteActions = await getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n );\n return smartRouteActions;\n}\n\nexport function getExpectedOutputFromActionsORIG(actions, outputToken) {\n return actions\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nfunction getFeeForRoute(route) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n return p.fee;\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let fee1 = p1.fee;\n let fee2 = p2.fee;\n return fee1 + fee2;\n }\n}\n\nexport function getAverageFeeForRoutes(routes, nodeRoutes, totalInput) {\n let normalizedAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n ).map(a => a.div(new Big(totalInput)));\n let averageFee = 0;\n for (var i in routes) {\n averageFee += normalizedAllocations[i] * getFeeForRoute(routes[i]);\n }\n return averageFee;\n}\n","import { TokenMetadata, Pool, StablePool, EstimateSwapView } from '../types';\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from '../utils';\nimport Big from 'big.js';\nimport { SameInputTokenError, ZeroInputError, NoPoolError } from '../error';\nimport { ONLY_ZEROS, toPrecision } from '../utils';\nimport _ from 'lodash';\nimport { FEE_DIVISOR } from '../constant';\nimport { getSwappedAmount } from '../stable-swap';\nimport { ftGetTokenMetadata, ftGetTokensMetadata } from '../ref';\nimport { isStablePool } from '../utils';\nimport { getTokens } from '../indexer';\nimport {\n getStablePoolDecimal,\n isStablePoolToken,\n poolFormatter,\n} from '../utils';\nimport {\n stableSmart,\n getExpectedOutputFromActionsORIG,\n //@ts-ignore\n} from './smartRoutingLogic.js';\n\nexport enum PoolMode {\n PARALLEL = 'parallel swap',\n SMART = 'smart routing',\n SMART_V2 = 'stableSmart',\n STABLE = 'stable swap',\n}\n\nexport interface SwapParams {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n}\n\nexport interface SwapOptions {\n enableSmartRouting?: boolean;\n stablePools?: Pool[];\n stablePoolsDetail?: StablePool[];\n}\n\nexport const getSimplePoolEstimate = ({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n pool: Pool;\n amountIn: string;\n}) => {\n const amount_with_fee = Number(amountIn) * (FEE_DIVISOR - pool.fee);\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n const estimate = new Big(\n (\n (amount_with_fee * Number(out_balance)) /\n (FEE_DIVISOR * Number(in_balance) + amount_with_fee)\n ).toString()\n ).toFixed();\n\n return {\n estimate,\n pool,\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\nexport const getStablePoolEstimate = ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n stablePool: StablePool;\n pool?: Pool;\n}) => {\n const STABLE_LP_TOKEN_DECIMALS = getStablePoolDecimal(stablePool);\n\n const [amount_swapped, _, dy] = getSwappedAmount(\n tokenIn.id,\n tokenOut.id,\n amountIn,\n stablePool,\n STABLE_LP_TOKEN_DECIMALS\n );\n\n const amountOut =\n amount_swapped < 0 || isNaN(amount_swapped)\n ? '0'\n : toPrecision(scientificNotationToString(amount_swapped.toString()), 0);\n\n const dyOut =\n amount_swapped < 0 || isNaN(amount_swapped) || isNaN(dy)\n ? '0'\n : toPrecision(scientificNotationToString(dy.toString()), 0);\n\n const rates = stablePool.rates.reduce((acc, cur, i) => {\n return {\n ...acc,\n [stablePool.token_account_ids[i]]: cur,\n };\n }, {});\n\n return {\n estimate: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amountOut),\n noFeeAmountOut: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, dyOut),\n pool: {\n ...stablePool,\n rates,\n },\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\n/**\n * @description Get the estimate of the amount of tokenOut that can be received\n *\n */\nexport const singlePoolSwap = ({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n simplePools: Pool[];\n amountIn: string;\n stablePools?: StablePool[];\n}) => {\n if (!simplePools || simplePools.length === 0) {\n throw NoPoolError;\n }\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n // const pools = simplePools.concat(stablePools);\n\n const simplePoolsThisPair = simplePools.filter(\n p =>\n p.tokenIds.includes(tokenIn.id) &&\n p.tokenIds.includes(tokenOut.id) &&\n (!stablePools || !isStablePool(stablePools, p.id))\n );\n\n const estimatesSimplePool = simplePoolsThisPair.map(pool =>\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n })\n );\n\n const stablePoolThisPair = stablePools?.filter(\n sp =>\n sp.token_account_ids.includes(tokenIn.id) &&\n sp.token_account_ids.includes(tokenOut.id)\n );\n\n // different stable lp token decimal for different type of pools\n const estimatesStablePool = stablePoolThisPair?.map(stablePool => {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool: simplePools.find(p => p.id === stablePool.id) as Pool,\n });\n });\n\n const maxSimplePoolEstimate =\n estimatesSimplePool === undefined || estimatesSimplePool.length === 0\n ? undefined\n : estimatesSimplePool.length === 1\n ? estimatesSimplePool[0]\n : _.maxBy(estimatesSimplePool, estimate => Number(estimate.estimate));\n\n const maxStablePoolEstimate =\n estimatesStablePool === undefined || estimatesStablePool.length === 0\n ? undefined\n : estimatesStablePool.length === 1\n ? estimatesStablePool[0]\n : _.maxBy(estimatesStablePool, estimate => Number(estimate.estimate));\n\n if (!maxStablePoolEstimate && !maxSimplePoolEstimate) throw NoPoolError;\n\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n maxStablePoolEstimate &&\n (maxStablePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n if (!maxStablePoolEstimate) {\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n return maxSimplePoolEstimate;\n } else if (!maxSimplePoolEstimate) {\n return maxStablePoolEstimate;\n } else {\n return Number(maxSimplePoolEstimate?.estimate) >\n Number(maxStablePoolEstimate?.estimate)\n ? maxSimplePoolEstimate\n : maxStablePoolEstimate;\n }\n};\n\nexport const getStablePoolsThisPair = ({\n tokenInId,\n tokenOutId,\n stablePools,\n}: {\n tokenInId: string;\n tokenOutId: string;\n stablePools: Pool[];\n}) => {\n return stablePools.filter(\n p =>\n p.tokenIds.includes(tokenInId) &&\n p.tokenIds.includes(tokenOutId) &&\n tokenInId !== tokenOutId\n );\n};\n\nexport const getPoolsByTokens = ({\n pools,\n tokenInId,\n tokenOutId,\n}: {\n pools: Pool[];\n tokenInId: string;\n tokenOutId: string;\n}) => {\n if (tokenInId === tokenOutId) return [];\n\n return pools.filter(\n p => p.tokenIds.includes(tokenInId) && p.tokenIds.includes(tokenOutId)\n );\n};\n\nexport const getPoolEstimate = async ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePoolDetail,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n pool: Pool;\n stablePoolDetail?: StablePool;\n}) => {\n if (!!stablePoolDetail) {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetail,\n amountIn,\n pool,\n });\n } else {\n return getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n });\n }\n};\n\nexport async function getHybridStableSmart(\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n amountIn: string,\n stablePools: Pool[],\n stablePoolsDetail: StablePool[],\n simplePools: Pool[],\n allTokens: Record<string, TokenMetadata>\n) {\n if (\n !isStablePoolToken(stablePoolsDetail, tokenIn.id) &&\n !isStablePoolToken(stablePoolsDetail, tokenOut.id)\n ) {\n return { actions: [], estimate: '0' };\n }\n\n const stablePoolsDetailById = stablePoolsDetail.reduce((acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur,\n };\n }, {} as Record<string, StablePool>);\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let pool1: Pool, pool2: Pool;\n\n let pools1: Pool[] = [];\n let pools2: Pool[] = [];\n\n let pools1Right: Pool[] = [];\n let pools2Right: Pool[] = [];\n\n let candidatePools: Pool[][] = [];\n\n /**\n * find possible routes for this pair\n *\n *\n */\n\n if (isStablePoolToken(stablePoolsDetail, tokenIn.id)) {\n // first hop will be through stable pool.\n pools1 = stablePools.filter(pool => pool.tokenIds.includes(tokenIn.id));\n\n const otherStables = pools1\n .map(pool => pool.tokenIds.filter(id => id !== tokenIn.id))\n .flat();\n\n for (var otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n pools: simplePools,\n });\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n pools2.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n if (isStablePoolToken(stablePoolsDetail, tokenOut.id)) {\n // second hop will be through stable pool.\n pools2Right = stablePools.filter(pool =>\n pool.tokenIds.includes(tokenOut.id)\n );\n\n const otherStables = pools2Right\n .map(pool => pool.tokenIds.filter(id => id !== tokenOut.id))\n .flat();\n for (let otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n pools: simplePools,\n });\n\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n\n pools1Right.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n // find candidate pools\n\n for (let p1 of pools1) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n for (let p1 of pools1Right) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2Right.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n\n if (candidatePools.length > 0) {\n const tokensMedata = await ftGetTokensMetadata(\n candidatePools.map(cp => cp.map(p => p.tokenIds).flat()).flat(),\n allTokens\n );\n\n const BestPoolPair =\n candidatePools.length === 1\n ? candidatePools[0]\n : _.maxBy(candidatePools, poolPair => {\n // only one pool case, only for stable tokens\n if (poolPair.length === 1) {\n if (isStablePool(stablePoolsDetail, poolPair[0].id)) {\n const stablePoolThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: tokenOut.id,\n stablePools,\n })[0];\n\n const stablePoolDetailThisPair = stablePoolsDetail.find(\n spd => spd.id === stablePoolThisPair.id\n );\n\n return Number(\n getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetailThisPair as StablePool,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n } else {\n return Number(\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n }\n }\n\n const [tmpPool1, tmpPool2] = poolPair;\n const tokenMidId = poolPair[0].tokenIds.find((t: string) =>\n poolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta = tokensMedata[tokenMidId];\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, tmpPool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[tmpPool1.id],\n pool: tmpPool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: tmpPool1,\n })),\n status: PoolMode.SMART,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, tmpPool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[tmpPool2.id],\n pool: tmpPool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n pool: tmpPool2,\n amountIn: estimate1.estimate,\n })),\n status: PoolMode.SMART,\n };\n\n return Number(estimate2.estimate);\n });\n\n // one pool case only get best price\n\n if (!BestPoolPair) return { actions: [], estimate: '0' };\n\n if (BestPoolPair.length === 1) {\n const bestPool = BestPoolPair[0];\n const estimate = await getPoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: bestPool,\n stablePoolDetail: stablePoolsDetailById[bestPool.id],\n });\n\n return {\n actions: [\n {\n ...estimate,\n status: PoolMode.STABLE,\n\n pool: { ...estimate.pool, partialAmountIn: parsedAmountIn },\n tokens: [tokenIn, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenOut.id,\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n },\n ],\n estimate: estimate.estimate,\n };\n }\n\n // two pool case get best price\n [pool1, pool2] = BestPoolPair;\n\n const tokenMidId = BestPoolPair[0].tokenIds.find((t: string) =>\n BestPoolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta =\n allTokens[tokenMidId] ||\n (await ftGetTokenMetadata(tokenMidId, 'hybridSmartRoutingEstimate'));\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, pool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[pool1.id],\n pool: pool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: pool1,\n })),\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenMidMeta.id,\n status: PoolMode.SMART,\n };\n\n estimate1.pool = {\n ...estimate1.pool,\n partialAmountIn: parsedAmountIn,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, pool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[pool2.id],\n pool: pool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n pool: pool2,\n })),\n\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenMidMeta.id,\n outputToken: tokenOut.id,\n status: PoolMode.SMART,\n };\n\n return { actions: [estimate1, estimate2], estimate: estimate2.estimate };\n }\n\n return { actions: [], estimate: '0' };\n}\n\n// simple pools and stable pools for this pair\nexport const estimateSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n simplePools,\n options,\n}: SwapParams) => {\n if (tokenIn.id === tokenOut.id) throw SameInputTokenError;\n\n if (ONLY_ZEROS.test(amountIn)) throw ZeroInputError;\n\n const { enableSmartRouting, stablePools, stablePoolsDetail } = options || {};\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let singleRouteEstimate: EstimateSwapView[] = [];\n\n try {\n const estimate = singlePoolSwap({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools: stablePoolsDetail,\n });\n\n singleRouteEstimate = [\n {\n ...estimate,\n status: PoolMode.PARALLEL,\n pool: { ...estimate?.pool, partialAmountIn: parsedAmountIn },\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n tokens: [tokenIn, tokenOut],\n },\n ] as EstimateSwapView[];\n if (!enableSmartRouting) {\n return singleRouteEstimate;\n }\n } catch (error) {\n if (!enableSmartRouting) throw error;\n }\n\n const inputPools = simplePools.map(p => poolFormatter(p));\n\n const allTokens = (await getTokens()) as Record<string, TokenMetadata>;\n\n const simplePoolSmartRoutingActions = await stableSmart(\n inputPools,\n tokenIn.id,\n tokenOut.id,\n parsedAmountIn,\n allTokens\n );\n\n const simplePoolSmartRoutingEstimate = getExpectedOutputFromActionsORIG(\n simplePoolSmartRoutingActions,\n tokenOut.id\n ).toString();\n\n const hybridSmartRoutingRes = await getHybridStableSmart(\n tokenIn,\n tokenOut,\n amountIn,\n stablePools || [],\n stablePoolsDetail || [],\n simplePools,\n allTokens\n );\n\n const hybridSmartRoutingEstimate = hybridSmartRoutingRes.estimate.toString();\n\n if (\n new Big(simplePoolSmartRoutingEstimate || '0').gte(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n if (!simplePoolSmartRoutingActions?.length) throw NoPoolError;\n\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n simplePoolSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n return simplePoolSmartRoutingActions as EstimateSwapView[];\n } else {\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n\n return hybridSmartRoutingRes.actions as EstimateSwapView[];\n }\n};\n","import {\n Pool,\n PoolRPCView,\n StablePool,\n SmartRoutingInputPool,\n Transaction,\n EstimateSwapView,\n} from './types';\nimport {\n FEE_DIVISOR,\n RATED_POOL_LP_TOKEN_DECIMALS,\n STABLE_LP_TOKEN_DECIMALS,\n} from './constant';\n\nimport {\n transactions,\n utils,\n transactions as nearTransactions,\n} from 'near-api-js';\n\nimport _, { sortBy } from 'lodash';\n\nimport BN from 'bn.js';\n\nimport * as math from 'mathjs';\nimport {\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n STORAGE_TO_REGISTER_WITH_MFT,\n} from './constant';\nimport Big from 'big.js';\nimport { SignAndSendTransactionsParams } from '@near-wallet-selector/core/lib/wallet';\nimport { TokenMetadata } from './types';\nimport { PoolMode } from './v1-swap/swap';\nimport { getSwappedAmount } from './stable-swap';\nimport { NoFeeToPool } from './error';\nimport { CONSTANT_D, POINTLEFTRANGE, POINTRIGHTRANGE } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const parsePool = (pool: PoolRPCView, id?: number): Pool => ({\n id: Number(typeof id === 'number' ? id : pool.id),\n tokenIds: pool.token_account_ids,\n supplies: pool.amounts.reduce(\n (acc: { [tokenId: string]: string }, amount: string, i: number) => {\n acc[pool.token_account_ids[i]] = amount;\n return acc;\n },\n {}\n ),\n fee: pool.total_fee,\n shareSupply: pool.shares_total_supply,\n tvl: pool.tvl,\n token0_ref_price: pool.token0_ref_price,\n pool_kind: pool.pool_kind,\n});\n\nexport const poolFormatter = (pool: Pool) => {\n return {\n id: pool.id,\n token1Id: pool.tokenIds[0],\n token2Id: pool.tokenIds[1],\n token1Supply: pool.supplies[pool.tokenIds[0]],\n token2Supply: pool.supplies[pool.tokenIds[1]],\n fee: pool.fee,\n shares: pool.shareSupply,\n token0_price: pool.token0_ref_price || '0',\n } as SmartRoutingInputPool;\n};\n\nexport const isStablePoolToken = (\n stablePools: StablePool[],\n tokenId: string | Number\n) => {\n return stablePools\n .map(p => p.token_account_ids)\n .flat()\n .includes(tokenId.toString());\n};\n\nexport const isStablePool = (\n stablePools: StablePool[],\n poolId: string | number\n) => {\n return stablePools.map(p => p.id.toString()).includes(poolId.toString());\n};\n\nexport const getStablePoolDecimal = (stablePool: StablePool) => {\n return stablePool.pool_kind === 'RATED_SWAP'\n ? RATED_POOL_LP_TOKEN_DECIMALS\n : STABLE_LP_TOKEN_DECIMALS;\n};\n\nexport const round = (decimals: number, minAmountOut: string) => {\n return Number.isInteger(Number(minAmountOut))\n ? minAmountOut\n : Math.ceil(\n Math.round(Number(minAmountOut) * Math.pow(10, decimals)) /\n Math.pow(10, decimals)\n ).toString();\n};\n\nexport const convertToPercentDecimal = (percent: number) => {\n return math.divide(percent, 100);\n};\n\nexport const percentOf = (percent: number, num: number | string) => {\n return math.evaluate(`${convertToPercentDecimal(percent)} * ${num}`);\n};\n\nexport const percentLess = (percent: number, num: number | string) => {\n return math.format(math.evaluate(`${num} - ${percentOf(percent, num)}`), {\n notation: 'fixed',\n });\n};\n\nexport const getGas = (gas: string | undefined) =>\n gas ? new BN(gas) : new BN('100000000000000');\n\nexport const getAmount = (amount: string) =>\n amount ? new BN(utils.format.parseNearAmount(amount) || '0') : new BN('0');\n\nexport const ONLY_ZEROS = /^0*\\.?0*$/;\n\nexport const toReadableNumber = (\n decimals: number,\n number: string = '0'\n): string => {\n if (!decimals) return number;\n\n const wholeStr = number.substring(0, number.length - decimals) || '0';\n const fractionStr = number\n .substring(number.length - decimals)\n .padStart(decimals, '0')\n .substring(0, decimals);\n\n return `${wholeStr}.${fractionStr}`.replace(/\\.?0+$/, '');\n};\n\nexport const toNonDivisibleNumber = (\n decimals: number,\n number: string\n): string => {\n if (decimals === null || decimals === undefined) return number;\n const [wholePart, fracPart = ''] = number.split('.');\n\n return `${wholePart}${fracPart.padEnd(decimals, '0').slice(0, decimals)}`\n .replace(/^0+/, '')\n .padStart(1, '0');\n};\n\nexport const scientificNotationToString = (strParam: string) => {\n let flag = /e/.test(strParam);\n if (!flag || !strParam) return strParam;\n\n let sysbol = true;\n if (/e-/.test(strParam)) {\n sysbol = false;\n }\n\n const negative = Number(strParam) < 0 ? '-' : '';\n\n let index = Number(strParam.match(/\\d+$/)?.[0]);\n\n let basis = strParam.match(/[\\d\\.]+/)?.[0];\n\n if (!index || !basis) return strParam;\n\n const ifFraction = basis.includes('.');\n\n let wholeStr;\n let fractionStr;\n\n if (ifFraction) {\n wholeStr = basis.split('.')[0];\n fractionStr = basis.split('.')[1];\n } else {\n wholeStr = basis;\n fractionStr = '';\n }\n\n if (sysbol) {\n if (!ifFraction) {\n return negative + wholeStr.padEnd(index + wholeStr.length, '0');\n } else {\n if (fractionStr.length <= index) {\n return negative + wholeStr + fractionStr.padEnd(index, '0');\n } else {\n return (\n negative +\n wholeStr +\n fractionStr.substring(0, index) +\n '.' +\n fractionStr.substring(index)\n );\n }\n }\n } else {\n if (!ifFraction)\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.')\n );\n else {\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.') +\n fractionStr\n );\n }\n }\n};\n\nexport const formatWithCommas = (value: string) => {\n const pattern = /(-?\\d+)(\\d{3})/;\n while (pattern.test(value)) {\n value = value.replace(pattern, '$1,$2');\n }\n return value;\n};\n\nexport const toPrecision = (\n number: string,\n precision: number,\n withCommas: boolean = false,\n atLeastOne: boolean = true\n): string => {\n const [whole, decimal = ''] = number.split('.');\n\n let str = `${withCommas ? formatWithCommas(whole) : whole}.${decimal.slice(\n 0,\n precision\n )}`.replace(/\\.$/, '');\n if (atLeastOne && Number(str) === 0 && str.length > 1) {\n var n = str.lastIndexOf('0');\n str = str.slice(0, n) + str.slice(n).replace('0', '1');\n }\n\n return str;\n};\n\nexport const transformTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return parsedTransactions;\n};\n\nexport const WalletSelectorTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return { transactions: parsedTransactions } as SignAndSendTransactionsParams;\n};\n\nexport const separateRoutes = (\n actions: EstimateSwapView[],\n outputToken: string\n) => {\n const res = [];\n let curRoute = [];\n\n for (let i in actions) {\n curRoute.push(actions[i]);\n if (actions[i].outputToken === outputToken) {\n res.push(curRoute);\n curRoute = [];\n }\n }\n\n return res;\n};\n\nexport const calculateExchangeRate = (\n from: string,\n to: string,\n precision?: number\n) => {\n return math\n .floor(math.evaluate(`${to} / ${from}`), precision || 4)\n .toString();\n};\n\nexport const getAvgFee = (\n estimates: EstimateSwapView[],\n outputToken: string,\n parsedAmountIn: string\n) => {\n if (!estimates || estimates.length === 0) {\n return 0;\n }\n\n const routes = separateRoutes(estimates, outputToken);\n\n let fee = new Big(0);\n\n routes.forEach(r => {\n const partialAmountIn = r[0].pool.partialAmountIn || '0';\n\n fee = fee.plus(\n r\n .reduce(\n (acc, cur) => acc.plus(cur.pool.fee || cur.pool.total_fee || 0),\n new Big(0)\n )\n .times(partialAmountIn)\n .div(ONLY_ZEROS.test(parsedAmountIn) ? '1' : parsedAmountIn)\n );\n });\n\n return fee.toNumber();\n};\n\nexport const getAccountName = (AccountId: string) => {\n if (!AccountId) return AccountId;\n\n const [account, network] = AccountId.split('.');\n const niceAccountId = `${account.slice(0, 10)}...${network || ''}`;\n\n return account.length > 10 ? niceAccountId : AccountId;\n};\n\nexport const symbolsArr = ['e', 'E', '+', '-'];\n\nexport const multiply = (factor1: string, factor2: string) => {\n return math.format(math.evaluate(`${factor1} * ${factor2}`), {\n notation: 'fixed',\n });\n};\n\nexport const toInternationalCurrencySystemLongString = (\n labelValue: string,\n percent?: number\n) => {\n return Math.abs(Number(labelValue)) >= 1.0e9\n ? (Math.abs(Number(labelValue)) / 1.0e9).toFixed(percent || 2) + 'B'\n : Math.abs(Number(labelValue)) >= 1.0e6\n ? (Math.abs(Number(labelValue)) / 1.0e6).toFixed(percent || 2) + 'M'\n : Math.abs(Number(labelValue)).toFixed(percent || 2);\n};\n\nexport const percentOfBigNumber = (\n percent: number,\n num: number | string,\n precision: number\n) => {\n const valueBig = math.bignumber(num);\n const percentBig = math.bignumber(percent).div(100);\n\n return toPrecision(\n scientificNotationToString(valueBig.mul(percentBig).toString()),\n precision\n );\n};\n\nexport const toRealSymbol = (symbol: string) => {\n if (!symbol) return '';\n const blackList = ['nUSDO'];\n\n if (symbol === 'nWETH' || symbol === 'WETH') return 'wETH';\n if (blackList.includes(symbol)) return symbol;\n return symbol.charAt(0) === 'n' &&\n symbol.charAt(1) === symbol.charAt(1).toUpperCase()\n ? symbol.substring(1)\n : symbol;\n};\n\nexport const calculateFeeCharge = (fee: number, total: string) => {\n return math.floor(math.evaluate(`(${fee} / ${FEE_DIVISOR}) * ${total}`), 3);\n};\n\nexport const calculateFeePercent = (fee: number) => {\n return math.divide(fee, 100);\n};\n\nexport function getExpectedOutputFromSwapTodos(\n estimates: EstimateSwapView[],\n outputToken: string\n) {\n if (!estimates || estimates.length === 0) return new Big(0);\n\n return estimates\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate || 0))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nexport const calculateAmountReceived = (\n pool: Pool,\n amountIn: string,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const partialAmountIn = toReadableNumber(tokenIn.decimals, amountIn);\n\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n const big_in_balance = math.bignumber(in_balance);\n const big_out_balance = math.bignumber(out_balance);\n\n const constant_product = big_in_balance.mul(big_out_balance);\n\n const new_in_balance = big_in_balance.plus(math.bignumber(partialAmountIn));\n\n const new_out_balance = constant_product.div(new_in_balance);\n\n const tokenOutReceived = big_out_balance.minus(new_out_balance);\n\n return tokenOutReceived;\n};\n\nexport const calculateMarketPrice = (\n pool: Pool,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n return math.evaluate(`(${cur_in_balance} / ${cur_out_balance})`);\n};\n\nexport const calculateSmartRoutingPriceImpact = (\n tokenInAmount: string,\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n tokenMid: TokenMetadata,\n tokenOut: TokenMetadata,\n stablePools: StablePool[]\n) => {\n const isPool1StablePool = isStablePool(stablePools, swapTodos[0].pool.id);\n const isPool2StablePool = isStablePool(stablePools, swapTodos[1].pool.id);\n\n const marketPrice1 = isPool1StablePool\n ? (\n Number(swapTodos[0].pool.rates?.[tokenMid.id]) /\n Number(swapTodos[0].pool.rates?.[tokenIn.id])\n ).toString()\n : calculateMarketPrice(swapTodos[0].pool, tokenIn, tokenMid);\n\n const marketPrice2 = isPool2StablePool\n ? (\n Number(swapTodos[1].pool.rates?.[tokenOut.id]) /\n Number(swapTodos[1].pool.rates?.[tokenMid.id])\n ).toString()\n : calculateMarketPrice(swapTodos[1].pool, tokenMid, tokenOut);\n\n const generalMarketPrice = math.evaluate(`${marketPrice1} * ${marketPrice2}`);\n\n const tokenMidReceived = isPool1StablePool\n ? swapTodos[0].noFeeAmountOut\n : calculateAmountReceived(\n swapTodos[0].pool,\n toNonDivisibleNumber(tokenIn.decimals, tokenInAmount),\n tokenIn,\n tokenMid\n );\n\n const formattedTokenMidReceived = scientificNotationToString(\n tokenMidReceived?.toString() || '0'\n );\n\n let stableOutPool2;\n if (isPool2StablePool) {\n const stablePool2 =\n stablePools.find(p => p.id === swapTodos[1].pool.id) || stablePools[0];\n\n const stableOut = getSwappedAmount(\n tokenMid.id,\n tokenOut.id,\n formattedTokenMidReceived,\n stablePool2,\n getStablePoolDecimal(stablePool2)\n );\n stableOutPool2 =\n stableOut[0] < 0\n ? '0'\n : toPrecision(scientificNotationToString(stableOut[2].toString()), 0);\n stableOutPool2 = toReadableNumber(\n getStablePoolDecimal(stablePool2),\n stableOutPool2\n );\n }\n\n const tokenOutReceived = isPool2StablePool\n ? stableOutPool2\n : calculateAmountReceived(\n swapTodos[1].pool,\n toNonDivisibleNumber(tokenMid.decimals, formattedTokenMidReceived),\n tokenMid,\n tokenOut\n );\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${tokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(generalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\nexport const percent = (numerator: string, denominator: string) => {\n return math.evaluate(`(${numerator} / ${denominator}) * 100`);\n};\nexport const calcStableSwapPriceImpact = (\n from: string,\n to: string,\n marketPrice: string = '1'\n) => {\n const newMarketPrice = math.evaluate(`${from} / ${to}`);\n\n return math.format(\n percent(\n math.evaluate(`${newMarketPrice} - ${marketPrice}`),\n newMarketPrice\n ),\n {\n notation: 'fixed',\n }\n );\n};\n\nexport const calculatePriceImpact = (\n pools: Pool[],\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n tokenInAmount: string\n) => {\n let in_balance: string = '0',\n out_balance: string = '0';\n\n pools.forEach((pool, i) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n in_balance = new Big(in_balance).plus(cur_in_balance).toString();\n out_balance = new Big(out_balance).plus(cur_out_balance).toString();\n });\n\n const finalMarketPrice = math.evaluate(`(${in_balance} / ${out_balance})`);\n\n const separatedReceivedAmount = pools.map(pool => {\n return calculateAmountReceived(\n pool,\n pool.partialAmountIn || '0',\n tokenIn,\n tokenOut\n );\n });\n\n const finalTokenOutReceived = math.sum(...separatedReceivedAmount);\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${finalTokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(finalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\n\nexport function calculateSmartRoutesV2PriceImpact(\n actions: any,\n outputToken: string,\n tokenInPara: TokenMetadata,\n stablePools: StablePool[]\n) {\n const routes = separateRoutes(actions, outputToken);\n\n const tokenIn = routes[0][0].tokens?.[0] || tokenInPara;\n\n const totalInputAmount = routes[0][0].totalInputAmount;\n\n const priceImpactForRoutes = routes.map((r, i) => {\n const readablePartialAmountIn = toReadableNumber(\n tokenIn.decimals,\n r[0].pool.partialAmountIn\n );\n\n if (r.length > 1) {\n const tokenIn = r[0].tokens?.[0];\n const tokenMid = r[0].tokens?.[1];\n const tokenOut = r[0].tokens?.[2];\n\n return calculateSmartRoutingPriceImpact(\n readablePartialAmountIn,\n routes[i],\n tokenIn || tokenInPara,\n tokenMid || tokenInPara,\n tokenOut || tokenInPara,\n stablePools\n );\n } else {\n return isStablePool(stablePools, r[0].pool.id)\n ? calcStableSwapPriceImpact(\n readablePartialAmountIn,\n r[0].noFeeAmountOut || '0',\n (\n Number(r[0].pool.rates?.[outputToken]) /\n Number(r[0].pool.rates?.[tokenIn.id])\n ).toString()\n )\n : calculatePriceImpact(\n [r[0].pool],\n r[0].tokens?.[0] || tokenIn,\n r[0].tokens?.[1] || tokenIn,\n readablePartialAmountIn\n );\n }\n });\n\n const rawRes = priceImpactForRoutes.reduce(\n (pre, cur, i) => {\n return pre.plus(\n new Big(routes[i][0].pool.partialAmountIn || '0')\n .div(new Big(totalInputAmount || '1'))\n .mul(cur)\n );\n },\n\n new Big(0)\n );\n\n return scientificNotationToString(rawRes.toString());\n}\n\nexport const getPriceImpact = ({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools,\n}: {\n estimates: EstimateSwapView[];\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n amountOut: string;\n stablePools: StablePool[];\n}) => {\n let PriceImpactValue: string = '0';\n let priceImpactValueSmartRouting: string = '0';\n let priceImpactValueSmartRoutingV2: string = '0';\n\n if (typeof estimates === 'undefined') return '0';\n\n try {\n if (estimates?.length === 2 && estimates[0].status === PoolMode.SMART) {\n priceImpactValueSmartRouting = calculateSmartRoutingPriceImpact(\n amountIn,\n estimates,\n tokenIn,\n estimates[0].tokens?.[1] || tokenIn,\n tokenOut,\n stablePools\n );\n } else if (\n estimates?.length === 1 &&\n estimates[0].status === PoolMode.STABLE\n ) {\n priceImpactValueSmartRouting = calcStableSwapPriceImpact(\n toReadableNumber(tokenIn.decimals, estimates[0].totalInputAmount),\n estimates[0].noFeeAmountOut || '0',\n (\n Number(estimates[0].pool.rates?.[tokenOut.id]) /\n Number(estimates[0].pool.rates?.[tokenIn.id])\n ).toString()\n );\n } else priceImpactValueSmartRouting = '0';\n } catch (error) {\n priceImpactValueSmartRouting = '0';\n }\n\n try {\n priceImpactValueSmartRoutingV2 = calculateSmartRoutesV2PriceImpact(\n estimates,\n tokenOut.id,\n tokenIn,\n stablePools\n );\n } catch (error) {\n priceImpactValueSmartRoutingV2 = '0';\n }\n\n try {\n if (\n estimates[0].status === PoolMode.SMART ||\n estimates[0].status === PoolMode.STABLE\n ) {\n PriceImpactValue = priceImpactValueSmartRouting;\n } else {\n PriceImpactValue = priceImpactValueSmartRoutingV2;\n }\n\n return PriceImpactValue;\n } catch (error) {\n return '0';\n }\n};\n\nexport const subtraction = (initialValue: string, toBeSubtract: string) => {\n return math.format(math.evaluate(`${initialValue} - ${toBeSubtract}`), {\n notation: 'fixed',\n });\n};\n\nexport function getPoolAllocationPercents(pools: Pool[]) {\n if (pools.length === 1) return ['100'];\n\n if (pools) {\n const partialAmounts = pools.map(pool => {\n return math.bignumber(pool.partialAmountIn);\n });\n\n const ps: string[] = new Array(partialAmounts.length).fill('0');\n\n const sum =\n partialAmounts.length === 1\n ? partialAmounts[0]\n : math.sum(...partialAmounts);\n\n const sortedAmount = sortBy(partialAmounts, p => Number(p));\n\n let minIndexes: number[] = [];\n\n for (let k = 0; k < sortedAmount.length - 1; k++) {\n let minIndex = -1;\n\n for (let j = 0; j < partialAmounts.length; j++) {\n if (partialAmounts[j].eq(sortedAmount[k]) && !minIndexes.includes(j)) {\n minIndex = j;\n minIndexes.push(j);\n break;\n }\n }\n const res = math\n .round(percent(partialAmounts[minIndex].toString(), sum))\n .toString();\n\n if (Number(res) === 0) {\n ps[minIndex] = '1';\n } else {\n ps[minIndex] = res;\n }\n }\n\n const finalPIndex = ps.indexOf('0');\n\n ps[finalPIndex] = subtraction(\n '100',\n ps.length === 1 ? Number(ps[0]) : math.sum(...ps.map(p => Number(p)))\n ).toString();\n\n return ps;\n } else {\n return [];\n }\n}\n\nexport const isMobile = (): boolean => {\n return window.screen.width <= 600;\n};\nexport function divide(numerator: string, denominator: string) {\n return math.format(math.evaluate(`${numerator} / ${denominator}`), {\n notation: 'fixed',\n });\n}\n\nexport const getMax = function(id: string, amount: string) {\n return id !== WRAP_NEAR_CONTRACT_ID\n ? amount\n : Number(amount) <= 0.5\n ? '0'\n : String(Number(amount) - 0.5);\n};\n\nexport function getPointByPrice(\n pointDelta: number,\n price: string,\n decimalRate: number,\n noNeedSlot?: boolean\n) {\n const point = Math.log(+price * decimalRate) / Math.log(CONSTANT_D);\n const point_int = Math.round(point);\n let point_int_slot = point_int;\n if (!noNeedSlot) {\n point_int_slot = Math.floor(point_int / pointDelta) * pointDelta;\n }\n if (point_int_slot < POINTLEFTRANGE) {\n return POINTLEFTRANGE;\n } else if (point_int_slot > POINTRIGHTRANGE) {\n return 800000;\n }\n return point_int_slot;\n}\nexport const feeToPointDelta = (fee: number) => {\n switch (fee) {\n case 100:\n return 1;\n case 400:\n return 8;\n case 2000:\n return 40;\n case 10000:\n return 200;\n default:\n throw NoFeeToPool(fee);\n }\n};\n\nexport const priceToPoint = ({\n tokenA,\n tokenB,\n amountA,\n amountB,\n fee,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n amountB: string;\n fee: number;\n}) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const decimal_price_A_by_B = new Big(amountB).div(amountA);\n const undecimal_price_A_by_B = decimal_price_A_by_B\n .times(new Big(10).pow(tokenB.decimals))\n .div(new Big(10).pow(tokenA.decimals));\n\n const pointDelta = feeToPointDelta(fee);\n\n const price = decimal_price_A_by_B;\n\n const decimalRate = new Big(10)\n .pow(tokenB.decimals)\n .div(new Big(10).pow(tokenA.decimals))\n .toNumber();\n\n return getPointByPrice(\n pointDelta,\n scientificNotationToString(price.toString()),\n decimalRate\n );\n};\n\nexport const pointToPrice = ({\n tokenA,\n tokenB,\n point,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n point: number;\n}) => {\n const undecimal_price = Math.pow(CONSTANT_D, point);\n const decimal_price_A_by_B = new Big(undecimal_price)\n .times(new Big(10).pow(tokenA.decimals))\n .div(new Big(10).pow(tokenB.decimals));\n\n return scientificNotationToString(decimal_price_A_by_B.toString());\n};\n\nexport const registerAccountOnToken = (AccountId: string) => {\n return {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n };\n};\n","import {\n keyStores,\n KeyPair,\n InMemorySigner,\n providers,\n transactions as nearTransactions,\n utils,\n} from 'near-api-js';\nimport BN from 'bn.js';\nimport { getConfig } from './constant';\nimport fs from 'fs';\nimport os from 'os';\nimport {\n NoPuiblicKeyError,\n InValidAccessKeyError,\n NoCredential,\n} from './error';\nimport { AccessKeyView } from 'near-api-js/lib/providers/provider';\nimport { TransformedTransaction } from './types';\nimport { Transaction } from './types';\nimport { transformTransactions } from './utils';\nimport { AccountIdMisMatch } from './error';\n\nexport const getKeyStore = () => {\n return typeof window === 'undefined'\n ? new keyStores.InMemoryKeyStore()\n : new keyStores.BrowserLocalStorageKeyStore();\n};\n\nexport const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n});\n\nexport const getMemorySigner = async ({\n AccountId,\n keyPath,\n}: {\n AccountId: string;\n keyPath: string;\n}) => {\n try {\n const homedir = os.homedir();\n const credentials = JSON.parse(\n fs.readFileSync(homedir + keyPath).toString()\n );\n\n const credentialAccountId = credentials?.account_id;\n\n if (!credentialAccountId) throw NoCredential;\n\n if (credentialAccountId !== AccountId) throw AccountIdMisMatch;\n\n const myKeyStore = new keyStores.InMemoryKeyStore();\n myKeyStore.setKey(\n getConfig().networkId,\n AccountId,\n KeyPair.fromString(credentials.private_key)\n );\n\n const signer = new InMemorySigner(myKeyStore);\n\n return signer;\n } catch (error) {\n throw error;\n }\n};\n\nconst validateAccessKey = (\n transaction: TransformedTransaction,\n accessKey: AccessKeyView\n) => {\n if (accessKey.permission === 'FullAccess') {\n return accessKey;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { receiver_id, method_names } = accessKey.permission.FunctionCall;\n\n if (transaction.receiverId !== receiver_id) {\n return null;\n }\n\n return transaction.actions.every(action => {\n if (action.type !== 'FunctionCall') {\n return false;\n }\n\n const { methodName, deposit } = action.params;\n\n if (method_names.length && method_names.includes(methodName)) {\n return false;\n }\n\n return parseFloat(deposit) <= 0;\n });\n};\n\nexport const getSignedTransactionsByMemoryKey = async ({\n transactionsRef,\n AccountId,\n keyPath,\n}: {\n transactionsRef: Transaction[];\n AccountId: string;\n keyPath: string;\n}) => {\n const transactions = transformTransactions(transactionsRef, AccountId);\n\n const block = await provider.block({ finality: 'final' });\n\n const signedTransactions: Array<nearTransactions.SignedTransaction> = [];\n const signer = await getMemorySigner({\n AccountId,\n keyPath,\n });\n\n for (let i = 0; i < transactions.length; i += 1) {\n const transaction = transactions[i];\n\n const publicKey = await signer.getPublicKey(\n AccountId,\n getConfig().networkId\n );\n if (!publicKey) {\n throw NoPuiblicKeyError;\n }\n\n const accessKey = await provider.query<AccessKeyView>({\n request_type: 'view_access_key',\n finality: 'final',\n account_id: AccountId,\n public_key: publicKey.toString(),\n });\n\n if (!validateAccessKey(transaction, accessKey)) {\n throw InValidAccessKeyError;\n }\n\n const tx = nearTransactions.createTransaction(\n AccountId,\n utils.PublicKey.from(publicKey.toString()),\n transactions[i].receiverId,\n accessKey.nonce + i + 1,\n transaction.actions.map(action => {\n const { methodName, args, gas, deposit } = action.params;\n return nearTransactions.functionCall(\n methodName,\n args,\n new BN(gas),\n new BN(deposit)\n );\n }),\n utils.serialize.base_decode(block.header.hash)\n );\n\n const [, signedTx] = await nearTransactions.signTransaction(\n tx,\n signer,\n transactions[i].signerId,\n getConfig().networkId\n );\n signedTransactions.push(signedTx);\n }\n\n return signedTransactions;\n};\n\nexport const sendTransactionsByMemoryKey = async ({\n signedTransactions,\n}: {\n signedTransactions: nearTransactions.SignedTransaction[];\n}) => {\n try {\n const results: Array<providers.FinalExecutionOutcome> = [];\n\n for (let i = 0; i < signedTransactions.length; i += 1) {\n results.push(await provider.sendTransaction(signedTransactions[i]));\n }\n\n return results;\n } catch (err) {\n throw err;\n }\n};\n","import {\n REF_FI_CONTRACT_ID,\n config,\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n getConfig,\n switchEnv,\n} from './constant';\nimport {\n keyStores,\n Near,\n providers,\n WalletConnection,\n utils,\n} from 'near-api-js';\nimport { NoAccountIdFound, TokenNotExistError, DCLInValid } from './error';\nimport { getKeyStore } from './near';\n\nimport {\n TokenMetadata,\n FTStorageBalance,\n RefFiViewFunctionOptions,\n} from './types';\nimport { AccountView } from 'near-api-js/lib/providers/provider';\nimport { Transaction } from './types';\nimport { ONE_YOCTO_NEAR, REF_TOKEN_ID, REF_META_DATA } from './constant';\n\nimport metaIconDefaults from './metaIcons';\n\nconst BANANA_ID = 'berryclub.ek.near';\nconst CHEDDAR_ID = 'token.cheddar.near';\nconst CUCUMBER_ID = 'farm.berryclub.ek.near';\nconst HAPI_ID = 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near';\nconst WOO_ID = '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near';\n\nexport const REPLACE_TOKENS = [\n BANANA_ID,\n CHEDDAR_ID,\n CUCUMBER_ID,\n HAPI_ID,\n WOO_ID,\n];\n\nlet near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(),\n});\nexport const init_env = (env: string) => {\n near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(env),\n });\n return switchEnv();\n};\n\nexport const refFiViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(REF_FI_CONTRACT_ID, methodName, args);\n};\n\nexport const ftViewFunction = async (\n tokenId: string,\n { methodName, args }: RefFiViewFunctionOptions\n) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(tokenId, methodName, args);\n};\n\nexport const ftGetStorageBalance = (\n tokenId: string,\n AccountId: string\n): Promise<FTStorageBalance | null> => {\n if (!AccountId) throw NoAccountIdFound;\n\n return ftViewFunction(tokenId, {\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const ftGetBalance = async (tokenId: string, AccountId: string) => {\n if (!AccountId) return '0';\n\n if (tokenId === 'NEAR') {\n return getAccountNearBalance(AccountId).catch(() => '0');\n }\n\n return ftViewFunction(tokenId, {\n methodName: 'ft_balance_of',\n args: {\n account_id: AccountId,\n },\n })\n .then(res => {\n return res;\n })\n .catch(() => '0');\n};\n\nexport const getTotalPools = async () => {\n return refFiViewFunction({\n methodName: 'get_number_of_pools',\n });\n};\n\nexport const ftGetTokenMetadata = async (\n id: string,\n tag?: string\n): Promise<TokenMetadata> => {\n if (id === REF_TOKEN_ID) return REF_META_DATA;\n\n const metadata = await ftViewFunction(id, {\n methodName: 'ft_metadata',\n }).catch(() => {\n throw TokenNotExistError;\n });\n\n if (\n !metadata.icon ||\n id === BANANA_ID ||\n id === CHEDDAR_ID ||\n id === CUCUMBER_ID ||\n id === HAPI_ID ||\n id === WOO_ID ||\n id === WRAP_NEAR_CONTRACT_ID\n ) {\n return {\n ...metadata,\n icon: metaIconDefaults[id],\n id,\n };\n }\n\n return { ...metadata, id };\n};\n\nexport const ftGetTokensMetadata = async (\n tokenIds: string[],\n allTokens: Record<string, TokenMetadata>\n) => {\n const tokensMetadata = await Promise.all(\n tokenIds.map((id: string) => allTokens[id] || ftGetTokenMetadata(id))\n );\n\n return tokensMetadata.reduce((pre, cur, i) => {\n return {\n ...pre,\n [tokenIds[i]]: cur,\n };\n }, {}) as Record<string, TokenMetadata>;\n};\n\nexport const getGlobalWhitelist = async (): Promise<string[]> => {\n const globalWhitelist = await refFiViewFunction({\n methodName: 'get_whitelisted_tokens',\n });\n return Array.from(new Set(globalWhitelist));\n};\n\nexport const getUserRegisteredTokens = async (\n AccountId?: string\n): Promise<string[]> => {\n if (!AccountId) return [];\n\n return refFiViewFunction({\n methodName: 'get_user_whitelisted_tokens',\n args: { account_id: AccountId },\n });\n};\n\nexport const getAccountNearBalance = async (accountId: string) => {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n\n return provider\n .query<AccountView>({\n request_type: 'view_account',\n finality: 'final',\n account_id: accountId,\n })\n .then(data => data.amount);\n};\n\nexport const nearDepositTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_deposit',\n args: {},\n gas: '50000000000000',\n amount,\n },\n ],\n };\n\n return transaction;\n};\n\nexport const nearWithdrawTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_withdraw',\n args: { amount: utils.format.parseNearAmount(amount) },\n amount: ONE_YOCTO_NEAR,\n },\n ],\n };\n return transaction;\n};\n\nexport const refDCLSwapViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n if (!config.REF_DCL_SWAP_CONTRACT_ID) throw DCLInValid;\n\n return nearConnection.viewFunction(\n config.REF_DCL_SWAP_CONTRACT_ID,\n methodName,\n args\n );\n};\n\nexport const DCLSwapGetStorageBalance = (\n tokenId: string,\n AccountId: string\n) => {\n return refDCLSwapViewFunction({\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport { NoFeeToPool } from '../error';\n\nexport const DCL_POOL_FEE_LIST = [100, 400, 2000, 10000];\n\ninterface PoolInfo {\n pool_id?: string;\n token_x?: string;\n token_y?: string;\n fee: number;\n point_delta?: number;\n current_point?: number;\n state?: string;\n liquidity?: string;\n liquidity_x?: string;\n max_liquidity_per_point?: string;\n percent?: string;\n total_x?: string;\n total_y?: string;\n tvl?: number;\n token_x_metadata?: TokenMetadata;\n token_y_metadata?: TokenMetadata;\n}\n\nexport const getDCLPoolId = (tokenA: string, tokenB: string, fee: number) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const tokenSeq = [tokenA, tokenB].sort().join('|');\n\n return `${tokenSeq}|${fee}`;\n};\nexport const listDCLPools = () => {\n return refDCLSwapViewFunction({\n methodName: 'list_pools',\n });\n};\n\nexport const getDCLPool = async (pool_id: string) => {\n const [token_x, token_y, fee] = pool_id.split('|');\n\n const token_seq = [token_x, token_y].sort().join('|');\n\n const new_pool_id = `${token_seq}|${fee}`;\n\n return refDCLSwapViewFunction({\n methodName: 'get_pool',\n args: {\n pool_id: new_pool_id,\n },\n }) as Promise<PoolInfo>;\n};\n","import { config, getConfig } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const formatError = (msg: string) => {\n return new Error(msg);\n};\n\nexport const unNamedError = formatError('Something wrong happened');\n\nexport const SameInputTokenError = formatError(\n 'Input token should be different with output token'\n);\n\nexport const ZeroInputError = formatError(\n 'Input amount should be greater than 0'\n);\n\nexport const NoPoolError = formatError('No pool found for the input tokens');\n\nexport const NotLoginError = formatError('Please login in first');\n\nexport const SwapRouteError = formatError(\n \"Something wrong happened, we don't get correct routes corrreponding to current input\"\n);\n\nexport const TokenNotExistError = formatError(\n `This token doesn't exist in ${getConfig().networkId}`\n);\n\nexport const NoPuiblicKeyError = formatError('No public key found');\n\nexport const NoLocalSignerError = formatError('No local signer found');\n\nexport const InValidAccessKeyError = formatError('Invalid access key');\n\nexport const AccountIdMisMatch = formatError(\n \"Your input account id doesn't match the account id in the credential\"\n);\n\nexport const NoCredential = formatError('No Credential to such path');\n\nexport const NoAccountIdFound = formatError('No account id found');\n\nexport const NoFeeToPool = (fee: number) =>\n formatError(\n `InValid fee ${fee} to DCL pool, the valid fee should be one of ${DCL_POOL_FEE_LIST}`\n );\n\nexport const DCLInValid = formatError(\n `DCL contract currently in Valid on ${config.networkId}`\n);\n\nexport const NoPoolOnThisPair = (tokenA: string, tokenB: string) =>\n formatError(`No pools on pair ${tokenA} <> ${tokenB}`);\n\nexport const SlippageError = formatError(\n 'slippage tolerance should be in range (0, 100)'\n);\n\nexport const NoOrderFound = (order_id?: string) =>\n formatError(`No order ${order_id || ''} found`);\n\nexport const OrderNoRemainedAmount = formatError(\n 'No remained amount on this order'\n);\n","import { TokenMetadata, EstimateSwapView, Transaction } from '../types';\nimport { ftGetStorageBalance } from '../ref';\nimport {\n STORAGE_TO_REGISTER_WITH_MFT,\n REF_FI_CONTRACT_ID,\n ONE_YOCTO_NEAR,\n} from '../constant';\nimport { round, percentLess } from '../utils';\nimport { toNonDivisibleNumber } from '../utils';\nimport { config } from '../constant';\nimport { SwapRouteError } from '../error';\n\nexport const instantSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n slippageTolerance,\n swapTodos,\n AccountId,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n slippageTolerance: number;\n swapTodos: EstimateSwapView[];\n AccountId: string;\n}) => {\n const transactions: Transaction[] = [];\n\n if (swapTodos?.[swapTodos?.length - 1]?.outputToken !== tokenOut.id)\n throw SwapRouteError;\n\n const registerToken = async (token: TokenMetadata) => {\n const tokenRegistered = await ftGetStorageBalance(\n token.id,\n AccountId\n ).catch(() => {\n throw new Error(`${token.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: token.id,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n },\n ],\n });\n }\n };\n\n if (tokenIn.id === config.WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n config.WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n await registerToken(tokenIn);\n }\n }\n\n await registerToken(tokenOut);\n let actionsList: any = [];\n let allSwapsTokens = swapTodos.map(s => [s.inputToken, s.outputToken]); // to get the hop tokens\n for (let i in allSwapsTokens) {\n let swapTokens = allSwapsTokens[i];\n if (swapTokens[0] === tokenIn.id && swapTokens[1] === tokenOut.id) {\n // parallel, direct hop route.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: tokenIn.id,\n token_out: tokenOut.id,\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n } else if (swapTokens[0] === tokenIn.id) {\n // first hop in double hop route\n //TODO -- put in a check to make sure this first hop matches with the next (i+1) hop as a second hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: '0',\n });\n } else {\n // second hop in double hop route.\n //TODO -- put in a check to make sure this second hop matches with the previous (i-1) hop as a first hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n }\n }\n\n transactions.push({\n receiverId: tokenIn.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: REF_FI_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n msg: JSON.stringify({\n force: 0,\n actions: actionsList,\n }),\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n\n return transactions;\n};\n","import { getTotalPools, refFiViewFunction } from '../ref';\nimport { Pool, PoolRPCView } from '../types';\nimport { parsePool, toNonDivisibleNumber } from '../utils';\nimport { STABLE_LP_TOKEN_DECIMALS } from '../constant';\n\nlet DEFAULT_PAGE_LIMIT = 100;\n\nexport const getRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_rated_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'RATED_SWAP',\n }));\n};\n\nexport const getUnRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_stable_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'STABLE_SWAP',\n rates: pool_info.c_amounts.map((_: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }));\n};\n\nexport const getStablePools = async (stablePools: Pool[]) => {\n return Promise.all(\n stablePools.map(pool =>\n pool.pool_kind === 'RATED_SWAP'\n ? getRatedPoolDetail({ id: pool.id })\n : getUnRatedPoolDetail({ id: pool.id })\n )\n );\n};\n\nexport const getPool = async (id: number): Promise<Pool> => {\n return await refFiViewFunction({\n methodName: 'get_pool',\n args: { pool_id: id },\n }).then((pool: PoolRPCView) => parsePool(pool, id));\n};\n\nexport const getRefPools = async (\n page: number = 1,\n perPage: number = DEFAULT_PAGE_LIMIT\n): Promise<Pool[]> => {\n const index = (page - 1) * perPage;\n const poolData: PoolRPCView[] = await refFiViewFunction({\n methodName: 'get_pools',\n args: { from_index: index, limit: perPage },\n });\n\n return poolData.map((rawPool, i) => parsePool(rawPool, i + index));\n};\n\nexport const fetchAllPools = async (perPage?: number) => {\n if (perPage) {\n DEFAULT_PAGE_LIMIT = Math.min(perPage, 500);\n }\n const totalPools = await getTotalPools();\n const pages = Math.ceil(totalPools / DEFAULT_PAGE_LIMIT);\n\n const pools = (\n await Promise.all(\n [...Array(pages)].fill(0).map((_, i) => getRefPools(i + 1))\n )\n ).flat() as Pool[];\n\n return {\n simplePools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'SIMPLE_POOL'\n ),\n unRatedPools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'STABLE_SWAP'\n ),\n ratedPools: pools.filter(p => p.pool_kind && p.pool_kind === 'RATED_SWAP'),\n };\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n createContext,\n ReactNode,\n} from 'react';\nimport {\n ftGetBalance,\n ftGetTokenMetadata,\n getGlobalWhitelist,\n nearDepositTransaction,\n nearWithdrawTransaction,\n REPLACE_TOKENS,\n} from '../ref';\nimport {\n EstimateSwapView,\n Pool,\n StablePool,\n TokenMetadata,\n Transaction,\n} from '../types';\nimport { fetchAllPools, getStablePools } from '../v1-swap/pool';\nimport { estimateSwap, SwapOptions, SwapParams } from '../v1-swap/swap';\nimport { SwapOutParams } from './types';\nimport {\n percentLess,\n separateRoutes,\n toNonDivisibleNumber,\n calculateExchangeRate,\n getAvgFee,\n} from '../utils';\nimport Big from 'big.js';\nimport { instantSwap } from '../v1-swap/instantSwap';\n\nimport { getExpectedOutputFromActionsORIG } from '../v1-swap/smartRoutingLogic.js';\nimport { Theme } from './constant';\nimport { defaultTheme } from './constant';\nimport {\n getTokenPriceList,\n getTokens,\n getWhiteListTokensIndexer,\n} from '../indexer';\nimport {\n toReadableNumber,\n ONLY_ZEROS,\n getExpectedOutputFromSwapTodos,\n} from '../utils';\nimport { getUserRegisteredTokens } from '../ref';\nimport { WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from '../constant';\nimport { scientificNotationToString } from '../utils';\nimport metaIconDefaults from '../metaIcons';\n\nexport const ThemeContext = createContext<Theme>(defaultTheme);\n\nexport const ThemeContextProvider: React.FC<{\n customTheme: Theme | undefined;\n}> = ({ customTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(customTheme || defaultTheme);\n\n useEffect(() => {\n if (!customTheme) return;\n setTheme(customTheme);\n }, [customTheme]);\n\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const estimateValidator = (\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n parsedAmountIn: string,\n tokenOut: TokenMetadata\n) => {\n const tokenInId = swapTodos[0]?.inputToken;\n const tokenOutId = swapTodos[swapTodos.length - 1]?.outputToken;\n\n const totalPartialAmountIn =\n swapTodos.length === 0\n ? new Big(swapTodos[0].pool.partialAmountIn || 0)\n : swapTodos.reduce(\n (acc, cur, i) => acc.plus(cur.pool.partialAmountIn || 0),\n new Big(0)\n );\n\n if (\n tokenInId !== tokenIn.id ||\n tokenOutId !== tokenOut.id ||\n !totalPartialAmountIn.eq(parsedAmountIn || '0')\n ) {\n return false;\n }\n return true;\n};\n\nexport const useAllTokens = ({ reload }: { reload?: boolean }) => {\n const [tokens, setTokens] = useState<Record<string, TokenMetadata>>();\n const [tokensLoading, setTokensLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTokens = async () => {\n const tokens = await getTokens(reload);\n setTokens(tokens);\n setTokensLoading(false);\n };\n fetchTokens();\n }, [reload]);\n\n return { tokens, tokensLoading };\n};\n\nexport const useTokensIndexer = ({\n defaultTokenList,\n AccountId,\n}: {\n defaultTokenList?: TokenMetadata[];\n AccountId?: string;\n}) => {\n const [tokens, setTokens] = useState<TokenMetadata[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState<boolean>(false);\n\n useEffect(() => {\n setTokenLoading(true);\n\n const getTokensList = async () => {\n const whiteList = await getGlobalWhitelist();\n const globalWhiteListTokens = (\n await getWhiteListTokensIndexer(whiteList)\n ).filter(token => !!token) as TokenMetadata[];\n\n const parsedTokens = globalWhiteListTokens.map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n });\n\n if (!defaultTokenList || defaultTokenList.length === 0) {\n setTokens(parsedTokens);\n setTokenLoading(false);\n } else {\n const newList = defaultTokenList\n .map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n })\n .filter(t => {\n return parsedTokens.findIndex(p => p.id === t.id) !== -1;\n });\n setTokens(\n newList.map(t =>\n !t.icon || REPLACE_TOKENS.includes(t.id)\n ? {\n ...t,\n icon: metaIconDefaults[t.id],\n }\n : t\n )\n );\n setTokenLoading(false);\n }\n };\n\n getTokensList();\n }, [AccountId, defaultTokenList]);\n\n return { tokens, tokenLoading };\n};\n\nexport const useRefPools = (refreshTrigger: boolean) => {\n const [allPools, setAllPools] = useState<{\n simplePools: Pool[];\n ratedPools: Pool[];\n unRatedPools: Pool[];\n }>({\n simplePools: [],\n ratedPools: [],\n unRatedPools: [],\n });\n\n const [poolFetchingState, setPoolFetchingState] = useState<'loading' | 'end'>(\n 'loading'\n );\n\n const [allStablePools, setAllStablePools] = useState<StablePool[]>([]);\n\n useEffect(() => {\n setPoolFetchingState('loading');\n\n fetchAllPools()\n .then(allPools => {\n setAllPools(allPools);\n\n return allPools;\n })\n .then(allPools => {\n const pools: Pool[] = allPools.unRatedPools.concat(allPools.ratedPools);\n\n return getStablePools(pools).then(setAllStablePools);\n })\n .finally(() => {\n setPoolFetchingState('end');\n });\n }, [refreshTrigger]);\n\n return {\n allPools,\n allStablePools,\n poolFetchingState,\n };\n};\n\nexport const useSwap = (\n params: {\n tokenIn?: TokenMetadata;\n tokenOut?: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n } & {\n slippageTolerance: number;\n refreshTrigger: boolean;\n onSwap: (transactionsRef: Transaction[]) => void;\n AccountId?: string;\n poolFetchingState?: 'loading' | 'end';\n }\n): SwapOutParams => {\n const {\n slippageTolerance,\n refreshTrigger,\n onSwap,\n AccountId,\n poolFetchingState,\n ...swapParams\n } = params;\n\n const { tokenIn, tokenOut, amountIn } = params;\n\n const [estimates, setEstimates] = useState<EstimateSwapView[]>([]);\n\n const [canSwap, setCanSwap] = useState(false);\n\n const [swapError, setSwapError] = useState<Error | null>(null);\n\n const [amountOut, setAmountOut] = useState<string>('');\n\n const [isEstimating, setIsEstimating] = useState<boolean>(false);\n\n const [forceEstimate, setForceEstimate] = useState<boolean>(false);\n\n const minAmountOut = amountOut\n ? percentLess(slippageTolerance, amountOut)\n : '';\n\n const fee =\n !params.tokenOut || !params.tokenIn\n ? 0\n : getAvgFee(\n estimates,\n params.tokenOut.id,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn)\n );\n\n const rate = calculateExchangeRate(\n ONLY_ZEROS.test(params.amountIn) ? '1' : params.amountIn,\n amountOut || '1'\n );\n\n const makeSwap = async () => {\n if (!params.tokenIn || !params.tokenOut) return;\n\n const transactionsRef = await instantSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n swapTodos: estimates,\n slippageTolerance,\n AccountId: AccountId || '',\n });\n if (tokenIn && tokenIn.id === WRAP_NEAR_CONTRACT_ID) {\n transactionsRef.splice(-1, 0, nearDepositTransaction(amountIn));\n }\n if (tokenOut && tokenOut.id === WRAP_NEAR_CONTRACT_ID) {\n let outEstimate = new Big(0);\n const routes = separateRoutes(estimates, tokenOut.id);\n\n const bigEstimate = routes.reduce((acc, cur) => {\n const curEstimate = cur[cur.length - 1].estimate;\n return acc.plus(curEstimate);\n }, outEstimate);\n\n const minAmountOut = percentLess(\n slippageTolerance,\n\n scientificNotationToString(bigEstimate.toString())\n );\n\n transactionsRef.push(nearWithdrawTransaction(minAmountOut));\n }\n\n onSwap(transactionsRef);\n };\n\n const getEstimate = () => {\n if (\n !params.tokenIn ||\n !params.tokenOut ||\n poolFetchingState === 'loading'\n ) {\n setCanSwap(false);\n return;\n }\n setCanSwap(false);\n\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n setEstimates([]);\n return;\n }\n\n setSwapError(null);\n setIsEstimating(true);\n estimateSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n simplePools: params.simplePools,\n options: params.options,\n })\n .then(estimates => {\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n return;\n }\n setSwapError(null);\n\n const expectAmountOut = getExpectedOutputFromSwapTodos(\n estimates,\n params.tokenOut.id\n ).toString();\n\n setAmountOut(expectAmountOut);\n\n setEstimates(estimates);\n setCanSwap(true);\n })\n .catch(e => {\n setSwapError(e);\n setCanSwap(false);\n setAmountOut('');\n })\n .finally(() => {\n setIsEstimating(false);\n setForceEstimate(false);\n });\n };\n\n useEffect(() => {\n const estimateValidationPass =\n estimates.length > 0 &&\n params.tokenIn &&\n params.tokenOut &&\n estimateValidator(\n estimates,\n params.tokenIn,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn),\n params.tokenOut\n );\n\n if (isEstimating && estimates && !forceEstimate) return;\n if ((estimateValidationPass || swapError) && !forceEstimate) return;\n getEstimate();\n }, [\n params.amountIn,\n params.tokenIn?.id,\n params.tokenOut?.id,\n refreshTrigger,\n poolFetchingState,\n isEstimating,\n forceEstimate,\n ]);\n\n useEffect(() => {\n // setEstimating(false);\n\n setForceEstimate(true);\n }, [\n params.tokenIn?.id,\n params.tokenOut?.id,\n params.options?.enableSmartRouting,\n ]);\n\n return {\n amountOut,\n minAmountOut,\n fee,\n rate,\n estimates,\n makeSwap,\n canSwap,\n swapError,\n setAmountOut,\n isEstimating,\n };\n};\n\nexport const TokenPriceContext = createContext<Record<string, any> | null>(\n null\n);\n\nexport const useTokenPriceList = () => {\n const [tokenPriceList, setTokenPriceList] = useState<Record<string, any>>({});\n\n useEffect(() => {\n getTokenPriceList().then(setTokenPriceList);\n }, []);\n\n return tokenPriceList;\n};\n\nexport const TokenPriceContextProvider: React.FC = ({ children }) => {\n const tokenPriceList = useTokenPriceList();\n\n return (\n <TokenPriceContext.Provider value={tokenPriceList}>\n {children}\n </TokenPriceContext.Provider>\n );\n};\n\nexport const useTokenBalnces = (tokens: TokenMetadata[], AccountId: string) => {\n const [balances, setBalances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n const validTokens = tokens.filter(t => !!t?.id);\n\n const ids = validTokens.map(token => token.id);\n\n Promise.all(\n ids.map(id =>\n ftGetBalance(id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : id, AccountId)\n )\n ).then(balances => {\n const balancesMap = validTokens.reduce((acc, token, index) => {\n return {\n ...acc,\n [token.id]: toReadableNumber(token.decimals, balances[index]),\n };\n }, {});\n\n setBalances(balancesMap);\n });\n }, [tokens.map(t => t?.id).join('-')]);\n\n return balances;\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useContext, useRef, useMemo } from 'react';\nimport { TokenMetadata, EstimateSwapView, Pool } from '../types';\nimport {\n ThemeContext,\n useTokenPriceList,\n TokenPriceContext,\n useTokenBalnces,\n} from './state';\n\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { FiChevronLeft } from '@react-icons/all-files/fi/FiChevronLeft';\n\nimport { FiChevronUp } from '@react-icons/all-files/fi/FiChevronUp';\n\nimport { FaSearch } from '@react-icons/all-files/fa/FaSearch';\n\nimport { RiRefreshLine } from '@react-icons/all-files/ri/RiRefreshLine';\n\nimport { TiArrowSortedUp } from '@react-icons/all-files/ti/TiArrowSortedUp';\n\nimport { TiArrowSortedDown } from '@react-icons/all-files/ti/TiArrowSortedDown';\n\nimport { HiOutlineExternalLink } from '@react-icons/all-files/hi/HiOutlineExternalLink';\n\nimport { AiFillPushpin } from '@react-icons/all-files/ai/AiFillPushpin';\n\nimport { AiOutlinePushpin } from '@react-icons/all-files/ai/AiOutlinePushpin';\n\nimport { RiExchangeFill } from '@react-icons/all-files/ri/RiExchangeFill';\n\nimport { IoWarning } from '@react-icons/all-files/io5/IoWarning';\n\nimport { IoCloseOutline } from '@react-icons/all-files/io5/IoCloseOutline';\n\nimport { AiOutlineClose } from '@react-icons/all-files/ai/AiOutlineClose';\n\nimport './style.css';\nimport {\n getAccountName,\n symbolsArr,\n multiply,\n percentOfBigNumber,\n ONLY_ZEROS,\n toRealSymbol,\n toPrecision,\n toInternationalCurrencySystemLongString,\n calculateFeeCharge,\n calculateFeePercent,\n} from '../utils';\nimport { REF_WIDGET_STAR_TOKEN_LIST_KEY } from './constant';\nimport Big from 'big.js';\nimport {\n config,\n FEE_DIVISOR,\n getConfig,\n NEAR_META_DATA,\n TokenLinks,\n WRAP_NEAR_CONTRACT_ID,\n} from '../constant';\nimport {\n scientificNotationToString,\n percent,\n getPoolAllocationPercents,\n} from '../utils';\nimport {\n REF_WIDGET_SWAP_DETAIL_KEY,\n DEFAULT_START_TOKEN_LIST_TESTNET,\n DEFAULT_START_TOKEN_LIST_MAINNET,\n} from './constant';\nimport { PoolMode } from '../v1-swap/swap';\nimport { isMobile, separateRoutes, divide, getMax } from '../utils';\n\ninterface TokenAmountProps {\n balance?: string;\n reloading?: JSX.Element;\n token?: TokenMetadata;\n onSelectToken: () => void;\n amount: string;\n onChangeAmount?: (amount: string) => void;\n price?: string;\n onForceUpdate?: () => void;\n poolFetchingState?: 'loading' | 'end';\n}\n\nexport const getPriceImpact = (\n value: string,\n tokenIn: TokenMetadata,\n tokenInAmount: string\n) => {\n const textColor =\n Number(value) <= 1\n ? 'text-greenLight'\n : 1 < Number(value) && Number(value) <= 2\n ? 'text-warn'\n : 'text-error';\n\n const displayValue = scientificNotationToString(\n multiply(tokenInAmount || '0', divide(value, '100'))\n );\n\n const tokenInInfo =\n Number(displayValue) <= 0\n ? ` / 0 ${toRealSymbol(tokenIn.symbol)}`\n : ` / -${toInternationalCurrencySystemLongString(\n displayValue,\n 3\n )} ${toRealSymbol(tokenIn.symbol)}`;\n\n if (Number(value) < 0.01)\n return (\n <span className=\"text-greenLight\">\n {`< -0.01%`}\n {tokenInInfo}\n </span>\n );\n\n if (Number(value) > 1000)\n return (\n <span className=\"text-error\">\n {`< -1000%`}\n {tokenInInfo}\n </span>\n );\n\n return (\n <span className={`${textColor} font-sans`}>\n {`≈ -${toPrecision(value, 2)}%`}\n {tokenInInfo}\n </span>\n );\n};\n\nexport const SmartRouteV2 = ({\n tokens: tokensRaw,\n p,\n pools,\n}: {\n tokens: TokenMetadata[];\n p: string;\n pools: Pool[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const tokens = tokensRaw.map(t =>\n t.id === WRAP_NEAR_CONTRACT_ID\n ? { ...NEAR_META_DATA, id: WRAP_NEAR_CONTRACT_ID }\n : t\n );\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const ParaTokenFrom = ({\n tokenIn,\n p,\n }: {\n tokenIn: TokenMetadata;\n p: string;\n }) => {\n return (\n <div\n className=\"__ref-swap-widget-row-flex-center \"\n style={{\n width: '60px',\n }}\n >\n <span\n style={{\n marginRight: '4px',\n }}\n >\n {p}%\n </span>\n <span className=\"\">\n <Icon token={tokenIn} />\n </span>\n </div>\n );\n };\n const Icon = ({ token }: { token: TokenMetadata }) => {\n if (token.icon) {\n return (\n <img\n src={token.icon}\n alt=\"\"\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n flexShrink: 0,\n }}\n />\n );\n } else {\n return (\n <div\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n }}\n />\n );\n }\n };\n const Hub = ({ token, poolId }: { token: TokenMetadata; poolId: number }) => {\n return (\n <div\n className={`__ref-swap-widget-row-flex-center`}\n style={{\n width: '62px',\n height: '22px',\n }}\n >\n <div\n className={`w-full flex items-center justify-start pl-2 `}\n style={{\n marginRight: '4px',\n }}\n >\n <span className=\"text-gray-400\">{`#${poolId}`}</span>\n </div>\n <Icon token={token} />\n </div>\n );\n };\n\n if (tokens.length === 3) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n {/* <Hub token={tokens[0]} /> */}\n\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div\n className=\"\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n <div\n className=\"px-3\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[2]} poolId={pools?.[1]?.id} />\n </div>\n );\n } else if (tokens.length === 2) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div className=\"px-3\">\n <ArrowRight />\n </div>\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n </div>\n );\n } else {\n return null;\n }\n};\n\nexport const DetailView = ({\n tokenIn,\n tokenOut,\n rate,\n fee,\n minReceived,\n amountIn,\n amountOut,\n priceImpact,\n estimates,\n}: {\n tokenIn: TokenMetadata | undefined;\n tokenOut: TokenMetadata | undefined;\n rate: string;\n fee: number;\n minReceived: string;\n amountIn: string;\n amountOut: string;\n priceImpact: string;\n estimates: EstimateSwapView[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const storagedOpen = !!localStorage.getItem(REF_WIDGET_SWAP_DETAIL_KEY);\n\n const [showDetail, setShowDetail] = useState(storagedOpen || false);\n const [isRateReverse, setIsRateReverse] = useState(false);\n\n const tokensPerRoute = estimates\n .filter(swap => swap.inputToken === tokenIn?.id)\n .map(swap => swap.tokens);\n\n const identicalRoutes = separateRoutes(\n estimates,\n estimates[estimates.length - 1]?.outputToken || ''\n );\n\n const pools = identicalRoutes.map(r => r[0]).map(hub => hub.pool);\n const percents = useMemo(() => {\n if (!pools || pools.length === 0) return [];\n return getPoolAllocationPercents(pools);\n }, [pools]);\n\n const priceImpactDisplay = useMemo(() => {\n if (!priceImpact || !tokenIn || !amountIn) return null;\n return getPriceImpact(priceImpact, tokenIn, amountIn);\n }, [priceImpact, tokenIn, amountIn]);\n if (!tokenIn || !tokenOut) return null;\n\n const displayRate = `1 ${toRealSymbol(tokenIn.symbol)} ≈ ${\n Number(rate) < 0.01 ? '< 0.01' : toPrecision(rate, 2)\n } ${toRealSymbol(tokenOut.symbol)}`;\n\n const revertRate = new Big(1).div(ONLY_ZEROS.test(rate) ? '1' : rate || '1');\n\n const revertDisplayRate = `1 ${toRealSymbol(tokenOut.symbol)} ≈ ${\n Number(revertRate) < 0.01 ? '< 0.01' : toPrecision(revertRate.toString(), 2)\n } ${toRealSymbol(tokenIn.symbol)}`;\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n return (\n <div\n className=\"__ref-widget-swap-detail-view __ref-swap-widget-col-flex-start\"\n style={{\n color: secondary,\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div\n style={{\n color: primary,\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n onClick={() => {\n if (showDetail) localStorage.removeItem(REF_WIDGET_SWAP_DETAIL_KEY);\n else {\n localStorage.setItem(REF_WIDGET_SWAP_DETAIL_KEY, '1');\n }\n setShowDetail(!showDetail);\n }}\n >\n <div>Detail</div>\n <div\n style={{\n position: 'relative',\n }}\n >\n {!showDetail ? <FiChevronDown /> : <FiChevronUp />}\n </div>\n </div>\n\n {amountIn && amountOut && (\n <div className=\"__ref-swap-widget-row-flex-center\">\n <div>{isRateReverse ? revertDisplayRate : displayRate}</div>\n\n <RiExchangeFill\n onClick={() => {\n setIsRateReverse(!isRateReverse);\n }}\n size={16}\n style={{\n marginLeft: '4px',\n cursor: 'pointer',\n }}\n fill={iconDefault}\n />\n </div>\n )}\n </div>\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Minimum received</div>\n <div>{toPrecision(minReceived || '0', 8)}</div>\n </div>\n\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Fee</div>\n\n <div>\n {!amountIn\n ? '0'\n : `${calculateFeeCharge(fee, amountIn)} ${toRealSymbol(\n tokenIn.symbol\n )}(${toPrecision(calculateFeePercent(fee).toString(), 2)}%)`}\n </div>\n </div>\n </>\n )}\n\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Price impact</div>\n\n <div>{priceImpactDisplay}</div>\n </div>\n </>\n )}\n\n {estimates && estimates.length > 1 && showDetail && (\n <div\n className=\"__ref-swap-widget-swap_routes __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${borderColor}`,\n flexDirection: isMobile() ? 'column' : 'row',\n position: 'relative',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center\">\n <RouterIcon />\n <span\n className=\"__ref-swap-widget-valueStyle\"\n style={{\n marginLeft: '4px',\n whiteSpace: 'nowrap',\n }}\n >\n {'Auto Router'}\n </span>\n </div>\n\n <div\n className=\"\"\n style={{\n width: isMobile() ? '100%' : 'auto',\n minWidth: !isMobile() ? '70%' : '',\n }}\n >\n {tokensPerRoute.every(r => !!r) &&\n tokensPerRoute.map((tokens, index) => {\n if (!tokens) return null;\n return (\n <SmartRouteV2\n key={index + '-swap-route'}\n tokens={tokens}\n p={percents[index]}\n pools={identicalRoutes[index].map(hub => hub.pool)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const HalfAndMaxAmount = ({\n max,\n onChangeAmount,\n token,\n amount,\n}: {\n max: string;\n token: TokenMetadata;\n onChangeAmount: (amount: string) => void;\n amount: string;\n}) => {\n const halfValue = percentOfBigNumber(50, max, token.decimals);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const [hoverHalf, setHoverHalf] = useState<boolean>(false);\n const [hoverMax, setHoverMax] = useState<boolean>(false);\n\n return (\n <div className=\"__ref-swap-widget-token-amount_quick_selector __ref-swap-widget-row-flex-center\">\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item \"\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n marginRight: '4px',\n\n background:\n amount === halfValue && !ONLY_ZEROS.test(halfValue)\n ? active\n : hoverHalf\n ? hover\n : 'transparent',\n }}\n onMouseEnter={() => setHoverHalf(true)}\n onMouseLeave={() => setHoverHalf(false)}\n onClick={() => {\n const half = percentOfBigNumber(50, max, token.decimals);\n\n onChangeAmount(half);\n }}\n >\n Half\n </span>\n\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item\"\n onClick={() => {\n onChangeAmount(max);\n }}\n onMouseEnter={() => setHoverMax(true)}\n onMouseLeave={() => setHoverMax(false)}\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n background:\n amount === max && !ONLY_ZEROS.test(max)\n ? active\n : hoverMax\n ? hover\n : 'transparent',\n }}\n >\n Max\n </span>\n </div>\n );\n};\n\nexport const TokenAmount = (props: TokenAmountProps) => {\n const {\n balance,\n reloading,\n token,\n onSelectToken,\n amount,\n onChangeAmount,\n price,\n onForceUpdate,\n poolFetchingState,\n } = props;\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const [hoverSelect, setHoverSelect] = useState<boolean>(false);\n\n const handleChange = (amount: string) => {\n if (onChangeAmount) {\n onChangeAmount(amount);\n }\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (\n ref.current &&\n onChangeAmount &&\n token &&\n balance &&\n token.id === WRAP_NEAR_CONTRACT_ID &&\n Number(balance) - Number(ref.current.value) < 0.5\n ) {\n ref.current.setCustomValidity(\n 'Must have 0.5N or more left in wallet for gas fee.'\n );\n } else {\n ref.current?.setCustomValidity('');\n }\n }, [ref, balance, ref.current, ref.current?.value, token, amount]);\n\n const curMax = token ? getMax(token.id, balance || '0') : '0';\n\n return (\n <>\n <div\n className=\"__ref-swap-widger-token-amount \"\n style={{\n background: secondaryBg,\n flexDirection: isMobile() ? 'column' : 'row',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n width: isMobile() ? 'auto' : '40%',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-token-amount_token-select-button\"\n style={{\n color: primary,\n background: hoverSelect ? hover : 'transparent',\n border: `1px solide ${hoverSelect ? borderColor : 'transparent'}`,\n }}\n onClick={onSelectToken}\n onMouseEnter={() => setHoverSelect(true)}\n onMouseLeave={() => setHoverSelect(false)}\n >\n {!token ? (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n height: '26px',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n Select Token\n </span>\n </>\n ) : (\n <>\n <img\n src={token?.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '8px',\n }}\n />\n <span>{toRealSymbol(token?.symbol)}</span>\n </>\n )}\n <FiChevronDown\n style={{\n marginLeft: '4px',\n flexShrink: 0,\n }}\n />\n </div>\n\n {onForceUpdate && (\n <RiRefreshLine\n className={`${\n poolFetchingState === 'loading'\n ? '__ref-swap-widget-loading '\n : ''\n }`}\n style={{\n cursor: 'pointer',\n color: secondary,\n }}\n size={18}\n onClick={() => {\n onForceUpdate();\n }}\n />\n )}\n </div>\n\n <div\n className=\" __ref-swap-widget-token-amount_input\"\n style={{\n width: isMobile() ? '100%' : '60%',\n }}\n >\n <input\n ref={ref}\n max={!!onChangeAmount ? curMax : undefined}\n min=\"0\"\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n className=\"__ref-swap-widget-input-class\"\n step=\"any\"\n value={amount}\n type=\"number\"\n placeholder={!onChangeAmount ? '-' : '0.0'}\n onChange={({ target }) => {\n target.setCustomValidity('');\n handleChange(target.value);\n }}\n disabled={!onChangeAmount}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n color: primary,\n marginBottom: '8px',\n width: '100%',\n textAlign: 'right',\n fontSize: '20px',\n }}\n />\n\n <div\n style={{\n fontSize: '12px',\n color: secondary,\n textAlign: 'right',\n }}\n >\n {!price\n ? '$-'\n : '~$' +\n toInternationalCurrencySystemLongString(\n multiply(price, amount || '0'),\n 2\n )}\n </div>\n </div>\n </div>\n\n {!balance || !token || !onChangeAmount ? null : (\n <div\n className=\"__ref-swap-widger-token-amount_balance __ref-swap-widget-row-flex-center\"\n style={{\n fontSize: '12px',\n color: secondary,\n }}\n >\n <span>\n Balance:&nbsp;\n {toPrecision(balance, 2)}\n </span>\n {token && (\n <HalfAndMaxAmount\n token={token}\n max={getMax(token.id, balance)}\n onChangeAmount={handleChange}\n amount={amount}\n />\n )}\n </div>\n )}\n </>\n );\n};\n\nexport const SlippageSelector = ({\n slippageTolerance,\n onChangeSlippageTolerance,\n showSlip,\n setShowSlip,\n}: {\n slippageTolerance: number;\n onChangeSlippageTolerance: (slippageTolerance: number) => void;\n showSlip: boolean;\n setShowSlip: (showSlip: boolean) => void;\n}) => {\n const [invalid, setInValid] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const handleChange = (amount: string) => {\n onChangeSlippageTolerance(Number(amount));\n\n if (Number(amount) > 0 && Number(amount) < 100) {\n setInValid(false);\n } else {\n setInValid(true);\n }\n\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (!showSlip) return;\n\n document.onclick = () => setShowSlip(false);\n\n return () => {\n document.onclick = null;\n };\n }, [showSlip, setShowSlip]);\n\n if (!showSlip) return null;\n\n return (\n <div\n className=\"__ref-swap-widget_slippage_selector __ref-swap-widget-col-flex-start\"\n onClick={e => e.stopPropagation()}\n style={{\n background: container,\n border: `1px solid ${borderColor}`,\n }}\n >\n <span\n style={{\n color: primary,\n paddingBottom: '14px',\n }}\n >\n Slippage tolerance\n </span>\n\n <div\n className={`__ref-swap-widget-row-flex-center\n `}\n >\n <div\n className={`__ref-swap-widget-row-flex-center\n __ref-swap-widget_slippage_selector_input_container`}\n style={{\n border: `1px solid ${invalid ? '#FF7575' : borderColor}`,\n borderRadius,\n }}\n >\n <input\n ref={ref}\n max={99.99999}\n min={0.000001}\n defaultValue={slippageTolerance ? slippageTolerance : 0.5}\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n value={slippageTolerance}\n step=\"any\"\n type=\"number\"\n required={true}\n placeholder=\"\"\n onChange={({ target }) => handleChange(target.value)}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n width: '100%',\n color: invalid ? '#FF7575' : primary,\n }}\n className=\"__ref-swap-widget-input-class\"\n />\n <span className=\"ml-2\">%</span>\n </div>\n\n <button\n className={`__ref-swap-widget_slippage_selector_button __ref-swap-widget-button ${\n isMobile()\n ? '__ref-swap-widget-opacity-active'\n : '__ref-swap-widget-opacity-hover'\n }`}\n style={{\n color: primary,\n background: buttonBg,\n borderRadius,\n }}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n onChangeSlippageTolerance(0.5);\n setInValid(false);\n }}\n >\n Auto\n </button>\n </div>\n {invalid && (\n <div\n className=\" text-xs py-3 __ref-swap-widget-row-flex-center\"\n style={{\n color: '#FF7575',\n fontSize: '12px',\n padding: '10px 0px',\n alignItems: 'start',\n }}\n >\n <IoWarning\n className=\"\"\n style={{\n marginRight: '4px',\n }}\n size={20}\n />\n <div>{'The slippage tolerance is invalid.'}</div>\n </div>\n )}\n </div>\n );\n};\n\nconst StarToken = ({\n price,\n token,\n onDelete,\n onClick,\n}: {\n token: TokenMetadata;\n price: string;\n onDelete: (token: TokenMetadata) => void;\n onClick: (token: TokenMetadata) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const [hoverIcon, setHoverIcon] = useState(false);\n\n const [hoverClose, setHoverClose] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_star_token __ref-swap-widget-row-flex-center\"\n onMouseEnter={() => setHoverIcon(true)}\n onMouseLeave={() => setHoverIcon(false)}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n style={{\n background: hoverIcon ? hover : 'transparent',\n border: `1px solid ${borderColor}`,\n }}\n >\n {hoverIcon && (\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n right: '-4px',\n boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.25)',\n border: `1px solid ${borderColor}`,\n borderRadius: '100%',\n width: '16px',\n height: '16px',\n background: '#E3E3E3',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDelete(token);\n }}\n onMouseEnter={() => setHoverClose(true)}\n onMouseLeave={() => setHoverClose(false)}\n >\n <IoCloseOutline stroke={hoverClose ? 'black' : '#7e8a93'} />\n </div>\n )}\n\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '2px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n >\n {toRealSymbol(token.symbol)}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n );\n};\n\ninterface TokenProps {\n token: TokenMetadata;\n onClick: (token: TokenMetadata) => void;\n onClickPin: (token: TokenMetadata) => void;\n balance: string;\n price?: string;\n isSticky?: boolean;\n index: number;\n setHoverIndex: (index: number) => void;\n hoverIndex: number;\n}\n\nconst Token = ({\n token,\n onClick,\n price,\n balance,\n isSticky,\n onClickPin,\n index,\n setHoverIndex,\n hoverIndex,\n}: TokenProps) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const displayBalance =\n 0 < Number(balance) && Number(balance) < 0.001\n ? '< 0.001'\n : toPrecision(String(balance), 3);\n\n const [hoverOutLink, setHoverOutLink] = useState(false);\n\n const [hoverPin, setHoverPin] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_token-selector-token-list-item __ref-swap-widget-row-flex-center\"\n style={{\n background: hoverIndex === index ? hover : 'transparent',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n onMouseEnter={() => setHoverIndex(index)}\n onMouseLeave={() => setHoverIndex(-1)}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'space-between',\n }}\n >\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '36px',\n width: '36px',\n marginRight: '10px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n {toRealSymbol(token.symbol)}\n\n {TokenLinks[token.symbol] && (\n <HiOutlineExternalLink\n onMouseEnter={() => setHoverOutLink(true)}\n onMouseLeave={() => setHoverOutLink(false)}\n style={{\n marginLeft: '4px',\n marginTop: '2px',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n window.open(TokenLinks[token.symbol], '_blank');\n }}\n stroke={hoverOutLink ? iconHover : iconDefault}\n />\n )}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n marginTop: '2px',\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n }}\n >\n {displayBalance}\n\n {isSticky ? (\n <AiFillPushpin\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n ) : (\n <AiOutlinePushpin\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\ninterface TokenListProps {\n tokens: TokenMetadata[];\n onClick: (token: TokenMetadata) => void;\n balances: { [tokenId: string]: string };\n tokenPriceList: Record<string, any> | null;\n starList: string[];\n setStarList: (starList: string[]) => void;\n onDelete: (token: TokenMetadata) => void;\n}\n\nexport const TokenListTable = ({\n tokens,\n onClick,\n balances,\n tokenPriceList,\n starList,\n setStarList,\n onDelete,\n}: TokenListProps) => {\n const [currentSort, setCurrentSort] = useState('down');\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const onClickPin = (token: TokenMetadata) => {\n if (starList.includes(token.id)) {\n onDelete(token);\n } else {\n const newList = [...starList, token.id];\n setStarList(newList);\n }\n };\n\n const [hoverIndex, setHoverIndex] = useState(-1);\n\n const tokenSorting = (a: TokenMetadata, b: TokenMetadata) => {\n const b1 = balances[a.id];\n const b2 = balances[b.id];\n\n if (currentSort === 'up') {\n return Number(b1) - Number(b2);\n } else return Number(b2) - Number(b1);\n };\n\n return !tokens || tokens.length === 0 ? null : (\n <div className=\"__ref-swap-widget_token_list_table\">\n <div\n className=\"__ref-swap-widget_token_list_table_header\"\n style={{\n color: secondary,\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n <span className=\"\">Asset</span>\n\n <span\n onClick={() => {\n setCurrentSort(currentSort === 'up' ? 'down' : 'up');\n }}\n style={{\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n <span className=\"ml-1\">Balance</span>\n {currentSort === 'up' ? <TiArrowSortedUp /> : <TiArrowSortedDown />}\n </span>\n </div>\n\n <div className=\"__ref-swap-widget_token_list_table_content\">\n {tokens.sort(tokenSorting).map((token, index) => (\n <Token\n key={token.id + '-select-token-list-item-' + index}\n onClick={onClick}\n index={index}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n balance={balances?.[token.id] || '0'}\n onClickPin={onClickPin}\n isSticky={starList.includes(token.id)}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const TokenSelector = ({\n onSelect,\n width,\n tokens,\n onClose,\n AccountId,\n balances,\n className,\n}: {\n onSelect: (token: TokenMetadata) => void;\n width: string;\n tokens: TokenMetadata[];\n onClose: () => void;\n AccountId: string;\n balances: { [tokenId: string]: string };\n className?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n } = theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const tokenPriceList = useContext(TokenPriceContext);\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n };\n\n const storagedStartList = localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY)\n ? JSON.parse(localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY) || '[]')\n : null;\n\n const DEFAULT_START_TOKEN_LIST =\n getConfig().networkId === 'testnet'\n ? DEFAULT_START_TOKEN_LIST_TESTNET\n : DEFAULT_START_TOKEN_LIST_MAINNET;\n\n const [starList, setStarList] = useState<string[]>(\n storagedStartList || DEFAULT_START_TOKEN_LIST\n );\n\n const onDelete = (token: TokenMetadata) => {\n const newStarList = starList.filter(starToken => starToken !== token.id);\n\n setStarList(newStarList);\n\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(newStarList)\n );\n };\n\n const tableListFilter = (token: TokenMetadata) => {\n if (!searchValue) return true;\n\n const searchValueLower = searchValue.toLowerCase();\n\n return token.symbol?.toLowerCase().includes(searchValueLower) || false;\n };\n\n return (\n <div\n className={`__ref-swap_widget-token_selector __ref-swap-widget-container ${className}`}\n style={{\n position: 'relative',\n width,\n background: container,\n }}\n >\n <FiChevronLeft\n onClick={onClose}\n style={{\n color: primary,\n position: 'absolute',\n cursor: 'pointer',\n }}\n />\n <div\n className=\"__ref-swap-widget-header-title __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n justifyContent: 'center',\n paddingBottom: '24px',\n }}\n >\n Select a token\n </div>\n\n <div\n className=\"__ref-swap-widget-select-token_input __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${buttonBg}`,\n background: secondaryBg,\n }}\n >\n <FaSearch\n fill={iconDefault}\n style={{\n marginRight: '8px',\n }}\n />\n\n <input\n className=\"__ref-swap-widget-input-class\"\n placeholder=\"Search token...\"\n onChange={evt => handleSearch(evt.target.value)}\n style={{\n fontSize: '14px',\n color: primary,\n }}\n />\n </div>\n\n <div className=\"__ref-swap-widget_token-selector-star-tokens __ref-swap-widget-row-flex-center\">\n {starList.map(id => {\n if (!tokens || tokens.length === 0) return null;\n\n const token = tokens.find(token => token.id === id);\n\n return !token ? null : (\n <StarToken\n key={token.id + '-star-token'}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n onDelete={onDelete}\n onClick={onSelect}\n />\n );\n })}\n </div>\n\n <TokenListTable\n tokens={tokens.filter(tableListFilter)}\n tokenPriceList={tokenPriceList}\n onClick={onSelect}\n balances={balances}\n starList={starList}\n setStarList={starList => {\n setStarList(starList);\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(starList)\n );\n }}\n onDelete={onDelete}\n />\n </div>\n );\n};\n\nexport const Slider = ({\n showSlip,\n setShowSlip,\n}: {\n showSlip: boolean;\n setShowSlip: (show: boolean) => void;\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={() => setShowSlip(true)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.6957 13.0652C12.6957 14.1338 11.8294 15 10.7609 15C9.69235 15 8.82611 14.1338 8.82611 13.0652C8.82612 11.9967 9.69235 11.1304 10.7609 11.1304C11.8294 11.1304 12.6957 11.9967 12.6957 13.0652ZM14.5749 12.0941C14.6145 12.0894 14.6548 12.0869 14.6957 12.0869L15.9565 12.0869C16.5088 12.0869 16.9565 12.5346 16.9565 13.0869C16.9565 13.6392 16.5088 14.0869 15.9565 14.0869L14.6957 14.0869C14.651 14.0869 14.6071 14.084 14.564 14.0783C14.1171 15.7605 12.5837 17 10.7609 17C8.93806 17 7.40472 15.7605 6.95777 14.0783C6.91471 14.084 6.87078 14.0869 6.82617 14.0869L1.00009 14.0869C0.447802 14.0869 8.61245e-05 13.6392 8.61728e-05 13.0869C8.62211e-05 12.5346 0.447802 12.0869 1.00009 12.0869L6.82617 12.0869C6.86702 12.0869 6.90729 12.0894 6.94686 12.0941C7.37926 10.3906 8.92291 9.13044 10.7609 9.13044C12.5989 9.13044 14.1425 10.3906 14.5749 12.0941ZM4.26086 3.93478C4.26086 2.86623 5.1271 2 6.19565 2C7.2642 2 8.13043 2.86623 8.13043 3.93478C8.13043 5.00333 7.2642 5.86957 6.19565 5.86957C5.1271 5.86956 4.26086 5.00333 4.26086 3.93478ZM6.19565 9.66601e-07C4.3728 8.07243e-07 2.83946 1.23952 2.39252 2.92168C2.34944 2.91601 2.3055 2.91309 2.26087 2.91309L0.999999 2.91309C0.447715 2.91309 -7.14972e-07 3.3608 -7.63254e-07 3.91309C-8.11537e-07 4.46537 0.447715 4.91309 0.999999 4.91309L2.26087 4.91309C2.30173 4.91309 2.34202 4.91063 2.3816 4.90587C2.81401 6.60936 4.35766 7.86956 6.19565 7.86957C8.03363 7.86957 9.57728 6.60936 10.0097 4.90588C10.0493 4.91064 10.0895 4.91309 10.1304 4.91309L15.9565 4.91309C16.5087 4.91309 16.9565 4.46537 16.9565 3.91309C16.9565 3.3608 16.5087 2.91309 15.9565 2.91309L10.1304 2.91309C10.0858 2.91309 10.0418 2.91601 9.99877 2.92167C9.55182 1.23952 8.01849 1.12596e-06 6.19565 9.66601e-07Z\"\n fill={hover || showSlip ? '#00C6A2' : '#7E8A93'}\n />\n </svg>\n );\n};\n\nexport const RefIcon = (props: any) => {\n return (\n <svg\n {...props}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.36365 10H10L6.36365 6.36363V10Z\" fill=\"currentColor\" />\n <path\n d=\"M10 4.05312e-06L7.87879 3.86767e-06L10 2.12122L10 4.05312e-06Z\"\n fill=\"#00C6A2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51531 6.36364C6.46444 6.36364 6.41387 6.36232 6.36365 6.35971V4.08371L8.83901 1.78516C9.18802 2.26148 9.3941 2.8491 9.3941 3.48485C9.3941 5.07476 8.10522 6.36364 6.51531 6.36364ZM8.19255 1.14486L6.36365 2.84313V0.60999C6.41387 0.607383 6.46444 0.606064 6.51531 0.606064C7.14111 0.606064 7.72027 0.805743 8.19255 1.14486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.06046 0.606064H3.33319V3.29661L4.55696 4.52039L6.06046 3.12428V0.606064ZM6.06046 4.36486L4.5336 5.78267L3.33319 4.58226V10H6.06046V4.36486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.0303 0.606064H0V4.50881L2.27284 2.23598L3.0303 2.99344V0.606064ZM3.0303 4.27909L2.27284 3.52162L0 5.79446V10H3.0303V4.27909Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport const Loading = () => {\n return (\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"__ref-swap-widget-loading\"\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M19 35C27.8366 35 35 27.8366 35 19C35 10.1634 27.8366 3 19 3C10.1634 3 3 10.1634 3 19\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Warning = () => {\n return (\n <svg\n width=\"49\"\n height=\"49\"\n viewBox=\"0 0 49 49\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21.0359 5.99999C22.5755 3.33333 26.4245 3.33333 27.9641 6L42.2535 30.75C43.7931 33.4167 41.8686 36.75 38.7894 36.75H10.2106C7.13137 36.75 5.20688 33.4167 6.74648 30.75L21.0359 5.99999Z\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"14\"\n x2=\"24\"\n y2=\"24\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"24\" cy=\"30\" r=\"2\" fill=\"#FF689E\" />\n </svg>\n );\n};\n\nexport const Success = () => {\n return (\n <div\n style={{\n position: 'relative',\n height: '32px',\n width: '32px',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n width=\"30\"\n height=\"23\"\n viewBox=\"0 0 30 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n }}\n >\n <path\n d=\"M2 11.2727L10.4898 20L28 2\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport const RouterIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"12\"\n viewBox=\"0 0 16 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mr-2\"\n >\n <path\n d=\"M13.4862 6.25488C12.2813 6.25488 11.2485 7.10159 11.019 8.28698H6.02703L4.7647 7.21448C4.93684 6.8758 5.05159 6.48067 5.10897 6.0291C5.10897 5.52107 4.93684 4.9566 4.59257 4.56147L6.02703 3.1503H11.0763C11.478 4.44858 12.8551 5.23884 14.1748 4.84371C15.4945 4.44858 16.2978 3.09385 15.8961 1.79557C15.4945 0.497295 14.1174 -0.292963 12.7977 0.102166C11.937 0.327954 11.3059 1.00532 11.0763 1.79557H5.51062L3.50237 3.77122C3.21548 3.65832 2.92859 3.60188 2.58432 3.60188C1.20723 3.54543 0.0596573 4.61792 0.00227872 5.97265C-0.0550999 7.32738 0.977715 8.45632 2.3548 8.51276H2.58432C3.04334 8.51276 3.44499 8.39987 3.84664 8.17408L5.568 9.6417H11.1911C11.7075 10.8835 13.142 11.5045 14.4043 11.0529C15.6666 10.5449 16.2978 9.13368 15.8388 7.89185C15.4371 6.8758 14.5191 6.25488 13.4862 6.25488V6.25488ZM13.4862 1.344C14.1174 1.344 14.6338 1.85202 14.6338 2.47294C14.6338 3.09385 14.1174 3.60188 13.4862 3.60188C12.8551 3.60188 12.3387 3.09385 12.3387 2.47294C12.3387 1.85202 12.8551 1.344 13.4862 1.344ZM2.58432 7.15804C1.95315 7.15804 1.43674 6.65001 1.43674 6.0291C1.43674 5.40818 1.95315 4.90016 2.58432 4.90016C3.21548 4.90016 3.73189 5.40818 3.73189 6.0291C3.73189 6.65001 3.21548 7.15804 2.58432 7.15804ZM13.4862 9.86749C12.8551 9.86749 12.3387 9.35947 12.3387 8.73855C12.3387 8.11763 12.8551 7.60961 13.4862 7.60961C14.1174 7.60961 14.6338 8.11763 14.6338 8.73855C14.6338 9.35947 14.1174 9.86749 13.4862 9.86749Z\"\n fill=\"url(#paint0_linear_12461_2312)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_12461_2312\"\n x1=\"8\"\n y1=\"0\"\n x2=\"8\"\n y2=\"11.2\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#00C6A2\" />\n <stop offset=\"1\" stopColor=\"#8C78FF\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport const Notification = ({\n state,\n tx,\n detail,\n open,\n setOpen,\n setState,\n}: {\n state?: 'success' | 'fail' | null;\n setState?: (state: 'success' | 'fail' | null) => void;\n tx?: string;\n detail?: string;\n\n open: boolean;\n setOpen: (open: boolean) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n } = theme;\n\n if (!open) return null;\n\n return (\n <div\n className=\"__ref-swap-widget-notification\"\n style={{\n color: primary,\n background: container,\n }}\n >\n <div className=\"__ref-swap-widget-notification__icon\">\n {state === null && <Loading />}\n {state === 'fail' && <Warning />}\n {state === 'success' && <Success />}\n </div>\n\n <div\n style={{\n fontSize: '16px',\n marginTop: '10px',\n marginBottom: '6px',\n }}\n >\n {state === 'success' && <p>Success!</p>}\n {state === 'fail' && <p>Swap Failed!</p>}\n </div>\n <div\n className=\"__ref-swap-widget-notification__text\"\n style={{\n color: primary,\n }}\n >\n {(state === null || state === undefined) && (\n <p>Waiting for confirmation</p>\n )}\n {state === 'fail' && !!tx && (\n <a\n className=\"text-primary font-semibold\"\n href={`${config.explorerUrl}/txns/${tx}`}\n target=\"_blank\"\n style={{\n textDecoration: 'underline',\n fontSize: '14px',\n color: primary,\n }}\n rel=\"noreferrer\"\n >\n Click to view.\n </a>\n )}\n\n {state === 'success' && detail}\n </div>\n {state !== null && (\n <button\n className=\"__ref-swap-widget-notification__button __ref-swap-widget-button\"\n style={{\n background: buttonBg,\n fontWeight: 700,\n color: 'white',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n setState && setState(null);\n }}\n >\n Close\n </button>\n )}\n </div>\n );\n};\n\nexport const ArrowRight = () => {\n return (\n <div className=\"mx-1\">\n <svg\n width=\"12\"\n height=\"5\"\n viewBox=\"0 0 12 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.864 4.4C9.024 4.05867 9.17867 3.76 9.328 3.504C9.488 3.248 9.64267 3.03467 9.792 2.864H0.464V2.192H9.792C9.64267 2.01067 9.488 1.792 9.328 1.536C9.17867 1.28 9.024 0.986666 8.864 0.656H9.424C10.096 1.43467 10.8 2.01067 11.536 2.384V2.672C10.8 3.03467 10.096 3.61067 9.424 4.4H8.864Z\"\n fill=\"#7E8A93\"\n />\n </svg>\n </div>\n );\n};\n\nexport const AccountButton = ({\n AccountId,\n onDisConnect,\n}: {\n AccountId: string;\n onDisConnect: () => void;\n}) => {\n const [hoverAccount, setHoverAccount] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n borderColor,\n } = theme;\n\n return !AccountId ? null : (\n <div\n className=\"__ref-swap-widget-header-button-account __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n background: secondaryBg,\n border: `1px solid ${borderColor}`,\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n hoverAccount && onDisConnect();\n }}\n onMouseEnter={() => setHoverAccount(true)}\n onMouseLeave={() => setHoverAccount(false)}\n >\n {hoverAccount ? 'Disconnect' : getAccountName(AccountId)}\n </div>\n );\n};\n","import { getConfig } from '../constant';\n\nexport const DefaultTestnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n 'https://assets.onlinelabels.com/images/clip-art/pitr/pitr_Bananas_icon.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'banana.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped USDC',\n symbol: 'nUSDC',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png',\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'nusdc.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped Tether',\n symbol: 'nUSDT',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/825.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'nusdt.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'RFT',\n icon: '',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'rft.tokenfactory.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dai.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'weth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hapi.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'paras.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'ref.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMEYyQUMzIi8+CjxwYXRoIGQ9Ik0xMDMuNTc0IDg0LjU3M0MxMDIuMDUyIDg2LjU4MDggMTAwLjg1MyA4OS4xNDAyIDk5LjY5NzIgOTEuNjU1OUM5OC41NDA5IDk0LjE3MTYgOTcuMzkyIDk2LjY1OTYgOTYuMjE0OSA5OC40MjU1Qzk1LjAzNzggMTAwLjE5MSA5My45Mjg0IDEwMS4wNTggOTIuNzMyNiAxMDEuMDU4QzkxLjI3MDMgMTAxLjA1OCA5MC40NDI1IDEwMC42NDMgODkuNzEwMiA5OS44NjcyQzg4Ljk3NzYgOTkuMDkxNiA4OC40MDY1IDk3LjkwNSA4Ny44NzAzIDk2LjY3MDRDODcuMzMzOSA5NS40MzU4IDg2Ljg0NzcgOTQuMTM1MSA4Ni4wMzA1IDkzLjAzNDlDODUuMjEzMyA5MS45MzQ3IDgzLjkxMDQgOTEuMDI5MSA4Mi4yMTk4IDkxLjAyOTFDODEuMjYzMyA5MS4wMjkxIDgwLjQyMzcgOTEuNDQ1MSA3OS43ODg2IDkyLjAzMkM3OS4xNTM0IDkyLjYxODkgNzguNjkwMSA5My4zOTAxIDc4LjI3NzQgOTQuMjI1OUM3Ny40NTIxIDk1Ljg5NjggNzYuODM1NCA5Ny45NjgyIDc2LjA0MzUgOTkuOTkyN0M3NS4yNTE2IDEwMi4wMTcgNzQuMjc3MSAxMDMuOTk1IDcyLjk1NTUgMTA1LjM4M0M3MS42MzM2IDEwNi43NzIgNjkuOTk5MiAxMDcuNjQgNjcuNTAxOCAxMDcuNjRIMzguMDY2MkMzNy42ODcxIDEwNy42MzUgMzcuMzM0NSAxMDcuODI1IDM3LjE0MzMgMTA4LjEzN0MzNi45NTIyIDEwOC40NDkgMzYuOTUyMiAxMDguODM2IDM3LjE0MzMgMTA5LjE0OEMzNy4zMzQ1IDEwOS40NjEgMzcuNjg3MSAxMDkuNjUxIDM4LjA2NjIgMTA5LjY0Nkg2Ny41MDE4QzcwLjU0NzkgMTA5LjY0NiA3Mi44OTg1IDEwOC40MTYgNzQuNTMyMyAxMDYuN0M3Ni4xNjYyIDEwNC45ODQgNzcuMTg3NSAxMDIuNzk3IDc4LjAxNDYgMTAwLjY4MkM3OC44NDE3IDk4LjU2NzUgNzkuNDc1IDk2LjQ3NDEgODAuMTgyOCA5NS4wNDA3QzgwLjUzNyA5NC4zMjQgODAuODg5MyA5My43OTE5IDgxLjIzNDEgOTMuNDczOEM4MS41Nzg5IDkzLjE1NTIgODEuODI2NiA5My4wMzQ5IDgyLjIxOTggOTMuMDM0OUM4My4yMjc5IDkzLjAzNDkgODMuNzQyNyA5My40NDUzIDg0LjMyMjIgOTQuMjI1OUM4NC45MDE4IDk1LjAwNiA4NS40MTIgOTYuMjEyNyA4NS45NjQ5IDk3LjQ4NTRDODYuNTE3NyA5OC43NTc3IDg3LjA4OTYgMTAwLjA3OCA4OC4xMzMxIDEwMS4xODRDODkuMTc2NiAxMDIuMjg5IDkwLjczNzUgMTAzLjA2NCA5Mi43MzI2IDEwMy4wNjRDOTQuOTkzOCAxMDMuMDY0IDk2LjY1OTEgMTAxLjQ4NiA5Ny45ODg4IDk5LjQ5MTJDOTkuMzE4NSA5Ny40OTYyIDEwMC40NTQgOTQuOTY5NSAxMDEuNjAzIDkyLjQ3MDlDMTAyLjc1MSA4OS45NzE4IDEwMy45NTMgODcuNTE2OSAxMDUuMjgyIDg1Ljc2MzhDMTA2LjYxMSA4NC4wMTA3IDEwNy45MjUgODMuMDA1OCAxMDkuNTUzIDgzLjAwNThDMTEwLjI5NSA4My4wMDU4IDExMC45NDYgODMuMjcyOCAxMTEuNjU2IDgzLjg4MzRDMTEyLjM2NSA4NC40OTM5IDExMy4wNjggODUuNDUxNyAxMTMuNzU4IDg2LjY0MTRDMTE1LjEzOCA4OS4wMjA3IDExNi40NDcgOTIuMzI4OCAxMTcuODMyIDk1LjY2NzVDMTE5LjIxNiA5OS4wMDYyIDEyMC43MTcgMTAyLjM3NiAxMjIuNjk0IDEwNS4wMDdDMTI0LjY3MSAxMDcuNjM4IDEyNy4yMzQgMTA5LjU4MyAxMzAuNTc4IDEwOS41ODNIMTYwLjkzNEMxNjEuMzEzIDEwOS41ODggMTYxLjY2NiAxMDkuMzk4IDE2MS44NTcgMTA5LjA4NkMxNjIuMDQ4IDEwOC43NzMgMTYyLjA0OCAxMDguMzg3IDE2MS44NTcgMTA4LjA3NEMxNjEuNjY2IDEwNy43NjIgMTYxLjMxMyAxMDcuNTcyIDE2MC45MzQgMTA3LjU3N0gxMzAuNTc4QzEyOC4wNjcgMTA3LjU3NyAxMjYuMTcgMTA2LjIzMiAxMjQuNDAyIDEwMy44NzlDMTIyLjYzNCAxMDEuNTI2IDEyMS4xMDggOTguMjgzNyAxMTkuNzM3IDk0Ljk3ODFDMTE4LjM2NiA5MS42NzIxIDExNy4xMDggODguMzA1MiAxMTUuNTk4IDg1LjcwMTJDMTE0Ljg0MyA4NC4zOTkxIDExNC4wOCA4My4yODQ2IDExMy4xMDEgODIuNDQxOEMxMTIuMTIyIDgxLjU5ODcgMTEwLjg4MyA4MSAxMDkuNTUzIDgxQzEwNy4wMzYgODEgMTA1LjA5NiA4Mi41NjUzIDEwMy41NzQgODQuNTczWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ii8+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'pulse.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ether',\n symbol: 'ETH',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'eth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'aurora.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'skyward.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 67.79 67.79' version='1.1'%3E%3Cpath style='fill:%23fff' d='M33.934.311a33.9 33.9 0 1 0 33.89 33.9 33.9 33.9 0 0 0-33.89-33.9z' id='path505'%3E%3C/path%3E%3Cpath style='fill:%23ffbd00;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m11.803 27.8 12.387.359 2.361 5.959 7.616 3.31 8.523-3.322 2.348-5.87 12.269.03L54.822 54.2 31.837 58.86 12.89 52.648z' id='path1051'%3E%3C/path%3E%3Cpath style='fill:%23a0a0ff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m34.657 12.575-10.43 9.633 1.096 10.01 8.844 5.21 9.785-5.287 1.086-11.33z' id='path1815'%3E%3C/path%3E%3Cpath id='path928' style='fill:%23666;fill-opacity:1' d='M33.928 4.282a29.93 29.93 0 0 1 4.682.367 29.93 29.93 0 0 1 25.244 29.572 29.93 29.93 0 0 1-29.92 29.92 29.93 29.93 0 0 1-.006-59.86zm.729 8.293c-2.03 5.668-8.815 9.76-8.815 14.521 0 4.76 3.912 8.62 8.737 8.62 4.824 0 8.736-3.86 8.736-8.62s-6.707-8.697-8.658-14.521zM37.84 22.67a2.524 2.446 0 0 1 .246.012 2.524 2.446 0 0 1 .246.035 2.524 2.446 0 0 1 .24.059 2.524 2.446 0 0 1 .233.08 2.524 2.446 0 0 1 .225.104 2.524 2.446 0 0 1 .213.123 2.524 2.446 0 0 1 .197.142 2.524 2.446 0 0 1 .183.162 2.524 2.446 0 0 1 .168.178 2.524 2.446 0 0 1 .147.191 2.524 2.446 0 0 1 .127.207 2.524 2.446 0 0 1 .105.217 2.524 2.446 0 0 1 .084.227 2.524 2.446 0 0 1 .06.232 2.524 2.446 0 0 1 .038.237 2.524 2.446 0 0 1 .012.24 2.524 2.446 0 0 1-.086.633 2.524 2.446 0 0 1-.252.59 2.524 2.446 0 0 1-.403.507 2.524 2.446 0 0 1-.521.389 2.524 2.446 0 0 1-.61.244 2.524 2.446 0 0 1-.652.084 2.524 2.446 0 0 1-.654-.084 2.524 2.446 0 0 1-.607-.244 2.524 2.446 0 0 1-.524-.389 2.524 2.446 0 0 1-.4-.508 2.524 2.446 0 0 1-.252-.59 2.524 2.446 0 0 1-.086-.632 2.524 2.446 0 0 1 .086-.633 2.524 2.446 0 0 1 .252-.59 2.524 2.446 0 0 1 .4-.506A2.524 2.446 0 0 1 36.58 23a2.524 2.446 0 0 1 .607-.247 2.524 2.446 0 0 1 .654-.082zM24.19 28.16a16.579 2.485 0 0 0-6.502 1.965 16.579 2.485 0 0 0 7.635 2.093 10.483 10.6 0 0 1-1.133-4.058zm20.848.078a10.483 10.6 0 0 1-1.086 3.904 16.579 2.485 0 0 0 6.894-2.017 16.579 2.485 0 0 0-5.808-1.887zm6.925 3.21c-.455 1.177-4.097 2.154-9.273 2.659a10.483 10.6 0 0 1-8.072 3.861 10.483 10.6 0 0 1-8.067-3.85c-5.276-.506-8.978-1.498-9.398-2.64h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm.032 7.323c-.67 1.73-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm0 7.21c-.67 1.69-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24z'%3E%3C/path%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'stnear.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'oct.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game GEM!!',\n symbol: 'gGEM',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 4,\n id: 'gem.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Gold!!',\n symbol: 'gGOLD',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'gold.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Elixir!!',\n symbol: 'gELXR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'elixir.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usdn.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Learn NEAR Club',\n symbol: 'LNC',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIACAAIAMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABgcDBAj/xAAjEAACAgICAgMAAwAAAAAAAAABAgMEBQYAEQcSEyExFCJB/8QAGAEAAgMAAAAAAAAAAAAAAAAAAQMABwj/xAAlEQACAQMDBAIDAAAAAAAAAAABEQMAAgQxQWESIZHwUXGBwfH/2gAMAwEAAhEDEQA/AOqOHNHN5vF67jnyuZtCtVSSKJpCjN00kixoOlBP27qPz/fv64qZDzBq+L8h2/Gt2rk0yVXFJlROK3tVlVhMwhEoPSzeteZgr+vsqMVJ9W6zZHBLKCbLSV38J+GKva+aONC8p/v+U88ORWv5t3fyTFTbwTpWPvxpjMfl8lc2O49SvCLldbENGMwLJ72vidWf7CxB4ifcSDqmaPseS2rXIMtmdYva9kRJLWuY632TDPE5jf436HyxFlJjlAAdCrADvrjZ8OXHt6pEOGGPhjUP3alxZUc9ys78oo/R0rD5E1O3u+oXdboZaPGWrD15oLctU2EikhnjlUtGHQuCYwCPZf394jZDwNc2pdht75uMF3LZ2ji4I72LxQpGhZoT25YLMKySzdN1aVSpJBCOD2shVa7w5IcyaC3ojKDegex1T2HbTtRkxYpruq8MpannbTc1EcB4D3jx3UxaeLPK1fFSpgcfhsxBkcH/AC6V+epWirR5CKFZ42gn+OPpv7uHCQq31GDymeP9XymnarTwed27JbPk0LzXcrfIElmeRy8jKgJEUfsxCRKSqIFUdgd8YuHDPmzZIUpB5QB4ZAZ9+BQhxIoC4wR+SvDXvNf/2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'lnc.factory.tokenhub.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'wbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='96' height='96' rx='48' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3E%3C/svg%3E\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-v2.pool.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%0A%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3848L21.3848 17.1421L19.3669 15.1243C18.5576 17.0303 17.0303 18.5576 15.1243 19.3669L17.1421 21.3848ZM9.43294 19.5793C7.45322 18.909 5.82115 17.4848 4.87848 15.6484L3.24264 17.2843L7.48528 21.5269L9.43294 19.5793ZM4.63306 8.8757C5.44239 6.96975 6.96975 5.44239 8.8757 4.63306L7.24264 3L3 7.24264L4.63306 8.8757ZM15.6484 4.87848L17.3848 3.14214L21.6274 7.38478L19.5793 9.43294C18.909 7.45322 17.4848 5.82115 15.6484 4.87848Z' fill='black'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.staderlabs.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'refLove Finance Token',\n symbol: 'refLove',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyODggMzI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyODggMzI0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzAwQzA4Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggZD0iTTE3My40LDE5MS40VjI2OEgyNTBMMTczLjQsMTkxLjR6IE0xMDcuMiwxMjUuMmwzMCwzMGwzMC4zLTMwLjNWNjkuMmgtNjAuNFYxMjUuMnogTTEwNy4yLDE1Mi4zVjI2OGg2MC40VjE1MmwtMzAuMywzMC4zCgkJTDEwNy4yLDE1Mi4zeiBNMTc3LjEsNjkuMmgtMy43VjExOUwyMTIsODAuNUMyMDEuOCw3My4yLDE4OS42LDY5LjIsMTc3LjEsNjkuMnogTTM4LDE3NS41VjI2OGg2My4zVjE0Ni40bC0xNy4xLTE3LjFMMzgsMTc1LjV6CgkJIE0zOCwxNDguNWw0Ni4yLTQ2LjJsMTcuMSwxNy4xVjY5LjJIMzhWMTQ4LjV6IE0yMzYuOCwxMjguOUwyMzYuOCwxMjguOWMwLTEyLjUtMy45LTI0LjctMTEuMi0zNC44bC01Mi4xLDUydjQyLjRoMy43CgkJQzIxMC4xLDE4OC41LDIzNi44LDE2MS44LDIzNi44LDEyOC45eiIvPgoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMTAuMiw1NiAyNTAsOTUuOCAyNTAsNTYgCSIvPgo8L2c+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v010.refve.testnet',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDT',\n symbol: 'USDT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdt.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDC',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdc.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdtt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.v1.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tiptoken',\n symbol: 'TT',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'tiptoken.testnet',\n },\n];\n\nexport const DefaultMainnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1INCH Token',\n symbol: '1INCH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Graph Token',\n symbol: 'GRT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.skyward.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cucumber',\n symbol: 'CUCUMBER',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🥒%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'farm.berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HuobiToken',\n symbol: 'HT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Gitcoin',\n symbol: 'GTC',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Uniswap',\n symbol: 'UNI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FF007A' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z' fill-rule='nonzero'/%3E%3Cpath d='M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z' fill-rule='nonzero'/%3E%3Cpath d='M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z' fill-rule='nonzero'/%3E%3Cpath d='M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ChainLink Token',\n symbol: 'LINK',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%232A5ADA' cx='16' cy='16' r='16'/%3E%3Cpath d='M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.v2.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.paras.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1MILNFT',\n symbol: '1MIL',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 146 146' xml:space='preserve'%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 0L0 31L31 31L31 0L0 0z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 0L31 31L32 31L31 0z'/%3E %3Cpath style='fill:%23000000; stroke:none;' d='M32 0L32 32L0 32L0 38L32 38L32 70L0 70L0 76L32 76L32 109L0 109L0 114L32 114L32 146L38 146L38 114L70 114L70 146L76 146L76 114C82.7843 114 102.446 110.653 107.397 115.603C112.241 120.448 109 139.378 109 146L114 146L114 114L146 114L146 109C139.378 109 120.448 112.241 115.603 107.397C110.653 102.446 114 82.7843 114 76L146 76L146 70L114 70L114 38L146 38L146 32C139.378 32 120.448 35.2414 115.603 30.3966C110.759 25.5518 114 6.6225 114 0L109 0L109 32L76 32L76 0L71 0L71 32L38 32L38 0L32 0z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M38 0L38 32L70 32L70 31L39 31L38 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 0L39 31L70 31L70 0L39 0z'/%3E %3Cpath style='fill:%230d2000; stroke:none;' d='M70 0L70 32L71 32L70 0z'/%3E %3Cpath style='fill:%233f0180; stroke:none;' d='M76 0L76 32L108 32L108 31L77 31L76 0z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M77 0L77 31L108 31L108 0L77 0z'/%3E %3Cpath style='fill:%232f0060; stroke:none;' d='M108 0L108 32L109 32L108 0z'/%3E %3Cpath style='fill:%231d4101; stroke:none;' d='M114 0L114 31L115 31L114 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M115 0L115 31L146 31L146 0L115 0z'/%3E %3Cpath style='fill:%239f017c; stroke:none;' d='M0 31L0 32L32 32L0 31z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M115 31L115 32L146 32L115 31z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M0 38L0 69L31 69L31 38L0 38z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M31 38L31 69L0 69L0 70L32 70L31 38z'/%3E %3Cpath style='fill:%23be0094; stroke:none;' d='M38 38L38 70L39 70L38 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M39 38L39 69L70 69L70 38L39 38z'/%3E %3Cpath style='fill:%23200018; stroke:none;' d='M70 38L70 70L71 70L70 38z'/%3E %3Cpath style='fill:%23007880; stroke:none;' d='M76 38L76 70L77 70L76 38z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M77 38L77 69L108 69L108 38L77 38z'/%3E %3Cpath style='fill:%23015a60; stroke:none;' d='M108 38L108 70L109 70L108 38z'/%3E %3Cpath style='fill:%23400032; stroke:none;' d='M114 38L114 70L115 70L114 38z'/%3E %3Cpath style='fill:%23de00ad; stroke:none;' d='M115 38L115 39L146 39L115 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M115 39L115 70L146 70L146 39L115 39z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M39 69L39 70L70 70L39 69z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M77 69L77 70L108 70L77 69z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M0 76L0 77L32 77L0 76z'/%3E %3Cpath style='fill:%235f00be; stroke:none;' d='M38 76L38 108L39 108L39 77L70 77L38 76z'/%3E %3Cpath style='fill:%230f001f; stroke:none;' d='M70 76L70 108L71 108L70 76z'/%3E %3Cpath style='fill:%23388000; stroke:none;' d='M76 76L76 108L77 108L76 76z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M77 76L77 77L108 77L77 76z'/%3E %3Cpath style='fill:%232a6000; stroke:none;' d='M108 76L108 108L109 108L108 76z'/%3E %3Cpath style='fill:%23003d40; stroke:none;' d='M114 76L114 108L115 108L114 76z'/%3E %3Cpath style='fill:%2300b4bf; stroke:none;' d='M115 76L115 77L146 77L115 76z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M0 77L0 108L32 108L32 77L0 77z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M39 77L39 108L70 108L70 77L39 77z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M77 77L77 108L108 108L108 77L77 77z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M115 77L115 108L146 108L146 77L115 77z'/%3E %3Cpath style='fill:%230f2000; stroke:none;' d='M0 108L0 109L32 109L0 108M76 108L76 109L108 109L76 108z'/%3E %3Cpath style='fill:%23001e20; stroke:none;' d='M115 108L115 109L146 109L115 108z'/%3E %3Cpath style='fill:%23810064; stroke:none;' d='M0 114L0 115L32 115L0 114z'/%3E %3Cpath style='fill:%23398000; stroke:none;' d='M38 114L38 115L70 115L38 114z'/%3E %3Cpath style='fill:%23800063; stroke:none;' d='M76 114L76 146L77 146L77 115L108 115L76 114z'/%3E %3Cpath style='fill:%23200041; stroke:none;' d='M114 114L114 146L115 146L114 114z'/%3E %3Cpath style='fill:%23410080; stroke:none;' d='M115 114L115 115L146 115L115 114z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 115L0 146L31 146L31 115L0 115z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 115L31 146L32 146L31 115z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M38 115L38 146L39 146L38 115z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 115L39 146L70 146L70 115L39 115z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M77 115L77 146L108 146L108 115L77 115z'/%3E %3Cpath style='fill:%2360004a; stroke:none;' d='M108 115L108 146L109 146L108 115z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M115 115L115 146L146 146L146 115L115 115z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'marma j token',\n symbol: 'marmaj',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCABgAGADASIAAhEBAxEB/8QAGwAAAwADAQEAAAAAAAAAAAAABQYHAgQIAAP/xAAwEAACAgIBAwQCAgIBBAMBAAABAgMEBRESBhMhAAciMQgUFUEyQlIkUWFyFhcjcf/EABoBAAMBAQEBAAAAAAAAAAAAAAMEBQAGAgH/xAAzEQABAwIFAgQEBgIDAAAAAAABAgMEESEABQYxURJBYXGBsRMikaEjM8HR8PEU4TJCUv/aAAwDAQACEQMRAD8A589vPx06I6g9vsD1jlopMobSxWMhahsHnAG0WVgQdgK33rYOt6AJ9NT/AIt+2NXKZafI4mxFjaQWGBjMQ0kjIp8H+yNgKP7LHf16+347xnLdEYjGdJfuxZKeisc7QzKsCHtKO7KrDXjY/okgDXj0z+1eD6y6HgmrZXqbH5K9kP8ArMMt6Sa9XMIXg0sMjlTHI6mNmHEniV0fLAc48/J1LIKGqsoasSO/Jr6ffHfSHoGlojbrzQdW4AQKVoaWFKX3qfLCEn41dF0uoaFirgq2Qx4hlazBJDamVJWbUY5RnXELy34OyAdefU3656L9sekcvcizXT5ihhkavGwjmiikfmpT5aPBwj8G58QdBgAfvqmbOddZHJVsZarrVNmVkknrRKqxRhSe5uRmDDYUaHkchsaO/SN/9adPX+sHnz+Re1lZMpJF+njbEYSzEjIknfbWlnCuCU+OwRr/AC5BefqOAwn4EdRJTue559t8Ro2VT33FS56UpCtk9hxb9MT1fxz6Ow2Akms4xcvJZjjNaWoxVa0UhCrIWYnmfmCq/ItxJ8jyDnUf41e0axQ3cPXZqn8c9szCdkDM4+HykUAEBWGgrEnfga2Lp+rhrvHHSQQxyfyk/wAZKaxNBBWn4xcZipQeEgQDkn+Q0fPpPs2RH/JyQd5Wetc5yzI8Qj5N3wiyyKdKVmJPDmxZSOXx36mQJk1785Cwd6moBGFs/lxm4jpiFBTQBNNwa3vie9OfjT7PyCfI5yBhVbGra7pnZlV1X5kNGNEnkoClVIIXw29kLJ+OfQ2a6ahlgxww81NJWtT2uTi1ChYNJtW0hHEll0rLyB8D7rlayJP4x5+8zLWp8JYUeUScW75RpY1G1CwgjmEYMwHL5b9OH6uGpc8dHBDJJ/KQfGOmsrTwWZ+MvKYKEPh50I5P/idnx6+T5k1n8lKyd6ipAHtjafmRlxGjLKAmhCq7k1tfeuOOOh+iOgevMzWjwPRVyON5o4mWaRVQHkxbfcdSSyR8VH9A8iG34pEX4jdLnM2rFzFZCvV7Cfq1hqRFlVtuXkTl8GU6GypGmJ/rbzJ0BhYOp44sTkTFkYsnFAlTKzp/0UDPIsQrSgb7pCswiBKgb5DxsuFW77hY7KW8bDKthKsyJDbZ0dJUKAlnIQdttkjiOR0N/R9VMv1JBfT8GSSkq25HH94YlZPOacTKgBKwNwe/c/1iTVfxZ9rruSxVmrjLbVnmevdhawNxScCw2QNjXE/+DsH69KPu1+OHRPS/t5mOucbjZqorvypd2Ys00Rk0CQBpQUXeyN7J+h92j3c6Xy3ubjRSHVNZMpgI3yGSnFLjW/WEbDtsqEPJKAHKAtrw3hSR6S/yMxLYL2/yeM6hFyXIQVEWtkDellitRjQLBS2k3oFlAIBI8nwfTLT0jTkgNvEvIdsK36b2Na+P2xXjuwtURHXWWg0psEntU0valtqjtfDh7J5HEdA/jvjjUiVszmajS2rESGWeOMDgfiuyeIAUAD7O9Hzs3MkWV6MoSRbf+DkEDBfEixryVRoeQSFU/wBf9/69QPo/O5fBdKYTJxZv9ZchQi5Gacr3IlXRTRRkQqWZlddA6Ct5Hl3xGbvQSS15sxmDl8paXF4Jo5mihyojCd+xG6oR3gF5gsCOJUab5aVz2alEQxIvyqJqTzzf34A4BxOgMuvSxmM0ghIokdhwac+588UTF+5+SzXSEWIfpyaTGN3a2ay6PCbWCbgwR2RWYNIGKMW0OKhiQfBKji87TzPUuf6cg68a9msRbr3KANNYEkUxDnE7cV5zsY9kNsa0672QpzG8zR6sxVXK5LGZDIRIlen+rAjIFiCu8RKqJpG1z02h54n736VcNhsXZxcEMNWSxTsPHbjjtwmvYgsREKfKhT3OSP8A7H7Pliyr6NlOTw8sYD626uLPUaja3r+m3qROPTc+klHXRpNhQ70/njv9C3W/uHhcJnITdWxbbNXJKt+OrF8qjJEPFgRqXCfEllA1sk6OvArpzLZrNYe7VtWKurxa3iX/AGnmn0iLEwBePlxTlxMgGySCNgj0ThxkUmdpZjCYilYtZi6Z57YgNexznHbijZWX+lcKS2j8R4Oz6IW/bSx0XNPj7rV6FC4v8lEqtw4Scg03J96+/BGvpx5+9gmalZChHauo2A8t6De2KKtPxctQXJQHTx5ix4v784XOpMtmsLh6VWtYq6o8beWf9p4Z9OjRKCUj5cX48RIRsEEnQB9FeiPcPC5vOTGktio2FuR1aEdqL5W2eI+K4kUOU+QKqRrYB0N+d6p7aWOtJoMfSavfoU1/kpVZufOTkWh4vvX34A19IfP1ofNjIo87dzGbxFKvaw90TwWzAbFjnAO3LGqqv9qhUFdn5HwND1oepWSox3LKFAR57VG98ZOn4uZIDkYDp48hc8W9+Ma+YzKYXqTp/AWOsLlLI5q1as35oaKzpE6wkxwI5Vgk69wt414HJtHjtty3uLmsV0PJgYen5a+NrwpUweSknrrZzZWIcmUlwqyM6s3IAhlbkDv0jZnDYuti54ZqslenXeS3JHUhNixPYlJUeWDHucnT/YfQG1KsvpsvPNFT6Sxs2YyeQyWPidJ6q1oGdw0RVXlYKwhkXly0ux44j636Pm2Tw8yYMhtujiD1Cg3t32/Xf1E5t2ZkUkI6/wAJVjU7VP8AONvqUpR/xHR2QM0bV3zbNViRk1Lp1CeV87I5ltAkefBO9+k33+zmM6r/ABuu08nCkGQx3alqTWk7c7xK3HXE6II8r/5Gj/foXn8vkpbccC5PMplsbZXG5t5JmmhxayRkQWZHZADOeXMlRrirDS/Hc29zMxlequjMzdt5iO4tGLuRlbBYRKQVAAVVRnIBJdt65sq7LeA5DOS5FEWT8ygag8cX9vC+xGCZgw4zLOYQjRKk9Kh2PNvfx8sO3svD0zgejsPYNtbkubx9etPVMffhqABmbmqhv8hx4oQOTOdnydWxaFHMYulbgoZWaxjxBZqu881OGnKiKJuMY1xPakmACRnwjjR+vUs9i+rUm9osVhchBhDVSisU37EvdYqjCRtodaYL2wNH7dfI4tprs2e2Ow+cpMyyrNK/8m0nbCOkkqoJ+4rKNhNnTFpW1x8+pT8Auy0Pf9guprsR/WFcw1DCDBi/FBSUAdIBBB735rgV7idb5zCYUXTWyGaa3NHVjv1ZoomqN8YxZHgbQOwAYknQXZG/GOMhzskVDCZjF5LMWrFaMW552Fp/2IijK0cUfJV/5FlA8qvg736GZbpzD5rNS2quUN4frz88TbdIh35HicqGiU9teQAcr5J8EEHXpj9tLc3RdhruPtrcoUISqxZLl3E48ubd5hseANEch4Pj+zU1LMUGfhRxVR2ANPIV7XxX0+pGWxRJcPy0tsfqO9vX640Y47kVywiXJ6+TrygBQOyZjH5UlTwZCrxKfIcIJf8AYt8ad1tLj+uugUyt+vFP2ULSQsAyEEGOeNwfseWBB8bUE/Xr0vW3QPXWPiv5WKOHvoGhkZgwKEbDxzxk+CNkEEHXkgeoD7o+6UnRE2R6V6Yz1e5ishGY2kEiPIJnQAqCAUIKsuzoa1s/7MC6X0uhSBNmChH258645POc5k6kkrYYXRAuSe/gMX7omXH9C9AvlaFeKDvIGjhUBUAAEcEaAfQ8KAB42xI+/UxkjuS3K6PcnsZOxKQQR3jCZPLEKObOWeVj4CBxF/qV+Sf7Xe6MnW82O6V6nz1elisegjVzIiSmZEICkkBAAqto6O97H+rG/RdbdA9C4+W/ioo5uwhaaRWCgIBsvJPIR4Hgkkk68gH1tT6YQlBmwhUn7+vamNk2cydOSUMPrqg3BHbwOJfk4c7HFfwmHxeSw9qvWkFSeBhVf9iUuzNJFJxVv+QZgfLN4Gt+svbzrfOZvCm6K2QwrVJpKsl+1NFK1tvlGbJ8HSF1ILAg6LaJ153vcu3N1pYW7kLa06F+EK0WN5dx+XHg3eUbPgnZPEeR4/sLmJ6cw+FzUVq1lDRH68HDE1HSUd+N5XClpVHcXkSELeQfAAA16FpqYos/DkCihuDe/cE9746zP1IzKKZTZ+Wl9h6gdrev0xVZatbF4q1atU8tHPcWeedksTXIbbujdgNGd8j20iBDxjxIo0Pr1z37+npnLdK5Ccy/rvjIWpV6scXZhn2Oasqso8KFIZADxZRo6A3Wa1nuDsR5ymrNK00T/wAm0fcDu8kSuIO2qqdFNjbBol3y8ekL8i+oI39pbOKoR4hKqInZFRwjFWLOo4DkCeLSbJYEGNvJ5LymxIBamLeO5XUU2AP+sRYWoIaowiB0dIRTpINSe1+cb/sN0nFF7P4rN3beEaq9ISz/ALEXbZQ79tgXOwW49sgAeDGvg8m23Wa3cHffB0lZpVhlT+MaPuB3SOVkM/bVVOg+jtg0Ta5efUz9jYsLk+kcZWtQQ02xFCvbeYOIIbCtzDmR0I2VHHTkni0Z2PB9XeK1WxeJq1qtzLRT3FgrwK9ea5DbkdF73GQb5HtpKQUkB07nY+/XmTPLUxDI/wCRXQ12AJ/bHqfp+GqOZZZASEVqCSSe9vPEqy3UeHwualq1cWaI/Xn55a2iSjvxvEhYLEw7i8iC4XyD5JAG/TH7aVJutLDUsfUWnQvwlllyXLuPy5c17LHZ8EaA4jyfP9DR9xOiM5m8KKRs5DCtUmjtR0KsMUrW2+MgrDydIXUEKQDorsHXnHGTZ2OKhm8xlMlh7VetGbcE6iq/7EpRVVJY+Kt/xKqT5ZfI1r1U1LDUWfixzRQ2Iv5Gne+LGn0ozKKIzg+Wlth9T2t6/TFQl6J6B6Fx8VDKyxzdhAsMbKFAQDQSOCMDwBsAAE68En1Bfcr21s9XWsj1f0hhYMfjcdEzlVjjSXvKgJdR4ReKKvjZOz/7KWyOS5LcsOlOexk7EoIIPeMJk8KCx5s5Z5VHkoHEX+pX5U7raLH9C9Apir9iKDvIVkmYhUAAMk8jk/Q8MST42wB+/RdManQlAhTT1FX35t2pjk85yaTpuSt9hFUGxBrbxGIL7a+2tnpG1jur+r8LBkMdkY1cBo43lMzISHYeUbkrN42Dsf8AqovUXRPQPXWPloYqWOHvoVmjVQwKEaKSQSA+CNAggHXgEevdExY/rroF8VQsRT9lAscykMhBAkgkQj7HlSCPG1IH16mMklyK5Xd6c9fJ15SSSeyZjH4YBhwZCrxMPBcIJf8AYt8dqfU6FI/woXylP24t3rjZNk0nUklD76KIFgB38Tje9y6k3RdhaWQqLcoUIQzS43l3E48eC9lTseAdg8h4Hn+iuYnqTD5rNRVrWLN4frwcMtURIh35HlQMVlY9teQJQN5J8gkHfonk5s7JFfzeHymSzFqxWkNSCBRaf9iIurLJLJyVf+IViPKt5O9esvbzojOYTCmkLOQzTW5pLUlC1DFE1RvlIax8jaB2JKgE6DaA34FpqGoM/EkGqjuTa/ckdr46zUCUZbFMVsfLS+x9Ae9vX64K1q3bHfjwdNmWVoYk/jGk7YR3jiZzB3FZRsvoaYtKu+Pj1PvyT6VVvaVs3jr2HSqpEkS1UV2lVQ8Srz8eQvcYjW9sTocRq2S2quUxVqrauZaSems8E6pXmpw1HRG7HKQ64ntvESXkPiNTs/frnb8jf/juJ6OmrRETS5bndisLJ34YlVOKojMx/wAtks4I5MR4IPidDnl2atk7hdBTYgf6xFh5BDRGEsNApKK9RJBB7W88Dug+ms1m+j8HRhxn70dajHJwlqk/rxOORJJdUctohUXYAZWbyTqgYjE5KXuNJicyuUxltMthEigaWLF90J3q6IrgGYh+ChtDiAdrttm/YbF1utvx1pT1544sli67QyxV5GjsSwDbH5DRB/2Ug62CP736Z7Eq4noyn2pHhOclEzSK2pWRuTIeWj5ClQNgj6Gj9eqOfQUuRTLjfMoGhHHNvsfDwJw9l77rMsZdNHSlSapPY8XP28fLAzHrLHS6sydfEZPI5HHxI8Fs2YGdw0QZkiBZhDIu+O22PHI/WvSphszi62LgmhtSV6dd46kcluY2LE9iUhj4Use5yd/9R9HwpVW9PGJ9t8vh+i1z8nUU8OMiWW5m8WkNdbOcIRiiNxQKsjMFXiSeSsVPnXpUxGFhwvUnUGfr9GWqWTzNurVoRy3lnjiZYQJJ3QMwSde4F22vACro8tnynOIeZMBhblHEHpNTvbtt+u/oAuNTMiklfR+Eq4oNq+v7bfX7w5OKPO0sPhMvSr2sPdME9QTmxY5wDuRSMzN/aoGIbZ+Q8jR9ELfuXY60mnyF1a9+hTX+NiZV585OQWbkmtffknf0g8fetHrf27wubzkIutYqNhbklq/JVl+VtniHmwY2DlPkQzA62CNjfkV03ic1hcPdtWa9XVHlUxKfqvDPp0WViA8nLi/HkYwdggAaAHoEzTTJUJDVlC4PnvQ73xSVqCLmSC3KI6efIWHFvfjDHU9y7HRc0GQpLXoULi/xsrMvDhJyKw8U1r78g7+nPj62PmycUmdu4fN5elYtZi6IIKhnNexznHclkVlb+lcsAuj8T5Ox6GdR4nNZrD0rVWvV1eK1Msn6rzT6RGlUkJJy4py5CMnZJIOwT6K9Ee3eFwmcmFJrFts1cjtUJLUvyqMkR81zIxcJ8QFYnWyBs68aHplkKMhy6jQk97bVO9sZOoIuWoDcYjp58xccX9+cCczmcXZxc801qSxTsPJUkkqTGvYgsREsPDFT3OSJ/qfseGLM3psvpNLT6SyU2IyePyWQikee0tmBXQLEWVJVDKJpG48droeeQ+9el/MYZM11J0/n7HR9y7ksLatVr8UN5YEldoSI50Qsoedu2V2N+CVbZ46bct7dZnK9DyZ6HqCWxjZ4kt4PGyQV2s4QtEOSqChVpFdmXiCAqrxUb9HzbOIeWsGO25VxZ6RQ7W77/pt6Ga21Mz2SF9FGk3NRvQ/znf6IHUGIyMVqOdcZmHy2Ssrks2skLQw5RY4yYK0iM5AnHHgQp1xZjtvjqS+8GNzHSfR96jYwZrJel7QMVYqCgikcMSrsqEf4FG+yCyga366gpSDL9HZASyPYfCM1qJ2fcukUP5bxongV8ADx4A1r1MPyVwcHS34+x2bF1hcyeRSFYpn7s7VTVlkALHz5fi5/oAKP69C0/BDcUSpPyqJoBzxb28LbAY95nJcckqy+GKpSKqPYc39/HGX415ObHdE4m90y96XJ1qhaWtHWaSGdfJ4O2uK71oHkCD/3+i4e0/UnUnuLWmns9KUKeQww/TwyTzvBT/XI5MIyyl5ZY1EavpRocP8AAk7lvs5759F4foTEdA5HqeljY6yolvi2hPFzPP5a8bAOx9nQ/o+XK3+RvtZNl8tTyPVkElCdknquoJMcoQDa+PH0CD9eCDsHXph9qRpmQXGgXkO3IF+m9xT1+2LDsaHqqG0066GltgAEkCppa5NtqHz2xQ7GL6/x2SqZGyy2P1ZmkmrQlGjlQow4IHI4nZB5a38df/xLX3EwNTqx1zVAwZSLJzTNaxcMZ/UhZ42lNiMnZl4qqmQ8gBrR+PEqU35PdGyZiolLqmKvTjgk/YkDzACZW1Hxj2FZWGyx1sfHwdHcy62609v+u8tPP1B1ZLKkszzosbKiRsHAUkJwDMyIGYnegQqknel5+nIEhPx46Skq3Hcc/wBHEWNm09hxUSeUrA2UDUHsL3+uOw/2sNS45GSeGST+Un+UlxZTPBZn5RcYSwQ+HgcHi/8AiNDx6T7NYSfyaQd5mWtc5xTO8ok4t2A6xSMNqFhIPAowZiePy16k7fkL0blsA9ae/Fipa0cX60dKdZEniTTLEVbXAjgArAgryI8D0Y6i/Iz2olWPH4a9DHUGLav2uIdQy+EHGRyC3zYkhlPhiC29GXl8Oazd5aydqG4AwtqCHGXEdEQICaAim5Nb2xQK1YR/xiT95WatT4RQu8Qj5N2C7RRsdKVmAHMuxZQePx16cP2sNd5ZGOeGOT+Ug+UdxYjBBWn5S8oQxQeEncnin+R2PPqHdO/kZ7UJHLRy1+GWscalUVwoQMX8OeKOFBAVW2XZj48jXEA2/IrovD4OGlVvx5qa7HILEdqwkSVopOTNDoeGJ5kMxJJ0Ad/Q0+HNe/JWsHagsKY2n4cZuI0JYQUkEmu4NbW3rijSe4GFn6njlxOOMuRlycU6W8rAg/dgV5GiNaIHfdAZlEoAUjfI+dBxrUfcLI5O3kYYlrpamV4arLGiRIEAKuFc9w7BPL4nR19D1yL0b7hdE+3mUrWMLn8lKsdiOR1klqON8nDE9xm0VV9qd7P+JK69VSP8tulxl7Fe/evvCa0ZrzG1Aq95m+ayJG6qFVdH/YnbA/0RUy/TcFhPxpIKinbx4wxJzic84mLAKUA7k9uxp++KP7u9T5f2zxYvDparJlM7G+PyUIucq36xRv8A9HKAvHKQXCErryw+RA9S38ssrLmuhY8pnv24L9meOSGi1OSGKnGa0nxViupCDxViDonXgaAG+35R+3mPyWOr43IZBq0VhprksbVAZn4FQ3yk/vZ+9aAUa16nXv3774nrjoN+iMHZntQwZAzo1gw8oYVjm4IOL7YadDvzryP+wDbKJGfSA86C0lq4H/rgUpikhiFpuE6wy6HVOCh70Pe9b704tj//2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'marmaj.tkn.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-pool.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cheddar',\n symbol: 'Cheddar',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1hNTElEXzE2Xyk7fQoJLnN0MXtmaWxsOiNGRkU5NTk7fQoJLnN0MntvcGFjaXR5OjAuMjt9Cgkuc3Qze2ZpbGw6IzQyNDI0Mjt9Cgkuc3Q0e29wYWNpdHk6MC45O2ZpbGw6dXJsKCNYTUxJRF8xN18pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDZ7ZmlsbDp1cmwoI1hNTElEXzE4Xyk7fQoJLnN0N3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMTlfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDh7ZmlsbDp1cmwoI1hNTElEXzIwXyk7fQoJLnN0OXtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDEwe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTF7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzIyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxMntmaWxsOnVybCgjWE1MSURfMjNfKTt9Cgkuc3QxM3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjRfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE0e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQoJLnN0MTV7ZmlsbDp1cmwoI1hNTElEXzI2Xyk7fQoJLnN0MTZ7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzI3Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxN3tmaWxsOnVybCgjWE1MSURfMzFfKTt9Cgkuc3QxOHtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzNfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE5e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MjB7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM0Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyMXtmaWxsOnVybCgjWE1MSURfMzZfKTt9Cgkuc3QyMntvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzdfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDIze2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0MjR7ZmlsbDp1cmwoI1hNTElEXzM4Xyk7fQoJLnN0MjV7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM5Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyNntmaWxsOnVybCgjWE1MSURfNDBfKTt9Cgkuc3QyN3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfNDFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDI4e2ZpbGw6dXJsKCNTVkdJRF82Xyk7fQoJLnN0Mjl7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzQyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxnIGlkPSJMYXllcl8xXzFfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMTZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0xODIxLjEzNTMiIHkxPSI5ODMuMTc0MyIgeDI9Ii0xODIxLjEzNTMiIHkyPSI5OTguMDU0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMTc5MC4yNzUzIC05NDYpIj4KCQk8c3RvcCAgb2Zmc2V0PSIxLjk3MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGN0JDMDAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNENzNFIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzY4XyIgY2xhc3M9InN0MCIgZD0iTTUyLjMsNDAuMnYxNC4xbC00MC4yLTYuMWMtMS41LTAuMy0yLjYtMS4zLTIuNi0yLjNjMC4xLTMuOC0wLjEtNy41LDAtMTEuMQoJCWMwLTAuNywwLjEtMS41LDEuMi0xLjdjMC43LTAuMSwxLjYsMC4yLDIuMywwLjNsNC45LDAuOGMwLDAuMSwwLDAuMywwLDAuNGMwLDEuNiwxLjcsMyw0LDMuMWMyLDAuMSwzLjYtMC44LDMuOS0yLjJMNDAuNiwzOAoJCWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjVjMCwwLjcsMC45LDEuMywxLjksMS40YzEuMSwwLjEsMS45LTAuNCwxLjktMS4yYzAtMC4xLDAtMC4xLDAtMC4yQzQ0LjEsMzguNiw1Mi4zLDQwLjIsNTIuMyw0MC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTkuNSwzNC44YzAuMy0xLjItMC40LTIuNiwzLjUtMS41bDQuOSwwLjhjMC40LTEsMi0xLjYsMy44LTEuNGMyLjIsMC4xLDQsMS4zLDQsMi41YzAsMC4xLDAsMC4yLDAsMC4zCgkJTDQwLjUsMzhsMCwwYzAuMy0wLjMsMS0wLjQsMS43LTAuNGMxLDAuMSwxLjksMC41LDEuOSwxLjFsOC4yLDEuNkwzMC44LDI3LjVjLTItMS4yLTQuNS0xLjctNi43LTEuM2MtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJYy0yLjUsMC45LTQuOCwyLjQtNi4yLDMuNmMtMC4xLDAuMS0wLjYsMC41LTAuOSwxLjFDOS41LDMzLDkuNSwzMy44LDkuNSwzNC44eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjQsMjdjMS42LDAsMy4zLDAuNCw0LjcsMS4zbDIxLDEyLjV2MTIuNmwtMzguOC01LjljLTAuOS0wLjItMS43LTAuOC0xLjYtMS40YzAtMi4yLDAtNC4zLDAtNi41CgkJCWMwLTEuNSwwLTMuMSwwLTQuN2MwLTAuMSwwLTAuMiwwLTAuNGwwLDBjMC0wLjUsMC4xLTEuMiwwLjMtMS42YzAuMi0wLjQsMC41LTAuNywwLjYtMC44YzEuNC0xLjEsMy42LTIuNSw1LjgtMy40CgkJCWMxLjYtMC42LDQtMS4xLDYuOC0xLjVDMjQuNiwyNywyNC45LDI3LDI1LjQsMjcgTTI1LjQsMjYuMWMtMC40LDAtMC45LDAtMS4zLDAuMWMtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJCWMtMi41LDAuOS00LjgsMi40LTYuMiwzLjZjLTAuMSwwLjEtMC42LDAuNS0wLjksMS4xYy0wLjMsMC41LTAuMywxLjItMC40LDEuOWMwLDAuMiwwLDAuMywwLDAuNGMwLDMuNywwLjEsNy41LDAuMSwxMS4xCgkJCWMwLDEuMSwxLjEsMi4xLDIuNiwyLjNsNDAuMiw2LjFWNDAuMkwzMC44LDI3LjVDMjkuMiwyNi42LDI3LjMsMjYuMSwyNS40LDI2LjFMMjUuNCwyNi4xeiIvPgoJPC9nPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xN18iIGN4PSItMzA0NS4xOTg3IiBjeT0iMjA0Ny40NDY5IiByPSI2Ljg2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzM1XyIgY2xhc3M9InN0NCIgZD0iTTE4LjQsNDMuOGMwLDEuMi0xLjMsMi4xLTMsMmMtMS42LTAuMS0zLTEuMi0zLTIuM3MxLjMtMi4xLDMtMkMxNyw0MS41LDE4LjQsNDIuNiwxOC40LDQzLjh6IgoJCS8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iLTMwNjQuNDI3NSIgY3k9IjIwMTUuOTU3IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xNy44LDM0LjRjMCwxLjYsMS43LDMsNCwzLjFjMiwwLjEsMy42LTAuOCwzLjktMi4yaC0wLjFsLTAuMy0wLjFsMC40LDAuMWMwLTAuMSwwLTAuMiwwLTAuMwoJCWMwLTEuMy0xLjgtMi40LTQtMi41Yy0xLjgtMC4xLTMuNCwwLjUtMy44LDEuNEMxNy44LDM0LjIsMTcuOCwzNC40LDE3LjgsMzQuNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMThfIiBjeD0iLTEzMjguMjIwMiIgY3k9IjM0ODEuNzQ3MSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzA3OCAwLjIyMjggMC4yNDA5IDAuMTkwOSAtMTIyMS41MjUxIC0zNDAuNzk4NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0NiIgZD0iTTI2LjgsMjkuNGMwLDAuNS0wLjksMS0yLDAuOXMtMi0wLjYtMi0xLjJzMC45LTEsMi0wLjlDMjYsMjguMiwyNi44LDI4LjgsMjYuOCwyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xOV8iIGN4PSItMzA3OS41NTMiIGN5PSIyMDQ0LjQxMSIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3Q3IiBkPSJNMzUuMSw0My40YzAsMi4xLTIuMiwzLjUtNSwzLjNzLTUtMi01LTRjMC0yLjEsMi4yLTMuNSw1LTMuM0MzMi44LDM5LjYsMzUuMSw0MS40LDM1LjEsNDMuNHoiCgkJLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjBfIiBjeD0iLTMwNzYuMzYxNiIgY3k9IjIwMTEuMTY0OCIgcj0iMTAuOTExOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC43NTAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojRDk5OTE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC40MDk4IiBzdHlsZT0ic3RvcC1jb2xvcjojRDU5NjEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC43MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOThEMEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0JBODIwNyIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDgiIGQ9Ik0zNS44LDMzLjFjMCwwLjgtMS4zLDEuMy0yLjksMS4yYy0xLjYtMC4yLTIuOS0wLjgtMi45LTEuNmMwLTAuOCwxLjMtMS4zLDIuOS0xLjIKCQlDMzQuNiwzMS43LDM1LjgsMzIuMywzNS44LDMzLjF6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzIxXyIgY3g9Ii0zMTAyLjMwMzUiIGN5PSIyMDU5Ljc2NjgiIHI9IjUuOTI4NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3Q5IiBkPSJNNDIuMyw0Ny43YzAsMS0xLjIsMS44LTIuNiwxLjdjLTEuNC0wLjEtMi42LTEtMi42LTIuMWMwLTEuMSwxLjItMS44LDIuNi0xLjcKCQlDNDEuMSw0NS45LDQyLjMsNDYuOCw0Mi4zLDQ3Ljd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBjeD0iLTMxMDYuODA4OCIgY3k9IjIwMzAuMDM0MyIgcj0iOC44NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjYwMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDNzczMTUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjM3NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDMzcxMTMiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3MTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNCNzZDMEYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk2NjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0MDciLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0ExNjMwNiIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDAuMiwzOC41YzAsMC43LDAuOSwxLjMsMS45LDEuNGMxLjEsMC4xLDEuOS0wLjQsMS45LTEuMmMwLTAuMSwwLTAuMSwwLTAuMmwwLDBjMC0wLjUtMC45LTEtMS45LTEuMQoJCWMtMC43LTAuMS0xLjQsMC4xLTEuNywwLjRsMCwwQzQwLjMsMzguMSw0MC4yLDM4LjMsNDAuMiwzOC41eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8yMl8iIGN4PSItMzExOS4yMjA1IiBjeT0iMjA0OC44OTk5IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MTEiIGQ9Ik00OC43LDQ0YzAsMC41LTAuNiwxLTEuMywwLjljLTAuNy0wLjEtMS4zLTAuNS0xLjMtMS4xYzAtMC41LDAuNi0xLDEuMy0wLjkKCQlDNDgsNDMsNDguNyw0My40LDQ4LjcsNDR6Ii8+CjwvZz4KPGcgaWQ9IkxheWVyXzFfMl8iPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJYTUxJRF8yM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTIxMjYuNTcyIiB5MT0iMTAyNi43NzYxIiB4Mj0iLTIxMjYuNTcyIiB5Mj0iMTAzOS45Mzc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjc2NTIgLTEuNjc0MTIzZS0wMiAtMS44Nzk5NDdlLTAyIDAuODU5MyAtMTU3Ni4yMTU3IC04OTMuNDA4NSkiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDEyIiBkPSJNNDcsMjdsLTAuNCwxMC45bC0yOC41LTUuMWMtMS4xLTAuMi0xLjgtMS0xLjgtMS44YzAuMi0yLjksMC4xLTUuOCwwLjMtOC42CgkJYzAtMC41LDAuMS0xLjIsMC45LTEuM2MwLjUtMC4xLDEuMiwwLjIsMS43LDAuM2wzLjQsMC43YzAsMC4xLDAsMC4yLDAsMC4zYzAsMS4yLDEuMiwyLjMsMi43LDIuNGMxLjQsMC4xLDIuNi0wLjYsMi44LTEuNgoJCWwxMC41LDIuMmMtMC4xLDAuMS0wLjIsMC4zLTAuMiwwLjRjMCwwLjUsMC41LDEuMSwxLjMsMS4yYzAuNywwLjEsMS4zLTAuNCwxLjMtMC45YzAtMC4xLDAtMC4xLDAtMC4yQzQxLjEsMjUuNiw0NywyNyw0NywyN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNi41LDIyLjRjMC4yLTAuOS0wLjItMiwyLjUtMS4ybDMuNCwwLjdjMC4zLTAuNywxLjQtMS4yLDIuOC0xLjFjMS41LDAuMSwyLjgsMS4xLDIuOCwyYzAsMC4xLDAsMC4yLDAsMC4yCgkJbDEwLjUsMi4ybDAsMGMwLjItMC4zLDAuNy0wLjQsMS4zLTAuNGMwLjcsMC4xLDEuMywwLjQsMS4zLDAuOGw1LjgsMS4zTDMyLDE3Yy0xLjMtMC45LTMuMS0xLjMtNC44LTEuMWMtMS42LDAuMi0zLjYsMC41LTUuMSwxLjIKCQljLTEuOCwwLjYtMy40LDEuOC00LjUsMi43Yy0wLjEsMC4xLTAuNCwwLjQtMC42LDAuOEMxNi42LDIxLjEsMTYuNiwyMS43LDE2LjUsMjIuNHoiLz4KCTxnIGNsYXNzPSJzdDIiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDE2LjVjMS4yLDAsMi4zLDAuNCwzLjMsMWwxNC43LDkuOEw0NS45LDM3bC0yNy42LTQuOWMtMC42LTAuMS0xLjItMC42LTEuMi0xLjIKCQkJYzAuMS0xLjYsMC4xLTMuMywwLjItNC45YzAtMS4yLDAuMS0yLjQsMC4xLTMuNmMwLTAuMSwwLTAuMiwwLTAuM2wwLDBjMC0wLjQsMC4xLTAuOSwwLjItMS4zYzAuMS0wLjMsMC40LTAuNSwwLjQtMC42CgkJCWMxLTAuOCwyLjYtMS45LDQuMy0yLjVjMS4yLTAuNCwyLjktMC44LDQuOS0xLjFDMjcuNSwxNi41LDI3LjgsMTYuNSwyOC4xLDE2LjUgTTI4LjEsMTUuOGMtMC40LDAtMC42LDAtMSwwLjEKCQkJYy0xLjYsMC4yLTMuNiwwLjUtNS4xLDEuMmMtMS44LDAuNi0zLjQsMS44LTQuNSwyLjdjLTAuMSwwLjEtMC40LDAuNC0wLjYsMC44Yy0wLjIsMC40LTAuMywwLjktMC4zLDEuNGMwLDAuMSwwLDAuMiwwLDAuMwoJCQljLTAuMSwyLjktMC4xLDUuOC0wLjMsOC42YzAsMC44LDAuNywxLjYsMS44LDEuOGwyOC41LDUuMUw0NywyN0wzMS45LDE3QzMwLjgsMTYuMywyOS40LDE1LjgsMjguMSwxNS44TDI4LjEsMTUuOHoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjRfIiBjeD0iLTM5OTEuOTUyOSIgY3k9IjI0MDEuOTY1MSIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QxMyIgZD0iTTIyLjcsMjkuNGMwLDAuOS0xLDEuNi0yLjIsMS40Yy0xLjItMC4yLTIuMS0wLjktMi4xLTEuOWMwLTEsMS0xLjYsMi4yLTEuNAoJCVMyMi43LDI4LjUsMjIuNywyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9Ii00MDExLjE4MTYiIGN5PSIyMzcwLjQ3NTMiIHI9IjE0LjEzMjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTIyLjQsMjIuMmMwLDEuMiwxLjIsMi4zLDIuNywyLjRjMS40LDAuMSwyLjYtMC42LDIuOC0xLjZoLTAuMWgtMC4ybDAuMywwLjFjMC0wLjEsMC0wLjIsMC0wLjIKCQljMC0xLTEuMy0xLjktMi44LTJjLTEuMy0wLjEtMi40LDAuNC0yLjgsMS4xQzIyLjUsMjIsMjIuNCwyMi4xLDIyLjQsMjIuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjZfIiBjeD0iLTE3NjcuOTQ2NSIgY3k9IjQ1OTMuOTUyMSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMjI0OCAwLjE2ODUgMC4xNjczIDAuMTQ5NSAtMTEzNy40NjU2IC0zNzEuNjE3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QxNSIgZD0iTTI5LjEsMTguNGMwLDAuNC0wLjYsMC43LTEuNCwwLjdjLTAuNy0wLjEtMS4zLTAuNC0xLjMtMC45YzAtMC40LDAuNi0wLjcsMS40LTAuNwoJCUMyOC40LDE3LjYsMjkuMSwxNy45LDI5LjEsMTguNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjdfIiBjeD0iLTQwMjYuMzA3MSIgY3k9IjIzOTguOTI5MiIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMDM3IC00LjM0NjIwOGUtMDMgLTcuNTg3NzIxZS0wMyAwLjI0ODQgLTExNzIuNjU0OCAtNTg1LjEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MTYiIGQ9Ik0zNC42LDI5LjNjLTAuMSwxLjUtMS43LDIuNy0zLjcsMi41Yy0yLTAuMi0zLjYtMS42LTMuNS0zLjFjMC4xLTEuNSwxLjctMi43LDMuNy0yLjUKCQlDMzMsMjYuMywzNC42LDI3LjcsMzQuNiwyOS4zeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8zMV8iIGN4PSItNDAyMy4xMTU3IiBjeT0iMjM2NS42ODMxIiByPSIxMC45MTE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDE3IiBkPSJNMzUuNCwyMS4zYzAsMC42LTEsMS0yLjEsMC45Yy0xLjEtMC4xLTIuMS0wLjYtMi4xLTEuM3MxLTEsMi4xLTAuOQoJCUMzNC41LDIwLjIsMzUuNCwyMC43LDM1LjQsMjEuM3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzNfIiBjeD0iLTQwNDkuMDU3OSIgY3k9IjI0MTQuMjg1MiIgcj0iNS45Mjg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QxOCIgZD0iTTM5LjYsMzIuN2MwLDAuOC0wLjksMS4zLTEuOSwxLjNjLTEtMC4xLTEuOC0wLjgtMS44LTEuNnMwLjktMS4zLDEuOS0xLjMKCQlDMzguOSwzMS4yLDM5LjcsMzEuOSwzOS42LDMyLjd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBjeD0iLTQwNTMuNTYzIiBjeT0iMjM4NC41NTI1IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC42MDAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzc3MzE1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zNzc0IiBzdHlsZT0ic3RvcC1jb2xvcjojQzM3MTEzIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42NzE4IiBzdHlsZT0ic3RvcC1jb2xvcjojQjc2QzBGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45NjY5IiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NDA3Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBMTYzMDYiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTM4LjQsMjUuNmMwLDAuNSwwLjUsMS4xLDEuMywxLjJjMC43LDAuMSwxLjMtMC40LDEuMy0wLjljMC0wLjEsMC0wLjEsMC0wLjJsMCwwYzAtMC40LTAuNi0wLjgtMS4zLTAuOAoJCWMtMC41LTAuMS0xLDAuMS0xLjMsMC40bDAsMEMzOC40LDI1LjMsMzguNCwyNS41LDM4LjQsMjUuNnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzRfIiBjeD0iLTQwNjUuOTc0NiIgY3k9IjI0MDMuNDE4MiIgcj0iNC4zOTg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzFfIiBjbGFzcz0ic3QyMCIgZD0iTTQ0LjMsMjkuOWMwLDAuNC0wLjQsMC43LTEsMC43cy0xLTAuNC0xLTAuOWMwLTAuNCwwLjQtMC43LDEtMC43CgkJQzQzLjgsMjkuMSw0NC4zLDI5LjQsNDQuMywyOS45eiIvPgo8L2c+CjxnIGlkPSJMYXllcl8xXzNfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0yNDIyLjUxNzMiIHkxPSIxMDA1LjY1NDYiIHgyPSItMjQyMi41MTczIiB5Mj0iMTAxNC43NjQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjYyODcgLTMuOTI5MDMwZS0wMiAtNS4wNDc5OThlLTAyIDAuODA3NyAtMTQ0MC42ODE1IC04OTIuMDUxMykiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTRfIiBjbGFzcz0ic3QyMSIgZD0iTTQwLjYsMTcuMmwtMC42LDcuMmwtMTYuNy0zLjhjLTAuNi0wLjItMS4xLTAuNy0xLTEuM2MwLjItMS45LDAuMy0zLjksMC40LTUuOAoJCWMwLTAuNCwwLjEtMC44LDAuNS0wLjljMC40LTAuMSwwLjcsMC4xLDEsMC4ybDIsMC41YzAsMC4xLDAsMC4yLDAsMC4yYy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWw2LjIsMS41CgkJYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuNCwwLjMsMC43LDAuNywwLjhzMC44LTAuMiwwLjktMC41di0wLjFDMzcuMiwxNi4yLDQwLjYsMTcuMiw0MC42LDE3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjIuOCwxMy43YzAuMi0wLjUsMC0xLjMsMS41LTAuN2wyLDAuNWMwLjItMC40LDAuOS0wLjgsMS43LTAuN2MwLjksMC4xLDEuNiwwLjcsMS41LDEuM2MwLDAuMSwwLDAuMSwwLDAuMgoJCWw2LjIsMS41bDAsMGMwLjItMC4yLDAuNC0wLjMsMC43LTAuMmMwLjQsMC4xLDAuNywwLjMsMC43LDAuNWwzLjQsMUwzMiwxMC4zYy0wLjgtMC42LTEuOC0wLjktMi44LTAuOGMtMSwwLjItMi4yLDAuNC0zLjEsMC43CgkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41QzIyLjksMTIuOCwyMi44LDEzLjIsMjIuOCwxMy43eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjgsOS45YzAuNywwLDEuMywwLjMsMS45LDAuN2w4LjQsNi43bC0wLjUsNi41bC0xNi4xLTMuN2MtMC40LTAuMS0wLjYtMC40LTAuNi0wLjgKCQkJYzAuMS0xLjEsMC4yLTIuMiwwLjMtMy4zYzAuMS0wLjgsMC4xLTEuNiwwLjItMi40YzAtMC4xLDAtMC4xLDAtMC4ybDAsMGMwLTAuMywwLjEtMC42LDAuMi0wLjhjMC4xLTAuMiwwLjMtMC40LDAuMy0wLjQKCQkJYzAuNi0wLjUsMS42LTEuMywyLjYtMS42YzAuNy0wLjMsMS43LTAuNSwzLTAuNkMyOS40LDkuOSwyOS42LDkuOSwyOS44LDkuOSBNMjkuOSw5LjVjLTAuMiwwLTAuNCwwLTAuNiwwYy0xLDAuMi0yLjIsMC40LTMuMSwwLjcKCQkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41Yy0wLjEsMC4zLTAuMiwwLjUtMC4yLDFjMCwwLjEsMCwwLjIsMCwwLjJjLTAuMiwxLjktMC4zLDMuOS0wLjQsNS44CgkJCWMtMC4xLDAuNSwwLjQsMS4xLDEsMS4zbDE2LjYsMy45bDAuNi03LjNMMzIsMTAuM0MzMS40LDkuOCwzMC42LDkuNiwyOS45LDkuNUwyOS45LDkuNXoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzdfIiBjeD0iLTYzMDAuMDcxMyIgY3k9IjMxODQuNDk5MyIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8xM18iIGNsYXNzPSJzdDIyIiBkPSJNMjYuMSwxOC41Yy0wLjEsMC42LTAuNiwxLjEtMS4zLDFjLTAuNy0wLjEtMS4yLTAuNi0xLjItMS4zYzAuMS0wLjYsMC42LTEuMSwxLjMtMQoJCUMyNS43LDE3LjMsMjYuMiwxNy45LDI2LjEsMTguNXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGN4PSItNjMxOS4zMDAzIiBjeT0iMzE1My4wMDk1IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMjYuMywxMy43Yy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWgtMC4xaC0wLjFoMC4yYzAtMC4xLDAtMC4xLDAtMC4yCgkJYzAuMS0wLjYtMC42LTEuMy0xLjUtMS4zYy0wLjgtMC4xLTEuNCwwLjItMS43LDAuN0MyNi4zLDEzLjUsMjYuMywxMy42LDI2LjMsMTMuN3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzhfIiBjeD0iLTI4OTUuMTQ2NyIgY3k9IjcyMzAuOTM4NSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTM5NSAwLjEwOTUgOS4zMzg2MjdlLTAyIDAuMTAxOSAtMTA0OS4wOTQyIC00MDkuMzQ3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MjQiIGQ9Ik0zMC4zLDExLjJjMCwwLjMtMC40LDAuNC0wLjksMC40cy0wLjgtMC40LTAuOC0wLjZzMC40LTAuNCwwLjktMC40CgkJQzMwLDEwLjYsMzAuMywxMC45LDMwLjMsMTEuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzlfIiBjeD0iLTYzMzQuNDI1OCIgY3k9IjMxODEuNDYzNCIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xNzk2IC02LjgyMjU1NGUtMDMgLTEuMzkwNjYyZS0wMiAwLjE2NTYgLTEwNjEuNzc4NiAtNTUyLjIyMzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QyNSIgZD0iTTMzLjIsMTguNWMtMC4xLDEuMS0xLjEsMS44LTIuMiwxLjZzLTIuMS0xLjEtMi0yLjJjMC4xLTEuMSwxLjEtMS44LDIuMi0xLjYKCQlDMzIuNCwxNi42LDMzLjMsMTcuNSwzMy4yLDE4LjV6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzQwXyIgY3g9Ii02MzMxLjIzNDQiIGN5PSIzMTQ4LjIxNzMiIHI9IjEwLjkxMTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QyNiIgZD0iTTMzLjksMTMuMmMwLDAuNC0wLjYsMC42LTEuMywwLjVjLTAuNi0wLjEtMS4yLTAuNC0xLjItMC45YzAtMC40LDAuNi0wLjYsMS4zLTAuNQoJCVMzMy45LDEyLjksMzMuOSwxMy4yeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80MV8iIGN4PSItNjM1Ny4xNzYzIiBjeT0iMzE5Ni44MTkzIiByPSI1LjkyODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QyNyIgZD0iTTM2LDIwLjljMCwwLjUtMC41LDAuOS0xLjIsMC44Yy0wLjYtMC4xLTEuMS0wLjUtMS0xLjFjMC0wLjUsMC41LTAuOSwxLjItMC44CgkJQzM1LjYsMTkuOSwzNi4xLDIwLjMsMzYsMjAuOXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGN4PSItNjM2MS42ODE2IiBjeT0iMzE2Ny4wODY3IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNjAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0M3NzMxNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzc3NCIgc3R5bGU9InN0b3AtY29sb3I6I0MzNzExMyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNjcxOCIgc3R5bGU9InN0b3AtY29sb3I6I0I3NkMwRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTY2OSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNjQwNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQTE2MzA2Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0zNS41LDE2LjFjMCwwLjQsMC4zLDAuNywwLjcsMC44YzAuNCwwLjEsMC44LTAuMiwwLjktMC41di0wLjFsMCwwYzAtMC4zLTAuNC0wLjUtMC43LTAuNQoJCWMtMC40LDAtMC42LDAtMC43LDAuMmwwLDBDMzUuNiwxNS45LDM1LjUsMTYsMzUuNSwxNi4xeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80Ml8iIGN4PSItNjM3NC4wOTMzIiBjeT0iMzE4NS45NTI0IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QyOSIgZD0iTTM4LjksMTkuMWMwLDAuMy0wLjMsMC40LTAuNiwwLjRjLTAuNCwwLTAuNS0wLjMtMC41LTAuNnMwLjMtMC40LDAuNi0wLjQKCQlDMzguNywxOC41LDM4LjksMTguOCwzOC45LDE5LjF6Ii8+CjwvZz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'token.cheddar.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi41NTAzNSAxOS4xMjM5TDkuMTcxNjYgMTQuOTQ5MkM5LjMyNzMxIDE0LjcwMTMgOS41OTk0OCAxNC41NTA4IDkuODkyMiAxNC41NTA4SDE4LjQxNEMxOS41NDEyIDE0LjU1MDggMjAuNTYxNCAxMy44ODM2IDIxLjAxMzMgMTIuODUwOUMyMS4zNjQ3IDEyLjA0NzYgMjAuNzc2MSAxMS4xNDc3IDE5Ljg5OTMgMTEuMTQ3N0gxMS45NzQyTDExLjU0ODggMTEuMjU0TDEzLjY0NjEgNy40NDA3OEMxMy43OTU2IDcuMTY4OTEgMTQuMDgxMyA3IDE0LjM5MTUgN0gyMi4wNzU0QzI1LjA1NDMgNyAyNy4xMTA3IDkuOTgyNzkgMjYuMDUxMyAxMi43NjdMMjUuODYzMSAxMy4yNjEzQzI0LjU0NDQgMTYuNzI2OSAyMS4yMjE4IDE5LjAxNzYgMTcuNTEzOCAxOS4wMTc2SDYuOTc1NzVMNi41NTAzNSAxOS4xMjM5Wk04LjM2ODg0IDE5Ljk3NDdDNy4wNTA0MiAxOS45NzQ3IDUuODM2NTUgMjAuNjkyNSA1LjIwMTE4IDIxLjg0NzdDNC42MTIyMyAyMi45MTg1IDUuMzg2OTQgMjQuMjI4NyA2LjYwOTAzIDI0LjIyODdIMTAuODA0NEwxMy40NjMxIDE5Ljg2ODRMMTMuMTQ0MSAxOS45NzQ3SDguMzY4ODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjBfMykiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMF8zIiB4MT0iMTguMDI2NiIgeTE9IjUuNTI5MjYiIHgyPSIyLjI2ODYxIiB5Mj0iMzAuMTExNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjREQ1OUZGIi8+CjxzdG9wIG9mZnNldD0iMC40NzM5NTgiIHN0b3AtY29sb3I9IiM1MDY5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyNUZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pixeltoken',\n symbol: 'PXT',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANdJREFUWIXll70RwjAMhWUuNGwARVgEmuyQJRgo7AA7uGESGioaGlpTcK+w7nR+gcIyfJ1zys/7dHKSsO53SSqyqHlzEZFu7gm364Wq22z3VF07BpB8CANXn971JRP+Dejk8fSgLoz6kgm/Btjk58MqW4/TM6svmfBrQIOkSAiO92W2Hmc+gF8D6BV6h17qhOxUWPg18C16OizaN2AlxXTEFEWkxZ2QRe8DoJQctG8AIDH4vS8iFjY5aM8Au8Ox+DdgvRUBO+8W/g0AbUIf/5TqBsLf/x2/ADJHSOenTxC2AAAAAElFTkSuQmCC',\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'pixeltoken.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Meta Token',\n symbol: '$META',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Potato 🥔',\n symbol: 'POTATO',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v1.dacha-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Flux Token',\n symbol: 'FLX',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='140px' height='140px' viewBox='0 0 140 140' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFlux Logo New%3C/title%3E%3Cdefs%3E%3CradialGradient cx='50%25' cy='0%25' fx='50%25' fy='0%25' r='248.533062%25' gradientTransform='translate(0.500000,0.000000),scale(1.000000,0.393939),rotate(90.000000),translate(-0.500000,-0.000000)' id='radialGradient-1'%3E%3Cstop stop-color='%23FE84FC' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%232ED1FF' offset='100%25'%3E%3C/stop%3E%3C/radialGradient%3E%3C/defs%3E%3Cg id='logos' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Group' transform='translate(-143.000000, -251.000000)'%3E%3Cg id='Group-2' transform='translate(0.000000, 251.000000)'%3E%3Cg id='Flux-Logo' transform='translate(143.000000, 0.000000)'%3E%3Cg id='Flux-Logo-New' transform='translate(70.000000, 70.000000) rotate(90.000000) translate(-70.000000, -70.000000) '%3E%3Ccircle id='Oval' fill='%23FFFFFF' cx='70' cy='70' r='70'%3E%3C/circle%3E%3Crect id='Rectangle' fill='%230F0E25' transform='translate(70.000000, 83.000000) rotate(90.000000) translate(-70.000000, -83.000000) ' x='57' y='50' width='26' height='66' rx='13'%3E%3C/rect%3E%3Cpath d='M50,30 C57.1797017,30 63,35.8202983 63,43 L63,96 L63,96 L50,96 C42.8202983,96 37,90.1797017 37,83 L37,43 C37,35.8202983 42.8202983,30 50,30 Z' id='Rectangle' fill='%230F0E25'%3E%3C/path%3E%3Cpath d='M63,44 L76,44 C83.1797017,44 89,49.8202983 89,57 L89,97 C89,104.179702 83.1797017,110 76,110 C68.8202983,110 63,104.179702 63,97 L63,44 L63,44 Z' id='Rectangle' fill='url(%23radialGradient-1)'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '3ea8ea4237344c9931214796d9417af1a1180770.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'nUSDO',\n symbol: 'nUSDO',\n icon:\n 'data:image/png;base64,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',\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: 'v3.oin_finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'oinfinance',\n symbol: 'OIN',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 974.66 974.66'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bisolation:isolate;%7D.cls-2%7Bfill:%235a8dff;%7D.cls-3%7Bfill:%23fff;%7D.cls-4,.cls-5%7Bfill:%231b57f6;%7D.cls-5%7Bmix-blend-mode:multiply;%7D%3C/style%3E%3C/defs%3E%3Cg class='cls-1'%3E%3Cg id='图层_1' data-name='图层 1'%3E%3Ccircle class='cls-2' cx='487.33' cy='484.76' r='473.82'/%3E%3Ccircle class='cls-3' cx='487.33' cy='484.76' r='358.99'/%3E%3Cpath class='cls-4' d='M487.33,98.08c-213.55,0-386.67,173.12-386.67,386.68S273.78,871.43,487.33,871.43,874,698.31,874,484.76,700.88,98.08,487.33,98.08ZM368.59,297.83a9,9,0,0,1,12.71-.14,287,287,0,0,0,137.53,75,110.56,110.56,0,0,1,51.78,28.2,9,9,0,0,1-12.49,12.93,92.54,92.54,0,0,0-43.3-23.61,304.9,304.9,0,0,1-146.09-79.66A9,9,0,0,1,368.59,297.83Zm216.7,197.36a9,9,0,0,1,17.93,1.3c-1.86,25.6-15.92,49.6-38.58,65.86-18.31,13.13-40.08,19.87-63.28,19.87a130.41,130.41,0,0,1-32.7-4.3,9,9,0,0,1,4.52-17.4c29.91,7.76,58.67,3.23,81-12.78C572.48,534.61,583.82,515.45,585.29,495.19Zm-9.7-47.57a15.39,15.39,0,1,1,12.8,17.6A15.39,15.39,0,0,1,575.59,447.62Zm-244-118.07a9,9,0,0,1,12.71,0,335.48,335.48,0,0,0,163.36,90.53c30.07,6.9,50.7,33.19,48,61.16-1.64,17.07-9.08,30.42-21.52,38.59-8.23,5.41-18.1,8.14-28.9,8.14a76.36,76.36,0,0,1-23.39-3.91,9,9,0,1,1,5.52-17.1c14.54,4.69,27.64,3.93,36.9-2.15,7.73-5.08,12.39-13.82,13.49-25.29,2-20.88-15.76-37.71-34.1-41.92a353.42,353.42,0,0,1-172.1-95.35A9,9,0,0,1,331.59,329.55Zm-30,41.34a9,9,0,0,1,12.71-.23c36.29,35,81.18,62.68,133.43,82.22a9,9,0,0,1-3.15,17.41,8.89,8.89,0,0,1-3.14-.58c-54.58-20.41-101.55-49.38-139.62-86.11A9,9,0,0,1,301.56,370.89ZM452.39,512.8a15.39,15.39,0,1,1-12.8-17.6A15.38,15.38,0,0,1,452.39,512.8ZM278.9,429.48a9,9,0,0,1,12.54-2.07c38.33,27.47,67.76,43.32,105.66,61.43a9,9,0,1,1-7.75,16.21c-38.8-18.53-69-34.79-108.38-63A9,9,0,0,1,278.9,429.48Zm-4.46,60.34A9,9,0,0,1,287,487.67c45.31,32,91.6,55,137.57,68.37a9,9,0,0,1-2.5,17.62,8.76,8.76,0,0,1-2.51-.36c-47.9-13.9-96-37.78-142.94-70.95A9,9,0,0,1,274.44,489.82Zm18.28,73.95a9,9,0,0,1,12.38-2.89c44.19,27.46,93.91,45,123.06,51.75,27.43,6.32,56.78,9,65.69,9,77.91,0,141.29-63.38,141.29-141.29,0-65.78-46.6-123.81-110.81-138L516,340.57l0-.24a257.48,257.48,0,0,1-100.58-53,9,9,0,1,1,11.69-13.66A239.17,239.17,0,0,0,528.3,324.87l8.22,1.9,0,.16c68.06,19,116.62,82.18,116.62,153.46,0,87.82-71.45,159.27-159.27,159.27-9.61,0-40.9-2.87-69.72-9.51-30.5-7-82.46-25.38-128.52-54A9,9,0,0,1,292.72,563.77ZM493.85,688.36l-9-.07c-5.35-.12-10.74-.42-16.1-.9a302.94,302.94,0,0,1-109.22-31.85,9,9,0,1,1,8.2-16,284.85,284.85,0,0,0,102.64,29.94,225.63,225.63,0,0,0,23.34.87l7.29-.11c101.46-3.78,182.84-87.49,182.84-189.86,0-89.16-63.2-167.31-150.26-185.83l-.12,0-.11,0a206.73,206.73,0,0,1-49.14-18.68A9,9,0,0,1,492.69,260,188.85,188.85,0,0,0,537.56,277h0c95.18,20.37,164.23,105.85,164.23,203.35C701.82,595.07,608.53,688.36,493.85,688.36Z'/%3E%3Cpath class='cls-5' d='M144.68,484.76c0-206.19,161.39-374.67,364.73-386-7.27-.41-14.58-.64-21.94-.64-213.56,0-386.68,173.12-386.68,386.68S273.91,871.43,487.47,871.43c7.36,0,14.67-.23,21.94-.64C306.07,859.42,144.68,690.94,144.68,484.76Z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '9aeb50f542050172359a0e1a25a9933bc8c01259.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Myria',\n symbol: 'MYRIA',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZSIgZD0iTTAgMGg2MDB2NjAwSDB6Ii8+PC9jbGlwUGF0aD48c3R5bGU+LmNscy00e2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjY2xpcC1wYXRoKSI+PHBhdGggZD0iTTYwMCAzMDAuMTNjMCAxNjUuNjktMTM0LjMxIDMwMC0zMDAgMzAwUzAgNDY1LjgxIDAgMzAwLjEzIDEzNC4zMS4xMyAzMDAgLjEzczMwMCAxMzQuMzEgMzAwIDMwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSIgc3R5bGU9ImZpbGw6Izg2MmFlOSIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTQ3MS4xMSA0MjEuMjFhMTcuNzUgMTcuNzUgMCAwIDAgMi4wNy04IDcuMjQgNy4yNCAwIDAgMCAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDAtMTQyLjYxLTgxLjcybC0xLjQ5Ljg1LTEyNi42NCA3My4xMi0xLjExLjY1YTE4LjE4IDE4LjE4IDAgMCAwLTUuNzcgNS43NWMtLjE1LjIxLS4yNi40MS0uMzkuNjNhMTguMzMgMTguMzMgMCAwIDAgNi43MSAyNWwyNDMuODQgMTQwLjgzYTE4LjMzIDE4LjMzIDAgMCAwIDI1LTYuNzFjLjEzLS4yMi4yNC0uNDIuMzUtLjY1TTIxMi41NCAyNzEuOTNsMTQuNzQtOC41MyA2Mi44NC0zNi4yNiA0OS4zOC0yOC41MSAxLjYtLjkxYTc2LjM0IDc2LjM0IDAgMCAxIDExMyA2NS4yNnYxNDguNDNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0uMTMpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTI4Ljg5IDQyMS4yMWExNy43NyAxNy43NyAwIDAgMS0yLjA4LTggNy41IDcuNSAwIDAgMSAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDEgMTQyLjYxLTgxLjcybDEuNDkuODUgMTI2LjY1IDczLjExIDEuMTEuNjVhMTguMTcgMTguMTcgMCAwIDEgNS43NyA1Ljc1Yy4xNS4yMS4yNi40MS4zOS42M2ExOC4zMyAxOC4zMyAwIDAgMS02LjcxIDI1TDE1NC4yOCA0MjguNThhMTguMzMgMTguMzMgMCAwIDEtMjUtNi43MWMtLjEzLS4yMi0uMjQtLjQyLS4zNS0uNjVtMjU4LjUzLTE0OS4yOS0xNC43NC04LjUzLTYyLjgzLTM2LjI2LTQ5LjM5LTI4LjUyLTEuNi0uOTFhNzYuMzQgNzYuMzQgMCAwIDAtMTEzIDY1LjI2djE0OC40NFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLS4xMykiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'myriadcore.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'xRef Finance Token',\n symbol: 'xREF',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNjIiIHZpZXdCb3g9IjAgMCA1NiA2MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuODU2OTMgMTcuODg1NkMxLjg1NjkzIDE2LjAyNzggMi44ODY5MiAxNC4zMjMyIDQuNTMxNTEgMTMuNDU5MkwyNS45MjE2IDIuMjIxNzJDMjcuMzc3NSAxLjQ1NjgzIDI5LjExNjUgMS40NTY4MyAzMC41NzI0IDIuMjIxNzJMNTEuOTYyNCAxMy40NTkyQzUzLjYwNyAxNC4zMjMyIDU0LjYzNyAxNi4wMjc4IDU0LjYzNyAxNy44ODU2VjQ1LjYzMDRDNTQuNjM3IDQ3LjYwMjEgNTMuNDc4MiA0OS4zODk4IDUxLjY3ODMgNTAuMTk0N0wzMC4yODgyIDU5Ljc2MDZDMjguOTg5NCA2MC4zNDE0IDI3LjUwNDYgNjAuMzQxNSAyNi4yMDU3IDU5Ljc2MDZMNC44MTU3IDUwLjE5NDdDMy4wMTU3NCA0OS4zODk4IDEuODU2OTMgNDcuNjAyMSAxLjg1NjkzIDQ1LjYzMDRMMS44NTY5MyAxNy44ODU2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyNDYxXzIwNzUpIiBzdHJva2U9IiMwMEM2QTIiIHN0cm9rZS13aWR0aD0iMiIvPgo8cGF0aCBkPSJNMTMuNjk3OCAyMC4zMzJMMjguMjQ3MSAxNEwyOC4yMjAyIDMwLjU0MTdMMjAuMjgwMyAyMy43MTE2TDEyLjMxMzUgMzAuOTI5NVYyMi4zNjU0QzEyLjMxNTIgMjEuNDkyMiAxMi44NTM4IDIwLjY5OTMgMTMuNjk3OCAyMC4zMzJaIiBmaWxsPSIjMDBDNkEyIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBkPSJNMTQuMTAyMyA0Mi43NjQ1TDI4LjI0NzEgNDYuODYyNkwyOC4yMjAyIDM0LjU5NDRMMjAuMjc5NCAyNy45NDE0TDEyLjMxMzUgMzQuOTcyMlY0MC41Mjc0QzEyLjMxMzUgNDEuNTUxNSAxMy4wMzY3IDQyLjQ1NTkgMTQuMTAyMyA0Mi43NjQ1WiIgZmlsbD0iIzAwQzZBMiIgZmlsbC1vcGFjaXR5PSIwLjUiLz4KPHBhdGggZD0iTTQzLjY0NDUgNDIuNzYzM0wyOC4yNzQ0IDQ2Ljg2MzJMMjguMjQ2OCAzNC41MTU3TDQzLjIyMSAyMi40NjQ4QzQzLjIyMSAyMi40NjQ4IDQ1Ljc5MyAyNC4zOTk2IDQ1LjAzNzMgMjcuODE5NkM0My43MDQ4IDMzLjg1MTEgMzUuMTc5NiAzNS45ODY5IDM1LjE3OTYgMzUuOTg2OUw0My45MDk2IDQxLjE1NjFDNDQuNjE1NSA0MS41NzggNDQuNDU1NCA0Mi41NDcgNDMuNjQ0NSA0Mi43NjMzWiIgZmlsbD0iIzQ1RkZERSIvPgo8cGF0aCBkPSJNMzguNTkwMyAxOC45NzkzTDI4LjI3MzQgMTRMMjguMjQ2OCAzMC40MzE1TDQwLjY5NSAyMC4zNTA5QzQwLjY5NSAyMC4zNTA5IDQwLjQyNzEgMjAuMDU5NyAzOS42OTAxIDE5LjU4MDVDMzkuNDI4OSAxOS40MTE0IDM4LjU5MDMgMTguOTc5MyAzOC41OTAzIDE4Ljk3OTNaIiBmaWxsPSIjNDVGRkRFIi8+CjxwYXRoIGQ9Ik00MC41NTEgMTYuMDEwMUw0Ni42NjAyIDE4LjI4MDVDNDYuOTY3NSAxOC4zOTQzIDQ3LjE2OCAxOC42NjU2IDQ3LjE2OCAxOC45NjVWMjMuMTIwN0M0Ny4xNjggMjMuNDM4OCA0Ni43MjYgMjMuNTgyMiA0Ni41MDQyIDIzLjMzNDNMNDAuMjU1MyAxNi4zNjg3QzQwLjA4OTMgMTYuMTgzMSA0MC4zMDYyIDE1LjkxODEgNDAuNTUxIDE2LjAxMDFaIiBmaWxsPSIjNDVGRkRFIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTI0NjFfMjA3NSIgeDE9IjI4LjI0NyIgeTE9IjEiIHgyPSIyOC4yNDciIHkyPSI2MC42NzM1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMTEzMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAxMzIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xtoken.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Solana',\n symbol: 'SOL',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI1MCIgeDI9IjUwIiB5MT0iMjciIHkyPSI3NCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTRlNmFkIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTk2NGRlIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGQ9Im0wIDBoMTAwdjEwMGgtMTAweiIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI2IpIj48cGF0aCBkPSJtNTAgMGM5Ljg4OTEgMCAxOS41NTYxIDIuOTMyNDUgMjcuNzc4NSA4LjQyNjUyIDguMjIyNSA1LjQ5NDA4IDE0LjYzMTEgMTMuMzAyOTggMTguNDE1NSAyMi40MzkyOHM0Ljc3NSAxOS4xODk3IDIuODQ1MyAyOC44ODg3Yy0xLjkyOTMgOS42OTkxLTYuNjkxMyAxOC42MDgyLTEzLjY4NCAyNS42MDA4LTYuOTkyNiA2Ljk5MjctMTUuOTAxNyAxMS43NTQ3LTI1LjYwMDggMTMuNjg0LTkuNjk5IDEuOTI5Ny0xOS43NTI0LjkzOTEtMjguODg4Ny0yLjg0NTNzLTE2Ljk0NTItMTAuMTkzLTIyLjQzOTI4LTE4LjQxNTVjLTUuNDk0MDctOC4yMjI0LTguNDI2NTItMTcuODg5NC04LjQyNjUyLTI3Ljc3ODUgMC0xMy4yNjA4IDUuMjY3ODQtMjUuOTc4NSAxNC42NDQ3LTM1LjM1NTMgOS4zNzY4LTkuMzc2ODYgMjIuMDk0NS0xNC42NDQ3IDM1LjM1NTMtMTQuNjQ0N3oiIGZpbGw9IiMwMDAiLz48ZyBmaWxsPSJ1cmwoI2EpIiBmaWxsLW9wYWNpdHk9Ii45MiI+PHBhdGggZD0ibTMwLjM4MDYgNjIuNzg4OWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3NzkuNjI2MiAxLjcyNDdsLTkuMTgzNiA5LjQ4NjRjLS4zMTMuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDggMC0xLjI1MjItMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im0zMC4zODA2IDI3LjUzOWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3OC42MjYxIDEuNzI0OGwtOS4xODM1IDkuNDg2M2MtLjMxMzEuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDkgMC0xLjI1MjMtMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im02OS41MTUgNDUuMDAxOGMtLjMxMzEtLjMyMzQtLjgzNDktLjUzOS0xLjM1NjctLjUzOWgtNDYuMjMwN2MtLjgzNDggMC0xLjI1MjIgMS4wNzgtLjYyNjEgMS43MjQ4bDkuMTgzNSA5LjQ4NjRjLjMxMzEuMzIzMy44MzQ5LjUzODkgMS4zNTY3LjUzODloNDYuMjMwNmMuODM0OSAwIDEuMjUyNC0xLjA3OC42MjYyLTEuNzI0OHoiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'sol.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'TerraUSD',\n symbol: 'UST',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTgxLjA5NiAxMy43MjItLjAxLS4wMS4wMTQtLjAwOGE0NC4xNzQgNDQuMTc0IDAgMCAwIC0yOC43NjUtMTAuNTc0IDQ0LjE2NyA0NC4xNjcgMCAwIDAgLTE4LjAxIDMuODI1Yy0zLjcwNSAxLjU2NS02LjcxNSAzLjYzNS05LjE5NSA2Ljg4NS0xMi43NCAxNi44MyAyOS45NiAyOS4wNiA1Mi43OSAyOS4xMDQgMTAuNDkyIDcuNTI4IDEzLjQ0Ni0yMS4yMzYgMy4xNzctMjkuMjIyeiIgZmlsbD0iIzBkM2NhNCIvPjxwYXRoIGQ9Im0zNi44OTMgMTQuMDYzYy01Ljg2MyA4LjgxNi0yNS40MDMgMTUuMDI3LTI4LjYxNSAxNC4wNTdsLS4wMTktLjA0Yy4xMzItLjI2OC4yNjgtLjUzMi40LS43OTVhNDYuNjcyIDQ2LjY3MiAwIDAgMSA4LjQ4LTExLjU4IDQ3LjIxIDQ3LjIxIDAgMCAxIDkuMTg1LTcuMTUxYzIuNzM3LTEuNTg0IDUuNTM2LTEuNjg4IDYuNDU4LTEuNzIgOC43MDguMTc3IDQuMTYgNy4xNiA0LjExIDcuMjI5em0tNC44MDYgNjIuMzAzYy40MTggMi43NzItLjAwOSAxMy43MTMtLjU4IDE0LjYzNC0uNDg2LjAzMi0xLjUwMy4wOTUtNC40NDgtMS41NTdhNDYuODI3IDQ2LjgyNyAwIDAgMSAtOS45Mi03LjU3MyA0Ni45NTIgNDYuOTUyIDAgMCAxIC04LjQ4LTExLjU4IDQ2LjUyNCA0Ni41MjQgMCAwIDEgLTUuMjIzLTIxLjVjMC0yLjU4MS4yMDgtNS4xMTguNjEyLTcuNTg3YTQ2LjUxMSA0Ni41MTEgMCAwIDEgMi4yNjUtOC41OThjMy4zNzYgNC40ODMgNy4yNzggOC41NDQgMTAuNTk1IDEzLjA3MyAzLjE1OSA0LjMxNSA3LjUwNiAxMS4zNDQgOC4zODYgMTIuODUgNS41IDkuMzE2IDYuMzc2IDE1LjA3NCA2Ljc5MyAxNy44Mzh6bS0zLjMxMi0zOC44NTdjLTIuMDA2LTE1LjMxIDI5LjA1NS0yNS45NzkgNDIuNzA1LTI2LjM4MiAxLjYzOC4wMTggNi42MTYuMDc3IDkuNTI1IDIuNDM2IDUzLjQ5NSA1MC45MzctNDYuOTU3IDY0LjI0LTUyLjIzIDIzLjk0N3oiIGZpbGw9IiM1NDk0ZjgiLz48cGF0aCBkPSJtMjAuNDU3IDkyLjM1YzAgMS44MjUgMS4yNyAzLjMwNCAyLjg0NSAzLjMxMyAzNy40OTYuMjU5IDczLjY5NC0xLjQ2IDczLjY5NC03LjA4MyAwLTE3LjAwNy03Ni41MzkgMy43Ny03Ni41MzkgMy43N3oiIGZpbGw9IiM3NjAxMDEiLz48cGF0aCBkPSJtMjMuMzIgNDQuMTg3YTIuODYzIDIuODYzIDAgMCAwIC0yLjg2MyAyLjg2M3Y0NS4zYzAgMS41NzQgMS4yNyAyLjg1IDIuODQ1IDIuODU4IDM3LjQ5Ni0uMjc2IDczLjc0LTEyLjY4NyA3My42OTQtNi42M3YtNTEuMDI0Yy4wNDUtNi4wNTMtMzYuMTg5IDYuMzUzLTczLjY3NiA2LjYzNHoiIGZpbGw9IiNkZTMwMzAiLz48cGF0aCBkPSJtODQgODBjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxMS41IDAgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzNCAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2OC0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMi02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ni0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzNC02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTI4LjU5MyA3MS41NGEyMDQuMTEyIDIwNC4xMTIgMCAwIDAgNy4wNjYtLjM3NiAyNTEuNzQ1IDI1MS43NDUgMCAwIDAgNi43MDYtLjU3MmMxLjEzLS4xMDkgMi4yNy0uMjIyIDMuNDQ1LS4zNSAxLjE3LS4xMjYgMi4zNjgtLjI1OCAzLjYxMi0uNDEyIDEuMjQzLS4xNSAyLjUzNi0uMzEzIDMuODg5LS40OSAxLjM1Mi0uMTczIDIuNzYzLS4zNzIgNC4yMzgtLjU5di0yNy41M2MtMTAuNTMyIDEuNTU2LTIyLjMxNyAyLjg3Mi0zNC4yMjkgMi45NThhMi44NjMgMi44NjMgMCAwIDAgLTIuODYzIDIuODY0djI0LjY1M2MxLjQ4NCAwIDIuODk1LS4wMTggNC4yNDctLjA1IDEuMzUzLS4wMTggMi42NDYtLjA2IDMuODktLjEwNXoiIGZpbGw9IiMxYTNhYjkiLz48cGF0aCBkPSJtMjMuMDUzIDQ2LjQ4IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjIuMTI2em01LjEzNS0uMjkyIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkxIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTMzLS4yOTIgMS4yMiAxLjg2Mi0yLjIyMi4xMjZ6bS0yOC4wNDcgNS4wMjYgMS4yMiAxLjg2Mi0yLjIyMi4xMjd6bTUuMTM1LS4yOTEgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI3em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyIDEuODYyLTIuMjIzLjEyN3ptLTI4LjA0NyA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzQtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzUtLjI5MyAxLjIyIDEuODYzLTIuMjIyLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzMi0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptLTI4LjA0MiA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNyAxLjAwMy0xLjk5em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MyAxLjIyMSAxLjg2My0yLjIyMy4xMjd6bTUuMTM1LS4yOSAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bS0yOC4wNDggNS4wMjYgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjMtMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2IDEuMDAzLTEuOTg5em01LjEzNS0uMjkzIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyN3ptNS4xMzMtLjI5MiAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bS0zMC42NTUgOS4wNDEgMS4yMjIgMS44NjMtMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNi0uMjkxIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNS0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzMy0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em0tMjguMTk2LTIuMjY2IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMjEgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'ust.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo',\n symbol: 'CELO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGgxMDB2MTAwaC0xMDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Im01MCAwYzkuODg5MSAwIDE5LjU1NjEgMi45MzI0NSAyNy43Nzg1IDguNDI2NTIgOC4yMjI1IDUuNDk0MDggMTQuNjMxMSAxMy4zMDI5OCAxOC40MTU1IDIyLjQzOTI4czQuNzc1IDE5LjE4OTcgMi44NDUzIDI4Ljg4ODdjLTEuOTI5MyA5LjY5OTEtNi42OTEzIDE4LjYwODItMTMuNjg0IDI1LjYwMDgtNi45OTI2IDYuOTkyNy0xNS45MDE3IDExLjc1NDctMjUuNjAwOCAxMy42ODQtOS42OTkgMS45Mjk3LTE5Ljc1MjQuOTM5MS0yOC44ODg3LTIuODQ1M3MtMTYuOTQ1Mi0xMC4xOTMtMjIuNDM5MjgtMTguNDE1NWMtNS40OTQwNy04LjIyMjQtOC40MjY1Mi0xNy44ODk0LTguNDI2NTItMjcuNzc4NSAwLTEzLjI2MDggNS4yNjc4NC0yNS45Nzg1IDE0LjY0NDctMzUuMzU1MyA5LjM3NjgtOS4zNzY4NiAyMi4wOTQ1LTE0LjY0NDcgMzUuMzU1My0xNC42NDQ3eiIgZmlsbD0iI2ZiY2M1YyIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Im00My41NDIxIDczLjcyNDljMy40MDg1LjAwODMgNi43NDI5LS45OTQ4IDkuNTgxMS0yLjg4MjUgMi44MzgxLTEuODg3NiA1LjA1MjQtNC41NzQ4IDYuMzYyNi03LjcyMTVzMS42NTczLTYuNjExNC45OTc1LTkuOTU1NWMtLjY1OTktMy4zNDQtMi4yOTcxLTYuNDE3Mi00LjcwNDMtOC44MzAzLTIuNDA3My0yLjQxMzItNS40NzY0LTQuMDU3OS04LjgxODktNC43MjU5LTMuMzQyNC0uNjY4MS02LjgwNzktLjMyOTQtOS45NTc4Ljk3My0zLjE0OTkgMS4zMDI1LTUuODQyNSAzLjUxMDItNy43MzcxIDYuMzQzOC0xLjg5NDYgMi44MzM1LTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0IDAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjQ5IDMuMjIxMiAzLjIyOTEgNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDZ6bTAgNi4yNzUxYy00LjY0OTYuMDA4My05LjE5NzMtMS4zNjI5LTEzLjA2NzMtMy45NC0zLjg3MDEtMi41NzcyLTYuODg4Ny02LjI0NDQtOC42NzM4LTEwLjUzNzgtMS43ODUyLTQuMjkzMy0yLjI1NjYtOS4wMTk3LTEuMzU0Ni0xMy41ODFzMy4xMzY5LTguNzUyNSA2LjQyMTctMTIuMDQzM2MzLjI4NDgtMy4yOTA3IDcuNDcyMS01LjUzMzEgMTIuMDMxOC02LjQ0MzMgNC41NTk3LS45MTAxIDkuMjg2OS0uNDQ3MiAxMy41ODM0IDEuMzMwMnM3Ljk2OTIgNC43ODk0IDEwLjU1MzMgOC42NTQ5YzIuNTg0IDMuODY1NSAzLjk2MzQgOC40MTA2IDMuOTYzNCAxMy4wNjAzLjAwNTUgMy4wODQtLjU5NzIgNi4xMzg5LTEuNzczNiA4Ljk4OTgtMS4xNzYzIDIuODUwOS0yLjkwMzQgNS40NDE5LTUuMDgyMiA3LjYyNDZzLTQuNzY2NiAzLjkxNDQtNy42MTU0IDUuMDk1OS01LjkwMjYgMS43ODk3LTguOTg2NyAxLjc4OTd6Ii8+PHBhdGggZD0ibTU2LjUgNjAuNzI0OWMzLjQwODYuMDA4MyA2Ljc0MjktLjk5NDggOS41ODExLTIuODgyNHM1LjA1MjUtNC41NzQ5IDYuMzYyNi03LjcyMTZjMS4zMTAyLTMuMTQ2NyAxLjY1NzMtNi42MTEzLjk5NzUtOS45NTU0LS42NTk5LTMuMzQ0MS0yLjI5NzEtNi40MTcyLTQuNzA0My04LjgzMDQtMi40MDczLTIuNDEzMS01LjQ3NjQtNC4wNTc4LTguODE4OC00LjcyNTktMy4zNDI1LS42NjgtNi44MDgtLjMyOTQtOS45NTc5Ljk3MzEtMy4xNDk5IDEuMzAyNC01Ljg0MjUgMy41MTAyLTcuNzM3MSA2LjM0MzdzLTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0YzAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjVzNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDU5OXptMCA2LjI3NTFjLTQuNjQ3OSAwLTkuMTkxMy0xLjM3ODItMTMuMDU1OS0zLjk2MDUtMy44NjQ1LTIuNTgyMi02Ljg3NjYtNi4yNTI0LTguNjU1My0xMC41NDY0LTEuNzc4Ni00LjI5NDEtMi4yNDQtOS4wMTkyLTEuMzM3Mi0xMy41Nzc3LjkwNjctNC41NTg2IDMuMTQ0OS04Ljc0NTkgNi40MzE0LTEyLjAzMjRzNy40NzM4LTUuNTI0NyAxMi4wMzI0LTYuNDMxNGM0LjU1ODUtLjkwNjggOS4yODM2LS40NDE0IDEzLjU3NzcgMS4zMzcyIDQuMjk0IDEuNzc4NyA3Ljk2NDIgNC43OTA4IDEwLjU0NjQgOC42NTUzIDIuNTgyMiAzLjg2NDYgMy45NjA1IDguNDA4IDMuOTYwNSAxMy4wNTU5LS4wMTExIDYuMjI5Mi0yLjQ5MDYgMTIuMi02Ljg5NTMgMTYuNjA0N3MtMTAuMzc1NSA2Ljg4NDItMTYuNjA0NyA2Ljg5NTN6Ii8+PHBhdGggZD0ibTU3LjY4ODkgNjcuODU3MWMxLjYyMzQtMS45NzM4IDIuNzg2LTQuMjg0OCAzLjQwMzQtNi43NjQ3IDIuNDczNy0uNjM0MSA0Ljc4MTItMS43OTUgNi43NjQ3LTMuNDAzNC0uMDk4MyAyLjg5MDUtLjcyNDkgNS43Mzg2LTEuODQ4NyA4LjQwMzQtMi42NDQxIDEuMDg1MS01LjQ2MjUgMS42ODMtOC4zMTk0IDEuNzY0N3ptLTE3LjQzNy0yNy42MDVjLTIuNDM1NC42MzQ2LTQuNzAxNiAxLjc5NjQtNi42Mzg2IDMuNDAzMy4wNzI1LTIuODkzNi43MDAxLTUuNzQ2NCAxLjg0ODctOC40MDMzIDIuNjU4NS0xLjE0MzcgNS41MTA0LTEuNzcxMSA4LjQwMzQtMS44NDg4LTEuNjIzNCAxLjk3MzgtMi43ODYgNC4yODQ4LTMuNDAzNCA2Ljc2NDd6Ii8+PC9nPjwvZz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'celo.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ABR',\n symbol: 'ABR',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIHdpZHRoPSIxMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSI2MC41IiBjeT0iNjAuNSIgZmlsbD0iIzBlMGIwZiIgZmlsbC1ydWxlPSJub256ZXJvIiByPSI2MC41Ii8+PGNpcmNsZSBjeD0iNjAuNSIgY3k9IjYwLjUiIHI9IjYwIiBzdHJva2U9IiMyZDJjMmUiIHN0cm9rZS1vcGFjaXR5PSIuODEiLz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im04MS4xNjg3IDUyLjIxNDctMTEuNjUzLTExLjY1MjloLTE3LjY1NTlsLTUuNjQ5MyA1LjY0OTl2LTIwLjEyNzdoLTYuMDAzN3YzNS42NjQ4IDcuNzY4NmwxMS42NTMgMTEuNjUyOWgxNy42NTU5bDUuNjUwMi01LjY0OTl2MjAuMTI3N2g2LjM1NjN2LTMzLjU0NjJ6bS0xNC40NzgxIDIyLjk1MjZoLTExLjY1MjJsLTguNDc1My04LjQ3NDh2LTQuOTQzNy02LjcwOTJsOC40NzUzLTguNDc0OGgxMS42NTIybDguNDc1MyA4LjQ3NDh2Ny40MTU1IDQuMjM3NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMzEuNzMzNCA3Mi42OTUydi0zMi4xMzM3aC02LjAwMjh2MzQuOTU4NmwyMC40ODEgMjAuNDgwOGgyMC40ODAxdi02LjAwM2gtMTcuNjU1OXoiIGZpbGw9IiM2ZGQiLz48cGF0aCBkPSJtNTUuMDM4OCAyNS43MzA1djYuMDAzaDE3LjY1NTlsMTcuMzAyNCAxNy4zMDI3djMyLjEzMzdoNi4wMDI4di0zNC45NTg2bC0yMC40ODEtMjAuNDgwOHoiIGZpbGw9IiM2ZGQiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'abr.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Utopia',\n symbol: 'UTO',\n icon:\n \"data:image/svg+xml,%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='-40 -40 600 600'%3E%3Cdefs%3E%3Cstyle%3E .cls-1%7Bfill:%239f9f9f%7D.cls-2%7Bfill:%23fefefe%7D.cls-4%7Bfill:%23030303%7D %3C/style%3E%3C/defs%3E%3Cpath d='M371.65 15v23.92l-.47.71C368.82 41.48 366 41 363.36 41q-36.94.09-73.88 0h-176c-3.06 0-6.31.67-9.1-1.37l-.47-.71V15ZM55.21 355.33H31.66a2.81 2.81 0 0 1-.26-.3.82.82 0 0 1-.13-.37v-24H6.67V136.41h24.6l.69.44c2 2.64 1.38 5.75 1.39 8.67q.07 73.11 0 146.2c0 12.44.26 12.68 12.64 12.76 3 0 6-.29 8.85 1a3 3 0 0 1 1.23 1.1 12.38 12.38 0 0 1 1.18 6.17q.1 18 0 36.05c0 2.09.17 4.28-1.36 6.06ZM420.4 452.82v23.51c-3.87.66-178.64.93-195 .29v-23.8l.47-.71c2.79-2 6-1.37 9.1-1.37q75.33-.09 150.68 0c9.25 0 18.49-.06 27.74 0 2.25 0 4.6-.25 6.54 1.37ZM176.66 428H128v-23.83H79.16v-24.9l.39-.66c1.9-1.69 4.27-1.4 6.51-1.42 10.55-.08 21.09 0 31.63-.05 6.6-.05 7.89-1.5 8.12-8.1.16-4.52-.77-9.14 1.06-13.53a2.94 2.94 0 0 1 1.1-1.14 58.19 58.19 0 0 1 24.44-.12 3 3 0 0 1 1.2 1.07c1.29 2.36 1.19 4.95 1.2 7.5v30.75c.05 6.74 1.61 8.24 8.36 8.37 3.7.08 7.41-.1 11.1.23 2.23.2 3.9 1.14 4.1 3.54a107.23 107.23 0 0 1-.06 20 3.93 3.93 0 0 1-1 1.85c-.2.17-.43.31-.65.44Z'/%3E%3Cpath d='M225.4 452.82h-48.74V428c1.46-1.94 3.61-2 5.74-2.06 6.36-.1 12.72-.14 19.08.09 6.33-.23 12.67-.21 19-.07 1.93 0 4-.19 5.56 1.42 2.71 7.57 1.34 15.33 1 23-.04 1.09-.97 1.72-1.64 2.44ZM31.27 136.41V87.67h23.94l.7.45c1.36 1.51 1.34 3.39 1.35 5.22q.18 18.9 0 37.8a11.41 11.41 0 0 1-1 5 3.12 3.12 0 0 1-1.12 1.24c-7.1 2.15-14.32 1.17-21.51.74-1.03-.12-1.63-1.04-2.36-1.71Z'/%3E%3Cpath d='M55.21 87.67v-24.8h23.95l.69.44a3.53 3.53 0 0 1 1 1.84c.36 7.46 1.36 14.94-.69 22.33A3 3 0 0 1 79 88.65c-7.08 2-14.25 1.13-21.4.67-1.07-.06-1.67-.99-2.39-1.65ZM469.14 404.07V428h-24.8l-.71-.47a5.34 5.34 0 0 1-1.24-3.54q-.37-8.07 0-16.15a7 7 0 0 1 1.61-4.3 8.54 8.54 0 0 1 5.24-1.52c5-.13 10-.14 15 0 1.86.09 3.65.41 4.9 2.05Z'/%3E%3Cpath d='M79.16 62.87V38.92H104c.79.8 1.71 1.56 1.76 2.78.29 7 1.2 14-.69 20.86a3 3 0 0 1-1.13 1.23C96.52 66 89 64.92 81.56 64.53c-1.07-.06-1.68-1-2.4-1.66ZM444.34 428v24.8H420.4c-.67-.72-1.62-1.34-1.66-2.38-.33-7.7-1.67-15.44 1-23 1.15-1.33 2.78-1.33 4.32-1.4 5.11-.22 10.23-.18 15.35 0 1.9.03 3.68.36 4.93 1.98ZM79.16 379.27H55.21v-23.94c.52-.48.95-1.21 1.63-1.34a70.78 70.78 0 0 1 21.55-.16c1.55.19 2.36 1.57 2.5 3.09a109.82 109.82 0 0 1 0 19.53 4.76 4.76 0 0 1-1.73 2.82ZM444.34 111.61h24.8v73.54c-1.36 1.8-3.33 2-5.35 2-5 .13-9.94.18-14.9 0-5.5-.2-6.49-1.05-6.55-6.57-.18-14.62-.28-29.24.06-43.86-.24-6.35-.22-12.7-.12-19.06 0-2-.09-4 1.36-5.63ZM395.59 62.87h24.81v24.8c-.15.23-.3.46-.44.69a3.62 3.62 0 0 1-1.84 1c-7.43.4-14.88 1.3-22.25-.61a3 3 0 0 1-1.2-1.1c-1.72-8.12-2.21-16.24.23-24.32Z'/%3E%3Cpath d='M420.4 87.67h23.94v23.94c-.79.79-1.55 1.71-2.77 1.76-7 .29-14 1.2-20.87-.69a3.11 3.11 0 0 1-1.23-1.13c-2.14-7.1-1.16-14.3-.74-21.49.07-1.06 1-1.67 1.67-2.39ZM371.65 38.92h23.94v23.95c-.79.79-1.55 1.7-2.77 1.75-7 .3-14 1.2-20.87-.68a3.18 3.18 0 0 1-1.23-1.13c-2.13-7.1-1.16-14.31-.73-21.49.06-1.07 1.01-1.67 1.66-2.4Z'/%3E%3Cpath class='cls-1' d='M371.65 38.92v23.95c-.9 1.57-2.44 1.81-4 2-1.85.17-3.7.15-5.55.15q-124.27 0-248.55-.06c-3.25 0-6.93 1.15-9.57-2.05V38.92Z'/%3E%3Cpath class='cls-2' d='M104 62.87h267.65c1.92 1.47 2 3.6 2.07 5.74.1 3.68-.12 7.36.14 11 .28 4.05 1.77 5.54 5.81 5.83 3.53.25 7.07 0 10.6.14 2 .07 4 .3 5.32 2.07 1.93 1.47 2 3.6 2.08 5.74.11 3.53-.09 7.07.15 10.6.23 3.35 2 5.16 5.38 5.38 3.82.24 7.64 0 11.45.15 2.15.06 4.28.15 5.75 2.07 1.92 1.47 2 3.6 2.07 5.75.1 3.67-.12 7.35.13 11 .28 4 1.78 5.54 5.82 5.83 3.53.25 7.07 0 10.6.14 2 .06 4 .29 5.32 2.06v48.74h24.8v72.69c-1.25 1.62-3 2-4.92 2-3 .11-6 .06-9 .08-7.41.08-8.77 1.36-8.79 8.67-.05 14.34 0 28.68 0 43 0 3.27-.09 6.54 0 9.8.21 5.2 1.79 6.74 7.07 6.93 3.4.12 6.81 0 10.22.09 2 .06 4 .29 5.35 2.06v24.8c-1.45 1.93-3.59 2-5.71 2.05-6.32.1-12.64.16-19-.11-8 .24-16 .29-24 0-6.61.26-13.22.21-19.84.11a11 11 0 0 1-4.52-.85 3.53 3.53 0 0 1-1.28-.81c-1.44-2.28-1.36-4.85-1.38-7.4 0-3.11.09-6.23-.06-9.34-.22-4.62-1.65-6.06-6.2-6.29a67.32 67.32 0 0 0-7.65 0c-4.07.28-5.5 1.71-5.74 5.85-.22 3.68 0 7.37-.11 11.05-.06 2.4-.11 4.83-1.82 6.81-4.08 1.73-8.36.85-12.56 1s-8.19.09-12.28-.15c-6.36.26-12.72.22-19.08.12a11 11 0 0 1-4.54-.85 3.47 3.47 0 0 1-1.28-.82c-1.36-2.15-1.35-4.57-1.37-7 0-3.26.09-6.53-.07-9.79-.22-4.59-1.67-6-6.26-6.25-2.4-.12-4.82-.09-7.23 0-5.4.14-6.83 1.53-7 6.83-.11 3.54 0 7.09-.08 10.63-.07 2.27-.19 4.55-1.89 6.36-2.12 1.1-4.43.92-6.69.92q-29.41.09-58.84 0c-2.41 0-4.85.08-7.08-1.09-2.15-1.51-2.23-3.84-2.31-6.12-.14-3.56 0-7.12-.09-10.68-.17-5.33-1.6-6.72-7-6.86-2.13-.06-4.27-.09-6.41 0-4.58.25-6 1.68-6.19 6.35-.18 5.55.05 11.11-.27 16.67.34 6.24.22 12.48.14 18.72a11 11 0 0 1-1 4.55 2.94 2.94 0 0 1-1 1.19c-7.82 2.28-15.77 1.2-23.67.74-2.42-.14-2.95-2.34-3.11-4.45-.3-4 0-8-.22-11.93-.23-5.19-1.87-6.82-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.27-5.36-2.05-1.78-1.35-2-3.28-2.07-5.32-.09-3.82.1-7.65-.12-11.46-.24-4.14-1.67-5.57-5.75-5.83a69.87 69.87 0 0 0-8.92 0c-4.09.26-5.51 1.69-5.75 5.83-.23 3.81 0 7.64-.12 11.46 0 2-.29 4-2.07 5.32-.52.48-1 1.22-1.62 1.35a70.79 70.79 0 0 1-21.6.17c-2.15-.26-2.53-2.44-2.67-4.35-.32-4.26 0-8.53-.23-12.78-.22-5.2-1.85-6.83-7-7-4.26-.17-8.52 0-12.78-.2-3.1-.17-4.62-1.69-4.78-4.79-.22-4 0-8-.21-11.93-.23-5.18-1.86-6.8-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.28-5.36-2.05a5.39 5.39 0 0 1-2-4.1c-.09-1.71-.14-3.41-.14-5.12V145.58c0-3.16-.87-6.66 2.07-9.22 1.37-1.78 3.35-2 5.37-2 3.14-.11 6.27 0 9.4-.11 5.22-.22 6.91-1.8 7-7 .18-10.54 0-21.07.1-31.61 0-2.78-.52-5.79 2.08-7.93 1.47-1.93 3.6-2 5.74-2.08 3.68-.1 7.36.13 11-.13 4-.29 5.54-1.78 5.82-5.83.26-3.66 0-7.34.14-11 .15-2.2.21-4.33 2.21-5.8ZM469.14 404.07h-24.8l-.71-.47a5.84 5.84 0 0 1-1.28-3.92c-.19-5.76-.23-11.51 0-17.26.07-1.4.18-2.84 1.39-3.84 7.57-2.59 15.3-1.31 23-1 1 0 1.66 1 2.37 1.65Z'/%3E%3Cpath class='cls-1' d='M469.14 379.27h-24.8c-1.66-.8-1.87-2.36-1.95-3.92-.26-5.33-.25-10.66 0-16a5.23 5.23 0 0 1 1.95-4h24.8Z'/%3E%3Cpath d='M469.14 330.53h-24.36c-.65-3.68-.88-58.4-.29-72.69h24.65Z'/%3E%3Cpath class='cls-1' d='M55.21 136.41v170.18H31.72a2.76 2.76 0 0 1-.3-.29.64.64 0 0 1-.15-.36V136.41Z'/%3E%3Cpath d='M55.21 306.59H78.7a1.67 1.67 0 0 1 .31.28.73.73 0 0 1 .14.36v23.15h24.21a4.48 4.48 0 0 1 .45.45.8.8 0 0 1 .14.36v24.14h24v23.94H79.16v-23.94H55.21Z' fill='%23a1a1a1'/%3E%3Cpath class='cls-1' d='M420.4 428v24.8h-195V428c.7-1.53 2.11-1.78 3.55-1.94a48.57 48.57 0 0 1 5.12-.17h177.66c2.95.11 6.36-.98 8.67 2.11ZM152.71 355.33h23.49a1.72 1.72 0 0 1 .31.29.7.7 0 0 1 .14.36v23.29h24.8c2 1.24 2 3.31 2 5.26q.24 19.08 0 38.16c0 2-.25 4-2 5.33h-24.8v-23.5a1.7 1.7 0 0 0-.3-.3.62.62 0 0 0-.36-.14h-23.28Z'/%3E%3Cpath class='cls-1' d='M127.91 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15v24.8Z'/%3E%3Cpath class='cls-2' d='M201.46 428v-48.73c1.48-1.95 3.64-2 5.79-2 6-.09 11.95-.17 17.92.12 7-.27 14-.31 20.93-.08 5.06.17 5.88 1.07 6.13 6.13.21 4-.06 8 .17 12 .27 4.69 1.92 6.25 6.65 6.56 11.72.77 13-.4 13-12.27 0-12.46 0-12.47 12.37-12.48h30.76c2.41 0 4.86-.13 7.15.88a3.53 3.53 0 0 1 1.27.77c2.32 4.12 1.32 8.63 1.39 13 .15 9.66.55 10.16 10.16 10.16h.85c7.68 0 8.7-1 8.75-8.55v-8.54a11.49 11.49 0 0 1 1.24-5.78 3 3 0 0 1 1.23-1 13.24 13.24 0 0 1 5.42-.92c14.31 0 28.63-.21 42.94.11 6.25-.24 12.51-.16 18.76-.12a14.32 14.32 0 0 1 6.23 1.14c1.93 1.13 1.76 3.1 1.84 4.9.2 4 0 7.93.14 11.88.2 5 1.73 6.58 6.68 6.8 3.26.15 6.51 0 9.77.1 2 .07 4 .29 5.33 2.06V428H201.46Z'/%3E%3Cpath class='cls-1' d='M79.16 87.67v48.74H55.21V87.67ZM104 62.87v24.8H79.16v-24.8ZM444.34 136.41H420.4v-24.8h23.94ZM395.59 87.67h-23.94v-24.8h23.94ZM420.4 111.61h-24.81V87.67h24.81Z'/%3E%3Cpath d='M322.9 379.27h-48.27a2.07 2.07 0 0 0-.31.27.68.68 0 0 0-.16.36v24h-23.67c.06.06-.06 0-.14-.14a.7.7 0 0 1-.14-.36v-24.15H225.4c-.46-.52-1.24-.92-1.33-1.59-.92-7.32-1.93-14.66.63-21.89l.7-.46h72.7c4-3.06 20.75-3.06 24.8 0 3.1 4.03 3.1 20.08 0 23.96ZM274.15 257.84H225.4V209.1c1.37-1.8 3.35-2 5.37-2q19-.19 38 0c2 0 4 .24 5.37 2 1.8 1.36 2 3.34 2 5.37q.19 19 0 38c.03 2.03-.14 4.01-1.99 5.37ZM395.59 257.84h-48.74V209.1c1.36-1.8 3.34-2 5.36-2q19-.19 38 0c2 0 4 .24 5.37 2 1.81 1.36 2 3.34 2 5.37q.21 19 0 38c.03 2.03-.18 4.01-1.99 5.37Z'/%3E%3Cpath class='cls-1' d='M395.59 257.84V209.1H420c.64 3.58.85 35.66.29 48.74Z'/%3E%3Cpath d='M444.34 404.07H420.4v-24.8c-3-4-3-19.92 0-23.94h23.94v48.74ZM395.59 379.27h-48.74c-.36-.45 0 .24-.35-.23-2.73-3.92-2.49-20 .35-23.71h24.8c4-3 19.93-3 23.94 0 3.04 4.02 3.04 19.93 0 23.94Z'/%3E%3Cpath class='cls-1' d='M274.15 209.1H225.4v-23.5c3.58-.64 35.65-.85 48.75-.3ZM395.59 209.1h-48.74v-23.5c3.58-.64 35.65-.85 48.74-.3ZM274.15 257.84V209.1h23.5c.64 3.58.85 35.65.3 48.74ZM322.9 355.33h-24.8V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15ZM395.59 355.33h-23.94V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29Z'/%3E%3Cpath d='M201.46 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29v24.8c-4.01 3-19.93 3-23.94-.03Z'/%3E%3Cpath class='cls-1' d='M127.78 136.53v23.73h-23.64v-23.73ZM346.85 355.33v23.94c-4 3-19.93 3-24 0v-23.94ZM152.83 111.49V87.76h23.64v23.73Z'/%3E%3Cpath d='M322.9 379.27h24v24.35a2.07 2.07 0 0 1-.29.3.67.67 0 0 1-.37.15H322.9Z'/%3E%3Cpath class='cls-1' d='M127.79 136.27V111.7h24.91v24.57ZM201.45 379.25v-23.91h23.94v23.91ZM395.57 379.25v-23.91h24.86v23.91Z'/%3E%3Cpath class='cls-4' d='M469.17 404.08v-73.61h23.92v73.61ZM469.17 257.76v-72.61h23.92v72.61Z'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'utopia.secretskelliessociety.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DEIP Token',\n symbol: 'DEIP',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iLjg5MiIgeT0iLjkxIiB3aWR0aD0iNDMuMTYxIiBoZWlnaHQ9IjQzLjE2MSIgcng9IjIxLjU4MSIgZmlsbD0iI0Y4RkVGQSIvPjxwYXRoIGQ9Ik05LjcgMTAuNmgxNC41MzRjNi41NjcgMCAxMS44OTIgNS4zMjMgMTEuODkyIDExLjg5IDAgNi41NjgtNS4zMjQgMTEuODkyLTExLjg5MiAxMS44OTJIOS43VjEwLjZaIiBmaWxsPSJ1cmwoI2EpIi8+PGNpcmNsZSBjeD0iMjIuNDczIiBjeT0iMjIuNDkxIiByPSI0Ljg0NSIgZmlsbD0iIzAwMCIvPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjE2IDExLjY5NTUgLTExLjkyNjc3IC4yMjAyOCAyMi42OTcgMjIuNjg3KSI+PHN0b3Agb2Zmc2V0PSIuMzU5IiBzdG9wLWNvbG9yPSIjRTlGRjAwIi8+PHN0b3Agb2Zmc2V0PSIuNzYiIHN0b3AtY29sb3I9IiMyNjM4MDAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'deip-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wootrade Network',\n symbol: 'WOO',\n icon:\n \"data:image/svg+xml,%3Csvg width='125' height='83' viewBox='0 0 125 83' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M102.422 0H122.958L113.203 30.9433H92.9243L102.422 0ZM75.982 29.4048L86.0788 53.3388L89.8436 41.0299H109.951L98.5713 78.0422C97.6301 80.9485 94.9776 82.9145 91.8972 82.9145H80.4314C77.6078 82.9145 75.0408 81.2049 73.9285 78.5551L61.2648 47.8682L48.8578 78.5551C47.831 81.2904 45.2641 83 42.3549 83H30.718C27.6376 83 24.9851 80.9485 24.0439 78.0422L0 5.85842e-05H20.1934L36.2797 53.3388L46.8898 29.3193C49.2857 23.3358 55.0185 19.4038 61.4359 19.4038C67.8533 19.4038 73.6718 23.3358 75.982 29.4048Z' fill='%2320252F'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usn',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' standalone='no'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='body_1' width='32' height='32'%3E%3Cg transform='matrix(1.3333334 0 0 1.3333334 0 0)'%3E%3Cimage x='0' y='0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA/tJREFUWIXtln9oVWUYxz/vOc67iWtNS9IkjcSui8RUsv40TbLfVoZE5R+li1JJioqYFlKI/bBQo+417A+pTSgkiH5p0ETIBIvaaosiRcRqYVM3t3Oe97zv0x+eO27jXt1kWoFfOJzDeX59npf3fc6B8/o/atNXOmKocgVnEmSt3vOvAaxr1stEdN5QAQwbbIAV7kO0dqgABrUCDR9rpVhdJqIO4KUdmjmnAEnCMon0Uom18/ltekXVSNafM4CVH+h4SVglkUdEDwELgoBHNu7RG846wIomb2xCXoQLpMdhRX8GrnWWwMDWV5v9mLMK0JuYx8QyX3ocNlZEtAWY3HPcE51w47z4rU9t1zM60qc9BYu36ExreQWArgTjNB5WEbaqMjE+AVZcZAzhyMBPA74ZUoBFeT/aJrwPZJAE0+sA9o2p9aPiKCYMg2dC53NrFlUdHWzhAQEk1mzGMAFVzFEBpxjDrrg3qg3CYOr6+pqDUT477tlc9iHgOqAW6AT2YGisXNp++HQAppzhttf9LcaYjwDoEUy3ABAYbtz+QvXOOHdVqLjVwNNAqXkQA+sM4ZpM/Q+uXJ2yG8cmZpVYEFFspyCxYkW7vHO7JV8XKK4RWN2v+ALgMNCUvl+tuEbJ15WtU9Iwe63WiWWWWLBdFht5rCgS66YP114YefVPAgsLrMBc4DmD+Q5oAT4vSrcw9R84gLXMEQtiQdLuJVa1lrfi3JQaoKHIvQK4tbK+fU2mvm1/EAY3pxDfFvk0pHEDAxDLlWIViRy2O0FEEdG25jdrDip6O1BdKk+Uy272zjdhOATcVWSvTuMGCJBQJYkpLo6I/pSap5cI2Zne64C7USabwPwB+CKfUnFlV6BDrCLdCTbWwtVd6KafuzXGfBnlspOAN4wJLq+sb9+lXh/tl79/XHkAm+hesWB7fd8KxHHfP0BHkWsvsCWztK0LuBd4V9X/GOWzNZycB8XqoIRKDqLEmU+d0yNBwmgTa+H1tAnzOg1cv7vItRl4OX1uArqA2iAIurzzyj+1mxIquQL7N5pem/CimLB4D4y3ksw0ATuAA6nrTcAvcX7KJOABjNlmCPLe6QxOzoiCDpjA7BgwAEDizIZ4+PBPxFI4hljxT2SWtFtgOVDo8IiqzgXGovq44n8D3QtMTO0KLM8sabOl6pQdxQCjFmuV6+h+jz9P3NmXTJl/bN8ln0W57ArgtaImfgdC4OKiFB5YWVnfvqFcjVMCAIy43xtz8NiDelwacH6SwhFVZketY1uiXHZOCnF1idCWtPgXp8p/WoCCLrrDmuO//jWdxF+jQEXIOz2tY52+PdXEzs4AnUXf19B8nQkr9pmHv++/Ec/rv6e/AQ/TFRmUSxQZAAAAAElFTkSuQmCC' width='24' height='24'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PembRock',\n symbol: 'PEM',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIj48cGF0aCBmaWxsPSIjMUUxRTFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMTMuMiAxNzAuNDJhODMuNTEgODMuNTEgMCAwIDAgNzAuNy04Mi42IDgzLjUgODMuNSAwIDAgMC01Ljc4LTMwLjYxbDEzLjY4LTIzLjg3aC0yOC4wOGE4My4xIDgzLjEgMCAwIDAtNjMuMi0yOS4wNiA4My4xIDgzLjEgMCAwIDAtNjMuMiAyOS4wNkg4LjU4TDIyLjcgNTcuNzhhODMuNSA4My41IDAgMCAwLTUuNTUgMzAuMDUgODMuNTEgODMuNTEgMCAwIDAgNzAuNiA4Mi41N2wxMi43NyAyMi4xMSAxMi42Ny0yMi4xWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0VBRUNFRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLjUzIDcuOTJBNzguNjYgNzguNjYgMCAwIDAgNDAuNjEgMzUuNmwtMS4xOCAxLjE3SDE2LjY1TDI4LjIzIDU3LjFsLS42OCAxLjc3Yy0zLjQgOC44Ny02LjA3IDE4LjEtNi4wNyAyOC4yIDAgMzkuNzcgMjkuMDMgNzMuMTQgNjYuOTQgNzlsMS44Ni4zIDEwLjM0IDE3Ljc5IDEwLjA2LTE3Ljc4IDEuODctLjNjMzcuOTUtNS44MSA2Ny4wMy0zOC44IDY3LjAzLTc4LjYxIDAtMTAuMy0yLjI0LTIwLjEzLTUuNzgtMjkuMTVsLS42OS0xLjc4IDExLjE4LTE5Ljc3aC0yMi42NWwtMS4xOC0xLjE3YTc4LjY2IDc4LjY2IDAgMCAwLTU5LjkzLTI3LjY3Wk0zNS44NCAyOS4wNEE4Ni40OCA4Ni40OCAwIDAgMSAxMDAuNTQgMGE4Ni40OCA4Ni40OCAwIDAgMSA2NC42OCAyOS4wNGgzMi42N0wxODEuODEgNTcuMmMzLjQ2IDkuNDMgNS42NSAxOS42MyA1LjY1IDMwLjI2IDAgNDMuMTItMzEuMDIgNzguOTUtNzEuODMgODYuMTRMMTAwLjY1IDIwMGwtMTUuMy0yNi40MmMtNDAuNzctNy4yMy03MS43NC00My40NC03MS43NC04Ni41MyAwLTEwLjQgMi42Mi0xOS45OSA1LjkzLTI5LjI1TDMgMjkuMDRoMzIuODRaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS44NSA0NS40MSA2OC43NSAxMjAuNDIgOC4wNi0xNC4xMi0yNy40Ny00OC4xM2gyNC4zTDcyLjMzIDQ1LjRIMzEuODVabTQ5LjE5IDAgNDQuMTUgNzcuMzIgNy42Ny0xMy40NC0yOC4xOC00OS4zNGg4LjM3bDIzLjk5IDQyLjAyTDE0NSA4OGwtMTYuMDItMjguMDVoMTYuNDJsLTQuNDMgNy43NiA3LjgxIDEzLjcgMjAuNTctMzZIODEuMDRaTTU2LjMgNTkuOTVsMTYuNjIgMjkuMTFoOC42N0w2NC45NyA1OS45NUg1Ni4zWk00NC4yIDg0LjZhNTYuNjUgNTYuNjUgMCAwIDAgMzEuMDUgNTQuMTJsNi4zMiAxMS4wMWE2NC40NSA2NC40NSAwIDAgMS00NS4yOS02MS43YzAtNC45Ny41Ni05LjggMS42LTE0LjQ0bDYuMzMgMTEuMDJabTc5LjY1LTQ3LjlhNTUuNDYgNTUuNDYgMCAwIDAtMjMuNjYtNS4yNyA1NS40NSA1NS40NSAwIDAgMC0yMy42NSA1LjI2SDYxLjVhNjMuMjYgNjMuMjYgMCAwIDEgMzguNy0xMy4xNmMxNC41NCAwIDI3Ljk1IDQuOSAzOC43IDEzLjE2aC0xNS4wNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGNjgyMUYiIGQ9Ik00NC4xIDg4LjAyYzAtMS4xNC4wNC0yLjI4LjEtMy40MWwtNi4zLTExLjAyYTY1LjI2IDY1LjI2IDAgMCAwLTEuNiAxNC40MyA2NC40NSA2NC40NSAwIDAgMCA0NS4yOCA2MS43MWwtNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMS0zMS4xNS01MC43Wm0xMTMuMTIgMGMwLTEuMTQtLjItMi4yOC0uMjctMy40MWw2LjI1LTExLjAyYTY1LjMxIDY1LjMxIDAgMCAxIDEuODQgMTQuNDMgNjQuNDUgNjQuNDUgMCAwIDEtNDUuMjkgNjEuNzFsNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMCAzMS4xNi01MC43WiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.pembrock.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Atocha Coin',\n symbol: 'ATO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMzYuODggMTM2Ljg4Ij48Y2lyY2xlIGN4PSI2OC40NCIgY3k9IjY4LjQ0IiByPSI2OC40NCIgc3R5bGU9ImZpbGw6Z29sZCIgZGF0YS1uYW1lPSJMYXllciAyIi8+PGcgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBkPSJNNzEuNjUgNzkuNXYyNC40MWMwIDEuMjcuMjQgMS40OSAxLjQ3IDEuMTcgMS4wOC0uMjkgMi4xMy0uNjggMy4xOC0xYTExLjU4IDExLjU4IDAgMCAwIDEuNS0uNTljMS40MS0uNzIgMi44NC0xLjQgNC4xOC0yLjIyYTI1LjU5IDI1LjU5IDAgMCAwIDUuNTktNC42NGMxLjM2LTEuNTIgMi41NC0zLjIgMy43OC00LjgyLjMzLS40My4xOS0uNzItLjM1LS43MS0uODYgMC0xLjcyLjEzLTIuNTguMjItLjQ5IDAtMSAuMTMtMS40Ny4xOWEuMzkuMzkgMCAwIDEtLjQ4LS4zN2wtLjMzLTJhMS41NSAxLjU1IDAgMCAwLS4wNy0uNDIgNS43OCA1Ljc4IDAgMCAxLS4zMy0yLjEzYy0uMDktMS0uMjUtMS45NC0uMzQtMi45Mi0uMDctLjc4LjA1LS44NC44My0uOTQgMS41OS0uMTkgMy4xOC0uNDQgNC43Ny0uNjVsMi43OS0uMzcgMS4xNC0uMTUgNC44Ny0uNzRjLjI3IDAgLjU0LS4wNS44LS4wOWwyLjE4LS4zNWEyLjc1IDIuNzUgMCAwIDEgLjU1LS4wOC40Ny40NyAwIDAgMSAuMzUuMTcgOS44NSA5Ljg1IDAgMCAxIC40NCAxLjFjLjI0LjY5LjQ2IDEuMzkuNjkgMi4wOGEyLjY5IDIuNjkgMCAwIDEgLjA5LjI4Yy4xNy44My4zMyAxLjY2LjUxIDIuNDkuMjYgMS4xNC41NCAyLjI3LjgxIDMuNC4zMSAxLjMxLjYgMi42My45MyAzLjkzLjE5Ljc1LjQ1IDEuNDkuNjUgMi4yNHMuNDUgMS44MS42NiAyLjcxYS40LjQgMCAwIDEtLjE0LjM0IDMuMzkgMy4zOSAwIDAgMS0uODEuMzVjLTEuMzYuMzYtMi43Mi42OS00LjA5IDFsLTIuNTEuNjVjLS42My4xNy0uNzcuMDgtLjkyLS41NHEtLjM5LTEuNTktLjgyLTMuMTdjMC0uMTQtLjIxLS4zNC0uMzItLjM0YS45MS45MSAwIDAgMC0uNTkuMjRjLS4yOS4zMy0uNDguNzQtLjc1IDEuMDgtLjkzIDEuMTgtMS45IDIuMzMtMi44MyAzLjUxYTMwIDMwIDAgMCAxLTQuNiA0LjMgMzkuNCAzOS40IDAgMCAxLTMuNzQgMi41OCAyNi41OSAyNi41OSAwIDAgMS0yLjcxIDEuNTljLTEuMDguNTMtMi4yIDEtMy4zMiAxLjQycy0yIC43OC0zLjA3IDEuMTFjLS43MS4yMy0xLjQ1LjM3LTIuMTcuNTUtLjIuMDUtLjQuMTQtLjYuMjFhNC41MSA0LjUxIDAgMCAxLS40NC4xNmMtLjYxLjE1LTEuMjMuMy0xLjg1LjQzYS42Mi42MiAwIDAgMC0uNTMuN2MwIC43OCAwIDEuNTctLjA2IDIuMzRhNS4yOCA1LjI4IDAgMCAxLS44IDIuNDkgMy44OCAzLjg4IDAgMCAxLTEuNTIgMS4zMiAxMi41NyAxMi41NyAwIDAgMS0xLjU0LjcxIDEuMjQgMS4yNCAwIDAgMS0uNzguMDcgNS44NiA1Ljg2IDAgMCAxLTMuNzMtMi45MiA4IDggMCAwIDEtLjQtMi42MiAxMCAxMCAwIDAgMSAwLTEuMjguNjcuNjcgMCAwIDAtLjYxLS43NGMtLjc1LS4xNC0xLjUtLjI2LTIuMjQtLjQ0cy0xLjU3LS40NC0yLjM1LS42OGMtLjUtLjE1LTEtLjI4LTEuNS0uNDctMS42My0uNjEtMy4yOC0xLjE5LTQuODktMS44NmExNS4xMiAxNS4xMiAwIDAgMS0yLjI3LTEuMjljLTEuMzgtLjg5LTIuNzgtMS43Ny00LjEtMi43Ni0xLS43Ni0xLjkyLTEuNjgtMi44OC0yLjUyYTM2LjMzIDM2LjMzIDAgMCAxLTQuODEtNS42OGMtLjU4LS43Ny0xLjEtMS41OC0xLjY4LTIuMzVhLjgxLjgxIDAgMCAwLS42LS4yOWMtLjE2IDAtLjM3LjI1LS40My40My0uMzEgMS0uNTcgMi4wNy0uODYgMy4xMXEtLjE5LjctLjQgMS4zOWMtLjExLjM1LS4zOS4zNC0uNjYuMjgtLjU4LS4xMy0xLjE2LS4yOC0xLjczLS40My0xLjYyLS40Mi0zLjI0LS44NC00Ljg2LTEuMjhhNi41NSA2LjU1IDAgMCAxLTEtLjQuMzQuMzQgMCAwIDEtLjEyLS4zYy4yMS0xIC40MS0xLjkzLjY2LTIuODkuMzMtMS4yNC43Mi0yLjQ3IDEtMy43Mi4zOC0xLjQ4LjcyLTMgMS4wOC00LjQ3LjIyLS44OS40Ni0xLjc4LjY4LTIuNjguMTgtLjcyLjM0LTEuNDUuNTItMi4xN3MuMzItMS4yMy41Mi0xLjgzLjM4LS41NS44OC0uNDJhNi43NCA2Ljc0IDAgMCAwIC45Mi4xNWMxLjIuMTUgMi4zOS4yOCAzLjU5LjQ0bDUuNi43NSA0LjYxLjU3Yy44NS4xMSAxLjY5LjI1IDIuNTMuMzYuMyAwIC40Ny4xOS40NC41MXYuNDNjLS4xMyAxLjI0LS4yMiAyLjQ5LS40IDMuNzJzLS40NSAyLjM4LS42NiAzLjU4Yy0uMDYuMzQtLjIzLjQ3LS41NS40MmwtMi4xNC0uMzVhMi4yIDIuMiAwIDAgMC0uNDcgMGMtLjQgMC0uNTcuMjItLjQyLjU5YTcuOTIgNy45MiAwIDAgMCAuNzEgMS4zNCAyNC45NCAyNC45NCAwIDAgMCAzLjUyIDQuMjFjLjkxLjg4IDEuODIgMS43NiAyLjc4IDIuNTdhMTkgMTkgMCAwIDAgNC4yOSAyLjY5YzEuMTEuNTEgMi4yMiAxIDMuMzcgMS40N3MyLjM4LjggMy41OCAxLjE4YTIgMiAwIDAgMCAuNTEuMDUuNDcuNDcgMCAwIDAgLjUyLS40IDIuOTEgMi45MSAwIDAgMCAuMDctLjU1Yy4wNy0zLjYuMTgtNy4xOS4yLTEwLjc5LjA1LTguMzIuMDYtMTYuNjQuMDgtMjVWNTQuODVjMC0uOS0uMi0xLjA5LTEuMS0xLjA5aC0xNmExMy41MSAxMy41MSAwIDAgMS0yLjc4LS4zOSAxLjMxIDEuMzEgMCAwIDEtLjczLS43IDMuNDUgMy40NSAwIDAgMS0uMzMtMS4zNXYtNC4zMWEzLjQ1IDMuNDUgMCAwIDEgLjMxLTEuMSAxIDEgMCAwIDEgLjk1LS42M2MxLjMtLjExIDIuNi0uMjQgMy45MS0uMjYgMy42MyAwIDcuMjUgMCAxMC44OC0uMDVoMy44M2MuNjYgMCAxLS4yNyAxLS45M1YzMi41NmExLjQzIDEuNDMgMCAwIDAtLjc1LTEuMzQgMTAuNDkgMTAuNDkgMCAwIDEtMy41NS0zLjU2IDcuNTcgNy41NyAwIDAgMS0xLjI5LTMuN2MtLjA2LTEuMTkgMC0yLjM5IDAtMy41OEE4LjM1IDguMzUgMCAwIDEgNTguNDEgMTdhOS41IDkuNSAwIDAgMSA0LTMuNzYgNi41MyA2LjUzIDAgMCAxIDIuNjgtMWMuNzMtLjA4IDEuNDQtLjMgMi4xNy0uMzRhNi4xNiA2LjE2IDAgMCAxIDEuNDIuMjJjLjEzIDAgLjI1LjA4LjM3LjA5YTEwLjM1IDEwLjM1IDAgMCAxIDUgMi4zNSA3LjYyIDcuNjIgMCAwIDEgMi4xOCAyLjhjLjQ2LjkzLjggMS45MyAxLjE3IDIuOWEyLjEyIDIuMTIgMCAwIDEgLjEuNjd2MS40NWE4LjEyIDguMTIgMCAwIDEtLjcxIDMuNTUgMTIuMzEgMTIuMzEgMCAwIDEtMi4xNyAzLjYzIDUuOCA1LjggMCAwIDEtMS45MyAxLjU3IDEuNjggMS42OCAwIDAgMC0xLjA2IDEuNzR2MTEuMjZjMCAuNjIuMjkuODYuOTIuODhIODUuNjljMS43NiAwIDMuNTIuMTQgNS4yOC4xNmExLjgyIDEuODIgMCAwIDEgMS42OCAxLjg1djQuNjFhMi4zMyAyLjMzIDAgMCAxLS41NyAxLjQ0IDEuMzUgMS4zNSAwIDAgMS0uNy40MSAyMC4wNyAyMC4wNyAwIDAgMS01LjE4LjM0SDcyLjY3Yy0uOTEgMC0xLjA3LjE2LTEuMDcgMS4wNnEuMDUgMTIuMzQuMDUgMjQuNjJabS00LjQ5LTUxLjU1YTUuNzQgNS43NCAwIDAgMCA1LjcxLTUuNjQgNS44MiA1LjgyIDAgMCAwLTYuMDgtNS42M2MtMi41Mi4wNS01LjExIDIuODMtNS4wNyA1LjcxYTUuNiA1LjYgMCAwIDAgNS40NCA1LjU2WiIvPjxwYXRoIGQ9Ik04MC45NCA3Ny41YTIwIDIwIDAgMCAxLTIuNjktLjM3IDcuMzMgNy4zMyAwIDAgMS00LjM0LTMgNy43IDcuNyAwIDAgMS0xLTYuMjQgNy43OCA3Ljc4IDAgMCAxIDMuNzYtNSAxMC4yNSAxMC4yNSAwIDAgMSA2LjM4LTEuNTEgOC4xIDguMSAwIDAgMSA2LjE3IDMuNEE3LjY1IDcuNjUgMCAwIDEgOTAuNTcgNzFhNi40NiA2LjQ2IDAgMCAxLTIuMTQgMy40NiAxMi4yNyAxMi4yNyAwIDAgMS0zLjQ2IDIuMjEgMTAuNjQgMTAuNjQgMCAwIDEtNC4wMy44M1ptMy01LjY2YTYuNjkgNi42OSAwIDAgMCAwLS44NSAyMi41IDIyLjUgMCAwIDAtMS4xNy00Ljc3IDEuODMgMS44MyAwIDAgMC0xLjQ4LTEuMzFjLTEuMjYtLjEzLTEuOTIgMS0xLjggMi4xOWEyMy43MiAyMy43MiAwIDAgMCAuNjQgMy40IDEzLjA3IDEzLjA3IDAgMCAwIC44NiAyLjM5IDEuNDggMS40OCAwIDAgMCAyLjMzLjU2IDEuODEgMS44MSAwIDAgMCAuNjEtMS42M1pNNDMuOTQgNzMuMzFhMy44NyAzLjg3IDAgMCAxIDItMy42QTguOTEgOC45MSAwIDAgMSA1MSA2OC4zOWE1LjU5IDUuNTkgMCAwIDAgLjYgMCAxIDEgMCAwIDAgMS0xIDEwIDEwIDAgMCAwLS4yNy0yLjU2IDEuMzMgMS4zMyAwIDAgMC0yLjM0LS41NGMtLjU3LjU1LTEgMS4yMS0xLjU3IDEuNzlhMi41NiAyLjU2IDAgMCAxLTIuMjIuOTQgMS40NyAxLjQ3IDAgMCAxLTEuMjEtMiAzLjkzIDMuOTMgMCAwIDEgMi0yLjA5IDEzLjI2IDEzLjI2IDAgMCAxIDIuNTctMS4wOCAxMC4zMSAxMC4zMSAwIDAgMSA1LjEzLS4yNyA3LjM1IDcuMzUgMCAwIDEgMi45MyAxLjM2QTMuMzggMy4zOCAwIDAgMSA1OSA2NS4zOWMuMDcgMS4yNy4wOCAyLjU0LjE1IDMuODEuMDYgMSAuMTYgMiAuMjYgM2ExLjIzIDEuMjMgMCAwIDAgLjg4IDEuMDVjLjY3LjI3Ljc0LjQ2LjU3IDEuMTRhMy44IDMuOCAwIDAgMS0yIDIuMzUgNC4zOCA0LjM4IDAgMCAxLTMuNjguNDUgMy4zIDMuMyAwIDAgMS0xLjE1LS42OWMtLjc0LS42OC0uODItLjc1LTEuNjItLjE5YTYuMjEgNi4yMSAwIDAgMS00LjY5IDEgNC4yMSA0LjIxIDAgMCAxLTMuMS0xLjgxIDMuMSAzLjEgMCAwIDEtLjY4LTIuMTlabTcuNy0yLjkxYTIgMiAwIDAgMC0xLjE3IDMuNDMgMS4yMiAxLjIyIDAgMCAwIDEuNzQtLjI0IDIuOSAyLjkgMCAwIDAgLjI2LTIuNjIuNzYuNzYgMCAwIDAtLjgyLS41N1oiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'atocha-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'SeatlabNFT',\n symbol: 'SEAT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='32px' height='32px' viewBox='0 0 32 32' style='enable-background:new 0 0 32 32;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23050035;%7D .st1%7Bfill:url(%23SVGID_1_);%7D%0A%3C/style%3E%3Cg id='Layer_1'%3E%3Ccircle class='st0' cx='16' cy='16' r='16'/%3E%3C/g%3E%3Cg id='Isolation_Mode'%3E%3ClinearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='6.2375' y1='16' x2='25.7625' y2='16'%3E%3Cstop offset='0' style='stop-color:%2300C2FF'/%3E%3Cstop offset='1' style='stop-color:%230067FF'/%3E%3C/linearGradient%3E%3Cpath class='st1' d='M14,6.1c-0.3,0-0.5,0.1-0.8,0.2L8.1,9.4L7.8,9.6L7.2,10c-0.5,0.3-0.9,0.6-0.9,1.7v4.1c0,0.9,0.3,1.6,0.9,1.9 l6.2,3.8c1,0.6,2.3-0.1,2.3-1.3v-2.9c0-0.7-0.4-1.4-1-1.8l-2.9-1.8l3-1.9c0.5-0.3,0.8-0.9,0.8-1.5V7.6C15.6,6.7,14.8,6.1,14,6.1z M14.7,10.4c0,0.3-0.2,0.6-0.4,0.8l-3.4,2.1l-1.8-1.1c-0.5-0.3-0.8-0.5-1.1-0.8c-0.3-0.3-0.2-0.8,0.2-1c0,0,0,0,0,0L13.7,7 C13.8,7,13.9,6.9,14,6.9c0.3,0,0.7,0.3,0.7,0.7V10.4z M24.9,14.3l-6.2-3.8c-1-0.6-2.3,0.1-2.3,1.3v2.9c0,0.7,0.4,1.4,1,1.8l2.9,1.8 l-3,1.9c-0.5,0.3-0.8,0.9-0.8,1.5v2.8c0,0.9,0.8,1.6,1.6,1.6c0.3,0,0.5-0.1,0.8-0.2l5.1-3.1l0.4-0.2l0.6-0.4 c0.5-0.3,0.9-0.6,0.9-1.7v-4.1C25.8,15.3,25.4,14.6,24.9,14.3z M23.8,21.6C23.8,21.6,23.8,21.6,23.8,21.6L18.3,25 c-0.1,0.1-0.2,0.1-0.4,0.1c-0.3,0-0.7-0.3-0.7-0.7v-2.8c0-0.3,0.2-0.6,0.4-0.8l3.4-2.1l1.8,1.1c0.5,0.3,0.8,0.5,1.1,0.8 C24.3,20.9,24.2,21.4,23.8,21.6z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 5,\n id: 'token.stlb.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Burrow Token',\n symbol: 'BRRR',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.burrow.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'FUSOTAO',\n symbol: 'TAO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTU1LjQxIDI5LjYzNS03LjI5NiA2LjE0N2ExLjY1OSAxLjY1OSAwIDAgMS0uNjc1IDIuMzlsMS44NDggOS41NDZjLjgwNS0uMjA4IDEuNTM2LS43MDIgMi4wODktMS41MzlhMTIuODE2IDEyLjgxNiAwIDAgMCAxLjk4Mi01LjI4OWMuMTctMS4yNTEuNTY0LTIuNDczIDEuMTU2LTMuNTg2YTEyLjgzMyAxMi44MzMgMCAwIDAgMS40ODItNS40NjljLjAzNS0uODYzLS4xODYtMS42LS41ODctMi4yeiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00NS4zNDIgMzUuOTA2YTEuNjM3IDEuNjM3IDAgMCAxIDIuMTgzLS42M2w3LjM3OC02LjE5M2MtMS4yODMtMS4xOTMtMy40NTktMS41NDctNS40NDUtLjkwM2wtMTIuNzQyIDQuMTM1Yy0uMzEuMS0uNTUzLjI5Ny0uNzE2LjU0Mmw5LjM0MiAzLjA0OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNNDMuODkyIDQ1LjM3YzEuMTQ5IDEuNTkyIDIuOTQ3IDIuNTcyIDQuNTk5IDIuNTI0bC0xLjg0NC05LjQ4N2ExLjY0NCAxLjY0NCAwIDAgMS0xLjUzOC0xLjY4bC05LjM2NC0zLjA1NWMuMDA0LjI2OC4wODcuNTQuMjYuNzhsNy44ODcgMTAuOTE5eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Im00MS40MSA1My4yMjMtOC4wNTYtNS4wOTJhMS42MzEgMS42MzEgMCAwIDEtMi40NjQuMDkxbC04LjQzOCA0LjcyMWMuNDQ0LjcwOCAxLjEzNiAxLjI1NiAyLjA5NyAxLjUyNyAxLjc5NC41MDYgMy43NC42MDMgNS42MDUuMjY1YTEwLjUzNiAxMC41MzYgMCAwIDEgMy43NDIgMGMxLjg3LjMzOSAzLjgyMS4yNCA1LjYxOS0uMjcuODI2LS4yMzMgMS40NTMtLjY3MyAxLjg5NS0xLjI0MnoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNMzIuMzg5IDQ1LjQzOGExLjY0NiAxLjY0NiAwIDAgMSAxLjI3IDEuODlsOC4xNDUgNS4xMzRjLjczNC0xLjU5NC4zOTctMy43ODItLjgyNy01LjQ4TDMzLjEyMyAzNi4wOWExLjM1NCAxLjM1NCAwIDAgMC0uNzM0LS41MTZ2OS44NjR6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTIyLjk3IDQ3LjAxN2MtMS4xNTEgMS41ODgtMS41MjQgMy42MDgtLjk2OSA1LjE3bDguNDItNC42OTJhMS42NDggMS42NDggMCAwIDEgMS4xMTctMS45ODd2LTkuODg0Yy0uMjUzLjA4Ny0uNDg1LjI1LS42NTkuNDlsLTcuOTA4IDEwLjkwM3oiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTUuODg2IDM1Ljc4Mi03LjI5NS02LjE0N2MtLjQwMS42LS42MjIgMS4zMzctLjU4NyAyLjJhMTIuODMgMTIuODMgMCAwIDAgMS40ODIgNS40NjkgMTAuNzUxIDEwLjc1MSAwIDAgMSAxLjE1NiAzLjU4NmMuMjU4IDEuODkyLjk1IDMuNzI3IDEuOTgyIDUuMjkuNTUzLjgzNiAxLjI4NCAxLjMzIDIuMDg5IDEuNTM4bDEuODQ4LTkuNTQ2YTEuNjU5IDEuNjU5IDAgMCAxLS42NzUtMi4zOXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTUuNTY4IDQ3Ljg1NmMxLjY0OS4wNDggMy40NDUtLjkzMiA0LjU5Mi0yLjUyMWw3Ljg3NS0xMC45MDhhMS4zNiAxLjM2IDAgMCAwIC4yNi0uNzhsLTkuMzUgMy4wNTJhMS42NDcgMS42NDcgMCAwIDEtMS41MzYgMS42NzlsLTEuODQgOS40Nzh6IiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0iTTE2Ljc0NSAzNS4xOTNhMS42NCAxLjY0IDAgMCAxIDEuOTI3Ljc0bDkuMzU2LTMuMDUyYTEuMzU3IDEuMzU3IDAgMCAwLS43MTctLjU0M2wtMTIuNzYxLTQuMTRjLTEuOTktLjY0NC00LjE2OC0uMjktNS40NTMuOTA1bDcuMzkgNi4yYy4wOC0uMDQ0LjE2Ny0uMDguMjU4LS4xMXoiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtNDAuNTcxIDE4LjA5LTMuNTQ2LTguODkyYy42ODktLjE5OCAxLjQ1My0uMTgyIDIuMjU4LjExOGExMi42NSAxMi42NSAwIDAgMSA0LjcwMyAzLjExIDEwLjYxNCAxMC42MTQgMCAwIDAgMy4wMjcgMi4yMTYgMTIuNjc2IDEyLjY3NiAwIDAgMSA0LjM4IDMuNTM1Yy42MTkuNzg4Ljg2IDEuNjQxLjgwNiAyLjQ3N2wtOS41OC0xLjE3OWExLjY0OSAxLjY0OSAwIDAgMC0uNjYyLTEuMTI2IDEuNjI2IDEuNjI2IDAgMCAwLTEuMzg2LS4yNnoiIGZpbGw9InVybCgjaikiLz48cGF0aCBkPSJNMzkuNzY0IDE4Ljc5Yy0uNDYzLjY0LS40IDEuNS4xMDQgMi4wNjZsLTUuNzczIDcuOThhMS4zNjMgMS4zNjMgMCAwIDEtLjI5Mi0uODVsLjAyMS0xMy40NDljLjAwNC0yLjA5NiAxLjAxMi00LjA2NCAyLjUzOC00LjkybDMuNTg1IDguOTZhMS42NiAxLjY2IDAgMCAwLS4xODMuMjEzeiIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Ik01Mi4xNiAyMS41NDhjLS40NjUgMS41OTEtMS45NSAzLjAwNi0zLjgxMiAzLjYxbC0xMi43ODIgNC4xNTVhMS4zNTIgMS4zNTIgMCAwIDEtLjgyLjAwOGw1Ljc4OC03Ljk5NmExLjY0IDEuNjQgMCAwIDAgMi4wNjctLjk0OWw5LjU1OSAxLjE3MnoiIGZpbGw9InVybCgjbCkiLz48cGF0aCBkPSJtMjcuNDYgOS4xOTgtMy41NDcgOC44OTJhMS42MjYgMS42MjYgMCAwIDAtMS4zODYuMjYgMS42NSAxLjY1IDAgMCAwLS42NjIgMS4xMjVsLTkuNTggMS4xNzljLS4wNTMtLjgzNi4xODctMS42OS44MDYtMi40NzdhMTIuNjc3IDEyLjY3NyAwIDAgMSA0LjM4LTMuNTM0IDEwLjYxNiAxMC42MTYgMCAwIDAgMy4wMjctMi4yMTcgMTIuNjUgMTIuNjUgMCAwIDEgNC43MDMtMy4xMWMuODA1LS4zIDEuNTY5LS4zMTYgMi4yNTgtLjExOHoiIGZpbGw9InVybCgjbSkiLz48cGF0aCBkPSJNMTYuMTk1IDI1LjE0M2MtMS44Ni0uNjA1LTMuMzQyLTIuMDE3LTMuODA2LTMuNjA3bDkuNTQ0LTEuMTdhMS42MzYgMS42MzYgMCAwIDAgMi4wNjQuOTQ4bDUuNzggNy45ODdhMS4zNDkgMS4zNDkgMCAwIDEtLjgxOS0uMDA4bC0xMi43NjMtNC4xNXoiIGZpbGw9InVybCgjbikiLz48cGF0aCBkPSJNMjQuNjM5IDIwLjg2N2ExLjY1NCAxLjY1NCAwIDAgMC0uMDc5LTIuMjgxbDMuNTktOC45N2MxLjUzLjg1NyAyLjUzOSAyLjgyOCAyLjU0MiA0LjkyNmwuMDIxIDEzLjQ2MmMuMDAxLjMyNy0uMTEuNjItLjI5Mi44NTJsLTUuNzgyLTcuOTg5eiIgZmlsbD0idXJsKCNvKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjgiIHkxPSI0My40NjciIHgyPSIxNi4zOTkiIHkyPSIzNy45MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjOUEwQTBFIi8+PHN0b3Agb2Zmc2V0PSIuODY5IiBzdG9wLWNvbG9yPSIjREExODFGIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI0NS45MjYiIHkxPSIzNi4wNTMiIHgyPSI1MS4wNjgiIHkyPSI0My41NjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii40NjQiIHN0b3AtY29sb3I9IiNFQTMwMkEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNDNTE1MUIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjQyLjk2MyIgeTE9IjEyLjIzIiB4Mj0iMzMuODY1IiB5Mj0iMjcuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjRjlCMTk4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUUxQzI1Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImsiIHgxPSI0Mi45NjMiIHkxPSIxMi4yMyIgeDI9IjMzLjg2NSIgeTI9IjI3LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5QjE5OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFMUMyNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iNDIuOTYzIiB5MT0iMTIuMjMiIHgyPSIzMy44NjUiIHkyPSIyNy4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNGOUIxOTgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'fusotao-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3847L21.3848 17.1421L19.3669 15.1243C18.5576 17.0302 17.0303 18.5576 15.1243 19.3669L17.1421 21.3847ZM9.4329 19.5792C7.45318 18.9089 5.82112 17.4847 4.87847 15.6484L3.24263 17.2842L7.48527 21.5269L9.4329 19.5792ZM4.63307 8.87568C5.4424 6.96973 6.96977 5.44237 8.87573 4.63305L7.24263 2.99995L2.99999 7.24259L4.63307 8.87568ZM15.6484 4.87847L17.3848 3.14209L21.6274 7.38473L19.5792 9.4329C18.9089 7.45318 17.4847 5.82112 15.6484 4.87847Z' fill='%232FA8AF'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E%0A\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.stader-labs.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DISCOVOL TOKEN',\n symbol: 'DISC',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGU+LnN0MHtmaWxsOiNmOTcxMTZ9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDYuMSAxOC43djEwNS42czIxLjMtNS41IDMzLjEtMjljMCAwIDEyLjctMjIuMi0uOS00OS43IDAgMC0xMC4xLTIwLjktMzIuMi0yNi45eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDUuNyA5LjRjMzEuMSAxOC4zIDM0LjUgNDguNCAzNC41IDQ4LjQgNi40IDM3LjktMTcgNjAuMy0xNyA2MC4zLTMxLjQgMzQuNS03My40IDIwLjMtNzMuNCAyMC4zIDMwLjYtOS4zIDQxLjktMzUuMSA0MS45LTM1LjEgMTYuNi0zNS41IDAtNjMuMiAwLTYzLjJDNzcgOS43IDQ3LjMgMy45IDQ3LjMgMy45YzMyLjQtMTEuMyA1OC40IDUuNSA1OC40IDUuNXptNyAxMS41UzExMS4xIDM4IDk0LjcgMzhjMCAwIDE2IDIuOCAxNy41IDE4LjggMCAwIDEuNC0xNy41IDE4LjItMTguMy0uMSAwLTE4LjUtMS41LTE3LjctMTcuNnpNMjUuNiAxNS45aDUuOXYxMTAuOEgyN1M4IDExMiAyLjIgODkuMmMwIDAtNy43LTI2LjIgNS01MC40LjEuMSA5LjUtMTcgMTguNC0yMi45eiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 14,\n id: 'discovol-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Stader',\n symbol: 'SD',\n icon:\n \"data:image/svg+xml,%3Csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z' fill='%236259D4'/%3E%3Cpath d='M126.852 191.869L126.822 181.088L153.98 165.105L153.886 133.025L163.667 127.882L164.056 170.723L126.852 191.869Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M153.98 165.105L126.822 181.088L126.852 191.869L164.056 170.723L163.667 127.882L153.886 133.025L153.98 165.105ZM154.207 133.218L154.3 165.104C154.301 165.218 154.241 165.323 154.143 165.381L127.143 181.271L127.171 191.32L163.735 170.538L163.352 128.41L154.207 133.218Z' fill='%236259D4'/%3E%3Cpath d='M134.785 112.611L145.906 106.314L173.184 123.396L173.334 175.037L164.063 170.734L163.673 127.894L134.785 112.611Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.673 127.894L164.063 170.734L173.334 175.037L173.184 123.396L145.906 106.314L134.785 112.611L163.673 127.894ZM135.451 112.601L163.823 127.611C163.927 127.666 163.992 127.773 163.993 127.891L164.381 170.529L173.013 174.535L172.865 123.574L145.898 106.687L135.451 112.601Z' fill='%236259D4'/%3E%3Cpath d='M126.443 53.3335L173.06 79.8728L173.094 90.9255L126.49 64.9081L126.443 53.3335Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M126.443 53.3335L126.49 64.9081L173.094 90.9255L173.06 79.8728L126.443 53.3335ZM126.766 53.8852L126.81 64.7198L172.773 90.3795L172.741 80.0592L126.766 53.8852Z' fill='%236259D4'/%3E%3Cpath d='M80.1584 134.322L80 80.4074L126.432 53.3335L126.48 64.9081L88.7187 86.0335L88.5731 128.106L80.1584 134.322Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M88.7187 86.0335L126.48 64.9081L126.432 53.3335L80 80.4074L80.1584 134.322L88.5731 128.106L88.7187 86.0335ZM88.2536 127.944L88.3987 86.0324C88.3991 85.9169 88.4617 85.8106 88.5624 85.7542L126.159 64.7209L126.115 53.8892L80.3205 80.5909L80.4766 133.689L88.2536 127.944Z' fill='%236259D4'/%3E%3Cpath d='M107.511 149.374L80.1562 134.324L88.5709 128.108L135.44 154.885L107.58 170.601L98.2445 175.794L126.85 191.879L164.054 170.733L173.325 175.035L126.619 202.66L80.2804 176.371L117.215 154.711L107.511 149.374Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M107.58 170.601L135.44 154.885L88.5709 128.108L80.1562 134.324L117.215 154.711L80.2804 176.371L126.619 202.66L173.325 175.035L164.054 170.733L126.85 191.879L98.2445 175.794L107.58 170.601ZM164.069 171.092L127.008 192.157C126.91 192.213 126.791 192.213 126.693 192.158L98.0877 176.073C97.9866 176.016 97.9242 175.909 97.9245 175.794C97.9248 175.678 97.9877 175.571 98.0889 175.515L107.423 170.322L134.792 154.884L88.5932 128.49L80.7483 134.285L107.666 149.093L117.369 154.431C117.47 154.486 117.533 154.592 117.535 154.707C117.536 154.822 117.476 154.929 117.377 154.987L80.9208 176.367L126.615 202.29L172.639 175.069L164.069 171.092Z' fill='%236259D4'/%3E%3Cpath d='M88.7207 86.0458L126.482 64.9204L173.085 90.9378L145.902 106.323L134.781 112.619L163.669 127.902L153.888 133.044L116.808 112.11L153.764 90.4499L144.947 85.4178L126.512 74.8955L99.0623 90.6069L88.7207 86.0458Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M173.085 90.9378L126.482 64.9204L88.7207 86.0458L99.0623 90.6069L126.512 74.8955L153.764 90.4499L116.808 112.11L153.888 133.044L163.669 127.902L134.781 112.619L173.085 90.9378ZM162.983 127.901L134.631 112.902C134.528 112.847 134.462 112.741 134.461 112.624C134.459 112.507 134.521 112.398 134.623 112.341L145.744 106.044L172.432 90.9397L126.482 65.287L89.4368 86.0119L99.0436 90.2489L126.353 74.6177C126.451 74.5614 126.572 74.5614 126.67 74.6175L153.923 90.172C154.022 90.2286 154.083 90.3338 154.084 90.4481C154.085 90.5623 154.024 90.6682 153.926 90.726L117.45 112.105L153.894 132.68L162.983 127.901Z' fill='%236259D4'/%3E%3Cpath d='M98.252 175.789L107.587 170.596L126.827 181.093L126.857 191.874L98.252 175.789Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M98.252 175.789L126.857 191.874L126.827 181.093L107.587 170.596L98.252 175.789ZM98.9075 175.791L126.536 191.326L126.508 181.283L107.589 170.962L98.9075 175.791Z' fill='%236259D4'/%3E%3Cpath d='M80.2804 176.368L80.2461 164.785L107.511 149.371L117.215 154.708L80.2804 176.368Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M80.2804 176.368L117.215 154.708L107.511 149.371L80.2461 164.785L80.2804 176.368ZM80.5987 175.81L116.567 154.717L107.513 149.737L80.5666 164.971L80.5987 175.81Z' fill='%236259D4'/%3E%3Cpath d='M116.809 112.109L116.92 101.073L144.947 85.417L153.764 90.4491L116.809 112.109Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M116.809 112.109L153.764 90.4491L144.947 85.417L116.92 101.073L116.809 112.109ZM117.134 111.547L153.125 90.4528L144.946 85.7845L117.238 101.262L117.134 111.547Z' fill='%236259D4'/%3E%3Cpath d='M88.5723 128.087L88.7179 86.0142L99.0595 90.5753L99.1537 123.589L135.407 143.582L135.442 154.864L88.5723 128.087Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M99.1537 123.589L99.0595 90.5753L88.7179 86.0142L88.5723 128.087L135.442 154.864L135.407 143.582L99.1537 123.589ZM135.088 143.771L98.9992 123.869C98.8974 123.813 98.8341 123.706 98.8337 123.59L98.7401 90.7841L89.0362 86.5043L88.8929 127.901L135.12 154.311L135.088 143.771Z' fill='%236259D4'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '30d20208d987713f46dfd34ef128bb16c404d10f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0',\n name: 'SWEAT',\n symbol: 'SWEAT',\n icon:\n \"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100' height='100' rx='50' fill='%23FF0D75'/%3E%3Cg clip-path='url(%23clip0_283_2788)'%3E%3Cpath d='M39.4653 77.5455L19.0089 40.02L35.5411 22.2805L55.9975 59.806L39.4653 77.5455Z' stroke='white' stroke-width='10'/%3E%3Cpath d='M66.0253 77.8531L45.569 40.3276L62.1012 22.5882L82.5576 60.1136L66.0253 77.8531Z' stroke='white' stroke-width='10'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_283_2788'%3E%3Crect width='100' height='56' fill='white' transform='translate(0 22)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.sweat',\n },\n {\n spec: 'ft-1.0.0',\n name: 'APYSwap',\n symbol: 'APYS',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iLTEwIC0xMCAxMjAgMTIwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTQ2OF81MTk1KSI+CjxwYXRoIGQ9Ik0zOC40MzUzIDEyLjY4NUw3NC41ODY5IDc3Ljg2NzdMOTguOTk5OSA3OC41NjYzTDYyLjY3NDkgMTMuMzc4N0wzOC40MzUzIDEyLjY4NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjxwYXRoIGQ9Ik0xMi43NjcyIDU1LjQwNzFMODYuOTM2NiA1Ni42MzI2TDk4Ljk5ODIgNzcuODM0OEwwLjAxMTcwNDYgNzYuMTk5MkwxMi43NjcyIDU1LjQwNzFaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTQ2OF81MTk1KSIvPgo8cGF0aCBkPSJNNjIuMjQxMSAxMy4wOTRMMjMuODY5OCA3Ny4wODU2TC0wLjUxMDgwNSA3Ni45MTIyTDM3Ljg2NzMgMTIuOTIwN0w2Mi4yNDExIDEzLjA5NFoiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSI1NS45Njc3IiB5MT0iMjMuODc4MSIgeDI9Ijg1LjQ4MjUiIHkyPSI3Ny4wMTI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwOEFFRUEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMkFGNTk4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSIyOS40ODcxIiB5MT0iNjcuODQzIiB4Mj0iNjguOTYzNiIgeTI9IjY4LjgwMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzE0NjhfNTE5NSIgeDE9IjUxLjk4MzUiIHkxPSIzLjEzMzQ1IiB4Mj0iMzEuMjQxOCIgeTI9IjM2LjE3MzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDY4XzUxOTUiPgo8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'apys.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.tether-token.near',\n },\n];\n\nexport function getDefaultTokenList() {\n const env = getConfig().networkId;\n\n switch (env) {\n case 'mainnet':\n return DefaultMainnetTokenList;\n case 'testnet':\n return DefaultTestnetTokenList;\n default:\n return DefaultMainnetTokenList;\n }\n}\n","import { TokenMetadata, Transaction } from '../types';\n\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport { DCLSwapGetStorageBalance } from '../ref';\nimport { DCL_POOL_FEE_LIST, getDCLPoolId } from './dcl-pool';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport _ from 'lodash';\nimport { toReadableNumber, percentLess } from '../utils';\nimport { NoPoolOnThisPair, SlippageError } from '../error';\n\ninterface SwapInfo {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n}\n\ninterface DCLSwapProps {\n swapInfo: SwapInfo;\n Swap?: {\n pool_ids: string[];\n min_output_amount: string;\n };\n SwapByOutput?: {\n pool_ids: string[];\n output_amount: string;\n };\n LimitOrderWithSwap?: {\n pool_id: string;\n output_amount: string;\n };\n AccountId: string;\n}\nexport const DCL_POOL_SPLITER = '|';\n\nexport const DCLSwap = async ({\n Swap,\n SwapByOutput,\n LimitOrderWithSwap,\n AccountId,\n swapInfo,\n}: DCLSwapProps) => {\n const transactions: Transaction[] = [];\n\n const { tokenA, tokenB, amountA } = swapInfo;\n\n if (Swap) {\n const pool_ids = Swap.pool_ids;\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const output_token = tokenB.id;\n const min_output_amount = toPrecision(Swap.min_output_amount, 0);\n\n const msg = JSON.stringify({\n Swap: {\n pool_ids,\n output_token,\n min_output_amount,\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByOutput) {\n const pool_ids = SwapByOutput.pool_ids;\n const output_token = tokenB.id;\n const output_amount = toNonDivisibleNumber(\n tokenB.decimals,\n SwapByOutput.output_amount\n );\n const msg = JSON.stringify({\n SwapByOutput: {\n pool_ids,\n output_token,\n output_amount,\n },\n });\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (LimitOrderWithSwap) {\n const pool_id = LimitOrderWithSwap.pool_id;\n\n const fee = Number(pool_id.split(DCL_POOL_SPLITER)[2]);\n\n const buy_token = tokenB.id;\n const point = priceToPoint({\n amountA,\n amountB: LimitOrderWithSwap.output_amount,\n tokenA,\n tokenB,\n fee,\n });\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const DCLRegistered = await DCLSwapGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (DCLRegistered === null) {\n transactions.push({\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: '0.5',\n },\n ],\n });\n }\n\n const new_point =\n pool_id.split(DCL_POOL_SPLITER)[0] === tokenA.id ? point : -point;\n\n const msg = JSON.stringify({\n LimitOrderWithSwap: {\n pool_id,\n buy_token,\n point: new_point,\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n }\n\n if (tokenA.id === WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n transactions.unshift({\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n }\n\n return transactions;\n};\n\nexport const quote = async ({\n pool_ids,\n input_amount,\n input_token,\n output_token,\n tag,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n input_amount: string;\n tag?: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n input_amount: toNonDivisibleNumber(input_token.decimals, input_amount),\n tag,\n },\n });\n};\n\nexport const list_user_assets = async (AccountId: string) => {\n if (!AccountId) return;\n\n return refDCLSwapViewFunction({\n methodName: 'list_user_assets',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const DCLSwapByInputOnBestPool = async ({\n tokenA,\n tokenB,\n amountA,\n slippageTolerance,\n AccountId,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n slippageTolerance: number;\n AccountId: string;\n}) => {\n if (slippageTolerance <= 0 || slippageTolerance >= 100) {\n throw SlippageError;\n }\n\n const estimates = await Promise.all(\n DCL_POOL_FEE_LIST.map(async fee => {\n const pool_id = getDCLPoolId(tokenA.id, tokenB.id, fee);\n return quote({\n pool_ids: [pool_id],\n input_token: tokenA,\n output_token: tokenB,\n input_amount: amountA,\n tag: `${tokenA.id}-${fee}-${amountA}`,\n }).catch(e => null);\n })\n );\n\n if (!estimates || estimates.every(e => e === null)) {\n throw NoPoolOnThisPair(tokenA.id, tokenB.id);\n }\n\n const bestEstimate =\n estimates && estimates?.some(e => !!e)\n ? _.maxBy(estimates, e => Number(!e || !e.tag ? -1 : e.amount))\n : null;\n\n const bestFee =\n bestEstimate &&\n bestEstimate.tag &&\n bestEstimate?.tag?.split('-')?.[1] &&\n Number(bestEstimate?.tag?.split('-')?.[1]);\n\n return DCLSwap({\n swapInfo: {\n tokenA,\n tokenB,\n amountA,\n },\n Swap: {\n pool_ids: [getDCLPoolId(tokenA.id, tokenB.id, bestFee)],\n min_output_amount: percentLess(slippageTolerance, bestEstimate.amount),\n },\n AccountId,\n });\n};\n\nexport const quote_by_output = ({\n pool_ids,\n output_amount,\n input_token,\n output_token,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n output_amount: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote_by_output',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n output_amount: toNonDivisibleNumber(output_token.decimals, output_amount),\n },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport { NoOrderFound, OrderNoRemainedAmount } from '../error';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport {\n ONE_YOCTO_NEAR,\n WRAP_NEAR_CONTRACT_ID,\n config,\n POINTLEFTRANGE,\n POINTRIGHTRANGE,\n} from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\n\nexport interface UserOrderInfo {\n order_id: string;\n owner_id: string;\n pool_id: string;\n point: number;\n sell_token: string;\n created_at: string;\n original_amount: string;\n remain_amount: string; // 0 means history order: ;\n cancel_amount: string;\n // amount through ft_transfer_call\n\n original_deposit_amount: string;\n // earn token amount through swap before actual place order\n\n swap_earn_amount: string;\n buy_token: string;\n unclaimed_amount: string; // claim will push it to inner account\n bought_amount: string; // accumalated amount into inner account\n}\n\nexport const list_history_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_history_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const list_active_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_active_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const get_order = async (order_id: string) => {\n return refDCLSwapViewFunction({\n methodName: 'get_order',\n args: {\n order_id,\n },\n }).catch(() => {\n throw NoOrderFound(order_id);\n });\n};\n\nexport const find_order = async ({\n pool_id,\n point,\n AccountId,\n}: {\n pool_id: string;\n point: number;\n AccountId: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'find_order',\n args: {\n account_id: AccountId,\n pool_id,\n point,\n },\n }).catch(() => {\n throw NoOrderFound();\n }) as Promise<UserOrderInfo>;\n};\nexport const cancel_order = async (order_id: string) => {\n const order = await get_order(order_id);\n\n if (!order.remain_amount) throw OrderNoRemainedAmount;\n\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: order.remain_amount,\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const claim_order = (order_id: string) => {\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: '0',\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const get_pointorder_range = ({\n pool_id,\n left_point,\n right_point,\n}: {\n pool_id: string;\n left_point?: number;\n right_point?: number;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'get_pointorder_range',\n args: {\n pool_id,\n left_point: left_point || POINTLEFTRANGE,\n right_point: right_point || POINTRIGHTRANGE,\n },\n });\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SwapWidgetProps } from './types';\nimport { TokenMetadata } from '../types';\nimport {\n useRefPools,\n useSwap,\n ThemeContextProvider,\n TokenPriceContextProvider,\n useAllTokens,\n} from './state';\nimport { ftGetBalance, ftGetTokenMetadata } from '../ref';\nimport {\n getAccountName,\n toReadableNumber,\n toPrecision,\n getPriceImpact,\n isMobile,\n} from '../utils';\nimport {\n Slider,\n SlippageSelector,\n TokenSelector,\n TokenAmount,\n DetailView,\n Notification,\n} from './components';\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { TiWarning } from '@react-icons/all-files/ti/TiWarning';\n\nimport './style.css';\nimport { useTokenPriceList, useTokenBalnces, useTokensIndexer } from './state';\n\nimport { CgArrowsExchangeAltV } from '@react-icons/all-files/cg/CgArrowsExchangeAltV';\nimport { RefIcon, AccountButton } from './components';\nimport Big from 'big.js';\nimport { ONLY_ZEROS } from '../utils';\nimport {\n defaultTheme,\n defaultDarkModeTheme,\n REF_WIDGET_SWAP_IN_KEY,\n REF_WIDGET_SWAP_OUT_KEY,\n} from './constant';\nimport {\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n REF_TOKEN_ID,\n REF_META_DATA,\n} from '../constant';\n\nexport const SwapWidget = (props: SwapWidgetProps) => {\n const {\n theme,\n defaultTokenList,\n onSwap,\n connection,\n width,\n height,\n enableSmartRouting,\n className,\n transactionState,\n onConnect,\n defaultTokenIn,\n defaultTokenOut,\n onDisConnect,\n darkMode,\n } = props;\n\n const curTheme = theme || (darkMode ? defaultDarkModeTheme : defaultTheme);\n\n const STORAGED_TOKEN_IN = localStorage.getItem(REF_WIDGET_SWAP_IN_KEY);\n\n const STORAGED_TOKEN_OUT = localStorage.getItem(REF_WIDGET_SWAP_OUT_KEY);\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n refIcon,\n } = curTheme;\n\n const { AccountId, isSignedIn: isSignedInProp } = connection;\n\n const isSignedIn = !!AccountId && isSignedInProp;\n\n const [tokenIn, setTokenIn] = useState<TokenMetadata>();\n\n const handleSetTokenIn = (token: TokenMetadata) => {\n setTokenIn(token);\n localStorage.setItem(REF_WIDGET_SWAP_IN_KEY, token.id);\n };\n\n const handleSetTokenOut = (token: TokenMetadata) => {\n setTokenOut(token);\n localStorage.setItem(REF_WIDGET_SWAP_OUT_KEY, token.id);\n };\n\n const [tokenOut, setTokenOut] = useState<TokenMetadata>();\n const [tokenInBalance, setTokenInBalance] = useState<string>('');\n\n const [tokenOutBalance, setTokenOutBalance] = useState<string>('');\n\n const [notOpen, setNotOpen] = useState<boolean>(false);\n\n useEffect(() => {\n if (!transactionState) return;\n\n if (transactionState && transactionState.state !== null) {\n setNotOpen(true);\n }\n transactionState?.setState(transactionState?.state || null);\n }, [transactionState]);\n\n const [widgetRoute, setWidgetRoute] = useState<\n 'swap' | 'token-selector-in' | 'token-selector-out'\n >('swap');\n\n const [amountIn, setAmountIn] = useState<string>('1');\n\n const [showSlip, setShowSlip] = useState<boolean>(false);\n\n const [slippageTolerance, setSlippageTolerance] = useState<number>(0.5);\n\n const { tokens, tokenLoading } = useTokensIndexer({\n defaultTokenList,\n AccountId,\n });\n\n // cache list tokens\n useAllTokens({ reload: true });\n\n const balances = useTokenBalnces(tokens, AccountId);\n\n const [refreshTrigger, setRreshTrigger] = useState<boolean>(false);\n\n const tokenPriceList = useTokenPriceList();\n\n const { allPools, allStablePools, poolFetchingState } = useRefPools(\n refreshTrigger\n );\n\n useEffect(() => {\n const defaultIn =\n STORAGED_TOKEN_IN || defaultTokenIn || WRAP_NEAR_CONTRACT_ID;\n\n const defaultOut = STORAGED_TOKEN_OUT || defaultTokenOut || REF_TOKEN_ID;\n\n if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) !== -1\n ) {\n if (defaultIn === WRAP_NEAR_CONTRACT_ID || defaultIn === 'NEAR') {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultIn).then(handleSetTokenIn);\n }\n } else if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) === -1\n ) {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n }\n if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) !== -1\n ) {\n if (defaultOut === WRAP_NEAR_CONTRACT_ID || defaultOut === 'NEAR') {\n handleSetTokenOut({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultOut).then(handleSetTokenOut);\n }\n } else if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) === -1\n ) {\n handleSetTokenOut(REF_META_DATA);\n }\n }, [tokens, tokenLoading]);\n\n useEffect(() => {\n if (!tokenIn) return;\n\n const wrapedId = tokenIn.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenIn.id;\n\n if (balances[wrapedId]) {\n setTokenInBalance(balances[wrapedId]);\n return;\n }\n\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenInBalance(toReadableNumber(tokenIn.decimals, available));\n });\n }, [tokenIn, AccountId, balances]);\n\n useEffect(() => {\n if (!tokenOut) return;\n\n const wrapedId =\n tokenOut.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenOut.id;\n\n if (balances[wrapedId]) {\n setTokenOutBalance(balances[wrapedId]);\n return;\n }\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenOutBalance(toReadableNumber(tokenOut.decimals, available));\n });\n }, [tokenOut, AccountId, balances]);\n\n const {\n amountOut,\n minAmountOut,\n rate,\n fee,\n estimates,\n canSwap,\n swapError,\n makeSwap,\n setAmountOut,\n } = useSwap({\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountIn,\n simplePools: allPools.simplePools.filter(p => Number(p.shareSupply) > 0),\n options: {\n enableSmartRouting,\n stablePools: allPools.ratedPools\n .concat(allPools.unRatedPools)\n .filter(p => Number(p.shareSupply) > 0),\n stablePoolsDetail: allStablePools.filter(\n p => Number(p.shares_total_supply) > 0\n ),\n },\n slippageTolerance,\n onSwap,\n AccountId,\n refreshTrigger,\n poolFetchingState,\n });\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut) return '0';\n\n return getPriceImpact({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools: allStablePools,\n });\n }, [estimates, tokenIn, tokenOut, amountIn, amountOut, allStablePools]);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n setNotOpen(true);\n makeSwap();\n };\n\n const canSubmit =\n tokenIn &&\n tokenOut &&\n canSwap &&\n !swapError &&\n isSignedIn &&\n new Big(tokenInBalance || '0').gte(amountIn || '0') &&\n slippageTolerance > 0 &&\n slippageTolerance < 100 &&\n !ONLY_ZEROS.test(tokenInBalance);\n\n return (\n <ThemeContextProvider customTheme={curTheme}>\n <TokenPriceContextProvider>\n {widgetRoute === 'swap' && (\n <form\n className={`__ref-swap-widget-container ${className}`}\n onSubmit={handleSubmit}\n style={{\n background: container,\n fontFamily,\n width,\n height,\n }}\n >\n <div className=\"__ref-swap-widget-header __ref-swap-widget-row-flex-center\">\n <div\n style={{\n color: primary,\n }}\n className=\"__ref-swap-widget-header-title\"\n >\n Swap\n </div>\n\n <div\n className=\"__ref-swap-widget-header-button __ref-swap-widget-row-flex-center\"\n style={{\n position: 'relative',\n }}\n >\n <AccountButton\n onDisConnect={onDisConnect}\n AccountId={AccountId}\n />\n\n <Slider showSlip={showSlip} setShowSlip={setShowSlip} />\n\n <SlippageSelector\n slippageTolerance={slippageTolerance}\n onChangeSlippageTolerance={setSlippageTolerance}\n showSlip={showSlip}\n setShowSlip={setShowSlip}\n />\n </div>\n </div>\n\n <TokenAmount\n amount={amountIn}\n balance={tokenInBalance}\n token={tokenIn}\n price={!tokenIn ? null : tokenPriceList?.[tokenIn.id]?.price}\n onChangeAmount={setAmountIn}\n onSelectToken={() => {\n setWidgetRoute('token-selector-in');\n }}\n />\n\n <div\n className={`__ref-swap-widget-exchange-button __ref-swap-widget-row-flex-center `}\n style={{\n color: iconDefault,\n }}\n >\n <CgArrowsExchangeAltV\n style={{\n cursor: 'pointer',\n }}\n className={`__ref-swap-widget-exchange-button-icon ${\n isMobile()\n ? '__ref-swap-widget-active'\n : '__ref-swap-widget-hover'\n }`}\n size={30}\n onClick={() => {\n tokenOut && handleSetTokenIn(tokenOut);\n tokenIn && handleSetTokenOut(tokenIn);\n setAmountIn('1');\n setAmountOut('');\n }}\n />\n </div>\n\n <TokenAmount\n amount={toPrecision(amountOut, 8)}\n balance={tokenOutBalance}\n token={tokenOut}\n price={!tokenOut ? null : tokenPriceList?.[tokenOut.id]?.price}\n onSelectToken={() => {\n setWidgetRoute('token-selector-out');\n }}\n onForceUpdate={() => {\n setRreshTrigger(!refreshTrigger);\n }}\n poolFetchingState={poolFetchingState}\n />\n {!swapError && amountIn && amountOut && (\n <DetailView\n fee={fee}\n rate={rate}\n amountIn={amountIn}\n minReceived={minAmountOut}\n tokenIn={tokenIn}\n tokenOut={tokenOut}\n amountOut={amountOut}\n priceImpact={priceImpact}\n estimates={estimates}\n />\n )}\n\n {swapError && (\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: '#DE9450',\n fontSize: '14px',\n\n paddingTop: '16px',\n }}\n >\n <TiWarning fill=\"#DE9450\" size={20} />\n &nbsp;\n {swapError.message}\n </div>\n )}\n {isSignedIn ? (\n <button\n type=\"submit\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n style={{\n color: 'white',\n background: buttonBg,\n opacity: !canSubmit ? 0.5 : 1,\n cursor: !canSubmit ? 'not-allowed' : 'pointer',\n }}\n disabled={!canSubmit}\n >\n {'Swap'}\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n onClick={onConnect}\n style={{\n color: 'white',\n background: buttonBg,\n cursor: 'pointer',\n }}\n >\n {'Connect Wallet'}\n </button>\n )}\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'center',\n }}\n >\n <a\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: secondary,\n justifyContent: 'center',\n paddingTop: '12px',\n fontSize: '14px',\n display: 'inline-flex',\n }}\n href=\"https://ref.finance\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <RefIcon\n style={{\n color: refIcon || 'black',\n }}\n />\n &nbsp; Powered by Ref.finance\n </a>\n </div>\n\n <Notification\n state={transactionState?.state}\n setState={transactionState?.setState}\n open={notOpen}\n setOpen={setNotOpen}\n tx={transactionState?.tx}\n detail={transactionState?.detail}\n />\n </form>\n )}\n\n {widgetRoute === 'token-selector-in' && (\n <TokenSelector\n balances={balances}\n tokens={tokens}\n width={width}\n onSelect={token => {\n handleSetTokenIn(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n\n {widgetRoute === 'token-selector-out' && (\n <TokenSelector\n tokens={tokens}\n balances={balances}\n width={width}\n onSelect={token => {\n handleSetTokenOut(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n </TokenPriceContextProvider>\n </ThemeContextProvider>\n );\n};\n"],"names":["ONE_YOCTO_NEAR","ENV","getConfig","env","process","NEAR_ENV","REACT_APP_REF_SDK_ENV","networkId","nodeUrl","walletUrl","WRAP_NEAR_CONTRACT_ID","REF_FI_CONTRACT_ID","REF_TOKEN_ID","indexerUrl","explorerUrl","REF_DCL_SWAP_CONTRACT_ID","config","id","name","symbol","decimals","icon","NEAR_META_DATA","TokenLinks","NEAR","wNEAR","REF","OCT","PARAS","SKYWARD","FLX","PULSE","DBIO","MYRIA","PXT","HAPI","OIN","ABR","1MIL","MARMAJ","marmaj","USN","1INCH","GRT","LINK","Cheddar","AURORA","$META","UMINT","UTO","DEIP","WOO","LINEAR","PEM","ATO","SEAT","FAR","BSTN","BRRR","XNL","KSW","STNEAR","NearX","SD","DISC","switchEnv","REF_META_DATA","WNEAR_META_DATA","calc_d","amp","c_amounts","token_num","length","sum_amounts","_","sum","d_prev","d","i","d_prod","ann","Math","abs","calc_y","x_c_amount","current_c_amounts","index_x","index_y","s","c","b","y_prev","y","calc_swap","in_token_idx","in_c_amount","out_token_idx","old_c_amounts","trade_fee","dy","fee","amount","tradeFee","getSwappedAmount","tokenInId","tokenOutId","amountIn","stablePool","STABLE_LP_TOKEN_DECIMALS","total_fee","token_account_ids","findIndex","rates","map","r","toReadableNumber","toNonDivisibleNumber","scientificNotationToString","Big","times","toString","Number","DEFAULT_START_TOKEN_LIST_TESTNET","DEFAULT_START_TOKEN_LIST_MAINNET","defaultTheme","container","buttonBg","primary","secondary","borderRadius","fontFamily","hover","active","secondaryBg","borderColor","iconDefault","iconHover","defaultDarkModeTheme","refIcon","icons","4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near","wrap.near","wrap.testnet","6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near","berryclub.ek.near","dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near","1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near","514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near","a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near","2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near","7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near","a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near","50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near","4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near","6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near","6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near","c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near","c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near","9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near","0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near","c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near","0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near","111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near","f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near","de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near","a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near","token.cheddar.near","farm.berryclub.ek.near","d9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near","getTokenPriceList","_context","fetch","method","headers","Content-type","then","res","json","list","getTokens","reload","storagedTokens","window","localStorage","getItem","_context2","JSON","parse","tokens","Object","values","reduce","acc","cur","keys","REPLACE_TOKENS","includes","metaIconDefaults","setItem","stringify","getWhiteListTokensIndexer","whiteListIds","_context3","checkIntegerSumOfAllocations","allocations","totalInput","alloSum","item","round","a","plus","offset","minus","currMax","currMaxInd","gt","newAllocations","j","push","RM","DP","NE","PE","yenFromPy","bisqrt","value","BigInt","newtonIteration","n","x0","x1","getBetaForRoute","route","path","beta","reserves","p2","getEpsilonForRoute","p","gamma","div","epsilon","p1","gamma1","gamma2","getAlphaForRoute","inputToken","outputToken","key2","token2Id","val2","token2Supply","token1Id","token1Supply","alpha","key12","val12","key22","val22","middleToken","alpha1","alpha2","getAllocationForRoute","phi","toFixed","getNodeRoutesFromPathsAndPoolChains","paths","poolChains","multiplicity","mul","elem1","elem2","nodeRoutes","m","k","getPoolChainFromPaths","pools","threshold","pathInd","chain","pairs","pairInd","pair","tokenPools","getPoolsByToken1ANDToken2","newChains","newPath","legInd","culledPath","cullPoolsWithInsufficientLiquidity","getCulledPoolChains","getRoutesFromPoolChain","routes","pci","newRoutes","flatMap","e","flat","getOutputSingleHop","pool","num","denom","getOutputFromRoute","nodeRoute","allocation","eq","output","poolIndex","c1","a1","c2","b2","getOutputDoubleHop","getOptOutputVec","getOptimalAllocationForRoutes","allocationVec","getAllocationVectorForRoutes","alphaSum","radical","getAlphaSumFromRoutes","betaSum","getBetaSumFromRoutes","getPhiFromRoutes","every","lt","some","goodIndices","newNodeRoutes","goodIndex","allocationDict","allocationVecNew","zeroAllocation","reduceRoutes","sumAllocations","result","getBestOptInputAndOutput","rawDict","outputRaw","inputRaw","input","v","bv1","bv2","getBestOptimalAllocationsAndOutputs","maxPathLength","_context6","getPathsFromPools","outputs","inputOutput","getActionListFromRoutesAndAllocations","hops","hop","allRoutes","allNodeRoutes","totalInputAmount","allAllocations","middleTokenAllocation","getHopActionsFromRoutes","getSmartRouteSwapActions","allTokens","numberOfRoutesLimit","MAX_NUMBER_PARALLEL_POOLS","decimalsCulledPoolIds","_context9","filter","resDict","sortedIndexValues","argsort","topIndices","slice","reducedRoutes","reducedNodeRoutes","ind","currentBestOutput","bestAllocations","bestNodeRoutes","parallelNodeRoutes","parallelRoutes","bestRoutes","currentNodeRoute","bestRoutesAreParallel","filteredAllocationsAndOutputs","parallelOutputs","parallellAllocations","sortIndices","filteredParallelRoutes","filteredParallelNodeRoutes","parallelOutput","canHaveTwoRoutes","route1","route2","nodeRoute1","nodeRoute2","route1PoolIds","Set","route2PoolIds","sharePool","has","currentRoutes","currentNodeRoutes","filteredAllocations","totalOutput","allSortedIndices","sortedIndices","filteredRoutes","filteredNodeRoutes","index","sharedRoute","allFilteredRoutes","allFilteredNodeRoutes","firstRoutePoolIds","allFilteredRouteIds","secondRoute","stringAllo","actions","ftGetTokenMetadata","hopInputTokenMeta","hopOutputTokenDecimals","expectedHopOutput","decimalEstimate","pow","status","Promise","all","t","_context8","estimate","gamma_bps","partialAmountIn","supplies","token0_ref_price","token0_price","tokenIds","Dex","token","routeInputToken","routeOutputToken","overallPriceImpact","x","calculateSmartRouteV2PriceImpact","action","deltaY","inputTokenMeta","deltaX","R","P","totalAllocations","weights","_context12","_context11","weight","routeMarketPrice","num1","denom1","num2","denom2","priceImpact","arr","decor","sort","token1","token2","cullZeroLiquidityPools","filteredPools","thresh","normLiq","liquidities","poolInd","amounts","poolBigAmounts","liquidity","getLiqudityOfPoolsFromList","maxLiq","arrayOfBigs","maxElem","val","bigMax","getNormalizedLiquiditiesFromList","addEdge","g","edge","src","dst","deleteEdge","gNew","e1","e2","deleteNode","node","nodeInd","nodeNow","shortestPath","ignore_nodes","ignore_edges","gTemp","edgeInd","solution","graph","solutions","dist","parent","nearest","Infinity","ndist","adj","concat","dijkstra","unshift","PoolMode","PathBuffer","this","sortedpaths","len","cost","arrayContains","pop","shift","splice","indexOf","arrayEquals","Array","isArray","obj","obj_json","itemInd","source","target","listA","listB","prev_path","root","root_length","sol","spur","_context5","getKShortestPaths","gen","next","getGraphFromPoolList","poolList","edgeList","addEdges","stableSmart","_context15","getExpectedOutputFromActionsORIG","getSimplePoolEstimate","tokenIn","tokenOut","amount_with_fee","in_balance","out_balance","getStablePoolEstimate","getStablePoolDecimal","amount_swapped","amountOut","isNaN","toPrecision","dyOut","noFeeAmountOut","singlePoolSwap","simplePools","stablePools","NoPoolError","parsedAmountIn","estimatesSimplePool","isStablePool","stablePoolThisPair","sp","estimatesStablePool","find","maxSimplePoolEstimate","undefined","maxBy","maxStablePoolEstimate","getStablePoolsThisPair","getPoolsByTokens","getPoolEstimate","stablePoolDetail","getHybridStableSmart","stablePoolsDetail","isStablePoolToken","stablePoolsDetailById","pools1","pools2","pools1Right","pools2Right","candidatePools","otherStables","stablePoolsThisPair","otherStable","tmpPools","tobeAddedPools","middleTokens","_loop2","p2s","_loop","ftGetTokensMetadata","cp","tokensMedata","BestPoolPair","poolPair","stablePoolDetailThisPair","spd","tmpPool1","tmpPool2","tokenMidId","tokenMidMeta","estimate1","SMART","estimate2","bestPool","STABLE","pool1","pool2","estimateSwap","options","SameInputTokenError","ONLY_ZEROS","test","ZeroInputError","enableSmartRouting","_ref10","singleRouteEstimate","PARALLEL","inputPools","poolFormatter","simplePoolSmartRoutingEstimate","simplePoolSmartRoutingActions","hybridSmartRoutingEstimate","hybridSmartRoutingRes","gte","_singleRouteEstimate","_singleRouteEstimate$","_singleRouteEstimate2","_singleRouteEstimate3","parsePool","shareSupply","shares_total_supply","tvl","pool_kind","shares","tokenId","poolId","minAmountOut","isInteger","ceil","convertToPercentDecimal","percent","math","percentOf","percentLess","notation","getGas","gas","BN","number","substring","padStart","replace","split","padEnd","strParam","sysbol","negative","match","_strParam$match","basis","_strParam$match2","wholeStr","fractionStr","ifFraction","formatWithCommas","pattern","precision","withCommas","atLeastOne","whole","decimal","str","lastIndexOf","transformTransactions","transactions","AccountId","signerId","receiverId","functionCalls","fc","type","params","methodName","args","toNumber","deposit","utils","format","parseNearAmount","separateRoutes","curRoute","calculateExchangeRate","from","to","getAvgFee","estimates","forEach","getAccountName","account","network","niceAccountId","symbolsArr","multiply","factor1","factor2","toInternationalCurrencySystemLongString","labelValue","percentOfBigNumber","valueBig","percentBig","toRealSymbol","charAt","toUpperCase","calculateFeeCharge","total","calculateFeePercent","getExpectedOutputFromSwapTodos","calculateAmountReceived","big_in_balance","big_out_balance","constant_product","new_in_balance","new_out_balance","calculateMarketPrice","cur_in_balance","cur_out_balance","calculateSmartRoutingPriceImpact","tokenInAmount","swapTodos","tokenMid","stableOutPool2","isPool1StablePool","isPool2StablePool","marketPrice1","_swapTodos$0$pool$rat","_swapTodos$0$pool$rat2","marketPrice2","_swapTodos$1$pool$rat","_swapTodos$1$pool$rat2","generalMarketPrice","tokenMidReceived","formattedTokenMidReceived","stablePool2","stableOut","tokenOutReceived","newMarketPrice","PriceImpact","numerator","denominator","calcStableSwapPriceImpact","marketPrice","calculatePriceImpact","finalMarketPrice","separatedReceivedAmount","finalTokenOutReceived","calculateSmartRoutesV2PriceImpact","tokenInPara","rawRes","readablePartialAmountIn","_r$0$tokens","_r$0$tokens2","_r$0$tokens3","_r$0$pool$rates","_r$0$pool$rates2","pre","getPriceImpact","priceImpactValueSmartRouting","priceImpactValueSmartRoutingV2","_estimates$0$pool$rat","_estimates$0$pool$rat2","error","subtraction","initialValue","toBeSubtract","getPoolAllocationPercents","partialAmounts","ps","fill","sortedAmount","sortBy","minIndexes","minIndex","finalPIndex","isMobile","screen","width","divide","getMax","String","getPointByPrice","pointDelta","price","decimalRate","noNeedSlot","point","log","point_int","point_int_slot","floor","feeToPointDelta","NoFeeToPool","priceToPoint","tokenA","tokenB","amountA","amountB","DCL_POOL_FEE_LIST","decimal_price_A_by_B","registerAccountOnToken","registration_only","account_id","getKeyStore","keyStores","InMemoryKeyStore","BrowserLocalStorageKeyStore","provider","providers","JsonRpcProvider","url","getMemorySigner","keyPath","homedir","os","credentials","fs","readFileSync","credentialAccountId","NoCredential","AccountIdMisMatch","myKeyStore","setKey","KeyPair","fromString","private_key","signer","InMemorySigner","validateAccessKey","transaction","accessKey","permission","FunctionCall","method_names","receiver_id","parseFloat","getSignedTransactionsByMemoryKey","transactionsRef","block","finality","signedTransactions","getPublicKey","publicKey","NoPuiblicKeyError","query","request_type","public_key","InValidAccessKeyError","tx","nearTransactions","createTransaction","PublicKey","nonce","functionCall","serialize","base_decode","header","hash","signTransaction","sendTransactionsByMemoryKey","results","sendTransaction","HAPI_ID","WOO_ID","near","Near","keyStore","refFiViewFunction","viewFunction","ftViewFunction","ftGetStorageBalance","NoAccountIdFound","ftGetBalance","getAccountNearBalance","getTotalPools","tag","TokenNotExistError","metadata","getGlobalWhitelist","_context7","getUserRegisteredTokens","accountId","data","nearDepositTransaction","nearWithdrawTransaction","refDCLSwapViewFunction","_context10","nearConnection","DCLInValid","DCLSwapGetStorageBalance","getDCLPoolId","join","getDCLPool","pool_id","_pool_id$split","token_seq","formatError","msg","Error","unNamedError","NotLoginError","SwapRouteError","NoLocalSignerError","NoPoolOnThisPair","SlippageError","NoOrderFound","order_id","OrderNoRemainedAmount","instantSwap","slippageTolerance","registerToken","actionsList","allSwapsTokens","swapTokens","token_in","token_out","amount_in","min_amount_out","force","DEFAULT_PAGE_LIMIT","getRatedPoolDetail","pool_info","getUnRatedPoolDetail","getStablePools","getPool","_context4","getRefPools","page","perPage","from_index","limit","rawPool","fetchAllPools","min","pages","unRatedPools","ratedPools","ThemeContext","createContext","ThemeContextProvider","customTheme","children","useState","theme","setTheme","useEffect","React","Provider","TokenPriceContext","useTokenPriceList","tokenPriceList","setTokenPriceList","TokenPriceContextProvider","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","SmartRouteV2","tokensRaw","useContext","ParaTokenFrom","className","marginRight","Icon","alt","height","flexShrink","Hub","position","bottom","ArrowRight","_pools$","_pools$2","_pools$3","DetailView","rate","minReceived","storagedOpen","showDetail","setShowDetail","isRateReverse","setIsRateReverse","tokensPerRoute","swap","identicalRoutes","hub","percents","useMemo","priceImpactDisplay","textColor","displayValue","tokenInInfo","displayRate","revertRate","revertDisplayRate","color","cursor","onClick","removeItem","FiChevronUp","FiChevronDown","RiExchangeFill","size","marginLeft","border","flexDirection","alignItems","justifyContent","RouterIcon","whiteSpace","minWidth","key","HalfAndMaxAmount","max","onChangeAmount","halfValue","hoverHalf","setHoverHalf","hoverMax","setHoverMax","background","onMouseEnter","onMouseLeave","half","TokenAmount","props","balance","reloading","onSelectToken","onForceUpdate","poolFetchingState","useRef","hoverSelect","setHoverSelect","handleChange","current","setCustomValidity","_ref$current2","curMax","RiRefreshLine","onWheel","blur","step","placeholder","onChange","disabled","onKeyDown","preventDefault","marginBottom","textAlign","fontSize","SlippageSelector","onChangeSlippageTolerance","showSlip","setShowSlip","invalid","setInValid","onclick","stopPropagation","paddingBottom","defaultValue","required","padding","IoWarning","StarToken","onDelete","hoverIcon","setHoverIcon","setHoverClose","top","right","boxShadow","IoCloseOutline","stroke","Token","isSticky","onClickPin","setHoverIndex","hoverIndex","displayBalance","hoverOutLink","setHoverOutLink","hoverPin","setHoverPin","HiOutlineExternalLink","marginTop","open","AiFillPushpin","AiOutlinePushpin","TokenListTable","balances","starList","setStarList","currentSort","setCurrentSort","newList","borderBottom","TiArrowSortedUp","TiArrowSortedDown","b1","_tokenPriceList$token","TokenSelector","onSelect","onClose","searchValue","setSearchValue","storagedStartList","DEFAULT_START_TOKEN_LIST","newStarList","starToken","FiChevronLeft","FaSearch","evt","_tokenPriceList$token2","searchValueLower","toLowerCase","Slider","setHover","viewBox","xmlns","fillRule","clipRule","RefIcon","Loading","cx","cy","strokeWidth","strokeLinecap","Warning","y1","x2","y2","Success","left","gradientUnits","stopColor","Notification","state","detail","setOpen","setState","href","textDecoration","rel","fontWeight","AccountButton","onDisConnect","hoverAccount","setHoverAccount","DefaultTestnetTokenList","spec","reference","reference_hash","DefaultMainnetTokenList","DCLSwap","SwapByOutput","LimitOrderWithSwap","swapInfo","Swap","pool_ids","output_token","min_output_amount","output_amount","buy_token","new_point","quote","input_token","input_amount","list_user_assets","DCLSwapByInputOnBestPool","bestEstimate","bestFee","_bestEstimate$tag","_bestEstimate$tag$spl","_bestEstimate$tag2","_bestEstimate$tag2$sp","get_order","find_order","cancel_order","order","remain_amount","defaultTokenList","onSwap","connection","transactionState","onConnect","defaultTokenIn","defaultTokenOut","curTheme","darkMode","STORAGED_TOKEN_IN","STORAGED_TOKEN_OUT","isSignedIn","setTokenIn","handleSetTokenIn","handleSetTokenOut","setTokenOut","tokenInBalance","setTokenInBalance","tokenOutBalance","setTokenOutBalance","notOpen","setNotOpen","setTokens","setTokensLoading","widgetRoute","setWidgetRoute","setAmountIn","setSlippageTolerance","tokenLoading","setTokenLoading","whiteList","globalWhiteListTokens","parsedTokens","getTokensList","useTokensIndexer","fetchTokens","setBalances","validTokens","ids","balancesMap","useTokenBalnces","refreshTrigger","setRreshTrigger","allPools","setAllPools","setPoolFetchingState","allStablePools","setAllStablePools","useRefPools","defaultIn","defaultOut","wrapedId","available","setEstimates","canSwap","setCanSwap","swapError","setSwapError","setAmountOut","isEstimating","setIsEstimating","forceEstimate","setForceEstimate","makeSwap","outEstimate","bigEstimate","estimateValidationPass","_swapTodos$","_swapTodos","totalPartialAmountIn","estimateValidator","expectAmountOut","getEstimate","_params$tokenIn","_params$tokenOut","_params$tokenIn2","_params$tokenOut2","_params$options","useSwap","canSubmit","onSubmit","CgArrowsExchangeAltV","paddingTop","TiWarning","message","opacity","display","left_point","right_point","undecimal_price"],"mappings":"+9EAOaA,EAAiB,6BAC1BC,EAA0B,YACdC,EACdC,GAKA,gBALAA,IAAAA,EAA0BF,GACxBG,QAAQD,IAAIE,UACZD,QAAQD,IAAIG,uBAEdL,EAAME,EACEA,GACN,IAAK,UACH,MAAO,CACLI,UAAW,UACXC,QAAS,+BACTC,UAAW,0BACXC,sBAAuB,YACvBC,mBAAoB,sBACpBC,aAAc,4BACdC,WAAY,8BACZC,YAAa,gCACbC,yBAA0B,IAE9B,IAAK,UACH,MAAO,CACLR,UAAW,UACXC,QAAS,+BACTC,UAAW,kCACXI,WAAY,0CACZH,sBAAuB,eACvBC,mBAAoB,0BACpBC,aAAc,oBACdE,YAAa,gCACbC,yBAA0B,uBAE9B,QACE,MAAO,CACLR,UAAW,UACXC,QAAS,+BACTC,UAAW,0BACXE,mBAAoB,sBACpBD,sBAAuB,YACvBE,aAAc,4BACdC,WAAY,8BACZC,YAAa,wBACbC,yBAA0B,cAKdb,yBAEYc,SAAOL,2CAEJK,SAAON,qCAEhBM,SAAOJ,+BAEW,CAC1CK,GAAIP,wBACJQ,KAAM,QACNC,OAAQ,QACRC,SAAU,GACVC,KAAM,0EAGmB,CACzBD,SAAU,GACVC,KACE,igBACFJ,GAAIL,eACJM,KAAM,oBACNC,OAAQ,WAGGG,EAAgC,CAC3CL,GAAI,OACJC,KAAM,OACNC,OAAQ,OACRC,SAAU,GACVC,KACE,kqeAGSE,EAAa,CACxBC,KAAM,wCACNC,MAAO,wCACPC,IAAK,sCACLC,IAAK,0CACLC,MAAO,gCACPC,QAAS,0CACTC,IAAK,+BACLC,MAAO,gCACPC,KAAM,wCACNC,MAAO,wCACPC,IAAK,uCACLC,KAAM,+BACNC,IAAK,sCACLC,IAAK,oCACLC,OAAQ,uCACRC,OAAQ,4CACRC,OAAQ,4CACRC,IAAK,yCACLC,QAAS,wCACTC,IAAK,oCACLC,KAAM,oCACNC,QAAS,uCACTC,OAAQ,qCACRC,MAAO,oCACPC,MAAO,oCACPC,IAAK,kDACLC,KAAM,+BACNC,IAAK,kCACLC,OAAQ,0CACRC,IAAK,2CACLC,IAAK,0CACLC,KAAM,sCACNC,IAAK,sCACLC,KAAM,kCACNC,KAAM,iCACNC,IAAK,oCACLC,IAAK,6CACLC,OAAQ,oCACRC,MAAO,iCACPC,GAAI,iCACJC,KAAM,oCAQKC,EAAY,WAoBvB,OAnBAjD,SAASd,IACTS,qBAAqBK,SAAOL,mBAC5BD,wBAAwBM,SAAON,sBAC/BE,eAAeI,SAAOJ,aACtBsD,gBAAgB,CACd9C,SAAU,GACVC,KACE,igBACFJ,GAAIL,eACJM,KAAM,oBACNC,OAAQ,OAEVgD,kBAAkB,CAChBlD,GAAIP,wBACJQ,KAAM,QACNC,OAAQ,QACRC,SAAU,GACVC,KAAM,0DAED,CACLL,OAAAA,SACAL,mBAAAA,qBACAD,sBAAAA,wBACAE,aAAAA,eACAsD,cAAAA,gBACAC,gBAAAA,4qPCvJJ,IAIaC,EAAS,SAACC,EAAaC,GAKlC,IAJA,IAAMC,EAAYD,EAAUE,OACtBC,EAAcC,EAAEC,IAAIL,GACtBM,EAAS,EACTC,EAAIJ,EACCK,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAE5B,IADA,MAAIC,EAASF,MACQP,kBACnBS,EAAUA,EAASF,WAAiBN,GAEtCK,EAASC,EACT,IAAMG,EAAMX,WAAME,EAAaA,GAI/B,GADAM,EAFkBD,GAAUG,EAASR,EAAYS,EAAMP,IACnCG,GAAUI,EAAM,GAAKD,GAAUR,EAAY,IAE3DU,KAAKC,IAAIL,EAAID,IAAW,EAAG,MAEjC,OAAOC,GAGIM,EAAS,SACpBd,EACAe,EACAC,EACAC,EACAC,GAOA,IALA,IAAMhB,EAAYc,EAAkBb,OAC9BQ,EAAMX,WAAME,EAAaA,GACzBM,EAAIT,EAAOC,EAAKgB,GAClBG,EAAIJ,EACJK,EAAKZ,EAAIA,EAAKO,EACTN,EAAI,EAAGA,EAAIP,EAAWO,IACzBA,IAAMQ,GAAWR,IAAMS,IACzBC,GAAKH,EAAkBP,GACvBW,EAAKA,EAAIZ,EAAKQ,EAAkBP,IAGpCW,EAAKA,EAAIZ,GAAMG,WAAMT,EAAaA,IAIlC,IAHA,IAAMmB,EAAIb,EAAIG,EAAMQ,EAChBG,EAAS,EACTC,EAAIf,EACCC,EAAI,EAAGA,EAAI,MAClBa,EAASC,EAGTA,GAFoBX,SAAAW,EAAK,GAAIH,IACP,EAAIG,EAAIF,EAAIb,KAE9BI,KAAKC,IAAIU,EAAID,IAAW,IALLb,KAQzB,OAAOc,GAGIC,EAAY,SACvBxB,EACAyB,EACAC,EACAC,EACAC,EACAC,GAEA,IAAMN,EAAIT,EACRd,EACA0B,EAAcE,EAAcH,GAC5BG,EACAH,EACAE,GAEIG,EAAKF,EAAcD,GAAiBJ,EACpCQ,EAzES,SAACC,EAAgBH,GAChC,OAAQG,EAASH,EDZQ,ICoFbI,CAASH,EAAID,GAEzB,MAAO,CADgBC,EAAKC,EACJA,EAAKD,IAGlBI,EAAmB,SAC9BC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAMvC,EAAMsC,EAAWtC,IACjB6B,EAAYS,EAAWE,UAGvBf,EAAea,EAAWG,kBAAkBC,WAChD,SAAA9F,GAAE,OAAIA,IAAOuF,KAETR,EAAgBW,EAAWG,kBAAkBC,WACjD,SAAA9F,GAAE,OAAIA,IAAOwF,KAGTO,EAAQL,EAAWK,MAAMC,KAAI,SAAAC,GAAC,OAClCC,GAAiBP,EAA0BM,MAOvCjB,EAJqBU,EAAWrC,UAAU2C,KAAI,SAAAZ,GAAM,OACxDc,GAAiBP,EAA0BP,MAI1CY,KAAI,SAACZ,EAAQvB,GAAT,OACHsC,GACER,EACAS,GACE,IAAIC,EAAIjB,GAAU,GAAGkB,MAAM,IAAID,EAAIN,EAAMlC,KAAK0C,gBAInDP,KAAI,SAAAZ,GAAM,OAAIoB,OAAOpB,MAElBN,EAAc0B,OAClBL,GACER,EACAS,GACE,IAAIC,EAAIZ,GAAUa,MAAM,IAAID,EAAIN,EAAMlB,KAAgB0B,gBAK1B3B,EAChCxB,EACAyB,EACAC,EACAC,EACAC,EACAC,GANqBE,OAAKD,OAS5B,MAAO,MACYsB,OAAOT,EAAMhB,IAC9BI,EACAD,EAAKsB,OAAOT,EAAMhB,MCxIT0B,EAAmC,CAC9C,eACA,sBACA,qBACA,oBACA,eACA,qBAGWC,EAAmC,CAC9C,YACA,yBACA,+DACA,4BACA,MACA,SACA,eAmBWC,EAAsB,CACjCC,UAAW,UACXC,SAAU,UACVC,QAAS,UACTC,UAAW,UACXC,aAAc,MACdC,WAAY,aACZC,MAAO,2BACPC,OAAQ,2BACRC,YAAa,UACbC,YAAa,2BACbC,YAAa,yBACbC,UAAW,uBAGAC,EAA8B,CACzCZ,UAAW,UACXC,SAAU,UACVC,QAAS,UACTC,UAAW,UACXC,aAAc,MACdC,WAAY,aACZC,MAAO,2BACPC,OAAQ,2BACRC,YAAa,qBACbC,YAAa,2BACbC,YAAa,yBACbC,UAAW,yBACXE,QAAS,SC5ELC,EAAuC,CAC3CC,+DACE,mEACFC,YACE,ysEACFC,eACE,ysEACFC,+DACE,6CACFC,oBAAqB,+CACrBC,+DACE,4CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,6CACFC,+DACE,gDACFC,+DACE,8CACFC,+DACE,6CACFC,qBAAsB,gDACtBC,yBAA0B,iDAC1BC,+DACE,8CClDSC,aAAiB,kBAAG,aAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAC,SAClBC,MAAM3J,SAAOH,WAAa,oBAAqB,CAC1D+J,OAAQ,MACRC,QAAS,CAAEC,eAAgB,qCAE1BC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,UAChBF,MAAK,SAAAG,GACJ,OAAOA,KAPoB,OAAA,iCAAA,OAAA,UAAA,0BAAH,kBAAA,mCAWjBC,aAAS,kBAAG,WAAOC,GAAP,MAAA,6BAAA,OAAA,sBAAA,OAAA,KACjBC,EACc,oBAAXC,QAA2BF,EAE9B,KADAG,aAAaC,QFdnB,sCEWuBC,SAAA,MAAAA,KAOnBC,KAAKC,MAAMN,GAPQI,SAAA,MAAA,OAAA,OAAAA,SAQbd,MAAM3J,SAAOH,WAAa,cAAe,CAC7C+J,OAAQ,MACRC,QAAS,CAAEC,eAAgB,qCAE1BC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,UAChBF,MAAK,SAAAa,GAmBJ,OAlBkBC,OAAOC,OAAOF,GAAQG,QACtC,SAACC,EAAUC,EAAUnH,SACb7D,EAAK4K,OAAOK,KAAKN,GAAQ9G,GAC/B,YACKkH,UACF/K,QACIgL,GACHhL,GAAAA,EACAI,MACG4K,EAAI5K,MAAQ8K,GAAeC,SAASnL,GACjCoL,EAAiBpL,GACjBgL,EAAI5K,aAIhB,OAKH0J,MAAK,SAAAC,GAOJ,MANkB,oBAAXM,SACJF,GACDG,aAAae,QFhDvB,mCEkDYZ,KAAKa,UAAUvB,IAEZA,KAzCQ,OAAAS,YAAA,OAAA,+BAAA,OAAA,UAAA,0BAAH,mBAAA,mCA6CTe,aAAyB,kBAAG,WAAOC,GAAP,6BAAA,OAAA,sBAAA,OAAA,OAAAC,SAC1B/B,MAAM3J,SAAOH,WAAa,cAAe,CACpD+J,OAAQ,MACRC,QAAS,CAAEC,eAAgB,qCAE1BC,MAAK,SAAAC,GAAG,OAAIA,EAAIC,UAChBF,MAAK,SAAAC,GACJ,OAAOyB,EAAaV,QAAO,SAACC,EAAKC,EAAKnH,SACpC,OACGkG,EAAIiB,IACJJ,OAAOC,OAAOd,EAAIiB,KACgB,IAAnCJ,OAAOC,OAAOd,EAAIiB,IAAMzH,YAKrBwH,UACFC,QAAWjB,EAAIiB,IAAMhL,GAAIgL,QAJnBD,IAMR,OAEJjB,MAAK,SAAAC,GACJ,OAAOa,OAAOC,OAAOd,MAtBc,OAAA,iCAAA,OAAA,UAAA,0BAAH,mBAAA,4CCoMtB2B,EACdC,EACAC,GAEIA,EAAa,IAAIvF,EAAIuF,GAczB,IAdA,IAOIC,GANAF,EAGWA,EAAY3F,KAAI,SAAC8F,GAAD,OAC7B,IAAIzF,EAAIyF,GAAMC,YAGb/F,KAAI,SAAA8F,GAAI,OAAI,IAAIzF,EAAIyF,MACpBhB,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IACnC6F,EAASN,EAAWO,MAAMN,GAE1BO,EAAU,IAAI/F,EAAI,GAClBgG,EAAa,EACRxI,EAAI,EAAGA,EAAI8H,EAAYpI,OAAQM,IAClC8H,EAAY9H,GAAGyI,GAAGF,KACpBC,EAAaxI,EACbuI,EAAUT,EAAY9H,IAI1B,IADA,IAAI0I,EAAiB,GACZC,EAAI,EAAGA,EAAIb,EAAYpI,OAAQiJ,IAEpCD,EAAeE,KADbD,IAAMH,EACYV,EAAYa,GAAGP,KAAKC,GAAQ3F,WAE5BoF,EAAYa,GAAGjG,YAGvC,OAAOgG,EA5RTlG,EAAIqG,GAAK,EACTrG,EAAIsG,GAAK,GACTtG,EAAIuG,IAAM,GACVvG,EAAIwG,GAAK,kBC6lECC,IAplEV,SAASC,EAAOC,GAMd,GAAIA,EAAQC,OAAO,GACjB,KAAM,mDAGR,OAAID,EAAQC,OAAO,GACVD,EAGT,SAASE,EAAgBC,EAAGC,GAC1B,IAAMC,EAAMF,EAAIC,EAAKA,GAAOH,OAAO,GACnC,OAAIG,IAAOC,GAAMD,IAAOC,EAAKJ,OAAO,GAC3BG,EAEFF,EAAgBC,EAAGE,GAGrBH,CAAgBF,EAAOC,OAAO,IAGvC,SAASK,EAAgBC,EAAOC,GAI9B,GAHKD,EAAMhK,SACTgK,EAAQ,CAACA,IAES,GAAhBA,EAAMhK,OACR,IACIkK,EAAO,IAAIpH,EADPkH,EAAM,GACOG,SAASF,EAAK,UAC9B,GAAoB,GAAhBD,EAAMhK,OACf,CAAA,IACIoK,EAAKJ,EAAM,GACXE,EAAO,IAAIpH,EAFNkH,EAAM,GAEOG,SAASF,EAAK,KAAKlH,MACvC,IAAID,EAAIsH,EAAGD,SAASF,EAAK,MAG7B,OAAOC,EAGT,SAASG,GAAmBL,EAAOC,GAIjC,GAHKD,EAAMhK,SACTgK,EAAQ,CAACA,IAES,GAAhBA,EAAMhK,OAER,IAAIsK,EAAIN,EAAM,GACVO,EAAQ,IAAIzH,EAAI,KAAO8F,MAAM,IAAI9F,EAAIwH,EAAE1I,MAAM4I,IAAI,IAAI1H,EAAI,MACzD2H,EAAU3H,EAAIyH,QACb,GAAoB,GAAhBP,EAAMhK,OAEf,CAAA,IAAI0K,EAAKV,EAAM,GACXI,EAAKJ,EAAM,GACXW,EAAS,IAAI7H,EAAI,KAAO8F,MAAM,IAAI9F,EAAI4H,EAAG9I,MAAM4I,IAAI,IAAI1H,EAAI,MAC3D8H,EAAS,IAAI9H,EAAI,KAAO8F,MAAM,IAAI9F,EAAIsH,EAAGxI,MAAM4I,IAAI1H,EAAI,MACvD2H,EAAU,IAAI3H,EAAIsH,EAAGD,SAASF,EAAK,KACpClH,MAAM,IAAID,EAAI6H,IACdjC,KAAK,IAAI5F,EAAI4H,EAAGP,SAASF,EAAK,KAAKlH,MAAM4H,GAAQ5H,MAAM6H,IAE5D,OAAOH,EAGT,SAASI,GAAiBb,EAAOC,GAI/B,GAHKD,EAAMhK,SACTgK,EAAQ,CAACA,IAES,GAAhBA,EAAMhK,OAAa,CAAA,MAEjBsK,EAAIN,EAAM,GACVc,EAAab,EAAK,GAClBc,EAAcd,EAAK,GACnBM,EAAQ,IAAIzH,EAAI,KAAO8F,MAAM,IAAI9F,EAAIwH,EAAE1I,MAAM4I,IAAI,IAAI1H,EAAI,MAEzDkI,EAAOV,EAAEW,SAETC,EAAOZ,EAAEa,aACbb,EAAC,iBAJUA,EAAEc,UAEFd,EAAEe,eAEoBL,GAAOE,KACxC,IAAII,EAAQ,IAAIxI,EAAIwH,EAAEH,SAASW,IAAa/H,MAC1C,IAAID,EAAIwH,EAAEH,SAASY,IAAchI,MAAM,IAAID,EAAIyH,UAE5C,GAAoB,GAAhBP,EAAMhK,OAAa,CAAA,QAExB0K,EAAKV,EAAM,GACXI,EAAKJ,EAAM,GAEXuB,EAAQb,EAAGO,SAEXO,EAAQd,EAAGS,aACfT,EAAE,iBAJUA,EAAGU,UAEHV,EAAGW,eAEqBE,GAAQC,KAC5C,IACIC,EAAQrB,EAAGa,SAEXS,EAAQtB,EAAGe,aACff,EAAE,iBAJUA,EAAGgB,UAEHhB,EAAGiB,eAEqBI,GAAQC,KAC5C,IAAIZ,EAAab,EAAK,GAClB0B,EAAc1B,EAAK,GACnBc,EAAcd,EAAK,GACnBU,EAAS,IAAI7H,EAAI,KAAO8F,MAAM9F,EAAI4H,EAAG9I,MAAM4I,IAAI,IAAI1H,EAAI,MACvD8H,EAAS,IAAI9H,EAAI,KAAO8F,MAAM,IAAI9F,EAAIsH,EAAGxI,MAAM4I,IAAI,IAAI1H,EAAI,MAC3D8I,EAAS,IAAI9I,EAAI4H,EAAGP,SAASW,IAC9B/H,MAAM,IAAID,EAAI4H,EAAGP,SAASwB,KAC1B5I,MAAM4H,GACLkB,EAAS,IAAI/I,EAAIsH,EAAGD,SAASwB,IAC9B5I,MAAM,IAAID,EAAIsH,EAAGD,SAASY,KAC1BhI,MAAM6H,GACLU,EAAQM,EAAO7I,MAAM8I,GAE3B,OAAOP,EAyCT,SAASQ,GAAsBC,EAAK/B,EAAOC,GACzC,IAAIqB,EAAQT,GAAiBb,EAAOC,GAChCC,EAAOH,EAAgBC,EAAOC,GAC9BQ,EAAUJ,GAAmBL,EAAOC,GAQxC,OALiB,IAAInH,EAAIiJ,GACtBrL,MACAqC,MAAM,IAAID,EAAI0G,EAAOE,OAAO,IAAI5G,EAAIwI,GAAO9C,QAAQwD,cACnDpD,MAAMsB,GACNM,IAAIC,GA2ET,SAASwB,GAAoCC,EAAOC,GAClD,IAAIC,EAAe,GACnB,IAAK,IAAI9L,KAAK6L,EAAY,CACxB,IACIE,EADKF,EAAW7L,GAEjBmC,KAAI,SAAA8F,GAAI,OAAIA,EAAKvI,UACjBuH,QAAO,SAAC+E,EAAOC,GAAR,OAAkBD,EAAQC,IAAO,GAC3CH,EAAalD,KAAKmD,GAEpB,IAAIG,EAAa,GACjB,IAAK,IAAIvD,KAAKiD,EAGZ,IAFA,IAAIjC,EAAOiC,EAAMjD,GACbwD,EAAIL,EAAanD,GACZyD,EAAI,EAAGA,EAAID,EAAGC,IACrBF,EAAWtD,KAAKe,GAGpB,OAAOuC,EAGT,SAASG,GAAsBT,EAAOU,EAAOC,YAAAA,IAAAA,EAAY,MACvD,IAAIV,EAAa,GACjB,IAAK,IAAIW,KAAWZ,EAAO,CAIzB,IAHA,IAAIjC,EAAOiC,EAAMY,GACbC,EAAQ,GACRC,EAAQ,GACH1M,EAAI,EAAGA,EAAI2J,EAAKjK,OAAS,EAAGM,IACnC0M,EAAM9D,KAAK,CAACe,EAAK3J,GAAI2J,EAAK3J,EAAI,KAEhC,IAAK,IAAI2M,KAAWD,EAAO,CACzB,IAAIE,EAAOF,EAAMC,GAEbE,EAAaC,GAA0BR,EAAOM,EAAK,GAAIA,EAAK,IAChEH,EAAM7D,KAAKiE,GAEbhB,EAAWjD,KAAK6D,GAKlB,OAGF,SAA6BZ,EAAYU,YAAAA,IAAAA,EAAY,MACnD,IAAIQ,EAAY,GAChB,IAAK,IAAIP,KAAWX,EAAY,CAC9B,IAAIlC,EAAOkC,EAAWW,GAClBQ,EAAU,GACd,IAAK,IAAIC,KAAUtD,EAAM,CACvB,IACIuD,EAAaC,GADPxD,EAAKsD,GAC0CV,GACzDS,EAAQpE,KAAKsE,GAEfH,EAAUnE,KAAKoE,GAEjB,OAAOD,EAjBgBK,CAAoBvB,EAAYU,GAoBzD,SAASc,GAAuBxB,GAC9B,IAAIyB,EAAS,GACb,IAAK,IAAIC,KAAO1B,EAAY,CAC1B,IAEI2B,EAFY3B,EAAW0B,GA4mDdtG,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEsF,SAAQ,SAAA1N,GAAC,OAAIa,EAAEuB,KAAI,SAAAuL,GAAC,MAAI,CAAC3N,EAAG2N,GAAGC,gBAzmD/DL,EAAO1E,WAAP0E,EAAeE,GAEjB,IAAK,IAAIxN,KAAKsN,EACPA,EAAOtN,GAAGN,SACb4N,EAAOtN,GAAK,CAACsN,EAAOtN,KAGxB,OAAOsN,EAGT,SAASM,GAAmBC,EAAMrD,EAAYC,EAAa1C,GAGzD,GAFIA,EAAa,IAAIvF,EAAIuF,GAErByC,IAAeqD,EAAK/C,UAAYL,IAAgBoD,EAAKlD,SAAU,MAE7Dd,UACDW,GAAa,IAAIhI,EAAIqL,EAAK9C,gBAC1BN,GAAc,IAAIjI,EAAIqL,EAAKhD,qBAEzB,CAAA,GAAIL,IAAeqD,EAAKlD,UAAYF,IAAgBoD,EAAK/C,SAO9D,OAAO,IAAItI,EAAI,GAPyD,aAGrEiI,GAAc,IAAIjI,EAAIqL,EAAK9C,gBAC3BP,GAAa,IAAIhI,EAAIqL,EAAKhD,cAFzBhB,IAON,IAAII,EAAQ,IAAIzH,EAAI,KAAO8F,MAAM,IAAI9F,EAAIqL,EAAKvM,MAAM4I,IAAI,IAAI1H,EAAI,MAI5DsL,EAAM/F,EAAWtF,MAAMwH,GAAOxH,MAAMoH,EAASY,IAC7CsD,EAAQlE,EAASW,GAAYpC,KAAK6B,EAAMxH,MAAMsF,IAClD,OAAO+F,EAAI5D,IAAI6D,GAmEjB,SAASC,GAAmBtE,EAAOuE,EAAWC,GAC5C,GAAI,IAAI1L,EAAI0L,GAAYC,GAAG,IAAI3L,EAAI,IACjC,OAAO,IAAIA,EAAI,GAOjB,GALM0L,EAAa,IAAI1L,EAAI0L,GAEtBxE,EAAMhK,SACTgK,EAAQ,CAACA,IAES,GAAhBA,EAAMhK,OAER,IAGI0O,EAASR,GADFlE,EAAM,GAFAuE,EAAU,GACTA,EAAU,GAEmCC,QACtC,GAAhBxE,EAAMhK,SAMX0O,EArFR,SACE9B,EACA9B,EACAa,EACAZ,EACA1C,GAGA,IAAK,IAAIsG,KADLtG,EAAa,IAAIvF,EAAIuF,GACHuE,EAAO,CAC3B,IAAItC,EAAIsC,EAAM+B,GACdrE,EAAC,MAAY,IAAIxH,EAAI,KAAO8F,MAAM,IAAI9F,EAAIwH,EAAE1I,MAAM4I,IAAI,IAAI1H,EAAI,MAEhE,QAAI4H,EAAKkC,EAAM,GACXxC,EAAKwC,EAAM,GAEf,GAAI9B,IAAeJ,EAAGU,UAAYO,IAAgBjB,EAAGO,SAEnDP,EAAE,iBACCI,GAAa,IAAIhI,EAAI4H,EAAGW,gBACxBM,GAAc,IAAI7I,EAAI4H,EAAGS,sBAEvB,GAAIQ,IAAgBjB,EAAGU,UAAYN,IAAeJ,EAAGO,SAAU,CAAA,MAEpEP,EAAE,iBACCiB,GAAc,IAAI7I,EAAI4H,EAAGW,gBACzBP,GAAa,IAAIhI,EAAI4H,EAAGS,iBAI7B,GAAIQ,IAAgBvB,EAAGgB,UAAYL,IAAgBX,EAAGa,SAEpDb,EAAE,iBACCuB,GAAc,IAAI7I,EAAIsH,EAAGiB,gBACzBN,GAAc,IAAIjI,EAAIsH,EAAGe,sBAEvB,GAAIJ,IAAgBX,EAAGgB,UAAYO,IAAgBvB,EAAGa,SAAU,CAAA,MAErEb,EAAE,iBACCW,GAAc,IAAIjI,EAAIsH,EAAGiB,gBACzBM,GAAc,IAAI7I,EAAIsH,EAAGe,iBAI9B,IAAIyD,EAAK,IAAI9L,EAAI4H,EAAGP,SAASwB,IACzBkD,EAAK,IAAI/L,EAAI4H,EAAGP,SAASW,IACzBgE,EAAK,IAAIhM,EAAIsH,EAAGD,SAASwB,IACzBoD,EAAK,IAAIjM,EAAIsH,EAAGD,SAASY,IACzBJ,EAASD,EAAGH,MACZK,EAASR,EAAGG,MACZ6D,EAAM/F,EACPtF,MAAM6L,GACN7L,MAAMgM,GACNhM,MAAM4H,GACN5H,MAAM6H,GACLyD,EAAQS,EACT/L,MAAM8L,GACNnG,KACCL,EAAWtF,MAAM+L,EAAG/L,MAAM4H,GAAQjC,KAAKkG,EAAG7L,MAAM4H,GAAQ5H,MAAM6H,MAIlE,OAAOwD,EAAI5D,IAAI6D,GAwBAW,CADDhF,EAHKuE,EAAU,GACTA,EAAU,GACVA,EAAU,GAO1BC,IAGJ,OAAOE,EAGT,SAASO,GAAgBrB,EAAQpB,EAAYnE,GAC3C,IAAID,EArQN,SAAS8G,EAA8BtB,EAAQpB,EAAYnE,GAGzD,IAIID,EAfN,SAAsC2D,EAAK6B,EAAQpB,GACjD,IAAI2C,EAAgB,GACpB,IAAK,IAAI7O,KAAKsN,EACZuB,EAAcjG,KAAK4C,GAAsBC,EAAK6B,EAAOtN,GAAIkM,EAAWlM,KAEtE,OAAO6O,EAUWC,CApCpB,SAA0BxB,EAAQpB,EAAYnE,GAC5C,IAAIgH,EAhCN,SAA+BzB,EAAQpB,GACrC,IAAI6C,EAAW,IAAIvM,EAAI,GACvB,IAAK,IAAIxC,KAAKsN,EAAQ,CACpB,IAAI5D,EAAQ4D,EAAOtN,GACfiO,EAAY/B,EAAWlM,GACvBgL,EAAQT,GAAiBb,EAAOuE,GAKhCe,EAAU,IAAIxM,EAAI0G,EAAOE,OAAO,IAAI5G,EAAIwI,GAAO9C,QAAQwD,aAEvDvB,EAAUJ,GAAmBL,EAAOuE,GACpCF,EAAQ,IAAIvL,EAAI2H,GACpB4E,EAAWA,EAAS3G,KAAK4G,EAAQ9E,IAAI6D,IAEvC,OAAOgB,EAgBQE,CAAsB3B,EAAQpB,GACzCgD,EAdN,SAA8B5B,EAAQpB,GACpC,IAAIgD,EAAU,IAAI1M,EAAI,GACtB,IAAK,IAAIxC,KAAKsN,EAAQ,CACpB,IAAI5D,EAAQ4D,EAAOtN,GACfiO,EAAY/B,EAAWlM,GACvB8N,EAAM,IAAItL,EAAIiH,EAAgBC,EAAOuE,IACrCF,EAAQ,IAAIvL,EAAIuH,GAAmBL,EAAOuE,IAC9CiB,EAAUA,EAAQ9G,KAAK0F,EAAI5D,IAAI6D,IAEjC,OAAOmB,EAKOC,CAAqB7B,EAAQpB,GAE3C,OADU,IAAI1J,EAAIuF,GAAYK,KAAK8G,GAAShF,IAAI6E,GA8BtCK,CAAiB9B,EAAQpB,EAD/BnE,EAAa,IAAIvF,EAAIuF,IAI2BuF,EAAQpB,GACxDpE,EAAYuH,OAAM,SAAApH,GAAI,OAAIA,EAAKqH,GAAG,IAAI9M,EAAI,SAC5CsF,EAAcA,EAAY3F,KAAI,SAAA8F,GAAI,OAAIA,EAAKxF,MAAM,IAAID,GAAK,QAExDsF,EAAYyH,MAAK,SAAAtH,GAAI,OAAIA,EAAKqH,GAAG,IAAI9M,EAAI,SAC3CsF,EASJ,SAAsBwF,EAAQpB,EAAY2C,EAAe9G,GAEnDA,EAAa,IAAIvF,EAAIuF,GAAzB,IACIyH,EAAc,GAClB,IAAK,IAAIxP,KAAK6O,EACHA,EAAc7O,GAGhByI,GAAG,IAAIjG,EAAI,KAChBgN,EAAY5G,KAAK5I,GAKrB,IAAIwN,EAAY,GACZiC,EAAgB,GACpB,IAAK,IAAIzP,KAAKwP,EAAa,CACzB,IAAIE,EAAYF,EAAYxP,GAC5BwN,EAAU5E,KAAK0E,EAAOoC,IACtBD,EAAc7G,KAAKsD,EAAWwD,IAEhCb,EAAgBD,EACdpB,EACAiC,EACA1H,GAEF,IAAI4H,EAAiB,GACrB,IAAK,IAAI3P,KAAKwP,EACZG,EAAeH,EAAYxP,IAAM6O,EAAc7O,GAEjD,IAAI4P,EAAmB,GACvB,IAAK,IAAI5P,KAAKsN,EACZ,GAAIkC,EAAYlI,SAAStH,GACvB4P,EAAiBhH,KAAK+G,EAAe3P,QAChC,CACL,IAAI6P,EAAiB,IAAIrN,EAAI,GAC7BoN,EAAiBhH,KAAKiH,GAG1B,OAAOD,EAhDSE,CAAaxC,EAAQpB,EAAYpE,EAAaC,IAE9D,IAAIgI,EAAiBjI,EAAYb,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IAIrE,OAH4BsF,EAAY3F,KAAI,SAAAgG,GAAC,OAC3CA,EAAE+B,IAAI6F,GAAgBtN,MAAM,IAAID,EAAIuF,OAqPpB6G,CAChBtB,EACApB,EACAnE,GAEEiI,EAAS,GACb,IAAK,IAAIhQ,KAAKsN,EAAQ,CACpB,IAGIc,EAASJ,GAHDV,EAAOtN,GACHkM,EAAWlM,GACV8H,EAAY9H,IAE7BgQ,EAAOpH,KAAKwF,GAEd,MAAO,CACL4B,OAAQA,EACRlI,YAAaA,GAkCjB,SAASmI,GAAyB3C,EAAQpB,EAAYnE,GAKpD,IAAImI,EAAUvB,GAAgBrB,EAAQpB,EAAYnE,GAC9CoI,EAAYD,EAAQF,OACpBI,EAAWF,EAAQpI,YASvB,OARAsI,EAAWvI,EAA6BuI,EAAUrI,GACvC,IAAIvF,EAAI,GACR,IAAIA,EAAI,GAMZ,CACL6N,MAAOD,EACPhC,OANQ+B,EACPhO,KAAI,SAAAmO,GAAC,OAAI,IAAI9N,EAAI8N,MACjBrJ,QAAO,SAACsJ,EAAKC,GAAN,OAAcD,EAAInI,KAAKoI,KAAM,IAAIhO,EAAI,cAkJlCiO,oFAAf,WACEnE,EACA9B,EACAC,EACA1C,EACA2I,EACAnE,GANF,6BAAA,OAAA,sBAAA,OAAA,gBAKEmE,IAAAA,EAAgB,YAChBnE,IAAAA,EAAY,mCANd,gCAAA,cAAA,6BAAA,OAAA,sBAAA,OAAA,OAQMxE,EAAa,IAAIvF,EAAIuF,GAR3B4I,SASoBC,GAChBtE,EACA9B,EACAC,EACAiG,GAbJ,OAAA,IASM9E,UAMOlM,QAfbiR,SAAA,MAAA,yBAgBW,CACL7I,YAAa,GACb+I,QAAS,IAAIrO,EAAI,GACjB8K,OAAQ,GACRpB,WAAY,KApBlB,OAAA,OAAAyE,SAuByBtE,GAAsBT,EAAOU,EAAOC,GAvB7D,OAAA,OAuBMV,SAvBN8E,UAyBqBtD,GAAuBxB,GAzB5C,QAAA,OAyBMyB,SAzBNqD,UA0ByBhF,GAAoCC,EAAOC,GA1BpE,QAAA,OA0BMK,SA1BNyE,UA+B0BV,GACtB3C,EACApB,EACAnE,GAlCJ,QAAA,yBAuCS,CACLD,aATEgJ,UAK0BT,MAK5BQ,QAJYC,EAAY1C,OAKxBd,OAAQA,EACRpB,WAAYA,IA3ChB,QAAA,UAAA,0BAAA,mBAAA,uCAAA,OAAA,UAAA,iDA6RA,SAAS6E,GACPzD,EACApB,EACApE,GAGA,OA5FF,SAAiCwF,EAAQpB,EAAYpE,GAQnD,IAAIC,EAAaD,EACd3F,KAAI,SAAAgG,GAAC,OAAI,IAAI3F,EAAI2F,MACjBlB,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IACpCE,WACCsO,EAAO,GACX,IAAK,IAAIhR,KAAKsN,EAAQ,CACpB,IAAI5D,EAAQ4D,EAAOtN,GACfiO,EAAY/B,EAAWlM,GACvBkO,EAAapG,EAAY9H,GAC7B,IAAI,IAAIwC,EAAI0L,GAAYC,GAAG,IAAI3L,EAAI,MAG9BkH,EAAMhK,SACTgK,EAAQ,CAACA,IAENA,EAAM,IAGX,IAAK,IAAIf,KAAKe,EAAO,CACnB,IAAImE,EAAOnE,EAAMf,GAKjB,GAAS,GAALA,EAAQ,CAIV,IAAIsI,EAAM,CACRpD,KAAMA,EACNK,WAAYA,EAAWxL,WACvB8H,WAAYyD,EAAU,GACtBxD,YAAawD,EAAU,GACvBA,UAAWA,EACXvE,MAAOA,EACPwH,UAAW5D,EACX6D,cAAejF,EACfkF,iBAAkBrJ,EAClBsJ,eAAgBvJ,GAKlB,GADAkJ,EAAKpI,KAAKqI,GACNhD,EAAUvO,OAAS,EACrB,IAAI4R,EAAwB1D,GAC1BC,EACAI,EAAU,GACVA,EAAU,GACVC,QAKA+C,EAAM,CACRpD,KAAMA,EACNK,WAAYoD,EAAsB5O,WAClC8H,WAAYyD,EAAU,GACtBxD,YAAawD,EAAU,GACvBA,UAAWA,EACXvE,MAAOA,EACPwH,UAAW5D,EACX6D,cAAejF,EACfkF,iBAAkBrJ,EAClBsJ,eAAgBvJ,GAIlBkJ,EAAKpI,KAAKqI,IAMhB,OAAOD,EAWAO,CAAwBjE,EAAQpB,EAAYpE,YAuW/B0J,wBAAtB,oEAAO,WACLlF,EACA9B,EACAC,EACA1C,EACA0J,EACAf,EACAnE,EACAmF,EACAC,EACAC,GAVK,6BAAA,OAAA,sBAAA,OAAA,gBAMLlB,IAAAA,EAAgB,YAChBnE,IAAAA,EAAY,eACZmF,IAAAA,EAAsB,YACtBC,IAAAA,EAA4B,YAC5BC,IAAAA,EAAwB,iCAVnB,+NAAA,6BAAA,OAAA,sBAAA,OAAA,GAYA7J,GAZA8J,SAAA,MAAA,yBAaI,IAbJ,OAAA,OAeD9J,EAAa,IAAIvF,EAAIuF,GAGzBuE,EAAQA,EAAMwF,QAAO,SAAA9H,GAAC,OAAK4H,EAAsBtK,SAAS0C,EAAE7N,OAlBvD0V,SAoBepB,GAClBnE,EACA9B,EACAC,EACA1C,EACA2I,EACAnE,GA1BG,OAuCL,IAPIe,GAZAyE,UAYiBzE,OACjBpB,EAAa6F,EAAQ7F,WAErB8F,EAAoBC,GANpBnK,EAAciK,EAAQjK,aAOtBoK,EAAaF,EAAkBG,MAAM,EAAG,IACxCC,EAAgB,GAChBC,EAAoB,OACRH,kBACdE,EAAcxJ,KAAK0E,EADZgF,YAEPD,EAAkBzJ,KAAKsD,EAAWoG,IAcpC,IAAShJ,KAZTgE,EAAS8E,EACTlG,EAAamG,EAGTE,EAAoB,IAAI/P,EAAI,GAE5BgQ,EAAkBT,EAAQjK,YAC1B2K,EAAiBV,EAAQ7F,WAGzBwG,EAAqB,GACrBC,EAAiB,GAHjBC,EAAab,EAAQzE,OAMQ,IAD3BuF,EAAmBJ,EAAenJ,IACjB5J,SACnBgT,EAAmB9J,KAAKiK,GACxBF,EAAe/J,KAAKgK,EAAWtJ,KAKnC,GADIwJ,GAAwB,EACxBJ,EAAmBhT,OAAS,EAAG,CAWjC,GARIqT,EAAgCpE,GAClCgE,EACAD,EACA3K,GAGEiL,EAAkBD,EAA8B/C,QADhDiD,EAAuBF,EAA8BjL,aAGhCpI,OAASiS,EAA2B,CAO3D,IAAS3R,KAHTkT,GAFIA,EAAcjB,GAAQgB,IAEAd,MAAM,EAAGR,GAC/BwB,EAAyB,GACzBC,EAA6B,GACnBF,EACZC,EAAuBvK,KAAK+J,EAAeO,EAAYlT,KACvDoT,EAA2BxK,KAAK8J,EAAmBQ,EAAYlT,KAEjE+S,EAAgCpE,GAC9BwE,EACAC,EACArL,GAEFkL,EAAuBF,EAA8BjL,YACrDkL,EAAkBD,EAA8B/C,OAG9CqD,EAAiBL,EAAgB/L,QACnC,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KACjB,IAAI4B,EAAI,IAEN,IAAIA,EAAI6Q,GAAgB5K,GAAG8J,KAC7BC,EAAkBS,EAClBV,EAAoBc,EAKpBT,EAAaD,EACbF,EAAiBC,EACjBI,GAAwB,GAGxBQ,GAAmB,EA/GlBzB,cAmHSvE,GAnHT,QAAA,uBAAAuE,UAAA,MAmHI7R,aAnHJ6R,cAoHWvE,GApHX,QAAA,uBAAAuE,UAAA,MAAA,MAoHMlJ,cACC3I,IArHP6R,UAAA,MA8HC,IARI0B,EAASjG,EAAOtN,GAChBwT,EAASlG,EAAO3E,GAChB8K,EAAavH,EAAWlM,GACxB0T,EAAaxH,EAAWvD,GAExBgL,EAAgB,IAAIC,IAAIL,EAAOpR,KAAI,SAAAC,GAAC,OAAIA,EAAEjG,OAC1C0X,EAAgB,IAAID,IAAIJ,EAAOrR,KAAI,SAAAC,GAAC,OAAIA,EAAEjG,OAC1C2X,GAAY,MACSH,mBACnBE,EAAcE,gBAChBD,GAAY,GAhIjB,IAmIKA,GAnILjC,UAAA,MAAA,+BAAA,QAwIGyB,GAAmB,EAIfP,GAAgCpE,GAHhCqF,GAAgB,CAACT,EAAQC,GACzBS,GAAoB,CAACR,EAAYC,GAKnC3L,GAGEmM,GAAsBnB,GAA8BjL,YAKpDqM,GAJkBpB,GAA8B/C,OAIlB/I,QAChC,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KACjB,IAAI4B,EAAI,IAEN,IAAIA,EAAI2R,IAAa1L,GAAG8J,KAC1BC,EAAkB0B,GAClB3B,EAAoB4B,GAEpBvB,EAAaoB,GACbvB,EAAiBwB,GACjBnB,GAAwB,GAjK7B,QAAAjB,UAAA,MAAA,QAAAA,UAAA,MAAA,QAkLL,IAAKyB,EAEH,IAAStT,KAAKsN,EAIRyF,GAAgCpE,GAHhCqF,GAAgB,CAAC1G,EAAOtN,IACxBiU,GAAoB,CAAC/H,EAAWlM,IAKlC+H,GAGEmM,GAAsBnB,GAA8BjL,YAKpDqM,GAJkBpB,GAA8B/C,OAIlB/I,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IAClE,IAAIA,EAAI2R,IAAa1L,GAAG8J,KAC1BC,EAAkB0B,GAClB3B,EAAoB4B,GAEpBvB,EAAaoB,GACbvB,EAAiBwB,GACjBnB,GAAwB,GA1MzB,GAkNLhL,EAAc0K,EAIdtG,EAAauG,KADbnF,EAASsF,GAGElT,OAAS,IAxNfmS,UAAA,MAAA,yBAyNI,IAzNJ,QA4OL,IAAS7R,KAVLoU,GAAmBnC,GAAQnK,EAAY3F,KAAI,SAAAgG,GAAC,OAAI,IAAI3F,EAAI2F,OACxD2K,IACFpB,EAAsB,GAEpB2C,GAAgBD,GAAiBjC,MAAM,EAAGT,GAI1C4C,GAAiB,GACjBC,GAAqB,GACXF,GAEZC,GAAe1L,KAAK0E,EADhBkH,GAAQH,GAAcrU,KAE1BuU,GAAmB3L,KAAKsD,EAAWsI,KAKrC,IAASxU,KAAKsU,GACPA,GAAetU,GAAGN,SACrB4U,GAAetU,GAAK,CAACsU,GAAetU,KAtPnC,GA8PD2T,GAAgBW,GAAe,GAAGnS,KAAI,SAAA0L,GAAI,OAAIA,EAAK1R,QAGnDmY,GAAe5U,OAAS,IAjQvBmS,UAAA,MAkQCgC,GAAgBS,GAAe,GAAGnS,KAAI,SAAA0L,GAAI,OAAIA,EAAK1R,MAGnDsY,IAAc,EArQf5C,cAsQWgC,IAtQX,QAAA,uBAAAhC,UAAA,MAAA,IAuQG8B,GAAcrM,SAASuM,GADpB7T,gBAtQN6R,UAAA,MAAA,OA4QC4C,IAAc,uBA5Qf,QAAA5C,UAAA,MAAA,QAAA,IA6RD4C,IA7RC5C,WAAA,MAgSH,IAAS7R,KAFL0U,GAAoB,GACpBC,GAAwB,GACdP,GACZM,GAAkB9L,KAAK0E,EAAO8G,GAAiBpU,KAC/C2U,GAAsB/L,KAAKsD,EAAWkI,GAAiBpU,KAMzD,IAASA,KADL4U,GAHaF,GAAkB,GAGAvS,KAAI,SAAA0L,GAAI,OAAIA,EAAK1R,MACtCuY,GACPA,GAAkB1U,GAAGN,SACxBgV,GAAkB1U,GAAK,CAAC0U,GAAkB1U,KAK1C6U,GAAsBH,GAAkBvS,KAAI,SAAAuH,GAAK,OACnDA,EAAMvH,KAAI,SAAA0L,GAAI,OAAIA,EAAK1R,SAhTtB0V,cAoTWgD,IApTX,QAAA,uBAAAhD,WAAA,MAoTM7R,aApTN6R,cAwTagD,GAAoB7U,IAxTjC,QAAA,uBAAA6R,WAAA,MAAA,IA4TK+C,GAAkBtN,SAASuN,GAAoB7U,GAJ5C2I,gBAxTRkJ,WAAA,MAAA,6BAAA,SAAA,OAgUKiD,GAAcJ,GAAkB1U,IACnBN,SACfoV,GAAc,CAACA,KAEjBR,GAAiB,CAACI,GAAkB,GAAII,IACxCP,GAAqB,CACnBI,GAAsB,GACtBA,GAAsB3U,0BAvUzB,SAAA6R,UAAA,MAAA,SAwVDkB,GAAgCpE,GAClC2F,GACAC,GACAxM,GAMFmM,GAAsBrM,EAHlBqM,GAAsBnB,GAA8BjL,YAKtDC,GACA5F,KAAI,SAAA4S,GAAU,OAAI,IAAIvS,EAAIuS,MAExB/D,GAAOD,GACTuD,GACAC,GACAL,IAGEc,GAAU,GA5WTnD,eAgXSb,IAhXT,SAAA,yBAAAa,WAAA,MAAA,IAiXqBJ,EAAUT,GAD3BhR,eACmCwK,aAjXvCqH,WAAA,MAAAA,MAkXCJ,EAAUT,GAAKhR,GAAGwK,YAlXnBqH,WAAA,MAAA,SAAA,OAAAA,WAmXOoD,GAAmBjE,GAAKhR,GAAGwK,WAAY,eAnX9C,SAAAqH,aAAA,SAAA,GAiXCqD,UAIqBzD,EAAUT,GAAKhR,GAAGyK,cArXxCoH,WAAA,MAAAA,MAsXCJ,EAAUT,GAAKhR,GAAGyK,aAtXnBoH,WAAA,MAAA,SAAA,OAAAA,WAuXOoD,GAAmBjE,GAAKhR,GAAGyK,YAAa,YAvX/C,SAAAoH,aAAA,SAAA,GAwXCsD,SAA4C7Y,SAE5C8Y,GAAoBxH,GACtBoD,GAAKhR,GAAG6N,KACRmD,GAAKhR,GAAGwK,WACRwG,GAAKhR,GAAGyK,YACRuG,GAAKhR,GAAGkO,YAENmH,GAAkB,IAAI7S,EAAI4S,IAC3BlL,IAAI,IAAI1H,EAAI,IAAI8S,IAAIH,KACpBzS,YAGC,IAAIF,EAAI4S,IAAmB9F,GAAG,IAAI9M,EAAI,KArYvCqP,WAAA,MAAA,OAwYDD,EAAsBhJ,KAAKoI,GAAKhR,GAAG6N,KAAK1R,sBACjCqV,GACLlF,EACA9B,EACAC,EACA1C,EACA0J,EACCf,EAAgBA,EAChBnE,EAAYA,EACZmF,EAAsBA,EACtBC,EAA4BA,EAC5BC,EAAwBA,IAnZ1B,SAAA,OA2ZG2D,GAHJvE,GAAKhR,GAAGwK,YAAcA,GACtBwG,GAAKhR,GAAGyK,aAAeA,EAEV,gBAEA,cA7ZZoH,WAgagB2D,QAAQC,IACzBzE,GAAKhR,GAAGiO,UAAU9L,eAAlB,kBAAsB,WAAMuT,GAAN,6BAAA,OAAA,sBAAA,OAAA,IACpBjE,EAAUiE,IADUC,SAAA,MAAAA,KACLlE,EAAUiE,GADLC,SAAA,MAAA,OAAA,OAAAA,SACgBV,GAAmBS,EAAG,SADtC,OAAAC,YAAA,OAAA,+BAAA,OAAA,UAAA,0BAAtB,mBAAA,qCAjaC,SAgaC7O,UAMJkO,GAAQhV,GAAK,CACX4V,SAAUP,GACVxH,KAAM,CACJvM,IAAK0P,GAAKhR,GAAG6N,KAAKvM,IAClBuU,UAAW,IAAIrT,EAAI,KAAO8F,MAAM,IAAI9F,EAAIwO,GAAKhR,GAAG6N,KAAKvM,MACrDnF,GAAI6U,GAAKhR,GAAG6N,KAAK1R,GACjB2Z,gBAAiB,IAAItT,EAAIwO,GAAKhR,GAAGkO,YAAYhG,QAAQxF,WACrDqT,mBACG/E,GAAKhR,GAAG6N,KAAK/C,UAAWkG,GAAKhR,GAAG6N,KAAK9C,gBACrCiG,GAAKhR,GAAG6N,KAAKlD,UAAWqG,GAAKhR,GAAG6N,KAAKhD,iBAExCmL,iBAAkBhF,GAAKhR,GAAG6N,KAAKoI,aAC/BC,SAAU,CAAClF,GAAKhR,GAAG6N,KAAK/C,SAAUkG,GAAKhR,GAAG6N,KAAKlD,UAC/CwL,IAAKnF,GAAKhR,GAAG6N,KAAKsI,KAEpBZ,OAAQA,GACRa,MAAOlB,GACPzK,YAAauG,GAAKhR,GAAGyK,YACrBD,WAAYwG,GAAKhR,GAAGwK,WACpByD,UAAW+C,GAAKhR,GAAGiO,UACnBvE,MAAOsH,GAAKhR,GAAG0J,MACfwH,UAAWF,GAAKhR,GAAGkR,UACnBC,cAAeH,GAAKhR,GAAGmR,cACvBC,iBAAkBJ,GAAKhR,GAAGoR,iBAC1BC,eAAgBL,GAAKhR,GAAGqR,eACxBvK,OAAQA,GACRuP,gBAAiB7L,EACjB8L,iBAAkB7L,EAClB8L,mBAAoB,KAItBvB,GAAQhV,GAAG6N,KAAK2I,EAAIxB,GAAQhV,GAAG6N,KAAKkI,SAAS/E,GAAKhR,GAAGwK,YACrDwK,GAAQhV,GAAG6N,KAAK/M,EAAIkU,GAAQhV,GAAG6N,KAAKkI,SAAS/E,GAAKhR,GAAGyK,aAvclDoH,WAAA,MAAA,SAAA,OAAAA,WA2c0B4E,GAC7BzB,GACAvD,GA7cG,SA+cL,IAASzR,KAJLuW,UAIUvB,IACR0B,GAAS1B,GAAQhV,IACduW,mBAAqBA,GACxBG,GAAOjM,cAAgBA,GAAeiM,GAAOlM,YAAcA,IAE7DkM,GAAO7I,KAAKiI,gBAAkB,KApd7B,yBAwdEd,IAxdF,SAAA,UAAA,0BAAA,mBAAA,uCAAA,OAAA,UAAA,0DA2dQyB,4EAAf,WAAgDzB,EAASvD,GAAzD,kDAAA,6BAAA,OAAA,sBAAA,OAQMkF,EAAS3B,EACVlD,QAAO,SAAA3J,GAAC,OAAIA,EAAEsC,aAAetC,EAAEmO,oBAC/BnU,KAAI,SAAAgG,GAAC,OAAI,IAAI3F,EAAI2F,EAAEyN,aACnB3O,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IAInCoU,EAAiB5B,EAAQ,GAAGlO,OAAO,GACnC+P,EAAS,IAAIrU,EAAIwS,EAAQ,GAAG5D,kBAAkBlH,IAChD,IAAI1H,EAAI,IAAI8S,IAAIsB,EAAeta,WAE7Bwa,EAAIH,EAAOzM,IAAI2M,GACfE,EAAI,IAAIvU,EAAI,GACZ8K,EAAS0H,EAAQ,GAAG9D,UACpBhF,EAAa8I,EAAQ,GAAG7D,cACxBrJ,EAAckN,EAAQ,GAAG3D,eAAelP,KAAI,SAAAgG,GAAC,OAAI,IAAI3F,EAAI2F,MACzD6O,EAAmBlP,EACpB3F,KAAI,SAAAgG,GAAC,OAAI,IAAI3F,EAAI2F,MACjBlB,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IAEnCyU,EAAUnP,EAAY3F,KAAI,SAAAgG,GAAC,OAAIA,EAAE+B,IAAI8M,MA5B3CE,cA8BgB5J,GA9BhB,QAAA,uBAAA4J,UAAA,MAAA,OA+BQxN,EAAQ4D,EADLtN,cAEHiO,EAAY/B,EAAWlM,GAhC/BkX,UAiCuB1B,QAAQC,IACzBxH,EAAU9L,eAAV,kBAAc,WAAMuT,GAAN,6BAAA,OAAA,sBAAA,OAAA,IACLjE,EAAUiE,IADLyB,SAAA,MAAAA,KAER1F,EAAUiE,GAFFyB,SAAA,MAAA,OAAA,OAAAA,SAGFlC,GAAmBS,EAAG,aAHpB,OAAAyB,YAAA,OAAA,+BAAA,OAAA,UAAA,0BAAd,mBAAA,qCAlCN,QAiCQrQ,SAOAsQ,EAASH,EAAQjX,GACD,GAAhB0J,EAAMhK,QACJoO,EAAM,IAAItL,EAAIkH,EAAM,GAAGG,SAASoE,EAAU,KAAK/D,IACjD,IAAI1H,EAAI,IAAI8S,IAAIxO,EAAO,GAAGxK,WAExByR,EAAQ,IAAIvL,EAAIkH,EAAM,GAAGG,SAASoE,EAAU,KAAK/D,IACnD,IAAI1H,EAAI,IAAI8S,IAAIxO,EAAO,GAAGxK,WAExB+a,EAAmBvJ,EAAI5D,IAAI6D,KAE3BuJ,EAAO,IAAI9U,EAAIkH,EAAM,GAAGG,SAASoE,EAAU,KAAK/D,IAClD,IAAI1H,EAAI,IAAI8S,IAAIxO,EAAO,GAAGxK,WAGxBib,EAAS,IAAI/U,EAAIkH,EAAM,GAAGG,SAASoE,EAAU,KAAK/D,IACpD,IAAI1H,EAAI,IAAI8S,IAAIxO,EAAO,GAAGxK,WAGxBkb,EAAO,IAAIhV,EAAIkH,EAAM,GAAGG,SAASoE,EAAU,KAAK/D,IAClD,IAAI1H,EAAI,IAAI8S,IAAIxO,EAAO,GAAGxK,WAGxBmb,EAAS,IAAIjV,EAAIkH,EAAM,GAAGG,SAASoE,EAAU,KAAK/D,IACpD,IAAI1H,EAAI,IAAI8S,IAAIxO,EAAO,GAAGxK,WAGxB+a,EAAmBC,EACpBpN,IAAIqN,GACJ9U,MAAM+U,GACNtN,IAAIuN,IAETV,EAAIA,EAAE3O,KAAKgP,EAAO3U,MAAM,IAAID,EAAI,GAAG0H,IAAImN,KAvE3CH,UAAA,MAAA,QAAA,OA0EMQ,EAAcX,EAAEzO,MAAMwO,GACvB5M,IAAI4M,GACJrU,MAAM,IAAID,EAAI,MACdE,6BACIgV,GA9ET,QAAA,UAAA,iDAwFA,SAASzF,GAAQ0F,GAIf,OAXF,SAAeA,GACb,IAAIzR,EAAM,GACV,IAAK,IAAIlG,KAAK2X,EACZzR,EAAI0C,KAAK,CAAC+O,EAAI3X,GAAIA,IAEpB,OAAOkG,EAIS0R,CAAMD,GAGnBE,MAAK,SAAC1P,EAAGvH,GAAJ,OAAU,IAAI4B,EAAI5B,EAAE,IAAI0H,MAAM,IAAI9F,EAAI2F,EAAE,QAC7ChG,KALW,SAAAgG,GAAC,OAAIA,EAAE,MAmBvB,SAAS2E,GACPR,EACAwL,EACAC,EACAC,YAAAA,IAAAA,GAAyB,GAEzB,IAAIC,EAAgB3L,EAAMwF,QACxB,SAAA7J,GAAI,OACDA,EAAK6C,WAAagN,GAAU7P,EAAK0C,WAAaoN,GAC9C9P,EAAK6C,WAAaiN,GAAU9P,EAAK0C,WAAamN,KAOnD,OALIE,IACFC,EAAgBA,EAAcnG,QAC5B,SAAA7J,GAAI,MAAyB,KAArBA,EAAK8C,cAA4C,KAArB9C,EAAK4C,iBAGtCoN,EAoCT,SAAS9K,GAAmCb,EAAOC,YAAAA,IAAAA,EAAY,MAI7D,IAHA,IAAI2L,EAAS,IAAI1V,EAAI+J,GACjB4L,EAvBN,SAA0C7L,GACxC,IAAI8L,EAbN,SAAoC9L,GAClC,IAAI8L,EAAc,GAClB,IAAK,IAAIC,KAAW/L,EAAO,CACzB,IAAIuB,EAAOvB,EAAM+L,GACjBxK,EAAKyK,QAAU,CAACzK,EAAK9C,aAAc8C,EAAKhD,cACxC,IAAI0N,EAAiB1K,EAAKyK,QAAQnW,KAAI,SAAA8F,GAAI,OAAI,IAAIzF,EAAIyF,MAClDuQ,EAAYD,EAAe,GAAG9V,MAAM8V,EAAe,IACvDH,EAAYxP,KAAK4P,GAEnB,OAAOJ,EAIWK,CAA2BnM,GACzCoM,EAKN,SAAgBC,GACd,GAAIA,EAAYjZ,OAAS,EACvB,OAAO,KAET,IAAIkZ,EAAUD,EAAY,GAC1B,IAAK,IAAIrG,KAAOqG,EAAa,CAC3B,IAAIE,EAAMF,EAAYrG,GAClBuG,EAAIpQ,GAAGmQ,KACTA,EAAUC,GAGd,OAAOD,EAhBME,CAAOV,GAEpB,OAD4BA,EAAYjW,KAAI,SAAA8F,GAAI,OAAIA,EAAKiC,IAAIwO,MAoB/CK,CAAiCzM,GAC3C2L,EAAgB,GACXjY,EAAI,EAAGA,EAAImY,EAAQzY,OAAQM,IAC9BmY,EAAQnY,GAAKkY,GACfD,EAAcrP,KAAK0D,EAAMtM,IAG7B,OAAOiY,EAQT,SAASe,GAAQC,EAAGC,GAClB,IAAIC,EAAMD,EAAK,GACXE,EAAMF,EAAK,GACXnS,OAAOK,KAAK6R,GAAG3R,SAAS6R,GACrBpS,OAAOK,KAAK6R,EAAEE,IAAM7R,SAAS8R,KAChCH,EAAEE,GAAKC,GAAO,IAGhBH,EAAEE,GAAO,GACTF,EAAEE,GAAKC,GAAO,GAEZrS,OAAOK,KAAK6R,GAAG3R,SAAS8R,GACrBrS,OAAOK,KAAK6R,EAAEG,IAAM9R,SAAS6R,KAChCF,EAAEG,GAAKD,GAAO,IAGhBF,EAAEG,GAAO,GACTH,EAAEG,GAAKD,GAAO,GAWlB,SAASE,GAAWJ,EAAGC,GACrB,IAAII,EAAO1S,KAAKC,MAAMD,KAAKa,UAAUwR,IACjCM,EAAKL,EAAK,GACVM,EAAKN,EAAK,GAWd,OAVInS,OAAOK,KAAKkS,GAAMhS,SAASiS,IACzBxS,OAAOK,KAAKkS,EAAKC,IAAKjS,SAASkS,WAC1BF,EAAKC,GAAIC,GAGhBzS,OAAOK,KAAKkS,GAAMhS,SAASkS,IACzBzS,OAAOK,KAAKkS,EAAKE,IAAKlS,SAASiS,WAC1BD,EAAKE,GAAID,GAGbD,EAGT,SAASG,GAAWR,EAAGS,GACrB,IAAIJ,EAAO1S,KAAKC,MAAMD,KAAKa,UAAUwR,IACjClS,OAAOK,KAAKkS,GAAMhS,SAASoS,WACtBJ,EAAKI,GAEd,IAAItS,EAAOL,OAAOK,KAAKkS,GACvB,IAAK,IAAIK,KAAWvS,EAAM,CACxB,IAAIwS,EAAUxS,EAAKuS,GACf5S,OAAOK,KAAKkS,EAAKM,IAAUtS,SAASoS,WAC/BJ,EAAKM,GAASF,GAGzB,OAAOJ,EAsDT,SAASO,GAAaZ,EAAGE,EAAKC,EAAKU,EAAmBC,YAAnBD,IAAAA,EAAe,aAAIC,IAAAA,EAAe,IACnE,IAAIC,EAAQpT,KAAKC,MAAMD,KAAKa,UAAUwR,IAEtC,IAAK,IAAIU,KAAWG,EAElBE,EAAQP,GAAWO,EADLF,EAAaH,IAI7B,IAAK,IAAIM,KAAWF,EAElBC,EAAQX,GAAWW,EADLD,EAAaE,IAG7B,IAAIC,EA/DN,SAAkBC,EAAOzZ,GACvB,IAAI0Z,EAAY,GAKhB,IAJAA,EAAU1Z,GAAK,GACf0Z,EAAU1Z,GAAGiJ,KAAO,GACpByQ,EAAU1Z,GAAG2Z,KAAO,IAEP,CACX,IAAIC,EAAS,KACTC,EAAU,KACVF,EAAOG,SAGX,IAAK,IAAIlR,KAAK8Q,EAIZ,GAHKA,EAAU9Q,KACb8Q,EAAU9Q,GAAK,IAEZ8Q,EAAU9Q,GAAGK,KAAlB,CACA,IAAI8Q,EAAQL,EAAU9Q,GAAG+Q,KACrBK,EAAMP,EAAM7Q,GAEhB,IAAK,IAAInB,KAAKuS,EAKZ,GAHKN,EAAUjS,KACbiS,EAAUjS,GAAK,KAEbiS,EAAUjS,GAAGwB,KAAjB,CAEA,IAAI5J,EAAI2a,EAAIvS,GAAKsS,EACb1a,EAAIsa,IAENC,EAASF,EAAU9Q,GAAGK,KACtB4Q,EAAUpS,EACVkS,EAAOta,IAMb,GAAaya,WAATH,EACF,MAIFD,EAAUG,GAAS5Q,KAAO2Q,EAAOK,OAAOJ,GAExCH,EAAUG,GAASF,KAAOA,EAG5B,OAAOD,EAeQQ,CAASZ,EAAOb,GAAKC,GAEpC,OADAc,EAASvQ,KAAKkR,QAAQ1B,GACfe,EA1hET1X,EAAIqG,GAAK,EACTrG,EAAIsG,GAAK,GACTtG,EAAIuG,IAAM,GACVvG,EAAIwG,GAAK,OCWG8R,GDuhENC,cACJ,aACEC,KAAKpP,MAAQ,GACboP,KAAKC,YAAc,8BAGrBC,IAAA,WACE,OAAOF,KAAKC,YAAYvb,UAG1BkJ,KAAA,SAAKuS,EAAMxR,GACLA,IAASyR,GAAcJ,KAAKpP,MAAOjC,KACrCqR,KAAKC,YAAYrS,KAAK,CAACuS,EAAMxR,IAC7BqR,KAAKC,YAAYpD,MAAK,SAAS1P,EAAGvH,GAChC,OAAOuH,EAAE,GAAKvH,EAAE,MAGlBoa,KAAKpP,MAAMhD,KAAKe,OAIpB0R,IAAA,WAEE,IAEI1R,EAFMqR,KAAKC,YAAYK,QAEZ,GAEf,OADAN,KAAKpP,MAAM2P,OAAOP,KAAKpP,MAAM4P,QAAQ7R,GAAO,GACrCA,QAIX,SAAS8R,GAAYtT,EAAGvH,GACtB,OACE8a,MAAMC,QAAQxT,IACduT,MAAMC,QAAQ/a,IACduH,EAAEzI,SAAWkB,EAAElB,QACfyI,EAAEkH,OAAM,SAACwJ,EAAKrE,GAAN,OAAgBqE,IAAQjY,EAAE4T,MAItC,SAAS4G,GAAczD,EAAKiE,GAG1B,IAAIC,EAAWjV,KAAKa,UAAUmU,GAC9B,IAAK,IAAIE,KAAWnE,EAClB,GAAI/Q,KAAKa,UAAUkQ,EAAImE,KAAaD,EAClC,OAAO,EAGX,OAAO,EAGT,SAAU5S,GAAUgQ,EAAG8C,EAAQC,GAA/B,oCAAA,6BAAA,OAAA,sBAAA,OAEMC,EAAQ,GACRC,EAAQ,IAAInB,GACZoB,EAAY,KAJlB,OAOI,GAAKA,EAQH,IAFIrC,EAAe,GACfC,EAAe,GACV/Z,EAAI,EAAGA,EAAImc,EAAUzc,OAAQM,IAAK,CAGzC,IAASwM,KAFL4P,EAAOD,EAAUhK,MAAM,EAAGnS,GAC1Bqc,EAAcD,EAAK1c,OACHuc,EAGdR,IAFA9R,EAAOsS,EAAMzP,IAEI2F,MAAM,EAAGnS,GAAIoc,IAEhCrC,EAAanR,KADM,CAACe,EAAK3J,EAAI,GAAI2J,EAAK3J,KAI1C,IACMsc,EAAMzC,GACRZ,EACAmD,EAAKA,EAAK1c,OAAS,GACnBsc,EACClC,EAAeA,EACfC,EAAeA,GAEdra,EAAS4c,EAAIjC,KACbkC,EAAOD,EAAI3S,KACXA,EAAOyS,EAAKjK,MAAM,EAAGiK,EAAK1c,OAAS,GAAGib,OAAO4B,GACjDL,EAAMtT,KAAKyT,EAAc3c,EAAQiK,GACjC,MAAO+D,IAIToM,EAAalR,KAAKwT,EAAKA,EAAK1c,OAAS,SAlCnC4c,EAAMzC,GAAaZ,EAAG8C,EAAQC,GAGlCE,EAAMtT,KAFO0T,EAAIjC,KACNiC,EAAI3S,MAVrB,IA6CQuS,EAAMjB,aA7CduB,UAAA,MAgDQ,OAhDRA,SA+CY7S,EAAOuS,EAAMb,MA/CzBmB,UAgDc7S,EAhDd,QAiDQsS,EAAMrT,KAAKe,GACXwS,EAAYxS,EAlDpB6S,UAAA,MAAA,QAAA,OAAAA,UAAAA,qCAAA,QAAAA,UAAA,MAAA,QAAA,4BAAA,QAAAA,SAAA,MAAA,QAAA,UAAA,oCA4DA,SAASC,GAAkBxD,EAAG8C,EAAQC,EAAQ5P,EAAGsE,GAAjD,gBAAiDA,IAAAA,EAAgB,eAC/D,IAAI9E,EAAQ,GACR8E,EAAgB,IACdA,EAAgB,GAGtB,IADA,IAAIgM,EAAMzT,GAAUgQ,EAAG8C,EAAQC,GACtB1S,EAAI,EAAGA,GAAK8C,EAAG9C,IACtB,IACE,IAAIpD,EAAMwW,EAAIC,OAAOxT,MACrB,GAAIjD,IAAQkV,GAAcxP,EAAO1F,GAAM,CACrC,GAAIA,EAAIxG,OAASgR,EAMf,MAEF9E,EAAMhD,KAAK1C,IAEb,MAAOwH,GACP,MAGJ,OAAO9B,eAGMgF,gFAAf,WACEtE,EACA9B,EACAC,EACAiG,GAJF,MAAA,6BAAA,OAAA,sBAAA,OAAA,gBAIEA,IAAAA,EAAgB,GAEZyJ,EAAQyC,GAAqBtQ,qBAC1BmQ,GAAkBtC,EAAO3P,EAAYC,EAAa,IAAKiG,IAPhE,OAAA,UAAA,iDA4CA,SAASkM,GAAqBC,GAC5B,IAII5D,EAAI,GAER,OAjTF,SAAkBA,EAAG6D,GACnB,IAAK,IAAIxT,KAAKwT,EAEZ9D,GAAQC,EADG6D,EAASxT,IA8StByT,CAAS9D,EALG4D,EAAS/K,QACnB,SAAA7J,GAAI,MAAyB,KAArBA,EAAK8C,cAA4C,KAArB9C,EAAK4C,gBAEnB1I,KAAI,SAAA8F,GAAI,MAAI,CAACA,EAAK6C,SAAU7C,EAAK0C,cAGlDsO,WAkBa+D,cAAtB,oEAAO,WACL1Q,EACA9B,EACAC,EACA1C,EACA0J,GALK,6BAAA,OAAA,sBAAA,OAAA,OAAAwL,SAOyBzL,GAC5BlF,EACA9B,EACAC,EACA1C,EACA0J,GAZG,OAAA,iCAAA,OAAA,UAAA,iDAiBA,SAASyL,GAAiClI,EAASvK,GACxD,OAAOuK,EACJlD,QAAO,SAAA7J,GAAI,OAAIA,EAAKwC,cAAgBA,KACpCtI,KAAI,SAAA8F,GAAI,OAAI,IAAIzF,EAAIyF,EAAK2N,aACzB3O,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,KC5vE7BsY,GAAAA,aAAAA,yCAEVA,yBACAA,0BACAA,4BAiBWqC,GAAwB,gBACnCC,IAAAA,QACAC,IAAAA,SACAxP,IAAAA,KAQMyP,EAAkB3a,SAPxBf,WPjDyB,IOwDiCiM,EAAKvM,KACzDic,EAAalb,GACjB+a,EAAQ9gB,SACRuR,EAAKkI,SAASqH,EAAQjhB,KAElBqhB,EAAcnb,GAClBgb,EAAS/gB,SACTuR,EAAKkI,SAASsH,EAASlhB,KASzB,MAAO,CACLyZ,SARe,IAAIpT,GAEhB8a,EAAkB3a,OAAO6a,IPnEL,IOoEN7a,OAAO4a,GAAcD,IACpC5a,YACFgJ,UAIAmC,KAAAA,EACApD,YAAa4S,EAASlhB,GACtBqO,WAAY4S,EAAQjhB,KAIXshB,GAAwB,gBACnCL,IAAAA,QACAC,IAAAA,SACAzb,IAAAA,SACAC,IAAAA,WASMC,EAA2B4b,GAAqB7b,KAEtBJ,EAC9B2b,EAAQjhB,GACRkhB,EAASlhB,GACTyF,EACAC,EACAC,GALK6b,OAAgB/d,OAQjBge,EACJD,EAAiB,GAAKE,MAAMF,GACxB,IACAG,GAAYvb,GAA2Bob,EAAejb,YAAa,GAEnEqb,EACJJ,EAAiB,GAAKE,MAAMF,IAAmBE,MAAMxc,GACjD,IACAyc,GAAYvb,GAA2BlB,EAAGqB,YAAa,GAEvDR,EAAQL,EAAWK,MAAM+E,QAAO,SAACC,EAAKC,EAAKnH,SAC/C,YACKkH,UACFrF,EAAWG,kBAAkBhC,IAAKmH,QAEpC,IAEH,MAAO,CACLyO,SAAUvT,GAAiBP,EAA0B8b,GACrDI,eAAgB3b,GAAiBP,EAA0Bic,GAC3DlQ,UACKhM,GACHK,MAAAA,IAEFuI,YAAa4S,EAASlhB,GACtBqO,WAAY4S,EAAQjhB,KAQX8hB,GAAiB,gBAC5Bb,IAAAA,QACAC,IAAAA,SACAa,IAAAA,YACAtc,IAAAA,SACAuc,IAAAA,YAQA,IAAKD,GAAsC,IAAvBA,EAAYxe,OAC9B,MAAM0e,GAGR,IAAMC,EAAiB/b,GAAqB8a,EAAQ9gB,SAAUsF,GAWxD0c,EAPsBJ,EAAYpM,QACtC,SAAA9H,GAAC,OACCA,EAAEkM,SAAS5O,SAAS8V,EAAQjhB,KAC5B6N,EAAEkM,SAAS5O,SAAS+V,EAASlhB,OAC3BgiB,IAAgBI,GAAaJ,EAAanU,EAAE7N,QAGFgG,KAAI,SAAA0L,GAAI,OACtDsP,GAAsB,CACpBC,QAAAA,EACAC,SAAAA,EACAxP,KAAAA,EACAjM,SAAAA,OAIE4c,QAAqBL,SAAAA,EAAarM,QACtC,SAAA2M,GAAE,OACAA,EAAGzc,kBAAkBsF,SAAS8V,EAAQjhB,KACtCsiB,EAAGzc,kBAAkBsF,SAAS+V,EAASlhB,OAIrCuiB,QAAsBF,SAAAA,EAAoBrc,KAAI,SAAAN,GAClD,OAAO4b,GAAsB,CAC3BL,QAAAA,EACAC,SAAAA,EACAzb,SAAAA,EACAC,WAAAA,EACAgM,KAAMqQ,EAAYS,MAAK,SAAA3U,GAAC,OAAIA,EAAE7N,KAAO0F,EAAW1F,WAI9CyiB,OACoBC,IAAxBP,GAAoE,IAA/BA,EAAoB5e,YACrDmf,EAC+B,IAA/BP,EAAoB5e,OACpB4e,EAAoB,GACpB1e,EAAEkf,MAAMR,GAAqB,SAAA1I,GAAQ,OAAIjT,OAAOiT,EAASA,aAEzDmJ,OACoBF,IAAxBH,GAAoE,IAA/BA,EAAoBhf,YACrDmf,EAC+B,IAA/BH,EAAoBhf,OACpBgf,EAAoB,GACpB9e,EAAEkf,MAAMJ,GAAqB,SAAA9I,GAAQ,OAAIjT,OAAOiT,EAASA,aAE/D,IAAKmJ,IAA0BH,EAAuB,MAAMR,GAQ5D,OANAQ,IACGA,EAAsB/Q,KAAKiI,gBAAkBuI,GAEhDU,IACGA,EAAsBlR,KAAKiI,gBAAkBuI,GAE3CU,EAKOH,GAGHjc,aAAOic,SAAAA,EAAuBhJ,UACnCjT,aAAOoc,SAAAA,EAAuBnJ,UAC5BgJ,EAJGG,GALPH,IACGA,EAAsB/Q,KAAKiI,gBAAkBuI,GAEzCO,IAWEI,GAAyB,gBACpCtd,IAAAA,UACAC,IAAAA,WAOA,SANAwc,YAMmBrM,QACjB,SAAA9H,GAAC,OACCA,EAAEkM,SAAS5O,SAAS5F,IACpBsI,EAAEkM,SAAS5O,SAAS3F,IACpBD,IAAcC,MAIPsd,GAAmB,gBAE9Bvd,IAAAA,UACAC,IAAAA,WAMA,OAAID,IAAcC,EAAmB,KARrC2K,MAUawF,QACX,SAAA9H,GAAC,OAAIA,EAAEkM,SAAS5O,SAAS5F,IAAcsI,EAAEkM,SAAS5O,SAAS3F,OAIlDud,cAAe,kBAAG,cAAA,cAAA,6BAAA,OAAA,sBAAA,OAAA,GAC7B9B,IAAAA,QACAC,IAAAA,SACAzb,IAAAA,SAEAiM,IAAAA,OADAsR,IAAAA,mBAJ6BvZ,SAAA,MAAA,yBAcpB6X,GAAsB,CAC3BL,QAAAA,EACAC,SAAAA,EACAxb,WAAYsd,EACZvd,SAAAA,EACAiM,KAAAA,KAnByB,OAAA,yBAsBpBsP,GAAsB,CAC3BC,QAAAA,EACAC,SAAAA,EACAxP,KAAAA,EACAjM,SAAAA,KA1ByB,OAAA,UAAA,0BAAH,mBAAA,4CA+BNwd,kBAAtB,oEAAO,WACLhC,EACAC,EACAzb,EACAuc,EACAkB,EACAnB,EACAzM,GAPK,mGAAA,6BAAA,OAAA,sBAAA,OAAA,GAUF6N,GAAkBD,EAAmBjC,EAAQjhB,KAC7CmjB,GAAkBD,EAAmBhC,EAASlhB,KAX5CyL,SAAA,MAAA,yBAaI,CAAEoN,QAAS,GAAIY,SAAU,MAb7B,OAyCL,GAzBM2J,EAAwBF,EAAkBpY,QAAO,SAACC,EAAKC,SAC3D,YACKD,UACFC,EAAIhL,IAAKgL,QAEX,IAEGkX,EAAiB/b,GAAqB8a,EAAQ9gB,SAAUsF,GAI1D4d,EAAiB,GACjBC,EAAiB,GAEjBC,EAAsB,GACtBC,EAAsB,GAEtBC,EAA2B,GAQ3BN,GAAkBD,EAAmBjC,EAAQjhB,IAQ/C,IANAqjB,EAASrB,EAAYrM,QAAO,SAAAjE,GAAI,OAAIA,EAAKqI,SAAS5O,SAAS8V,EAAQjhB,OAE7D0jB,EAAeL,EAClBrd,KAAI,SAAA0L,GAAI,OAAIA,EAAKqI,SAASpE,QAAO,SAAA3V,GAAE,OAAIA,IAAOihB,EAAQjhB,SACtDwR,WAEqBkS,kBAClBC,EAAsBd,GAAuB,CAC/Ctd,UAFKqe,UAGLpe,WAAY0b,EAASlhB,GACrBgiB,YAAAA,IAGE6B,EAAWf,GAAiB,CAC9Bvd,UAAWqe,EACXpe,WAAY0b,EAASlhB,GACrBmQ,MAAO4R,IAEH+B,EAAiBD,EAASrF,OAAOmF,GACvCL,EAAO7W,WAAP6W,EACKQ,EAAenO,QAAO,SAAA9H,GACvB,IAAM+L,EAAWhP,OAAOC,OAAOgD,EAAE+L,UACjC,OAAO,IAAIvT,EAAIuT,EAAS,IAAItT,MAAM,IAAID,EAAIuT,EAAS,KAAKtN,GAAG,OAMnE,GAAI6W,GAAkBD,EAAmBhC,EAASlhB,IAShD,IAPAwjB,EAAcxB,EAAYrM,QAAO,SAAAjE,GAAI,OACnCA,EAAKqI,SAAS5O,SAAS+V,EAASlhB,OAG5B0jB,EAAeF,EAClBxd,KAAI,SAAA0L,GAAI,OAAIA,EAAKqI,SAASpE,QAAO,SAAA3V,GAAE,OAAIA,IAAOkhB,EAASlhB,SACvDwR,WACqBkS,kBAClBC,EAAsBd,GAAuB,CAC/Ctd,UAAW0b,EAAQjhB,GACnBwF,WAHKoe,UAIL5B,YAAAA,IAGE6B,EAAWf,GAAiB,CAC9Bvd,UAAW0b,EAAQjhB,GACnBwF,WAAYoe,EACZzT,MAAO4R,IAGH+B,EAAiBD,EAASrF,OAAOmF,GAEvCJ,EAAY9W,WAAZ8W,EACKO,EAAenO,QAAO,SAAA9H,GACvB,IAAM+L,EAAWhP,OAAOC,OAAOgD,EAAE+L,UACjC,OAAO,IAAIvT,EAAIuT,EAAS,IAAItT,MAAM,IAAID,EAAIuT,EAAS,KAAKtN,GAAG,OAQnE,QAAe+W,kBAEb,IADIU,GADG9V,WACe8L,SAASpE,QAAO,SAAC3V,GAAD,OAAgBA,IAAOihB,EAAQjhB,MADhDgkB,aAAA,IAEZ9U,UACH+U,EAAMX,EAAO3N,QACf,SAAA9H,GAAC,OACCA,EAAEkM,SAAS5O,SAAS+D,IACpBrB,EAAEkM,SAAS5O,SAAS+V,EAASlhB,KAC7BkP,IAAgBgS,EAASlhB,MAEzB2N,EAAKlK,EAAEkf,MAAMsB,GAAK,SAAApW,GAAC,OACrBrH,OACE,IAAIH,EAAIH,GAAiBgb,EAAS/gB,SAAU0N,EAAE+L,SAASsH,EAASlhB,UAIhEkP,IAAgBgS,EAASlhB,KAC3B2N,EAAKM,GAGHA,GAAMN,GACa8V,EAAehX,KAAhCwB,EAAGjO,KAAO2N,EAAG3N,GAAwB,CAACiO,GACjB,CAACA,EAAIN,SAnBVoW,kBAAcC,IAuBxC,UAAeT,iBAEb,IADIQ,GADG9V,QACe8L,SAASpE,QAAO,SAAC3V,GAAD,OAAgBA,IAAOihB,EAAQjhB,MAD3CkkB,aAAA,IAEjBhV,UACH+U,EAAMT,EAAY7N,QACpB,SAAA9H,GAAC,OACCA,EAAEkM,SAAS5O,SAAS+D,IACpBrB,EAAEkM,SAAS5O,SAAS+V,EAASlhB,KAC7BkP,IAAgBgS,EAASlhB,MAEzB2N,EAAKlK,EAAEkf,MAAMsB,GAAK,SAAApW,GAAC,OACrBrH,OACE,IAAIH,EAAIH,GAAiBgb,EAAS/gB,SAAU0N,EAAE+L,SAASsH,EAASlhB,UAIhEkP,IAAgBgS,EAASlhB,KAC3B2N,EAAKM,GAGHA,GAAMN,GACa8V,EAAehX,KAAhCwB,EAAGjO,KAAO2N,EAAG3N,GAAwB,CAACiO,GACjB,CAACA,EAAIN,SAnBVoW,kBAAcG,IArInC,KA6JDT,EAAelgB,OAAS,IA7JvBkI,UAAA,MAAA,OAAAA,UA8JwB0Y,GACzBV,EAAezd,KAAI,SAAAoe,GAAE,OAAIA,EAAGpe,KAAI,SAAA6H,GAAC,OAAIA,EAAEkM,YAAUvI,UAAQA,OACzD8D,GAhKC,QAAA,GA8JG+O,SAKAC,EACsB,IAA1Bb,EAAelgB,OACXkgB,EAAe,GACfhgB,EAAEkf,MAAMc,GAAgB,SAAAc,GAEtB,GAAwB,IAApBA,EAAShhB,OAAc,CACzB,GAAI6e,GAAac,EAAmBqB,EAAS,GAAGvkB,IAAK,CACnD,IAAMqiB,EAAqBQ,GAAuB,CAChDtd,UAAW0b,EAAQjhB,GACnBwF,WAAY0b,EAASlhB,GACrBgiB,YAAAA,IACC,GAEGwC,EAA2BtB,EAAkBV,MACjD,SAAAiC,GAAG,OAAIA,EAAIzkB,KAAOqiB,EAAmBriB,MAGvC,OAAOwG,OACL8a,GAAsB,CACpBL,QAAAA,EACAC,SAAAA,EACAxb,WAAY8e,EACZ/e,SAAAA,EACAiM,KAAM6S,EAAS,KACd9K,UAGL,OAAOjT,OACLwa,GAAsB,CACpBC,QAAAA,EACAC,SAAAA,EACAzb,SAAAA,EACAiM,KAAM6S,EAAS,KACd9K,UAKT,IAAOiL,EAAsBH,KAAZI,EAAYJ,KACvBK,EAAaL,EAAS,GAAGxK,SAASyI,MAAK,SAACjJ,GAAD,OAC3CgL,EAAS,GAAGxK,SAAS5O,SAASoO,MAG1BsL,EAAeR,EAAaO,GAE5BE,OACA1C,GAAac,EAAmBwB,EAAS1kB,IACzCshB,GAAsB,CACpBL,QAAAA,EACAC,SAAU2D,EACVpf,SAAAA,EACAC,WAAY0d,EAAsBsB,EAAS1kB,IAC3C0R,KAAMgT,IAER1D,GAAsB,CACpBC,QAAAA,EACAC,SAAU2D,EACVpf,SAAAA,EACAiM,KAAMgT,KAEZtL,OAAQuF,WAASoG,QAGbC,OACA5C,GAAac,EAAmByB,EAAS3kB,IACzCshB,GAAsB,CACpBL,QAAS4D,EACT3D,SAAAA,EACAzb,SAAUqf,EAAUrL,SACpB/T,WAAY0d,EAAsBuB,EAAS3kB,IAC3C0R,KAAMiT,IAER3D,GAAsB,CACpBC,QAAS4D,EACT3D,SAAAA,EACAxP,KAAMiT,EACNlf,SAAUqf,EAAUrL,YAE1BL,OAAQuF,WAASoG,QAGnB,OAAOve,OAAOwe,EAAUvL,cApP7BhO,UAAA,MAAA,yBAyPuB,CAAEoN,QAAS,GAAIY,SAAU,MAzPhD,QAAA,GA2PyB,IAAxB6K,EAAa/gB,QA3PdkI,UAAA,MAAA,OA4PKwZ,EAAWX,EAAa,GA5P7B7Y,UA6PsBsX,GAAgB,CACrC9B,QAAAA,EACAC,SAAAA,EACAzb,SAAAA,EACAiM,KAAMuT,EACNjC,iBAAkBI,EAAsB6B,EAASjlB,MAlQlD,QAAA,yBAqQM,CACL6Y,QAAS,MATLY,WAYAL,OAAQuF,WAASuG,OAEjBxT,UAAW+H,GAAS/H,MAAMiI,gBAAiBuI,IAC3CvX,OAAQ,CAACsW,EAASC,GAClB7S,WAAY4S,EAAQjhB,GACpBsO,YAAa4S,EAASlhB,GACtBiV,iBAAkB9O,GAAqB8a,EAAQ9gB,SAAUsF,MAG7DgU,SAAUA,GAASA,WAlRpB,QAAA,GAuRF0L,EAAgBb,KAATc,EAASd,KAEXM,GAAaN,EAAa,GAAGvK,SAASyI,MAAK,SAACjJ,GAAD,OAC/C+K,EAAa,GAAGvK,SAAS5O,SAASoO,MA1RjC9N,KA8RD6J,EAAUsP,UA9RTnZ,UAAA,MAAA,OAAAA,UA+RMqN,GAAmB8L,GAAY,8BA/RrC,QAAAnZ,YAAA,QAAA,OA6RGoZ,SAIAC,QACA1C,GAAac,EAAmBiC,EAAMnlB,IACtCshB,GAAsB,CACpBL,QAAAA,EACAC,SAAU2D,GACVpf,SAAAA,EACAC,WAAY0d,EAAsB+B,EAAMnlB,IACxC0R,KAAMyT,IAERnE,GAAsB,CACpBC,QAAAA,EACAC,SAAU2D,GACVpf,SAAAA,EACAiM,KAAMyT,KAEZxa,OAAQ,CAACsW,EAAS4D,GAAc3D,GAChC7S,WAAY4S,EAAQjhB,GACpBsO,YAAauW,GAAa7kB,GAC1BoZ,OAAQuF,WAASoG,SAGTrT,UACLoT,GAAUpT,MACbiI,gBAAiBuI,IAGb8C,QACA5C,GAAac,EAAmBkC,EAAMplB,IACtCshB,GAAsB,CACpBL,QAAS4D,GACT3D,SAAAA,EACAzb,SAAUqf,GAAUrL,SACpB/T,WAAY0d,EAAsBgC,EAAMplB,IACxC0R,KAAM0T,IAERpE,GAAsB,CACpBC,QAAS4D,GACT3D,SAAAA,EACAzb,SAAUqf,GAAUrL,SACpB/H,KAAM0T,KAGZza,OAAQ,CAACsW,EAAS4D,GAAc3D,GAChC7S,WAAYwW,GAAa7kB,GACzBsO,YAAa4S,EAASlhB,GACtBoZ,OAAQuF,WAASoG,0BAGZ,CAAElM,QAAS,CAACiM,GAAWE,IAAYvL,SAAUuL,GAAUvL,WAjV3D,QAAA,yBAoVE,CAAEZ,QAAS,GAAIY,SAAU,MApV3B,QAAA,UAAA,qDAwVM4L,cAAY,kBAAG,cAAA,gDAAA,6BAAA,OAAA,sBAAA,OAAA,GAG1B5f,IAAAA,SACAsc,IAAAA,YACAuD,IAAAA,SAJArE,IAAAA,SAMYjhB,MALZkhB,IAAAA,UAK4BlhB,IAPFwK,SAAA,MAAA,MAOY+a,GAPZ,OAAA,IAStBC,GAAWC,KAAKhgB,IATM+E,SAAA,MAAA,MASWkb,GATX,OAAA,GAWlBC,GAXkBC,EAWqCN,GAAW,IAAlEK,mBAAoB3D,IAAAA,YAAakB,IAAAA,kBAEnChB,EAAiB/b,GAAqB8a,EAAQ9gB,SAAUsF,GAE1DogB,EAA0C,GAfpBrb,SAkBlBiP,EAAWqI,GAAe,CAC9Bb,QAAAA,EACAC,SAAAA,EACAa,YAAAA,EACAtc,SAAAA,EACAuc,YAAakB,IAGf2C,EAAsB,MAEfpM,GACHL,OAAQuF,WAASmH,SACjBpU,gBAAW+H,SAAAA,EAAU/H,MAAMiI,gBAAiBuI,IAC5CjN,iBAAkB9O,GAAqB8a,EAAQ9gB,SAAUsF,GACzDkF,OAAQ,CAACsW,EAASC,MAGjByE,GAnCmBnb,UAAA,MAAA,yBAoCfqb,GApCe,QAAArb,UAAA,MAAA,QAAA,GAAAA,UAAAA,gBAuCnBmb,GAvCmBnb,UAAA,MAAA,WAAA,QAAA,OA0CpBub,EAAahE,EAAY/b,KAAI,SAAA6H,GAAC,OAAImY,GAAcnY,MA1C5BrD,UA4CDN,IA5CC,QAAA,OA4CpBoL,SA5CoB9K,UA8CkBqW,GAC1CkF,EACA9E,EAAQjhB,GACRkhB,EAASlhB,GACTkiB,EACA5M,GAnDwB,QAAA,OAsDpB2Q,EAAiClF,GARjCmF,SAUJhF,EAASlhB,IACTuG,WAzDwBiE,UA2DUyY,GAClChC,EACAC,EACAzb,EACAuc,GAAe,GACfkB,GAAqB,GACrBnB,EACAzM,GAlEwB,QAAA,GAqEpB6Q,GAVAC,UAUmD3M,SAASlT,YAGhE,IAAIF,EAAI4f,GAAkC,KAAKI,IAC7CF,GAA8B,MAzER3b,UAAA,MAAA,SA4EnB0b,GAAAA,EAA+B3iB,QA5EZiH,UAAA,MAAA,MA4E0ByX,GA5E1B,QAAA,UA+ES,IAAxB4D,GACPA,YACAA,aAAAS,EAAsB,KAAtBC,EAA0B9M,UAC1B,IAAIpT,EAAIwf,EAAoB,GAAGpM,UAAY,KAAKnN,GAC9C2Z,GAAkC,OAnFdzb,UAAA,MAAA,yBAsFfqb,GAtFe,QAAA,yBAwFjBK,GAxFiB,QAAA,UA2FS,IAAxBL,GACPA,YACAA,aAAAW,EAAsB,KAAtBC,EAA0BhN,UAC1B,IAAIpT,EAAIwf,EAAoB,GAAGpM,UAAY,KAAKnN,GAC9C6Z,GAA8B,OA/FV3b,UAAA,MAAA,yBAkGfqb,GAlGe,QAAA,yBAqGjBO,EAAsBvN,SArGL,QAAA,UAAA,wCAAH,mBAAA,mCCtlBZ6N,GAAY,SAAChV,EAAmB1R,GAApB,MAA2C,CAClEA,GAAIwG,OAAqB,iBAAPxG,EAAkBA,EAAK0R,EAAK1R,IAC9C+Z,SAAUrI,EAAK7L,kBACf+T,SAAUlI,EAAKyK,QAAQrR,QACrB,SAACC,EAAoC3F,EAAgBvB,GAEnD,OADAkH,EAAI2G,EAAK7L,kBAAkBhC,IAAMuB,EAC1B2F,IAET,IAEF5F,IAAKuM,EAAK9L,UACV+gB,YAAajV,EAAKkV,oBAClBC,IAAKnV,EAAKmV,IACVhN,iBAAkBnI,EAAKmI,iBACvBiN,UAAWpV,EAAKoV,YAGLd,GAAgB,SAACtU,GAC5B,MAAO,CACL1R,GAAI0R,EAAK1R,GACT2O,SAAU+C,EAAKqI,SAAS,GACxBvL,SAAUkD,EAAKqI,SAAS,GACxBnL,aAAc8C,EAAKkI,SAASlI,EAAKqI,SAAS,IAC1CrL,aAAcgD,EAAKkI,SAASlI,EAAKqI,SAAS,IAC1C5U,IAAKuM,EAAKvM,IACV4hB,OAAQrV,EAAKiV,YACb7M,aAAcpI,EAAKmI,kBAAoB,MAI9BsJ,GAAoB,SAC/BnB,EACAgF,GAEA,OAAOhF,EACJhc,KAAI,SAAA6H,GAAC,OAAIA,EAAEhI,qBACX2L,OACArG,SAAS6b,EAAQzgB,aAGT6b,GAAe,SAC1BJ,EACAiF,GAEA,OAAOjF,EAAYhc,KAAI,SAAA6H,GAAC,OAAIA,EAAE7N,GAAGuG,cAAY4E,SAAS8b,EAAO1gB,aAGlDgb,GAAuB,SAAC7b,GACnC,MAAgC,eAAzBA,EAAWohB,URlFwB,GADJ,IQwF3B/a,GAAQ,SAAC5L,EAAkB+mB,GACtC,OAAO1gB,OAAO2gB,UAAU3gB,OAAO0gB,IAC3BA,EACAljB,KAAKojB,KACHpjB,KAAK+H,MAAMvF,OAAO0gB,GAAgBljB,KAAKmV,IAAI,GAAIhZ,IAC7C6D,KAAKmV,IAAI,GAAIhZ,IACfoG,YAGK8gB,GAA0B,SAACC,GACtC,OAAOC,SAAYD,EAAS,MAGjBE,GAAY,SAACF,EAAiB3V,GACzC,OAAO4V,WAAiBF,GAAwBC,SAAc3V,IAGnD8V,GAAc,SAACH,EAAiB3V,GAC3C,OAAO4V,SAAYA,WAAiB5V,QAAS6V,GAAUF,EAAS3V,IAAS,CACvE+V,SAAU,WAIDC,GAAS,SAACC,GAAD,OACd,IAAIC,EAAVD,GAA2B,oBAKhBpC,GAAa,YAEbtf,GAAmB,SAC9B/F,EACA2nB,GAEA,gBAFAA,IAAAA,EAAiB,KAEZ3nB,IAEY2nB,EAAOC,UAAU,EAAGD,EAAOvkB,OAASpD,IAAa,SAC9C2nB,EACjBC,UAAUD,EAAOvkB,OAASpD,GAC1B6nB,SAAS7nB,EAAU,KACnB4nB,UAAU,EAAG5nB,IAEoB8nB,QAAQ,SAAU,IARhCH,GAWX3hB,GAAuB,SAClChG,EACA2nB,GAEA,GAAI3nB,MAAAA,EAA6C,OAAO2nB,EACxD,MAAmCA,EAAOI,MAAM,YAEhD,2BAF6B,MAEEC,OAAOhoB,EAAU,KAAK6V,MAAM,EAAG7V,IAC3D8nB,QAAQ,MAAO,IACfD,SAAS,EAAG,MAGJ5hB,GAA6B,SAACgiB,WAEzC,IADW,IAAI3C,KAAK2C,KACNA,EAAU,OAAOA,EAE/B,IAAIC,GAAS,EACT,KAAK5C,KAAK2C,KACZC,GAAS,GAGX,IAAMC,EAAW9hB,OAAO4hB,GAAY,EAAI,IAAM,GAE1C/P,EAAQ7R,gBAAO4hB,EAASG,MAAM,gBAAfC,EAAyB,IAExCC,WAAQL,EAASG,MAAM,mBAAfG,EAA4B,GAExC,IAAKrQ,IAAUoQ,EAAO,OAAOL,EAE7B,IAEIO,EACAC,EAHEC,EAAaJ,EAAMtd,SAAS,KAalC,OARI0d,GACFF,EAAWF,EAAMP,MAAM,KAAK,GAC5BU,EAAcH,EAAMP,MAAM,KAAK,KAE/BS,EAAWF,EACXG,EAAc,IAGZP,EACGQ,EAGCD,EAAYrlB,QAAU8U,EACjBiQ,EAAWK,EAAWC,EAAYT,OAAO9P,EAAO,KAGrDiQ,EACAK,EACAC,EAAYb,UAAU,EAAG1P,GACzB,IACAuQ,EAAYb,UAAU1P,GAVnBiQ,EAAWK,EAASR,OAAO9P,EAAQsQ,EAASplB,OAAQ,KAexDslB,EAODP,EACAK,EAASX,SAAS3P,EAAQsQ,EAASplB,OAAQ,KAAK0kB,QAAQ,KAAM,MAC9DW,EAPAN,EACAK,EAASX,SAAS3P,EAAQsQ,EAASplB,OAAQ,KAAK0kB,QAAQ,KAAM,OAYzDa,GAAmB,SAAC9b,GAE/B,IADA,IAAM+b,EAAU,iBACTA,EAAQtD,KAAKzY,IAClBA,EAAQA,EAAMib,QAAQc,EAAS,SAEjC,OAAO/b,GAGI2U,GAAc,SACzBmG,EACAkB,EACAC,EACAC,YADAD,IAAAA,GAAsB,YACtBC,IAAAA,GAAsB,GAEtB,MAA8BpB,EAAOI,MAAM,KAApCiB,cAAOC,aAAU,KAEpBC,IAASJ,EAAaH,GAAiBK,GAASA,OAASC,EAAQpT,MACnE,EACAgT,IACEf,QAAQ,MAAO,IACnB,GAAIiB,GAA8B,IAAhB1iB,OAAO6iB,IAAcA,EAAI9lB,OAAS,EAAG,CACrD,IAAI4J,EAAIkc,EAAIC,YAAY,KACxBD,EAAMA,EAAIrT,MAAM,EAAG7I,GAAKkc,EAAIrT,MAAM7I,GAAG8a,QAAQ,IAAK,KAGpD,OAAOoB,GAGIE,GAAwB,SACnCC,EACAC,GAsBA,OApB2BD,EAAaxjB,KAAI,SAACuT,GAC3C,MAAO,CACLmQ,SAAUD,EACVE,WAAYpQ,EAAEoQ,WACd9Q,QAASU,EAAEqQ,cAAc5jB,KAAI,SAAA6jB,GAC3B,MAAO,CACLC,KAAM,eACNC,OAAQ,CACNC,WAAYH,EAAGG,WACfC,KAAMJ,EAAGI,MAAQ,GACjBrC,IAAKD,GAAOkC,EAAGjC,KACZsC,WACA3a,UACH4a,QAASC,QAAMC,OAAOC,gBAAgBT,EAAGzkB,QAAU,eAqClDmlB,GAAiB,SAC5B1R,EACAvK,GAEA,IAAMvE,EAAM,GACRygB,EAAW,GAEf,IAAK,IAAI3mB,KAAKgV,EACZ2R,EAAS/d,KAAKoM,EAAQhV,IAClBgV,EAAQhV,GAAGyK,cAAgBA,IAC7BvE,EAAI0C,KAAK+d,GACTA,EAAW,IAIf,OAAOzgB,GAGI0gB,GAAwB,SACnCC,EACAC,EACA3B,GAEA,OAAOzB,QACEA,WAAiBoD,QAAQD,GAAS1B,GAAa,GACrDziB,YAGQqkB,GAAY,SACvBC,EACAvc,EACA4T,GAEA,IAAK2I,GAAkC,IAArBA,EAAUtnB,OAC1B,OAAO,EAGT,IAAM4N,EAASoZ,GAAeM,EAAWvc,GAErCnJ,EAAM,IAAIkB,EAAI,GAgBlB,OAdA8K,EAAO2Z,SAAQ,SAAA7kB,GACb,IAAM0T,EAAkB1T,EAAE,GAAGyL,KAAKiI,iBAAmB,IAErDxU,EAAMA,EAAI8G,KACRhG,EACG6E,QACC,SAACC,EAAKC,GAAN,OAAcD,EAAIkB,KAAKjB,EAAI0G,KAAKvM,KAAO6F,EAAI0G,KAAK9L,WAAa,KAC7D,IAAIS,EAAI,IAETC,MAAMqT,GACN5L,IAAIyX,GAAWC,KAAKvD,GAAkB,IAAMA,OAI5C/c,EAAI+kB,YAGAa,GAAiB,SAACtB,GAC7B,IAAKA,EAAW,OAAOA,EAEvB,MAA2BA,EAAUvB,MAAM,KAApC8C,OAASC,OACVC,EAAmBF,EAAQhV,MAAM,EAAG,WAASiV,GAAW,IAE9D,OAAOD,EAAQznB,OAAS,GAAK2nB,EAAgBzB,GAGlC0B,GAAa,CAAC,IAAK,IAAK,IAAK,KAE7BC,GAAW,SAACC,EAAiBC,GACxC,OAAO/D,SAAYA,WAAiB8D,QAAaC,GAAY,CAC3D5D,SAAU,WAID6D,GAA0C,SACrDC,EACAlE,GAEA,OAAOtjB,KAAKC,IAAIuC,OAAOglB,KAAgB,KAClCxnB,KAAKC,IAAIuC,OAAOglB,IAAe,KAAOjc,QAAQ+X,GAAW,GAAK,IAC/DtjB,KAAKC,IAAIuC,OAAOglB,KAAgB,KAC/BxnB,KAAKC,IAAIuC,OAAOglB,IAAe,KAAOjc,QAAQ+X,GAAW,GAAK,IAC/DtjB,KAAKC,IAAIuC,OAAOglB,IAAajc,QAAQ+X,GAAW,IAGzCmE,GAAqB,SAChCnE,EACA3V,EACAqX,GAEA,IAAM0C,EAAWnE,YAAe5V,GAC1Bga,EAAapE,YAAeD,GAASvZ,IAAI,KAE/C,OAAO4T,GACLvb,GAA2BslB,EAAS9b,IAAI+b,GAAYplB,YACpDyiB,IAIS4C,GAAe,SAAC1rB,GAC3B,OAAKA,EAGU,UAAXA,GAAiC,SAAXA,EAA0B,OAFlC,CAAC,SAGLiL,SAASjL,GAAgBA,EACX,MAArBA,EAAO2rB,OAAO,IACnB3rB,EAAO2rB,OAAO,KAAO3rB,EAAO2rB,OAAO,GAAGC,cACpC5rB,EAAO6nB,UAAU,GACjB7nB,EARgB,IAWT6rB,GAAqB,SAAC5mB,EAAa6mB,GAC9C,OAAOzE,QAAWA,eAAkBpiB,iBAA2B6mB,GAAU,IAG9DC,GAAsB,SAAC9mB,GAClC,OAAOoiB,SAAYpiB,EAAK,eAGV+mB,GACdrB,EACAvc,GAEA,OAAKuc,GAAkC,IAArBA,EAAUtnB,OAErBsnB,EACJlV,QAAO,SAAA7J,GAAI,OAAIA,EAAKwC,cAAgBA,KACpCtI,KAAI,SAAA8F,GAAI,OAAI,IAAIzF,EAAIyF,EAAK2N,UAAY,MACrC3O,QAAO,SAACkB,EAAGvH,GAAJ,OAAUuH,EAAEC,KAAKxH,KAAI,IAAI4B,EAAI,IALU,IAAIA,EAAI,OAQ9C8lB,GAA0B,SACrCza,EACAjM,EACAwb,EACAC,GAEA,IAAMvH,EAAkBzT,GAAiB+a,EAAQ9gB,SAAUsF,GAErD2b,EAAalb,GACjB+a,EAAQ9gB,SACRuR,EAAKkI,SAASqH,EAAQjhB,KAElBqhB,EAAcnb,GAClBgb,EAAS/gB,SACTuR,EAAKkI,SAASsH,EAASlhB,KAGnBosB,EAAiB7E,YAAenG,GAChCiL,EAAkB9E,YAAelG,GAEjCiL,EAAmBF,EAAexc,IAAIyc,GAEtCE,EAAiBH,EAAengB,KAAKsb,YAAe5N,IAEpD6S,EAAkBF,EAAiBve,IAAIwe,GAI7C,OAFyBF,EAAgBlgB,MAAMqgB,IAKpCC,GAAuB,SAClC/a,EACAuP,EACAC,GAEA,IAAMwL,EAAiBxmB,GACrB+a,EAAQ9gB,SACRuR,EAAKkI,SAASqH,EAAQjhB,KAGlB2sB,EAAkBzmB,GACtBgb,EAAS/gB,SACTuR,EAAKkI,SAASsH,EAASlhB,KAGzB,OAAOunB,eAAkBmF,QAAoBC,QAGlCC,GAAmC,SAC9CC,EACAC,EACA7L,EACA8L,EACA7L,EACAc,eAkCIgL,EAhCEC,EAAoB7K,GAAaJ,EAAa8K,EAAU,GAAGpb,KAAK1R,IAChEktB,EAAoB9K,GAAaJ,EAAa8K,EAAU,GAAGpb,KAAK1R,IAEhEmtB,EAAeF,GAEfzmB,gBAAOsmB,EAAU,GAAGpb,KAAK3L,cAAlBqnB,EAA0BL,EAAS/sB,KAC1CwG,gBAAOsmB,EAAU,GAAGpb,KAAK3L,cAAlBsnB,EAA0BpM,EAAQjhB,MACzCuG,WACFkmB,GAAqBK,EAAU,GAAGpb,KAAMuP,EAAS8L,GAE/CO,EAAeJ,GAEf1mB,gBAAOsmB,EAAU,GAAGpb,KAAK3L,cAAlBwnB,EAA0BrM,EAASlhB,KAC1CwG,gBAAOsmB,EAAU,GAAGpb,KAAK3L,cAAlBynB,EAA0BT,EAAS/sB,MAC1CuG,WACFkmB,GAAqBK,EAAU,GAAGpb,KAAMqb,EAAU7L,GAEhDuM,EAAqBlG,WAAiB4F,QAAkBG,GAExDI,EAAmBT,EACrBH,EAAU,GAAGjL,eACbsK,GACEW,EAAU,GAAGpb,KACbvL,GAAqB8a,EAAQ9gB,SAAU0sB,GACvC5L,EACA8L,GAGAY,EAA4BvnB,UAChCsnB,SAAAA,EAAkBnnB,aAAc,KAIlC,GAAI2mB,EAAmB,CACrB,IAAMU,EACJ5L,EAAYQ,MAAK,SAAA3U,GAAC,OAAIA,EAAE7N,KAAO8sB,EAAU,GAAGpb,KAAK1R,OAAOgiB,EAAY,GAEhE6L,EAAYvoB,EAChBynB,EAAS/sB,GACTkhB,EAASlhB,GACT2tB,EACAC,EACArM,GAAqBqM,IAEvBZ,EACEa,EAAU,GAAK,EACX,IACAlM,GAAYvb,GAA2BynB,EAAU,GAAGtnB,YAAa,GACvEymB,EAAiB9mB,GACfqb,GAAqBqM,GACrBZ,GAIJ,IAAMc,EAAmBZ,EACrBF,EACAb,GACEW,EAAU,GAAGpb,KACbvL,GAAqB4mB,EAAS5sB,SAAUwtB,GACxCZ,EACA7L,GAGA6M,EAAiBxG,WAClBsF,QAAmBiB,GAGlBE,EAAc,IAAI3nB,EAAI0nB,GACzB5hB,MAAM,IAAI9F,EAAIonB,IACd1f,IAAIggB,GACJznB,MAAM,KACNC,WAEH,OAAOH,GAA2B4nB,IAEvB1G,GAAU,SAAC2G,EAAmBC,GACzC,OAAO3G,eAAkB0G,QAAeC,cAE7BC,GAA4B,SACvCzD,EACAC,EACAyD,YAAAA,IAAAA,EAAsB,KAEtB,IAAML,EAAiBxG,WAAiBmD,QAAUC,GAElD,OAAOpD,SACLD,GACEC,WAAiBwG,QAAoBK,GACrCL,GAEF,CACErG,SAAU,WAKH2G,GAAuB,SAClCle,EACA8Q,EACAC,EACA2L,GAEA,IAAIzL,EAAqB,IACvBC,EAAsB,IAExBlR,EAAM2a,SAAQ,SAACpZ,EAAM7N,GACnB,IAAM6oB,EAAiBxmB,GACrB+a,EAAQ9gB,SACRuR,EAAKkI,SAASqH,EAAQjhB,KAGlB2sB,EAAkBzmB,GACtBgb,EAAS/gB,SACTuR,EAAKkI,SAASsH,EAASlhB,KAGzBohB,EAAa,IAAI/a,EAAI+a,GAAYnV,KAAKygB,GAAgBnmB,WACtD8a,EAAc,IAAIhb,EAAIgb,GAAapV,KAAK0gB,GAAiBpmB,cAG3D,IAAM+nB,EAAmB/G,eAAkBnG,QAAgBC,OAErDkN,EAA0Bpe,EAAMnK,KAAI,SAAA0L,GACxC,OAAOya,GACLza,EACAA,EAAKiI,iBAAmB,IACxBsH,EACAC,MAIEsN,EAAwBjH,YAAAA,EAAYgH,GAEpCR,EAAiBxG,WAClBsF,QAAmB2B,GAGlBR,EAAc,IAAI3nB,EAAI0nB,GACzB5hB,MAAM,IAAI9F,EAAIioB,IACdvgB,IAAIggB,GACJznB,MAAM,KACNC,WAEH,OAAOH,GAA2B4nB,aAGpBS,GACd5V,EACAvK,EACAogB,EACA1M,SAEM7Q,EAASoZ,GAAe1R,EAASvK,GAEjC2S,YAAU9P,EAAO,GAAG,GAAGxG,iBAAS,KAAM+jB,EAEtCzZ,EAAmB9D,EAAO,GAAG,GAAG8D,iBAwChC0Z,EAtCuBxd,EAAOnL,KAAI,SAACC,EAAGpC,GAC1C,YAAM+qB,EAA0B1oB,GAC9B+a,EAAQ9gB,SACR8F,EAAE,GAAGyL,KAAKiI,iBAGZ,GAAI1T,EAAE1C,OAAS,EAAG,CAAA,UACV0d,WAAUhb,EAAE,GAAG0E,eAALkkB,EAAc,GACxB9B,WAAW9mB,EAAE,GAAG0E,eAALmkB,EAAc,GACzB5N,WAAWjb,EAAE,GAAG0E,eAALokB,EAAc,GAE/B,OAAOnC,GACLgC,EACAzd,EAAOtN,GACPod,GAAWyN,EACX3B,GAAY2B,EACZxN,GAAYwN,EACZ1M,GAGF,OAAOI,GAAaJ,EAAa/b,EAAE,GAAGyL,KAAK1R,IACvCmuB,GACES,EACA3oB,EAAE,GAAG4b,gBAAkB,KAErBrb,gBAAOP,EAAE,GAAGyL,KAAK3L,cAAVipB,EAAkB1gB,IACzB9H,gBAAOP,EAAE,GAAGyL,KAAK3L,cAAVkpB,EAAkBhO,EAAQjhB,MACjCuG,YAEJ8nB,GACE,CAACpoB,EAAE,GAAGyL,gBACNzL,EAAE,GAAG0E,iBAAS,KAAMsW,YACpBhb,EAAE,GAAG0E,iBAAS,KAAMsW,EACpB2N,MAK0B9jB,QAClC,SAACokB,EAAKlkB,EAAKnH,GACT,OAAOqrB,EAAIjjB,KACT,IAAI5F,EAAI8K,EAAOtN,GAAG,GAAG6N,KAAKiI,iBAAmB,KAC1C5L,IAAI,IAAI1H,EAAI4O,GAAoB,MAChCrF,IAAI5E,MAIX,IAAI3E,EAAI,IAGV,OAAOD,GAA2BuoB,EAAOpoB,gBAG9B4oB,GAAiB,gBAC5BtE,IAAAA,UACA5J,IAAAA,QACAC,IAAAA,SACAzb,IAAAA,SACAgc,IACAO,YAUIoN,EAAuC,IACvCC,EAAyC,IAE7C,QAAyB,IAAdxE,EAA2B,MAAO,IAE7C,IACyE,MAAvE,GAA0B,WAAtBA,SAAAA,EAAWtnB,SAAgBsnB,EAAU,GAAGzR,SAAWuF,WAASoG,MAC9DqK,EAA+BxC,GAC7BnnB,EACAolB,EACA5J,YACA4J,EAAU,GAAGlgB,iBAAS,KAAMsW,EAC5BC,EACAc,QAEG,GACiB,WAAtB6I,SAAAA,EAAWtnB,SACXsnB,EAAU,GAAGzR,SAAWuF,WAASuG,OACjC,CAAA,QACAkK,EAA+BjB,GAC7BjoB,GAAiB+a,EAAQ9gB,SAAU0qB,EAAU,GAAG5V,kBAChD4V,EAAU,GAAGhJ,gBAAkB,KAE7Brb,gBAAOqkB,EAAU,GAAGnZ,KAAK3L,cAAlBupB,EAA0BpO,EAASlhB,KAC1CwG,gBAAOqkB,EAAU,GAAGnZ,KAAK3L,cAAlBwpB,EAA0BtO,EAAQjhB,MACzCuG,iBAEC6oB,EAA+B,IACtC,MAAOI,GACPJ,EAA+B,IAGjC,IACEC,EAAiCZ,GAC/B5D,EACA3J,EAASlhB,GACTihB,EACAe,GAEF,MAAOwN,GACPH,EAAiC,IAGnC,IAUE,OARExE,EAAU,GAAGzR,SAAWuF,WAASoG,OACjC8F,EAAU,GAAGzR,SAAWuF,WAASuG,OAEdkK,EAEAC,EAIrB,MAAOG,GACP,MAAO,MAIEC,GAAc,SAACC,EAAsBC,GAChD,OAAOpI,SAAYA,WAAiBmI,QAAkBC,GAAiB,CACrEjI,SAAU,oBAIEkI,GAA0Bzf,GACxC,GAAqB,IAAjBA,EAAM5M,OAAc,MAAO,CAAC,OAEhC,GAAI4M,EAAO,CAgBT,IAfA,IAAM0f,EAAiB1f,EAAMnK,KAAI,SAAA0L,GAC/B,OAAO6V,YAAe7V,EAAKiI,oBAGvBmW,EAAe,IAAIvQ,MAAMsQ,EAAetsB,QAAQwsB,KAAK,KAErDrsB,EACsB,IAA1BmsB,EAAetsB,OACXssB,EAAe,GACftI,YAAAA,EAAYsI,GAEZG,EAAeC,SAAOJ,GAAgB,SAAAhiB,GAAC,OAAIrH,OAAOqH,MAEpDqiB,EAAuB,GAElBjgB,EAAI,EAAGA,EAAI+f,EAAazsB,OAAS,EAAG0M,IAAK,CAGhD,IAFA,IAAIkgB,GAAY,EAEP3jB,EAAI,EAAGA,EAAIqjB,EAAetsB,OAAQiJ,IACzC,GAAIqjB,EAAerjB,GAAGwF,GAAGge,EAAa/f,MAAQigB,EAAW/kB,SAASqB,GAAI,CACpE2jB,EAAW3jB,EACX0jB,EAAWzjB,KAAKD,GAChB,MAGJ,IAAMzC,EAAMwd,QACHD,GAAQuI,EAAeM,GAAU5pB,WAAY7C,IACnD6C,WAGDupB,EAAGK,GADe,IAAhB3pB,OAAOuD,GACM,IAEAA,EAInB,IAAMqmB,EAAcN,EAAGzQ,QAAQ,KAO/B,OALAyQ,EAAGM,GAAeX,GAChB,MACc,IAAdK,EAAGvsB,OAAeiD,OAAOspB,EAAG,IAAMvI,YAAAA,EAAYuI,EAAG9pB,KAAI,SAAA6H,GAAC,OAAIrH,OAAOqH,QACjEtH,WAEKupB,EAEP,MAAO,OAIEO,GAAW,WACtB,OAAOhmB,OAAOimB,OAAOC,OAAS,cAEhBC,GAAOvC,EAAmBC,GACxC,OAAO3G,SAAYA,WAAiB0G,QAAeC,GAAgB,CACjExG,SAAU,cAID+I,GAAS,SAASzwB,EAAYoF,GACzC,OAAOpF,IAAOP,wBACV2F,EACAoB,OAAOpB,IAAW,GAClB,IACAsrB,OAAOlqB,OAAOpB,GAAU,cAGdurB,GACdC,EACAC,EACAC,EACAC,GAEA,IAAMC,EAAQhtB,KAAKitB,KAAKJ,EAAQC,GAAe9sB,KAAKitB,IR9sB5B,QQ+sBlBC,EAAYltB,KAAK+H,MAAMilB,GACzBG,EAAiBD,EAIrB,OAHKH,IACHI,EAAiBntB,KAAKotB,MAAMF,EAAYN,GAAcA,GAEpDO,GRltBwB,KAAA,IQotBjBA,ERntBkB,IQotBpB,IAEFA,MAEIE,GAAkB,SAAClsB,GAC9B,OAAQA,GACN,KAAK,IACH,OAAO,EACT,KAAK,IACH,OAAO,EACT,KAAK,IACH,OAAO,GACT,KAAK,IACH,OAAO,IACT,QACE,MAAMmsB,GAAYnsB,KAIXosB,GAAe,gBAC1BC,IAAAA,OACAC,IAAAA,OACAC,IAAAA,QACAC,IAAAA,QACAxsB,IAAAA,IAQA,IAAwC,IAApCysB,GAAkBvS,QAAQla,GAAa,MAAMmsB,GAAYnsB,GAE7D,IAAM0sB,EAAuB,IAAIxrB,EAAIsrB,GAAS5jB,IAAI2jB,GAK5Cd,GAJyBiB,EAC5BvrB,MAAM,IAAID,EAAI,IAAI8S,IAAIsY,EAAOtxB,WAC7B4N,IAAI,IAAI1H,EAAI,IAAI8S,IAAIqY,EAAOrxB,WAEXkxB,GAAgBlsB,IAE7B0rB,EAAQgB,EAERf,EAAc,IAAIzqB,EAAI,IACzB8S,IAAIsY,EAAOtxB,UACX4N,IAAI,IAAI1H,EAAI,IAAI8S,IAAIqY,EAAOrxB,WAC3B+pB,WAEH,OAAOyG,GACLC,EACAxqB,GAA2ByqB,EAAMtqB,YACjCuqB,IAqBSgB,GAAyB,SAACrI,GACrC,MAAO,CACLO,WAAY,kBACZC,KAAM,CACJ8H,mBAAmB,EACnBC,WAAYvI,GAEd7B,IAAK,iBACLxiB,ORt6BwC,QSiB/B6sB,GAAc,WACzB,MAAyB,oBAAX5nB,OACV,IAAI6nB,YAAUC,iBACd,IAAID,YAAUE,6BAGPC,GAAW,IAAIC,YAAUC,gBAAgB,CACpDC,IAAKvzB,IAAYM,UAGNkzB,cAAe,kBAAG,cAAA,kBAAA,6BAAA,OAAA,sBAAA,OAAA,GAC7BhJ,IAAAA,UACAiJ,IAAAA,QAF6BjpB,SAQrBkpB,EAAUC,EAAGD,UACbE,EAAcpoB,KAAKC,MACvBooB,EAAGC,aAAaJ,EAAUD,GAASnsB,YAG/BysB,QAAsBH,SAAAA,EAAab,YAbdvoB,SAAA,MAAA,MAeKwpB,GAfL,OAAA,GAiBvBD,IAAwBvJ,GAjBDhgB,SAAA,MAAA,MAiBkBypB,GAjBlB,OAAA,OAmBrBC,EAAa,IAAIjB,YAAUC,kBACtBiB,OACTn0B,IAAYK,UACZmqB,EACA4J,UAAQC,WAAWT,EAAYU,cAG3BC,EAAS,IAAIC,iBAAeN,qBAE3BK,GA5BoB,QAAA,MAAA/pB,UAAAA,qBAAA,QAAA,UAAA,wCAAH,mBAAA,mCAkCtBiqB,GAAoB,SACxBC,EACAC,GAEA,GAA6B,eAAzBA,EAAUC,WACZ,OAAOD,EAIT,MAAsCA,EAAUC,WAAWC,aAAtCC,IAAAA,aAErB,OAAIJ,EAAYhK,eAFRqK,YAGC,KAGFL,EAAY9a,QAAQ3F,OAAM,SAAAqH,GAC/B,GAAoB,iBAAhBA,EAAOuP,KACT,OAAO,EAGT,MAAgCvP,EAAOwP,OAAnBI,IAAAA,QAEpB,QAAI4J,EAAaxwB,SAAUwwB,EAAa5oB,WAFhC6e,cAMDiK,WAAW9J,IAAY,MAIrB+J,cAAgC,kBAAG,cAAA,0BAAA,6BAAA,OAAA,sBAAA,OAAA,OAG9CxB,IAAAA,QAMMlJ,EAAeD,KARrB4K,gBACA1K,IAAAA,WAF8Cjf,SAW1B6nB,GAAS+B,MAAM,CAAEC,SAAU,UAXD,OAAA,OAWxCD,SAEAE,EAAgE,GAbxB9pB,SAczBioB,GAAgB,CACnChJ,UAAAA,EACAiJ,QAAAA,IAhB4C,OAcxCc,SAKG3vB,EAAI,EAnBiC,QAAA,KAmB9BA,EAAI2lB,EAAajmB,SAnBaiH,UAAA,MAAA,OAoBtCmpB,EAAcnK,EAAa3lB,GApBW2G,UAsBpBgpB,EAAOe,aAC7B9K,EACAxqB,IAAYK,WAxB8B,QAAA,GAsBtCk1B,UAtBsChqB,UAAA,MAAA,MA2BpCiqB,GA3BoC,QAAA,OAAAjqB,UA8BpB6nB,GAASqC,MAAqB,CACpDC,aAAc,kBACdN,SAAU,QACVrC,WAAYvI,EACZmL,WAAYJ,EAAUjuB,aAlCoB,QAAA,GAqCvCmtB,GAAkBC,EAPjBC,WA9BsCppB,UAAA,MAAA,MAsCpCqqB,GAtCoC,QAAA,OAyCtCC,EAAKC,eAAiBC,kBAC1BvL,EACAW,QAAM6K,UAAUvK,KAAK8J,EAAUjuB,YAC/BijB,EAAa3lB,GAAG8lB,WAChBiK,EAAUsB,MAAQrxB,EAAI,EACtB8vB,EAAY9a,QAAQ7S,KAAI,SAAAuU,GACtB,MAA2CA,EAAOwP,OAAnBI,IAAAA,QAC/B,OAAO4K,eAAiBI,eADhBnL,aAAYC,KAIlB,IAAIpC,IAJoBD,KAKxB,IAAIC,EAAGsC,OAGXC,QAAMgL,UAAUC,YAAYjB,EAAMkB,OAAOC,OAvDC/qB,UA0DjBuqB,eAAiBS,gBAC1CV,EACAtB,EACAhK,EAAa3lB,GAAG6lB,SAChBzqB,IAAYK,WA9D8B,QAgE5Cg1B,EAAmB7nB,gBAhEyB,QAmBL5I,GAAK,EAnBA2G,UAAA,MAAA,QAAA,yBAmEvC8pB,GAnEuC,QAAA,UAAA,0BAAH,mBAAA,mCAsEhCmB,cAA2B,kBAAG,cAAA,UAAA,6BAAA,OAAA,sBAAA,OACzCnB,IAAAA,mBADyC7oB,SAMjCiqB,EAAkD,GAE/C7xB,EAAI,EAR0B,OAAA,KAQvBA,EAAIywB,EAAmB/wB,SARAkI,UAAA,MAAA,OAAAA,KASrCiqB,EATqCjqB,SASlB4mB,GAASsD,gBAAgBrB,EAAmBzwB,IAT1B,OAAA4H,YAAAA,KAS7BgB,qBAT6B,QAQQ5I,GAAK,EARb4H,SAAA,MAAA,QAAA,yBAYhCiqB,GAZgC,QAAA,MAAAjqB,UAAAA,qBAAA,QAAA,UAAA,wCAAH,mBAAA,mCCvIlCmqB,GAAU,+DACVC,GAAS,+DAEF3qB,GAAiB,CANZ,oBACC,qBACC,yBAQlB0qB,GACAC,IAGEC,GAAO,IAAIC,UACbC,SAAU/D,KACVroB,QAAS,IACN3K,MAWQg3B,cAAiB,kBAAG,cAAA,QAAA,6BAAA,OAAA,sBAAA,OAAA,OAC/BjM,IAAAA,WACAC,IAAAA,KAF+BxgB,SAIFqsB,GAAK9K,QAAQtrB,sBAJX,OAAA,gCAMTw2B,aAAax2B,qBAAoBsqB,EAAYC,IANpC,OAAA,UAAA,0BAAH,mBAAA,mCASjBkM,cAAc,kBAAG,WAC5BnP,KAD4B,QAAA,6BAAA,OAAA,sBAAA,OAAA,OAE1BgD,IAAAA,WAAYC,IAAAA,KAFczf,SAICsrB,GAAK9K,QAAQtrB,sBAJd,OAAA,gCAMNw2B,aAAalP,EAASgD,EAAYC,IAN5B,OAAA,UAAA,0BAAH,qBAAA,mCASdmM,GAAsB,SACjCpP,EACAyC,GAEA,IAAKA,EAAW,MAAM4M,GAEtB,OAAOF,GAAenP,EAAS,CAC7BgD,WAAY,qBACZC,KAAM,CAAE+H,WAAYvI,MAIX6M,cAAY,kBAAG,WAAOtP,EAAiByC,GAAxB,6BAAA,OAAA,sBAAA,OAAA,GACrBA,GADqBhe,SAAA,MAAA,yBACH,KADG,OAAA,GAGV,SAAZub,GAHsBvb,SAAA,MAAA,yBAIjB8qB,GAAsB9M,UAAiB,WAAA,MAAM,QAJ5B,OAAA,yBAOnB0M,GAAenP,EAAS,CAC7BgD,WAAY,gBACZC,KAAM,CACJ+H,WAAYvI,KAGb3f,MAAK,SAAAC,GACJ,OAAOA,YAEF,WAAA,MAAM,QAhBW,OAAA,UAAA,0BAAH,qBAAA,mCAmBZysB,cAAa,kBAAG,aAAA,6BAAA,OAAA,sBAAA,OAAA,yBACpBP,GAAkB,CACvBjM,WAAY,yBAFa,OAAA,UAAA,0BAAH,kBAAA,mCAMblR,cAAkB,kBAAG,WAChC9Y,EACAy2B,GAFgC,MAAA,6BAAA,OAAA,sBAAA,OAAA,GAI5Bz2B,IAAOL,gBAJqB0gB,SAAA,MAAA,yBAIApd,iBAJA,OAAA,OAAAod,SAMT8V,GAAen2B,EAAI,CACxCgqB,WAAY,uBACL,WACP,MAAM0M,MATwB,OAAA,IAM1BC,UAOMv2B,MAhGI,sBAiGdJ,GAhGe,uBAiGfA,GAhGgB,2BAiGhBA,GACAA,IAAO41B,IACP51B,IAAO61B,IACP71B,IAAOP,yBAnBuB4gB,SAAA,MAAA,8BAsBzBsW,GACHv2B,KAAMgL,EAAiBpL,GACvBA,GAAAA,KAxB4B,OAAA,8BA4BpB22B,GAAU32B,GAAAA,KA5BU,OAAA,UAAA,0BAAH,qBAAA,mCA+BlBmkB,cAAmB,kBAAG,WACjCpK,EACAzE,GAFiC,6BAAA,OAAA,sBAAA,OAAA,OAAAd,SAIJ6E,QAAQC,IACnCS,EAAS/T,KAAI,SAAChG,GAAD,OAAgBsV,EAAUtV,IAAO8Y,GAAmB9Y,OALlC,OAAA,gCAQX8K,QAAO,SAACokB,EAAKlkB,EAAKnH,SACtC,YACKqrB,UACFnV,EAASlW,IAAKmH,QAEhB,KAb8B,OAAA,UAAA,0BAAH,qBAAA,mCAgBnB4rB,cAAkB,kBAAG,aAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAC,SACFZ,GAAkB,CAC9CjM,WAAY,2BAFkB,OAAA,yBAIzBzK,MAAMmL,KAAK,IAAIjT,cAJU,OAAA,UAAA,0BAAH,kBAAA,mCAOlBqf,cAAuB,kBAAG,WACrCrN,GADqC,6BAAA,OAAA,sBAAA,OAAA,GAGhCA,GAHgCjQ,SAAA,MAAA,yBAGd,IAHc,OAAA,yBAK9Byc,GAAkB,CACvBjM,WAAY,8BACZC,KAAM,CAAE+H,WAAYvI,MAPe,OAAA,UAAA,0BAAH,mBAAA,mCAWvB8M,cAAqB,kBAAG,WAAOQ,GAAP,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAC7B1E,EAAW,IAAIC,YAAUC,gBAAgB,CAC7CC,IAAKvzB,IAAYM,4BAGZ8yB,EACJqC,MAAmB,CAClBC,aAAc,eACdN,SAAU,QACVrC,WAAY+E,IAEbjtB,MAAK,SAAAktB,GAAI,OAAIA,EAAK5xB,WAXc,OAAA,UAAA,0BAAH,mBAAA,mCAcrB6xB,GAAyB,SAAC7xB,GAarC,MAZiC,CAC/BukB,WAAYlqB,wBACZmqB,cAAe,CACb,CACEI,WAAY,eACZC,KAAM,GACNrC,IAAK,iBACLxiB,OAAAA,MAQK8xB,GAA0B,SAAC9xB,GAWtC,MAViC,CAC/BukB,WAAYlqB,wBACZmqB,cAAe,CACb,CACEI,WAAY,gBACZC,KAAM,CAAE7kB,OAAQglB,QAAMC,OAAOC,gBAAgBllB,IAC7CA,OAAQrG,MAOHo4B,cAAsB,kBAAG,cAAA,UAAA,6BAAA,OAAA,sBAAA,OAAA,OACpCnN,IAAAA,WACAC,IAAAA,KAFoCmN,SAIPtB,GAAK9K,QAAQtrB,sBAJN,OAAA,GAI9B23B,SAEDt3B,SAAOD,0BANwBs3B,SAAA,MAAA,MAMQE,GANR,OAAA,yBAQ7BD,EAAenB,aACpBn2B,SAAOD,yBACPkqB,EACAC,IAXkC,OAAA,UAAA,0BAAH,mBAAA,mCAetBsN,GAA2B,SACtCvQ,EACAyC,GAEA,OAAO0N,GAAuB,CAC5BnN,WAAY,qBACZC,KAAM,CAAE+H,WAAYvI,MCnOXmI,GAAoB,CAAC,IAAK,IAAK,IAAM,KAqBrC4F,GAAe,SAAChG,EAAgBC,EAAgBtsB,GAC3D,IAAwC,IAApCysB,GAAkBvS,QAAQla,GAAa,MAAMmsB,GAAYnsB,GAI7D,MAFiB,CAACqsB,EAAQC,GAAQ/V,OAAO+b,KAAK,SAExBtyB,GAQXuyB,cAAU,kBAAG,WAAOC,GAAP,UAAA,6BAAA,OAAA,sBAAA,OAAA,OAAAC,EACQD,EAAQzP,MAAM,KAArB/iB,OAEnB0yB,EAAY,YAAmBnc,OAAO+b,KAAK,uBAI1CN,GAAuB,CAC5BnN,WAAY,WACZC,KAAM,CACJ0N,QALmBE,MAAa1yB,MALZ,OAAA,UAAA,0BAAH,mBAAA,mCC9CV2yB,GAAc,SAACC,GAC1B,OAAO,IAAIC,MAAMD,IAGNE,GAAeH,GAAY,4BAE3BvS,GAAsBuS,GACjC,qDAGWpS,GAAiBoS,GAC5B,yCAGW7V,GAAc6V,GAAY,sCAE1BI,GAAgBJ,GAAY,yBAE5BK,GAAiBL,GAC5B,wFAGWpB,GAAqBoB,kCACD74B,IAAYK,WAGhCm1B,GAAoBqD,GAAY,uBAEhCM,GAAqBN,GAAY,yBAEjCjD,GAAwBiD,GAAY,sBAEpC5E,GAAoB4E,GAC/B,wEAGW7E,GAAe6E,GAAY,8BAE3BzB,GAAmByB,GAAY,uBAE/BxG,GAAc,SAACnsB,GAAD,OACzB2yB,kBACiB3yB,kDAAmDysB,KAGzD0F,GAAaQ,yCACc/3B,SAAOT,WAGlC+4B,GAAmB,SAAC7G,EAAgBC,GAAjB,OAC9BqG,uBAAgCtG,SAAaC,IAElC6G,GAAgBR,GAC3B,kDAGWS,GAAe,SAACC,GAAD,OAC1BV,gBAAwBU,GAAY,eAEzBC,GAAwBX,GACnC,oCCnDWY,cAAW,kBAAG,cAAA,8BAAA,6BAAA,OAAA,sBAAA,OAAA,GACzBzX,IAAAA,QAEAxb,IAAAA,SACAkzB,IAAAA,kBAEAlP,IAAAA,UASMD,EAA8B,WAVpCsD,IAAAA,qBAYIA,SAAYA,SAAAA,EAAWvpB,QAAS,aAAI+K,gBAfxC4S,IAAAA,UAeiElhB,IAjBxCwK,SAAA,MAAA,MAkBjB2tB,GAlBiB,OAAA,GAoBnBS,aApBmB,kBAoBH,WAAO3e,GAAP,6BAAA,OAAA,sBAAA,OAAA,OAAAxQ,SACU2sB,GAC5Bnc,EAAMja,GACNypB,UACM,WACN,MAAM,IAAIuO,MAAS/d,EAAMja,yBALP,OAQI,eACtBwpB,EAAa/c,KAAK,CAChBkd,WAAY1P,EAAMja,GAClB4pB,cAAe,CACb,CACEI,WAAY,kBACZC,KAAM,CACJ8H,mBAAmB,EACnBC,WAAYvI,GAEd7B,IAAK,iBACLxiB,Ob7CgC,Ua0BpB,OAAA,UAAA,0BApBG,mBAAA,mCA8CrB6b,EAAQjhB,KAAOD,SAAON,uBA9CD+K,UAAA,MAAA,OAAAA,SA+CE4rB,GACvBr2B,SAAON,sBACPgqB,GAjDqB,OAAA,GAmDJ,eAnDIjf,UAAA,MAAA,OAAAA,UAoDfouB,EAAc3X,GApDC,QAAA,OAAAzW,UAwDnBouB,EAAc1X,GAxDK,QA2DzB,IAASrd,KAFLg1B,EAAmB,GACnBC,EAAiBhM,EAAU9mB,KAAI,SAAAzB,GAAC,MAAI,CAACA,EAAE8J,WAAY9J,EAAE+J,gBAKrDuqB,EAAYpsB,MAHVssB,EAAaD,EAAej1B,IACjB,KAAOod,EAAQjhB,IAAM+4B,EAAW,KAAO7X,EAASlhB,GAE5C,CACf23B,QAAS7K,EAAUjpB,GAAG6N,KAAK1R,GAC3Bg5B,SAAU/X,EAAQjhB,GAClBi5B,UAAW/X,EAASlhB,GACpBk5B,UAAWpM,EAAUjpB,GAAG6N,KAAKiI,gBAC7Bwf,eAAgBptB,GACdmV,EAAS/gB,SACTgG,GACE+a,EAAS/gB,SACTsnB,GAAYkR,EAAmB7L,EAAUjpB,GAAG4V,aAIzCsf,EAAW,KAAO9X,EAAQjhB,GAGlB,CACf23B,QAAS7K,EAAUjpB,GAAG6N,KAAK1R,GAC3Bg5B,SAAUD,EAAW,GACrBE,UAAWF,EAAW,GACtBG,UAAWpM,EAAUjpB,GAAG6N,KAAKiI,gBAC7Bwf,eAAgB,KAKD,CACfxB,QAAS7K,EAAUjpB,GAAG6N,KAAK1R,GAC3Bg5B,SAAUD,EAAW,GACrBE,UAAWF,EAAW,GACtBI,eAAgBptB,GACdmV,EAAS/gB,SACTgG,GACE+a,EAAS/gB,SACTsnB,GAAYkR,EAAmB7L,EAAUjpB,GAAG4V,cAjG7B,OAwGzB+P,EAAa/c,KAAK,CAChBkd,WAAY1I,EAAQjhB,GACpB4pB,cAAe,CACb,CACEI,WAAY,mBACZC,KAAM,CACJ+J,YAAat0B,qBACb0F,OAAQe,GAAqB8a,EAAQ9gB,SAAUsF,GAC/CsyB,IAAKttB,KAAKa,UAAU,CAClB8tB,MAAO,EACPvgB,QAASggB,KAGbjR,IAAK,kBACLxiB,OAAQrG,wBAKPyqB,GA3HkB,QAAA,UAAA,0BAAH,mBAAA,mCCPpB6P,GAAqB,IAEZC,cAAkB,kBAAG,cAAA,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAASt5B,IAAAA,qBAClCi2B,GAAkB,CACvBjM,WAAY,iBACZC,KAAM,CAAE0N,QAASnxB,OAAOxG,MACvB8J,MAAK,SAAAyvB,GAAS,YACZA,GACHv5B,GAAIwG,OAAOxG,GACX8mB,UAAW,mBAPmB,OAAA,UAAA,0BAAH,mBAAA,mCAWlB0S,cAAoB,kBAAG,cAAA,MAAA,6BAAA,OAAA,sBAAA,OAAA,OAASx5B,IAAAA,qBACpCi2B,GAAkB,CACvBjM,WAAY,kBACZC,KAAM,CAAE0N,QAASnxB,OAAOxG,MACvB8J,MAAK,SAAAyvB,GAAS,YACZA,GACHv5B,GAAIwG,OAAOxG,GACX8mB,UAAW,cACX/gB,MAAOwzB,EAAUl2B,UAAU2C,KAAI,SAACvC,GAAD,OAC7B0C,GdvBkC,GcuBa,cATjB,OAAA,UAAA,0BAAH,mBAAA,mCAcpBszB,cAAc,kBAAG,WAAOzX,GAAP,6BAAA,OAAA,sBAAA,OAAA,yBACrB3I,QAAQC,IACb0I,EAAYhc,KAAI,SAAA0L,GAAI,MACC,eAAnBA,EAAKoV,UACDwS,GAAmB,CAAEt5B,GAAI0R,EAAK1R,KAC9Bw5B,GAAqB,CAAEx5B,GAAI0R,EAAK1R,UALZ,OAAA,UAAA,0BAAH,mBAAA,mCAUd05B,cAAO,kBAAG,WAAO15B,GAAP,6BAAA,OAAA,sBAAA,OAAA,OAAA25B,SACR1D,GAAkB,CAC7BjM,WAAY,WACZC,KAAM,CAAE0N,QAAS33B,KAChB8J,MAAK,SAAC4H,GAAD,OAAuBgV,GAAUhV,EAAM1R,MAJ1B,OAAA,iCAAA,OAAA,UAAA,0BAAH,mBAAA,mCAOP45B,cAAW,kBAAG,WACzBC,EACAC,GAFyB,MAAA,6BAAA,OAAA,sBAAA,OAAA,gBACzBD,IAAAA,EAAe,YACfC,IAAAA,EAAkBT,IAEZhhB,GAASwhB,EAAO,GAAKC,EAJFzZ,SAKa4V,GAAkB,CACtDjM,WAAY,YACZC,KAAM,CAAE8P,WAAY1hB,EAAO2hB,MAAOF,KAPX,OAAA,gCAUT9zB,KAAI,SAACi0B,EAASp2B,GAAV,OAAgB6iB,GAAUuT,EAASp2B,EAAIwU,OAVlC,OAAA,UAAA,0BAAH,qBAAA,mCAaX6hB,cAAa,kBAAG,WAAOJ,GAAP,QAAA,6BAAA,OAAA,sBAAA,OAAA,OACvBA,IACFT,GAAqBr1B,KAAKm2B,IAAIL,EAAS,MAFdtlB,SAIFgiB,KAJE,OAAA,OAKrB4D,EAAQp2B,KAAKojB,YAAkBiS,IALV7kB,SAQnB6E,QAAQC,IACZ,UAAIiG,MAAM6a,IAAQrK,KAAK,GAAG/pB,KAAI,SAACvC,EAAGI,GAAJ,OAAU+1B,GAAY/1B,EAAI,OATjC,OAAA,OAOrBsM,SAIJqB,yBAEK,CACLuQ,YAAa5R,EAAMwF,QACjB,SAAA9H,GAAC,OAAIA,EAAEiZ,WAA6B,gBAAhBjZ,EAAEiZ,aAExBuT,aAAclqB,EAAMwF,QAClB,SAAA9H,GAAC,OAAIA,EAAEiZ,WAA6B,gBAAhBjZ,EAAEiZ,aAExBwT,WAAYnqB,EAAMwF,QAAO,SAAA9H,GAAC,OAAIA,EAAEiZ,WAA6B,eAAhBjZ,EAAEiZ,eApBtB,OAAA,UAAA,0BAAH,mBAAA,sHCTbyT,GAAeC,gBAAqB7zB,GAEpC8zB,GAER,gBAAGC,IAAAA,YAAaC,IAAAA,WACOC,WAAgBF,GAAe/zB,GAAlDk0B,OAAOC,OAOd,OALAC,aAAU,WACHL,GACLI,EAASJ,KACR,CAACA,IAGFM,gBAACT,GAAaU,UAASjuB,MAAO6tB,GAAQF,IAqW7BO,GAAoBV,gBAC/B,MAGWW,GAAoB,WAC/B,MAA4CP,WAA8B,IAAnEQ,OAAgBC,OAMvB,OAJAN,aAAU,WACRvxB,IAAoBM,KAAKuxB,KACxB,IAEID,GAGIE,GAAsC,gBAAGX,IAAAA,SAC9CS,EAAiBD,KAEvB,OACEH,gBAACE,GAAkBD,UAASjuB,MAAOouB,GAChCT,KC1bP,SAAqBY,EAAKC,QACX,IAARA,IAAiBA,EAAM,IAC5B,IAAIC,EAAWD,EAAIC,SAEnB,GAAgC,oBAAbC,SAAnB,CAEA,IAAIC,EAAOD,SAASC,MAAQD,SAASE,qBAAqB,QAAQ,GAC9DC,EAAQH,SAASI,cAAc,SACnCD,EAAM/R,KAAO,WAEI,QAAb2R,GACEE,EAAKI,WACPJ,EAAKK,aAAaH,EAAOF,EAAKI,YAKhCJ,EAAKM,YAAYJ,GAGfA,EAAMK,WACRL,EAAMK,WAAWC,QAAUZ,EAE3BM,EAAMI,YAAYP,SAASU,eAAeb,o7LC8GjCc,GAAe,sBAClBC,IAAR3xB,OACAkD,IAAAA,EACAsC,IAAAA,MAQMxF,GAFQ4xB,aAAWhC,IAEV+B,EAAUt2B,KAAI,SAAAuT,GAAC,OAC5BA,EAAEvZ,KAAOP,6BACAY,GAAgBL,GAAIP,0BACzB8Z,MAkBAijB,EAAgB,gBACpBvb,IAAAA,QAMA,OACE+Z,uBACEyB,UAAU,qCACVZ,MAAO,CACLtL,MAAO,SAGTyK,wBACEa,MAAO,CACLa,YAAa,UAdrB7uB,OAmBImtB,wBAAMyB,UAAU,IACdzB,gBAAC2B,GAAK1iB,MAAOgH,OAKf0b,EAAO,gBAAG1iB,IAAAA,MACd,OAAIA,EAAM7Z,KAEN46B,uBACEhe,IAAK/C,EAAM7Z,KACXw8B,IAAI,GACJf,MAAO,CACL70B,aAAc,OACd61B,OAAQ,OACRtM,MAAO,OACPuM,WAAY,KAMhB9B,uBACEa,MAAO,CACL70B,aAAc,OACd61B,OAAQ,OACRtM,MAAO,WAMXwM,EAAM,gBAAG9iB,IAAAA,MACb,OACE+gB,uBACEyB,8CACAZ,MAAO,CACLtL,MAAO,OACPsM,OAAQ,SAGV7B,uBACEyB,yDACAZ,MAAO,CACLa,YAAa,QAGf1B,wBAAMyB,UAAU,uBAfFxV,SAiBhB+T,gBAAC2B,GAAK1iB,MAAOA,MAKnB,OAAsB,IAAlBtP,EAAOpH,OAEPy3B,uBAAKyB,UAAU,sEAGbzB,gBAACwB,GAAcvb,QAAStW,EAAO,GAAIkD,EAAGA,IACtCmtB,uBACEyB,UAAU,GACVZ,MAAO,CACLmB,SAAU,WACVC,OAAQ,QAGVjC,gBAACkC,UAGHlC,gBAAC+B,GAAI9iB,MAAOtP,EAAO,GAAIsc,aAAQ9W,YAAAA,EAAQ,WAARgtB,EAAYn9B,KAC3Cg7B,uBACEyB,UAAU,OACVZ,MAAO,CACLmB,SAAU,WACVC,OAAQ,QAGVjC,gBAACkC,UAGHlC,gBAAC+B,GAAI9iB,MAAOtP,EAAO,GAAIsc,aAAQ9W,YAAAA,EAAQ,WAARitB,EAAYp9B,MAGpB,IAAlB2K,EAAOpH,OAEdy3B,uBAAKyB,UAAU,sEACbzB,gBAACwB,GAAcvb,QAAStW,EAAO,GAAIkD,EAAGA,IACtCmtB,uBAAKyB,UAAU,QACbzB,gBAACkC,UAEHlC,gBAAC+B,GAAI9iB,MAAOtP,EAAO,GAAIsc,aAAQ9W,YAAAA,EAAQ,WAARktB,EAAYr9B,MAIxC,MAIEs9B,GAAa,kBACxBrc,IAAAA,QACAC,IAAAA,SACAqc,IAAAA,KACAp4B,IAAAA,IACAq4B,IAAAA,YACA/3B,IAAAA,SACAgc,IAAAA,UACAlG,IAAAA,YACAsP,IAAAA,UAYMgQ,EAAQ0B,aAAWhC,IAEnBkD,IAAiBnzB,aAAaC,QfzSI,kCe2SJqwB,WAAS6C,IAAgB,GAAtDC,OAAYC,SACuB/C,YAAS,GAA5CgD,OAAeC,OAEhBC,EAAiBjT,EACpBlV,QAAO,SAAAooB,GAAI,OAAIA,EAAK1vB,oBAAe4S,SAAAA,EAASjhB,OAC5CgG,KAAI,SAAA+3B,GAAI,OAAIA,EAAKpzB,UAEdqzB,EAAkBzT,GACtBM,YACAA,EAAUA,EAAUtnB,OAAS,aAAI+K,cAAe,IAG5C6B,EAAQ6tB,EAAgBh4B,KAAI,SAAAC,GAAC,OAAIA,EAAE,MAAID,KAAI,SAAAi4B,GAAG,OAAIA,EAAIvsB,QACtDwsB,EAAWC,WAAQ,WACvB,OAAKhuB,GAA0B,IAAjBA,EAAM5M,OACbqsB,GAA0Bzf,GADQ,KAExC,CAACA,IAEEiuB,EAAqBD,WAAQ,WACjC,OAAK5iB,GAAgB0F,GAAYxb,EApPP,SAC5BuH,EACAiU,EACA4L,GAEA,IAAMwR,EACJ73B,OAAOwG,IAAU,EACb,kBACA,EAAIxG,OAAOwG,IAAUxG,OAAOwG,IAAU,EACtC,YACA,aAEAsxB,EAAel4B,GACnBglB,GAASyB,GAAiB,IAAK2D,GAAOxjB,EAAO,SAGzCuxB,EACJ/3B,OAAO83B,IAAiB,UACZ1S,GAAa3K,EAAQ/gB,eACtBqrB,GACL+S,EACA,OACG1S,GAAa3K,EAAQ/gB,QAEhC,OAAIsG,OAAOwG,GAAS,IAEhBguB,wBAAMyB,UAAU,8BAEb8B,GAIH/3B,OAAOwG,GAAS,IAEhBguB,wBAAMyB,UAAU,yBAEb8B,GAKLvD,wBAAMyB,UAAc4B,sBACX1c,GAAY3U,EAAO,OACzBuxB,GA0MIpP,CAAe5T,EAAa0F,EAASxb,GADM,OAEjD,CAAC8V,EAAa0F,EAASxb,IAC1B,IAAKwb,IAAYC,EAAU,OAAO,KAElC,IAAMsd,OAAmB5S,GAAa3K,EAAQ/gB,eAC5CsG,OAAO+2B,GAAQ,IAAO,SAAW5b,GAAY4b,EAAM,QACjD3R,GAAa1K,EAAShhB,QAEpBu+B,EAAa,IAAIp4B,EAAI,GAAG0H,IAAIyX,GAAWC,KAAK8X,GAAQ,IAAMA,GAAQ,KAElEmB,OAAyB9S,GAAa1K,EAAShhB,eACnDsG,OAAOi4B,GAAc,IAAO,SAAW9c,GAAY8c,EAAWl4B,WAAY,QACxEqlB,GAAa3K,EAAQ/gB,QAOvB8G,EAQE6zB,EAHFxzB,YACAC,EAEEuzB,EAFFvzB,YAIF,OACE0zB,uBACEyB,UAAU,iEACVZ,MAAO,CACL8C,MANF9D,EATF9zB,YAkBEi0B,uBAAKyB,UAAU,6EACbzB,uBACEa,MAAO,CACL8C,MAZN9D,EAVF/zB,QAuBQ83B,OAAQ,WAEVnC,UAAU,oCACVoC,QAAS,WACHnB,EAAYpzB,aAAaw0B,Wf3WC,gCe6W5Bx0B,aAAae,Qf7We,+Be6WqB,KAEnDsyB,GAAeD,KAGjB1C,qCACAA,uBACEa,MAAO,CACLmB,SAAU,aAGuBhC,gBAAjC0C,EAAkCqB,cAApBC,wBAInBv5B,GAAYgc,GACXuZ,uBAAKyB,UAAU,qCACbzB,2BAAM4C,EAAgBc,EAAoBF,GAE1CxD,gBAACiE,kBACCJ,QAAS,WACPhB,GAAkBD,IAEpBsB,KAAM,GACNrD,MAAO,CACLsD,WAAY,MACZP,OAAQ,WAEV7O,KAAMzoB,MAKZo2B,EACA1C,gCACEA,uBAAKyB,UAAU,6EACbzB,+CACAA,2BAAMrZ,GAAY6b,GAAe,IAAK,KAGxCxC,uBAAKyB,UAAU,6EACbzB,kCAEAA,2BACIv1B,EAEKsmB,GAAmB5mB,EAAKM,OAAammB,GACtC3K,EAAQ/gB,YACLyhB,GAAYsK,GAAoB9mB,GAAKoB,WAAY,QAHtD,OAZG,KAqBbm3B,EACA1C,gCACEA,uBAAKyB,UAAU,6EACbzB,2CAEAA,2BAAMoD,KALG,KAUdvT,GAAaA,EAAUtnB,OAAS,GAAKm6B,GACpC1C,uBACEyB,UAAU,kEACVZ,MAAO,CACLuD,oBAAqB/3B,EACrBg4B,cAAehP,KAAa,SAAW,MACvC2M,SAAU,WACVsC,WAAY,aACZC,eAAgB,kBAGlBvE,uBAAKyB,UAAU,qCACbzB,gBAACwE,SACDxE,wBACEyB,UAAU,+BACVZ,MAAO,CACLsD,WAAY,MACZM,WAAY,WAGb,gBAILzE,uBACEyB,UAAU,GACVZ,MAAO,CACLtL,MAAOF,KAAa,OAAS,OAC7BqP,SAAWrP,KAAqB,GAAR,QAGzByN,EAAe5qB,OAAM,SAAAjN,GAAC,QAAMA,MAC3B63B,EAAe93B,KAAI,SAAC2E,EAAQ0N,GAC1B,OAAK1N,EAEHqwB,gBAACqB,IACCsD,IAAKtnB,EAAQ,cACb1N,OAAQA,EACRkD,EAAGqwB,EAAS7lB,GACZlI,MAAO6tB,EAAgB3lB,GAAOrS,KAAI,SAAAi4B,GAAG,OAAIA,EAAIvsB,UAN7B,YAiBvBkuB,GAAmB,gBAC9BC,IAAAA,IACAC,IAAAA,eACA7lB,IAAAA,MACA7U,IAAAA,OAOM26B,EAAYtU,GAAmB,GAAIoU,EAAK5lB,EAAM9Z,UAE9C06B,EAAQ0B,aAAWhC,IAKvBxzB,EAOE8zB,EAPF9zB,UACAC,EAME6zB,EANF7zB,aACAC,EAKE4zB,EAJF3zB,MACAC,EAGE0zB,EAHF1zB,OACAC,EAEEyzB,EADFxzB,cAGgCuzB,YAAkB,GAA7CoF,OAAWC,SACcrF,YAAkB,GAA3CsF,OAAUC,OAEjB,OACEnF,uBAAKyB,UAAU,mFACbzB,wBACEyB,UAAU,sDACVZ,MAAO,CACL8C,MAAO53B,EACPC,aAAAA,EACAo4B,oBAAqB/3B,EACrBq1B,YAAa,MAEb0D,WACEh7B,IAAW26B,GAAcva,GAAWC,KAAKsa,GAErCC,EACA94B,EACA,cAHAC,GAKRk5B,aAAc,WAAA,OAAMJ,GAAa,IACjCK,aAAc,WAAA,OAAML,GAAa,IACjCpB,QAAS,WACP,IAAM0B,EAAO9U,GAAmB,GAAIoU,EAAK5lB,EAAM9Z,UAE/C2/B,EAAeS,aAMnBvF,wBACEyB,UAAU,qDACVoC,QAAS,WACPiB,EAAeD,IAEjBQ,aAAc,WAAA,OAAMF,GAAY,IAChCG,aAAc,WAAA,OAAMH,GAAY,IAChCtE,MAAO,CACL8C,MAAO53B,EACPC,aAAAA,EACAo4B,oBAAqB/3B,EACrB+4B,WACEh7B,IAAWy6B,GAAQra,GAAWC,KAAKoa,GAE/BK,EACAh5B,EACA,cAHAC,aAYHq5B,GAAc,SAACC,SAExBC,EASED,EATFC,QACAC,EAQEF,EAPFxmB,MACA2mB,EAMEH,EANFG,cACAx7B,EAKEq7B,EALFr7B,OACA06B,EAIEW,EAJFX,eACAjP,EAGE4P,EAHF5P,MACAgQ,EAEEJ,EAFFI,cACAC,EACEL,EADFK,kBAGIjG,EAAQ0B,aAAWhC,IAIvBzzB,EAQE+zB,EARF/zB,QACAC,EAOE8zB,EAPF9zB,UACAC,EAME6zB,EAJF3zB,MACAC,EAGE0zB,EAFFzzB,YACAC,EACEwzB,EADFxzB,YAGIm0B,EAAMuF,SAAyB,QAECnG,YAAkB,GAAjDoG,OAAaC,OAEdC,EAAe,SAAC97B,GAChB06B,GACFA,EAAe16B,GAEbo2B,EAAI2F,UACN3F,EAAI2F,QAAQn0B,MAAQ5H,IAIxB21B,aAAU,WAYD,MAVLS,EAAI2F,SACJrB,GACA7lB,GACAymB,GACAzmB,EAAMja,KAAOP,yBACb+G,OAAOk6B,GAAWl6B,OAAOg1B,EAAI2F,QAAQn0B,OAAS,GAE9CwuB,EAAI2F,QAAQC,kBACV,+DAGF5F,EAAI2F,YAASC,kBAAkB,MAEhC,CAAC5F,EAAKkF,EAASlF,EAAI2F,iBAAS3F,EAAI2F,gBAAJE,EAAar0B,MAAOiN,EAAO7U,IAE1D,IAAMk8B,EAASrnB,EAAQwW,GAAOxW,EAAMja,GAAI0gC,GAAW,KAAO,IAE1D,OACE1F,gCACEA,uBACEyB,UAAU,kCACVZ,MAAO,CACLuE,WAAYh5B,EACZi4B,cAAehP,KAAa,SAAW,QAGzC2K,uBACEyB,UAAU,oCACVZ,MAAO,CACLtL,MAAOF,KAAa,OAAS,QAG/B2K,uBACEyB,UAAU,uFACVZ,MAAO,CACL8C,MAAO73B,EACPs5B,WAAYY,EAAc95B,EAAQ,cAClCk4B,sBAAsB4B,EAAc35B,EAAc,gBAEpDw3B,QAAS+B,EACTP,aAAc,WAAA,OAAMY,GAAe,IACnCX,aAAc,WAAA,OAAMW,GAAe,KAEjChnB,EAaA+gB,gCACEA,uBACEhe,UAAK/C,SAAAA,EAAO7Z,KACZw8B,IAAI,GACJH,UAAU,+BACVZ,MAAO,CACLgB,OAAQ,OACRtM,MAAO,OACPmM,YAAa,SAGjB1B,4BAAOpP,SAAa3R,SAAAA,EAAO/Z,UAvB7B86B,gCACEA,wBACEa,MAAO,CACL4D,WAAY,SACZ5C,OAAQ,QAEVJ,UAAU,sDAoBhBzB,gBAACgE,iBACCnD,MAAO,CACLsD,WAAY,MACZrC,WAAY,MAKjB+D,GACC7F,gBAACuG,iBACC9E,UACwB,YAAtBqE,EACI,6BACA,GAENjF,MAAO,CACL+C,OAAQ,UACRD,MAAO53B,GAETm4B,KAAM,GACNL,QAAS,WACPgC,QAMR7F,uBACEyB,UAAU,wCACVZ,MAAO,CACLtL,MAAOF,KAAa,OAAS,QAG/B2K,yBACEQ,IAAKA,EACLqE,IAAOC,EAAiBwB,OAAS5e,EACjCyX,IAAI,IACJqH,QAAS,WACHhG,EAAI2F,SACN3F,EAAI2F,QAAQM,QAGhBhF,UAAU,gCACViF,KAAK,MACL10B,MAAO5H,EACP0kB,KAAK,SACL6X,YAAc7B,EAAuB,MAAN,IAC/B8B,SAAU,gBAAG/hB,IAAAA,OACXA,EAAOuhB,kBAAkB,IACzBF,EAAarhB,EAAO7S,QAEtB60B,UAAW/B,EACXgC,UAAW,SAAAvwB,GAAC,OAAI4Z,GAAWhgB,SAASoG,EAAEouB,MAAQpuB,EAAEwwB,kBAChDlG,MAAO,CACL8C,MAAO73B,EACPk7B,aAAc,MACdzR,MAAO,OACP0R,UAAW,QACXC,SAAU,UAIdlH,uBACEa,MAAO,CACLqG,SAAU,OACVvD,MAAO53B,EACPk7B,UAAW,UAGXpR,EAEE,KACAtF,GACEH,GAASyF,EAAOzrB,GAAU,KAC1B,GAJF,QAURs7B,GAAYzmB,GAAU6lB,EACtB9E,uBACEyB,UAAU,2EACVZ,MAAO,CACLqG,SAAU,OACVvD,MAAO53B,IAGTi0B,wCAEGrZ,GAAY+e,EAAS,IAEvBzmB,GACC+gB,gBAAC4E,IACC3lB,MAAOA,EACP4lB,IAAKpP,GAAOxW,EAAMja,GAAI0gC,GACtBZ,eAAgBoB,EAChB97B,OAAQA,KAjByB,OA0BlC+8B,GAAmB,gBAC9BxJ,IAAAA,kBACAyJ,IAAAA,0BACAC,IAAAA,SACAC,IAAAA,cAO8B1H,YAAkB,GAAzC2H,OAASC,OAEV3H,EAAQ0B,aAAWhC,IAEvB3zB,EAUEi0B,EAVFj0B,UACAC,EASEg0B,EATFh0B,SACAC,EAQE+zB,EARF/zB,QACAC,EAOE8zB,EANF7zB,aACAC,EAKE4zB,EADFxzB,YAGIm0B,EAAMuF,SAAyB,MA0BrC,OAVAhG,aAAU,WACR,GAAKsH,EAIL,OAFA3G,SAAS+G,QAAU,WAAA,OAAMH,GAAY,IAE9B,WACL5G,SAAS+G,QAAU,QAEpB,CAACJ,EAAUC,IAETD,EAGHrH,uBACEyB,UAAU,uEACVoC,QAAS,SAAAttB,GAAC,OAAIA,EAAEmxB,mBAChB7G,MAAO,CACLuE,WAAYx5B,EACZw4B,oBAAqB/3B,IAGvB2zB,wBACEa,MAAO,CACL8C,MAAO73B,EACP67B,cAAe,+BAMnB3H,uBACEyB,uDAGAzB,uBACEyB,2GAEAZ,MAAO,CACLuD,qBAAqBmD,EAAU,UAAYl7B,GAC3CL,aAAAA,IAGFg0B,yBACEQ,IAAKA,EACLqE,IAAK,SACL1F,IAAK,KACLyI,aAAcjK,GAAwC,GACtD6I,QAAS,WACHhG,EAAI2F,SACN3F,EAAI2F,QAAQM,QAGhBz0B,MAAO2rB,EACP+I,KAAK,MACL5X,KAAK,SACL+Y,UAAU,EACVlB,YAAY,GACZC,SAAU,YAAA,IAvEEx8B,EAuEF,OAvEEA,IAuECya,OAAiC7S,MAtEtDo1B,EAA0B57B,OAAOpB,IAE7BoB,OAAOpB,GAAU,GAAKoB,OAAOpB,GAAU,IACzCo9B,GAAW,GAEXA,GAAW,QAGThH,EAAI2F,UACN3F,EAAI2F,QAAQn0B,MAAQ5H,KA8Dd08B,UAAW,SAAAvwB,GAAC,OAAI4Z,GAAWhgB,SAASoG,EAAEouB,MAAQpuB,EAAEwwB,kBAChDlG,MAAO,CACLtL,MAAO,OACPoO,MAAO4D,EAAU,UAAYz7B,GAE/B21B,UAAU,kCAEZzB,wBAAMyB,UAAU,cAGlBzB,0BACEyB,kFACEpM,KACI,mCACA,mCAENwL,MAAO,CACL8C,MAAO73B,EACPs5B,WAAYv5B,EACZG,aAAAA,GAEF63B,QAAS,SAAAttB,GACPA,EAAEmxB,kBACFnxB,EAAEwwB,iBACFK,EAA0B,IAC1BI,GAAW,cAMhBD,GACCvH,uBACEyB,UAAU,kDACVZ,MAAO,CACL8C,MAAO,UACPuD,SAAU,OACVY,QAAS,WACTxD,WAAY,UAGdtE,gBAAC+H,aACCtG,UAAU,GACVZ,MAAO,CACLa,YAAa,OAEfwC,KAAM,KAERlE,2BAAM,wCAhGQ,MAuGlBgI,GAAY,gBAChBnS,IAAAA,MACA5W,IAAAA,MACAgpB,IAAAA,SACApE,IAAAA,QAOMhE,EAAQ0B,aAAWhC,IAIvBzzB,EAUE+zB,EAVF/zB,QACAC,EASE8zB,EATF9zB,UACAC,EAQE6zB,EANF3zB,MACAC,EAKE0zB,EAHFxzB,cAKgCuzB,YAAS,GAApCsI,OAAWC,SAEkBvI,YAAS,GAA1BwI,OAEnB,OACEpI,uBACEyB,UAAU,iEACV4D,aAAc,WAAA,OAAM8C,GAAa,IACjC7C,aAAc,WAAA,OAAM6C,GAAa,IACjCtE,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACF7D,EAAQ5kB,IAEV4hB,MAAO,CACLuE,WAAY8C,EAAYh8B,EAAQ,cAChCk4B,oBAAqB/3B,IAGtB67B,GACClI,uBACEa,MAAO,CACLmB,SAAU,WACVqG,IAAK,OACLC,MAAO,OACPC,UAAW,kCACXnE,oBAAqB/3B,EACrBL,aAAc,OACdupB,MAAO,OACPsM,OAAQ,OACRuD,WAAY,WAEdvB,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACFO,EAAShpB,IAEXomB,aAAc,WAAA,OAAM+C,GAAc,IAClC9C,aAAc,WAAA,OAAM8C,GAAc,KAElCpI,gBAACwI,kBAAeC,YAAqB,QAAU,aAInDzI,uBACEhe,IAAK/C,EAAM7Z,KACXw8B,IAAI,GACJH,UAAU,+BACVZ,MAAO,CACLgB,OAAQ,OACRtM,MAAO,OACPmM,YAAa,SAIjB1B,uBAAKyB,UAAU,oCACbzB,wBACEa,MAAO,CACLqG,SAAU,OACVvD,MAAO73B,IAGR8kB,GAAa3R,EAAM/Z,SAGtB86B,wBACEa,MAAO,CACLqG,SAAU,OACVvD,MAAO53B,IAGP8pB,EAEE,IAAMtF,GAAwCsF,EAAO,GADrD,SAoBR6S,GAAQ,gBACZzpB,IAAAA,MACA4kB,IAAAA,QACAhO,IAAAA,MACA6P,IAAAA,QACAiD,IAAAA,SACAC,IAAAA,WACAvrB,IAAAA,MACAwrB,IAAAA,cACAC,IAAAA,WAEMjJ,EAAQ0B,aAAWhC,IAIvBzzB,EAUE+zB,EAVF/zB,QACAC,EASE8zB,EATF9zB,UACAC,EAQE6zB,EANF3zB,MACAC,EAKE0zB,EAFFvzB,YACAC,EACEszB,EADFtzB,UAGIw8B,EACJ,EAAIv9B,OAAOk6B,IAAYl6B,OAAOk6B,GAAW,KACrC,UACA/e,GAAY+O,OAAOgQ,GAAU,KAEK9F,YAAS,GAA1CoJ,OAAcC,SAEWrJ,YAAS,GAAlCsJ,OAAUC,OAEjB,OACEnJ,uBACEyB,UAAU,qFACVZ,MAAO,CACLuE,WAAY0D,IAAezrB,EAAQnR,EAAQ,eAE7C23B,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACF7D,EAAQ5kB,IAEVomB,aAAc,WAAA,OAAMwD,EAAcxrB,IAClCioB,aAAc,WAAA,OAAMuD,GAAe,KAEnC7I,uBACEyB,UAAU,oCACVZ,MAAO,CACL0D,eAAgB,kBAGlBvE,uBACEhe,IAAK/C,EAAM7Z,KACXw8B,IAAI,GACJH,UAAU,+BACVZ,MAAO,CACLgB,OAAQ,OACRtM,MAAO,OACPmM,YAAa,UAIjB1B,uBAAKyB,UAAU,oCACbzB,wBACEa,MAAO,CACLqG,SAAU,OACVvD,MAAO73B,GAET21B,UAAU,qCAET7Q,GAAa3R,EAAM/Z,QAEnBI,EAAW2Z,EAAM/Z,SAChB86B,gBAACoJ,yBACC/D,aAAc,WAAA,OAAM4D,GAAgB,IACpC3D,aAAc,WAAA,OAAM2D,GAAgB,IACpCpI,MAAO,CACLsD,WAAY,MACZkF,UAAW,OAEbxF,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACFr4B,OAAOi6B,KAAKhkC,EAAW2Z,EAAM/Z,QAAS,WAExCujC,OAAQO,EAAez8B,EAAYD,KAKzC0zB,wBACEa,MAAO,CACLqG,SAAU,OACVvD,MAAO53B,EACPs9B,UAAW,QAGXxT,EAEE,IAAMtF,GAAwCsF,EAAO,GADrD,QAMVmK,uBACEyB,UAAU,oCACVZ,MAAO,CACL8C,MAAO73B,IAGRi9B,EAEAJ,EACC3I,gBAACuJ,iBACClE,aAAc,WAAA,OAAM8D,GAAY,IAChC7D,aAAc,WAAA,OAAM6D,GAAY,IAChCpU,KAAMmU,GAAYJ,IAAezrB,EAAQ9Q,EAAYD,EACrDu0B,MAAO,CACLsD,WAAY,OACZP,OAAQ,WAEVC,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACFkB,EAAW3pB,MAIf+gB,gBAACwJ,oBACC3I,MAAO,CACLsD,WAAY,OACZP,OAAQ,WAEVyB,aAAc,WAAA,OAAM8D,GAAY,IAChC7D,aAAc,WAAA,OAAM6D,GAAY,IAChCpU,KAAMmU,GAAYJ,IAAezrB,EAAQ9Q,EAAYD,EACrDu3B,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACFkB,EAAW3pB,SAmBZwqB,GAAiB,gBAC5B95B,IAAAA,OACAk0B,IAAAA,QACA6F,IAAAA,SACAtJ,IAAAA,eACAuJ,IAAAA,SACAC,IAAAA,YACA3B,IAAAA,WAEsCrI,WAAS,QAAxCiK,OAAaC,OACdjK,EAAQ0B,aAAWhC,IAKvBxzB,EASE8zB,EATF9zB,UACAC,EAQE6zB,EAHFxzB,YAKIu8B,EAAa,SAAC3pB,GAClB,GAAI0qB,EAASx5B,SAAS8O,EAAMja,IAC1BijC,EAAShpB,OACJ,CACL,IAAM8qB,YAAcJ,GAAU1qB,EAAMja,KACpC4kC,EAAYG,OAIoBnK,YAAU,GAAvCkJ,OAAYD,OAWnB,OAAQl5B,GAA4B,IAAlBA,EAAOpH,OACvBy3B,uBAAKyB,UAAU,sCACbzB,uBACEyB,UAAU,4CACVZ,MAAO,CACL8C,MAAO53B,EACPi+B,0BAA2B39B,IAG7B2zB,wBAAMyB,UAAU,aAEhBzB,wBACE6D,QAAS,WACPiG,EAA+B,OAAhBD,EAAuB,OAAS,OAEjDhJ,MAAO,CACL+C,OAAQ,WAEVnC,UAAU,qCAEVzB,wBAAMyB,UAAU,mBACQzB,gBAAP,OAAhB6J,EAAwBI,kBAAsBC,4BAInDlK,uBAAKyB,UAAU,8CACZ9xB,EAAO+Q,MAnCO,SAAC1P,EAAkBvH,GACtC,IAAM0gC,EAAKT,EAAS14B,EAAEhM,IAChBsS,EAAKoyB,EAASjgC,EAAEzE,IAEtB,MAAoB,OAAhB6kC,EACKr+B,OAAO2+B,GAAM3+B,OAAO8L,GACf9L,OAAO8L,GAAM9L,OAAO2+B,MA6BHn/B,KAAI,SAACiU,EAAO5B,GAAR,MAAA,OAC7B2iB,gBAAC0I,IACC/D,IAAK1lB,EAAMja,GAAK,2BAA6BqY,EAC7CwmB,QAASA,EACTxmB,MAAOA,EACP4B,MAAOA,EACP4W,YAAOuK,YAAAA,EAAiBnhB,EAAMja,YAAvBolC,EAA4BvU,MACnC6P,eAASgE,SAAAA,EAAWzqB,EAAMja,MAAO,IACjC4jC,WAAYA,EACZD,SAAUgB,EAASx5B,SAAS8O,EAAMja,IAClC6jC,cAAeA,EACfC,WAAYA,SArCkB,MA6C7BuB,GAAgB,gBAC3BC,IAAAA,SACA/U,IAAAA,MACA5lB,IAAAA,OACA46B,IAAAA,QACA9b,IACAib,SACAjI,IAAAA,UAUM5B,EAAQ0B,aAAWhC,IAEvB3zB,EAWEi0B,EAXFj0B,UACAC,EAUEg0B,EAVFh0B,SACAC,EASE+zB,EATF/zB,QACAC,EAQE8zB,EAHFzzB,YACAE,EAEEuzB,EAFFvzB,cAIoCszB,WAAiB,IAAhD4K,OAAaC,OAEdrK,EAAiBmB,aAAWrB,IAM5BwK,EAAoBp7B,aAAaC,Qf90CvC,oCe+0CIE,KAAKC,MAAMJ,aAAaC,Qf/0C5B,qCe+0CuE,MACnE,KAEEo7B,EACsB,YAA1B1mC,IAAYK,UACRmH,EACAC,IAE0Bk0B,WAC9B8K,GAAqBC,GADhBhB,OAAUC,OAIX3B,EAAW,SAAChpB,GAChB,IAAM2rB,EAAcjB,EAAShvB,QAAO,SAAAkwB,GAAS,OAAIA,IAAc5rB,EAAMja,MAErE4kC,EAAYgB,GAEZt7B,aAAae,Qfh2Cf,mCek2CIZ,KAAKa,UAAUs6B,KAYnB,OACE5K,uBACEyB,0EAA2EA,EAC3EZ,MAAO,CACLmB,SAAU,WACVzM,MAAAA,EACA6P,WAAYx5B,IAGdo0B,gBAAC8K,iBACCjH,QAAS0G,EACT1J,MAAO,CACL8C,MAAO73B,EACPk2B,SAAU,WACV4B,OAAQ,aAGZ5D,uBACEyB,UAAU,mEACVZ,MAAO,CACL8C,MAAO73B,EACPy4B,eAAgB,SAChBoD,cAAe,2BAMnB3H,uBACEyB,UAAU,yEACVZ,MAAO,CACLuD,oBAAqBv4B,EACrBu5B,WAAYh5B,IAGd4zB,gBAAC+K,YACChW,KAAMzoB,EACNu0B,MAAO,CACLa,YAAa,SAIjB1B,yBACEyB,UAAU,gCACVkF,YAAY,kBACZC,SAAU,SAAAoE,GAhFhBP,EAgFoCO,EAAInmB,OAAO7S,QACzC6uB,MAAO,CACLqG,SAAU,OACVvD,MAAO73B,MAKbk0B,uBAAKyB,UAAU,kFACZkI,EAAS3+B,KAAI,SAAAhG,SACZ,IAAK2K,GAA4B,IAAlBA,EAAOpH,OAAc,OAAO,KAE3C,IAAM0W,EAAQtP,EAAO6X,MAAK,SAAAvI,GAAK,OAAIA,EAAMja,KAAOA,KAEhD,OAAQia,EACN+gB,gBAACgI,IACCrD,IAAK1lB,EAAMja,GAAK,cAChBia,MAAOA,EACP4W,YAAOuK,YAAAA,EAAiBnhB,EAAMja,YAAvBimC,EAA4BpV,MACnCoS,SAAUA,EACVpE,QAASyG,IANG,SAYpBtK,gBAACyJ,IACC95B,OAAQA,EAAOgL,QAhFG,SAACsE,SACvB,IAAKurB,EAAa,OAAO,EAEzB,IAAMU,EAAmBV,EAAYW,cAErC,gBAAOlsB,EAAM/Z,iBAAQimC,cAAch7B,SAAS+6B,MAAqB,KA4E7D9K,eAAgBA,EAChByD,QAASyG,EACTZ,SAAUA,EACVC,SAAUA,EACVC,YAAa,SAAAD,GACXC,EAAYD,GACZr6B,aAAae,Qf77CrB,mCe+7CUZ,KAAKa,UAAUq5B,KAGnB1B,SAAUA,MAMLmD,GAAS,gBACpB/D,IAAAA,SACAC,IAAAA,cAK0B1H,YAAS,GAArByL,OAEd,OACErL,uBACEzK,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,6BACNlG,aAAc,WAAA,OAAMgG,GAAS,IAC7B/F,aAAc,WAAA,OAAM+F,GAAS,IAC7BxH,QAAS,WAAA,OAAMyD,GAAY,KAE3BtH,wBACEwL,SAAS,UACTC,SAAS,UACT7iC,EAAE,2rDACFmsB,WAAesS,EAAW,UAAY,cAMjCqE,GAAU,SAACjG,GACtB,OACEzF,uCACMyF,GACJlQ,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,+BAENvL,wBAAMp3B,EAAE,qCAAqCmsB,KAAK,iBAClDiL,wBACEp3B,EAAE,iEACFmsB,KAAK,YAEPiL,wBACEwL,SAAS,UACTC,SAAS,UACT7iC,EAAE,sUACFmsB,KAAK,iBAEPiL,wBACEwL,SAAS,UACTC,SAAS,UACT7iC,EAAE,iJACFmsB,KAAK,iBAEPiL,wBACEwL,SAAS,UACTC,SAAS,UACT7iC,EAAE,kIACFmsB,KAAK,mBAMA4W,GAAU,WACrB,OACE3L,uBACEzK,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,6BACN9J,UAAU,6BAEVzB,0BACE4L,GAAG,KACHC,GAAG,KACH5gC,EAAE,KACFw9B,OAAO,UACPqD,YAAY,IACZC,cAAc,UAEhB/L,wBACEp3B,EAAE,wFACF6/B,OAAO,UACPqD,YAAY,IACZC,cAAc,YAMTC,GAAU,WACrB,OACEhM,uBACEzK,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,8BAENvL,wBACEp3B,EAAE,4LACF6/B,OAAO,UACPqD,YAAY,IACZC,cAAc,UAEhB/L,wBACE3tB,GAAG,KACH45B,GAAG,KACHC,GAAG,KACHC,GAAG,KACH1D,OAAO,UACPqD,YAAY,IACZC,cAAc,UAEhB/L,0BAAQ4L,GAAG,KAAKC,GAAG,KAAK5gC,EAAE,IAAI8pB,KAAK,cAK5BqX,GAAU,WACrB,OACEpM,uBACEa,MAAO,CACLmB,SAAU,WACVH,OAAQ,OACRtM,MAAO,SAGTyK,uBACEzK,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,6BACN1K,MAAO,CACLmB,SAAU,WACVqG,IAAK,EACLgE,KAAM,IAGRrM,0BACE4L,GAAG,KACHC,GAAG,KACH5gC,EAAE,KACFw9B,OAAO,UACPqD,YAAY,IACZC,cAAc,WAIlB/L,uBACEzK,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,6BACN1K,MAAO,CACLmB,SAAU,WACVqG,IAAK,EACLgE,KAAM,IAGRrM,wBACEp3B,EAAE,6BACF6/B,OAAO,UACPqD,YAAY,IACZC,cAAc,aAOXvH,GAAa,WACxB,OACExE,uBACEzK,MAAM,KACNsM,OAAO,KACPyJ,QAAQ,YACRvW,KAAK,OACLwW,MAAM,6BACN9J,UAAU,QAEVzB,wBACEp3B,EAAE,64CACFmsB,KAAK,mCAEPiL,4BACEA,kCACEh7B,GAAG,2BACHqN,GAAG,IACH45B,GAAG,IACHC,GAAG,IACHC,GAAG,OACHG,cAAc,kBAEdtM,wBAAMuM,UAAU,YAChBvM,wBAAM9uB,OAAO,IAAIq7B,UAAU,gBAOxBC,GAAe,gBAC1BC,IAAAA,MACA3S,IAAAA,GACA4S,IAAAA,OACApD,IAAAA,KACAqD,IAAAA,QACAC,IAAAA,SAUM/M,EAAQ0B,aAAWhC,IAGvB1zB,EAQEg0B,EARFh0B,SACAC,EAOE+zB,EAPF/zB,QASF,OAAKw9B,EAGHtJ,uBACEyB,UAAU,iCACVZ,MAAO,CACL8C,MAAO73B,EACPs5B,WATFvF,EATFj0B,YAqBEo0B,uBAAKyB,UAAU,wCACF,OAAVgL,GAAkBzM,gBAAC2L,SACT,SAAVc,GAAoBzM,gBAACgM,SACX,YAAVS,GAAuBzM,gBAACoM,UAG3BpM,uBACEa,MAAO,CACLqG,SAAU,OACVmC,UAAW,OACXrC,aAAc,QAGL,YAAVyF,GAAuBzM,qCACb,SAAVyM,GAAoBzM,0CAEvBA,uBACEyB,UAAU,uCACVZ,MAAO,CACL8C,MAAO73B,IAGR,MAAC2gC,GACAzM,qDAES,SAAVyM,KAAsB3S,GACrBkG,qBACEyB,UAAU,6BACVoL,KAAS9nC,SAAOF,qBAAoBi1B,EACpCjV,OAAO,SACPgc,MAAO,CACLiM,eAAgB,YAChB5F,SAAU,OACVvD,MAAO73B,GAETihC,IAAI,gCAMG,YAAVN,GAAuBC,GAEf,OAAVD,GACCzM,0BACEyB,UAAU,kEACVZ,MAAO,CACLuE,WAAYv5B,EACZmhC,WAAY,IACZrJ,MAAO,SAETE,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACFiF,GAAQ,GACRC,GAAYA,EAAS,kBAjEb,MA2EP1K,GAAa,WACxB,OACElC,uBAAKyB,UAAU,QACbzB,uBACEzK,MAAM,KACNsM,OAAO,IACPyJ,QAAQ,WACRvW,KAAK,OACLwW,MAAM,8BAENvL,wBACEp3B,EAAE,gSACFmsB,KAAK,eAOFkY,GAAgB,gBAC3Bxe,IAAAA,UACAye,IAAAA,eAKwCtN,YAAkB,GAAnDuN,OAAcC,OAEfvN,EAAQ0B,aAAWhC,IAgBzB,OAAQ9Q,EACNuR,uBACEyB,UAAU,4EACVZ,MAAO,CACL8C,MANF9D,EAVF/zB,QAiBIs5B,WAPFvF,EAJFzzB,YAYIg4B,oBARFvE,EADFxzB,YAUIu3B,OAAQ,WAEVC,QAAS,SAAAttB,GACPA,EAAEwwB,iBACFxwB,EAAEmxB,kBACFyF,GAAgBD,KAElB7H,aAAc,WAAA,OAAM+H,GAAgB,IACpC9H,aAAc,WAAA,OAAM8H,GAAgB,KAEnCD,EAAe,aAAepd,GAAetB,IAjB9B,MC7yDT4e,GAA0B,CACrC,CACEC,KAAM,WACNroC,KAAM,8BACNC,OAAQ,QACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,gBAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,SACRE,KACE,6EACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,yBAEN,CACEsoC,KAAM,WACNroC,KAAM,oBACNC,OAAQ,QACRE,KAAM,+DACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,sBACNC,OAAQ,QACRE,KAAM,8DACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,oBACNC,OAAQ,MACRE,KAAM,GACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,4BAEN,CACEsoC,KAAM,WACNroC,KAAM,WACNC,OAAQ,OACRE,KACE,ykCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,SACRE,KACE,6rBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,iBACNC,OAAQ,MACRE,KACE,srBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,gBACNC,OAAQ,OACRE,KACE,mQACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,OACNC,OAAQ,OACRE,KACE,wrNACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,q1GACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,oBACNC,OAAQ,MACRE,KACE,igBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,q8FACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,MACRE,KACE,65HACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,SACRE,KACE,w3BACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,wBACNC,OAAQ,UACRE,KACE,qhQACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,yBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,SACRE,KACE,4yFACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,wBACNC,OAAQ,MACRE,KACE,swDACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,OACRE,KACE,imCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,OACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,QACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,gBACNC,OAAQ,QACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,0BAEN,CACEsoC,KAAM,WACNroC,KAAM,MACNC,OAAQ,MACRE,KACE,ulBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,gBAEN,CACEsoC,KAAM,WACNroC,KAAM,kBACNC,OAAQ,MACRE,KACE,8wDACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,gCAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,OACRE,KACE,41CACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,YACNC,OAAQ,OACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,OACRE,KACE,qlDACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,SACRE,KACE,iyCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,2BAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,SACRE,KACE,wiBACFmoC,UAAW,uBACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,k0EACFmoC,UAAW,8BACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,+BAEN,CACEsoC,KAAM,WACNroC,KAAM,wBACNC,OAAQ,UACRE,KACE,qsCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEG,SAAU,GACVC,KACE,65HACFH,KAAM,QACNsoC,UAAW,KACXC,eAAgB,KAChBF,KAAM,WACNpoC,OAAQ,MACRF,GAAI,UAEN,CACEsoC,KAAM,WACNroC,KAAM,OACNC,OAAQ,OACRE,KACE,goBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,2BAEN,CACEsoC,KAAM,WACNroC,KAAM,OACNC,OAAQ,OACRE,KACE,goBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,2BAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,QACRE,KACE,2tCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,yBAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,OACRE,KACE,0pCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,QACRE,KACE,2tCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,4BAEN,CACEsoC,KAAM,WACNroC,KAAM,WACNC,OAAQ,KACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAIKyoC,GAA0B,CACrC,CACEH,KAAM,WACNroC,KAAM,8BACNC,OAAQ,QACRE,KAAM,KACNmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,aAEN,CACEsoC,KAAM,WACNroC,KAAM,WACNC,OAAQ,OACRE,KACE,ykCACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,EACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,SACRE,KACE,6rBACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,EACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,iBACNC,OAAQ,MACRE,KACE,srBACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,gBACNC,OAAQ,OACRE,KAAM,KACNmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,QACRE,KAAM,KACNmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,MACRE,KAAM,KACNmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,wBACNC,OAAQ,UACRE,KACE,qhQACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,SACRE,KACE,mQACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,WACNC,OAAQ,WACRE,KACE,mQACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,0BAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,KACRE,KAAM,KACNmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,UACNC,OAAQ,MACRE,KAAM,KACNmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,UACNC,OAAQ,MACRE,KACE,guJACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,OACRE,KACE,41CACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,EACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,kBACNC,OAAQ,OACRE,KACE,8aACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,wBACNC,OAAQ,MACRE,KACE,swDACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,oBACNC,OAAQ,MACRE,KACE,igBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,6BAEN,CACEsoC,KAAM,WACNroC,KAAM,OACNC,OAAQ,OACRE,KACE,wrNACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,q1GACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,oBAEN,CACEsoC,KAAM,WACNroC,KAAM,UACNC,OAAQ,OACRE,KACE,48JACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,gBACNC,OAAQ,SACRE,KACE,87RACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,mBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,SACRE,KACE,wiBACFmoC,UAAW,uBACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,kBAEN,CACEsoC,KAAM,WACNroC,KAAM,UACNC,OAAQ,UACRE,KACE,iw4BACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,y6CACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEG,SAAU,GACVC,KACE,65HACFH,KAAM,QACNsoC,UAAW,KACXC,eAAgB,KAChBF,KAAM,WACNpoC,OAAQ,MACRF,GAAI,UAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,MACRE,KACE,qZACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,EACVH,GAAI,mBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,OACRE,KACE,imCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,aAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,SACRE,KACE,w3BACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,QACRE,KACE,kjBACFmoC,UAAW,uBACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,mBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,SACRE,KACE,spJACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,yBAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,MACRE,KACE,ivDACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,yhkBACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,EACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,MACRE,KACE,mmGACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,EACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,6sDACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,mBAEN,CACEsoC,KAAM,WACNroC,KAAM,qBACNC,OAAQ,OACRE,KACE,i5EACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,2BAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,MACRE,KACE,q+DACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,WACNC,OAAQ,MACRE,KACE,yhLACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,OACNC,OAAQ,OACRE,KACE,ylHACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,yBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,OACRE,KACE,qlDACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,yBAEN,CACEsoC,KAAM,WACNroC,KAAM,MACNC,OAAQ,MACRE,KACE,6kCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,kBAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,MACRE,KACE,grSACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,qCAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,OACRE,KACE,q1BACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,mBAEN,CACEsoC,KAAM,WACNroC,KAAM,mBACNC,OAAQ,MACRE,KACE,+rBACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,SACRE,KACE,iyCACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,wBAEN,CACEsoC,KAAM,WACNroC,KAAM,MACNC,OAAQ,MACRE,KACE,ulBACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,OAEN,CACEsoC,KAAM,WACNroC,KAAM,YACNC,OAAQ,OACRE,KACE,m8DACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,WACNroC,KAAM,WACNC,OAAQ,MACRE,KACE,q/EACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,cACNC,OAAQ,MACRE,KACE,qrMACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,aACNC,OAAQ,OACRE,KACE,4hDACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,EACVH,GAAI,mBAEN,CACEsoC,KAAM,WACNroC,KAAM,eACNC,OAAQ,OACRE,KACE,izVACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,qBAEN,CACEsoC,KAAM,WACNroC,KAAM,UACNC,OAAQ,MACRE,KACE,itPACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,sBAEN,CACEsoC,KAAM,WACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,m1EACFmoC,UAAW,8BACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,6BAEN,CACEsoC,KAAM,WACNroC,KAAM,iBACNC,OAAQ,OACRE,KACE,y9BACFmoC,UAAW,KACXC,eAAgB,KAChBroC,SAAU,GACVH,GAAI,uBAEN,CACEsoC,KAAM,WACNroC,KAAM,SACNC,OAAQ,KACRE,KACE,s0KACFmoC,UAAW,GACXC,eAAgB,GAChBroC,SAAU,GACVH,GAAI,gEAEN,CACEsoC,KAAM,SACNroC,KAAM,QACNC,OAAQ,QACRE,KACE,knBACFmo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"}
1
+ {"version":3,"file":"ref-sdk.umd.production.min.js","sources":["../src/constant.ts","../src/stable-swap.ts","../src/swap-widget/constant.ts","../src/metaIcons.ts","../src/indexer.ts","../src/v1-swap/parallelSwapLogic.ts","../src/v1-swap/smartRoutingLogic.js","../src/v1-swap/swap.ts","../src/utils.ts","../src/near.ts","../src/ref.ts","../src/dcl-swap/dcl-pool.ts","../src/error.ts","../src/v1-swap/instantSwap.ts","../src/v1-swap/pool.ts","../src/swap-widget/state.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/swap-widget/components.tsx","../src/swap-widget/defaultTokenList.ts","../src/dcl-swap/swap.ts","../src/dcl-swap/limit-order.ts","../src/swap-widget/index.tsx"],"sourcesContent":["import { TokenMetadata } from './types';\n\nexport const FEE_DIVISOR = 10000;\n\nexport const STABLE_LP_TOKEN_DECIMALS = 18;\nexport const RATED_POOL_LP_TOKEN_DECIMALS = 24;\nexport const STORAGE_TO_REGISTER_WITH_MFT = '0.1';\nexport const ONE_YOCTO_NEAR = '0.000000000000000000000001';\nlet ENV: string | undefined = '';\nexport function getConfig(\n env: string | undefined = ENV ||\n process.env.NEAR_ENV ||\n process.env.REACT_APP_REF_SDK_ENV\n) {\n ENV = env;\n switch (env) {\n case 'mainnet':\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: '',\n };\n case 'testnet':\n return {\n networkId: 'testnet',\n nodeUrl: 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: 'https://testnet-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'ref-finance-101.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dcl.ref-dev.testnet',\n };\n default:\n return {\n networkId: 'mainnet',\n nodeUrl: 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: '',\n };\n }\n}\n\nexport let config = getConfig();\n\nexport let REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n\nexport let WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n\nexport let REF_TOKEN_ID = config.REF_TOKEN_ID;\n\nexport let WNEAR_META_DATA: TokenMetadata = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n};\n\nexport let REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n};\n\nexport const NEAR_META_DATA: TokenMetadata = {\n id: 'NEAR',\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2AAAANgCAIAAADF8JzzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nO3d7VXb2rqw4eQd57/cgZ0KLCqwVwWIChAVYCrAqQBTgUUFERVEVBBTwTYdmArWO/by3uzMfBA+bHlK87r+nTP2WBFSjO/o8SN//Pvvvz8AAMB//T9nAgCA7wlEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAAC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ICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAID/+fDhw/8H0I0VimXUJpsAAAAASUVORK5CYII=',\n};\n\nexport const TokenLinks = {\n NEAR: 'https://awesomenear.com/near-protocol',\n wNEAR: 'https://awesomenear.com/near-protocol',\n REF: 'https://awesomenear.com/ref-finance',\n OCT: 'https://awesomenear.com/octopus-network',\n PARAS: 'https://awesomenear.com/paras',\n SKYWARD: 'https://awesomenear.com/skyward-finance',\n FLX: 'https://awesomenear.com/flux',\n PULSE: 'https://awesomenear.com/pulse',\n DBIO: 'https://awesomenear.com/debio-network',\n MYRIA: 'https://awesomenear.com/myriad-social',\n PXT: 'https://awesomenear.com/cryptoheroes',\n HAPI: 'https://awesomenear.com/hapi',\n OIN: 'https://awesomenear.com/oin-finance',\n ABR: 'https://awesomenear.com/allbridge',\n '1MIL': 'https://awesomenear.com/1millionnfts',\n MARMAJ: 'https://awesomenear.com/marmaj-foundation',\n marmaj: 'https://awesomenear.com/marmaj-foundation',\n USN: 'https://awesomenear.com/decentral-bank',\n '1INCH': 'https://awesomenear.com/1inch-network',\n GRT: 'https://awesomenear.com/the-graph',\n LINK: 'https://awesomenear.com/chainlink',\n Cheddar: 'https://awesomenear.com/cheddar-farm',\n AURORA: 'https://awesomenear.com/aurora-dev',\n $META: 'https://awesomenear.com/meta-pool',\n UMINT: 'https://awesomenear.com/youminter',\n UTO: 'https://awesomenear.com/secret-skellies-society',\n DEIP: 'https://awesomenear.com/deip',\n WOO: 'https://awesomenear.com/woo-dex',\n LINEAR: 'https://awesomenear.com/linear-protocol',\n PEM: 'https://awesomenear.com/pembrock-finance',\n ATO: 'https://awesomenear.com/atocha-protocol',\n SEAT: 'https://awesomenear.com/seatlab-nft',\n FAR: 'https://awesomenear.com/few-and-far',\n BSTN: 'https://awesomenear.com/bastion',\n BRRR: 'https://awesomenear.com/burrow',\n XNL: 'https://awesomenear.com/chronicle',\n KSW: 'https://awesomenear.com/killswitch-finance',\n STNEAR: 'https://awesomenear.com/meta-pool',\n NearX: 'https://awesomenear.com/stader',\n SD: 'https://awesomenear.com/stader',\n DISC: 'https://awesomenear.com/discovol',\n} as Record<string, string>;\n\nexport const CONSTANT_D = 1.0001;\n\nexport const POINTLEFTRANGE = -800000;\nexport const POINTRIGHTRANGE = 800000;\n\nexport const switchEnv = () => {\n config = getConfig();\n REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n REF_TOKEN_ID = config.REF_TOKEN_ID;\n REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n };\n WNEAR_META_DATA = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n };\n return {\n config,\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n REF_TOKEN_ID,\n REF_META_DATA,\n WNEAR_META_DATA,\n };\n};\n","import { StablePool } from './types';\nimport { FEE_DIVISOR } from './constant';\n\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from './utils';\n\nimport Big from 'big.js';\n\nimport _ from 'lodash';\n\nconst tradeFee = (amount: number, trade_fee: number) => {\n return (amount * trade_fee) / FEE_DIVISOR;\n};\n\nexport const calc_d = (amp: number, c_amounts: number[]) => {\n const token_num = c_amounts.length;\n const sum_amounts = _.sum(c_amounts);\n let d_prev = 0;\n let d = sum_amounts;\n for (let i = 0; i < 256; i++) {\n let d_prod = d;\n for (let c_amount of c_amounts) {\n d_prod = (d_prod * d) / (c_amount * token_num);\n }\n d_prev = d;\n const ann = amp * token_num ** token_num;\n const numerator = d_prev * (d_prod * token_num + ann * sum_amounts);\n const denominator = d_prev * (ann - 1) + d_prod * (token_num + 1);\n d = numerator / denominator;\n if (Math.abs(d - d_prev) <= 1) break;\n }\n return d;\n};\n\nexport const calc_y = (\n amp: number,\n x_c_amount: number,\n current_c_amounts: number[],\n index_x: number,\n index_y: number\n) => {\n const token_num = current_c_amounts.length;\n const ann = amp * token_num ** token_num;\n const d = calc_d(amp, current_c_amounts);\n let s = x_c_amount;\n let c = (d * d) / x_c_amount;\n for (let i = 0; i < token_num; i++) {\n if (i !== index_x && i !== index_y) {\n s += current_c_amounts[i];\n c = (c * d) / current_c_amounts[i];\n }\n }\n c = (c * d) / (ann * token_num ** token_num);\n const b = d / ann + s;\n let y_prev = 0;\n let y = d;\n for (let i = 0; i < 256; i++) {\n y_prev = y;\n const y_numerator = y ** 2 + c;\n const y_denominator = 2 * y + b - d;\n y = y_numerator / y_denominator;\n if (Math.abs(y - y_prev) <= 1) break;\n }\n\n return y;\n};\n\nexport const calc_swap = (\n amp: number,\n in_token_idx: number,\n in_c_amount: number,\n out_token_idx: number,\n old_c_amounts: number[],\n trade_fee: number\n) => {\n const y = calc_y(\n amp,\n in_c_amount + old_c_amounts[in_token_idx],\n old_c_amounts,\n in_token_idx,\n out_token_idx\n );\n const dy = old_c_amounts[out_token_idx] - y;\n const fee = tradeFee(dy, trade_fee);\n const amount_swapped = dy - fee;\n return [amount_swapped, fee, dy];\n};\n\nexport const getSwappedAmount = (\n tokenInId: string,\n tokenOutId: string,\n amountIn: string,\n stablePool: StablePool,\n STABLE_LP_TOKEN_DECIMALS: number\n) => {\n const amp = stablePool.amp;\n const trade_fee = stablePool.total_fee;\n\n // depended on pools\n const in_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenInId\n );\n const out_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenOutId\n );\n\n const rates = stablePool.rates.map(r =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r)\n );\n\n const base_old_c_amounts = stablePool.c_amounts.map(amount =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amount)\n );\n\n const old_c_amounts = base_old_c_amounts\n .map((amount, i) =>\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amount || 0).times(new Big(rates[i])).toString()\n )\n )\n )\n .map(amount => Number(amount));\n\n const in_c_amount = Number(\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amountIn).times(new Big(rates[in_token_idx])).toString()\n )\n )\n );\n\n const [amount_swapped, fee, dy] = calc_swap(\n amp,\n in_token_idx,\n in_c_amount,\n out_token_idx,\n old_c_amounts,\n trade_fee\n );\n\n return [\n amount_swapped / Number(rates[out_token_idx]),\n fee,\n dy / Number(rates[out_token_idx]),\n ];\n};\n","import { getConfig } from '../constant';\nexport const REF_WIDGET_STAR_TOKEN_LIST_KEY =\n 'REF_WIDGET_STAR_TOKEN_LIST_VALUE';\n\nexport const REF_WIDGET_ALL_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_TOKENS_LIST_VALUE';\n\nexport const REF_WIDGET_SWAP_IN_KEY = 'REF_WIDGET_SWAP_IN_VALUE';\n\nexport const REF_WIDGET_SWAP_OUT_KEY = 'REF_WIDGET_SWAP_OUT_VALUE';\n\nexport const REF_WIDGET_SWAP_DETAIL_KEY = 'REF_WIDGET_SWAP_DETAIL_VALUE';\n\nexport const DEFAULT_START_TOKEN_LIST_TESTNET = [\n 'wrap.testnet',\n 'usdtt.fakes.testnet',\n 'usdt.fakes.testnet',\n 'ref.fakes.testnet',\n 'usdn.testnet',\n 'eth.fakes.testnet',\n];\n\nexport const DEFAULT_START_TOKEN_LIST_MAINNET = [\n 'wrap.near',\n 'usdt.tether-token.near',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n 'token.v2.ref-finance.near',\n 'usn',\n 'aurora',\n 'token.sweat',\n];\n\nexport interface Theme {\n container: string; // container background\n buttonBg: string; // button background\n primary: string; // primary theme color\n secondary: string; // secondary theme color\n borderRadius: string; // border radius\n fontFamily: string; // font family\n hover: string; // hovering color\n active: string; // active color\n secondaryBg: string; // secondary background color\n borderColor: string; // border color\n iconDefault: string; // default icon color\n iconHover: string; // icon hovering color\n refIcon?: string; // ref icon color\n}\n\nexport const defaultTheme: Theme = {\n container: '#FFFFFF',\n buttonBg: '#00C6A2',\n primary: '#000000',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: '#F7F7F7',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(62, 62, 62, 1)',\n};\n\nexport const defaultDarkModeTheme: Theme = {\n container: '#26343E',\n buttonBg: '#00C6A2',\n primary: '#FFFFFF',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: 'rgba(0, 0, 0, 0.2)',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(183, 201, 214, 1)',\n refIcon: 'white',\n};\n","const icons: { [tokenId: string]: string } = {\n '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near':\n 'https://ref-finance-images.s3.amazonaws.com/images/woo-wtrue.png',\n 'wrap.near':\n 'data:image/png;base64,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',\n 'wrap.testnet':\n 'data:image/png;base64,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',\n '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near':\n 'https://assets.ref.finance/images/4943.png',\n 'berryclub.ek.near': 'https://assets.ref.finance/images/banana.png',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near':\n 'https://assets.ref.finance/images/825.png',\n '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near':\n 'https://assets.ref.finance/images/7083.png',\n '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near':\n 'https://assets.ref.finance/images/1975.png',\n 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near':\n 'https://assets.ref.finance/images/3408.png',\n '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near':\n 'https://assets.ref.finance/images/3717.png',\n '7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near':\n 'https://assets.ref.finance/images/7278.png',\n 'a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near':\n 'https://assets.ref.finance/images/3635.png',\n '50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near':\n 'https://assets.ref.finance/images/4195.png',\n '4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near':\n 'https://assets.ref.finance/images/4687.png',\n '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near':\n 'https://assets.ref.finance/images/2502.png',\n '6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near':\n 'https://assets.ref.finance/images/6758.png',\n 'c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near':\n 'https://assets.ref.finance/images/2586.png',\n 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near':\n 'https://assets.ref.finance/images/6719.png',\n '9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near':\n 'https://assets.ref.finance/images/1518.png',\n '0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near':\n 'https://assets.ref.finance/images/5864.png',\n 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near':\n 'https://assets.ref.finance/images/2396.png',\n '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near':\n 'https://assets.ref.finance/images/6941.png',\n '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near':\n 'https://assets.ref.finance/images/8104.png',\n 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near':\n 'https://assets.ref.finance/images/55sGoBm.png',\n 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near':\n 'https://assets.ref.finance/images/10052.png',\n 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near':\n 'https://assets.ref.finance/images/4222.png',\n 'token.cheddar.near': 'https://assets.ref.finance/images/cheddar.png',\n 'farm.berryclub.ek.near': 'https://assets.ref.finance/images/cucumber.png',\n 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near':\n 'https://assets.ref.finance/images/HAPI.png',\n};\n\nexport default icons;\n","import { config, WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from './constant';\nimport { REF_WIDGET_ALL_TOKENS_LIST_KEY } from './swap-widget/constant';\nimport { REPLACE_TOKENS } from './ref';\nimport metaIconDefaults from './metaIcons';\n\nexport const getTokenPriceList = async (): Promise<any> => {\n return await fetch(config.indexerUrl + '/list-token-price', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(list => {\n return list;\n });\n};\n\nexport const getTokens = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n icon:\n !cur.icon || REPLACE_TOKENS.includes(id)\n ? metaIconDefaults[id]\n : cur.icon,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\n\nexport const getWhiteListTokensIndexer = async (whiteListIds: string[]) => {\n return await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(res => {\n return whiteListIds.reduce((acc, cur, i) => {\n if (\n !res[cur] ||\n !Object.values(res[cur]) ||\n Object.values(res[cur]).length === 0\n )\n return acc;\n\n return {\n ...acc,\n [cur]: { ...res[cur], id: cur },\n };\n }, {});\n })\n .then(res => {\n return Object.values(res);\n });\n};\n","//@ts-nocheck\nimport Big from 'big.js';\n\nimport { Pool } from '../types';\n\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\ninterface FormatedPool extends Pool {\n x?: string;\n y?: string;\n gamma_bps?: Big;\n}\n\n///////////////////////////////\n// Parallel Swap Logic Below //\n///////////////////////////////\n\n/** formatPoolNew\n * This function appends to the existing standard Pool struct and adds attributes that simplify the parallel swap algorithms.\n * Adds attributes \"x\" (for input token reserves in pool), \"y\" (for output token reserves in pool), and \"gamma_bps\" (for 1- fee in bps)\n * Our convention for our algorithm has been to use \"x\" as the input token and \"y\" as the output token.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns newFormatPool\n */\nexport function formatPoolNew(\n pool: Pool,\n inputToken: string,\n outputToken: string\n) {\n let p: FormatedPool = pool;\n let x = p.supplies[inputToken];\n let y = p.supplies[outputToken];\n p['gamma_bps'] = new Big(10000).minus(p.fee);\n p['x'] = x;\n p['y'] = y;\n return p;\n}\n\n/** solveForMuFloat\n * This function takes the set of token pools, the total input of inputToken, and the names of inputToken and outputToken and\n * solves for the Lagrange Multiplier \"mu\". Note that mu must be allowed to be aritrary precision floating point number. Mu will\n * be used in subsequent function calls to determine the best allocations of intputToken to be made per pool.\n * For more detailed math on how this function was derived, please see the white paper:\n * https://github.com/giddyphysicist/ParallelSwapForRefFinance/blob/main/ParallelSwapWhitePaper.pdf\n * @param pools list of pools that contain inputToken and outputToken\n * @param totalDeltaX total allocation (among all pools) being input of inputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n */\nexport function solveForMuFloat(\n pools: Pool[],\n totalDeltaX: string,\n inputToken: string,\n outputToken: string\n) {\n if (pools.length > 0) {\n let numerator = new Big(totalDeltaX);\n let denominator = new Big(0);\n\n for (var i = 0; i < pools.length; i++) {\n let p = formatPoolNew(pools[i], inputToken, outputToken);\n let numAdd = new Big(p.x).times(10000).div(p.gamma_bps);\n numerator = numerator.plus(numAdd);\n let denomAdd = new Big(p.x)\n .times(p.y)\n .div(p.gamma_bps)\n .sqrt()\n .times(100);\n denominator = denominator.plus(denomAdd);\n }\n\n const mu = new Big(numerator).div(denominator);\n return mu;\n } else {\n // console.log('ERROR - could not find pools that satisfy token pair');\n const mu = NaN;\n return mu;\n }\n}\n\n/** calculate_dx_float\n * Once mu has been calculated for a set of pools and total input amount, the next step is\n * determining the total allocation per pool. This function evaluates the amount of input Token to be\n * allocated to the given pool. Note, in our original algorithmic convention, the 'x' variable was for the input token,\n * and the 'y' variable was for the output token. Here, the value dx is the part of the full amount of input token X.\n * Again, the detailed formulae for these operations can be found in the white paper referenced above.\n * @param mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dxFloat the allocation amount determined for the given pool\n */\nexport function calculate_dx_float(\n mu: number | Big,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n let p = formatPoolNew(pool, inputToken, outputToken);\n let radical = new Big(p.x).times(p.y).div(p.gamma_bps);\n let dxFloat = new Big(mu)\n .times(100)\n .times(radical.sqrt())\n .minus(new Big(p.x).times(10000).div(p.gamma_bps));\n return dxFloat;\n}\n\n/** calculate_dy_float\n * Once you have an allocation amount for a given pool, you can use the AMM constant-product formula to determine\n * the expected output amount of output Token.\n * Note, here, as earlier, our algorithmic convention uses \"y\" as the output token, and so \"dy\" is the fraction of\n * the total output of output Token, assuming there could be dy contributions from other parallel pools as well.\n * @param dx_float input allocation amount of inputToken for the given pool\n * @param pool a structure representing the reserves and fees for a given pool.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dyFloat the expected trade out amount out of outputToken\n */\nexport function calculate_dy_float(\n dx_float: number,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n if (dx_float <= 0) {\n return new Big(0);\n }\n let p = formatPoolNew(pool, inputToken, outputToken);\n let dx = new Big(dx_float);\n let denom = new Big(10000).times(p.x).plus(new Big(p.gamma_bps).times(dx));\n let numerator = new Big(p.y).times(dx).times(p.gamma_bps);\n let dyFloat = numerator.div(denom).round();\n return dyFloat;\n}\n\n/** calculateOptimalOutput\n * This is the main function, which calculates optimal values of inputToken to swap into each pool.\n * @param pools list of relevant AMM pools containing inputToken and outputToken\n * @param inputAmount the numeric total amount of inputToken to be traded into the group of swap pools.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns normalizedDxArray an array containing the amount allocations of inputToken per pool in the list of pools.\n */\nexport function calculateOptimalOutput(\n pools: Pool[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let mu = solveForMuFloat(pools, inputAmount, inputToken, outputToken);\n let dxArray: Big[] = [];\n let negativeDxValsFlag = false;\n for (var i = 0; i < pools.length; i++) {\n let pool = formatPoolNew(pools[i], inputToken, outputToken);\n let dx = calculate_dx_float(mu, pool, inputToken, outputToken);\n if (dx.lt(0)) {\n negativeDxValsFlag = true;\n }\n let dxInt = new Big(dx).round();\n dxArray.push(dxInt);\n }\n if (negativeDxValsFlag) {\n dxArray = reducePools(pools, dxArray, inputAmount, inputToken, outputToken);\n }\n let dxArraySum = new Big(0);\n for (var i = 0; i < dxArray.length; i++) {\n dxArraySum = dxArraySum.plus(dxArray[i]);\n }\n let tempAllocationsArray = [];\n for (var i = 0; i < dxArray.length; i++) {\n let ndx = new Big(dxArray[i])\n .times(inputAmount)\n .div(dxArraySum)\n .round();\n tempAllocationsArray.push(ndx);\n }\n let allocationsArray = checkIntegerSumOfAllocations(\n tempAllocationsArray,\n inputAmount\n );\n let normalizedDxArray = [];\n for (var i = 0; i < allocationsArray.length; i++) {\n let ndx = allocationsArray[i];\n normalizedDxArray.push(BigInt(ndx));\n pools[i]['partialAmountIn'] = ndx.toString();\n }\n return normalizedDxArray;\n}\n\n/** reducePools\n * This function is used to implement part of the non-linear slack variables in the lagrange - multiplier\n * solution for parallel swap. Part of what comes out of the math is that sometimes, the optimal allocation for a pool\n * can be negative, which makes no physical sense. When this occurs, that particular pool needs to be flagged and the\n * lagrange constraint applied to force the allocation to be zero.\n * This function takes an already-solved set of pools, input allocation per pool, the total input amount, and the\n * inputToken name and outputToken name, and determines which, if any, allocations need to be set to zero.\n * However, when this occurs, and a pool is essentially ignored from the list, then the calculation for mu must be re-done.\n * So the calculateOptimalOutput function is then called on the reduced set of pools, and if no negative allocation values remain,\n * then the allocations on the reduced set is determined, and values of zero are put in for the 'failed' pools.\n * @param pools list of pools that contain inputToken and outputToken\n * @param dxArray list of input allocation per pool\n * @param inputAmount total amount of inputToken to be traded among the pools\n * @param inputToken the name of the inputToken\n * @param outputToken the name of the outputToken\n * @returns newFullDxVec the new full list of input allocations the same length as dxArray, containing zeros for failed pools.\n */\nexport function reducePools(\n pools: Pool[],\n dxArray: Big[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let goodIndices = [];\n for (var i = 0; i < dxArray.length; i++) {\n let dx = dxArray[i];\n if (dx.gte(0)) {\n goodIndices.push(i);\n }\n }\n if (goodIndices.length < 1) {\n // console.log(\"ERROR OCCURRED -- ALL DX VALUES WERE NEGATIVE\")\n return dxArray;\n }\n let newPools = [];\n for (var j = 0; j < dxArray.length; j++) {\n if (goodIndices.includes(j)) {\n newPools.push(pools[j]);\n }\n }\n let newDxVec = calculateOptimalOutput(\n newPools,\n inputAmount,\n inputToken,\n outputToken\n );\n let goodInd2newdx = {};\n for (var k = 0; k < newDxVec.length; k++) {\n goodInd2newdx[goodIndices[k]] = newDxVec[k];\n }\n let newFullDxVec = [];\n for (var ii = 0; ii < pools.length; ii++) {\n if (goodIndices.includes(ii)) {\n newFullDxVec.push(goodInd2newdx[ii]);\n } else {\n newFullDxVec.push(0);\n }\n }\n return newFullDxVec;\n}\n\nexport function checkIntegerSumOfAllocations(\n allocations: Big[] | string[] | BigInt[],\n totalInput: Big | string | BigInt\n) {\n var totalInput = new Big(totalInput);\n var allocations:\n | Big[]\n | string[]\n | BigInt[] = allocations.map((item: Big | string | BigInt) =>\n new Big(item).round()\n );\n let alloSum = allocations\n .map(item => new Big(item))\n .reduce((a, b) => a.plus(b), new Big(0));\n let offset = totalInput.minus(alloSum);\n //get largest allocation.\n let currMax = new Big(0);\n let currMaxInd = 0;\n for (var i = 0; i < allocations.length; i++) {\n if (allocations[i].gt(currMax)) {\n currMaxInd = i;\n currMax = allocations[i];\n }\n }\n let newAllocations = [];\n for (var j = 0; j < allocations.length; j++) {\n if (j === currMaxInd) {\n newAllocations.push(allocations[j].plus(offset).toString());\n } else {\n newAllocations.push(allocations[j].toString());\n }\n }\n return newAllocations;\n}\n","/* eslint-disable no-undef */\n////////////////////////////////////////////////////////////////////////////\n// SMART ROUTE SWAP LOGIC\n////////////////////////////////////////////////////////////////////////////\nimport Big from 'big.js';\nimport { checkIntegerSumOfAllocations } from './parallelSwapLogic';\n\nimport { TokenMetadata } from '../types';\n\nimport { ftGetTokenMetadata } from '../ref';\n\nimport { percentLess, toNonDivisibleNumber } from '../utils';\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\nfunction bisqrt(value) {\n // For some ridiculous reason, the .sqrt() method for Big decimals is extremely slow (~10-20ms),\n // which isn't so bad until you need to use it a bunch of times.\n // Since we're dealing with super large numbers anyway, we can convert the Big decimal number into a BigInt,\n // then run this BigInt Newton iteration square root function instead, and then convert back into a\n // Big number. And it speeds up the operation by a crazy factor, ~10x faster.\n if (value < BigInt(0)) {\n throw 'square root of negative numbers is not supported';\n }\n\n if (value < BigInt(2)) {\n return value;\n }\n\n function newtonIteration(n, x0) {\n const x1 = (n / x0 + x0) >> BigInt(1);\n if (x0 === x1 || x0 === x1 - BigInt(1)) {\n return x0;\n }\n return newtonIteration(n, x1);\n }\n\n return newtonIteration(value, BigInt(1));\n}\n\nfunction getBetaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n let p = route[0];\n var beta = new Big(p.reserves[path[0]]);\n } else if (route.length == 2) {\n let p1 = route[0];\n let p2 = route[1];\n var beta = new Big(p1.reserves[path[0]]).times(\n new Big(p2.reserves[path[1]])\n );\n }\n return beta;\n}\n\nfunction getEpsilonForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n var epsilon = Big(gamma);\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let gamma1 = new Big(10000).minus(new Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(Big(10000));\n var epsilon = new Big(p2.reserves[path[1]])\n .times(new Big(gamma1))\n .plus(new Big(p1.reserves[path[1]]).times(gamma1).times(gamma2));\n }\n return epsilon;\n}\n\nfunction getAlphaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n //console.log('single hop')\n let p = route[0];\n let inputToken = path[0];\n let outputToken = path[1];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n let key1 = p.token1Id;\n let key2 = p.token2Id;\n let val1 = p.token1Supply;\n let val2 = p.token2Supply;\n p['reserves'] = { [key1]: val1, [key2]: val2 };\n var alpha = new Big(p.reserves[inputToken]).times(\n new Big(p.reserves[outputToken]).times(new Big(gamma))\n );\n } else if (route.length == 2) {\n //console.log('double hop')\n let p1 = route[0];\n let p2 = route[1];\n let key11 = p1.token1Id;\n let key12 = p1.token2Id;\n let val11 = p1.token1Supply;\n let val12 = p1.token2Supply;\n p1['reserves'] = { [key11]: val11, [key12]: val12 };\n let key21 = p2.token1Id;\n let key22 = p2.token2Id;\n let val21 = p2.token1Supply;\n let val22 = p2.token2Supply;\n p2['reserves'] = { [key21]: val21, [key22]: val22 };\n let inputToken = path[0];\n let middleToken = path[1];\n let outputToken = path[2];\n let gamma1 = new Big(10000).minus(Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(new Big(10000));\n let alpha1 = new Big(p1.reserves[inputToken])\n .times(new Big(p1.reserves[middleToken]))\n .times(gamma1);\n let alpha2 = new Big(p2.reserves[middleToken])\n .times(new Big(p2.reserves[outputToken]))\n .times(gamma2);\n var alpha = alpha1.times(alpha2);\n }\n return alpha;\n}\n\nfunction getAlphaSumFromRoutes(routes, nodeRoutes) {\n let alphaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let alpha = getAlphaForRoute(route, nodeRoute);\n // console.log('alpha is...');\n // console.log(alpha.toString());\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let radical = new Big(bisqrt(BigInt(new Big(alpha).round().toFixed())));\n // let radical = new Big(alpha).sqrt();\n let epsilon = getEpsilonForRoute(route, nodeRoute);\n let denom = new Big(epsilon);\n alphaSum = alphaSum.plus(radical.div(denom));\n }\n return alphaSum;\n}\n\nfunction getBetaSumFromRoutes(routes, nodeRoutes) {\n let betaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let num = new Big(getBetaForRoute(route, nodeRoute));\n let denom = new Big(getEpsilonForRoute(route, nodeRoute));\n betaSum = betaSum.plus(num.div(denom));\n }\n return betaSum;\n}\n\nfunction getPhiFromRoutes(routes, nodeRoutes, totalInput) {\n let alphaSum = getAlphaSumFromRoutes(routes, nodeRoutes);\n let betaSum = getBetaSumFromRoutes(routes, nodeRoutes);\n let phi = new Big(totalInput).plus(betaSum).div(alphaSum);\n return phi;\n}\n\nfunction getAllocationForRoute(phi, route, path) {\n let alpha = getAlphaForRoute(route, path);\n let beta = getBetaForRoute(route, path);\n let epsilon = getEpsilonForRoute(route, path);\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let allocation = new Big(phi)\n .abs()\n .times(new Big(bisqrt(BigInt(new Big(alpha).round().toFixed()))))\n .minus(beta)\n .div(epsilon);\n return allocation;\n}\n\nfunction getAllocationVectorForRoutes(phi, routes, nodeRoutes) {\n let allocationVec = [];\n for (var i in routes) {\n allocationVec.push(getAllocationForRoute(phi, routes[i], nodeRoutes[i]));\n }\n return allocationVec;\n}\n\nfunction getOptimalAllocationForRoutes(routes, nodeRoutes, totalInput) {\n // console.log(\"CALLING GET OPTIMAL ALLOCATION FOR ROUTES:\")\n // console.log(routes)\n var totalInput = new Big(totalInput);\n let phi = getPhiFromRoutes(routes, nodeRoutes, totalInput);\n // console.log('PHI CALCULATED TO BE...')\n // console.log(phi.toString())\n let allocations = getAllocationVectorForRoutes(phi, routes, nodeRoutes);\n if (allocations.every(item => item.lt(new Big(0)))) {\n allocations = allocations.map(item => item.times(new Big(-1.0)));\n }\n if (allocations.some(item => item.lt(new Big(0)))) {\n allocations = reduceRoutes(routes, nodeRoutes, allocations, totalInput);\n }\n let sumAllocations = allocations.reduce((a, b) => a.plus(b), new Big(0));\n let normalizedAllocations = allocations.map(a =>\n a.div(sumAllocations).times(new Big(totalInput))\n );\n return normalizedAllocations;\n}\n\nfunction reduceRoutes(routes, nodeRoutes, allocationVec, totalInput) {\n // console.log(\"RUNNING REDUCE ROUTES\")\n var totalInput = new Big(totalInput);\n let goodIndices = [];\n for (var i in allocationVec) {\n let dx = allocationVec[i];\n // console.log('DX IS...')\n // console.log(dx.toString())\n if (dx.gt(new Big(0))) {\n goodIndices.push(i);\n }\n }\n // console.log('GOOD INDICES ARE...');\n // console.log(goodIndices);\n let newRoutes = [];\n let newNodeRoutes = [];\n for (var i in goodIndices) {\n let goodIndex = goodIndices[i];\n newRoutes.push(routes[goodIndex]);\n newNodeRoutes.push(nodeRoutes[goodIndex]);\n }\n allocationVec = getOptimalAllocationForRoutes(\n newRoutes,\n newNodeRoutes,\n totalInput\n );\n let allocationDict = {};\n for (var i in goodIndices) {\n allocationDict[goodIndices[i]] = allocationVec[i];\n }\n var allocationVecNew = [];\n for (var i in routes) {\n if (goodIndices.includes(i)) {\n allocationVecNew.push(allocationDict[i]);\n } else {\n let zeroAllocation = new Big(0);\n allocationVecNew.push(zeroAllocation);\n }\n }\n return allocationVecNew;\n}\n\nfunction getNodeRoutesFromPathsAndPoolChains(paths, poolChains) {\n let multiplicity = [];\n for (var i in poolChains) {\n let pc = poolChains[i];\n let mul = pc\n .map(item => item.length)\n .reduce((elem1, elem2) => elem1 * elem2, 1);\n multiplicity.push(mul);\n }\n let nodeRoutes = [];\n for (var j in paths) {\n let path = paths[j];\n let m = multiplicity[j];\n for (var k = 0; k < m; k++) {\n nodeRoutes.push(path);\n }\n }\n return nodeRoutes;\n}\n\nfunction getPoolChainFromPaths(paths, pools, threshold = 0.001) {\n let poolChains = [];\n for (var pathInd in paths) {\n let path = paths[pathInd];\n let chain = [];\n let pairs = [];\n for (var i = 0; i < path.length - 1; i++) {\n pairs.push([path[i], path[i + 1]]);\n }\n for (var pairInd in pairs) {\n let pair = pairs[pairInd];\n // console.log(pair);\n let tokenPools = getPoolsByToken1ANDToken2(pools, pair[0], pair[1]);\n chain.push(tokenPools);\n }\n poolChains.push(chain);\n }\n // return poolChains;\n let culledPoolChains = getCulledPoolChains(poolChains, threshold);\n\n return culledPoolChains;\n}\n\nfunction getCulledPoolChains(poolChains, threshold = 0.001) {\n let newChains = [];\n for (var pathInd in poolChains) {\n let path = poolChains[pathInd];\n let newPath = [];\n for (var legInd in path) {\n let leg = path[legInd];\n let culledPath = cullPoolsWithInsufficientLiquidity(leg, threshold);\n newPath.push(culledPath);\n }\n newChains.push(newPath);\n }\n return newChains;\n}\n\nfunction getRoutesFromPoolChain(poolChains) {\n let routes = [];\n for (var pci in poolChains) {\n let poolChain = poolChains[pci];\n //get cartesian product of each pool chain to get the list of routes.\n let newRoutes = cartesianProduct(poolChain);\n routes.push(...newRoutes);\n }\n for (var i in routes) {\n if (!routes[i].length) {\n routes[i] = [routes[i]];\n }\n }\n return routes;\n}\n\nfunction getOutputSingleHop(pool, inputToken, outputToken, totalInput) {\n var totalInput = new Big(totalInput);\n // check if pool is forward or backward for inputToken/outputToken cf. token1Id/token2Id\n if (inputToken === pool.token1Id && outputToken === pool.token2Id) {\n // forward Pool\n var reserves = {\n [inputToken]: new Big(pool.token1Supply),\n [outputToken]: new Big(pool.token2Supply),\n };\n } else if (inputToken === pool.token2Id && outputToken === pool.token1Id) {\n // reverse pool\n var reserves = {\n [outputToken]: new Big(pool.token1Supply),\n [inputToken]: new Big(pool.token2Supply),\n };\n } else {\n return new Big(0);\n }\n let gamma = new Big(10000).minus(new Big(pool.fee)).div(new Big(10000));\n // console.log(totalInput)\n // console.log(gamma)\n // console.log(reserves)\n let num = totalInput.times(gamma).times(reserves[outputToken]);\n let denom = reserves[inputToken].plus(gamma.times(totalInput));\n return num.div(denom);\n}\n\nfunction getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n totalInput\n) {\n var totalInput = new Big(totalInput);\n for (var poolIndex in pools) {\n let p = pools[poolIndex];\n p['gamma'] = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n }\n let p1 = pools[0];\n let p2 = pools[1];\n\n if (inputToken === p1.token1Id && middleToken === p1.token2Id) {\n // forward Pool\n p1['reserves'] = {\n [inputToken]: new Big(p1.token1Supply),\n [middleToken]: new Big(p1.token2Supply),\n };\n } else if (middleToken === p1.token1Id && inputToken === p1.token2Id) {\n //reverse pool\n p1['reserves'] = {\n [middleToken]: new Big(p1.token1Supply),\n [inputToken]: new Big(p1.token2Supply),\n };\n }\n\n if (middleToken === p2.token1Id && outputToken === p2.token2Id) {\n // forward Pool\n p2['reserves'] = {\n [middleToken]: new Big(p2.token1Supply),\n [outputToken]: new Big(p2.token2Supply),\n };\n } else if (outputToken === p2.token1Id && middleToken === p2.token2Id) {\n //reverse pool\n p2['reserves'] = {\n [outputToken]: new Big(p2.token1Supply),\n [middleToken]: new Big(p2.token2Supply),\n };\n }\n\n let c1 = new Big(p1.reserves[middleToken]);\n let a1 = new Big(p1.reserves[inputToken]);\n let c2 = new Big(p2.reserves[middleToken]);\n let b2 = new Big(p2.reserves[outputToken]);\n let gamma1 = p1.gamma;\n let gamma2 = p2.gamma;\n let num = totalInput\n .times(c1)\n .times(b2)\n .times(gamma1)\n .times(gamma2);\n let denom = c2\n .times(a1)\n .plus(\n totalInput.times(c2.times(gamma1).plus(c1.times(gamma1).times(gamma2)))\n );\n // denom = c2*a1 + totalInput * (c2*gamma1 + c1*gamma1*gamma2)\n\n return num.div(denom);\n}\n\nfunction getOutputFromRoute(route, nodeRoute, allocation) {\n if (new Big(allocation).eq(new Big(0))) {\n return new Big(0);\n } else {\n var allocation = new Big(allocation);\n }\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // single hop\n let inputToken = nodeRoute[0];\n let outputToken = nodeRoute[1];\n let pool = route[0];\n var output = getOutputSingleHop(pool, inputToken, outputToken, allocation);\n } else if (route.length == 2) {\n // DOUBLE HOP\n let inputToken = nodeRoute[0];\n let middleToken = nodeRoute[1];\n let outputToken = nodeRoute[2];\n let pools = route;\n var output = getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n allocation\n );\n }\n return output;\n}\n\nfunction getOptOutputVec(routes, nodeRoutes, totalInput) {\n let allocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n let result = [];\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let allocation = allocations[i];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n result.push(output);\n }\n return {\n result: result,\n allocations: allocations,\n };\n //NOTE -- I made this return an object instead of the tuple returned in python. need to check the places it is called, and specify\n // result field instead of tuple 0 position, and allocations field instead of tuple 1 position.\n}\n\nfunction getBestOptInputAndOutputSlower(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return { input: inputRefined, output: res1 };\n } else {\n return { input: inputRaw, output: res2 };\n }\n}\n\nfunction getBestOptInputAndOutput(routes, nodeRoutes, totalInput) {\n // let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n // let outputRefined = refDict.result;\n // let inputRefined = refDict.allocations;\n // inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n let res = outputRaw\n .map(v => new Big(v))\n .reduce((bv1, bv2) => bv1.plus(bv2), new Big(0));\n\n return {\n input: inputRaw,\n output: res,\n };\n}\n\nfunction getBestOptOutput(routes, nodeRoutes, totalInput) {\n let outputRefined = getOptOutputVecRefined(routes, nodeRoutes, totalInput)\n .result;\n let outputRaw = getOptOutputVec(routes, nodeRoutes, totalInput).result;\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n if (res1.gt(res2)) {\n return res1;\n } else {\n return res2;\n }\n}\n\nfunction getBestOptInput(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return inputRefined;\n } else {\n return inputRaw;\n }\n}\n\nfunction getOptOutputVecRefined(routes, nodeRoutes, totalInput) {\n // need to calculate full result.\n // if direct pools exist, need to calculate parallel result. if not, this portion is set to zero output.\n\n // need to compare between outputs of the two results above.\n\n let initLengthRoutes = routes.length;\n let directRouteInds = [];\n for (var routeInd in routes) {\n let route = routes[routeInd];\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n directRouteInds.push(routeInd);\n }\n }\n // console.log('DIRECT ROUTE INDS ARE')\n // console.log(directRouteInds)\n // if (directRouteInds.length < 1) {\n var fullResultAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n var fullResult = [];\n for (var i in routes) {\n let r = routes[i];\n let nr = nodeRoutes[i];\n let a = fullResultAllocations[i];\n let output = getOutputFromRoute(r, nr, a);\n fullResult.push(output);\n }\n var fullResultTotal = fullResult.reduce((a, b) => a.plus(b), new Big(0));\n\n // } else {\n if (directRouteInds.length > 0) {\n // console.log('DOING SINGLE HOP ONLY')\n let droutes = [];\n let dnodeRoutes = [];\n for (var dri in directRouteInds) {\n let ind = directRouteInds[dri];\n droutes.push(routes[ind]);\n dnodeRoutes.push(nodeRoutes[ind]);\n }\n let dallocations = getOptimalAllocationForRoutes(\n droutes,\n dnodeRoutes,\n totalInput\n );\n let dallocDict = {};\n for (var dd in dallocations) {\n dallocDict[directRouteInds[dd]] = dallocations[dd];\n }\n var pallocations = [];\n\n for (var ii = 0; ii < initLengthRoutes; ii++) {\n if (directRouteInds.includes(ii.toString())) {\n //console.log('ADDING ALLOCATION FOR SINGLE ROUTE')\n pallocations.push(dallocDict[ii]);\n } else {\n pallocations.push(new Big(0));\n }\n }\n var presult = [];\n for (var j in routes) {\n let route = routes[j];\n let nodeRoute = nodeRoutes[j];\n let allocation = pallocations[j];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n presult.push(output);\n }\n var presultTotal = presult.reduce((a, b) => a.plus(b), new Big(0));\n } else {\n var presultTotal = new Big(0);\n }\n if (presultTotal.gt(fullResultTotal)) {\n var result = presult;\n var allocations = pallocations;\n } else {\n var result = fullResult;\n var allocations = fullResultAllocations;\n }\n // NEED TO COMPARE BETWEEEN DIRECT AND MULTI HOP TO GET BEST OUTPUT\n return {\n result: result,\n allocations: allocations,\n };\n}\n\nasync function getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength = 3,\n threshold = 0.001\n) {\n var totalInput = new Big(totalInput);\n let paths = await getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength\n );\n if (!paths.length) {\n return {\n allocations: [],\n outputs: new Big(0),\n routes: [],\n nodeRoutes: [],\n };\n }\n let poolChains = await getPoolChainFromPaths(paths, pools, threshold);\n\n let routes = await getRoutesFromPoolChain(poolChains);\n let nodeRoutes = await getNodeRoutesFromPathsAndPoolChains(paths, poolChains);\n // let allocations = await getBestOptInput(routes, nodeRoutes, totalInput);\n // // fix integer rounding for allocations:\n // allocations = checkIntegerSumOfAllocations(allocations, totalInput);\n // let outputs = getBestOptOutput(routes, nodeRoutes, totalInput);\n let inputOutput = await getBestOptInputAndOutput(\n routes,\n nodeRoutes,\n totalInput\n );\n let allocations = inputOutput.input;\n let outputs = inputOutput.output;\n\n return {\n allocations: allocations,\n outputs: outputs,\n routes: routes,\n nodeRoutes: nodeRoutes,\n };\n}\n\nfunction getHopsFromRoutes(routes, nodeRoutes, allocations) {\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n let hop = {\n pool: route[0],\n allocation: allocation,\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n };\n hops.push(hop);\n }\n return hops;\n}\n\nfunction distillHopsByPool(hops) {\n // console.log('some HOPS =');\n // console.log(hops);\n let distilledHops = [];\n let poolIds = [];\n let poolId2allocation = {};\n for (var i in hops) {\n let hop = hops[i];\n if (hop.allocation === '0') {\n continue;\n }\n // console.log(`HOP ${i} IS...`);\n // console.log(hop);\n let poolId = hop.pool['id'];\n if (poolIds.includes(poolId)) {\n poolId2allocation[poolId] = new Big(poolId2allocation[poolId])\n .plus(new Big(hop.allocation))\n .toString();\n } else {\n poolId2allocation[poolId] = new Big(hop.allocation).toString();\n poolIds.push(poolId);\n }\n }\n // let poolsWithOrder = [...new Set(...hops.map((item) => item.pool))]\n let keys = Object.keys(poolId2allocation);\n for (var j in keys) {\n var poolId = keys[j];\n let hop = hops.filter(\n item => item.pool.id.toString() === poolId.toString()\n )[0];\n let distilledHop = {\n pool: hop.pool,\n allocation: poolId2allocation[poolId],\n inputToken: hop.inputToken,\n outputToken: hop.outputToken,\n };\n distilledHops.push(distilledHop);\n }\n return distilledHops;\n}\n\nfunction getDistilledHopActions(distilledHops, slippageTolerance) {\n let actions = [];\n for (var i in distilledHops) {\n let hop = distilledHops[i];\n let expectedAmountOut = getOutputSingleHop(\n hop.pool,\n hop.inputToken,\n hop.outputToken,\n hop.allocation\n );\n let minimumAmountOut = new Big(expectedAmountOut)\n .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n .round()\n .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n let action = {\n pool_id: hop.pool.id,\n token_in: hop.inputToken,\n token_out: hop.outputToken,\n amount_in: hop.allocation,\n min_amount_out: minimumAmountOut,\n };\n actions.push(action);\n }\n return actions;\n}\nfunction getMiddleTokenTotalsFromFirstHopActions(firstHopActions) {\n let middleTokens = [...new Set(firstHopActions.map(item => item.token_out))];\n let middleTokenTotals = {};\n for (var i in middleTokens) {\n let middleToken = middleTokens[i];\n let mtActions = firstHopActions.filter(\n item => item.token_out === middleToken\n );\n let mtTotal = mtActions\n .map(item => new Big(item.min_amount_out))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n middleTokenTotals[middleToken] = mtTotal;\n }\n return middleTokenTotals;\n}\nfunction getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n) {\n // get routes that use middle token.\n // (input route alloction) /sum(input allocations of routes with middle token) * (total_middleToken)\n let mask = [];\n for (var i in nodeRoutes) {\n if (nodeRoutes[i][1] === middleToken) {\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n let froutes = [];\n let fallocations = [];\n let fnoderoutes = [];\n for (var i in routes) {\n if (mask[i]) {\n froutes.push(routes[i]);\n fallocations.push(allocations[i]);\n fnoderoutes.push(nodeRoutes[i]);\n }\n }\n let sumfallocations = fallocations.reduce(\n (a, b) => new Big(a).plus(new Big(b)),\n new Big(0)\n );\n let middleAllocations = fallocations.map(item =>\n new Big(item).div(sumfallocations).times(new Big(middleTokenTotal))\n );\n let secondHopRoutes = froutes.map(item => [item[1]]);\n let secondHopNodeRoutes = fnoderoutes.map(item => [item[1], item[2]]);\n middleAllocations = checkIntegerSumOfAllocations(\n middleAllocations,\n middleTokenTotal\n );\n return {\n routes: secondHopRoutes,\n nodeRoutes: secondHopNodeRoutes,\n allocations: middleAllocations,\n };\n}\n\nfunction getHopActionsFromRoutes(routes, nodeRoutes, allocations) {\n // console.log('INSIDE GET HOP ACTIONS FROM ROUTES');\n // console.log('ROUTES ARE...');\n // console.log(routes);\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n // console.log('ALLOCATIONS ARE...');\n // console.log(allocations);\n let totalInput = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (new Big(allocation).eq(new Big(0))) {\n continue;\n }\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n for (var j in route) {\n let pool = route[j];\n // console.log('J IS...');\n // console.log(j);\n // console.log('NODE ROUTE IS...');\n // console.log(nodeRoute);\n if (j == 0) {\n //first hop.\n // console.log(nodeRoute[0]);\n // console.log(nodeRoute[1]);\n var hop = {\n pool: pool,\n allocation: allocation.toString(),\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('FIRST HOP IS...');\n // console.log(hop);\n hops.push(hop);\n if (nodeRoute.length > 2) {\n var middleTokenAllocation = getOutputSingleHop(\n pool,\n nodeRoute[0],\n nodeRoute[1],\n allocation\n );\n }\n } else {\n // second hop\n var hop = {\n pool: pool,\n allocation: middleTokenAllocation.toString(),\n inputToken: nodeRoute[1],\n outputToken: nodeRoute[2],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('SECOND HOP IS...');\n // console.log(hop);\n hops.push(hop);\n }\n }\n }\n // console.log('HOP ACTIONS FOUND TO BE');\n // console.log(hops);\n return hops;\n}\n\n// TODO: Clean this function. I don't need all the \"actions\" just the hops.\n// TODO: re-order actions to ensure each route is complete with zero input for second hop before starting next route.\nfunction getActionListFromRoutesAndAllocations(\n routes,\n nodeRoutes,\n allocations\n) {\n // REPLACE THE CODE BELOW WITH THE FUNCTION HERE.\n return getHopActionsFromRoutes(routes, nodeRoutes, allocations);\n var actions = [];\n var all_hops = [];\n let firstHops = getHopsFromRoutes(routes, nodeRoutes, allocations);\n\n firstHops = firstHops.filter(hop => new Big(hop.allocation).gt(new Big(0)));\n all_hops.push(...firstHops);\n let distilledFirstHops = distillHopsByPool(firstHops);\n let firstHopActions = getDistilledHopActions(\n distilledFirstHops,\n slippageTolerance\n );\n actions.push(...firstHopActions);\n let middleTokenTotals = getMiddleTokenTotalsFromFirstHopActions(\n firstHopActions\n );\n // console.log('first hop actions are...');\n // console.log(firstHopActions);\n let middleTokens = Object.keys(middleTokenTotals);\n // console.log('middle token totals are...');\n // console.log(middleTokenTotals);\n // console.log('middle tokens are...');\n // console.log(middleTokens);\n for (var tokenIndex in middleTokens) {\n var secondHops = [];\n let middleToken = middleTokens[tokenIndex];\n // console.log('current middle token is ');\n // console.log(middleToken);\n let middleTokenTotal = middleTokenTotals[middleToken];\n // console.log('current middle token total is...');\n // console.log(middleTokenTotal);\n let middleTokenRoutesWithAllocations = getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n );\n // console.log('current middle tokens routes with allocations are...');\n // console.log(middleTokenRoutesWithAllocations);\n let middleTokenRoutes = middleTokenRoutesWithAllocations.routes;\n let middleTokenAllocations = middleTokenRoutesWithAllocations.allocations;\n let middleTokenNodeRoutes = middleTokenRoutesWithAllocations.nodeRoutes;\n // console.log('middle token routes are...');\n // console.log(middleTokenRoutes);\n // console.log('middle token allocations are...');\n // console.log(middleTokenAllocations);\n // console.log('middle token node routes are...');\n // console.log(middleTokenNodeRoutes);\n secondHops.push(\n ...getHopsFromRoutes(\n middleTokenRoutes,\n middleTokenNodeRoutes,\n middleTokenAllocations\n )\n );\n // console.log('CURRENT SECOND HOPS', secondHops);\n // console.log(secondHops.length);\n // console.log(secondHops.map((hop) => hop.allocation));\n // console.log('filter out zero allocation 2nd hops:');\n secondHops = secondHops.filter(hop =>\n new Big(hop.allocation).gt(new Big(0))\n );\n // console.log(secondHops);\n all_hops.push(...secondHops);\n // console.log('second hops are currently...');\n // console.log(secondHops);\n let distilledSecondHopsForToken = distillHopsByPool(secondHops);\n // console.log('distilled second hops are...');\n let secondHopActionsForToken = getDistilledHopActions(\n distilledSecondHopsForToken,\n slippageTolerance\n );\n // console.log(secondHopActionsForToken);\n actions.push(...secondHopActionsForToken);\n }\n\n //TODO: NEED TO RUN INTEGER ROUNDING FUNCTION ON MIDDLE TOKEN ALLOCATIONS\n\n // TODO: check the node routes. for double-hop cases, find the hop action for each hop.\n // For now, we are assuming no parallel swaps if there is a double-hop.\n\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n // We only have to worry about re-ordering the actions for cases (3) and (4).\n\n let orderedHops = orderHops(all_hops, routes, nodeRoutes, allocations);\n\n // console.log('ALL HOPS', all_hops);\n return orderedHops;\n // return actions;\n}\n\nfunction orderHops(hops, routes, nodeRoutes, allocations) {\n // first get rid of zero allocation routes\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n let filteredRoutes = [];\n let filteredNodeRoutes = [];\n let filteredAllocations = [];\n for (var i in routes) {\n // remove zero-allocation routes.\n let allocation = new Big(allocations[i]);\n if (allocation.gt(new Big(0))) {\n filteredAllocations.push(allocation);\n filteredRoutes.push(routes[i]);\n filteredNodeRoutes.push(nodeRoutes[i]);\n }\n // console.log('FILTERED NODE ROUTES ARE...');\n // console.log(filteredNodeRoutes);\n }\n // next check node routes to see if it is case 1, 2, 3, or 4.\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n if (filteredNodeRoutes.length === 1) {\n // only one route.\n let currentNodeRoute = filteredNodeRoutes[0];\n if (currentNodeRoute.length === 2) {\n // case 1.\n return hops;\n } else {\n // case 3. assume there are only 3 nodes (double-hop)\n //make sure order of hops is such that input token precedes output token.\n //make sure the amount_in for second hop is zero (which will grab all of output of first hop to use.)\n let firstHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[0]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[1]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n\n let orderedHops = [firstHop, secondHop];\n return orderedHops;\n }\n } else if (filteredNodeRoutes.length === 2) {\n // two routes.\n let lengthNodeRoutes = filteredNodeRoutes.map(nr => nr.length);\n // sub cases:\n // [2,2] -- parallel swap. (direct) -- case 2\n // [2,3] -- direct swap in parallel with double hop.\n // [3,2] -- double hop in parallel with direct swap.\n // [3,3] -- double hop in parallel with double hop. -- case 4\n let orderedHops = [];\n if (arrayEquals(lengthNodeRoutes, [2, 2])) {\n return hops;\n } else if (arrayEquals(lengthNodeRoutes, [2, 3])) {\n directNodeRoute = filteredNodeRoutes[0];\n doubleNodeRoute = filteredNodeRoutes[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 2])) {\n directNodeRoute = filteredNodeRoutes[1];\n doubleNodeRoute = filteredNodeRoutes[0];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 3])) {\n orderedHops = [];\n\n for (var i in filteredNodeRoutes) {\n let doubleNodeRoute = filteredNodeRoutes[i];\n let doubleHopMiddleToken = doubleNodeRoute[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === doubleNodeRoute[0] &&\n hop.outputToken === doubleHopMiddleToken\n )[0];\n let secondHop = hops.filter(\n hop =>\n hop.inputToken === doubleHopMiddleToken &&\n hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n orderedHops.push(firstHop);\n orderedHops.push(secondHop);\n }\n return orderedHops;\n } else {\n return hops;\n }\n for (var i in filteredNodeRoutes) {\n let currentNodeRoute = filteredNodeRoutes[i];\n if (currentNodeRoute.length === 2) {\n }\n }\n }\n\n return hops;\n}\n\n// function getActionListFromRoutesAndAllocationsORIG(\n// routes,\n// nodeRoutes,\n// allocations,\n// slippageTolerance\n// ) {\n// let actions = [];\n// for (var i in routes) {\n// let route = routes[i];\n// let nodeRoute = nodeRoutes[i];\n// let allocation = new Big(allocations[i]);\n// if (allocation.eq(new Big(0))) {\n// continue;\n// }\n// if (!route.length) {\n// route = [route];\n// }\n// if (route.length === 1) {\n// //single hop. only one action.\n// let pool = route[0];\n// let poolId = pool.id;\n// let inputToken = nodeRoute[0];\n// let outputToken = nodeRoute[1];\n// let expectedAmountOut = getOutputSingleHop(\n// pool,\n// inputToken,\n// outputToken,\n// allocation\n// );\n// let minimumAmountOut = expectedAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n// let action = {\n// pool_id: poolId,\n// token_in: inputToken,\n// token_out: outputToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOut.toString(),\n// };\n// actions.push(action);\n// } else if (route.length === 2) {\n// // double hop. two actions.\n// let pool1 = route[0];\n// let pool2 = route[1];\n// let pool1Id = pool1.id;\n// let pool2Id = pool2.id;\n// let inputToken = nodeRoute[0];\n// let middleToken = nodeRoute[1];\n// let outputToken = nodeRoute[2];\n// let expectedAmountOutFirstHop = getOutputSingleHop(\n// pool1,\n// inputToken,\n// middleToken,\n// allocation\n// );\n// let minimumAmountOutFirstHop = expectedAmountOutFirstHop\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n\n// let action1 = {\n// pool_id: pool1Id,\n// token_in: inputToken,\n// token_out: middleToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOutFirstHop,\n// };\n// let expectedFinalAmountOut = getOutputSingleHop(\n// pool2,\n// middleToken,\n// outputToken,\n// minimumAmountOutFirstHop\n// );\n// let minimumAMountOutSecondHop = expectedFinalAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString();\n// let action2 = {\n// pool_id: pool2Id,\n// token_in: middleToken,\n// token_out: outputToken,\n// amount_in: minimumAmountOutFirstHop,\n// min_amount_out: minimumAMountOutSecondHop,\n// };\n// actions.push(action1);\n// actions.push(action2);\n// }\n// }\n// return actions;\n// }\n\nfunction* range(start, end) {\n for (; start <= end; ++start) {\n yield start;\n }\n}\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction* numericCombinations(n, r, loc = []) {\n var idx = loc.length;\n if (idx === r) {\n yield loc;\n return;\n }\n for (let next of range(idx ? last(loc) + 1 : 0, n - r + idx)) {\n yield* numericCombinations(n, r, loc.concat(next));\n }\n}\n\nfunction* combinations(arr, r) {\n for (let idxs of numericCombinations(arr.length, r)) {\n yield idxs.map(i => arr[i]);\n }\n}\n\n// #middleTokenTotals = getMiddleTokenTotals(routes,nodeRoutes,allocations)\n// #TODO: complete this function with middle token checks.\n\n// #consider all routes of length 2 with non-zero allocation. (double-hops)\n// # among these, check for parallel swaps. That is, check for common node routes\n// # for first hop. Then check for common node routes on second hop.\n// # when common node routes occur for the first hop:\n// # 1. Calculate the total expected output of intermediate token.\n// # 2.\n// # when common node routes occur for the second hop:\n// # 1. get a ratio of the input allocations of the full routes associated with\n// # these common node routes. allocate the total intermediate token output\n// # toward these 2nd hop routes in the same ratio as their route input allocations.\n\nexport async function getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n maxPathLength = 3,\n threshold = 0.001,\n numberOfRoutesLimit = 2,\n MAX_NUMBER_PARALLEL_POOLS = 4,\n decimalsCulledPoolIds = []\n) {\n if (!totalInput) {\n return [];\n }\n var totalInput = new Big(totalInput);\n\n // remove pools that have an id from the decimalCulledPoolIds\n pools = pools.filter(p => !decimalsCulledPoolIds.includes(p.id));\n\n let resDict = await getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength,\n threshold\n );\n\n let allocations = resDict.allocations;\n\n // let outputs = resDict.outputs;\n let routes = resDict.routes;\n let nodeRoutes = resDict.nodeRoutes;\n\n let sortedIndexValues = argsort(allocations);\n let topIndices = sortedIndexValues.slice(0, 10);\n var reducedRoutes = [];\n var reducedNodeRoutes = [];\n for (var ind of topIndices) {\n reducedRoutes.push(routes[ind]);\n reducedNodeRoutes.push(nodeRoutes[ind]);\n }\n routes = reducedRoutes;\n nodeRoutes = reducedNodeRoutes;\n\n // TODO: compare pairs of routes to get the best allocation pair-wise.\n var currentBestOutput = new Big(0);\n var bestResDict = { routes: [] };\n var bestAllocations = resDict.allocations;\n var bestNodeRoutes = resDict.nodeRoutes;\n var bestRoutes = resDict.routes;\n // first check parallel swap with 4 actions. store result.\n var parallelNodeRoutes = [];\n var parallelRoutes = [];\n for (var n in bestRoutes) {\n let currentNodeRoute = bestNodeRoutes[n];\n if (currentNodeRoute.length == 2) {\n parallelNodeRoutes.push(currentNodeRoute);\n parallelRoutes.push(bestRoutes[n]);\n }\n }\n // console.log(`${parallelNodeRoutes.length} parallel routes found...`);\n var bestRoutesAreParallel = false;\n if (parallelNodeRoutes.length > 0) {\n // first calculate the expected result using only parallel routes.\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(parallelRoutes, parallelNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n parallelRoutes,\n parallelNodeRoutes,\n totalInput\n );\n let parallellAllocations = filteredAllocationsAndOutputs.allocations;\n let parallelOutputs = filteredAllocationsAndOutputs.result;\n\n if (parallellAllocations.length > MAX_NUMBER_PARALLEL_POOLS) {\n // now sort by allocation value to the top 4 parallel swaps:\n let sortIndices = argsort(parallellAllocations);\n\n sortIndices = sortIndices.slice(0, MAX_NUMBER_PARALLEL_POOLS);\n var filteredParallelRoutes = [];\n var filteredParallelNodeRoutes = [];\n for (var i in sortIndices) {\n filteredParallelRoutes.push(parallelRoutes[sortIndices[i]]);\n filteredParallelNodeRoutes.push(parallelNodeRoutes[sortIndices[i]]);\n }\n filteredAllocationsAndOutputs = getOptOutputVec(\n filteredParallelRoutes,\n filteredParallelNodeRoutes,\n totalInput\n );\n parallellAllocations = filteredAllocationsAndOutputs.allocations;\n parallelOutputs = filteredAllocationsAndOutputs.result;\n }\n\n let parallelOutput = parallelOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(parallelOutput).gt(currentBestOutput)) {\n bestAllocations = parallellAllocations;\n currentBestOutput = parallelOutput;\n // console.log(\n // 'BEST OUTPUT FROM PARALLEL SWAPS IS NOW... ',\n // currentBestOutput.toString()\n // );\n bestRoutes = parallelRoutes;\n bestNodeRoutes = parallelNodeRoutes;\n bestRoutesAreParallel = true;\n }\n }\n var canHaveTwoRoutes = false;\n // initialize this variable to check if we can have two routes, or if all routes share a pool for an edge case.\n // console.log('THE NUMBER OF ROUTES IS...', routes.length);\n\n for (var i in routes) {\n for (var j in routes) {\n if (j > i) {\n var route1 = routes[i];\n var route2 = routes[j];\n var nodeRoute1 = nodeRoutes[i];\n var nodeRoute2 = nodeRoutes[j];\n // check if they share a pool.\n let route1PoolIds = new Set(route1.map(r => r.id));\n let route2PoolIds = new Set(route2.map(r => r.id));\n var sharePool = false;\n for (var route1PoolId of route1PoolIds) {\n if (route2PoolIds.has(route1PoolId)) {\n sharePool = true;\n }\n }\n if (sharePool) {\n // routes are not independent. skip this pair.\n // console.log('skipping this pair because pool was shared.');\n continue;\n } else {\n canHaveTwoRoutes = true;\n let currentRoutes = [route1, route2];\n let currentNodeRoutes = [nodeRoute1, nodeRoute2];\n\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n\n // if (currentResDict.outputs.gt(currentBestOutput)) {\n // console.log('DIFF IS...', currentResDict.outputs.minus(currentBestOutput).toString());\n // bestResDict = currentResDict;\n // currentBestOutput = bestResDict.outputs;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n // console.log(bestResDict.routes);\n // console.log(bestResDict.allocations.map((i) => i.toString()));\n // console.log(bestResDict.outputs.toString());\n }\n }\n }\n }\n\n if (!canHaveTwoRoutes) {\n // now we need to check through the routes in single manner to find the best one:\n for (var i in routes) {\n let currentRoutes = [routes[i]];\n let currentNodeRoutes = [nodeRoutes[i]];\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(currentRoutes, currentNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce((a, b) => a.plus(b), new Big(0));\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n }\n }\n\n // resDict = bestResDict;\n\n allocations = bestAllocations;\n\n // let outputs = resDict.outputs;\n routes = bestRoutes;\n nodeRoutes = bestNodeRoutes;\n\n if (routes.length < 1) {\n return [];\n }\n\n // check the top numberOfRoutesLimit\n // console.log('initial allocations are...');\n // console.log(allocations.map((a) => a.toString()));\n // console.log('fixed allocations are...');\n // console.log(allocations.map((a) => new Big(a).toFixed()));\n //SORT BY ALLOCATIONS\n let allSortedIndices = argsort(allocations.map(a => new Big(a)));\n if (bestRoutesAreParallel) {\n numberOfRoutesLimit = 4;\n }\n let sortedIndices = allSortedIndices.slice(0, numberOfRoutesLimit);\n\n // console.log('sorted Indices are');\n // console.log(sortedIndices);\n var filteredRoutes = [];\n var filteredNodeRoutes = [];\n for (var i in sortedIndices) {\n let index = sortedIndices[i];\n filteredRoutes.push(routes[index]);\n filteredNodeRoutes.push(nodeRoutes[index]);\n }\n\n // console.log('filteredRoutes are ...');\n // console.log(filteredRoutes);\n for (var i in filteredRoutes) {\n if (!filteredRoutes[i].length) {\n filteredRoutes[i] = [filteredRoutes[i]];\n }\n }\n // console.log('filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n\n // THE BELOW CODE WILL ENSURE THAT ROUTES ARE INDEPENDENT (e.g. THE ROUTES WILL NOT SHARE A POOL)\n\n let route1PoolIds = filteredRoutes[0].map(pool => pool.id);\n // console.log('route 1 pool ids:');\n // console.log(route1PoolIds);\n if (filteredRoutes.length > 1) {\n let route2PoolIds = filteredRoutes[1].map(pool => pool.id);\n // console.log('route 2 pool ids:');\n // console.log(route2PoolIds);\n var sharedRoute = false;\n for (var i in route2PoolIds) {\n if (route1PoolIds.includes(route2PoolIds[i])) {\n // a pool was shared between routes. need to calculate a new second route.\n // console.log(\n // 'a pool was shared between routes. going to calculate a new second route'\n // );\n sharedRoute = true;\n break;\n }\n }\n }\n\n // NOTE -- this is a much simpler solution than that below. Instead of choosing the next best second route that doesn't share a\n // pool with the first route, we could just use the first route and allocate all inputs to it.\n // but, for larger transactions, it would be better to have option of two independent routes to spread out slippage.\n\n // if (sharedRoute) {\n // filteredRoutes = [filteredRoutes[0]];\n // filteredNodeRoutes = [filteredNodeRoutes[0]];\n // // TODO -- later can add in a second route that doesn't share a pool with first.\n // }\n\n // We're going to find the next-highest allocation route that doesn't share a pool with the first route.\n if (sharedRoute) {\n let allFilteredRoutes = [];\n let allFilteredNodeRoutes = [];\n for (var i in allSortedIndices) {\n allFilteredRoutes.push(routes[allSortedIndices[i]]);\n allFilteredNodeRoutes.push(nodeRoutes[allSortedIndices[i]]);\n }\n let firstRoute = allFilteredRoutes[0];\n // console.log('first route is...');\n // console.log(firstRoute);\n let firstRoutePoolIds = firstRoute.map(pool => pool.id);\n for (var i in allFilteredRoutes) {\n if (!allFilteredRoutes[i].length) {\n allFilteredRoutes[i] = [allFilteredRoutes[i]];\n }\n }\n // console.log('FIRST ROUTE POOL IDS ARE');\n // console.log(firstRoutePoolIds);\n let allFilteredRouteIds = allFilteredRoutes.map(route =>\n route.map(pool => pool.id)\n );\n // console.log('allFilteredRouteIds are ...');\n // console.log(allFilteredRouteIds);\n for (var i in allFilteredRouteIds) {\n // console.log('i is', i);\n // console.log('ALL FILTERED ROUTES [i] IS...');\n // console.log(allFilteredRouteIds[i]);\n for (var j in allFilteredRouteIds[i]) {\n // console.log('j is', j);\n // console.log('ALL FILTERED ROUTES [i][j] IS...');\n // console.log(allFilteredRouteIds[i][j]);\n if (firstRoutePoolIds.includes(allFilteredRouteIds[i][j])) {\n break;\n }\n\n var secondRoute = allFilteredRoutes[i];\n if (!secondRoute.length) {\n secondRoute = [secondRoute];\n }\n filteredRoutes = [allFilteredRoutes[0], secondRoute];\n filteredNodeRoutes = [\n allFilteredNodeRoutes[0],\n allFilteredNodeRoutes[i],\n ];\n break;\n }\n }\n // console.log('new filteredRoutes are ...');\n // console.log(filteredRoutes);\n // console.log('new filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n }\n\n // let filteredAllocations_check = getBestOptInput(\n // filteredRoutes,\n // filteredNodeRoutes,\n // totalInput\n // );\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(filteredRoutes, filteredNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n filteredRoutes,\n filteredNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n\n filteredAllocations = checkIntegerSumOfAllocations(\n filteredAllocations,\n totalInput\n ).map(stringAllo => new Big(stringAllo));\n\n let hops = getActionListFromRoutesAndAllocations(\n filteredRoutes,\n filteredNodeRoutes,\n filteredAllocations\n );\n\n var actions = [];\n // console.log('hops are...');\n // console.log(hops);\n\n for (var i in hops) {\n let hopInputTokenMeta = allTokens[hops[i].inputToken]\n ? allTokens[hops[i].inputToken]\n : await ftGetTokenMetadata(hops[i].inputToken, 'token input');\n\n let hopOutputTokenMeta = allTokens[hops[i].outputToken]\n ? allTokens[hops[i].outputToken]\n : await ftGetTokenMetadata(hops[i].outputToken, 'token sm');\n let hopOutputTokenDecimals = hopOutputTokenMeta.decimals;\n\n let expectedHopOutput = getOutputSingleHop(\n hops[i].pool,\n hops[i].inputToken,\n hops[i].outputToken,\n hops[i].allocation\n );\n let decimalEstimate = new Big(expectedHopOutput)\n .div(new Big(10).pow(hopOutputTokenDecimals))\n .toString();\n\n // Need to check if expected Hop Output is > 1. If not, then cull the corresponding pool and re-calculate.\n if (new Big(expectedHopOutput).lt(new Big(1))) {\n // purge the pool and recalculate.\n\n decimalsCulledPoolIds.push(hops[i].pool.id);\n return getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n (maxPathLength = maxPathLength),\n (threshold = threshold),\n (numberOfRoutesLimit = numberOfRoutesLimit),\n (MAX_NUMBER_PARALLEL_POOLS = MAX_NUMBER_PARALLEL_POOLS),\n (decimalsCulledPoolIds = decimalsCulledPoolIds)\n );\n }\n\n if (\n hops[i].inputToken == inputToken &&\n hops[i].outputToken == outputToken\n ) {\n var status = 'parallel swap';\n } else {\n var status = 'stableSmart';\n }\n\n let tokens = await Promise.all(\n hops[i].nodeRoute.map(async t =>\n allTokens[t] ? allTokens[t] : await ftGetTokenMetadata(t, 'smart')\n )\n );\n\n actions[i] = {\n estimate: decimalEstimate,\n pool: {\n fee: hops[i].pool.fee,\n gamma_bps: new Big(10000).minus(new Big(hops[i].pool.fee)), //.div(new Big(10000)), //hops[i].pool.gamma, //new Big(10000).minus(new Big(hops[i].pool.fee)).div(new Big(10000));\n id: hops[i].pool.id,\n partialAmountIn: new Big(hops[i].allocation).round().toString(),\n supplies: {\n [hops[i].pool.token1Id]: hops[i].pool.token1Supply,\n [hops[i].pool.token2Id]: hops[i].pool.token2Supply,\n },\n token0_ref_price: hops[i].pool.token0_price,\n tokenIds: [hops[i].pool.token1Id, hops[i].pool.token2Id],\n Dex: hops[i].pool.Dex,\n },\n status: status,\n token: hopInputTokenMeta,\n outputToken: hops[i].outputToken,\n inputToken: hops[i].inputToken,\n nodeRoute: hops[i].nodeRoute,\n route: hops[i].route,\n allRoutes: hops[i].allRoutes,\n allNodeRoutes: hops[i].allNodeRoutes,\n totalInputAmount: hops[i].totalInputAmount,\n allAllocations: hops[i].allAllocations,\n tokens: tokens,\n routeInputToken: inputToken,\n routeOutputToken: outputToken,\n overallPriceImpact: '0',\n };\n // console.log('INPUT TOKEN IS...');\n // console.log(hops[i].inputToken);\n actions[i].pool.x = actions[i].pool.supplies[hops[i].inputToken];\n actions[i].pool.y = actions[i].pool.supplies[hops[i].outputToken];\n }\n // now set partial amount in for second hops equal to zero:\n // also, set the total price impact value.\n let overallPriceImpact = await calculateSmartRouteV2PriceImpact(\n actions,\n allTokens\n );\n for (var i in actions) {\n let action = actions[i];\n action.overallPriceImpact = overallPriceImpact;\n if (action.outputToken === outputToken && action.inputToken != inputToken) {\n // only want to set second hop partial amount in to zero\n action.pool.partialAmountIn = '0';\n }\n }\n\n return actions;\n}\n\nasync function calculateSmartRouteV2PriceImpact(actions, allTokens) {\n // the goal is to take a weighted average of the price impact per route, treating each one at a time.\n // for single hop (parallel swaps), the price impact is calculated as before.\n // for double-hop, the market price, P, is determined using reserves of tokens in each pool in the route.\n // in both cases, we compare the 'market price', P , determined solely by reserves in pools, and the actual\n // average price, R, expected to be paid in the transaction.\n // the price impact is then defined as (P-R)/R * 100 and is a percentage number, returned as a string.\n\n let deltaY = actions\n .filter(a => a.outputToken == a.routeOutputToken)\n .map(a => new Big(a.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n // console.log('DELTA Y IS...');\n // console.log(deltaY.toString());\n\n let inputTokenMeta = actions[0].tokens[0];\n let deltaX = new Big(actions[0].totalInputAmount).div(\n new Big(10).pow(inputTokenMeta.decimals)\n );\n let R = deltaY.div(deltaX);\n var P = new Big(0);\n let routes = actions[0].allRoutes;\n let nodeRoutes = actions[0].allNodeRoutes;\n let allocations = actions[0].allAllocations.map(a => new Big(a));\n let totalAllocations = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0));\n\n let weights = allocations.map(a => a.div(totalAllocations));\n\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let tokens = await Promise.all(\n nodeRoute.map(async t => {\n return allTokens[t]\n ? allTokens[t]\n : await ftGetTokenMetadata(t, 'sm routes');\n })\n );\n let weight = weights[i];\n if (route.length == 1) {\n let num = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n let denom = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n var routeMarketPrice = num.div(denom);\n } else {\n let num1 = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n\n let denom1 = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let num2 = new Big(route[1].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let denom2 = new Big(route[1].reserves[nodeRoute[2]]).div(\n new Big(10).pow(tokens[2].decimals)\n );\n\n var routeMarketPrice = num1\n .div(denom1)\n .times(num2)\n .div(denom2);\n }\n P = P.plus(weight.times(new Big(1).div(routeMarketPrice)));\n }\n\n let priceImpact = P.minus(R)\n .div(R)\n .times(new Big(100))\n .toString();\n return priceImpact;\n}\n\nfunction decor(arr) {\n var res = [];\n for (var i in arr) {\n res.push([arr[i], i]);\n }\n return res;\n}\nfunction argsort(arr) {\n let undecor = a => a[1]; // leave only index\n let decorated = decor(arr);\n\n return decorated\n .sort((a, b) => new Big(b[0]).minus(new Big(a[0])))\n .map(undecor);\n}\n\nfunction getPoolsByToken1ORToken2(pools, token1, token2) {\n let filteredPools = pools.filter(\n item =>\n item.token1Id === token1 ||\n item.token2Id === token1 ||\n item.token1Id === token2 ||\n item.token2Id === token2\n );\n return filteredPools;\n}\n\nfunction getPoolsByToken1ANDToken2(\n pools,\n token1,\n token2,\n cullZeroLiquidityPools = true\n) {\n let filteredPools = pools.filter(\n item =>\n (item.token1Id === token1 && item.token2Id === token2) ||\n (item.token1Id === token2 && item.token2Id === token1)\n );\n if (cullZeroLiquidityPools) {\n filteredPools = filteredPools.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n }\n return filteredPools;\n}\n\nfunction getLiqudityOfPoolsFromList(pools) {\n let liquidities = [];\n for (var poolInd in pools) {\n let pool = pools[poolInd];\n pool.amounts = [pool.token1Supply, pool.token2Supply];\n let poolBigAmounts = pool.amounts.map(item => new Big(item));\n let liquidity = poolBigAmounts[0].times(poolBigAmounts[1]);\n liquidities.push(liquidity);\n }\n return liquidities;\n}\n\nfunction getNormalizedLiquiditiesFromList(pools) {\n let liquidities = getLiqudityOfPoolsFromList(pools);\n let maxLiq = bigMax(liquidities);\n let normalizedLiquidities = liquidities.map(item => item.div(maxLiq));\n return normalizedLiquidities;\n}\n\nfunction bigMax(arrayOfBigs) {\n if (arrayOfBigs.length < 1) {\n return null;\n }\n let maxElem = arrayOfBigs[0];\n for (var ind in arrayOfBigs) {\n let val = arrayOfBigs[ind];\n if (val.gt(maxElem)) {\n maxElem = val;\n }\n }\n return maxElem;\n}\n\nfunction cullPoolsWithInsufficientLiquidity(pools, threshold = 0.0001) {\n var thresh = new Big(threshold);\n let normLiq = getNormalizedLiquiditiesFromList(pools);\n let filteredPools = [];\n for (var i = 0; i < normLiq.length; i++) {\n if (normLiq[i] > thresh) {\n filteredPools.push(pools[i]);\n }\n }\n return filteredPools;\n}\n\nfunction cartesianProduct(a) {\n let result = a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));\n return result;\n}\n\nfunction addEdge(g, edge) {\n let src = edge[0];\n let dst = edge[1];\n if (Object.keys(g).includes(src)) {\n if (!Object.keys(g[src]).includes(dst)) {\n g[src][dst] = 1;\n }\n } else {\n g[src] = {};\n g[src][dst] = 1;\n }\n if (Object.keys(g).includes(dst)) {\n if (!Object.keys(g[dst]).includes(src)) {\n g[dst][src] = 1;\n }\n } else {\n g[dst] = {};\n g[dst][src] = 1;\n }\n}\n\nfunction addEdges(g, edgeList) {\n for (var n in edgeList) {\n let edge = edgeList[n];\n addEdge(g, edge);\n }\n}\n\nfunction deleteEdge(g, edge) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n let e1 = edge[0];\n let e2 = edge[1];\n if (Object.keys(gNew).includes(e1)) {\n if (Object.keys(gNew[e1]).includes(e2)) {\n delete gNew[e1][e2];\n }\n }\n if (Object.keys(gNew).includes(e2)) {\n if (Object.keys(gNew[e2]).includes(e1)) {\n delete gNew[e2][e1];\n }\n }\n return gNew;\n}\n\nfunction deleteNode(g, node) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n if (Object.keys(gNew).includes(node)) {\n delete gNew[node];\n }\n let keys = Object.keys(gNew);\n for (var nodeInd in keys) {\n let nodeNow = keys[nodeInd];\n if (Object.keys(gNew[nodeNow]).includes(node)) {\n delete gNew[nodeNow][node];\n }\n }\n return gNew;\n}\n\nfunction dijkstra(graph, s) {\n var solutions = {};\n solutions[s] = {};\n solutions[s].path = [];\n solutions[s].dist = 0;\n\n while (true) {\n var parent = null;\n var nearest = null;\n var dist = Infinity;\n\n //for each existing solution\n for (var n in solutions) {\n if (!solutions[n]) {\n solutions[n] = {};\n }\n if (!solutions[n].path) continue;\n var ndist = solutions[n].dist;\n var adj = graph[n];\n //for each of its adjacent nodes...\n for (var a in adj) {\n //without a solution already...\n if (!solutions[a]) {\n solutions[a] = {};\n }\n if (solutions[a].path) continue;\n //choose nearest node with lowest *total* cost\n var d = adj[a] + ndist;\n if (d < dist) {\n //reference parent\n parent = solutions[n].path;\n nearest = a;\n dist = d;\n }\n }\n }\n\n //no more solutions\n if (dist === Infinity) {\n break;\n }\n\n //extend parent's solution path\n solutions[nearest].path = parent.concat(nearest);\n //extend parent's cost\n solutions[nearest].dist = dist;\n }\n\n return solutions;\n}\n\nfunction shortestPath(g, src, dst, ignore_nodes = [], ignore_edges = []) {\n let gTemp = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure. If we can use lodash, could use _.cloneDeep(obj)\n // remove nodes\n for (var nodeInd in ignore_nodes) {\n let nodeNow = ignore_nodes[nodeInd];\n gTemp = deleteNode(gTemp, nodeNow);\n }\n // remove edges\n for (var edgeInd in ignore_edges) {\n let edgeNow = ignore_edges[edgeInd];\n gTemp = deleteEdge(gTemp, edgeNow);\n }\n let solution = dijkstra(gTemp, src)[dst];\n solution.path.unshift(src); // original algorithm doesn't include source node in path\n return solution;\n}\n\nfunction* count(firstval = 0, step = 1) {\n let x = firstval;\n while (true) {\n yield x;\n x = x + 1;\n }\n}\n\nclass PathBuffer {\n constructor() {\n this.paths = [];\n this.sortedpaths = [];\n //this.counter = count();\n }\n len() {\n return this.sortedpaths.length;\n }\n\n push(cost, path) {\n if (path && !arrayContains(this.paths, path)) {\n this.sortedpaths.push([cost, path]);\n this.sortedpaths.sort(function(a, b) {\n return a[0] - b[0];\n });\n //heappush(this.sortedpaths, (cost, this.counter.next().value,path));\n this.paths.push(path);\n }\n }\n\n pop() {\n //let val = heappop(this.sortedpaths);\n let val = this.sortedpaths.shift();\n let cost = val[0];\n let path = val[1];\n this.paths.splice(this.paths.indexOf(path), 1);\n return path;\n }\n}\n\nfunction arrayEquals(a, b) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((val, index) => val === b[index])\n );\n}\n\nfunction arrayContains(arr, obj) {\n // checks to see if the input array contains a reference object, obj, using\n // JSON.stringify() .\n let obj_json = JSON.stringify(obj);\n for (var itemInd in arr) {\n if (JSON.stringify(arr[itemInd]) == obj_json) {\n return true;\n }\n }\n return false;\n}\n\nfunction* yenFromPy(g, source, target) {\n //adapted from the python implementation in networkx.algorithms.simple_paths.shortest_simple_paths()\n let listA = [];\n let listB = new PathBuffer();\n let prev_path = null;\n\n while (true) {\n if (!prev_path) {\n let sol = shortestPath(g, source, target);\n let length = sol.dist;\n let path = sol.path;\n listB.push(length, path);\n } else {\n let ignore_nodes = [];\n let ignore_edges = [];\n for (var i = 1; i < prev_path.length; i++) {\n let root = prev_path.slice(0, i);\n let root_length = root.length;\n for (var pathInd in listA) {\n let path = listA[pathInd];\n\n if (arrayEquals(path.slice(0, i), root)) {\n let edgeToIgnore = [path[i - 1], path[i]];\n ignore_edges.push(edgeToIgnore);\n }\n }\n try {\n let sol = shortestPath(\n g,\n root[root.length - 1],\n target,\n (ignore_nodes = ignore_nodes),\n (ignore_edges = ignore_edges)\n );\n let length = sol.dist;\n let spur = sol.path;\n let path = root.slice(0, root.length - 1).concat(spur);\n listB.push(root_length + length, path);\n } catch (e) {\n //console.log(`yenFromPy error was... ${e}`)\n //dont do anything.\n }\n ignore_nodes.push(root[root.length - 1]);\n }\n }\n if (listB.sortedpaths) {\n try {\n let path = listB.pop();\n yield path;\n listA.push(path);\n prev_path = path;\n } catch (e) {\n break;\n }\n } else {\n break;\n }\n }\n}\n\nfunction getKShortestPaths(g, source, target, k, maxPathLength = 3) {\n let paths = [];\n if (maxPathLength < 2) {\n var maxPathLength = 2;\n }\n let gen = yenFromPy(g, source, target);\n for (var n = 1; n <= k; n++) {\n try {\n let res = gen.next().value;\n if (res && !arrayContains(paths, res)) {\n if (res.length > maxPathLength) {\n // console.log(\n // `found all hops of length ${\n // maxPathLength - 1\n // } or less... breaking out of generator`\n // );\n break;\n }\n paths.push(res);\n }\n } catch (e) {\n break;\n }\n }\n return paths;\n}\n\nasync function getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength = 3\n) {\n let graph = getGraphFromPoolList(pools);\n return getKShortestPaths(graph, inputToken, outputToken, 100, maxPathLength);\n}\n\nasync function getAllPathsBelowLengthN(g, source, target, N, limit = 100) {\n // use Yen's algorithm to find the paths of length N or below between source and target nodes in graph g.\n\n let paths = [];\n\n let gen = await yenFromPy(g, source, target);\n let currentPathLength = 0;\n let count = 1;\n while (currentPathLength <= N) {\n // console.log(`CURRENT PATH LENGTH IS ${currentPathLength}`)\n try {\n let res = await gen.next().value;\n // console.log(`RES IS ${res}`)\n if (res && !arrayContains(paths, res)) {\n if (res.length > currentPathLength) {\n currentPathLength = res.length;\n if (currentPathLength > N) {\n break;\n }\n }\n paths.push(res);\n }\n count = count + 1;\n if (count > limit) {\n break;\n }\n } catch (e) {\n // console.log(e)\n break;\n }\n }\n return paths;\n}\n\nfunction getGraphFromPoolList(poolList) {\n let pools = poolList.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n let transitions = pools.map(item => [item.token1Id, item.token2Id]);\n let g = {};\n addEdges(g, transitions);\n return g;\n}\n\n////////////////////////////////////\n\n// MAIN FUNCTION\n\n////////////////////////////////////\n\n// TODO -- incorporate the following integrated function, which tries to\n// account for stablecoins within the context of smart routing.\n\n//TODO -- need the right API / hooks for GETSTABLESWAPACTION function and GETPARALLELSWAPACTIONS functions.\n\n//TODO -- transform the actions generated in this function into tranaction to execute.\n\n//TRYING: GETSTABLESWAPACTION <==> instantSwapGetTransactions\n\nexport async function stableSmart(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n) {\n let smartRouteActions = await getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n );\n return smartRouteActions;\n}\n\nexport function getExpectedOutputFromActionsORIG(actions, outputToken) {\n return actions\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nfunction getFeeForRoute(route) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n return p.fee;\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let fee1 = p1.fee;\n let fee2 = p2.fee;\n return fee1 + fee2;\n }\n}\n\nexport function getAverageFeeForRoutes(routes, nodeRoutes, totalInput) {\n let normalizedAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n ).map(a => a.div(new Big(totalInput)));\n let averageFee = 0;\n for (var i in routes) {\n averageFee += normalizedAllocations[i] * getFeeForRoute(routes[i]);\n }\n return averageFee;\n}\n","import { TokenMetadata, Pool, StablePool, EstimateSwapView } from '../types';\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from '../utils';\nimport Big from 'big.js';\nimport { SameInputTokenError, ZeroInputError, NoPoolError } from '../error';\nimport { ONLY_ZEROS, toPrecision } from '../utils';\nimport _ from 'lodash';\nimport { FEE_DIVISOR } from '../constant';\nimport { getSwappedAmount } from '../stable-swap';\nimport { ftGetTokenMetadata, ftGetTokensMetadata } from '../ref';\nimport { isStablePool } from '../utils';\nimport { getTokens } from '../indexer';\nimport {\n getStablePoolDecimal,\n isStablePoolToken,\n poolFormatter,\n} from '../utils';\nimport {\n stableSmart,\n getExpectedOutputFromActionsORIG,\n //@ts-ignore\n} from './smartRoutingLogic.js';\n\nexport enum PoolMode {\n PARALLEL = 'parallel swap',\n SMART = 'smart routing',\n SMART_V2 = 'stableSmart',\n STABLE = 'stable swap',\n}\n\nexport interface SwapParams {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n}\n\nexport interface SwapOptions {\n enableSmartRouting?: boolean;\n stablePools?: Pool[];\n stablePoolsDetail?: StablePool[];\n}\n\nexport const getSimplePoolEstimate = ({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n pool: Pool;\n amountIn: string;\n}) => {\n const amount_with_fee = Number(amountIn) * (FEE_DIVISOR - pool.fee);\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n const estimate = new Big(\n (\n (amount_with_fee * Number(out_balance)) /\n (FEE_DIVISOR * Number(in_balance) + amount_with_fee)\n ).toString()\n ).toFixed();\n\n return {\n estimate,\n pool,\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\nexport const getStablePoolEstimate = ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n stablePool: StablePool;\n pool?: Pool;\n}) => {\n const STABLE_LP_TOKEN_DECIMALS = getStablePoolDecimal(stablePool);\n\n const [amount_swapped, _, dy] = getSwappedAmount(\n tokenIn.id,\n tokenOut.id,\n amountIn,\n stablePool,\n STABLE_LP_TOKEN_DECIMALS\n );\n\n const amountOut =\n amount_swapped < 0 || isNaN(amount_swapped)\n ? '0'\n : toPrecision(scientificNotationToString(amount_swapped.toString()), 0);\n\n const dyOut =\n amount_swapped < 0 || isNaN(amount_swapped) || isNaN(dy)\n ? '0'\n : toPrecision(scientificNotationToString(dy.toString()), 0);\n\n const rates = stablePool.rates.reduce((acc, cur, i) => {\n return {\n ...acc,\n [stablePool.token_account_ids[i]]: cur,\n };\n }, {});\n\n return {\n estimate: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amountOut),\n noFeeAmountOut: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, dyOut),\n pool: {\n ...stablePool,\n rates,\n },\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\n/**\n * @description Get the estimate of the amount of tokenOut that can be received\n *\n */\nexport const singlePoolSwap = ({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n simplePools: Pool[];\n amountIn: string;\n stablePools?: StablePool[];\n}) => {\n if (!simplePools || simplePools.length === 0) {\n throw NoPoolError;\n }\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n // const pools = simplePools.concat(stablePools);\n\n const simplePoolsThisPair = simplePools.filter(\n p =>\n p.tokenIds.includes(tokenIn.id) &&\n p.tokenIds.includes(tokenOut.id) &&\n (!stablePools || !isStablePool(stablePools, p.id))\n );\n\n const estimatesSimplePool = simplePoolsThisPair.map(pool =>\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n })\n );\n\n const stablePoolThisPair = stablePools?.filter(\n sp =>\n sp.token_account_ids.includes(tokenIn.id) &&\n sp.token_account_ids.includes(tokenOut.id)\n );\n\n // different stable lp token decimal for different type of pools\n const estimatesStablePool = stablePoolThisPair?.map(stablePool => {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool: simplePools.find(p => p.id === stablePool.id) as Pool,\n });\n });\n\n const maxSimplePoolEstimate =\n estimatesSimplePool === undefined || estimatesSimplePool.length === 0\n ? undefined\n : estimatesSimplePool.length === 1\n ? estimatesSimplePool[0]\n : _.maxBy(estimatesSimplePool, estimate => Number(estimate.estimate));\n\n const maxStablePoolEstimate =\n estimatesStablePool === undefined || estimatesStablePool.length === 0\n ? undefined\n : estimatesStablePool.length === 1\n ? estimatesStablePool[0]\n : _.maxBy(estimatesStablePool, estimate => Number(estimate.estimate));\n\n if (!maxStablePoolEstimate && !maxSimplePoolEstimate) throw NoPoolError;\n\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n maxStablePoolEstimate &&\n (maxStablePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n if (!maxStablePoolEstimate) {\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n return maxSimplePoolEstimate;\n } else if (!maxSimplePoolEstimate) {\n return maxStablePoolEstimate;\n } else {\n return Number(maxSimplePoolEstimate?.estimate) >\n Number(maxStablePoolEstimate?.estimate)\n ? maxSimplePoolEstimate\n : maxStablePoolEstimate;\n }\n};\n\nexport const getStablePoolsThisPair = ({\n tokenInId,\n tokenOutId,\n stablePools,\n}: {\n tokenInId: string;\n tokenOutId: string;\n stablePools: Pool[];\n}) => {\n return stablePools.filter(\n p =>\n p.tokenIds.includes(tokenInId) &&\n p.tokenIds.includes(tokenOutId) &&\n tokenInId !== tokenOutId\n );\n};\n\nexport const getPoolsByTokens = ({\n pools,\n tokenInId,\n tokenOutId,\n}: {\n pools: Pool[];\n tokenInId: string;\n tokenOutId: string;\n}) => {\n if (tokenInId === tokenOutId) return [];\n\n return pools.filter(\n p => p.tokenIds.includes(tokenInId) && p.tokenIds.includes(tokenOutId)\n );\n};\n\nexport const getPoolEstimate = async ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePoolDetail,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n pool: Pool;\n stablePoolDetail?: StablePool;\n}) => {\n if (!!stablePoolDetail) {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetail,\n amountIn,\n pool,\n });\n } else {\n return getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n });\n }\n};\n\nexport async function getHybridStableSmart(\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n amountIn: string,\n stablePools: Pool[],\n stablePoolsDetail: StablePool[],\n simplePools: Pool[],\n allTokens: Record<string, TokenMetadata>\n) {\n if (\n !isStablePoolToken(stablePoolsDetail, tokenIn.id) &&\n !isStablePoolToken(stablePoolsDetail, tokenOut.id)\n ) {\n return { actions: [], estimate: '0' };\n }\n\n const stablePoolsDetailById = stablePoolsDetail.reduce((acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur,\n };\n }, {} as Record<string, StablePool>);\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let pool1: Pool, pool2: Pool;\n\n let pools1: Pool[] = [];\n let pools2: Pool[] = [];\n\n let pools1Right: Pool[] = [];\n let pools2Right: Pool[] = [];\n\n let candidatePools: Pool[][] = [];\n\n /**\n * find possible routes for this pair\n *\n *\n */\n\n if (isStablePoolToken(stablePoolsDetail, tokenIn.id)) {\n // first hop will be through stable pool.\n pools1 = stablePools.filter(pool => pool.tokenIds.includes(tokenIn.id));\n\n const otherStables = pools1\n .map(pool => pool.tokenIds.filter(id => id !== tokenIn.id))\n .flat();\n\n for (var otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n pools: simplePools,\n });\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n pools2.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n if (isStablePoolToken(stablePoolsDetail, tokenOut.id)) {\n // second hop will be through stable pool.\n pools2Right = stablePools.filter(pool =>\n pool.tokenIds.includes(tokenOut.id)\n );\n\n const otherStables = pools2Right\n .map(pool => pool.tokenIds.filter(id => id !== tokenOut.id))\n .flat();\n for (let otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n pools: simplePools,\n });\n\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n\n pools1Right.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n // find candidate pools\n\n for (let p1 of pools1) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n for (let p1 of pools1Right) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2Right.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n\n if (candidatePools.length > 0) {\n const tokensMedata = await ftGetTokensMetadata(\n candidatePools.map(cp => cp.map(p => p.tokenIds).flat()).flat(),\n allTokens\n );\n\n const BestPoolPair =\n candidatePools.length === 1\n ? candidatePools[0]\n : _.maxBy(candidatePools, poolPair => {\n // only one pool case, only for stable tokens\n if (poolPair.length === 1) {\n if (isStablePool(stablePoolsDetail, poolPair[0].id)) {\n const stablePoolThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: tokenOut.id,\n stablePools,\n })[0];\n\n const stablePoolDetailThisPair = stablePoolsDetail.find(\n spd => spd.id === stablePoolThisPair.id\n );\n\n return Number(\n getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetailThisPair as StablePool,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n } else {\n return Number(\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n }\n }\n\n const [tmpPool1, tmpPool2] = poolPair;\n const tokenMidId = poolPair[0].tokenIds.find((t: string) =>\n poolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta = tokensMedata[tokenMidId];\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, tmpPool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[tmpPool1.id],\n pool: tmpPool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: tmpPool1,\n })),\n status: PoolMode.SMART,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, tmpPool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[tmpPool2.id],\n pool: tmpPool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n pool: tmpPool2,\n amountIn: estimate1.estimate,\n })),\n status: PoolMode.SMART,\n };\n\n return Number(estimate2.estimate);\n });\n\n // one pool case only get best price\n\n if (!BestPoolPair) return { actions: [], estimate: '0' };\n\n if (BestPoolPair.length === 1) {\n const bestPool = BestPoolPair[0];\n const estimate = await getPoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: bestPool,\n stablePoolDetail: stablePoolsDetailById[bestPool.id],\n });\n\n return {\n actions: [\n {\n ...estimate,\n status: PoolMode.STABLE,\n\n pool: { ...estimate.pool, partialAmountIn: parsedAmountIn },\n tokens: [tokenIn, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenOut.id,\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n },\n ],\n estimate: estimate.estimate,\n };\n }\n\n // two pool case get best price\n [pool1, pool2] = BestPoolPair;\n\n const tokenMidId = BestPoolPair[0].tokenIds.find((t: string) =>\n BestPoolPair[1].tokenIds.includes(t)\n ) as string;\n\n const tokenMidMeta =\n allTokens[tokenMidId] ||\n (await ftGetTokenMetadata(tokenMidId, 'hybridSmartRoutingEstimate'));\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, pool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[pool1.id],\n pool: pool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: pool1,\n })),\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenMidMeta.id,\n status: PoolMode.SMART,\n };\n\n estimate1.pool = {\n ...estimate1.pool,\n partialAmountIn: parsedAmountIn,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, pool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[pool2.id],\n pool: pool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n pool: pool2,\n })),\n\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenMidMeta.id,\n outputToken: tokenOut.id,\n status: PoolMode.SMART,\n };\n\n return { actions: [estimate1, estimate2], estimate: estimate2.estimate };\n }\n\n return { actions: [], estimate: '0' };\n}\n\n// simple pools and stable pools for this pair\nexport const estimateSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n simplePools,\n options,\n}: SwapParams) => {\n if (tokenIn.id === tokenOut.id) throw SameInputTokenError;\n\n if (ONLY_ZEROS.test(amountIn)) throw ZeroInputError;\n\n const { enableSmartRouting, stablePools, stablePoolsDetail } = options || {};\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let singleRouteEstimate: EstimateSwapView[] = [];\n\n try {\n const estimate = singlePoolSwap({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools: stablePoolsDetail,\n });\n\n singleRouteEstimate = [\n {\n ...estimate,\n status: PoolMode.PARALLEL,\n pool: { ...estimate?.pool, partialAmountIn: parsedAmountIn },\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n tokens: [tokenIn, tokenOut],\n },\n ] as EstimateSwapView[];\n if (!enableSmartRouting) {\n return singleRouteEstimate;\n }\n } catch (error) {\n if (!enableSmartRouting) throw error;\n }\n\n const inputPools = simplePools.map(p => poolFormatter(p));\n\n const allTokens = (await getTokens()) as Record<string, TokenMetadata>;\n\n const simplePoolSmartRoutingActions = await stableSmart(\n inputPools,\n tokenIn.id,\n tokenOut.id,\n parsedAmountIn,\n allTokens\n );\n\n const simplePoolSmartRoutingEstimate = getExpectedOutputFromActionsORIG(\n simplePoolSmartRoutingActions,\n tokenOut.id\n ).toString();\n\n const hybridSmartRoutingRes = await getHybridStableSmart(\n tokenIn,\n tokenOut,\n amountIn,\n stablePools || [],\n stablePoolsDetail || [],\n simplePools,\n allTokens\n );\n\n const hybridSmartRoutingEstimate = hybridSmartRoutingRes.estimate.toString();\n\n if (\n new Big(simplePoolSmartRoutingEstimate || '0').gte(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n if (!simplePoolSmartRoutingActions?.length) throw NoPoolError;\n\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n simplePoolSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n return simplePoolSmartRoutingActions as EstimateSwapView[];\n } else {\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n\n return hybridSmartRoutingRes.actions as EstimateSwapView[];\n }\n};\n","import {\n Pool,\n PoolRPCView,\n StablePool,\n SmartRoutingInputPool,\n Transaction,\n EstimateSwapView,\n} from './types';\nimport {\n FEE_DIVISOR,\n RATED_POOL_LP_TOKEN_DECIMALS,\n STABLE_LP_TOKEN_DECIMALS,\n} from './constant';\n\nimport {\n transactions,\n utils,\n transactions as nearTransactions,\n} from 'near-api-js';\n\nimport _, { sortBy } from 'lodash';\n\nimport BN from 'bn.js';\n\nimport * as math from 'mathjs';\nimport {\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n STORAGE_TO_REGISTER_WITH_MFT,\n} from './constant';\nimport Big from 'big.js';\nimport { SignAndSendTransactionsParams } from '@near-wallet-selector/core/lib/wallet';\nimport { TokenMetadata } from './types';\nimport { PoolMode } from './v1-swap/swap';\nimport { getSwappedAmount } from './stable-swap';\nimport { NoFeeToPool } from './error';\nimport { CONSTANT_D, POINTLEFTRANGE, POINTRIGHTRANGE } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const parsePool = (pool: PoolRPCView, id?: number): Pool => ({\n id: Number(typeof id === 'number' ? id : pool.id),\n tokenIds: pool.token_account_ids,\n supplies: pool.amounts.reduce(\n (acc: { [tokenId: string]: string }, amount: string, i: number) => {\n acc[pool.token_account_ids[i]] = amount;\n return acc;\n },\n {}\n ),\n fee: pool.total_fee,\n shareSupply: pool.shares_total_supply,\n tvl: pool.tvl,\n token0_ref_price: pool.token0_ref_price,\n pool_kind: pool.pool_kind,\n});\n\nexport const poolFormatter = (pool: Pool) => {\n return {\n id: pool.id,\n token1Id: pool.tokenIds[0],\n token2Id: pool.tokenIds[1],\n token1Supply: pool.supplies[pool.tokenIds[0]],\n token2Supply: pool.supplies[pool.tokenIds[1]],\n fee: pool.fee,\n shares: pool.shareSupply,\n token0_price: pool.token0_ref_price || '0',\n } as SmartRoutingInputPool;\n};\n\nexport const isStablePoolToken = (\n stablePools: StablePool[],\n tokenId: string | Number\n) => {\n return stablePools\n .map(p => p.token_account_ids)\n .flat()\n .includes(tokenId.toString());\n};\n\nexport const isStablePool = (\n stablePools: StablePool[],\n poolId: string | number\n) => {\n return stablePools.map(p => p.id.toString()).includes(poolId.toString());\n};\n\nexport const getStablePoolDecimal = (stablePool: StablePool) => {\n return stablePool.pool_kind === 'RATED_SWAP'\n ? RATED_POOL_LP_TOKEN_DECIMALS\n : STABLE_LP_TOKEN_DECIMALS;\n};\n\nexport const round = (decimals: number, minAmountOut: string) => {\n return Number.isInteger(Number(minAmountOut))\n ? minAmountOut\n : Math.ceil(\n Math.round(Number(minAmountOut) * Math.pow(10, decimals)) /\n Math.pow(10, decimals)\n ).toString();\n};\n\nexport const convertToPercentDecimal = (percent: number) => {\n return math.divide(percent, 100);\n};\n\nexport const percentOf = (percent: number, num: number | string) => {\n return math.evaluate(`${convertToPercentDecimal(percent)} * ${num}`);\n};\n\nexport const percentLess = (percent: number, num: number | string) => {\n return math.format(math.evaluate(`${num} - ${percentOf(percent, num)}`), {\n notation: 'fixed',\n });\n};\n\nexport const getGas = (gas: string | undefined) =>\n gas ? new BN(gas) : new BN('100000000000000');\n\nexport const getAmount = (amount: string) =>\n amount ? new BN(utils.format.parseNearAmount(amount) || '0') : new BN('0');\n\nexport const ONLY_ZEROS = /^0*\\.?0*$/;\n\nexport const toReadableNumber = (\n decimals: number,\n number: string = '0'\n): string => {\n if (!decimals) return number;\n\n const wholeStr = number.substring(0, number.length - decimals) || '0';\n const fractionStr = number\n .substring(number.length - decimals)\n .padStart(decimals, '0')\n .substring(0, decimals);\n\n return `${wholeStr}.${fractionStr}`.replace(/\\.?0+$/, '');\n};\n\nexport const toNonDivisibleNumber = (\n decimals: number,\n number: string\n): string => {\n if (decimals === null || decimals === undefined) return number;\n const [wholePart, fracPart = ''] = number.split('.');\n\n return `${wholePart}${fracPart.padEnd(decimals, '0').slice(0, decimals)}`\n .replace(/^0+/, '')\n .padStart(1, '0');\n};\n\nexport const scientificNotationToString = (strParam: string) => {\n let flag = /e/.test(strParam);\n if (!flag || !strParam) return strParam;\n\n let sysbol = true;\n if (/e-/.test(strParam)) {\n sysbol = false;\n }\n\n const negative = Number(strParam) < 0 ? '-' : '';\n\n let index = Number(strParam.match(/\\d+$/)?.[0]);\n\n let basis = strParam.match(/[\\d\\.]+/)?.[0];\n\n if (!index || !basis) return strParam;\n\n const ifFraction = basis.includes('.');\n\n let wholeStr;\n let fractionStr;\n\n if (ifFraction) {\n wholeStr = basis.split('.')[0];\n fractionStr = basis.split('.')[1];\n } else {\n wholeStr = basis;\n fractionStr = '';\n }\n\n if (sysbol) {\n if (!ifFraction) {\n return negative + wholeStr.padEnd(index + wholeStr.length, '0');\n } else {\n if (fractionStr.length <= index) {\n return negative + wholeStr + fractionStr.padEnd(index, '0');\n } else {\n return (\n negative +\n wholeStr +\n fractionStr.substring(0, index) +\n '.' +\n fractionStr.substring(index)\n );\n }\n }\n } else {\n if (!ifFraction)\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.')\n );\n else {\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.') +\n fractionStr\n );\n }\n }\n};\n\nexport const formatWithCommas = (value: string) => {\n const pattern = /(-?\\d+)(\\d{3})/;\n while (pattern.test(value)) {\n value = value.replace(pattern, '$1,$2');\n }\n return value;\n};\n\nexport const toPrecision = (\n number: string,\n precision: number,\n withCommas: boolean = false,\n atLeastOne: boolean = true\n): string => {\n const [whole, decimal = ''] = number.split('.');\n\n let str = `${withCommas ? formatWithCommas(whole) : whole}.${decimal.slice(\n 0,\n precision\n )}`.replace(/\\.$/, '');\n if (atLeastOne && Number(str) === 0 && str.length > 1) {\n var n = str.lastIndexOf('0');\n str = str.slice(0, n) + str.slice(n).replace('0', '1');\n }\n\n return str;\n};\n\nexport const transformTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return parsedTransactions;\n};\n\nexport const WalletSelectorTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return { transactions: parsedTransactions } as SignAndSendTransactionsParams;\n};\n\nexport const separateRoutes = (\n actions: EstimateSwapView[],\n outputToken: string\n) => {\n const res = [];\n let curRoute = [];\n\n for (let i in actions) {\n curRoute.push(actions[i]);\n if (actions[i].outputToken === outputToken) {\n res.push(curRoute);\n curRoute = [];\n }\n }\n\n return res;\n};\n\nexport const calculateExchangeRate = (\n from: string,\n to: string,\n precision?: number\n) => {\n return math\n .floor(math.evaluate(`${to} / ${from}`), precision || 4)\n .toString();\n};\n\nexport const getAvgFee = (\n estimates: EstimateSwapView[],\n outputToken: string,\n parsedAmountIn: string\n) => {\n if (!estimates || estimates.length === 0) {\n return 0;\n }\n\n const routes = separateRoutes(estimates, outputToken);\n\n let fee = new Big(0);\n\n routes.forEach(r => {\n const partialAmountIn = r[0].pool.partialAmountIn || '0';\n\n fee = fee.plus(\n r\n .reduce(\n (acc, cur) => acc.plus(cur.pool.fee || cur.pool.total_fee || 0),\n new Big(0)\n )\n .times(partialAmountIn)\n .div(ONLY_ZEROS.test(parsedAmountIn) ? '1' : parsedAmountIn)\n );\n });\n\n return fee.toNumber();\n};\n\nexport const getAccountName = (AccountId: string) => {\n if (!AccountId) return AccountId;\n\n const [account, network] = AccountId.split('.');\n const niceAccountId = `${account.slice(0, 10)}...${network || ''}`;\n\n return account.length > 10 ? niceAccountId : AccountId;\n};\n\nexport const symbolsArr = ['e', 'E', '+', '-'];\n\nexport const multiply = (factor1: string, factor2: string) => {\n return math.format(math.evaluate(`${factor1} * ${factor2}`), {\n notation: 'fixed',\n });\n};\n\nexport const toInternationalCurrencySystemLongString = (\n labelValue: string,\n percent?: number\n) => {\n return Math.abs(Number(labelValue)) >= 1.0e9\n ? (Math.abs(Number(labelValue)) / 1.0e9).toFixed(percent || 2) + 'B'\n : Math.abs(Number(labelValue)) >= 1.0e6\n ? (Math.abs(Number(labelValue)) / 1.0e6).toFixed(percent || 2) + 'M'\n : Math.abs(Number(labelValue)).toFixed(percent || 2);\n};\n\nexport const percentOfBigNumber = (\n percent: number,\n num: number | string,\n precision: number\n) => {\n const valueBig = math.bignumber(num);\n const percentBig = math.bignumber(percent).div(100);\n\n return toPrecision(\n scientificNotationToString(valueBig.mul(percentBig).toString()),\n precision\n );\n};\n\nexport const toRealSymbol = (symbol: string) => {\n if (!symbol) return '';\n const blackList = ['nUSDO'];\n\n if (symbol === 'nWETH' || symbol === 'WETH') return 'wETH';\n if (blackList.includes(symbol)) return symbol;\n return symbol.charAt(0) === 'n' &&\n symbol.charAt(1) === symbol.charAt(1).toUpperCase()\n ? symbol.substring(1)\n : symbol;\n};\n\nexport const calculateFeeCharge = (fee: number, total: string) => {\n return math.floor(math.evaluate(`(${fee} / ${FEE_DIVISOR}) * ${total}`), 3);\n};\n\nexport const calculateFeePercent = (fee: number) => {\n return math.divide(fee, 100);\n};\n\nexport function getExpectedOutputFromSwapTodos(\n estimates: EstimateSwapView[],\n outputToken: string\n) {\n if (!estimates || estimates.length === 0) return new Big(0);\n\n return estimates\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate || 0))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nexport const calculateAmountReceived = (\n pool: Pool,\n amountIn: string,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const partialAmountIn = toReadableNumber(tokenIn.decimals, amountIn);\n\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n const big_in_balance = math.bignumber(in_balance);\n const big_out_balance = math.bignumber(out_balance);\n\n const constant_product = big_in_balance.mul(big_out_balance);\n\n const new_in_balance = big_in_balance.plus(math.bignumber(partialAmountIn));\n\n const new_out_balance = constant_product.div(new_in_balance);\n\n const tokenOutReceived = big_out_balance.minus(new_out_balance);\n\n return tokenOutReceived;\n};\n\nexport const calculateMarketPrice = (\n pool: Pool,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n return math.evaluate(`(${cur_in_balance} / ${cur_out_balance})`);\n};\n\nexport const calculateSmartRoutingPriceImpact = (\n tokenInAmount: string,\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n tokenMid: TokenMetadata,\n tokenOut: TokenMetadata,\n stablePools: StablePool[]\n) => {\n const isPool1StablePool = isStablePool(stablePools, swapTodos[0].pool.id);\n const isPool2StablePool = isStablePool(stablePools, swapTodos[1].pool.id);\n\n const marketPrice1 = isPool1StablePool\n ? (\n Number(swapTodos[0].pool.rates?.[tokenMid.id]) /\n Number(swapTodos[0].pool.rates?.[tokenIn.id])\n ).toString()\n : calculateMarketPrice(swapTodos[0].pool, tokenIn, tokenMid);\n\n const marketPrice2 = isPool2StablePool\n ? (\n Number(swapTodos[1].pool.rates?.[tokenOut.id]) /\n Number(swapTodos[1].pool.rates?.[tokenMid.id])\n ).toString()\n : calculateMarketPrice(swapTodos[1].pool, tokenMid, tokenOut);\n\n const generalMarketPrice = math.evaluate(`${marketPrice1} * ${marketPrice2}`);\n\n const tokenMidReceived = isPool1StablePool\n ? swapTodos[0].noFeeAmountOut\n : calculateAmountReceived(\n swapTodos[0].pool,\n toNonDivisibleNumber(tokenIn.decimals, tokenInAmount),\n tokenIn,\n tokenMid\n );\n\n const formattedTokenMidReceived = scientificNotationToString(\n tokenMidReceived?.toString() || '0'\n );\n\n let stableOutPool2;\n if (isPool2StablePool) {\n const stablePool2 =\n stablePools.find(p => p.id === swapTodos[1].pool.id) || stablePools[0];\n\n const stableOut = getSwappedAmount(\n tokenMid.id,\n tokenOut.id,\n formattedTokenMidReceived,\n stablePool2,\n getStablePoolDecimal(stablePool2)\n );\n stableOutPool2 =\n stableOut[0] < 0\n ? '0'\n : toPrecision(scientificNotationToString(stableOut[2].toString()), 0);\n stableOutPool2 = toReadableNumber(\n getStablePoolDecimal(stablePool2),\n stableOutPool2\n );\n }\n\n const tokenOutReceived = isPool2StablePool\n ? stableOutPool2\n : calculateAmountReceived(\n swapTodos[1].pool,\n toNonDivisibleNumber(tokenMid.decimals, formattedTokenMidReceived),\n tokenMid,\n tokenOut\n );\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${tokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(generalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\nexport const percent = (numerator: string, denominator: string) => {\n return math.evaluate(`(${numerator} / ${denominator}) * 100`);\n};\nexport const calcStableSwapPriceImpact = (\n from: string,\n to: string,\n marketPrice: string = '1'\n) => {\n const newMarketPrice = math.evaluate(`${from} / ${to}`);\n\n return math.format(\n percent(\n math.evaluate(`${newMarketPrice} - ${marketPrice}`),\n newMarketPrice\n ),\n {\n notation: 'fixed',\n }\n );\n};\n\nexport const calculatePriceImpact = (\n pools: Pool[],\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n tokenInAmount: string\n) => {\n let in_balance: string = '0',\n out_balance: string = '0';\n\n pools.forEach((pool, i) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n in_balance = new Big(in_balance).plus(cur_in_balance).toString();\n out_balance = new Big(out_balance).plus(cur_out_balance).toString();\n });\n\n const finalMarketPrice = math.evaluate(`(${in_balance} / ${out_balance})`);\n\n const separatedReceivedAmount = pools.map(pool => {\n return calculateAmountReceived(\n pool,\n pool.partialAmountIn || '0',\n tokenIn,\n tokenOut\n );\n });\n\n const finalTokenOutReceived = math.sum(...separatedReceivedAmount);\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${finalTokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(finalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\n\nexport function calculateSmartRoutesV2PriceImpact(\n actions: any,\n outputToken: string,\n tokenInPara: TokenMetadata,\n stablePools: StablePool[]\n) {\n const routes = separateRoutes(actions, outputToken);\n\n const tokenIn = routes[0][0].tokens?.[0] || tokenInPara;\n\n const totalInputAmount = routes[0][0].totalInputAmount;\n\n const priceImpactForRoutes = routes.map((r, i) => {\n const readablePartialAmountIn = toReadableNumber(\n tokenIn.decimals,\n r[0].pool.partialAmountIn\n );\n\n if (r.length > 1) {\n const tokenIn = r[0].tokens?.[0];\n const tokenMid = r[0].tokens?.[1];\n const tokenOut = r[0].tokens?.[2];\n\n return calculateSmartRoutingPriceImpact(\n readablePartialAmountIn,\n routes[i],\n tokenIn || tokenInPara,\n tokenMid || tokenInPara,\n tokenOut || tokenInPara,\n stablePools\n );\n } else {\n return isStablePool(stablePools, r[0].pool.id)\n ? calcStableSwapPriceImpact(\n readablePartialAmountIn,\n r[0].noFeeAmountOut || '0',\n (\n Number(r[0].pool.rates?.[outputToken]) /\n Number(r[0].pool.rates?.[tokenIn.id])\n ).toString()\n )\n : calculatePriceImpact(\n [r[0].pool],\n r[0].tokens?.[0] || tokenIn,\n r[0].tokens?.[1] || tokenIn,\n readablePartialAmountIn\n );\n }\n });\n\n const rawRes = priceImpactForRoutes.reduce(\n (pre, cur, i) => {\n return pre.plus(\n new Big(routes[i][0].pool.partialAmountIn || '0')\n .div(new Big(totalInputAmount || '1'))\n .mul(cur)\n );\n },\n\n new Big(0)\n );\n\n return scientificNotationToString(rawRes.toString());\n}\n\nexport const getPriceImpact = ({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools,\n}: {\n estimates: EstimateSwapView[];\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n amountOut: string;\n stablePools: StablePool[];\n}) => {\n let PriceImpactValue: string = '0';\n let priceImpactValueSmartRouting: string = '0';\n let priceImpactValueSmartRoutingV2: string = '0';\n\n if (typeof estimates === 'undefined') return '0';\n\n try {\n if (estimates?.length === 2 && estimates[0].status === PoolMode.SMART) {\n priceImpactValueSmartRouting = calculateSmartRoutingPriceImpact(\n amountIn,\n estimates,\n tokenIn,\n estimates[0].tokens?.[1] || tokenIn,\n tokenOut,\n stablePools\n );\n } else if (\n estimates?.length === 1 &&\n estimates[0].status === PoolMode.STABLE\n ) {\n priceImpactValueSmartRouting = calcStableSwapPriceImpact(\n toReadableNumber(tokenIn.decimals, estimates[0].totalInputAmount),\n estimates[0].noFeeAmountOut || '0',\n (\n Number(estimates[0].pool.rates?.[tokenOut.id]) /\n Number(estimates[0].pool.rates?.[tokenIn.id])\n ).toString()\n );\n } else priceImpactValueSmartRouting = '0';\n } catch (error) {\n priceImpactValueSmartRouting = '0';\n }\n\n try {\n priceImpactValueSmartRoutingV2 = calculateSmartRoutesV2PriceImpact(\n estimates,\n tokenOut.id,\n tokenIn,\n stablePools\n );\n } catch (error) {\n priceImpactValueSmartRoutingV2 = '0';\n }\n\n try {\n if (\n estimates[0].status === PoolMode.SMART ||\n estimates[0].status === PoolMode.STABLE\n ) {\n PriceImpactValue = priceImpactValueSmartRouting;\n } else {\n PriceImpactValue = priceImpactValueSmartRoutingV2;\n }\n\n return PriceImpactValue;\n } catch (error) {\n return '0';\n }\n};\n\nexport const subtraction = (initialValue: string, toBeSubtract: string) => {\n return math.format(math.evaluate(`${initialValue} - ${toBeSubtract}`), {\n notation: 'fixed',\n });\n};\n\nexport function getPoolAllocationPercents(pools: Pool[]) {\n if (pools.length === 1) return ['100'];\n\n if (pools) {\n const partialAmounts = pools.map(pool => {\n return math.bignumber(pool.partialAmountIn);\n });\n\n const ps: string[] = new Array(partialAmounts.length).fill('0');\n\n const sum =\n partialAmounts.length === 1\n ? partialAmounts[0]\n : math.sum(...partialAmounts);\n\n const sortedAmount = sortBy(partialAmounts, p => Number(p));\n\n let minIndexes: number[] = [];\n\n for (let k = 0; k < sortedAmount.length - 1; k++) {\n let minIndex = -1;\n\n for (let j = 0; j < partialAmounts.length; j++) {\n if (partialAmounts[j].eq(sortedAmount[k]) && !minIndexes.includes(j)) {\n minIndex = j;\n minIndexes.push(j);\n break;\n }\n }\n const res = math\n .round(percent(partialAmounts[minIndex].toString(), sum))\n .toString();\n\n if (Number(res) === 0) {\n ps[minIndex] = '1';\n } else {\n ps[minIndex] = res;\n }\n }\n\n const finalPIndex = ps.indexOf('0');\n\n ps[finalPIndex] = subtraction(\n '100',\n ps.length === 1 ? Number(ps[0]) : math.sum(...ps.map(p => Number(p)))\n ).toString();\n\n return ps;\n } else {\n return [];\n }\n}\n\nexport const isMobile = (): boolean => {\n return window.screen.width <= 600;\n};\nexport function divide(numerator: string, denominator: string) {\n return math.format(math.evaluate(`${numerator} / ${denominator}`), {\n notation: 'fixed',\n });\n}\n\nexport const getMax = function(id: string, amount: string) {\n return id !== WRAP_NEAR_CONTRACT_ID\n ? amount\n : Number(amount) <= 0.5\n ? '0'\n : String(Number(amount) - 0.5);\n};\n\nexport function getPointByPrice(\n pointDelta: number,\n price: string,\n decimalRate: number,\n noNeedSlot?: boolean\n) {\n const point = Math.log(+price * decimalRate) / Math.log(CONSTANT_D);\n const point_int = Math.round(point);\n let point_int_slot = point_int;\n if (!noNeedSlot) {\n point_int_slot = Math.floor(point_int / pointDelta) * pointDelta;\n }\n if (point_int_slot < POINTLEFTRANGE) {\n return POINTLEFTRANGE;\n } else if (point_int_slot > POINTRIGHTRANGE) {\n return 800000;\n }\n return point_int_slot;\n}\nexport const feeToPointDelta = (fee: number) => {\n switch (fee) {\n case 100:\n return 1;\n case 400:\n return 8;\n case 2000:\n return 40;\n case 10000:\n return 200;\n default:\n throw NoFeeToPool(fee);\n }\n};\n\nexport const priceToPoint = ({\n tokenA,\n tokenB,\n amountA,\n amountB,\n fee,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n amountB: string;\n fee: number;\n}) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const decimal_price_A_by_B = new Big(amountB).div(amountA);\n const undecimal_price_A_by_B = decimal_price_A_by_B\n .times(new Big(10).pow(tokenB.decimals))\n .div(new Big(10).pow(tokenA.decimals));\n\n const pointDelta = feeToPointDelta(fee);\n\n const price = decimal_price_A_by_B;\n\n const decimalRate = new Big(10)\n .pow(tokenB.decimals)\n .div(new Big(10).pow(tokenA.decimals))\n .toNumber();\n\n return getPointByPrice(\n pointDelta,\n scientificNotationToString(price.toString()),\n decimalRate\n );\n};\n\nexport const pointToPrice = ({\n tokenA,\n tokenB,\n point,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n point: number;\n}) => {\n const undecimal_price = Math.pow(CONSTANT_D, point);\n const decimal_price_A_by_B = new Big(undecimal_price)\n .times(new Big(10).pow(tokenA.decimals))\n .div(new Big(10).pow(tokenB.decimals));\n\n return scientificNotationToString(decimal_price_A_by_B.toString());\n};\n\nexport const registerAccountOnToken = (AccountId: string) => {\n return {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n };\n};\n","import {\n keyStores,\n KeyPair,\n InMemorySigner,\n providers,\n transactions as nearTransactions,\n utils,\n} from 'near-api-js';\nimport BN from 'bn.js';\nimport { getConfig } from './constant';\nimport fs from 'fs';\nimport os from 'os';\nimport {\n NoPuiblicKeyError,\n InValidAccessKeyError,\n NoCredential,\n} from './error';\nimport { AccessKeyView } from 'near-api-js/lib/providers/provider';\nimport { TransformedTransaction } from './types';\nimport { Transaction } from './types';\nimport { transformTransactions } from './utils';\nimport { AccountIdMisMatch } from './error';\n\nexport const getKeyStore = () => {\n return typeof window === 'undefined'\n ? new keyStores.InMemoryKeyStore()\n : new keyStores.BrowserLocalStorageKeyStore();\n};\n\nexport const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n});\n\nexport const getMemorySigner = async ({\n AccountId,\n keyPath,\n}: {\n AccountId: string;\n keyPath: string;\n}) => {\n try {\n const homedir = os.homedir();\n const credentials = JSON.parse(\n fs.readFileSync(homedir + keyPath).toString()\n );\n\n const credentialAccountId = credentials?.account_id;\n\n if (!credentialAccountId) throw NoCredential;\n\n if (credentialAccountId !== AccountId) throw AccountIdMisMatch;\n\n const myKeyStore = new keyStores.InMemoryKeyStore();\n myKeyStore.setKey(\n getConfig().networkId,\n AccountId,\n KeyPair.fromString(credentials.private_key)\n );\n\n const signer = new InMemorySigner(myKeyStore);\n\n return signer;\n } catch (error) {\n throw error;\n }\n};\n\nconst validateAccessKey = (\n transaction: TransformedTransaction,\n accessKey: AccessKeyView\n) => {\n if (accessKey.permission === 'FullAccess') {\n return accessKey;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { receiver_id, method_names } = accessKey.permission.FunctionCall;\n\n if (transaction.receiverId !== receiver_id) {\n return null;\n }\n\n return transaction.actions.every(action => {\n if (action.type !== 'FunctionCall') {\n return false;\n }\n\n const { methodName, deposit } = action.params;\n\n if (method_names.length && method_names.includes(methodName)) {\n return false;\n }\n\n return parseFloat(deposit) <= 0;\n });\n};\n\nexport const getSignedTransactionsByMemoryKey = async ({\n transactionsRef,\n AccountId,\n keyPath,\n}: {\n transactionsRef: Transaction[];\n AccountId: string;\n keyPath: string;\n}) => {\n const transactions = transformTransactions(transactionsRef, AccountId);\n\n const block = await provider.block({ finality: 'final' });\n\n const signedTransactions: Array<nearTransactions.SignedTransaction> = [];\n const signer = await getMemorySigner({\n AccountId,\n keyPath,\n });\n\n for (let i = 0; i < transactions.length; i += 1) {\n const transaction = transactions[i];\n\n const publicKey = await signer.getPublicKey(\n AccountId,\n getConfig().networkId\n );\n if (!publicKey) {\n throw NoPuiblicKeyError;\n }\n\n const accessKey = await provider.query<AccessKeyView>({\n request_type: 'view_access_key',\n finality: 'final',\n account_id: AccountId,\n public_key: publicKey.toString(),\n });\n\n if (!validateAccessKey(transaction, accessKey)) {\n throw InValidAccessKeyError;\n }\n\n const tx = nearTransactions.createTransaction(\n AccountId,\n utils.PublicKey.from(publicKey.toString()),\n transactions[i].receiverId,\n accessKey.nonce + i + 1,\n transaction.actions.map(action => {\n const { methodName, args, gas, deposit } = action.params;\n return nearTransactions.functionCall(\n methodName,\n args,\n new BN(gas),\n new BN(deposit)\n );\n }),\n utils.serialize.base_decode(block.header.hash)\n );\n\n const [, signedTx] = await nearTransactions.signTransaction(\n tx,\n signer,\n transactions[i].signerId,\n getConfig().networkId\n );\n signedTransactions.push(signedTx);\n }\n\n return signedTransactions;\n};\n\nexport const sendTransactionsByMemoryKey = async ({\n signedTransactions,\n}: {\n signedTransactions: nearTransactions.SignedTransaction[];\n}) => {\n try {\n const results: Array<providers.FinalExecutionOutcome> = [];\n\n for (let i = 0; i < signedTransactions.length; i += 1) {\n results.push(await provider.sendTransaction(signedTransactions[i]));\n }\n\n return results;\n } catch (err) {\n throw err;\n }\n};\n","import {\n REF_FI_CONTRACT_ID,\n config,\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n getConfig,\n switchEnv,\n} from './constant';\nimport {\n keyStores,\n Near,\n providers,\n WalletConnection,\n utils,\n} from 'near-api-js';\nimport { NoAccountIdFound, TokenNotExistError, DCLInValid } from './error';\nimport { getKeyStore } from './near';\n\nimport {\n TokenMetadata,\n FTStorageBalance,\n RefFiViewFunctionOptions,\n} from './types';\nimport { AccountView } from 'near-api-js/lib/providers/provider';\nimport { Transaction } from './types';\nimport { ONE_YOCTO_NEAR, REF_TOKEN_ID, REF_META_DATA } from './constant';\n\nimport metaIconDefaults from './metaIcons';\n\nconst BANANA_ID = 'berryclub.ek.near';\nconst CHEDDAR_ID = 'token.cheddar.near';\nconst CUCUMBER_ID = 'farm.berryclub.ek.near';\nconst HAPI_ID = 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near';\nconst WOO_ID = '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near';\n\nexport const REPLACE_TOKENS = [\n BANANA_ID,\n CHEDDAR_ID,\n CUCUMBER_ID,\n HAPI_ID,\n WOO_ID,\n];\n\nlet near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(),\n});\nexport const init_env = (env: string) => {\n near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(env),\n });\n return switchEnv();\n};\n\nexport const refFiViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(REF_FI_CONTRACT_ID, methodName, args);\n};\n\nexport const ftViewFunction = async (\n tokenId: string,\n { methodName, args }: RefFiViewFunctionOptions\n) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(tokenId, methodName, args);\n};\n\nexport const ftGetStorageBalance = (\n tokenId: string,\n AccountId: string\n): Promise<FTStorageBalance | null> => {\n if (!AccountId) throw NoAccountIdFound;\n\n return ftViewFunction(tokenId, {\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const ftGetBalance = async (tokenId: string, AccountId: string) => {\n if (!AccountId) return '0';\n\n if (tokenId === 'NEAR') {\n return getAccountNearBalance(AccountId).catch(() => '0');\n }\n\n return ftViewFunction(tokenId, {\n methodName: 'ft_balance_of',\n args: {\n account_id: AccountId,\n },\n })\n .then(res => {\n return res;\n })\n .catch(() => '0');\n};\n\nexport const getTotalPools = async () => {\n return refFiViewFunction({\n methodName: 'get_number_of_pools',\n });\n};\n\nexport const ftGetTokenMetadata = async (\n id: string,\n tag?: string\n): Promise<TokenMetadata> => {\n if (id === REF_TOKEN_ID) return REF_META_DATA;\n\n const metadata = await ftViewFunction(id, {\n methodName: 'ft_metadata',\n }).catch(() => {\n throw TokenNotExistError(id);\n });\n\n if (\n !metadata.icon ||\n id === BANANA_ID ||\n id === CHEDDAR_ID ||\n id === CUCUMBER_ID ||\n id === HAPI_ID ||\n id === WOO_ID ||\n id === WRAP_NEAR_CONTRACT_ID\n ) {\n return {\n ...metadata,\n icon: metaIconDefaults[id],\n id,\n };\n }\n\n return { ...metadata, id };\n};\n\nexport const ftGetTokensMetadata = async (\n tokenIds?: string[],\n allTokens?: Record<string, TokenMetadata>\n) => {\n const ids = tokenIds || (await getGlobalWhitelist());\n\n const tokensMetadata = await Promise.all(\n ids.map(\n (id: string) =>\n allTokens?.[id] || ftGetTokenMetadata(id).catch(() => null)\n )\n );\n\n return tokensMetadata.reduce((pre, cur, i) => {\n return {\n ...pre,\n [ids[i]]: cur,\n };\n }, {}) as Record<string, TokenMetadata>;\n};\n\nexport const getGlobalWhitelist = async (): Promise<string[]> => {\n const globalWhitelist = await refFiViewFunction({\n methodName: 'get_whitelisted_tokens',\n });\n return Array.from(new Set(globalWhitelist));\n};\n\nexport const getUserRegisteredTokens = async (\n AccountId?: string\n): Promise<string[]> => {\n if (!AccountId) return [];\n\n return refFiViewFunction({\n methodName: 'get_user_whitelisted_tokens',\n args: { account_id: AccountId },\n });\n};\n\nexport const getAccountNearBalance = async (accountId: string) => {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n\n return provider\n .query<AccountView>({\n request_type: 'view_account',\n finality: 'final',\n account_id: accountId,\n })\n .then(data => data.amount);\n};\n\nexport const nearDepositTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_deposit',\n args: {},\n gas: '50000000000000',\n amount,\n },\n ],\n };\n\n return transaction;\n};\n\nexport const nearWithdrawTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_withdraw',\n args: { amount: utils.format.parseNearAmount(amount) },\n amount: ONE_YOCTO_NEAR,\n },\n ],\n };\n return transaction;\n};\n\nexport const refDCLSwapViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n if (!config.REF_DCL_SWAP_CONTRACT_ID) throw DCLInValid;\n\n return nearConnection.viewFunction(\n config.REF_DCL_SWAP_CONTRACT_ID,\n methodName,\n args\n );\n};\n\nexport const DCLSwapGetStorageBalance = (\n tokenId: string,\n AccountId: string\n) => {\n return refDCLSwapViewFunction({\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport { NoFeeToPool } from '../error';\n\nexport const DCL_POOL_FEE_LIST = [100, 400, 2000, 10000];\n\ninterface PoolInfo {\n pool_id?: string;\n token_x?: string;\n token_y?: string;\n fee: number;\n point_delta?: number;\n current_point?: number;\n state?: string;\n liquidity?: string;\n liquidity_x?: string;\n max_liquidity_per_point?: string;\n percent?: string;\n total_x?: string;\n total_y?: string;\n tvl?: number;\n token_x_metadata?: TokenMetadata;\n token_y_metadata?: TokenMetadata;\n}\n\nexport const getDCLPoolId = (tokenA: string, tokenB: string, fee: number) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const tokenSeq = [tokenA, tokenB].sort().join('|');\n\n return `${tokenSeq}|${fee}`;\n};\nexport const listDCLPools = () => {\n return refDCLSwapViewFunction({\n methodName: 'list_pools',\n });\n};\n\nexport const getDCLPool = async (pool_id: string) => {\n const [token_x, token_y, fee] = pool_id.split('|');\n\n const token_seq = [token_x, token_y].sort().join('|');\n\n const new_pool_id = `${token_seq}|${fee}`;\n\n return refDCLSwapViewFunction({\n methodName: 'get_pool',\n args: {\n pool_id: new_pool_id,\n },\n }) as Promise<PoolInfo>;\n};\n","import { config, getConfig } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const formatError = (msg: string) => {\n return new Error(msg);\n};\n\nexport const unNamedError = formatError('Something wrong happened');\n\nexport const SameInputTokenError = formatError(\n 'Input token should be different with output token'\n);\n\nexport const ZeroInputError = formatError(\n 'Input amount should be greater than 0'\n);\n\nexport const NoPoolError = formatError('No pool found for the input tokens');\n\nexport const NotLoginError = formatError('Please login in first');\n\nexport const SwapRouteError = formatError(\n \"Something wrong happened, we don't get correct routes corrreponding to current input\"\n);\n\nexport const TokenNotExistError = (id: string) =>\n formatError(`${id} doesn't exist in ${getConfig().networkId}`);\n\nexport const NoPuiblicKeyError = formatError('No public key found');\n\nexport const NoLocalSignerError = formatError('No local signer found');\n\nexport const InValidAccessKeyError = formatError('Invalid access key');\n\nexport const AccountIdMisMatch = formatError(\n \"Your input account id doesn't match the account id in the credential\"\n);\n\nexport const NoCredential = formatError('No Credential to such path');\n\nexport const NoAccountIdFound = formatError('No account id found');\n\nexport const NoFeeToPool = (fee: number) =>\n formatError(\n `InValid fee ${fee} to DCL pool, the valid fee should be one of ${DCL_POOL_FEE_LIST}`\n );\n\nexport const DCLInValid = formatError(\n `DCL contract currently in Valid on ${config.networkId}`\n);\n\nexport const NoPoolOnThisPair = (tokenA: string, tokenB: string) =>\n formatError(`No pools on pair ${tokenA} <> ${tokenB}`);\n\nexport const SlippageError = formatError(\n 'slippage tolerance should be in range (0, 100)'\n);\n\nexport const NoOrderFound = (order_id?: string) =>\n formatError(`No order ${order_id || ''} found`);\n\nexport const OrderNoRemainedAmount = formatError(\n 'No remained amount on this order'\n);\n","import { TokenMetadata, EstimateSwapView, Transaction } from '../types';\nimport { ftGetStorageBalance } from '../ref';\nimport {\n STORAGE_TO_REGISTER_WITH_MFT,\n REF_FI_CONTRACT_ID,\n ONE_YOCTO_NEAR,\n} from '../constant';\nimport { round, percentLess } from '../utils';\nimport { toNonDivisibleNumber } from '../utils';\nimport { config } from '../constant';\nimport { SwapRouteError } from '../error';\n\nexport const instantSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n slippageTolerance,\n swapTodos,\n AccountId,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n slippageTolerance: number;\n swapTodos: EstimateSwapView[];\n AccountId: string;\n}) => {\n const transactions: Transaction[] = [];\n\n if (swapTodos?.[swapTodos?.length - 1]?.outputToken !== tokenOut.id)\n throw SwapRouteError;\n\n const registerToken = async (token: TokenMetadata) => {\n const tokenRegistered = await ftGetStorageBalance(\n token.id,\n AccountId\n ).catch(() => {\n throw new Error(`${token.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: token.id,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n },\n ],\n });\n }\n };\n\n if (tokenIn.id === config.WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n config.WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n await registerToken(tokenIn);\n }\n }\n\n await registerToken(tokenOut);\n let actionsList: any = [];\n let allSwapsTokens = swapTodos.map(s => [s.inputToken, s.outputToken]); // to get the hop tokens\n for (let i in allSwapsTokens) {\n let swapTokens = allSwapsTokens[i];\n if (swapTokens[0] === tokenIn.id && swapTokens[1] === tokenOut.id) {\n // parallel, direct hop route.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: tokenIn.id,\n token_out: tokenOut.id,\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n } else if (swapTokens[0] === tokenIn.id) {\n // first hop in double hop route\n //TODO -- put in a check to make sure this first hop matches with the next (i+1) hop as a second hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: '0',\n });\n } else {\n // second hop in double hop route.\n //TODO -- put in a check to make sure this second hop matches with the previous (i-1) hop as a first hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n }\n }\n\n transactions.push({\n receiverId: tokenIn.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: REF_FI_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n msg: JSON.stringify({\n force: 0,\n actions: actionsList,\n }),\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n\n return transactions;\n};\n","import { getTotalPools, refFiViewFunction } from '../ref';\nimport { Pool, PoolRPCView } from '../types';\nimport { parsePool, toNonDivisibleNumber } from '../utils';\nimport { STABLE_LP_TOKEN_DECIMALS } from '../constant';\n\nlet DEFAULT_PAGE_LIMIT = 100;\n\nexport const getRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_rated_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'RATED_SWAP',\n }));\n};\n\nexport const getUnRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_stable_pool',\n args: { pool_id: Number(id) },\n }).then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'STABLE_SWAP',\n rates: pool_info.c_amounts.map((_: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }));\n};\n\nexport const getStablePools = async (stablePools: Pool[]) => {\n return Promise.all(\n stablePools.map(pool =>\n pool.pool_kind === 'RATED_SWAP'\n ? getRatedPoolDetail({ id: pool.id })\n : getUnRatedPoolDetail({ id: pool.id })\n )\n );\n};\n\nexport const getPool = async (id: number): Promise<Pool> => {\n return await refFiViewFunction({\n methodName: 'get_pool',\n args: { pool_id: id },\n }).then((pool: PoolRPCView) => parsePool(pool, id));\n};\n\nexport const getPoolByIds = async (ids: number[]): Promise<Pool[]> => {\n return await refFiViewFunction({\n methodName: 'get_pool_by_ids',\n args: { pool_ids: ids },\n }).then((pools: PoolRPCView[]) => pools.map((p, i) => parsePool(p, ids[i])));\n};\n\nexport const getRefPools = async (\n page: number = 1,\n perPage: number = DEFAULT_PAGE_LIMIT\n): Promise<Pool[]> => {\n const index = (page - 1) * perPage;\n const poolData: PoolRPCView[] = await refFiViewFunction({\n methodName: 'get_pools',\n args: { from_index: index, limit: perPage },\n });\n\n return poolData.map((rawPool, i) => parsePool(rawPool, i + index));\n};\n\nexport const fetchAllPools = async (perPage?: number) => {\n if (perPage) {\n DEFAULT_PAGE_LIMIT = Math.min(perPage, 500);\n }\n const totalPools = await getTotalPools();\n const pages = Math.ceil(totalPools / DEFAULT_PAGE_LIMIT);\n\n const pools = (\n await Promise.all(\n [...Array(pages)].fill(0).map((_, i) => getRefPools(i + 1))\n )\n ).flat() as Pool[];\n\n return {\n simplePools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'SIMPLE_POOL'\n ),\n unRatedPools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'STABLE_SWAP'\n ),\n ratedPools: pools.filter(p => p.pool_kind && p.pool_kind === 'RATED_SWAP'),\n };\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n createContext,\n ReactNode,\n} from 'react';\nimport {\n ftGetBalance,\n ftGetTokenMetadata,\n getGlobalWhitelist,\n nearDepositTransaction,\n nearWithdrawTransaction,\n REPLACE_TOKENS,\n} from '../ref';\nimport {\n EstimateSwapView,\n Pool,\n StablePool,\n TokenMetadata,\n Transaction,\n} from '../types';\nimport { fetchAllPools, getStablePools } from '../v1-swap/pool';\nimport { estimateSwap, SwapOptions, SwapParams } from '../v1-swap/swap';\nimport { SwapOutParams } from './types';\nimport {\n percentLess,\n separateRoutes,\n toNonDivisibleNumber,\n calculateExchangeRate,\n getAvgFee,\n} from '../utils';\nimport Big from 'big.js';\nimport { instantSwap } from '../v1-swap/instantSwap';\n\nimport { getExpectedOutputFromActionsORIG } from '../v1-swap/smartRoutingLogic.js';\nimport { Theme } from './constant';\nimport { defaultTheme } from './constant';\nimport {\n getTokenPriceList,\n getTokens,\n getWhiteListTokensIndexer,\n} from '../indexer';\nimport {\n toReadableNumber,\n ONLY_ZEROS,\n getExpectedOutputFromSwapTodos,\n} from '../utils';\nimport { getUserRegisteredTokens } from '../ref';\nimport { WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from '../constant';\nimport { scientificNotationToString } from '../utils';\nimport metaIconDefaults from '../metaIcons';\n\nexport const ThemeContext = createContext<Theme>(defaultTheme);\n\nexport const ThemeContextProvider: React.FC<{\n customTheme: Theme | undefined;\n}> = ({ customTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(customTheme || defaultTheme);\n\n useEffect(() => {\n if (!customTheme) return;\n setTheme(customTheme);\n }, [customTheme]);\n\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const estimateValidator = (\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n parsedAmountIn: string,\n tokenOut: TokenMetadata\n) => {\n const tokenInId = swapTodos[0]?.inputToken;\n const tokenOutId = swapTodos[swapTodos.length - 1]?.outputToken;\n\n const totalPartialAmountIn =\n swapTodos.length === 0\n ? new Big(swapTodos[0].pool.partialAmountIn || 0)\n : swapTodos.reduce(\n (acc, cur, i) => acc.plus(cur.pool.partialAmountIn || 0),\n new Big(0)\n );\n\n if (\n tokenInId !== tokenIn.id ||\n tokenOutId !== tokenOut.id ||\n !totalPartialAmountIn.eq(parsedAmountIn || '0')\n ) {\n return false;\n }\n return true;\n};\n\nexport const useAllTokens = ({ reload }: { reload?: boolean }) => {\n const [tokens, setTokens] = useState<Record<string, TokenMetadata>>();\n const [tokensLoading, setTokensLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTokens = async () => {\n const tokens = await getTokens(reload);\n setTokens(tokens);\n setTokensLoading(false);\n };\n fetchTokens();\n }, [reload]);\n\n return { tokens, tokensLoading };\n};\n\nexport const useTokensIndexer = ({\n defaultTokenList,\n AccountId,\n}: {\n defaultTokenList?: TokenMetadata[];\n AccountId?: string;\n}) => {\n const [tokens, setTokens] = useState<TokenMetadata[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState<boolean>(false);\n\n useEffect(() => {\n setTokenLoading(true);\n\n const getTokensList = async () => {\n const whiteList = await getGlobalWhitelist();\n const globalWhiteListTokens = (\n await getWhiteListTokensIndexer(whiteList)\n ).filter(token => !!token) as TokenMetadata[];\n\n const parsedTokens = globalWhiteListTokens.map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n });\n\n if (!defaultTokenList || defaultTokenList.length === 0) {\n setTokens(parsedTokens);\n setTokenLoading(false);\n } else {\n const newList = defaultTokenList\n .map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n })\n .filter(t => {\n return parsedTokens.findIndex(p => p.id === t.id) !== -1;\n });\n setTokens(\n newList.map(t =>\n !t.icon || REPLACE_TOKENS.includes(t.id)\n ? {\n ...t,\n icon: metaIconDefaults[t.id],\n }\n : t\n )\n );\n setTokenLoading(false);\n }\n };\n\n getTokensList();\n }, [AccountId, defaultTokenList]);\n\n return { tokens, tokenLoading };\n};\n\nexport const useRefPools = (refreshTrigger: boolean) => {\n const [allPools, setAllPools] = useState<{\n simplePools: Pool[];\n ratedPools: Pool[];\n unRatedPools: Pool[];\n }>({\n simplePools: [],\n ratedPools: [],\n unRatedPools: [],\n });\n\n const [poolFetchingState, setPoolFetchingState] = useState<'loading' | 'end'>(\n 'loading'\n );\n\n const [allStablePools, setAllStablePools] = useState<StablePool[]>([]);\n\n useEffect(() => {\n setPoolFetchingState('loading');\n\n fetchAllPools()\n .then(allPools => {\n setAllPools(allPools);\n\n return allPools;\n })\n .then(allPools => {\n const pools: Pool[] = allPools.unRatedPools.concat(allPools.ratedPools);\n\n return getStablePools(pools).then(setAllStablePools);\n })\n .finally(() => {\n setPoolFetchingState('end');\n });\n }, [refreshTrigger]);\n\n return {\n allPools,\n allStablePools,\n poolFetchingState,\n };\n};\n\nexport const useSwap = (\n params: {\n tokenIn?: TokenMetadata;\n tokenOut?: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n } & {\n slippageTolerance: number;\n refreshTrigger: boolean;\n onSwap: (transactionsRef: Transaction[]) => void;\n AccountId?: string;\n poolFetchingState?: 'loading' | 'end';\n }\n): SwapOutParams => {\n const {\n slippageTolerance,\n refreshTrigger,\n onSwap,\n AccountId,\n poolFetchingState,\n ...swapParams\n } = params;\n\n const { tokenIn, tokenOut, amountIn } = params;\n\n const [estimates, setEstimates] = useState<EstimateSwapView[]>([]);\n\n const [canSwap, setCanSwap] = useState(false);\n\n const [swapError, setSwapError] = useState<Error | null>(null);\n\n const [amountOut, setAmountOut] = useState<string>('');\n\n const [isEstimating, setIsEstimating] = useState<boolean>(false);\n\n const [forceEstimate, setForceEstimate] = useState<boolean>(false);\n\n const minAmountOut = amountOut\n ? percentLess(slippageTolerance, amountOut)\n : '';\n\n const fee =\n !params.tokenOut || !params.tokenIn\n ? 0\n : getAvgFee(\n estimates,\n params.tokenOut.id,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn)\n );\n\n const rate = calculateExchangeRate(\n ONLY_ZEROS.test(params.amountIn) ? '1' : params.amountIn,\n amountOut || '1'\n );\n\n const makeSwap = async () => {\n if (!params.tokenIn || !params.tokenOut) return;\n\n const transactionsRef = await instantSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n swapTodos: estimates,\n slippageTolerance,\n AccountId: AccountId || '',\n });\n if (tokenIn && tokenIn.id === WRAP_NEAR_CONTRACT_ID) {\n transactionsRef.splice(-1, 0, nearDepositTransaction(amountIn));\n }\n if (tokenOut && tokenOut.id === WRAP_NEAR_CONTRACT_ID) {\n let outEstimate = new Big(0);\n const routes = separateRoutes(estimates, tokenOut.id);\n\n const bigEstimate = routes.reduce((acc, cur) => {\n const curEstimate = cur[cur.length - 1].estimate;\n return acc.plus(curEstimate);\n }, outEstimate);\n\n const minAmountOut = percentLess(\n slippageTolerance,\n\n scientificNotationToString(bigEstimate.toString())\n );\n\n transactionsRef.push(nearWithdrawTransaction(minAmountOut));\n }\n\n onSwap(transactionsRef);\n };\n\n const getEstimate = () => {\n if (\n !params.tokenIn ||\n !params.tokenOut ||\n poolFetchingState === 'loading'\n ) {\n setCanSwap(false);\n return;\n }\n setCanSwap(false);\n\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n setEstimates([]);\n return;\n }\n\n setSwapError(null);\n setIsEstimating(true);\n estimateSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n simplePools: params.simplePools,\n options: params.options,\n })\n .then(estimates => {\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n return;\n }\n setSwapError(null);\n\n const expectAmountOut = getExpectedOutputFromSwapTodos(\n estimates,\n params.tokenOut.id\n ).toString();\n\n setAmountOut(expectAmountOut);\n\n setEstimates(estimates);\n setCanSwap(true);\n })\n .catch(e => {\n setSwapError(e);\n setCanSwap(false);\n setAmountOut('');\n })\n .finally(() => {\n setIsEstimating(false);\n setForceEstimate(false);\n });\n };\n\n useEffect(() => {\n const estimateValidationPass =\n estimates.length > 0 &&\n params.tokenIn &&\n params.tokenOut &&\n estimateValidator(\n estimates,\n params.tokenIn,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn),\n params.tokenOut\n );\n\n if (isEstimating && estimates && !forceEstimate) return;\n if ((estimateValidationPass || swapError) && !forceEstimate) return;\n getEstimate();\n }, [\n params.amountIn,\n params.tokenIn?.id,\n params.tokenOut?.id,\n refreshTrigger,\n poolFetchingState,\n isEstimating,\n forceEstimate,\n ]);\n\n useEffect(() => {\n // setEstimating(false);\n\n setForceEstimate(true);\n }, [\n params.tokenIn?.id,\n params.tokenOut?.id,\n params.options?.enableSmartRouting,\n ]);\n\n return {\n amountOut,\n minAmountOut,\n fee,\n rate,\n estimates,\n makeSwap,\n canSwap,\n swapError,\n setAmountOut,\n isEstimating,\n };\n};\n\nexport const TokenPriceContext = createContext<Record<string, any> | null>(\n null\n);\n\nexport const useTokenPriceList = () => {\n const [tokenPriceList, setTokenPriceList] = useState<Record<string, any>>({});\n\n useEffect(() => {\n getTokenPriceList().then(setTokenPriceList);\n }, []);\n\n return tokenPriceList;\n};\n\nexport const TokenPriceContextProvider: React.FC = ({ children }) => {\n const tokenPriceList = useTokenPriceList();\n\n return (\n <TokenPriceContext.Provider value={tokenPriceList}>\n {children}\n </TokenPriceContext.Provider>\n );\n};\n\nexport const useTokenBalnces = (tokens: TokenMetadata[], AccountId: string) => {\n const [balances, setBalances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n const validTokens = tokens.filter(t => !!t?.id);\n\n const ids = validTokens.map(token => token.id);\n\n Promise.all(\n ids.map(id =>\n ftGetBalance(id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : id, AccountId)\n )\n ).then(balances => {\n const balancesMap = validTokens.reduce((acc, token, index) => {\n return {\n ...acc,\n [token.id]: toReadableNumber(token.decimals, balances[index]),\n };\n }, {});\n\n setBalances(balancesMap);\n });\n }, [tokens.map(t => t?.id).join('-')]);\n\n return balances;\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useContext, useRef, useMemo } from 'react';\nimport { TokenMetadata, EstimateSwapView, Pool } from '../types';\nimport {\n ThemeContext,\n useTokenPriceList,\n TokenPriceContext,\n useTokenBalnces,\n} from './state';\n\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { FiChevronLeft } from '@react-icons/all-files/fi/FiChevronLeft';\n\nimport { FiChevronUp } from '@react-icons/all-files/fi/FiChevronUp';\n\nimport { FaSearch } from '@react-icons/all-files/fa/FaSearch';\n\nimport { RiRefreshLine } from '@react-icons/all-files/ri/RiRefreshLine';\n\nimport { TiArrowSortedUp } from '@react-icons/all-files/ti/TiArrowSortedUp';\n\nimport { TiArrowSortedDown } from '@react-icons/all-files/ti/TiArrowSortedDown';\n\nimport { HiOutlineExternalLink } from '@react-icons/all-files/hi/HiOutlineExternalLink';\n\nimport { AiFillPushpin } from '@react-icons/all-files/ai/AiFillPushpin';\n\nimport { AiOutlinePushpin } from '@react-icons/all-files/ai/AiOutlinePushpin';\n\nimport { RiExchangeFill } from '@react-icons/all-files/ri/RiExchangeFill';\n\nimport { IoWarning } from '@react-icons/all-files/io5/IoWarning';\n\nimport { IoCloseOutline } from '@react-icons/all-files/io5/IoCloseOutline';\n\nimport { AiOutlineClose } from '@react-icons/all-files/ai/AiOutlineClose';\n\nimport './style.css';\nimport {\n getAccountName,\n symbolsArr,\n multiply,\n percentOfBigNumber,\n ONLY_ZEROS,\n toRealSymbol,\n toPrecision,\n toInternationalCurrencySystemLongString,\n calculateFeeCharge,\n calculateFeePercent,\n} from '../utils';\nimport { REF_WIDGET_STAR_TOKEN_LIST_KEY } from './constant';\nimport Big from 'big.js';\nimport {\n config,\n FEE_DIVISOR,\n getConfig,\n NEAR_META_DATA,\n TokenLinks,\n WRAP_NEAR_CONTRACT_ID,\n} from '../constant';\nimport {\n scientificNotationToString,\n percent,\n getPoolAllocationPercents,\n} from '../utils';\nimport {\n REF_WIDGET_SWAP_DETAIL_KEY,\n DEFAULT_START_TOKEN_LIST_TESTNET,\n DEFAULT_START_TOKEN_LIST_MAINNET,\n} from './constant';\nimport { PoolMode } from '../v1-swap/swap';\nimport { isMobile, separateRoutes, divide, getMax } from '../utils';\n\ninterface TokenAmountProps {\n balance?: string;\n reloading?: JSX.Element;\n token?: TokenMetadata;\n onSelectToken: () => void;\n amount: string;\n onChangeAmount?: (amount: string) => void;\n price?: string;\n onForceUpdate?: () => void;\n poolFetchingState?: 'loading' | 'end';\n}\n\nexport const getPriceImpact = (\n value: string,\n tokenIn: TokenMetadata,\n tokenInAmount: string\n) => {\n const textColor =\n Number(value) <= 1\n ? 'text-greenLight'\n : 1 < Number(value) && Number(value) <= 2\n ? 'text-warn'\n : 'text-error';\n\n const displayValue = scientificNotationToString(\n multiply(tokenInAmount || '0', divide(value, '100'))\n );\n\n const tokenInInfo =\n Number(displayValue) <= 0\n ? ` / 0 ${toRealSymbol(tokenIn.symbol)}`\n : ` / -${toInternationalCurrencySystemLongString(\n displayValue,\n 3\n )} ${toRealSymbol(tokenIn.symbol)}`;\n\n if (Number(value) < 0.01)\n return (\n <span className=\"text-greenLight\">\n {`< -0.01%`}\n {tokenInInfo}\n </span>\n );\n\n if (Number(value) > 1000)\n return (\n <span className=\"text-error\">\n {`< -1000%`}\n {tokenInInfo}\n </span>\n );\n\n return (\n <span className={`${textColor} font-sans`}>\n {`≈ -${toPrecision(value, 2)}%`}\n {tokenInInfo}\n </span>\n );\n};\n\nexport const SmartRouteV2 = ({\n tokens: tokensRaw,\n p,\n pools,\n}: {\n tokens: TokenMetadata[];\n p: string;\n pools: Pool[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const tokens = tokensRaw.map(t =>\n t.id === WRAP_NEAR_CONTRACT_ID\n ? { ...NEAR_META_DATA, id: WRAP_NEAR_CONTRACT_ID }\n : t\n );\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const ParaTokenFrom = ({\n tokenIn,\n p,\n }: {\n tokenIn: TokenMetadata;\n p: string;\n }) => {\n return (\n <div\n className=\"__ref-swap-widget-row-flex-center \"\n style={{\n width: '60px',\n }}\n >\n <span\n style={{\n marginRight: '4px',\n }}\n >\n {p}%\n </span>\n <span className=\"\">\n <Icon token={tokenIn} />\n </span>\n </div>\n );\n };\n const Icon = ({ token }: { token: TokenMetadata }) => {\n if (token.icon) {\n return (\n <img\n src={token.icon}\n alt=\"\"\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n flexShrink: 0,\n }}\n />\n );\n } else {\n return (\n <div\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n }}\n />\n );\n }\n };\n const Hub = ({ token, poolId }: { token: TokenMetadata; poolId: number }) => {\n return (\n <div\n className={`__ref-swap-widget-row-flex-center`}\n style={{\n width: '62px',\n height: '22px',\n }}\n >\n <div\n className={`w-full flex items-center justify-start pl-2 `}\n style={{\n marginRight: '4px',\n }}\n >\n <span className=\"text-gray-400\">{`#${poolId}`}</span>\n </div>\n <Icon token={token} />\n </div>\n );\n };\n\n if (tokens.length === 3) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n {/* <Hub token={tokens[0]} /> */}\n\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div\n className=\"\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n <div\n className=\"px-3\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[2]} poolId={pools?.[1]?.id} />\n </div>\n );\n } else if (tokens.length === 2) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div className=\"px-3\">\n <ArrowRight />\n </div>\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n </div>\n );\n } else {\n return null;\n }\n};\n\nexport const DetailView = ({\n tokenIn,\n tokenOut,\n rate,\n fee,\n minReceived,\n amountIn,\n amountOut,\n priceImpact,\n estimates,\n}: {\n tokenIn: TokenMetadata | undefined;\n tokenOut: TokenMetadata | undefined;\n rate: string;\n fee: number;\n minReceived: string;\n amountIn: string;\n amountOut: string;\n priceImpact: string;\n estimates: EstimateSwapView[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const storagedOpen = !!localStorage.getItem(REF_WIDGET_SWAP_DETAIL_KEY);\n\n const [showDetail, setShowDetail] = useState(storagedOpen || false);\n const [isRateReverse, setIsRateReverse] = useState(false);\n\n const tokensPerRoute = estimates\n .filter(swap => swap.inputToken === tokenIn?.id)\n .map(swap => swap.tokens);\n\n const identicalRoutes = separateRoutes(\n estimates,\n estimates[estimates.length - 1]?.outputToken || ''\n );\n\n const pools = identicalRoutes.map(r => r[0]).map(hub => hub.pool);\n const percents = useMemo(() => {\n if (!pools || pools.length === 0) return [];\n return getPoolAllocationPercents(pools);\n }, [pools]);\n\n const priceImpactDisplay = useMemo(() => {\n if (!priceImpact || !tokenIn || !amountIn) return null;\n return getPriceImpact(priceImpact, tokenIn, amountIn);\n }, [priceImpact, tokenIn, amountIn]);\n if (!tokenIn || !tokenOut) return null;\n\n const displayRate = `1 ${toRealSymbol(tokenIn.symbol)} ≈ ${\n Number(rate) < 0.01 ? '< 0.01' : toPrecision(rate, 2)\n } ${toRealSymbol(tokenOut.symbol)}`;\n\n const revertRate = new Big(1).div(ONLY_ZEROS.test(rate) ? '1' : rate || '1');\n\n const revertDisplayRate = `1 ${toRealSymbol(tokenOut.symbol)} ≈ ${\n Number(revertRate) < 0.01 ? '< 0.01' : toPrecision(revertRate.toString(), 2)\n } ${toRealSymbol(tokenIn.symbol)}`;\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n return (\n <div\n className=\"__ref-widget-swap-detail-view __ref-swap-widget-col-flex-start\"\n style={{\n color: secondary,\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div\n style={{\n color: primary,\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n onClick={() => {\n if (showDetail) localStorage.removeItem(REF_WIDGET_SWAP_DETAIL_KEY);\n else {\n localStorage.setItem(REF_WIDGET_SWAP_DETAIL_KEY, '1');\n }\n setShowDetail(!showDetail);\n }}\n >\n <div>Detail</div>\n <div\n style={{\n position: 'relative',\n }}\n >\n {!showDetail ? <FiChevronDown /> : <FiChevronUp />}\n </div>\n </div>\n\n {amountIn && amountOut && (\n <div className=\"__ref-swap-widget-row-flex-center\">\n <div>{isRateReverse ? revertDisplayRate : displayRate}</div>\n\n <RiExchangeFill\n onClick={() => {\n setIsRateReverse(!isRateReverse);\n }}\n size={16}\n style={{\n marginLeft: '4px',\n cursor: 'pointer',\n }}\n fill={iconDefault}\n />\n </div>\n )}\n </div>\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Minimum received</div>\n <div>{toPrecision(minReceived || '0', 8)}</div>\n </div>\n\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Fee</div>\n\n <div>\n {!amountIn\n ? '0'\n : `${calculateFeeCharge(fee, amountIn)} ${toRealSymbol(\n tokenIn.symbol\n )}(${toPrecision(calculateFeePercent(fee).toString(), 2)}%)`}\n </div>\n </div>\n </>\n )}\n\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Price impact</div>\n\n <div>{priceImpactDisplay}</div>\n </div>\n </>\n )}\n\n {estimates && estimates.length > 1 && showDetail && (\n <div\n className=\"__ref-swap-widget-swap_routes __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${borderColor}`,\n flexDirection: isMobile() ? 'column' : 'row',\n position: 'relative',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center\">\n <RouterIcon />\n <span\n className=\"__ref-swap-widget-valueStyle\"\n style={{\n marginLeft: '4px',\n whiteSpace: 'nowrap',\n }}\n >\n {'Auto Router'}\n </span>\n </div>\n\n <div\n className=\"\"\n style={{\n width: isMobile() ? '100%' : 'auto',\n minWidth: !isMobile() ? '70%' : '',\n }}\n >\n {tokensPerRoute.every(r => !!r) &&\n tokensPerRoute.map((tokens, index) => {\n if (!tokens) return null;\n return (\n <SmartRouteV2\n key={index + '-swap-route'}\n tokens={tokens}\n p={percents[index]}\n pools={identicalRoutes[index].map(hub => hub.pool)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const HalfAndMaxAmount = ({\n max,\n onChangeAmount,\n token,\n amount,\n}: {\n max: string;\n token: TokenMetadata;\n onChangeAmount: (amount: string) => void;\n amount: string;\n}) => {\n const halfValue = percentOfBigNumber(50, max, token.decimals);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const [hoverHalf, setHoverHalf] = useState<boolean>(false);\n const [hoverMax, setHoverMax] = useState<boolean>(false);\n\n return (\n <div className=\"__ref-swap-widget-token-amount_quick_selector __ref-swap-widget-row-flex-center\">\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item \"\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n marginRight: '4px',\n\n background:\n amount === halfValue && !ONLY_ZEROS.test(halfValue)\n ? active\n : hoverHalf\n ? hover\n : 'transparent',\n }}\n onMouseEnter={() => setHoverHalf(true)}\n onMouseLeave={() => setHoverHalf(false)}\n onClick={() => {\n const half = percentOfBigNumber(50, max, token.decimals);\n\n onChangeAmount(half);\n }}\n >\n Half\n </span>\n\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item\"\n onClick={() => {\n onChangeAmount(max);\n }}\n onMouseEnter={() => setHoverMax(true)}\n onMouseLeave={() => setHoverMax(false)}\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n background:\n amount === max && !ONLY_ZEROS.test(max)\n ? active\n : hoverMax\n ? hover\n : 'transparent',\n }}\n >\n Max\n </span>\n </div>\n );\n};\n\nexport const TokenAmount = (props: TokenAmountProps) => {\n const {\n balance,\n reloading,\n token,\n onSelectToken,\n amount,\n onChangeAmount,\n price,\n onForceUpdate,\n poolFetchingState,\n } = props;\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const [hoverSelect, setHoverSelect] = useState<boolean>(false);\n\n const handleChange = (amount: string) => {\n if (onChangeAmount) {\n onChangeAmount(amount);\n }\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (\n ref.current &&\n onChangeAmount &&\n token &&\n balance &&\n token.id === WRAP_NEAR_CONTRACT_ID &&\n Number(balance) - Number(ref.current.value) < 0.5\n ) {\n ref.current.setCustomValidity(\n 'Must have 0.5N or more left in wallet for gas fee.'\n );\n } else {\n ref.current?.setCustomValidity('');\n }\n }, [ref, balance, ref.current, ref.current?.value, token, amount]);\n\n const curMax = token ? getMax(token.id, balance || '0') : '0';\n\n return (\n <>\n <div\n className=\"__ref-swap-widger-token-amount \"\n style={{\n background: secondaryBg,\n flexDirection: isMobile() ? 'column' : 'row',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n width: isMobile() ? 'auto' : '40%',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-token-amount_token-select-button\"\n style={{\n color: primary,\n background: hoverSelect ? hover : 'transparent',\n border: `1px solide ${hoverSelect ? borderColor : 'transparent'}`,\n }}\n onClick={onSelectToken}\n onMouseEnter={() => setHoverSelect(true)}\n onMouseLeave={() => setHoverSelect(false)}\n >\n {!token ? (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n height: '26px',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n Select Token\n </span>\n </>\n ) : (\n <>\n <img\n src={token?.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '8px',\n }}\n />\n <span>{toRealSymbol(token?.symbol)}</span>\n </>\n )}\n <FiChevronDown\n style={{\n marginLeft: '4px',\n flexShrink: 0,\n }}\n />\n </div>\n\n {onForceUpdate && (\n <RiRefreshLine\n className={`${\n poolFetchingState === 'loading'\n ? '__ref-swap-widget-loading '\n : ''\n }`}\n style={{\n cursor: 'pointer',\n color: secondary,\n }}\n size={18}\n onClick={() => {\n onForceUpdate();\n }}\n />\n )}\n </div>\n\n <div\n className=\" __ref-swap-widget-token-amount_input\"\n style={{\n width: isMobile() ? '100%' : '60%',\n }}\n >\n <input\n ref={ref}\n max={!!onChangeAmount ? curMax : undefined}\n min=\"0\"\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n className=\"__ref-swap-widget-input-class\"\n step=\"any\"\n value={amount}\n type=\"number\"\n placeholder={!onChangeAmount ? '-' : '0.0'}\n onChange={({ target }) => {\n target.setCustomValidity('');\n handleChange(target.value);\n }}\n disabled={!onChangeAmount}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n color: primary,\n marginBottom: '8px',\n width: '100%',\n textAlign: 'right',\n fontSize: '20px',\n }}\n />\n\n <div\n style={{\n fontSize: '12px',\n color: secondary,\n textAlign: 'right',\n }}\n >\n {!price\n ? '$-'\n : '~$' +\n toInternationalCurrencySystemLongString(\n multiply(price, amount || '0'),\n 2\n )}\n </div>\n </div>\n </div>\n\n {!balance || !token || !onChangeAmount ? null : (\n <div\n className=\"__ref-swap-widger-token-amount_balance __ref-swap-widget-row-flex-center\"\n style={{\n fontSize: '12px',\n color: secondary,\n }}\n >\n <span>\n Balance:&nbsp;\n {toPrecision(balance, 2)}\n </span>\n {token && (\n <HalfAndMaxAmount\n token={token}\n max={getMax(token.id, balance)}\n onChangeAmount={handleChange}\n amount={amount}\n />\n )}\n </div>\n )}\n </>\n );\n};\n\nexport const SlippageSelector = ({\n slippageTolerance,\n onChangeSlippageTolerance,\n showSlip,\n setShowSlip,\n}: {\n slippageTolerance: number;\n onChangeSlippageTolerance: (slippageTolerance: number) => void;\n showSlip: boolean;\n setShowSlip: (showSlip: boolean) => void;\n}) => {\n const [invalid, setInValid] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const handleChange = (amount: string) => {\n onChangeSlippageTolerance(Number(amount));\n\n if (Number(amount) > 0 && Number(amount) < 100) {\n setInValid(false);\n } else {\n setInValid(true);\n }\n\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (!showSlip) return;\n\n document.onclick = () => setShowSlip(false);\n\n return () => {\n document.onclick = null;\n };\n }, [showSlip, setShowSlip]);\n\n if (!showSlip) return null;\n\n return (\n <div\n className=\"__ref-swap-widget_slippage_selector __ref-swap-widget-col-flex-start\"\n onClick={e => e.stopPropagation()}\n style={{\n background: container,\n border: `1px solid ${borderColor}`,\n }}\n >\n <span\n style={{\n color: primary,\n paddingBottom: '14px',\n }}\n >\n Slippage tolerance\n </span>\n\n <div\n className={`__ref-swap-widget-row-flex-center\n `}\n >\n <div\n className={`__ref-swap-widget-row-flex-center\n __ref-swap-widget_slippage_selector_input_container`}\n style={{\n border: `1px solid ${invalid ? '#FF7575' : borderColor}`,\n borderRadius,\n }}\n >\n <input\n ref={ref}\n max={99.99999}\n min={0.000001}\n defaultValue={slippageTolerance ? slippageTolerance : 0.5}\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n value={slippageTolerance}\n step=\"any\"\n type=\"number\"\n required={true}\n placeholder=\"\"\n onChange={({ target }) => handleChange(target.value)}\n onKeyDown={e => symbolsArr.includes(e.key) && e.preventDefault()}\n style={{\n width: '100%',\n color: invalid ? '#FF7575' : primary,\n }}\n className=\"__ref-swap-widget-input-class\"\n />\n <span className=\"ml-2\">%</span>\n </div>\n\n <button\n className={`__ref-swap-widget_slippage_selector_button __ref-swap-widget-button ${\n isMobile()\n ? '__ref-swap-widget-opacity-active'\n : '__ref-swap-widget-opacity-hover'\n }`}\n style={{\n color: primary,\n background: buttonBg,\n borderRadius,\n }}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n onChangeSlippageTolerance(0.5);\n setInValid(false);\n }}\n >\n Auto\n </button>\n </div>\n {invalid && (\n <div\n className=\" text-xs py-3 __ref-swap-widget-row-flex-center\"\n style={{\n color: '#FF7575',\n fontSize: '12px',\n padding: '10px 0px',\n alignItems: 'start',\n }}\n >\n <IoWarning\n className=\"\"\n style={{\n marginRight: '4px',\n }}\n size={20}\n />\n <div>{'The slippage tolerance is invalid.'}</div>\n </div>\n )}\n </div>\n );\n};\n\nconst StarToken = ({\n price,\n token,\n onDelete,\n onClick,\n}: {\n token: TokenMetadata;\n price: string;\n onDelete: (token: TokenMetadata) => void;\n onClick: (token: TokenMetadata) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const [hoverIcon, setHoverIcon] = useState(false);\n\n const [hoverClose, setHoverClose] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_star_token __ref-swap-widget-row-flex-center\"\n onMouseEnter={() => setHoverIcon(true)}\n onMouseLeave={() => setHoverIcon(false)}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n style={{\n background: hoverIcon ? hover : 'transparent',\n border: `1px solid ${borderColor}`,\n }}\n >\n {hoverIcon && (\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n right: '-4px',\n boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.25)',\n border: `1px solid ${borderColor}`,\n borderRadius: '100%',\n width: '16px',\n height: '16px',\n background: '#E3E3E3',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDelete(token);\n }}\n onMouseEnter={() => setHoverClose(true)}\n onMouseLeave={() => setHoverClose(false)}\n >\n <IoCloseOutline stroke={hoverClose ? 'black' : '#7e8a93'} />\n </div>\n )}\n\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '2px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n >\n {toRealSymbol(token.symbol)}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n );\n};\n\ninterface TokenProps {\n token: TokenMetadata;\n onClick: (token: TokenMetadata) => void;\n onClickPin: (token: TokenMetadata) => void;\n balance: string;\n price?: string;\n isSticky?: boolean;\n index: number;\n setHoverIndex: (index: number) => void;\n hoverIndex: number;\n}\n\nconst Token = ({\n token,\n onClick,\n price,\n balance,\n isSticky,\n onClickPin,\n index,\n setHoverIndex,\n hoverIndex,\n}: TokenProps) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const displayBalance =\n 0 < Number(balance) && Number(balance) < 0.001\n ? '< 0.001'\n : toPrecision(String(balance), 3);\n\n const [hoverOutLink, setHoverOutLink] = useState(false);\n\n const [hoverPin, setHoverPin] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_token-selector-token-list-item __ref-swap-widget-row-flex-center\"\n style={{\n background: hoverIndex === index ? hover : 'transparent',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n onMouseEnter={() => setHoverIndex(index)}\n onMouseLeave={() => setHoverIndex(-1)}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'space-between',\n }}\n >\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '36px',\n width: '36px',\n marginRight: '10px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n {toRealSymbol(token.symbol)}\n\n {TokenLinks[token.symbol] && (\n <HiOutlineExternalLink\n onMouseEnter={() => setHoverOutLink(true)}\n onMouseLeave={() => setHoverOutLink(false)}\n style={{\n marginLeft: '4px',\n marginTop: '2px',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n window.open(TokenLinks[token.symbol], '_blank');\n }}\n stroke={hoverOutLink ? iconHover : iconDefault}\n />\n )}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n marginTop: '2px',\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n }}\n >\n {displayBalance}\n\n {isSticky ? (\n <AiFillPushpin\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n ) : (\n <AiOutlinePushpin\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\ninterface TokenListProps {\n tokens: TokenMetadata[];\n onClick: (token: TokenMetadata) => void;\n balances: { [tokenId: string]: string };\n tokenPriceList: Record<string, any> | null;\n starList: string[];\n setStarList: (starList: string[]) => void;\n onDelete: (token: TokenMetadata) => void;\n}\n\nexport const TokenListTable = ({\n tokens,\n onClick,\n balances,\n tokenPriceList,\n starList,\n setStarList,\n onDelete,\n}: TokenListProps) => {\n const [currentSort, setCurrentSort] = useState('down');\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const onClickPin = (token: TokenMetadata) => {\n if (starList.includes(token.id)) {\n onDelete(token);\n } else {\n const newList = [...starList, token.id];\n setStarList(newList);\n }\n };\n\n const [hoverIndex, setHoverIndex] = useState(-1);\n\n const tokenSorting = (a: TokenMetadata, b: TokenMetadata) => {\n const b1 = balances[a.id];\n const b2 = balances[b.id];\n\n if (currentSort === 'up') {\n return Number(b1) - Number(b2);\n } else return Number(b2) - Number(b1);\n };\n\n return !tokens || tokens.length === 0 ? null : (\n <div className=\"__ref-swap-widget_token_list_table\">\n <div\n className=\"__ref-swap-widget_token_list_table_header\"\n style={{\n color: secondary,\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n <span className=\"\">Asset</span>\n\n <span\n onClick={() => {\n setCurrentSort(currentSort === 'up' ? 'down' : 'up');\n }}\n style={{\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n <span className=\"ml-1\">Balance</span>\n {currentSort === 'up' ? <TiArrowSortedUp /> : <TiArrowSortedDown />}\n </span>\n </div>\n\n <div className=\"__ref-swap-widget_token_list_table_content\">\n {tokens.sort(tokenSorting).map((token, index) => (\n <Token\n key={token.id + '-select-token-list-item-' + index}\n onClick={onClick}\n index={index}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n balance={balances?.[token.id] || '0'}\n onClickPin={onClickPin}\n isSticky={starList.includes(token.id)}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const TokenSelector = ({\n onSelect,\n width,\n tokens,\n onClose,\n AccountId,\n balances,\n className,\n}: {\n onSelect: (token: TokenMetadata) => void;\n width: string;\n tokens: TokenMetadata[];\n onClose: () => void;\n AccountId: string;\n balances: { [tokenId: string]: string };\n className?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n } = theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const tokenPriceList = useContext(TokenPriceContext);\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n };\n\n const storagedStartList = localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY)\n ? JSON.parse(localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY) || '[]')\n : null;\n\n const DEFAULT_START_TOKEN_LIST =\n getConfig().networkId === 'testnet'\n ? DEFAULT_START_TOKEN_LIST_TESTNET\n : DEFAULT_START_TOKEN_LIST_MAINNET;\n\n const [starList, setStarList] = useState<string[]>(\n storagedStartList || DEFAULT_START_TOKEN_LIST\n );\n\n const onDelete = (token: TokenMetadata) => {\n const newStarList = starList.filter(starToken => starToken !== token.id);\n\n setStarList(newStarList);\n\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(newStarList)\n );\n };\n\n const tableListFilter = (token: TokenMetadata) => {\n if (!searchValue) return true;\n\n const searchValueLower = searchValue.toLowerCase();\n\n return token.symbol?.toLowerCase().includes(searchValueLower) || false;\n };\n\n return (\n <div\n className={`__ref-swap_widget-token_selector __ref-swap-widget-container ${className}`}\n style={{\n position: 'relative',\n width,\n background: container,\n }}\n >\n <FiChevronLeft\n onClick={onClose}\n style={{\n color: primary,\n position: 'absolute',\n cursor: 'pointer',\n }}\n />\n <div\n className=\"__ref-swap-widget-header-title __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n justifyContent: 'center',\n paddingBottom: '24px',\n }}\n >\n Select a token\n </div>\n\n <div\n className=\"__ref-swap-widget-select-token_input __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${buttonBg}`,\n background: secondaryBg,\n }}\n >\n <FaSearch\n fill={iconDefault}\n style={{\n marginRight: '8px',\n }}\n />\n\n <input\n className=\"__ref-swap-widget-input-class\"\n placeholder=\"Search token...\"\n onChange={evt => handleSearch(evt.target.value)}\n style={{\n fontSize: '14px',\n color: primary,\n }}\n />\n </div>\n\n <div className=\"__ref-swap-widget_token-selector-star-tokens __ref-swap-widget-row-flex-center\">\n {starList.map(id => {\n if (!tokens || tokens.length === 0) return null;\n\n const token = tokens.find(token => token.id === id);\n\n return !token ? null : (\n <StarToken\n key={token.id + '-star-token'}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n onDelete={onDelete}\n onClick={onSelect}\n />\n );\n })}\n </div>\n\n <TokenListTable\n tokens={tokens.filter(tableListFilter)}\n tokenPriceList={tokenPriceList}\n onClick={onSelect}\n balances={balances}\n starList={starList}\n setStarList={starList => {\n setStarList(starList);\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(starList)\n );\n }}\n onDelete={onDelete}\n />\n </div>\n );\n};\n\nexport const Slider = ({\n showSlip,\n setShowSlip,\n}: {\n showSlip: boolean;\n setShowSlip: (show: boolean) => void;\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={() => setShowSlip(true)}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.6957 13.0652C12.6957 14.1338 11.8294 15 10.7609 15C9.69235 15 8.82611 14.1338 8.82611 13.0652C8.82612 11.9967 9.69235 11.1304 10.7609 11.1304C11.8294 11.1304 12.6957 11.9967 12.6957 13.0652ZM14.5749 12.0941C14.6145 12.0894 14.6548 12.0869 14.6957 12.0869L15.9565 12.0869C16.5088 12.0869 16.9565 12.5346 16.9565 13.0869C16.9565 13.6392 16.5088 14.0869 15.9565 14.0869L14.6957 14.0869C14.651 14.0869 14.6071 14.084 14.564 14.0783C14.1171 15.7605 12.5837 17 10.7609 17C8.93806 17 7.40472 15.7605 6.95777 14.0783C6.91471 14.084 6.87078 14.0869 6.82617 14.0869L1.00009 14.0869C0.447802 14.0869 8.61245e-05 13.6392 8.61728e-05 13.0869C8.62211e-05 12.5346 0.447802 12.0869 1.00009 12.0869L6.82617 12.0869C6.86702 12.0869 6.90729 12.0894 6.94686 12.0941C7.37926 10.3906 8.92291 9.13044 10.7609 9.13044C12.5989 9.13044 14.1425 10.3906 14.5749 12.0941ZM4.26086 3.93478C4.26086 2.86623 5.1271 2 6.19565 2C7.2642 2 8.13043 2.86623 8.13043 3.93478C8.13043 5.00333 7.2642 5.86957 6.19565 5.86957C5.1271 5.86956 4.26086 5.00333 4.26086 3.93478ZM6.19565 9.66601e-07C4.3728 8.07243e-07 2.83946 1.23952 2.39252 2.92168C2.34944 2.91601 2.3055 2.91309 2.26087 2.91309L0.999999 2.91309C0.447715 2.91309 -7.14972e-07 3.3608 -7.63254e-07 3.91309C-8.11537e-07 4.46537 0.447715 4.91309 0.999999 4.91309L2.26087 4.91309C2.30173 4.91309 2.34202 4.91063 2.3816 4.90587C2.81401 6.60936 4.35766 7.86956 6.19565 7.86957C8.03363 7.86957 9.57728 6.60936 10.0097 4.90588C10.0493 4.91064 10.0895 4.91309 10.1304 4.91309L15.9565 4.91309C16.5087 4.91309 16.9565 4.46537 16.9565 3.91309C16.9565 3.3608 16.5087 2.91309 15.9565 2.91309L10.1304 2.91309C10.0858 2.91309 10.0418 2.91601 9.99877 2.92167C9.55182 1.23952 8.01849 1.12596e-06 6.19565 9.66601e-07Z\"\n fill={hover || showSlip ? '#00C6A2' : '#7E8A93'}\n />\n </svg>\n );\n};\n\nexport const RefIcon = (props: any) => {\n return (\n <svg\n {...props}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.36365 10H10L6.36365 6.36363V10Z\" fill=\"currentColor\" />\n <path\n d=\"M10 4.05312e-06L7.87879 3.86767e-06L10 2.12122L10 4.05312e-06Z\"\n fill=\"#00C6A2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51531 6.36364C6.46444 6.36364 6.41387 6.36232 6.36365 6.35971V4.08371L8.83901 1.78516C9.18802 2.26148 9.3941 2.8491 9.3941 3.48485C9.3941 5.07476 8.10522 6.36364 6.51531 6.36364ZM8.19255 1.14486L6.36365 2.84313V0.60999C6.41387 0.607383 6.46444 0.606064 6.51531 0.606064C7.14111 0.606064 7.72027 0.805743 8.19255 1.14486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.06046 0.606064H3.33319V3.29661L4.55696 4.52039L6.06046 3.12428V0.606064ZM6.06046 4.36486L4.5336 5.78267L3.33319 4.58226V10H6.06046V4.36486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.0303 0.606064H0V4.50881L2.27284 2.23598L3.0303 2.99344V0.606064ZM3.0303 4.27909L2.27284 3.52162L0 5.79446V10H3.0303V4.27909Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport const Loading = () => {\n return (\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"__ref-swap-widget-loading\"\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M19 35C27.8366 35 35 27.8366 35 19C35 10.1634 27.8366 3 19 3C10.1634 3 3 10.1634 3 19\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Warning = () => {\n return (\n <svg\n width=\"49\"\n height=\"49\"\n viewBox=\"0 0 49 49\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21.0359 5.99999C22.5755 3.33333 26.4245 3.33333 27.9641 6L42.2535 30.75C43.7931 33.4167 41.8686 36.75 38.7894 36.75H10.2106C7.13137 36.75 5.20688 33.4167 6.74648 30.75L21.0359 5.99999Z\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"14\"\n x2=\"24\"\n y2=\"24\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"24\" cy=\"30\" r=\"2\" fill=\"#FF689E\" />\n </svg>\n );\n};\n\nexport const Success = () => {\n return (\n <div\n style={{\n position: 'relative',\n height: '32px',\n width: '32px',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n width=\"30\"\n height=\"23\"\n viewBox=\"0 0 30 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n }}\n >\n <path\n d=\"M2 11.2727L10.4898 20L28 2\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport const RouterIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"12\"\n viewBox=\"0 0 16 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mr-2\"\n >\n <path\n d=\"M13.4862 6.25488C12.2813 6.25488 11.2485 7.10159 11.019 8.28698H6.02703L4.7647 7.21448C4.93684 6.8758 5.05159 6.48067 5.10897 6.0291C5.10897 5.52107 4.93684 4.9566 4.59257 4.56147L6.02703 3.1503H11.0763C11.478 4.44858 12.8551 5.23884 14.1748 4.84371C15.4945 4.44858 16.2978 3.09385 15.8961 1.79557C15.4945 0.497295 14.1174 -0.292963 12.7977 0.102166C11.937 0.327954 11.3059 1.00532 11.0763 1.79557H5.51062L3.50237 3.77122C3.21548 3.65832 2.92859 3.60188 2.58432 3.60188C1.20723 3.54543 0.0596573 4.61792 0.00227872 5.97265C-0.0550999 7.32738 0.977715 8.45632 2.3548 8.51276H2.58432C3.04334 8.51276 3.44499 8.39987 3.84664 8.17408L5.568 9.6417H11.1911C11.7075 10.8835 13.142 11.5045 14.4043 11.0529C15.6666 10.5449 16.2978 9.13368 15.8388 7.89185C15.4371 6.8758 14.5191 6.25488 13.4862 6.25488V6.25488ZM13.4862 1.344C14.1174 1.344 14.6338 1.85202 14.6338 2.47294C14.6338 3.09385 14.1174 3.60188 13.4862 3.60188C12.8551 3.60188 12.3387 3.09385 12.3387 2.47294C12.3387 1.85202 12.8551 1.344 13.4862 1.344ZM2.58432 7.15804C1.95315 7.15804 1.43674 6.65001 1.43674 6.0291C1.43674 5.40818 1.95315 4.90016 2.58432 4.90016C3.21548 4.90016 3.73189 5.40818 3.73189 6.0291C3.73189 6.65001 3.21548 7.15804 2.58432 7.15804ZM13.4862 9.86749C12.8551 9.86749 12.3387 9.35947 12.3387 8.73855C12.3387 8.11763 12.8551 7.60961 13.4862 7.60961C14.1174 7.60961 14.6338 8.11763 14.6338 8.73855C14.6338 9.35947 14.1174 9.86749 13.4862 9.86749Z\"\n fill=\"url(#paint0_linear_12461_2312)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_12461_2312\"\n x1=\"8\"\n y1=\"0\"\n x2=\"8\"\n y2=\"11.2\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#00C6A2\" />\n <stop offset=\"1\" stopColor=\"#8C78FF\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport const Notification = ({\n state,\n tx,\n detail,\n open,\n setOpen,\n setState,\n}: {\n state?: 'success' | 'fail' | null;\n setState?: (state: 'success' | 'fail' | null) => void;\n tx?: string;\n detail?: string;\n\n open: boolean;\n setOpen: (open: boolean) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n } = theme;\n\n if (!open) return null;\n\n return (\n <div\n className=\"__ref-swap-widget-notification\"\n style={{\n color: primary,\n background: container,\n }}\n >\n <div className=\"__ref-swap-widget-notification__icon\">\n {state === null && <Loading />}\n {state === 'fail' && <Warning />}\n {state === 'success' && <Success />}\n </div>\n\n <div\n style={{\n fontSize: '16px',\n marginTop: '10px',\n marginBottom: '6px',\n }}\n >\n {state === 'success' && <p>Success!</p>}\n {state === 'fail' && <p>Swap Failed!</p>}\n </div>\n <div\n className=\"__ref-swap-widget-notification__text\"\n style={{\n color: primary,\n }}\n >\n {(state === null || state === undefined) && (\n <p>Waiting for confirmation</p>\n )}\n {state === 'fail' && !!tx && (\n <a\n className=\"text-primary font-semibold\"\n href={`${config.explorerUrl}/txns/${tx}`}\n target=\"_blank\"\n style={{\n textDecoration: 'underline',\n fontSize: '14px',\n color: primary,\n }}\n rel=\"noreferrer\"\n >\n Click to view.\n </a>\n )}\n\n {state === 'success' && detail}\n </div>\n {state !== null && (\n <button\n className=\"__ref-swap-widget-notification__button __ref-swap-widget-button\"\n style={{\n background: buttonBg,\n fontWeight: 700,\n color: 'white',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n setState && setState(null);\n }}\n >\n Close\n </button>\n )}\n </div>\n );\n};\n\nexport const ArrowRight = () => {\n return (\n <div className=\"mx-1\">\n <svg\n width=\"12\"\n height=\"5\"\n viewBox=\"0 0 12 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.864 4.4C9.024 4.05867 9.17867 3.76 9.328 3.504C9.488 3.248 9.64267 3.03467 9.792 2.864H0.464V2.192H9.792C9.64267 2.01067 9.488 1.792 9.328 1.536C9.17867 1.28 9.024 0.986666 8.864 0.656H9.424C10.096 1.43467 10.8 2.01067 11.536 2.384V2.672C10.8 3.03467 10.096 3.61067 9.424 4.4H8.864Z\"\n fill=\"#7E8A93\"\n />\n </svg>\n </div>\n );\n};\n\nexport const AccountButton = ({\n AccountId,\n onDisConnect,\n}: {\n AccountId: string;\n onDisConnect: () => void;\n}) => {\n const [hoverAccount, setHoverAccount] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n borderColor,\n } = theme;\n\n return !AccountId ? null : (\n <div\n className=\"__ref-swap-widget-header-button-account __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n background: secondaryBg,\n border: `1px solid ${borderColor}`,\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n hoverAccount && onDisConnect();\n }}\n onMouseEnter={() => setHoverAccount(true)}\n onMouseLeave={() => setHoverAccount(false)}\n >\n {hoverAccount ? 'Disconnect' : getAccountName(AccountId)}\n </div>\n );\n};\n","import { getConfig } from '../constant';\n\nexport const DefaultTestnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n 'https://assets.onlinelabels.com/images/clip-art/pitr/pitr_Bananas_icon.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'banana.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped USDC',\n symbol: 'nUSDC',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png',\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'nusdc.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped Tether',\n symbol: 'nUSDT',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/825.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'nusdt.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'RFT',\n icon: '',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'rft.tokenfactory.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dai.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'weth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hapi.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAn1BMVEUAAAAAAK8AALsAALkAALoAALoAALkAALsAALsAALsAALoAALgAALsAALgAALoAALcAAL8AALkAALoAALkAALgAALYAALrf3/a/v+6Pj+FQUNBAQMvPz/L///+vr+qAgNwwMMegoOXv7/twcNgQEL+QkOBgYNRQUM8gIMOvr+kQEL6fn+V/f91wcNmQkOGwsOrf3/cfH8LPz/MgIMJgYNPUXweEAAAAFnRSTlMAEHCv32BQ749/73CvsM9gEN+QgJBQjziFHwAAAAFiS0dEHesDcZEAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQflCAkCHB+v3qAcAAAIFElEQVR42u2dfV8bNxCEj4bQBEhomhaf37DxOYfBlLgv3/+z1cYJNGnQ7t3M3Sw/NH+DvfdYGmmlla4odjr46dXh+YvS4avXxaOOflbHI2HwgOCNOhSV3u6f/606Dp3e7J7/tToKpY62AF6Y+32r44OX3QDOz0+KU3UIWr0r3qtD0OqwUEegVgagDkCtDEAdgFoZgDoAtTIAdQBqZQDqANTKANQBqJUBqANQKwNQB6BWBqAOQK0MQB2AWhmAOgC1MgB1AGplAOoA1MoA1AGolQGoA1ArA1AHoFYGoA5ArQxAHYBaCIBBORyN1Q+gBDCZ7jS5mI3m6sfQALicPmhRDqvxUv0wfQP4NP1OWwzPrjEgAOrpD/W8+gQC4Gr6tJ5Nn0AArKaWBvH7BDQPMAF87RPVeKV+0E4ADJwEIvcJCMB1AwBRDRICcNkYwGOfiNIYIABVSwCR+gQEoEYABOkTEIA5DmCvUtcnIAA3LABf+4QgucTWAxZUApI+gQGY8AE8NIaepk4YgLbjoK8trPuAgAH4hD9mWoOLquP+gAEgjIO2FuWswyECA3CFP55Tk+GoGwgYADshZmrbEqIB8CbENA3WbEsAATRJiEma1JEANE+IGc2AiQAE0OlEIIGAN0EAAUAJMaLbIAB6mQh0SgAEQEuIm2sYAgA3IW6mPyIA6CIhdosyLUIBdJUQezSIAEA0Du41CwCg84Q4pQUhP0IBpMfB5fxqdt1hLyE0ARRAOiEe3f/NclzdlZ24JaEJoADSCXH1n7/cYrgu4zUBuEosGd/n//05uU8s9ACSCfFTA9X4itUn4LkADCCdEKf6KMUaSjmA9ERgZP4/2idQG4QBpBPiO+enzLd9YtMKAGqDMID0ROBzk4/a9YnGjQHtAzCAdELc3KWX27bQiMCfYgA3XYS3nTK43bFq9Q08AEZCbLvgU5pXvpYA9gEcQLrXel3wh1pdeowRGwdwAOlxEPx9Vo50u30j4wBIJ8TwXNVed4YaGQGAsTAMmrSDwF9iAMYOcQ1/gdkLIBPAARg7xFgD3enGGhGh/VLCoal0dHC2cn4+MwBAMwECgPQOMZ6xm01gLQZg7BDDLmiuvEIuSABghFfj3zBOfwPUyAgAjHEKd0GzDgMZBggAjHGQ4IKWDSLDAAGAsUNMcEGrD9RaANYOMaOsKT0OIOMg4/C0MUrVhK9IZ8aIzTAAGMtYDBdMjzTIRIABwJisY8nKXsSVxw4AGB7NcMF0woEMNAwAVqUUwwWTX4BUSjAAGIMUumx5r1Y7cH0BsEqmoWTliyaRAVgl0wwXTGdcagBWyTShkuUyNACrZJrggrEBWJVSBBeMDcBauCW4YGwA1tEhQkVjbABmyTTugrEBmCXTeFVvEgAy2ebcJWat3OMumMyH5RMhs2Qad8HgAKzdK9wFk3MtdTZo793gLjiNDcA8OoS6YDrfUq8I2Qkx7ILpL1CvCTrOEKMumJ5rIrWCpCs1LQCoC6bTLaRIhgTAPEMMumD68xGHIQEwzxBjLmjMtZENaBIA8+gQ5oJGuol8NAmAWcmELN1bG0Pq+oCdzLs0IBc0BhkILgmAfYYYcUFjoglVzJMA2GeIkaHKGGMgg2VdrW0WdwM/kzXRFtcJ7mUedAA6qtEA1JWie5nlnO1XbW6NT8am2SwAZkLceraysnpXHQKAfZdGSxdcmbNs7EIVFgB7HGyXs65Mc9lggbMA2JdqtVq2Gds3NYGZNu0NE+Y42MIFl0Pz8eHFJhoA+6dq6oLzW8/JMbAH8ADYl2pdVKPx/G/fpy3HQ+fpQXStiQbAfZfGYlOW69msfkLVbLhucooWXW6lARBdqoX2AB6A/i6X/EZ1GAD9Xi75IPhaORoAzaVa+KYj701TgsslCQ2ACEBxqRah9oYHQHGpFuFiSR4AOyGO2ACIAASXSzJuFuUB6P9yScZlckQAvU8E4EkgGUDfl0tuOFfrEgH0PBEg3bFNBNDvLdP/kKImAujzcskF6/mZAHpMiDe8O+aJAPpLiEviu0eIAPoaBxeMQ1hdAOgpIb7jvmqD+eLlHsbBxR37zTtMAJ0nxGXFf9EKE0CnCfGirJxL6joAnSXEm3V3L6NjAvAkxIuNW5OyXK9n9VUnP3wnADwJMeMygbAAPBMBxjHasAA8CTHjMoG4ADwTAcLFUnEBeBLiWv3EXQLwJMTRXJAKwJMQMy6WCgvAkxBHc0EqAFdCHMwFqQBcCXGtfuQOAbjGwWAuyAXgSYiDuSAXgCchDuaCXACuhDiWC3IBuHaIa/UzdwjAtUMcywW5AFwTAewEXWwArh3iWC5IBuBaGQ/lgmQArh1i7I0IsQG4dohDuSAZgGuHOJQLkgG4dogp7woNCsC3Q9zVJkcAAL4d4kguSAbgGwepG/zBALh2iCO5IBuAa4c4kguyAfh2iAO5IBuAr2Sa8tbwmAB8JdOBXJANwDcRYBT6BwXgK5kO5IJ0AL5SsTguSAfgK5mO44J0AL6S6TguSAfgK5mO44J0AL6S6TguSAfgLJkO44J0AM9NGYA6ALUyAHUAamUA6gDUygDUAaiVAagDUCsDUAegVgagDkCtDEAdgFoZgDoAtTIAdQBqZQDqANTKANQBqJUBqANQKwNQB6BWBqAOQK0MQB2AWhmAOgC1MgB1AGoVh+oItHpfnKpD0OpdcaIOQauz4pdjdQxKfSiK4kgdhFJnWwDFr+oodPpY3OujOg6Vfiu+6OyDOhSFjn8vHnV2+l4dT786PD05uH/yfwGfzk1OHMRnUAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wOC0wOFQxOToyODozMSswNzowMIUIpr0AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDgtMDhUMTk6Mjg6MzErMDc6MDD0VR4BAAAAAElFTkSuQmCC',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'paras.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'ref.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMEYyQUMzIi8+CjxwYXRoIGQ9Ik0xMDMuNTc0IDg0LjU3M0MxMDIuMDUyIDg2LjU4MDggMTAwLjg1MyA4OS4xNDAyIDk5LjY5NzIgOTEuNjU1OUM5OC41NDA5IDk0LjE3MTYgOTcuMzkyIDk2LjY1OTYgOTYuMjE0OSA5OC40MjU1Qzk1LjAzNzggMTAwLjE5MSA5My45Mjg0IDEwMS4wNTggOTIuNzMyNiAxMDEuMDU4QzkxLjI3MDMgMTAxLjA1OCA5MC40NDI1IDEwMC42NDMgODkuNzEwMiA5OS44NjcyQzg4Ljk3NzYgOTkuMDkxNiA4OC40MDY1IDk3LjkwNSA4Ny44NzAzIDk2LjY3MDRDODcuMzMzOSA5NS40MzU4IDg2Ljg0NzcgOTQuMTM1MSA4Ni4wMzA1IDkzLjAzNDlDODUuMjEzMyA5MS45MzQ3IDgzLjkxMDQgOTEuMDI5MSA4Mi4yMTk4IDkxLjAyOTFDODEuMjYzMyA5MS4wMjkxIDgwLjQyMzcgOTEuNDQ1MSA3OS43ODg2IDkyLjAzMkM3OS4xNTM0IDkyLjYxODkgNzguNjkwMSA5My4zOTAxIDc4LjI3NzQgOTQuMjI1OUM3Ny40NTIxIDk1Ljg5NjggNzYuODM1NCA5Ny45NjgyIDc2LjA0MzUgOTkuOTkyN0M3NS4yNTE2IDEwMi4wMTcgNzQuMjc3MSAxMDMuOTk1IDcyLjk1NTUgMTA1LjM4M0M3MS42MzM2IDEwNi43NzIgNjkuOTk5MiAxMDcuNjQgNjcuNTAxOCAxMDcuNjRIMzguMDY2MkMzNy42ODcxIDEwNy42MzUgMzcuMzM0NSAxMDcuODI1IDM3LjE0MzMgMTA4LjEzN0MzNi45NTIyIDEwOC40NDkgMzYuOTUyMiAxMDguODM2IDM3LjE0MzMgMTA5LjE0OEMzNy4zMzQ1IDEwOS40NjEgMzcuNjg3MSAxMDkuNjUxIDM4LjA2NjIgMTA5LjY0Nkg2Ny41MDE4QzcwLjU0NzkgMTA5LjY0NiA3Mi44OTg1IDEwOC40MTYgNzQuNTMyMyAxMDYuN0M3Ni4xNjYyIDEwNC45ODQgNzcuMTg3NSAxMDIuNzk3IDc4LjAxNDYgMTAwLjY4MkM3OC44NDE3IDk4LjU2NzUgNzkuNDc1IDk2LjQ3NDEgODAuMTgyOCA5NS4wNDA3QzgwLjUzNyA5NC4zMjQgODAuODg5MyA5My43OTE5IDgxLjIzNDEgOTMuNDczOEM4MS41Nzg5IDkzLjE1NTIgODEuODI2NiA5My4wMzQ5IDgyLjIxOTggOTMuMDM0OUM4My4yMjc5IDkzLjAzNDkgODMuNzQyNyA5My40NDUzIDg0LjMyMjIgOTQuMjI1OUM4NC45MDE4IDk1LjAwNiA4NS40MTIgOTYuMjEyNyA4NS45NjQ5IDk3LjQ4NTRDODYuNTE3NyA5OC43NTc3IDg3LjA4OTYgMTAwLjA3OCA4OC4xMzMxIDEwMS4xODRDODkuMTc2NiAxMDIuMjg5IDkwLjczNzUgMTAzLjA2NCA5Mi43MzI2IDEwMy4wNjRDOTQuOTkzOCAxMDMuMDY0IDk2LjY1OTEgMTAxLjQ4NiA5Ny45ODg4IDk5LjQ5MTJDOTkuMzE4NSA5Ny40OTYyIDEwMC40NTQgOTQuOTY5NSAxMDEuNjAzIDkyLjQ3MDlDMTAyLjc1MSA4OS45NzE4IDEwMy45NTMgODcuNTE2OSAxMDUuMjgyIDg1Ljc2MzhDMTA2LjYxMSA4NC4wMTA3IDEwNy45MjUgODMuMDA1OCAxMDkuNTUzIDgzLjAwNThDMTEwLjI5NSA4My4wMDU4IDExMC45NDYgODMuMjcyOCAxMTEuNjU2IDgzLjg4MzRDMTEyLjM2NSA4NC40OTM5IDExMy4wNjggODUuNDUxNyAxMTMuNzU4IDg2LjY0MTRDMTE1LjEzOCA4OS4wMjA3IDExNi40NDcgOTIuMzI4OCAxMTcuODMyIDk1LjY2NzVDMTE5LjIxNiA5OS4wMDYyIDEyMC43MTcgMTAyLjM3NiAxMjIuNjk0IDEwNS4wMDdDMTI0LjY3MSAxMDcuNjM4IDEyNy4yMzQgMTA5LjU4MyAxMzAuNTc4IDEwOS41ODNIMTYwLjkzNEMxNjEuMzEzIDEwOS41ODggMTYxLjY2NiAxMDkuMzk4IDE2MS44NTcgMTA5LjA4NkMxNjIuMDQ4IDEwOC43NzMgMTYyLjA0OCAxMDguMzg3IDE2MS44NTcgMTA4LjA3NEMxNjEuNjY2IDEwNy43NjIgMTYxLjMxMyAxMDcuNTcyIDE2MC45MzQgMTA3LjU3N0gxMzAuNTc4QzEyOC4wNjcgMTA3LjU3NyAxMjYuMTcgMTA2LjIzMiAxMjQuNDAyIDEwMy44NzlDMTIyLjYzNCAxMDEuNTI2IDEyMS4xMDggOTguMjgzNyAxMTkuNzM3IDk0Ljk3ODFDMTE4LjM2NiA5MS42NzIxIDExNy4xMDggODguMzA1MiAxMTUuNTk4IDg1LjcwMTJDMTE0Ljg0MyA4NC4zOTkxIDExNC4wOCA4My4yODQ2IDExMy4xMDEgODIuNDQxOEMxMTIuMTIyIDgxLjU5ODcgMTEwLjg4MyA4MSAxMDkuNTUzIDgxQzEwNy4wMzYgODEgMTA1LjA5NiA4Mi41NjUzIDEwMy41NzQgODQuNTczWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ii8+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'pulse.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ether',\n symbol: 'ETH',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'eth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'aurora.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAAB+1BMVEUAAABWWLVmXbOiaJ9pXrJbWrVvX7NhXLRxYbNXWbWcaKffeILLb41lXbSCZbCkZ6N+ZbJcWrVgXLXTcYjlf33jfH7heYDieoCJZq5+ZLHAaJRoXrTgeIHFaZCZZ6iYZ6jcdYPmgX2oZ6GxZ5u7aJbRbImyaJzie3/Qa4n///94Y7ODZrGZaKnrjHpqX7XohX1kXbW1aJvFaZHacIWeaKfBaZTieoDgdoJ9ZbNzYrSTaKxvYLS9aJbQbIquaJ+jaKTTbYleW7XmgX3piHuyaJ25aJnJapDNa42paKCmaKLdc4PwnXXtk3iJZ6/skXlYWbWOZ63ypnPkfn7Lao6JZq/xonTXb4fzrHHulXfvmXf1snBhXLXvmneQZ632uW/75+b69fjXdY2HcLj67/GahML+9O385tXpi4T2296AabXvnn3chJn1t4TjmqrafJL3wo68rNaSe72bcLDxqIffjqH0tZfp3+73wp/ohoHy7PWtir73ybfuqKb1s3mnk8n62cGmfrbmpbTsn5zqlpTg1enxxcnyqHz00NSync3yuLOicKzpj4v4v3m4k8H5y5mgd7TtmofUxuDrtsLeeInljpjwqZPLudn0r3zEo8rCh7D61KzjgIbTjauRcbTjho7WrcnSeZitd63KfaLXnLi1gbG5cKHEcpuvbqPjxNjN3AFJAAAAKXRSTlMA71IjE7A5ZcbT8kw6oXlU8ol5YezgsHOi4ansne3iyorQrIt01eTFwdYInfkAABWHSURBVHja7JY9b9pQFIax8QceXMms+QUJVZUxgYkfgNKBLYqEIpZuNoMlM1gMHqxKCLGgLPmvPb4GH/vcD9vBBIa+pKaly/Oc99xLev9DY1i67bmOo1XjOK5n65bRu+UYumc62osqmmN6+k1aWLbpEFiVhd3v3VBg8if4qeAljnMrTRi2qZ3Ys8AbvpekBCaaaV/dQc/op/Vh/ODBO+i968XytGnLCCQ0z+pdJbY5/UpETVyhBmPo8Giv01eaplU4dueIanwNqY95fIQfPvAf6KKqQhv2vi0n/By8acQSV1Cw7xg7R97eAnv4xkXSHQn8L/aHvCQSEEkPzoVvpL4rpYcHEJfCPsieTarAFtxLfrcNRei/EFwVoUTZ4FSDdrE9sgaEvX1oHdkVxW+SeZnf9IaE/YyoemC5wH3UH5SWRpwJn+xDHh+rQAdiYHZ9EnSkr+cWmfAeRIE4aHqn/J54cSZtI5PAGtDB6w7fYOtTg/4sC29Rr9DtGll3BL6Wu16E3EyiFjr7VrMr+HXsD8e3B4WE2qG8R3oXt6eaHsnFQRW1BDpgDZ3cpy5PT7gRVRGqISyC/3Y7/yibCno1cL0HpyBapBe3C36eXjTzJ3jBE36Kh9pB3ALdI/MM/gHiE3gCfoIv5w9JVUhaA38UzLP46ezJ4BG8wv4OCYJgWQT+AR+BhdwBW+jKYMDhC+ZOM8rggTyO09QvJU3jGDxA4qlW4REVzjEwK7vD7zvPPgJ6Bp/6hySMFot7zCIKk72fxsuAFCFxqCp85SS7Ewk/HfyoCNDn8NG9JItw78fHHjBqBWbgtf/+QnoKT+if2AuS4fuHEOcuTrSHHmoVqIHdkl9Hfjy2yI6jZ88jfuonKnrsIfGVCvQoMAO9Fb+F9MK1H5Gw6SN+fUI/DsBApUBL6LfgN+6K1cfhIzyP/xkgflOFdHlUQAtiACkZaG0u0Amhf6jsfJEZ+5m/fy7TQ3TfMot9vAQDdQt4oba5TD3cngo+23mkZ4/5fJaNP2yDjnsEJTxBKiWgAS1h2PQA4/hlw5/Ba84yY/w4/rYlsDWCkBbEBlazA4DjR34cfr41R3rgz9YHt79tEjAYjSQt0JPQ8BgMKD6kPPv5iT7Lb+DfI3/7hIUBpPgdV1ZCk2PwA/kF1w7CH/l3yH+uAbbwTPYIDexa/j69ecqrg/TADgH+WLk/UZ56g0Ihj7SEV6N2geTjR3rAZxnv1lL+KDmk23WebXrYh1LRZJkJ0BYkF+qgboHI9OnwEf7t7W28Wn9E4qnut+vNZrdb5dntNpv11k8kBocgw6ctSNZIvUQGjr+yPWT2jH48Xm3SUDjSj/UG2H/mGbOAxWYtOS9RMBuxiBS4LVIKuIhPxl+hz5myBRJNH/D/MnqGj39ZrUAhETXwyQRkLZAOXAW/JcLH3SnTswL+MV4+r01FQRSGtNoqWH+sLIKuRTfWFCW06kKTtlAQKu7EhGwCISIlFFJcJGAJBEJpK9JgtEmapv0znUxect6dmXtfj7pT+L6ZM/dZo0D5I8InXgQirPC9pm/g7/an2Qpg4NYIBoHP2TL4MX2bnoAO20fG+OutVjqdfp4m3rShcLhPtZP8H3lKs5mZO4DBLS//QsT/zB0/ugN6Cl1wXvG364QvQiIxld1626nR0Zh/GwZQ8BqkfAL3MH5j+hkHnxeg+fvgVxYwwC3vfa/vZrbJAAp8Cs6DKh+jR94n1GmPOXxMsqUvoHbab711IixgMDM+3M18pEwVcAmhU17wLECNX3Ufj0q6pZ+g30Pw+zzYfdqin/vEn8l8gQF6FDKwV7Ck5q/wp6FCpPvtPfmaDPubm2836Q/9CllMDY4m/HEFGKBGxC8NFswF6PHb5WGI1lCecK1N/FYMiVZ9//Tnaf2Qv3NKIXTK/hUs4UcWjF9Pf4YwlA26Gl5uuLE1Jv+81Tps8fcCCvYSbIOUtQC0B+VX0+cQRr99Jb5g7f6GN0IC92Ao4BJe+w30tyCFb1fED3wxfWZQJ7DXudx4I2OsAwpxBxiYNdIG6nO86MzfGj/oKZv905pqEMB9JoaDayCW4G/RDcE/J8YfxCeGDXXDp30mfR+LkFBlwifOXEJ4B3OuwMPobwt+0Mfxif9yeOYK5DsX732Ri1AKUYQBTtkyeCBOWNcH/Ap/YyzgLqAYCbxwYliEFFCj5B08ck8Y80/CZ4A3lx0hUOtcOOimhnawFZIN5BkvYv4mP4bP+G+0wB4EzJgK2IJtQPG36E5cgPn1/DU+01sCpc7FByteCygYS0CN9P/tIgGnQwvM7xu/wieGC7UBCAQ9DAVswV8jyyAFgYeB+qD7wDcEit2LNSPSAQqcmIKnRuoOUCJ0aP4e+HV9NP4Yo3OWFwKjNX+EhNwClqAN/GeADqU8/GiPwIcAcj5YW11bFZEScJAKqNH1DW7OGqT5MX6Fz/kwOBcCZ4MRwH0atgJ6JGrkN2CB2bdsGfyoP+FLfuB/IIGaK9DsxgRWvBZYAxRgoGoUNFiM+Oc0f2j8TLA2Oi+JKz4frK5YgYNUwC3YNdItYgEYzEcnkMCv8Qlj1L2SP9B0Ryu+GHuAgnsJMEhuUSo6AfCj/jY+8zPCaHD2VK0gl82uZGfRFmEFGIR3AIE70QmAP17/2dvJi3bxCWRwXhQGpW6PDIyYDm6RZI2e2wb8ScbXYHIE8+A362PhU0bd0lNZIjLYiSWb3YEDFOAAAz4zGOgd0EuvS/SIBe5uW/yiPgKfBY6lQPGYDKaBipSAARR0jZ5rA10i/hIsSX5z/C4+YWTRIcMAcTRkk2wDtQP8iCNWsMQ3nMCv8CcQ2R7eIRgcVMq93Po6/5YW8T3AgCIPQbfId8h8xU++fMH9evkFPpHkeAUypUa1V1iPJReZSAX/EtAi2wACfMXzhE8R/Fx/4Ct+yk6ve0DEukaV6rdC4d27uAQcdqBgL8HewUfbYJkEbqoCYf5q/KCn5HqVrwBHvpJCmRTGWYeHswe1hMAOYKBLNEePkJg/+J3rlfg5Sq/ayD+1FRrVMq9hEhhQ4vccNlCPqf4apOgREvy6P3L8jE9ZJ4MmqMU1Nyoxh3X6DQtsYbIE1Ei3KOEMFlgg3B97/ExTKKNEeg1wUHtghRVrCdgBDFSJ8JYu0SsKfmf+sj4an8ZaKDdgoJIvHUcOn5UCliAN8JrikDPj4IdkGNynVzRj8r/X9ZH4FNMg2QEKWAIM0KLkEtGH4LHqj54/2s/dZ3zO58/fqjCwU4QDFPQSQjuAgVzBIgTwAVDzx/gFPqUAg2QHrWAY8Ar0DrACGLDA7RA/C8jxA//lON/KlRJYvQ5NPK1QsAxYwfOYqhItuwLh+aP8RM/4nJOTcqWZTxLA0woF1MjcgV0iLXB9foyf6KfZ2to6+Reqkf7CsQJqhFPWBnaJYMACToF8/DkK8OP8bPCrclAEZ7BKjQoUUCMYiKcovIJ7UwHmxwME/tD4tyb4ryh/SKEJhfDLygoJBjiD0OeMBawC4X7Bj/Fj9hF/pPDjugrNRjUyoMBgFQbJJYJAiJ8i5g980HP+N2+ur03GYBQPVhRscULtqmPqdF4/iHjbvqhI590hXnA6EauI3ajVfpijg20UK6sURYpaChP8W03S5j3N8yR52+nUs6kIiueXc54kfVsnfvz4+WFlLTwLuHMjhOt9E/AIOAAGwNkftN+yPzE5oSVTqDWwI4U0jxCQARnkYAQAsAOAf7L+rD5Ye0im8OnDytd8XyG8e20TnAkSYI4NgJIG0P6xA3H/WH7X6vfovlRu7tOHGqoUmoQ3r/0ZnOYENAIDwAvkW3/u3zJvlFvSDB9jGeZ9BBgDX4kMgDoHiH+ygUr/WH+6/Lb3nPw2WkIO8QSYZAxyaI5xp9MA+gi4RAsUXH+H/RzVqX4Y8oSAlwjHGT/NAIAA6AZE1v9WyD68KymE+C59jPYiCUAI/FMAAHWdxosADAD8Y/3jV/8Uk2Hwn3Br797OgABbkTXHOI/JWaAADvgC4P4B0GOfeucMc5JhpeGJ4eV7WSIQDBKBItgjxCEJ4NiBsIHCP1l/h/0p+W1kMcgYGvOeMXj7AhlcCxBgI8Lrgp1CjN9kRwB2UO4f9rl7l8AgEfLuEgHAImBbKdtJNcBhOQHOCXb517KWn5g/eXJKfnV+JgxLskiua8bLN2/PzsSWiEyBAdguxBCZAHYCzLgCkO5hPzLPBQRdpFrjpXMnmlEEbC+VjY6LYIsQKRYAKRDml/WH2/dCmB6t5J0RGILYCAhAQghxExNA/fMCwT78U/N31BdH8BOsvf424ypRfIf2CqkDLAB9BMC/tz/c/h1bFoKfIP8uigA7EYnAvZPuUQCHAEACwACw9Yd9Yn5afk+r764IgiLgcyA7JAkQAZ8CHgEAxlWDSAC0QFh/l3+4t2UwCEGt4egQiYBMgQ9gpwIY8gbA/Cu5/Peafxz9AANC0NvpCj3S5t99O+ua49gObRNKl3AIswBQIL7+3P5jWwaChCBL9JzvQ2fJYYAI0CEKsEtoHcUI8wDgn68/7Bvzs73qUiAFTeCMQAOEI8BRAIADQusQaVAoAPjH8k8rGfdPIxkInQMIJAKfgq+vz1oRAOBC6CjYI7SGrvBDmAcQWH/tXpu/3SMDYVIAwpLsEJ9ivhGRMeYA24RWwjXCOgC+A9n+o/Yw96DQCKiRBvhEz4KP37+RCAIdOhftQ1tFdwgAEAoA/rH8UXlgnyF0Q8Aon2JDMN8FUATYSdlpbO9Ddw+Irsb5CGMC6A5E11/Zx+o/7FHEYHoUlWiutsYAbiGC64gg2KGdBmCIjnA4AO6fmGcMJIQAwEx8hwCAT08fNQB8D8UE8AJJ+5Z/g3Dv3j0guAjmassOACVrJ2UAN6wE9otII2gQrnGhALj/yDoEBD0JepQDAIiAdci9ke4BwJCvQWH/6A/cEwEBBCEA3iH/YTwkILoHXQ4DwD+WH/4fyS9KoEc5KtFca80BcCvUIQ6wQ/RohOxBrEE8ALL+xjxECGQEUQbNlY8MYDLQIVzoAKAaBKUAgAbFB0D9K9vRFxiQQfdEa9JzYO3n5KSzQ+xCh6Nsm+jVvjgAHoDe/3uHt+MeUr+JQsAYKAD6muYrAHxnGQXYLyyNyz/ZX4MwwdJ/sVhfWKjX693qQyDQsgimm63ODEMrGuAWAOKHYKcNkAAAOwQmGIApkLS/WKlUSm2UX+nJEwsBGTztlMiMAFT70QFAh2IBtgpbI2iQC4AFoP1L+8uvTpxYLrVhPhIjMBEUW7RB+e8SwESAITgTmOJDgigVBOAN6vhfLuh/X2YA948IQkTQnePZ5mKVPtoCADrkOspwmdgmqPYBwDoFaIOM/2JxQS2/VqFSWlX+mXozMCUqtrp/DWr8nJhEh9wAp3EhlQAHBFNaAWCG2Qho/wAoLrQqWMhCubQK288sAoUAAJlbo0Df7qv9UACT/CgjF1IADAmufdiEEIAH4HGnPlBVEhj3z5QMBS1RcQEFwjFGAMwUn/FN8X7h0GGdAEbAv4lq/3YPXhkCbV59GwQ7AvUXn5/gDZIAbIoD2xACIBEAwD3DJoBm5B8EXxSBtA2ZDBABBdfKf/ihAHxnMQdAADQC1yaEBmEPKi7ABubgS/kzzOsQKEBd+2cBfDIA2IaCAAiARtA3QAv9hwrr5c+fAwT1ut63WAC1uQkpbEOOBBQBABAAUdp3l5b+CQAbRF2j9S8WggVQV6d2VfafB5DTAIiA76N2AgiA6ggAAufw9PTswqL7TceCRvjMCdrtkjy1XX9p/sNcjiYQPskOCK9S9CpHAHAK4DAiIWgEzYDNdHW1VCpXlgtYfujlyqel+/djAK5aAAnh1wg/x8zzFAB0tlGUiCFIBgmhtfq5JM2XK+tV2Le09mEpZwAm+0pgXIT0gAG4LxKSAHPMGaoSQqpcVj+vS/fIixcoJ/33D7BDBJUOVwg3ORB4IF4VCoVqtVoo5GHesQN9WsqxBGZwl+AAQyKs430BgGCDgv9TuYEqdEjEKAEA7y6kAfSt5tXv+W8056R/CdD/LiRilcY26pkB83Ie5+pv+JcA8TOAcwAFCpSIVMgLIK8Gi5X8xv23lH/ToP4qhAKFZN1GnduoBtAEpcpGB2Fe+/ckcNENcFT0pSS5SgAAr+hnZxWAIlhc30gIL9ek/6kpKwF6neYVSon+NOZ8PUBe0isARdAuVQaf5cJKs3nyZBiA30YPi3513AcwZQHc1k+02u1ypTAQQn5ZLv9JDYBNKB4AAxCvi+GjGEOgCB61S2WWQth+807Hvw9A+ycAR8UASvgOgik6BPqZnEZYL/RVnkarWZyW/p0A5J0+6wF7QgyipHsbIhGA4JG6cH6p5mMWv7rYWijOTt+xASZcAPQdgpQYTFnvq3o8GTVTIAkUgmZYxzjQG96ycl+cNe/2ydUY4BgYEoNqDADuJ3MkAsOgbqDVqrzCveqQyF/lra6yuCifAheLTzv+EQAAgs/XD4vBNUqnmHcIBApB68mqplD6UlEqlxdLpVK7Xn/4EA/YQyMwg8dC0QyPi41oGADBCECAB7yrXbWl6tI8nk6jQXQE+Fs0ZgRGxMY0LDvkB5AEiIC8P0Dfaer69wTgvosCAP4HJ9AA2EjpA3abgCFIKPhHgYIjTGf4PPxvhMDfIVMitAgI1D7e5ZtmAbhfjgEA/jekUXSIR8AIdJHwxf2jQP4GkSej4+L3NOaLAGOA94mVaYi/y+oNgAOYETgsfldZAEg536kHgqaAsPzcPwII3eTS4veVlC3Ch204Qe9HVbh77j82AOxB+1LiTyiVsT9vFvdpm45xuLc+68ECYCMMgCMJ8Yc07Pu8EPYiMDjtx/vn94gR8ec0Zi7VIDAI5ANn1L2uD/FvCgQA+Mcmelj8SSV341bNMkCPiLD8xH98AKj/H6sRxoATzCIF4p7Yp/4xAUoIYET8eWX5cYZR7jBIv2TtlX34JwWa8AWwLy02Q4lhRGDPgc2gfnTMm9V3+ycTgENsJCE2SendhEAJBAbCeHd/dtr49wWA5d8MjboI2MfX4R324Z8MAAlgTGyuUsfMGND/P2BkPu8N97AP/2QHMgEcT4lNVzqjMgABjQHeyf9+QH/g3y7QkaT4K8pmSAhgoDoZifrnA3DEX/7NRAABpyDujf9c7/obANj/O0ofBAEguNAe2HcM8PGk+OtKDiuCeIQpx/KTARhNiX+iVDYDAiAQ83z5taL+HMkmxN8XYtjdYYCMc5iHfeY/8/cXnzOMIgemU8S+1Z/MaFL8H0pmDxqnynTXu3QfsH8s+7+47yiRHD2o2wTBPdqjlTk2lkyI/1Gp7OhwxmEeq58ZHs3++9bHZZHOjg0fO3gws9soc/DgseGxbHoT1v0X6Almagg4b48AAAAASUVORK5CYII=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'skyward.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 67.79 67.79' version='1.1'%3E%3Cpath style='fill:%23fff' d='M33.934.311a33.9 33.9 0 1 0 33.89 33.9 33.9 33.9 0 0 0-33.89-33.9z' id='path505'%3E%3C/path%3E%3Cpath style='fill:%23ffbd00;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m11.803 27.8 12.387.359 2.361 5.959 7.616 3.31 8.523-3.322 2.348-5.87 12.269.03L54.822 54.2 31.837 58.86 12.89 52.648z' id='path1051'%3E%3C/path%3E%3Cpath style='fill:%23a0a0ff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m34.657 12.575-10.43 9.633 1.096 10.01 8.844 5.21 9.785-5.287 1.086-11.33z' id='path1815'%3E%3C/path%3E%3Cpath id='path928' style='fill:%23666;fill-opacity:1' d='M33.928 4.282a29.93 29.93 0 0 1 4.682.367 29.93 29.93 0 0 1 25.244 29.572 29.93 29.93 0 0 1-29.92 29.92 29.93 29.93 0 0 1-.006-59.86zm.729 8.293c-2.03 5.668-8.815 9.76-8.815 14.521 0 4.76 3.912 8.62 8.737 8.62 4.824 0 8.736-3.86 8.736-8.62s-6.707-8.697-8.658-14.521zM37.84 22.67a2.524 2.446 0 0 1 .246.012 2.524 2.446 0 0 1 .246.035 2.524 2.446 0 0 1 .24.059 2.524 2.446 0 0 1 .233.08 2.524 2.446 0 0 1 .225.104 2.524 2.446 0 0 1 .213.123 2.524 2.446 0 0 1 .197.142 2.524 2.446 0 0 1 .183.162 2.524 2.446 0 0 1 .168.178 2.524 2.446 0 0 1 .147.191 2.524 2.446 0 0 1 .127.207 2.524 2.446 0 0 1 .105.217 2.524 2.446 0 0 1 .084.227 2.524 2.446 0 0 1 .06.232 2.524 2.446 0 0 1 .038.237 2.524 2.446 0 0 1 .012.24 2.524 2.446 0 0 1-.086.633 2.524 2.446 0 0 1-.252.59 2.524 2.446 0 0 1-.403.507 2.524 2.446 0 0 1-.521.389 2.524 2.446 0 0 1-.61.244 2.524 2.446 0 0 1-.652.084 2.524 2.446 0 0 1-.654-.084 2.524 2.446 0 0 1-.607-.244 2.524 2.446 0 0 1-.524-.389 2.524 2.446 0 0 1-.4-.508 2.524 2.446 0 0 1-.252-.59 2.524 2.446 0 0 1-.086-.632 2.524 2.446 0 0 1 .086-.633 2.524 2.446 0 0 1 .252-.59 2.524 2.446 0 0 1 .4-.506A2.524 2.446 0 0 1 36.58 23a2.524 2.446 0 0 1 .607-.247 2.524 2.446 0 0 1 .654-.082zM24.19 28.16a16.579 2.485 0 0 0-6.502 1.965 16.579 2.485 0 0 0 7.635 2.093 10.483 10.6 0 0 1-1.133-4.058zm20.848.078a10.483 10.6 0 0 1-1.086 3.904 16.579 2.485 0 0 0 6.894-2.017 16.579 2.485 0 0 0-5.808-1.887zm6.925 3.21c-.455 1.177-4.097 2.154-9.273 2.659a10.483 10.6 0 0 1-8.072 3.861 10.483 10.6 0 0 1-8.067-3.85c-5.276-.506-8.978-1.498-9.398-2.64h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm.032 7.323c-.67 1.73-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm0 7.21c-.67 1.69-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24z'%3E%3C/path%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'stnear.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'oct.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game GEM!!',\n symbol: 'gGEM',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 4,\n id: 'gem.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Gold!!',\n symbol: 'gGOLD',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'gold.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Elixir!!',\n symbol: 'gELXR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'elixir.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usdn.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Learn NEAR Club',\n symbol: 'LNC',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIACAAIAMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABgcDBAj/xAAjEAACAgICAgMAAwAAAAAAAAABAgMEBQYAEQcSEyExFCJB/8QAGAEAAgMAAAAAAAAAAAAAAAAAAQMABwj/xAAlEQACAQMDBAIDAAAAAAAAAAABEQMAAgQxQWESIZHwUXGBwfH/2gAMAwEAAhEDEQA/AOqOHNHN5vF67jnyuZtCtVSSKJpCjN00kixoOlBP27qPz/fv64qZDzBq+L8h2/Gt2rk0yVXFJlROK3tVlVhMwhEoPSzeteZgr+vsqMVJ9W6zZHBLKCbLSV38J+GKva+aONC8p/v+U88ORWv5t3fyTFTbwTpWPvxpjMfl8lc2O49SvCLldbENGMwLJ72vidWf7CxB4ifcSDqmaPseS2rXIMtmdYva9kRJLWuY632TDPE5jf436HyxFlJjlAAdCrADvrjZ8OXHt6pEOGGPhjUP3alxZUc9ys78oo/R0rD5E1O3u+oXdboZaPGWrD15oLctU2EikhnjlUtGHQuCYwCPZf394jZDwNc2pdht75uMF3LZ2ji4I72LxQpGhZoT25YLMKySzdN1aVSpJBCOD2shVa7w5IcyaC3ojKDegex1T2HbTtRkxYpruq8MpannbTc1EcB4D3jx3UxaeLPK1fFSpgcfhsxBkcH/AC6V+epWirR5CKFZ42gn+OPpv7uHCQq31GDymeP9XymnarTwed27JbPk0LzXcrfIElmeRy8jKgJEUfsxCRKSqIFUdgd8YuHDPmzZIUpB5QB4ZAZ9+BQhxIoC4wR+SvDXvNf/2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'lnc.factory.tokenhub.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'wbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='96' height='96' rx='48' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3E%3C/svg%3E\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-v2.pool.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%0A%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3848L21.3848 17.1421L19.3669 15.1243C18.5576 17.0303 17.0303 18.5576 15.1243 19.3669L17.1421 21.3848ZM9.43294 19.5793C7.45322 18.909 5.82115 17.4848 4.87848 15.6484L3.24264 17.2843L7.48528 21.5269L9.43294 19.5793ZM4.63306 8.8757C5.44239 6.96975 6.96975 5.44239 8.8757 4.63306L7.24264 3L3 7.24264L4.63306 8.8757ZM15.6484 4.87848L17.3848 3.14214L21.6274 7.38478L19.5793 9.43294C18.909 7.45322 17.4848 5.82115 15.6484 4.87848Z' fill='black'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.staderlabs.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'refLove Finance Token',\n symbol: 'refLove',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyODggMzI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyODggMzI0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzAwQzA4Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggZD0iTTE3My40LDE5MS40VjI2OEgyNTBMMTczLjQsMTkxLjR6IE0xMDcuMiwxMjUuMmwzMCwzMGwzMC4zLTMwLjNWNjkuMmgtNjAuNFYxMjUuMnogTTEwNy4yLDE1Mi4zVjI2OGg2MC40VjE1MmwtMzAuMywzMC4zCgkJTDEwNy4yLDE1Mi4zeiBNMTc3LjEsNjkuMmgtMy43VjExOUwyMTIsODAuNUMyMDEuOCw3My4yLDE4OS42LDY5LjIsMTc3LjEsNjkuMnogTTM4LDE3NS41VjI2OGg2My4zVjE0Ni40bC0xNy4xLTE3LjFMMzgsMTc1LjV6CgkJIE0zOCwxNDguNWw0Ni4yLTQ2LjJsMTcuMSwxNy4xVjY5LjJIMzhWMTQ4LjV6IE0yMzYuOCwxMjguOUwyMzYuOCwxMjguOWMwLTEyLjUtMy45LTI0LjctMTEuMi0zNC44bC01Mi4xLDUydjQyLjRoMy43CgkJQzIxMC4xLDE4OC41LDIzNi44LDE2MS44LDIzNi44LDEyOC45eiIvPgoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMTAuMiw1NiAyNTAsOTUuOCAyNTAsNTYgCSIvPgo8L2c+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v010.refve.testnet',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDT',\n symbol: 'USDT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdt.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDC',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdc.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdtt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.v1.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tiptoken',\n symbol: 'TT',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'tiptoken.testnet',\n },\n];\n\nexport const DefaultMainnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1INCH Token',\n symbol: '1INCH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Graph Token',\n symbol: 'GRT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.skyward.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cucumber',\n symbol: 'CUCUMBER',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🥒%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'farm.berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HuobiToken',\n symbol: 'HT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Gitcoin',\n symbol: 'GTC',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Uniswap',\n symbol: 'UNI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FF007A' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z' fill-rule='nonzero'/%3E%3Cpath d='M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z' fill-rule='nonzero'/%3E%3Cpath d='M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z' fill-rule='nonzero'/%3E%3Cpath d='M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ChainLink Token',\n symbol: 'LINK',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%232A5ADA' cx='16' cy='16' r='16'/%3E%3Cpath d='M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.v2.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.paras.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1MILNFT',\n symbol: '1MIL',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 146 146' xml:space='preserve'%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 0L0 31L31 31L31 0L0 0z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 0L31 31L32 31L31 0z'/%3E %3Cpath style='fill:%23000000; stroke:none;' d='M32 0L32 32L0 32L0 38L32 38L32 70L0 70L0 76L32 76L32 109L0 109L0 114L32 114L32 146L38 146L38 114L70 114L70 146L76 146L76 114C82.7843 114 102.446 110.653 107.397 115.603C112.241 120.448 109 139.378 109 146L114 146L114 114L146 114L146 109C139.378 109 120.448 112.241 115.603 107.397C110.653 102.446 114 82.7843 114 76L146 76L146 70L114 70L114 38L146 38L146 32C139.378 32 120.448 35.2414 115.603 30.3966C110.759 25.5518 114 6.6225 114 0L109 0L109 32L76 32L76 0L71 0L71 32L38 32L38 0L32 0z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M38 0L38 32L70 32L70 31L39 31L38 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 0L39 31L70 31L70 0L39 0z'/%3E %3Cpath style='fill:%230d2000; stroke:none;' d='M70 0L70 32L71 32L70 0z'/%3E %3Cpath style='fill:%233f0180; stroke:none;' d='M76 0L76 32L108 32L108 31L77 31L76 0z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M77 0L77 31L108 31L108 0L77 0z'/%3E %3Cpath style='fill:%232f0060; stroke:none;' d='M108 0L108 32L109 32L108 0z'/%3E %3Cpath style='fill:%231d4101; stroke:none;' d='M114 0L114 31L115 31L114 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M115 0L115 31L146 31L146 0L115 0z'/%3E %3Cpath style='fill:%239f017c; stroke:none;' d='M0 31L0 32L32 32L0 31z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M115 31L115 32L146 32L115 31z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M0 38L0 69L31 69L31 38L0 38z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M31 38L31 69L0 69L0 70L32 70L31 38z'/%3E %3Cpath style='fill:%23be0094; stroke:none;' d='M38 38L38 70L39 70L38 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M39 38L39 69L70 69L70 38L39 38z'/%3E %3Cpath style='fill:%23200018; stroke:none;' d='M70 38L70 70L71 70L70 38z'/%3E %3Cpath style='fill:%23007880; stroke:none;' d='M76 38L76 70L77 70L76 38z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M77 38L77 69L108 69L108 38L77 38z'/%3E %3Cpath style='fill:%23015a60; stroke:none;' d='M108 38L108 70L109 70L108 38z'/%3E %3Cpath style='fill:%23400032; stroke:none;' d='M114 38L114 70L115 70L114 38z'/%3E %3Cpath style='fill:%23de00ad; stroke:none;' d='M115 38L115 39L146 39L115 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M115 39L115 70L146 70L146 39L115 39z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M39 69L39 70L70 70L39 69z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M77 69L77 70L108 70L77 69z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M0 76L0 77L32 77L0 76z'/%3E %3Cpath style='fill:%235f00be; stroke:none;' d='M38 76L38 108L39 108L39 77L70 77L38 76z'/%3E %3Cpath style='fill:%230f001f; stroke:none;' d='M70 76L70 108L71 108L70 76z'/%3E %3Cpath style='fill:%23388000; stroke:none;' d='M76 76L76 108L77 108L76 76z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M77 76L77 77L108 77L77 76z'/%3E %3Cpath style='fill:%232a6000; stroke:none;' d='M108 76L108 108L109 108L108 76z'/%3E %3Cpath style='fill:%23003d40; stroke:none;' d='M114 76L114 108L115 108L114 76z'/%3E %3Cpath style='fill:%2300b4bf; stroke:none;' d='M115 76L115 77L146 77L115 76z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M0 77L0 108L32 108L32 77L0 77z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M39 77L39 108L70 108L70 77L39 77z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M77 77L77 108L108 108L108 77L77 77z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M115 77L115 108L146 108L146 77L115 77z'/%3E %3Cpath style='fill:%230f2000; stroke:none;' d='M0 108L0 109L32 109L0 108M76 108L76 109L108 109L76 108z'/%3E %3Cpath style='fill:%23001e20; stroke:none;' d='M115 108L115 109L146 109L115 108z'/%3E %3Cpath style='fill:%23810064; stroke:none;' d='M0 114L0 115L32 115L0 114z'/%3E %3Cpath style='fill:%23398000; stroke:none;' d='M38 114L38 115L70 115L38 114z'/%3E %3Cpath style='fill:%23800063; stroke:none;' d='M76 114L76 146L77 146L77 115L108 115L76 114z'/%3E %3Cpath style='fill:%23200041; stroke:none;' d='M114 114L114 146L115 146L114 114z'/%3E %3Cpath style='fill:%23410080; stroke:none;' d='M115 114L115 115L146 115L115 114z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 115L0 146L31 146L31 115L0 115z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 115L31 146L32 146L31 115z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M38 115L38 146L39 146L38 115z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 115L39 146L70 146L70 115L39 115z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M77 115L77 146L108 146L108 115L77 115z'/%3E %3Cpath style='fill:%2360004a; stroke:none;' d='M108 115L108 146L109 146L108 115z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M115 115L115 146L146 146L146 115L115 115z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'marma j token',\n symbol: 'marmaj',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'marmaj.tkn.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-pool.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cheddar',\n symbol: 'Cheddar',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1hNTElEXzE2Xyk7fQoJLnN0MXtmaWxsOiNGRkU5NTk7fQoJLnN0MntvcGFjaXR5OjAuMjt9Cgkuc3Qze2ZpbGw6IzQyNDI0Mjt9Cgkuc3Q0e29wYWNpdHk6MC45O2ZpbGw6dXJsKCNYTUxJRF8xN18pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDZ7ZmlsbDp1cmwoI1hNTElEXzE4Xyk7fQoJLnN0N3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMTlfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDh7ZmlsbDp1cmwoI1hNTElEXzIwXyk7fQoJLnN0OXtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDEwe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTF7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzIyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxMntmaWxsOnVybCgjWE1MSURfMjNfKTt9Cgkuc3QxM3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjRfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE0e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQoJLnN0MTV7ZmlsbDp1cmwoI1hNTElEXzI2Xyk7fQoJLnN0MTZ7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzI3Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxN3tmaWxsOnVybCgjWE1MSURfMzFfKTt9Cgkuc3QxOHtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzNfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE5e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MjB7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM0Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyMXtmaWxsOnVybCgjWE1MSURfMzZfKTt9Cgkuc3QyMntvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzdfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDIze2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0MjR7ZmlsbDp1cmwoI1hNTElEXzM4Xyk7fQoJLnN0MjV7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM5Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyNntmaWxsOnVybCgjWE1MSURfNDBfKTt9Cgkuc3QyN3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfNDFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDI4e2ZpbGw6dXJsKCNTVkdJRF82Xyk7fQoJLnN0Mjl7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzQyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxnIGlkPSJMYXllcl8xXzFfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMTZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0xODIxLjEzNTMiIHkxPSI5ODMuMTc0MyIgeDI9Ii0xODIxLjEzNTMiIHkyPSI5OTguMDU0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMTc5MC4yNzUzIC05NDYpIj4KCQk8c3RvcCAgb2Zmc2V0PSIxLjk3MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGN0JDMDAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNENzNFIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzY4XyIgY2xhc3M9InN0MCIgZD0iTTUyLjMsNDAuMnYxNC4xbC00MC4yLTYuMWMtMS41LTAuMy0yLjYtMS4zLTIuNi0yLjNjMC4xLTMuOC0wLjEtNy41LDAtMTEuMQoJCWMwLTAuNywwLjEtMS41LDEuMi0xLjdjMC43LTAuMSwxLjYsMC4yLDIuMywwLjNsNC45LDAuOGMwLDAuMSwwLDAuMywwLDAuNGMwLDEuNiwxLjcsMyw0LDMuMWMyLDAuMSwzLjYtMC44LDMuOS0yLjJMNDAuNiwzOAoJCWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjVjMCwwLjcsMC45LDEuMywxLjksMS40YzEuMSwwLjEsMS45LTAuNCwxLjktMS4yYzAtMC4xLDAtMC4xLDAtMC4yQzQ0LjEsMzguNiw1Mi4zLDQwLjIsNTIuMyw0MC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTkuNSwzNC44YzAuMy0xLjItMC40LTIuNiwzLjUtMS41bDQuOSwwLjhjMC40LTEsMi0xLjYsMy44LTEuNGMyLjIsMC4xLDQsMS4zLDQsMi41YzAsMC4xLDAsMC4yLDAsMC4zCgkJTDQwLjUsMzhsMCwwYzAuMy0wLjMsMS0wLjQsMS43LTAuNGMxLDAuMSwxLjksMC41LDEuOSwxLjFsOC4yLDEuNkwzMC44LDI3LjVjLTItMS4yLTQuNS0xLjctNi43LTEuM2MtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJYy0yLjUsMC45LTQuOCwyLjQtNi4yLDMuNmMtMC4xLDAuMS0wLjYsMC41LTAuOSwxLjFDOS41LDMzLDkuNSwzMy44LDkuNSwzNC44eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjQsMjdjMS42LDAsMy4zLDAuNCw0LjcsMS4zbDIxLDEyLjV2MTIuNmwtMzguOC01LjljLTAuOS0wLjItMS43LTAuOC0xLjYtMS40YzAtMi4yLDAtNC4zLDAtNi41CgkJCWMwLTEuNSwwLTMuMSwwLTQuN2MwLTAuMSwwLTAuMiwwLTAuNGwwLDBjMC0wLjUsMC4xLTEuMiwwLjMtMS42YzAuMi0wLjQsMC41LTAuNywwLjYtMC44YzEuNC0xLjEsMy42LTIuNSw1LjgtMy40CgkJCWMxLjYtMC42LDQtMS4xLDYuOC0xLjVDMjQuNiwyNywyNC45LDI3LDI1LjQsMjcgTTI1LjQsMjYuMWMtMC40LDAtMC45LDAtMS4zLDAuMWMtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJCWMtMi41LDAuOS00LjgsMi40LTYuMiwzLjZjLTAuMSwwLjEtMC42LDAuNS0wLjksMS4xYy0wLjMsMC41LTAuMywxLjItMC40LDEuOWMwLDAuMiwwLDAuMywwLDAuNGMwLDMuNywwLjEsNy41LDAuMSwxMS4xCgkJCWMwLDEuMSwxLjEsMi4xLDIuNiwyLjNsNDAuMiw2LjFWNDAuMkwzMC44LDI3LjVDMjkuMiwyNi42LDI3LjMsMjYuMSwyNS40LDI2LjFMMjUuNCwyNi4xeiIvPgoJPC9nPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xN18iIGN4PSItMzA0NS4xOTg3IiBjeT0iMjA0Ny40NDY5IiByPSI2Ljg2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzM1XyIgY2xhc3M9InN0NCIgZD0iTTE4LjQsNDMuOGMwLDEuMi0xLjMsMi4xLTMsMmMtMS42LTAuMS0zLTEuMi0zLTIuM3MxLjMtMi4xLDMtMkMxNyw0MS41LDE4LjQsNDIuNiwxOC40LDQzLjh6IgoJCS8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iLTMwNjQuNDI3NSIgY3k9IjIwMTUuOTU3IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xNy44LDM0LjRjMCwxLjYsMS43LDMsNCwzLjFjMiwwLjEsMy42LTAuOCwzLjktMi4yaC0wLjFsLTAuMy0wLjFsMC40LDAuMWMwLTAuMSwwLTAuMiwwLTAuMwoJCWMwLTEuMy0xLjgtMi40LTQtMi41Yy0xLjgtMC4xLTMuNCwwLjUtMy44LDEuNEMxNy44LDM0LjIsMTcuOCwzNC40LDE3LjgsMzQuNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMThfIiBjeD0iLTEzMjguMjIwMiIgY3k9IjM0ODEuNzQ3MSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzA3OCAwLjIyMjggMC4yNDA5IDAuMTkwOSAtMTIyMS41MjUxIC0zNDAuNzk4NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0NiIgZD0iTTI2LjgsMjkuNGMwLDAuNS0wLjksMS0yLDAuOXMtMi0wLjYtMi0xLjJzMC45LTEsMi0wLjlDMjYsMjguMiwyNi44LDI4LjgsMjYuOCwyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xOV8iIGN4PSItMzA3OS41NTMiIGN5PSIyMDQ0LjQxMSIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3Q3IiBkPSJNMzUuMSw0My40YzAsMi4xLTIuMiwzLjUtNSwzLjNzLTUtMi01LTRjMC0yLjEsMi4yLTMuNSw1LTMuM0MzMi44LDM5LjYsMzUuMSw0MS40LDM1LjEsNDMuNHoiCgkJLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjBfIiBjeD0iLTMwNzYuMzYxNiIgY3k9IjIwMTEuMTY0OCIgcj0iMTAuOTExOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC43NTAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojRDk5OTE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC40MDk4IiBzdHlsZT0ic3RvcC1jb2xvcjojRDU5NjEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC43MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOThEMEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0JBODIwNyIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDgiIGQ9Ik0zNS44LDMzLjFjMCwwLjgtMS4zLDEuMy0yLjksMS4yYy0xLjYtMC4yLTIuOS0wLjgtMi45LTEuNmMwLTAuOCwxLjMtMS4zLDIuOS0xLjIKCQlDMzQuNiwzMS43LDM1LjgsMzIuMywzNS44LDMzLjF6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzIxXyIgY3g9Ii0zMTAyLjMwMzUiIGN5PSIyMDU5Ljc2NjgiIHI9IjUuOTI4NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3Q5IiBkPSJNNDIuMyw0Ny43YzAsMS0xLjIsMS44LTIuNiwxLjdjLTEuNC0wLjEtMi42LTEtMi42LTIuMWMwLTEuMSwxLjItMS44LDIuNi0xLjcKCQlDNDEuMSw0NS45LDQyLjMsNDYuOCw0Mi4zLDQ3Ljd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBjeD0iLTMxMDYuODA4OCIgY3k9IjIwMzAuMDM0MyIgcj0iOC44NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjYwMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDNzczMTUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjM3NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDMzcxMTMiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3MTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNCNzZDMEYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk2NjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0MDciLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0ExNjMwNiIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDAuMiwzOC41YzAsMC43LDAuOSwxLjMsMS45LDEuNGMxLjEsMC4xLDEuOS0wLjQsMS45LTEuMmMwLTAuMSwwLTAuMSwwLTAuMmwwLDBjMC0wLjUtMC45LTEtMS45LTEuMQoJCWMtMC43LTAuMS0xLjQsMC4xLTEuNywwLjRsMCwwQzQwLjMsMzguMSw0MC4yLDM4LjMsNDAuMiwzOC41eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8yMl8iIGN4PSItMzExOS4yMjA1IiBjeT0iMjA0OC44OTk5IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MTEiIGQ9Ik00OC43LDQ0YzAsMC41LTAuNiwxLTEuMywwLjljLTAuNy0wLjEtMS4zLTAuNS0xLjMtMS4xYzAtMC41LDAuNi0xLDEuMy0wLjkKCQlDNDgsNDMsNDguNyw0My40LDQ4LjcsNDR6Ii8+CjwvZz4KPGcgaWQ9IkxheWVyXzFfMl8iPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJYTUxJRF8yM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTIxMjYuNTcyIiB5MT0iMTAyNi43NzYxIiB4Mj0iLTIxMjYuNTcyIiB5Mj0iMTAzOS45Mzc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjc2NTIgLTEuNjc0MTIzZS0wMiAtMS44Nzk5NDdlLTAyIDAuODU5MyAtMTU3Ni4yMTU3IC04OTMuNDA4NSkiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDEyIiBkPSJNNDcsMjdsLTAuNCwxMC45bC0yOC41LTUuMWMtMS4xLTAuMi0xLjgtMS0xLjgtMS44YzAuMi0yLjksMC4xLTUuOCwwLjMtOC42CgkJYzAtMC41LDAuMS0xLjIsMC45LTEuM2MwLjUtMC4xLDEuMiwwLjIsMS43LDAuM2wzLjQsMC43YzAsMC4xLDAsMC4yLDAsMC4zYzAsMS4yLDEuMiwyLjMsMi43LDIuNGMxLjQsMC4xLDIuNi0wLjYsMi44LTEuNgoJCWwxMC41LDIuMmMtMC4xLDAuMS0wLjIsMC4zLTAuMiwwLjRjMCwwLjUsMC41LDEuMSwxLjMsMS4yYzAuNywwLjEsMS4zLTAuNCwxLjMtMC45YzAtMC4xLDAtMC4xLDAtMC4yQzQxLjEsMjUuNiw0NywyNyw0NywyN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNi41LDIyLjRjMC4yLTAuOS0wLjItMiwyLjUtMS4ybDMuNCwwLjdjMC4zLTAuNywxLjQtMS4yLDIuOC0xLjFjMS41LDAuMSwyLjgsMS4xLDIuOCwyYzAsMC4xLDAsMC4yLDAsMC4yCgkJbDEwLjUsMi4ybDAsMGMwLjItMC4zLDAuNy0wLjQsMS4zLTAuNGMwLjcsMC4xLDEuMywwLjQsMS4zLDAuOGw1LjgsMS4zTDMyLDE3Yy0xLjMtMC45LTMuMS0xLjMtNC44LTEuMWMtMS42LDAuMi0zLjYsMC41LTUuMSwxLjIKCQljLTEuOCwwLjYtMy40LDEuOC00LjUsMi43Yy0wLjEsMC4xLTAuNCwwLjQtMC42LDAuOEMxNi42LDIxLjEsMTYuNiwyMS43LDE2LjUsMjIuNHoiLz4KCTxnIGNsYXNzPSJzdDIiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDE2LjVjMS4yLDAsMi4zLDAuNCwzLjMsMWwxNC43LDkuOEw0NS45LDM3bC0yNy42LTQuOWMtMC42LTAuMS0xLjItMC42LTEuMi0xLjIKCQkJYzAuMS0xLjYsMC4xLTMuMywwLjItNC45YzAtMS4yLDAuMS0yLjQsMC4xLTMuNmMwLTAuMSwwLTAuMiwwLTAuM2wwLDBjMC0wLjQsMC4xLTAuOSwwLjItMS4zYzAuMS0wLjMsMC40LTAuNSwwLjQtMC42CgkJCWMxLTAuOCwyLjYtMS45LDQuMy0yLjVjMS4yLTAuNCwyLjktMC44LDQuOS0xLjFDMjcuNSwxNi41LDI3LjgsMTYuNSwyOC4xLDE2LjUgTTI4LjEsMTUuOGMtMC40LDAtMC42LDAtMSwwLjEKCQkJYy0xLjYsMC4yLTMuNiwwLjUtNS4xLDEuMmMtMS44LDAuNi0zLjQsMS44LTQuNSwyLjdjLTAuMSwwLjEtMC40LDAuNC0wLjYsMC44Yy0wLjIsMC40LTAuMywwLjktMC4zLDEuNGMwLDAuMSwwLDAuMiwwLDAuMwoJCQljLTAuMSwyLjktMC4xLDUuOC0wLjMsOC42YzAsMC44LDAuNywxLjYsMS44LDEuOGwyOC41LDUuMUw0NywyN0wzMS45LDE3QzMwLjgsMTYuMywyOS40LDE1LjgsMjguMSwxNS44TDI4LjEsMTUuOHoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjRfIiBjeD0iLTM5OTEuOTUyOSIgY3k9IjI0MDEuOTY1MSIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QxMyIgZD0iTTIyLjcsMjkuNGMwLDAuOS0xLDEuNi0yLjIsMS40Yy0xLjItMC4yLTIuMS0wLjktMi4xLTEuOWMwLTEsMS0xLjYsMi4yLTEuNAoJCVMyMi43LDI4LjUsMjIuNywyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9Ii00MDExLjE4MTYiIGN5PSIyMzcwLjQ3NTMiIHI9IjE0LjEzMjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTIyLjQsMjIuMmMwLDEuMiwxLjIsMi4zLDIuNywyLjRjMS40LDAuMSwyLjYtMC42LDIuOC0xLjZoLTAuMWgtMC4ybDAuMywwLjFjMC0wLjEsMC0wLjIsMC0wLjIKCQljMC0xLTEuMy0xLjktMi44LTJjLTEuMy0wLjEtMi40LDAuNC0yLjgsMS4xQzIyLjUsMjIsMjIuNCwyMi4xLDIyLjQsMjIuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjZfIiBjeD0iLTE3NjcuOTQ2NSIgY3k9IjQ1OTMuOTUyMSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMjI0OCAwLjE2ODUgMC4xNjczIDAuMTQ5NSAtMTEzNy40NjU2IC0zNzEuNjE3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QxNSIgZD0iTTI5LjEsMTguNGMwLDAuNC0wLjYsMC43LTEuNCwwLjdjLTAuNy0wLjEtMS4zLTAuNC0xLjMtMC45YzAtMC40LDAuNi0wLjcsMS40LTAuNwoJCUMyOC40LDE3LjYsMjkuMSwxNy45LDI5LjEsMTguNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjdfIiBjeD0iLTQwMjYuMzA3MSIgY3k9IjIzOTguOTI5MiIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMDM3IC00LjM0NjIwOGUtMDMgLTcuNTg3NzIxZS0wMyAwLjI0ODQgLTExNzIuNjU0OCAtNTg1LjEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MTYiIGQ9Ik0zNC42LDI5LjNjLTAuMSwxLjUtMS43LDIuNy0zLjcsMi41Yy0yLTAuMi0zLjYtMS42LTMuNS0zLjFjMC4xLTEuNSwxLjctMi43LDMuNy0yLjUKCQlDMzMsMjYuMywzNC42LDI3LjcsMzQuNiwyOS4zeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8zMV8iIGN4PSItNDAyMy4xMTU3IiBjeT0iMjM2NS42ODMxIiByPSIxMC45MTE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDE3IiBkPSJNMzUuNCwyMS4zYzAsMC42LTEsMS0yLjEsMC45Yy0xLjEtMC4xLTIuMS0wLjYtMi4xLTEuM3MxLTEsMi4xLTAuOQoJCUMzNC41LDIwLjIsMzUuNCwyMC43LDM1LjQsMjEuM3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzNfIiBjeD0iLTQwNDkuMDU3OSIgY3k9IjI0MTQuMjg1MiIgcj0iNS45Mjg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QxOCIgZD0iTTM5LjYsMzIuN2MwLDAuOC0wLjksMS4zLTEuOSwxLjNjLTEtMC4xLTEuOC0wLjgtMS44LTEuNnMwLjktMS4zLDEuOS0xLjMKCQlDMzguOSwzMS4yLDM5LjcsMzEuOSwzOS42LDMyLjd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBjeD0iLTQwNTMuNTYzIiBjeT0iMjM4NC41NTI1IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC42MDAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzc3MzE1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zNzc0IiBzdHlsZT0ic3RvcC1jb2xvcjojQzM3MTEzIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42NzE4IiBzdHlsZT0ic3RvcC1jb2xvcjojQjc2QzBGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45NjY5IiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NDA3Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBMTYzMDYiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTM4LjQsMjUuNmMwLDAuNSwwLjUsMS4xLDEuMywxLjJjMC43LDAuMSwxLjMtMC40LDEuMy0wLjljMC0wLjEsMC0wLjEsMC0wLjJsMCwwYzAtMC40LTAuNi0wLjgtMS4zLTAuOAoJCWMtMC41LTAuMS0xLDAuMS0xLjMsMC40bDAsMEMzOC40LDI1LjMsMzguNCwyNS41LDM4LjQsMjUuNnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzRfIiBjeD0iLTQwNjUuOTc0NiIgY3k9IjI0MDMuNDE4MiIgcj0iNC4zOTg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzFfIiBjbGFzcz0ic3QyMCIgZD0iTTQ0LjMsMjkuOWMwLDAuNC0wLjQsMC43LTEsMC43cy0xLTAuNC0xLTAuOWMwLTAuNCwwLjQtMC43LDEtMC43CgkJQzQzLjgsMjkuMSw0NC4zLDI5LjQsNDQuMywyOS45eiIvPgo8L2c+CjxnIGlkPSJMYXllcl8xXzNfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0yNDIyLjUxNzMiIHkxPSIxMDA1LjY1NDYiIHgyPSItMjQyMi41MTczIiB5Mj0iMTAxNC43NjQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjYyODcgLTMuOTI5MDMwZS0wMiAtNS4wNDc5OThlLTAyIDAuODA3NyAtMTQ0MC42ODE1IC04OTIuMDUxMykiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTRfIiBjbGFzcz0ic3QyMSIgZD0iTTQwLjYsMTcuMmwtMC42LDcuMmwtMTYuNy0zLjhjLTAuNi0wLjItMS4xLTAuNy0xLTEuM2MwLjItMS45LDAuMy0zLjksMC40LTUuOAoJCWMwLTAuNCwwLjEtMC44LDAuNS0wLjljMC40LTAuMSwwLjcsMC4xLDEsMC4ybDIsMC41YzAsMC4xLDAsMC4yLDAsMC4yYy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWw2LjIsMS41CgkJYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuNCwwLjMsMC43LDAuNywwLjhzMC44LTAuMiwwLjktMC41di0wLjFDMzcuMiwxNi4yLDQwLjYsMTcuMiw0MC42LDE3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjIuOCwxMy43YzAuMi0wLjUsMC0xLjMsMS41LTAuN2wyLDAuNWMwLjItMC40LDAuOS0wLjgsMS43LTAuN2MwLjksMC4xLDEuNiwwLjcsMS41LDEuM2MwLDAuMSwwLDAuMSwwLDAuMgoJCWw2LjIsMS41bDAsMGMwLjItMC4yLDAuNC0wLjMsMC43LTAuMmMwLjQsMC4xLDAuNywwLjMsMC43LDAuNWwzLjQsMUwzMiwxMC4zYy0wLjgtMC42LTEuOC0wLjktMi44LTAuOGMtMSwwLjItMi4yLDAuNC0zLjEsMC43CgkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41QzIyLjksMTIuOCwyMi44LDEzLjIsMjIuOCwxMy43eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjgsOS45YzAuNywwLDEuMywwLjMsMS45LDAuN2w4LjQsNi43bC0wLjUsNi41bC0xNi4xLTMuN2MtMC40LTAuMS0wLjYtMC40LTAuNi0wLjgKCQkJYzAuMS0xLjEsMC4yLTIuMiwwLjMtMy4zYzAuMS0wLjgsMC4xLTEuNiwwLjItMi40YzAtMC4xLDAtMC4xLDAtMC4ybDAsMGMwLTAuMywwLjEtMC42LDAuMi0wLjhjMC4xLTAuMiwwLjMtMC40LDAuMy0wLjQKCQkJYzAuNi0wLjUsMS42LTEuMywyLjYtMS42YzAuNy0wLjMsMS43LTAuNSwzLTAuNkMyOS40LDkuOSwyOS42LDkuOSwyOS44LDkuOSBNMjkuOSw5LjVjLTAuMiwwLTAuNCwwLTAuNiwwYy0xLDAuMi0yLjIsMC40LTMuMSwwLjcKCQkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41Yy0wLjEsMC4zLTAuMiwwLjUtMC4yLDFjMCwwLjEsMCwwLjIsMCwwLjJjLTAuMiwxLjktMC4zLDMuOS0wLjQsNS44CgkJCWMtMC4xLDAuNSwwLjQsMS4xLDEsMS4zbDE2LjYsMy45bDAuNi03LjNMMzIsMTAuM0MzMS40LDkuOCwzMC42LDkuNiwyOS45LDkuNUwyOS45LDkuNXoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzdfIiBjeD0iLTYzMDAuMDcxMyIgY3k9IjMxODQuNDk5MyIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8xM18iIGNsYXNzPSJzdDIyIiBkPSJNMjYuMSwxOC41Yy0wLjEsMC42LTAuNiwxLjEtMS4zLDFjLTAuNy0wLjEtMS4yLTAuNi0xLjItMS4zYzAuMS0wLjYsMC42LTEuMSwxLjMtMQoJCUMyNS43LDE3LjMsMjYuMiwxNy45LDI2LjEsMTguNXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGN4PSItNjMxOS4zMDAzIiBjeT0iMzE1My4wMDk1IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMjYuMywxMy43Yy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWgtMC4xaC0wLjFoMC4yYzAtMC4xLDAtMC4xLDAtMC4yCgkJYzAuMS0wLjYtMC42LTEuMy0xLjUtMS4zYy0wLjgtMC4xLTEuNCwwLjItMS43LDAuN0MyNi4zLDEzLjUsMjYuMywxMy42LDI2LjMsMTMuN3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzhfIiBjeD0iLTI4OTUuMTQ2NyIgY3k9IjcyMzAuOTM4NSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTM5NSAwLjEwOTUgOS4zMzg2MjdlLTAyIDAuMTAxOSAtMTA0OS4wOTQyIC00MDkuMzQ3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MjQiIGQ9Ik0zMC4zLDExLjJjMCwwLjMtMC40LDAuNC0wLjksMC40cy0wLjgtMC40LTAuOC0wLjZzMC40LTAuNCwwLjktMC40CgkJQzMwLDEwLjYsMzAuMywxMC45LDMwLjMsMTEuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzlfIiBjeD0iLTYzMzQuNDI1OCIgY3k9IjMxODEuNDYzNCIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xNzk2IC02LjgyMjU1NGUtMDMgLTEuMzkwNjYyZS0wMiAwLjE2NTYgLTEwNjEuNzc4NiAtNTUyLjIyMzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QyNSIgZD0iTTMzLjIsMTguNWMtMC4xLDEuMS0xLjEsMS44LTIuMiwxLjZzLTIuMS0xLjEtMi0yLjJjMC4xLTEuMSwxLjEtMS44LDIuMi0xLjYKCQlDMzIuNCwxNi42LDMzLjMsMTcuNSwzMy4yLDE4LjV6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzQwXyIgY3g9Ii02MzMxLjIzNDQiIGN5PSIzMTQ4LjIxNzMiIHI9IjEwLjkxMTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QyNiIgZD0iTTMzLjksMTMuMmMwLDAuNC0wLjYsMC42LTEuMywwLjVjLTAuNi0wLjEtMS4yLTAuNC0xLjItMC45YzAtMC40LDAuNi0wLjYsMS4zLTAuNQoJCVMzMy45LDEyLjksMzMuOSwxMy4yeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80MV8iIGN4PSItNjM1Ny4xNzYzIiBjeT0iMzE5Ni44MTkzIiByPSI1LjkyODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QyNyIgZD0iTTM2LDIwLjljMCwwLjUtMC41LDAuOS0xLjIsMC44Yy0wLjYtMC4xLTEuMS0wLjUtMS0xLjFjMC0wLjUsMC41LTAuOSwxLjItMC44CgkJQzM1LjYsMTkuOSwzNi4xLDIwLjMsMzYsMjAuOXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGN4PSItNjM2MS42ODE2IiBjeT0iMzE2Ny4wODY3IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNjAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0M3NzMxNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzc3NCIgc3R5bGU9InN0b3AtY29sb3I6I0MzNzExMyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNjcxOCIgc3R5bGU9InN0b3AtY29sb3I6I0I3NkMwRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTY2OSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNjQwNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQTE2MzA2Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0zNS41LDE2LjFjMCwwLjQsMC4zLDAuNywwLjcsMC44YzAuNCwwLjEsMC44LTAuMiwwLjktMC41di0wLjFsMCwwYzAtMC4zLTAuNC0wLjUtMC43LTAuNQoJCWMtMC40LDAtMC42LDAtMC43LDAuMmwwLDBDMzUuNiwxNS45LDM1LjUsMTYsMzUuNSwxNi4xeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80Ml8iIGN4PSItNjM3NC4wOTMzIiBjeT0iMzE4NS45NTI0IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QyOSIgZD0iTTM4LjksMTkuMWMwLDAuMy0wLjMsMC40LTAuNiwwLjRjLTAuNCwwLTAuNS0wLjMtMC41LTAuNnMwLjMtMC40LDAuNi0wLjQKCQlDMzguNywxOC41LDM4LjksMTguOCwzOC45LDE5LjF6Ii8+CjwvZz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'token.cheddar.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi41NTAzNSAxOS4xMjM5TDkuMTcxNjYgMTQuOTQ5MkM5LjMyNzMxIDE0LjcwMTMgOS41OTk0OCAxNC41NTA4IDkuODkyMiAxNC41NTA4SDE4LjQxNEMxOS41NDEyIDE0LjU1MDggMjAuNTYxNCAxMy44ODM2IDIxLjAxMzMgMTIuODUwOUMyMS4zNjQ3IDEyLjA0NzYgMjAuNzc2MSAxMS4xNDc3IDE5Ljg5OTMgMTEuMTQ3N0gxMS45NzQyTDExLjU0ODggMTEuMjU0TDEzLjY0NjEgNy40NDA3OEMxMy43OTU2IDcuMTY4OTEgMTQuMDgxMyA3IDE0LjM5MTUgN0gyMi4wNzU0QzI1LjA1NDMgNyAyNy4xMTA3IDkuOTgyNzkgMjYuMDUxMyAxMi43NjdMMjUuODYzMSAxMy4yNjEzQzI0LjU0NDQgMTYuNzI2OSAyMS4yMjE4IDE5LjAxNzYgMTcuNTEzOCAxOS4wMTc2SDYuOTc1NzVMNi41NTAzNSAxOS4xMjM5Wk04LjM2ODg0IDE5Ljk3NDdDNy4wNTA0MiAxOS45NzQ3IDUuODM2NTUgMjAuNjkyNSA1LjIwMTE4IDIxLjg0NzdDNC42MTIyMyAyMi45MTg1IDUuMzg2OTQgMjQuMjI4NyA2LjYwOTAzIDI0LjIyODdIMTAuODA0NEwxMy40NjMxIDE5Ljg2ODRMMTMuMTQ0MSAxOS45NzQ3SDguMzY4ODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjBfMykiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMF8zIiB4MT0iMTguMDI2NiIgeTE9IjUuNTI5MjYiIHgyPSIyLjI2ODYxIiB5Mj0iMzAuMTExNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjREQ1OUZGIi8+CjxzdG9wIG9mZnNldD0iMC40NzM5NTgiIHN0b3AtY29sb3I9IiM1MDY5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyNUZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pixeltoken',\n symbol: 'PXT',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANdJREFUWIXll70RwjAMhWUuNGwARVgEmuyQJRgo7AA7uGESGioaGlpTcK+w7nR+gcIyfJ1zys/7dHKSsO53SSqyqHlzEZFu7gm364Wq22z3VF07BpB8CANXn971JRP+Dejk8fSgLoz6kgm/Btjk58MqW4/TM6svmfBrQIOkSAiO92W2Hmc+gF8D6BV6h17qhOxUWPg18C16OizaN2AlxXTEFEWkxZ2QRe8DoJQctG8AIDH4vS8iFjY5aM8Au8Ox+DdgvRUBO+8W/g0AbUIf/5TqBsLf/x2/ADJHSOenTxC2AAAAAElFTkSuQmCC',\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'pixeltoken.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Meta Token',\n symbol: '$META',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Potato 🥔',\n symbol: 'POTATO',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIAGAAYAMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAHCAAGCQUEAwL/xAA9EAABAgUDAgMFBQYFBQAAAAABAgMABAUGEQcSITFBCBNhFCJRcYEJMpGhwRYjQ1JTYhUkY3KCkqKx0fD/xAAbAQEBAQADAQEAAAAAAAAAAAAGBQQAAgcDAf/EAC0RAAEDAwIDBwQDAAAAAAAAAAEAAgMEBREhMRJxsQYiQVFhodETFIGRMlLw/9oADAMBAAIRAxEAPwDVOPBXa9RrYpMzXbgqcvT6fKI3vTD6whCBnHJPxJAA7k4j4XVdFEsu3p+6bjnkSlOpzKn33VdgOwHck4AA5JIEZceILxKXRrdcqmlzLkjQWHtkhTkL91AJwFrx95w9z26DiMFdXsoWcTtT5LbRUT6x+Bt4lMjqZ47pqaqDtE0go6FMoO3/ABSebJUv4lDXYfAq5/tED5OsGvN0PpmZ2/aw1nB2SbnsyR9GtsCrT6hNtFBeG9Z56QwFp0BHkIJbGTziPNbp2grJn4Y4gemiaQW+ko4/4gn1XytrV3WymOEftTUnQgkf5xaZgKGevvgmC3aHibq0q43K35R0vMqODNyadq0+pRnB+hHyMVn9mGvL3ITyRHGrNvrlmlPlrcQMgAZjJBeLnRkPEhx6nI/RXxkhoqrulg6H9hNxb1yUO6qairUCoszksvjc2eUn+VQ6pPoeY6cIxbN0XJaNQTXrUqLksr+KwsHY4AeULQevOR6djDLaa6825e3l0qrBNJrJwnyXFfunlf6av0PPwzD20dpqe4Yim7knseXwfdH6+yy0uXxd5vuOfz0RRiRIkJ1EUiRIkcXEg32j+sM41UadpVSptSZaUZTUKihJx5jy8+Uk/wC1OVY6e+D2EJxZSQ4/57+FLcOcH5wVvH3MODxI3M2snA9iCc9h7IzAiteY2N7m07l549IBX6Rz3u59E9s0DWwNx5Z/aYWyfIC0FCQcd/SDda9Yl1PNygeTvACto6gdoWi1ayZdafMzjHvesGK0a9LqcamSU7sDHygQ/LXZKpVEPEEf5Qh5IBIziPs/JsTKfJWgE44J7xWaLX2HWkqCvePeLC1PtutjaoZ+eMRSjmY9mCoDonscqrWqBLNqUlDQOevHSKJWqWiVJWvCNp91Y4wYLM8lD5G4jd1Hr/7jgVKlJmUlKkBQJx07RCrI3MdxRbK1STbB66mk3iKnaNMtW3fcwubkMhtqeOVOsdhvPVSfXqPXoGcl5hibYbmpV5DrLqQttxCgpKkkZBBHUQjlStIomS60kJCx73HPHT/zBC0e1VndPp5q2LmeUugzLm1t1XJk1nuP7Ceo7dR3yy7M9q3NIpK46bBx8PQ+nTltJvVkjkBnpBr4jz5evXmmliR+W3EOoS42sKQsBSVA5BB7x+o9NQtZmfaWWBMUrVGTvRpsmXr8ihW4D+MyA2of9Pln6wqlvzyZZaAOB3OY2K8SWicjrpppO2uoNN1WXzNUt9fGyYSD7pPZKgSk/MHtGN9z0GtWLck5QK5IuykzKPKaeadSUqQpJwQR9IJXmjPGSBodflM7HWtdGGE6t0+ETaLVm1EbFY3CL9b9wqldoDgwcAAmARSK2kBOxQ7DB7Ra5Kv7AHEqICfePxgTNTa4S3gD25CZW371WlCUqdOO6R8YuzV8MSEmqemlLLbeCvYNxwTjoPnC32zXlOIBW5tJGR24+EE62K22paf3wyMd+nETpIzCdFhlgGdUe5B/25CXSjhSQQon8o6XsaVpUSk89sRTrbrSHNqQ4B+oi9Sc2y+BhSTn1jTA1s41UmYujOi56qOl9KdyMLx2GRFauS1y4ytKW+SODiCahlopBbPIj4Tsg3NMKKwncOwEflRa8jiZuukdcWu12Xk0C1NmpKZb03up9WelLfcPb+iT+aSfUfAQwEJhe0g6w77dTni3MyTgcQtBwpCk8jnsehhltHdQ29R7Nl6s8UpqEsfZp5AwMOpA94DsFAg/UjtDfsjeH1Ef2VQe83Y+Y8vx05KRe6ENxVxDQ7+h8/z15q8wr3jC8ItN1rpbt5WlLNMXZJs4W2lISmooT0So/wBQDgKPUAJPYhoYkMJoWzs4HqFBM+neHsOqwIuGi1qzarMU2fl3pd+WcU2424kpUhSSQUkHoQRzHToddUrAUo5/SH++0K8OErVaWrWK2JAJeb2tVlptIAPZExgDr0Sr/ifiYzglku06dLSgQAcEQOuVAGkgjUe6e2q4fXYDnTojBS6sAjd5nHz4xF8tisKacC9/JPIBgO0ad3NpSgnBxk/OLjSKh5DiVKcBB5BzBeSHQhXCQ8apiqDcqm9qku8n4HHMXu3LxX56GSMhffPSF6olWS4AC/nP3jnrF4o1bRJlBS4CfnEwAwu0WWSBrgmeoNYZeQkKUCVDuesdxxLb7e5B/CAfbF3pccCUufnBHkrkBZSC4Mnjr1ipFUhzMPUCopXNflq5F2UKUK5ualkKQ5NEF0FZwSO4HbrHl8NFamLf1QnLX3EytYlVKCT2cbBUk/huH1j3XDVGHZZw7xlPQ94qGh815viCo6EqyfKmSfl5DkdrTltxjfH/AGHucH2X0nBdRyMf/U+2ydOJEiR62gy8tUpkhWqbNUiqSqJmTnWVy77KxlLjawUqSfQgkRj14tfD/UNE9RpqnNtuOUidJmaZMlPDjBP3Sf5k/dV9D0IjY+Bvr1ojbeu1iTVqVpttqcQFO02e2ZVKv44PxKT0UnuPUAjFXUv3LNNwqFurTRy5P8Tv8rFqh1Myyg2pRz9eIu0jPMLZLvmgJbG4/qfyzFa1Q06uXS28J+1bkp7krO054tuoPQjqFJPdJBBBHUGPFQ6upQ8l1eUqGMHpAaqpC08QXolLUMlaMIn0+rOJSh5pStigFAjvFnkKzM7AS8MYxgfpA6l6mllpHlDcn4DpjHSOvLVxsYUlwEJGEjOT9YlOiydlrJBCLluXC8wtKlqIyeOeYupvaYclHGWZravGEneRj8CD+EL9LXO42sAPAkfEx1F3gplKQFErPGOekZ3UxcdFkeADkoxzd7TMvSEomZ9bz4Tt8wnlRx1P/wB2gg+CijzV0ak1u939ypajyvs7ayOC89xgHpwlKsj+4QrDU9WbqqMpQaFLPztRn3Ey8uwyncpa1HAAEabeHzSdGjmmdPtV9aHKm6TOVN1Bylc0sDcEnulICUg9wnPeFXZ62H6omeNuqNXqqEURjbu7oiVEiRIcogpEiRI4uIHeJ/ww234gbaK0JakbnkGz7BPlPCxyfJdwMlBJyD1SeRwSDkvfmml3aX3LNW7c9HmJCdlV7XGnU8+hBHCknqCMgxuzFE1V0S041mpYpt9W+1NLaSUy8437kzL5/kcHOM87TlJ7iJ1ZQCo7zND1VWgubqQ8LtW9FiZLVSYSSlSiQeAOmY9iKw6lJAVjPTmHZ1B+zNuBibemtObvkZ6VKiW5aogsPIT2G9IKVH1wn5QMX/s/fEPLPeS1asm+gHhbdUlwn/uUD+UH32yRp1Yf9ySeK8QPGeMflLxL1Wa90pJB7+96xa7bpFxXZVJajUanzE/PTiw2zLsIK1rUemABDMaffZv6jT8427fNbpdCkwQXEML9qfUM8gAYQPmVH5GHU0i0A000WkizZ1FBnnEbH6lNEOTTo7grwNqeB7qQBwOI10tpc45c3A9fhYa29RtGGHiP+8UN/Ct4VZPSCTReF4tszd3TTWEpACm6agjlCD3cPRSx8hxkqY+JEhFFE2FoYwaItNM+d5e86r//2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v1.dacha-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Flux Token',\n symbol: 'FLX',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='140px' height='140px' viewBox='0 0 140 140' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFlux Logo New%3C/title%3E%3Cdefs%3E%3CradialGradient cx='50%25' cy='0%25' fx='50%25' fy='0%25' r='248.533062%25' gradientTransform='translate(0.500000,0.000000),scale(1.000000,0.393939),rotate(90.000000),translate(-0.500000,-0.000000)' id='radialGradient-1'%3E%3Cstop stop-color='%23FE84FC' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%232ED1FF' offset='100%25'%3E%3C/stop%3E%3C/radialGradient%3E%3C/defs%3E%3Cg id='logos' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Group' transform='translate(-143.000000, -251.000000)'%3E%3Cg id='Group-2' transform='translate(0.000000, 251.000000)'%3E%3Cg id='Flux-Logo' transform='translate(143.000000, 0.000000)'%3E%3Cg id='Flux-Logo-New' transform='translate(70.000000, 70.000000) rotate(90.000000) translate(-70.000000, -70.000000) '%3E%3Ccircle id='Oval' fill='%23FFFFFF' cx='70' cy='70' r='70'%3E%3C/circle%3E%3Crect id='Rectangle' fill='%230F0E25' transform='translate(70.000000, 83.000000) rotate(90.000000) translate(-70.000000, -83.000000) ' x='57' y='50' width='26' height='66' rx='13'%3E%3C/rect%3E%3Cpath d='M50,30 C57.1797017,30 63,35.8202983 63,43 L63,96 L63,96 L50,96 C42.8202983,96 37,90.1797017 37,83 L37,43 C37,35.8202983 42.8202983,30 50,30 Z' id='Rectangle' fill='%230F0E25'%3E%3C/path%3E%3Cpath d='M63,44 L76,44 C83.1797017,44 89,49.8202983 89,57 L89,97 C89,104.179702 83.1797017,110 76,110 C68.8202983,110 63,104.179702 63,97 L63,44 L63,44 Z' id='Rectangle' fill='url(%23radialGradient-1)'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '3ea8ea4237344c9931214796d9417af1a1180770.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'nUSDO',\n symbol: 'nUSDO',\n icon:\n 'data:image/png;base64,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',\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: 'v3.oin_finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'oinfinance',\n symbol: 'OIN',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 974.66 974.66'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bisolation:isolate;%7D.cls-2%7Bfill:%235a8dff;%7D.cls-3%7Bfill:%23fff;%7D.cls-4,.cls-5%7Bfill:%231b57f6;%7D.cls-5%7Bmix-blend-mode:multiply;%7D%3C/style%3E%3C/defs%3E%3Cg class='cls-1'%3E%3Cg id='图层_1' data-name='图层 1'%3E%3Ccircle class='cls-2' cx='487.33' cy='484.76' r='473.82'/%3E%3Ccircle class='cls-3' cx='487.33' cy='484.76' r='358.99'/%3E%3Cpath class='cls-4' d='M487.33,98.08c-213.55,0-386.67,173.12-386.67,386.68S273.78,871.43,487.33,871.43,874,698.31,874,484.76,700.88,98.08,487.33,98.08ZM368.59,297.83a9,9,0,0,1,12.71-.14,287,287,0,0,0,137.53,75,110.56,110.56,0,0,1,51.78,28.2,9,9,0,0,1-12.49,12.93,92.54,92.54,0,0,0-43.3-23.61,304.9,304.9,0,0,1-146.09-79.66A9,9,0,0,1,368.59,297.83Zm216.7,197.36a9,9,0,0,1,17.93,1.3c-1.86,25.6-15.92,49.6-38.58,65.86-18.31,13.13-40.08,19.87-63.28,19.87a130.41,130.41,0,0,1-32.7-4.3,9,9,0,0,1,4.52-17.4c29.91,7.76,58.67,3.23,81-12.78C572.48,534.61,583.82,515.45,585.29,495.19Zm-9.7-47.57a15.39,15.39,0,1,1,12.8,17.6A15.39,15.39,0,0,1,575.59,447.62Zm-244-118.07a9,9,0,0,1,12.71,0,335.48,335.48,0,0,0,163.36,90.53c30.07,6.9,50.7,33.19,48,61.16-1.64,17.07-9.08,30.42-21.52,38.59-8.23,5.41-18.1,8.14-28.9,8.14a76.36,76.36,0,0,1-23.39-3.91,9,9,0,1,1,5.52-17.1c14.54,4.69,27.64,3.93,36.9-2.15,7.73-5.08,12.39-13.82,13.49-25.29,2-20.88-15.76-37.71-34.1-41.92a353.42,353.42,0,0,1-172.1-95.35A9,9,0,0,1,331.59,329.55Zm-30,41.34a9,9,0,0,1,12.71-.23c36.29,35,81.18,62.68,133.43,82.22a9,9,0,0,1-3.15,17.41,8.89,8.89,0,0,1-3.14-.58c-54.58-20.41-101.55-49.38-139.62-86.11A9,9,0,0,1,301.56,370.89ZM452.39,512.8a15.39,15.39,0,1,1-12.8-17.6A15.38,15.38,0,0,1,452.39,512.8ZM278.9,429.48a9,9,0,0,1,12.54-2.07c38.33,27.47,67.76,43.32,105.66,61.43a9,9,0,1,1-7.75,16.21c-38.8-18.53-69-34.79-108.38-63A9,9,0,0,1,278.9,429.48Zm-4.46,60.34A9,9,0,0,1,287,487.67c45.31,32,91.6,55,137.57,68.37a9,9,0,0,1-2.5,17.62,8.76,8.76,0,0,1-2.51-.36c-47.9-13.9-96-37.78-142.94-70.95A9,9,0,0,1,274.44,489.82Zm18.28,73.95a9,9,0,0,1,12.38-2.89c44.19,27.46,93.91,45,123.06,51.75,27.43,6.32,56.78,9,65.69,9,77.91,0,141.29-63.38,141.29-141.29,0-65.78-46.6-123.81-110.81-138L516,340.57l0-.24a257.48,257.48,0,0,1-100.58-53,9,9,0,1,1,11.69-13.66A239.17,239.17,0,0,0,528.3,324.87l8.22,1.9,0,.16c68.06,19,116.62,82.18,116.62,153.46,0,87.82-71.45,159.27-159.27,159.27-9.61,0-40.9-2.87-69.72-9.51-30.5-7-82.46-25.38-128.52-54A9,9,0,0,1,292.72,563.77ZM493.85,688.36l-9-.07c-5.35-.12-10.74-.42-16.1-.9a302.94,302.94,0,0,1-109.22-31.85,9,9,0,1,1,8.2-16,284.85,284.85,0,0,0,102.64,29.94,225.63,225.63,0,0,0,23.34.87l7.29-.11c101.46-3.78,182.84-87.49,182.84-189.86,0-89.16-63.2-167.31-150.26-185.83l-.12,0-.11,0a206.73,206.73,0,0,1-49.14-18.68A9,9,0,0,1,492.69,260,188.85,188.85,0,0,0,537.56,277h0c95.18,20.37,164.23,105.85,164.23,203.35C701.82,595.07,608.53,688.36,493.85,688.36Z'/%3E%3Cpath class='cls-5' d='M144.68,484.76c0-206.19,161.39-374.67,364.73-386-7.27-.41-14.58-.64-21.94-.64-213.56,0-386.68,173.12-386.68,386.68S273.91,871.43,487.47,871.43c7.36,0,14.67-.23,21.94-.64C306.07,859.42,144.68,690.94,144.68,484.76Z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '9aeb50f542050172359a0e1a25a9933bc8c01259.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Myria',\n symbol: 'MYRIA',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZSIgZD0iTTAgMGg2MDB2NjAwSDB6Ii8+PC9jbGlwUGF0aD48c3R5bGU+LmNscy00e2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjY2xpcC1wYXRoKSI+PHBhdGggZD0iTTYwMCAzMDAuMTNjMCAxNjUuNjktMTM0LjMxIDMwMC0zMDAgMzAwUzAgNDY1LjgxIDAgMzAwLjEzIDEzNC4zMS4xMyAzMDAgLjEzczMwMCAxMzQuMzEgMzAwIDMwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSIgc3R5bGU9ImZpbGw6Izg2MmFlOSIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTQ3MS4xMSA0MjEuMjFhMTcuNzUgMTcuNzUgMCAwIDAgMi4wNy04IDcuMjQgNy4yNCAwIDAgMCAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDAtMTQyLjYxLTgxLjcybC0xLjQ5Ljg1LTEyNi42NCA3My4xMi0xLjExLjY1YTE4LjE4IDE4LjE4IDAgMCAwLTUuNzcgNS43NWMtLjE1LjIxLS4yNi40MS0uMzkuNjNhMTguMzMgMTguMzMgMCAwIDAgNi43MSAyNWwyNDMuODQgMTQwLjgzYTE4LjMzIDE4LjMzIDAgMCAwIDI1LTYuNzFjLjEzLS4yMi4yNC0uNDIuMzUtLjY1TTIxMi41NCAyNzEuOTNsMTQuNzQtOC41MyA2Mi44NC0zNi4yNiA0OS4zOC0yOC41MSAxLjYtLjkxYTc2LjM0IDc2LjM0IDAgMCAxIDExMyA2NS4yNnYxNDguNDNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0uMTMpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTI4Ljg5IDQyMS4yMWExNy43NyAxNy43NyAwIDAgMS0yLjA4LTggNy41IDcuNSAwIDAgMSAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDEgMTQyLjYxLTgxLjcybDEuNDkuODUgMTI2LjY1IDczLjExIDEuMTEuNjVhMTguMTcgMTguMTcgMCAwIDEgNS43NyA1Ljc1Yy4xNS4yMS4yNi40MS4zOS42M2ExOC4zMyAxOC4zMyAwIDAgMS02LjcxIDI1TDE1NC4yOCA0MjguNThhMTguMzMgMTguMzMgMCAwIDEtMjUtNi43MWMtLjEzLS4yMi0uMjQtLjQyLS4zNS0uNjVtMjU4LjUzLTE0OS4yOS0xNC43NC04LjUzLTYyLjgzLTM2LjI2LTQ5LjM5LTI4LjUyLTEuNi0uOTFhNzYuMzQgNzYuMzQgMCAwIDAtMTEzIDY1LjI2djE0OC40NFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLS4xMykiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'myriadcore.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'xRef Finance Token',\n symbol: 'xREF',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNjIiIHZpZXdCb3g9IjAgMCA1NiA2MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuODU2OTMgMTcuODg1NkMxLjg1NjkzIDE2LjAyNzggMi44ODY5MiAxNC4zMjMyIDQuNTMxNTEgMTMuNDU5MkwyNS45MjE2IDIuMjIxNzJDMjcuMzc3NSAxLjQ1NjgzIDI5LjExNjUgMS40NTY4MyAzMC41NzI0IDIuMjIxNzJMNTEuOTYyNCAxMy40NTkyQzUzLjYwNyAxNC4zMjMyIDU0LjYzNyAxNi4wMjc4IDU0LjYzNyAxNy44ODU2VjQ1LjYzMDRDNTQuNjM3IDQ3LjYwMjEgNTMuNDc4MiA0OS4zODk4IDUxLjY3ODMgNTAuMTk0N0wzMC4yODgyIDU5Ljc2MDZDMjguOTg5NCA2MC4zNDE0IDI3LjUwNDYgNjAuMzQxNSAyNi4yMDU3IDU5Ljc2MDZMNC44MTU3IDUwLjE5NDdDMy4wMTU3NCA0OS4zODk4IDEuODU2OTMgNDcuNjAyMSAxLjg1NjkzIDQ1LjYzMDRMMS44NTY5MyAxNy44ODU2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyNDYxXzIwNzUpIiBzdHJva2U9IiMwMEM2QTIiIHN0cm9rZS13aWR0aD0iMiIvPgo8cGF0aCBkPSJNMTMuNjk3OCAyMC4zMzJMMjguMjQ3MSAxNEwyOC4yMjAyIDMwLjU0MTdMMjAuMjgwMyAyMy43MTE2TDEyLjMxMzUgMzAuOTI5NVYyMi4zNjU0QzEyLjMxNTIgMjEuNDkyMiAxMi44NTM4IDIwLjY5OTMgMTMuNjk3OCAyMC4zMzJaIiBmaWxsPSIjMDBDNkEyIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBkPSJNMTQuMTAyMyA0Mi43NjQ1TDI4LjI0NzEgNDYuODYyNkwyOC4yMjAyIDM0LjU5NDRMMjAuMjc5NCAyNy45NDE0TDEyLjMxMzUgMzQuOTcyMlY0MC41Mjc0QzEyLjMxMzUgNDEuNTUxNSAxMy4wMzY3IDQyLjQ1NTkgMTQuMTAyMyA0Mi43NjQ1WiIgZmlsbD0iIzAwQzZBMiIgZmlsbC1vcGFjaXR5PSIwLjUiLz4KPHBhdGggZD0iTTQzLjY0NDUgNDIuNzYzM0wyOC4yNzQ0IDQ2Ljg2MzJMMjguMjQ2OCAzNC41MTU3TDQzLjIyMSAyMi40NjQ4QzQzLjIyMSAyMi40NjQ4IDQ1Ljc5MyAyNC4zOTk2IDQ1LjAzNzMgMjcuODE5NkM0My43MDQ4IDMzLjg1MTEgMzUuMTc5NiAzNS45ODY5IDM1LjE3OTYgMzUuOTg2OUw0My45MDk2IDQxLjE1NjFDNDQuNjE1NSA0MS41NzggNDQuNDU1NCA0Mi41NDcgNDMuNjQ0NSA0Mi43NjMzWiIgZmlsbD0iIzQ1RkZERSIvPgo8cGF0aCBkPSJNMzguNTkwMyAxOC45NzkzTDI4LjI3MzQgMTRMMjguMjQ2OCAzMC40MzE1TDQwLjY5NSAyMC4zNTA5QzQwLjY5NSAyMC4zNTA5IDQwLjQyNzEgMjAuMDU5NyAzOS42OTAxIDE5LjU4MDVDMzkuNDI4OSAxOS40MTE0IDM4LjU5MDMgMTguOTc5MyAzOC41OTAzIDE4Ljk3OTNaIiBmaWxsPSIjNDVGRkRFIi8+CjxwYXRoIGQ9Ik00MC41NTEgMTYuMDEwMUw0Ni42NjAyIDE4LjI4MDVDNDYuOTY3NSAxOC4zOTQzIDQ3LjE2OCAxOC42NjU2IDQ3LjE2OCAxOC45NjVWMjMuMTIwN0M0Ny4xNjggMjMuNDM4OCA0Ni43MjYgMjMuNTgyMiA0Ni41MDQyIDIzLjMzNDNMNDAuMjU1MyAxNi4zNjg3QzQwLjA4OTMgMTYuMTgzMSA0MC4zMDYyIDE1LjkxODEgNDAuNTUxIDE2LjAxMDFaIiBmaWxsPSIjNDVGRkRFIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTI0NjFfMjA3NSIgeDE9IjI4LjI0NyIgeTE9IjEiIHgyPSIyOC4yNDciIHkyPSI2MC42NzM1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMTEzMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAxMzIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xtoken.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Solana',\n symbol: 'SOL',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI1MCIgeDI9IjUwIiB5MT0iMjciIHkyPSI3NCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTRlNmFkIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTk2NGRlIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGQ9Im0wIDBoMTAwdjEwMGgtMTAweiIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI2IpIj48cGF0aCBkPSJtNTAgMGM5Ljg4OTEgMCAxOS41NTYxIDIuOTMyNDUgMjcuNzc4NSA4LjQyNjUyIDguMjIyNSA1LjQ5NDA4IDE0LjYzMTEgMTMuMzAyOTggMTguNDE1NSAyMi40MzkyOHM0Ljc3NSAxOS4xODk3IDIuODQ1MyAyOC44ODg3Yy0xLjkyOTMgOS42OTkxLTYuNjkxMyAxOC42MDgyLTEzLjY4NCAyNS42MDA4LTYuOTkyNiA2Ljk5MjctMTUuOTAxNyAxMS43NTQ3LTI1LjYwMDggMTMuNjg0LTkuNjk5IDEuOTI5Ny0xOS43NTI0LjkzOTEtMjguODg4Ny0yLjg0NTNzLTE2Ljk0NTItMTAuMTkzLTIyLjQzOTI4LTE4LjQxNTVjLTUuNDk0MDctOC4yMjI0LTguNDI2NTItMTcuODg5NC04LjQyNjUyLTI3Ljc3ODUgMC0xMy4yNjA4IDUuMjY3ODQtMjUuOTc4NSAxNC42NDQ3LTM1LjM1NTMgOS4zNzY4LTkuMzc2ODYgMjIuMDk0NS0xNC42NDQ3IDM1LjM1NTMtMTQuNjQ0N3oiIGZpbGw9IiMwMDAiLz48ZyBmaWxsPSJ1cmwoI2EpIiBmaWxsLW9wYWNpdHk9Ii45MiI+PHBhdGggZD0ibTMwLjM4MDYgNjIuNzg4OWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3NzkuNjI2MiAxLjcyNDdsLTkuMTgzNiA5LjQ4NjRjLS4zMTMuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDggMC0xLjI1MjItMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im0zMC4zODA2IDI3LjUzOWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3OC42MjYxIDEuNzI0OGwtOS4xODM1IDkuNDg2M2MtLjMxMzEuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDkgMC0xLjI1MjMtMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im02OS41MTUgNDUuMDAxOGMtLjMxMzEtLjMyMzQtLjgzNDktLjUzOS0xLjM1NjctLjUzOWgtNDYuMjMwN2MtLjgzNDggMC0xLjI1MjIgMS4wNzgtLjYyNjEgMS43MjQ4bDkuMTgzNSA5LjQ4NjRjLjMxMzEuMzIzMy44MzQ5LjUzODkgMS4zNTY3LjUzODloNDYuMjMwNmMuODM0OSAwIDEuMjUyNC0xLjA3OC42MjYyLTEuNzI0OHoiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'sol.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'TerraUSD',\n symbol: 'UST',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTgxLjA5NiAxMy43MjItLjAxLS4wMS4wMTQtLjAwOGE0NC4xNzQgNDQuMTc0IDAgMCAwIC0yOC43NjUtMTAuNTc0IDQ0LjE2NyA0NC4xNjcgMCAwIDAgLTE4LjAxIDMuODI1Yy0zLjcwNSAxLjU2NS02LjcxNSAzLjYzNS05LjE5NSA2Ljg4NS0xMi43NCAxNi44MyAyOS45NiAyOS4wNiA1Mi43OSAyOS4xMDQgMTAuNDkyIDcuNTI4IDEzLjQ0Ni0yMS4yMzYgMy4xNzctMjkuMjIyeiIgZmlsbD0iIzBkM2NhNCIvPjxwYXRoIGQ9Im0zNi44OTMgMTQuMDYzYy01Ljg2MyA4LjgxNi0yNS40MDMgMTUuMDI3LTI4LjYxNSAxNC4wNTdsLS4wMTktLjA0Yy4xMzItLjI2OC4yNjgtLjUzMi40LS43OTVhNDYuNjcyIDQ2LjY3MiAwIDAgMSA4LjQ4LTExLjU4IDQ3LjIxIDQ3LjIxIDAgMCAxIDkuMTg1LTcuMTUxYzIuNzM3LTEuNTg0IDUuNTM2LTEuNjg4IDYuNDU4LTEuNzIgOC43MDguMTc3IDQuMTYgNy4xNiA0LjExIDcuMjI5em0tNC44MDYgNjIuMzAzYy40MTggMi43NzItLjAwOSAxMy43MTMtLjU4IDE0LjYzNC0uNDg2LjAzMi0xLjUwMy4wOTUtNC40NDgtMS41NTdhNDYuODI3IDQ2LjgyNyAwIDAgMSAtOS45Mi03LjU3MyA0Ni45NTIgNDYuOTUyIDAgMCAxIC04LjQ4LTExLjU4IDQ2LjUyNCA0Ni41MjQgMCAwIDEgLTUuMjIzLTIxLjVjMC0yLjU4MS4yMDgtNS4xMTguNjEyLTcuNTg3YTQ2LjUxMSA0Ni41MTEgMCAwIDEgMi4yNjUtOC41OThjMy4zNzYgNC40ODMgNy4yNzggOC41NDQgMTAuNTk1IDEzLjA3MyAzLjE1OSA0LjMxNSA3LjUwNiAxMS4zNDQgOC4zODYgMTIuODUgNS41IDkuMzE2IDYuMzc2IDE1LjA3NCA2Ljc5MyAxNy44Mzh6bS0zLjMxMi0zOC44NTdjLTIuMDA2LTE1LjMxIDI5LjA1NS0yNS45NzkgNDIuNzA1LTI2LjM4MiAxLjYzOC4wMTggNi42MTYuMDc3IDkuNTI1IDIuNDM2IDUzLjQ5NSA1MC45MzctNDYuOTU3IDY0LjI0LTUyLjIzIDIzLjk0N3oiIGZpbGw9IiM1NDk0ZjgiLz48cGF0aCBkPSJtMjAuNDU3IDkyLjM1YzAgMS44MjUgMS4yNyAzLjMwNCAyLjg0NSAzLjMxMyAzNy40OTYuMjU5IDczLjY5NC0xLjQ2IDczLjY5NC03LjA4MyAwLTE3LjAwNy03Ni41MzkgMy43Ny03Ni41MzkgMy43N3oiIGZpbGw9IiM3NjAxMDEiLz48cGF0aCBkPSJtMjMuMzIgNDQuMTg3YTIuODYzIDIuODYzIDAgMCAwIC0yLjg2MyAyLjg2M3Y0NS4zYzAgMS41NzQgMS4yNyAyLjg1IDIuODQ1IDIuODU4IDM3LjQ5Ni0uMjc2IDczLjc0LTEyLjY4NyA3My42OTQtNi42M3YtNTEuMDI0Yy4wNDUtNi4wNTMtMzYuMTg5IDYuMzUzLTczLjY3NiA2LjYzNHoiIGZpbGw9IiNkZTMwMzAiLz48cGF0aCBkPSJtODQgODBjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxMS41IDAgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzNCAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2OC0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMi02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ni0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzNC02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTI4LjU5MyA3MS41NGEyMDQuMTEyIDIwNC4xMTIgMCAwIDAgNy4wNjYtLjM3NiAyNTEuNzQ1IDI1MS43NDUgMCAwIDAgNi43MDYtLjU3MmMxLjEzLS4xMDkgMi4yNy0uMjIyIDMuNDQ1LS4zNSAxLjE3LS4xMjYgMi4zNjgtLjI1OCAzLjYxMi0uNDEyIDEuMjQzLS4xNSAyLjUzNi0uMzEzIDMuODg5LS40OSAxLjM1Mi0uMTczIDIuNzYzLS4zNzIgNC4yMzgtLjU5di0yNy41M2MtMTAuNTMyIDEuNTU2LTIyLjMxNyAyLjg3Mi0zNC4yMjkgMi45NThhMi44NjMgMi44NjMgMCAwIDAgLTIuODYzIDIuODY0djI0LjY1M2MxLjQ4NCAwIDIuODk1LS4wMTggNC4yNDctLjA1IDEuMzUzLS4wMTggMi42NDYtLjA2IDMuODktLjEwNXoiIGZpbGw9IiMxYTNhYjkiLz48cGF0aCBkPSJtMjMuMDUzIDQ2LjQ4IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjIuMTI2em01LjEzNS0uMjkyIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkxIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTMzLS4yOTIgMS4yMiAxLjg2Mi0yLjIyMi4xMjZ6bS0yOC4wNDcgNS4wMjYgMS4yMiAxLjg2Mi0yLjIyMi4xMjd6bTUuMTM1LS4yOTEgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI3em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyIDEuODYyLTIuMjIzLjEyN3ptLTI4LjA0NyA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzQtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzUtLjI5MyAxLjIyIDEuODYzLTIuMjIyLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzMi0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptLTI4LjA0MiA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNyAxLjAwMy0xLjk5em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MyAxLjIyMSAxLjg2My0yLjIyMy4xMjd6bTUuMTM1LS4yOSAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bS0yOC4wNDggNS4wMjYgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjMtMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2IDEuMDAzLTEuOTg5em01LjEzNS0uMjkzIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyN3ptNS4xMzMtLjI5MiAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bS0zMC42NTUgOS4wNDEgMS4yMjIgMS44NjMtMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNi0uMjkxIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNS0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzMy0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em0tMjguMTk2LTIuMjY2IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMjEgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'ust.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo',\n symbol: 'CELO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGgxMDB2MTAwaC0xMDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Im01MCAwYzkuODg5MSAwIDE5LjU1NjEgMi45MzI0NSAyNy43Nzg1IDguNDI2NTIgOC4yMjI1IDUuNDk0MDggMTQuNjMxMSAxMy4zMDI5OCAxOC40MTU1IDIyLjQzOTI4czQuNzc1IDE5LjE4OTcgMi44NDUzIDI4Ljg4ODdjLTEuOTI5MyA5LjY5OTEtNi42OTEzIDE4LjYwODItMTMuNjg0IDI1LjYwMDgtNi45OTI2IDYuOTkyNy0xNS45MDE3IDExLjc1NDctMjUuNjAwOCAxMy42ODQtOS42OTkgMS45Mjk3LTE5Ljc1MjQuOTM5MS0yOC44ODg3LTIuODQ1M3MtMTYuOTQ1Mi0xMC4xOTMtMjIuNDM5MjgtMTguNDE1NWMtNS40OTQwNy04LjIyMjQtOC40MjY1Mi0xNy44ODk0LTguNDI2NTItMjcuNzc4NSAwLTEzLjI2MDggNS4yNjc4NC0yNS45Nzg1IDE0LjY0NDctMzUuMzU1MyA5LjM3NjgtOS4zNzY4NiAyMi4wOTQ1LTE0LjY0NDcgMzUuMzU1My0xNC42NDQ3eiIgZmlsbD0iI2ZiY2M1YyIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Im00My41NDIxIDczLjcyNDljMy40MDg1LjAwODMgNi43NDI5LS45OTQ4IDkuNTgxMS0yLjg4MjUgMi44MzgxLTEuODg3NiA1LjA1MjQtNC41NzQ4IDYuMzYyNi03LjcyMTVzMS42NTczLTYuNjExNC45OTc1LTkuOTU1NWMtLjY1OTktMy4zNDQtMi4yOTcxLTYuNDE3Mi00LjcwNDMtOC44MzAzLTIuNDA3My0yLjQxMzItNS40NzY0LTQuMDU3OS04LjgxODktNC43MjU5LTMuMzQyNC0uNjY4MS02LjgwNzktLjMyOTQtOS45NTc4Ljk3My0zLjE0OTkgMS4zMDI1LTUuODQyNSAzLjUxMDItNy43MzcxIDYuMzQzOC0xLjg5NDYgMi44MzM1LTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0IDAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjQ5IDMuMjIxMiAzLjIyOTEgNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDZ6bTAgNi4yNzUxYy00LjY0OTYuMDA4My05LjE5NzMtMS4zNjI5LTEzLjA2NzMtMy45NC0zLjg3MDEtMi41NzcyLTYuODg4Ny02LjI0NDQtOC42NzM4LTEwLjUzNzgtMS43ODUyLTQuMjkzMy0yLjI1NjYtOS4wMTk3LTEuMzU0Ni0xMy41ODFzMy4xMzY5LTguNzUyNSA2LjQyMTctMTIuMDQzM2MzLjI4NDgtMy4yOTA3IDcuNDcyMS01LjUzMzEgMTIuMDMxOC02LjQ0MzMgNC41NTk3LS45MTAxIDkuMjg2OS0uNDQ3MiAxMy41ODM0IDEuMzMwMnM3Ljk2OTIgNC43ODk0IDEwLjU1MzMgOC42NTQ5YzIuNTg0IDMuODY1NSAzLjk2MzQgOC40MTA2IDMuOTYzNCAxMy4wNjAzLjAwNTUgMy4wODQtLjU5NzIgNi4xMzg5LTEuNzczNiA4Ljk4OTgtMS4xNzYzIDIuODUwOS0yLjkwMzQgNS40NDE5LTUuMDgyMiA3LjYyNDZzLTQuNzY2NiAzLjkxNDQtNy42MTU0IDUuMDk1OS01LjkwMjYgMS43ODk3LTguOTg2NyAxLjc4OTd6Ii8+PHBhdGggZD0ibTU2LjUgNjAuNzI0OWMzLjQwODYuMDA4MyA2Ljc0MjktLjk5NDggOS41ODExLTIuODgyNHM1LjA1MjUtNC41NzQ5IDYuMzYyNi03LjcyMTZjMS4zMTAyLTMuMTQ2NyAxLjY1NzMtNi42MTEzLjk5NzUtOS45NTU0LS42NTk5LTMuMzQ0MS0yLjI5NzEtNi40MTcyLTQuNzA0My04LjgzMDQtMi40MDczLTIuNDEzMS01LjQ3NjQtNC4wNTc4LTguODE4OC00LjcyNTktMy4zNDI1LS42NjgtNi44MDgtLjMyOTQtOS45NTc5Ljk3MzEtMy4xNDk5IDEuMzAyNC01Ljg0MjUgMy41MTAyLTcuNzM3MSA2LjM0MzdzLTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0YzAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjVzNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDU5OXptMCA2LjI3NTFjLTQuNjQ3OSAwLTkuMTkxMy0xLjM3ODItMTMuMDU1OS0zLjk2MDUtMy44NjQ1LTIuNTgyMi02Ljg3NjYtNi4yNTI0LTguNjU1My0xMC41NDY0LTEuNzc4Ni00LjI5NDEtMi4yNDQtOS4wMTkyLTEuMzM3Mi0xMy41Nzc3LjkwNjctNC41NTg2IDMuMTQ0OS04Ljc0NTkgNi40MzE0LTEyLjAzMjRzNy40NzM4LTUuNTI0NyAxMi4wMzI0LTYuNDMxNGM0LjU1ODUtLjkwNjggOS4yODM2LS40NDE0IDEzLjU3NzcgMS4zMzcyIDQuMjk0IDEuNzc4NyA3Ljk2NDIgNC43OTA4IDEwLjU0NjQgOC42NTUzIDIuNTgyMiAzLjg2NDYgMy45NjA1IDguNDA4IDMuOTYwNSAxMy4wNTU5LS4wMTExIDYuMjI5Mi0yLjQ5MDYgMTIuMi02Ljg5NTMgMTYuNjA0N3MtMTAuMzc1NSA2Ljg4NDItMTYuNjA0NyA2Ljg5NTN6Ii8+PHBhdGggZD0ibTU3LjY4ODkgNjcuODU3MWMxLjYyMzQtMS45NzM4IDIuNzg2LTQuMjg0OCAzLjQwMzQtNi43NjQ3IDIuNDczNy0uNjM0MSA0Ljc4MTItMS43OTUgNi43NjQ3LTMuNDAzNC0uMDk4MyAyLjg5MDUtLjcyNDkgNS43Mzg2LTEuODQ4NyA4LjQwMzQtMi42NDQxIDEuMDg1MS01LjQ2MjUgMS42ODMtOC4zMTk0IDEuNzY0N3ptLTE3LjQzNy0yNy42MDVjLTIuNDM1NC42MzQ2LTQuNzAxNiAxLjc5NjQtNi42Mzg2IDMuNDAzMy4wNzI1LTIuODkzNi43MDAxLTUuNzQ2NCAxLjg0ODctOC40MDMzIDIuNjU4NS0xLjE0MzcgNS41MTA0LTEuNzcxMSA4LjQwMzQtMS44NDg4LTEuNjIzNCAxLjk3MzgtMi43ODYgNC4yODQ4LTMuNDAzNCA2Ljc2NDd6Ii8+PC9nPjwvZz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'celo.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ABR',\n symbol: 'ABR',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIHdpZHRoPSIxMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSI2MC41IiBjeT0iNjAuNSIgZmlsbD0iIzBlMGIwZiIgZmlsbC1ydWxlPSJub256ZXJvIiByPSI2MC41Ii8+PGNpcmNsZSBjeD0iNjAuNSIgY3k9IjYwLjUiIHI9IjYwIiBzdHJva2U9IiMyZDJjMmUiIHN0cm9rZS1vcGFjaXR5PSIuODEiLz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im04MS4xNjg3IDUyLjIxNDctMTEuNjUzLTExLjY1MjloLTE3LjY1NTlsLTUuNjQ5MyA1LjY0OTl2LTIwLjEyNzdoLTYuMDAzN3YzNS42NjQ4IDcuNzY4NmwxMS42NTMgMTEuNjUyOWgxNy42NTU5bDUuNjUwMi01LjY0OTl2MjAuMTI3N2g2LjM1NjN2LTMzLjU0NjJ6bS0xNC40NzgxIDIyLjk1MjZoLTExLjY1MjJsLTguNDc1My04LjQ3NDh2LTQuOTQzNy02LjcwOTJsOC40NzUzLTguNDc0OGgxMS42NTIybDguNDc1MyA4LjQ3NDh2Ny40MTU1IDQuMjM3NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMzEuNzMzNCA3Mi42OTUydi0zMi4xMzM3aC02LjAwMjh2MzQuOTU4NmwyMC40ODEgMjAuNDgwOGgyMC40ODAxdi02LjAwM2gtMTcuNjU1OXoiIGZpbGw9IiM2ZGQiLz48cGF0aCBkPSJtNTUuMDM4OCAyNS43MzA1djYuMDAzaDE3LjY1NTlsMTcuMzAyNCAxNy4zMDI3djMyLjEzMzdoNi4wMDI4di0zNC45NTg2bC0yMC40ODEtMjAuNDgwOHoiIGZpbGw9IiM2ZGQiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'abr.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Utopia',\n symbol: 'UTO',\n icon:\n \"data:image/svg+xml,%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='-40 -40 600 600'%3E%3Cdefs%3E%3Cstyle%3E .cls-1%7Bfill:%239f9f9f%7D.cls-2%7Bfill:%23fefefe%7D.cls-4%7Bfill:%23030303%7D %3C/style%3E%3C/defs%3E%3Cpath d='M371.65 15v23.92l-.47.71C368.82 41.48 366 41 363.36 41q-36.94.09-73.88 0h-176c-3.06 0-6.31.67-9.1-1.37l-.47-.71V15ZM55.21 355.33H31.66a2.81 2.81 0 0 1-.26-.3.82.82 0 0 1-.13-.37v-24H6.67V136.41h24.6l.69.44c2 2.64 1.38 5.75 1.39 8.67q.07 73.11 0 146.2c0 12.44.26 12.68 12.64 12.76 3 0 6-.29 8.85 1a3 3 0 0 1 1.23 1.1 12.38 12.38 0 0 1 1.18 6.17q.1 18 0 36.05c0 2.09.17 4.28-1.36 6.06ZM420.4 452.82v23.51c-3.87.66-178.64.93-195 .29v-23.8l.47-.71c2.79-2 6-1.37 9.1-1.37q75.33-.09 150.68 0c9.25 0 18.49-.06 27.74 0 2.25 0 4.6-.25 6.54 1.37ZM176.66 428H128v-23.83H79.16v-24.9l.39-.66c1.9-1.69 4.27-1.4 6.51-1.42 10.55-.08 21.09 0 31.63-.05 6.6-.05 7.89-1.5 8.12-8.1.16-4.52-.77-9.14 1.06-13.53a2.94 2.94 0 0 1 1.1-1.14 58.19 58.19 0 0 1 24.44-.12 3 3 0 0 1 1.2 1.07c1.29 2.36 1.19 4.95 1.2 7.5v30.75c.05 6.74 1.61 8.24 8.36 8.37 3.7.08 7.41-.1 11.1.23 2.23.2 3.9 1.14 4.1 3.54a107.23 107.23 0 0 1-.06 20 3.93 3.93 0 0 1-1 1.85c-.2.17-.43.31-.65.44Z'/%3E%3Cpath d='M225.4 452.82h-48.74V428c1.46-1.94 3.61-2 5.74-2.06 6.36-.1 12.72-.14 19.08.09 6.33-.23 12.67-.21 19-.07 1.93 0 4-.19 5.56 1.42 2.71 7.57 1.34 15.33 1 23-.04 1.09-.97 1.72-1.64 2.44ZM31.27 136.41V87.67h23.94l.7.45c1.36 1.51 1.34 3.39 1.35 5.22q.18 18.9 0 37.8a11.41 11.41 0 0 1-1 5 3.12 3.12 0 0 1-1.12 1.24c-7.1 2.15-14.32 1.17-21.51.74-1.03-.12-1.63-1.04-2.36-1.71Z'/%3E%3Cpath d='M55.21 87.67v-24.8h23.95l.69.44a3.53 3.53 0 0 1 1 1.84c.36 7.46 1.36 14.94-.69 22.33A3 3 0 0 1 79 88.65c-7.08 2-14.25 1.13-21.4.67-1.07-.06-1.67-.99-2.39-1.65ZM469.14 404.07V428h-24.8l-.71-.47a5.34 5.34 0 0 1-1.24-3.54q-.37-8.07 0-16.15a7 7 0 0 1 1.61-4.3 8.54 8.54 0 0 1 5.24-1.52c5-.13 10-.14 15 0 1.86.09 3.65.41 4.9 2.05Z'/%3E%3Cpath d='M79.16 62.87V38.92H104c.79.8 1.71 1.56 1.76 2.78.29 7 1.2 14-.69 20.86a3 3 0 0 1-1.13 1.23C96.52 66 89 64.92 81.56 64.53c-1.07-.06-1.68-1-2.4-1.66ZM444.34 428v24.8H420.4c-.67-.72-1.62-1.34-1.66-2.38-.33-7.7-1.67-15.44 1-23 1.15-1.33 2.78-1.33 4.32-1.4 5.11-.22 10.23-.18 15.35 0 1.9.03 3.68.36 4.93 1.98ZM79.16 379.27H55.21v-23.94c.52-.48.95-1.21 1.63-1.34a70.78 70.78 0 0 1 21.55-.16c1.55.19 2.36 1.57 2.5 3.09a109.82 109.82 0 0 1 0 19.53 4.76 4.76 0 0 1-1.73 2.82ZM444.34 111.61h24.8v73.54c-1.36 1.8-3.33 2-5.35 2-5 .13-9.94.18-14.9 0-5.5-.2-6.49-1.05-6.55-6.57-.18-14.62-.28-29.24.06-43.86-.24-6.35-.22-12.7-.12-19.06 0-2-.09-4 1.36-5.63ZM395.59 62.87h24.81v24.8c-.15.23-.3.46-.44.69a3.62 3.62 0 0 1-1.84 1c-7.43.4-14.88 1.3-22.25-.61a3 3 0 0 1-1.2-1.1c-1.72-8.12-2.21-16.24.23-24.32Z'/%3E%3Cpath d='M420.4 87.67h23.94v23.94c-.79.79-1.55 1.71-2.77 1.76-7 .29-14 1.2-20.87-.69a3.11 3.11 0 0 1-1.23-1.13c-2.14-7.1-1.16-14.3-.74-21.49.07-1.06 1-1.67 1.67-2.39ZM371.65 38.92h23.94v23.95c-.79.79-1.55 1.7-2.77 1.75-7 .3-14 1.2-20.87-.68a3.18 3.18 0 0 1-1.23-1.13c-2.13-7.1-1.16-14.31-.73-21.49.06-1.07 1.01-1.67 1.66-2.4Z'/%3E%3Cpath class='cls-1' d='M371.65 38.92v23.95c-.9 1.57-2.44 1.81-4 2-1.85.17-3.7.15-5.55.15q-124.27 0-248.55-.06c-3.25 0-6.93 1.15-9.57-2.05V38.92Z'/%3E%3Cpath class='cls-2' d='M104 62.87h267.65c1.92 1.47 2 3.6 2.07 5.74.1 3.68-.12 7.36.14 11 .28 4.05 1.77 5.54 5.81 5.83 3.53.25 7.07 0 10.6.14 2 .07 4 .3 5.32 2.07 1.93 1.47 2 3.6 2.08 5.74.11 3.53-.09 7.07.15 10.6.23 3.35 2 5.16 5.38 5.38 3.82.24 7.64 0 11.45.15 2.15.06 4.28.15 5.75 2.07 1.92 1.47 2 3.6 2.07 5.75.1 3.67-.12 7.35.13 11 .28 4 1.78 5.54 5.82 5.83 3.53.25 7.07 0 10.6.14 2 .06 4 .29 5.32 2.06v48.74h24.8v72.69c-1.25 1.62-3 2-4.92 2-3 .11-6 .06-9 .08-7.41.08-8.77 1.36-8.79 8.67-.05 14.34 0 28.68 0 43 0 3.27-.09 6.54 0 9.8.21 5.2 1.79 6.74 7.07 6.93 3.4.12 6.81 0 10.22.09 2 .06 4 .29 5.35 2.06v24.8c-1.45 1.93-3.59 2-5.71 2.05-6.32.1-12.64.16-19-.11-8 .24-16 .29-24 0-6.61.26-13.22.21-19.84.11a11 11 0 0 1-4.52-.85 3.53 3.53 0 0 1-1.28-.81c-1.44-2.28-1.36-4.85-1.38-7.4 0-3.11.09-6.23-.06-9.34-.22-4.62-1.65-6.06-6.2-6.29a67.32 67.32 0 0 0-7.65 0c-4.07.28-5.5 1.71-5.74 5.85-.22 3.68 0 7.37-.11 11.05-.06 2.4-.11 4.83-1.82 6.81-4.08 1.73-8.36.85-12.56 1s-8.19.09-12.28-.15c-6.36.26-12.72.22-19.08.12a11 11 0 0 1-4.54-.85 3.47 3.47 0 0 1-1.28-.82c-1.36-2.15-1.35-4.57-1.37-7 0-3.26.09-6.53-.07-9.79-.22-4.59-1.67-6-6.26-6.25-2.4-.12-4.82-.09-7.23 0-5.4.14-6.83 1.53-7 6.83-.11 3.54 0 7.09-.08 10.63-.07 2.27-.19 4.55-1.89 6.36-2.12 1.1-4.43.92-6.69.92q-29.41.09-58.84 0c-2.41 0-4.85.08-7.08-1.09-2.15-1.51-2.23-3.84-2.31-6.12-.14-3.56 0-7.12-.09-10.68-.17-5.33-1.6-6.72-7-6.86-2.13-.06-4.27-.09-6.41 0-4.58.25-6 1.68-6.19 6.35-.18 5.55.05 11.11-.27 16.67.34 6.24.22 12.48.14 18.72a11 11 0 0 1-1 4.55 2.94 2.94 0 0 1-1 1.19c-7.82 2.28-15.77 1.2-23.67.74-2.42-.14-2.95-2.34-3.11-4.45-.3-4 0-8-.22-11.93-.23-5.19-1.87-6.82-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.27-5.36-2.05-1.78-1.35-2-3.28-2.07-5.32-.09-3.82.1-7.65-.12-11.46-.24-4.14-1.67-5.57-5.75-5.83a69.87 69.87 0 0 0-8.92 0c-4.09.26-5.51 1.69-5.75 5.83-.23 3.81 0 7.64-.12 11.46 0 2-.29 4-2.07 5.32-.52.48-1 1.22-1.62 1.35a70.79 70.79 0 0 1-21.6.17c-2.15-.26-2.53-2.44-2.67-4.35-.32-4.26 0-8.53-.23-12.78-.22-5.2-1.85-6.83-7-7-4.26-.17-8.52 0-12.78-.2-3.1-.17-4.62-1.69-4.78-4.79-.22-4 0-8-.21-11.93-.23-5.18-1.86-6.8-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.28-5.36-2.05a5.39 5.39 0 0 1-2-4.1c-.09-1.71-.14-3.41-.14-5.12V145.58c0-3.16-.87-6.66 2.07-9.22 1.37-1.78 3.35-2 5.37-2 3.14-.11 6.27 0 9.4-.11 5.22-.22 6.91-1.8 7-7 .18-10.54 0-21.07.1-31.61 0-2.78-.52-5.79 2.08-7.93 1.47-1.93 3.6-2 5.74-2.08 3.68-.1 7.36.13 11-.13 4-.29 5.54-1.78 5.82-5.83.26-3.66 0-7.34.14-11 .15-2.2.21-4.33 2.21-5.8ZM469.14 404.07h-24.8l-.71-.47a5.84 5.84 0 0 1-1.28-3.92c-.19-5.76-.23-11.51 0-17.26.07-1.4.18-2.84 1.39-3.84 7.57-2.59 15.3-1.31 23-1 1 0 1.66 1 2.37 1.65Z'/%3E%3Cpath class='cls-1' d='M469.14 379.27h-24.8c-1.66-.8-1.87-2.36-1.95-3.92-.26-5.33-.25-10.66 0-16a5.23 5.23 0 0 1 1.95-4h24.8Z'/%3E%3Cpath d='M469.14 330.53h-24.36c-.65-3.68-.88-58.4-.29-72.69h24.65Z'/%3E%3Cpath class='cls-1' d='M55.21 136.41v170.18H31.72a2.76 2.76 0 0 1-.3-.29.64.64 0 0 1-.15-.36V136.41Z'/%3E%3Cpath d='M55.21 306.59H78.7a1.67 1.67 0 0 1 .31.28.73.73 0 0 1 .14.36v23.15h24.21a4.48 4.48 0 0 1 .45.45.8.8 0 0 1 .14.36v24.14h24v23.94H79.16v-23.94H55.21Z' fill='%23a1a1a1'/%3E%3Cpath class='cls-1' d='M420.4 428v24.8h-195V428c.7-1.53 2.11-1.78 3.55-1.94a48.57 48.57 0 0 1 5.12-.17h177.66c2.95.11 6.36-.98 8.67 2.11ZM152.71 355.33h23.49a1.72 1.72 0 0 1 .31.29.7.7 0 0 1 .14.36v23.29h24.8c2 1.24 2 3.31 2 5.26q.24 19.08 0 38.16c0 2-.25 4-2 5.33h-24.8v-23.5a1.7 1.7 0 0 0-.3-.3.62.62 0 0 0-.36-.14h-23.28Z'/%3E%3Cpath class='cls-1' d='M127.91 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15v24.8Z'/%3E%3Cpath class='cls-2' d='M201.46 428v-48.73c1.48-1.95 3.64-2 5.79-2 6-.09 11.95-.17 17.92.12 7-.27 14-.31 20.93-.08 5.06.17 5.88 1.07 6.13 6.13.21 4-.06 8 .17 12 .27 4.69 1.92 6.25 6.65 6.56 11.72.77 13-.4 13-12.27 0-12.46 0-12.47 12.37-12.48h30.76c2.41 0 4.86-.13 7.15.88a3.53 3.53 0 0 1 1.27.77c2.32 4.12 1.32 8.63 1.39 13 .15 9.66.55 10.16 10.16 10.16h.85c7.68 0 8.7-1 8.75-8.55v-8.54a11.49 11.49 0 0 1 1.24-5.78 3 3 0 0 1 1.23-1 13.24 13.24 0 0 1 5.42-.92c14.31 0 28.63-.21 42.94.11 6.25-.24 12.51-.16 18.76-.12a14.32 14.32 0 0 1 6.23 1.14c1.93 1.13 1.76 3.1 1.84 4.9.2 4 0 7.93.14 11.88.2 5 1.73 6.58 6.68 6.8 3.26.15 6.51 0 9.77.1 2 .07 4 .29 5.33 2.06V428H201.46Z'/%3E%3Cpath class='cls-1' d='M79.16 87.67v48.74H55.21V87.67ZM104 62.87v24.8H79.16v-24.8ZM444.34 136.41H420.4v-24.8h23.94ZM395.59 87.67h-23.94v-24.8h23.94ZM420.4 111.61h-24.81V87.67h24.81Z'/%3E%3Cpath d='M322.9 379.27h-48.27a2.07 2.07 0 0 0-.31.27.68.68 0 0 0-.16.36v24h-23.67c.06.06-.06 0-.14-.14a.7.7 0 0 1-.14-.36v-24.15H225.4c-.46-.52-1.24-.92-1.33-1.59-.92-7.32-1.93-14.66.63-21.89l.7-.46h72.7c4-3.06 20.75-3.06 24.8 0 3.1 4.03 3.1 20.08 0 23.96ZM274.15 257.84H225.4V209.1c1.37-1.8 3.35-2 5.37-2q19-.19 38 0c2 0 4 .24 5.37 2 1.8 1.36 2 3.34 2 5.37q.19 19 0 38c.03 2.03-.14 4.01-1.99 5.37ZM395.59 257.84h-48.74V209.1c1.36-1.8 3.34-2 5.36-2q19-.19 38 0c2 0 4 .24 5.37 2 1.81 1.36 2 3.34 2 5.37q.21 19 0 38c.03 2.03-.18 4.01-1.99 5.37Z'/%3E%3Cpath class='cls-1' d='M395.59 257.84V209.1H420c.64 3.58.85 35.66.29 48.74Z'/%3E%3Cpath d='M444.34 404.07H420.4v-24.8c-3-4-3-19.92 0-23.94h23.94v48.74ZM395.59 379.27h-48.74c-.36-.45 0 .24-.35-.23-2.73-3.92-2.49-20 .35-23.71h24.8c4-3 19.93-3 23.94 0 3.04 4.02 3.04 19.93 0 23.94Z'/%3E%3Cpath class='cls-1' d='M274.15 209.1H225.4v-23.5c3.58-.64 35.65-.85 48.75-.3ZM395.59 209.1h-48.74v-23.5c3.58-.64 35.65-.85 48.74-.3ZM274.15 257.84V209.1h23.5c.64 3.58.85 35.65.3 48.74ZM322.9 355.33h-24.8V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15ZM395.59 355.33h-23.94V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29Z'/%3E%3Cpath d='M201.46 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29v24.8c-4.01 3-19.93 3-23.94-.03Z'/%3E%3Cpath class='cls-1' d='M127.78 136.53v23.73h-23.64v-23.73ZM346.85 355.33v23.94c-4 3-19.93 3-24 0v-23.94ZM152.83 111.49V87.76h23.64v23.73Z'/%3E%3Cpath d='M322.9 379.27h24v24.35a2.07 2.07 0 0 1-.29.3.67.67 0 0 1-.37.15H322.9Z'/%3E%3Cpath class='cls-1' d='M127.79 136.27V111.7h24.91v24.57ZM201.45 379.25v-23.91h23.94v23.91ZM395.57 379.25v-23.91h24.86v23.91Z'/%3E%3Cpath class='cls-4' d='M469.17 404.08v-73.61h23.92v73.61ZM469.17 257.76v-72.61h23.92v72.61Z'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'utopia.secretskelliessociety.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DEIP Token',\n symbol: 'DEIP',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iLjg5MiIgeT0iLjkxIiB3aWR0aD0iNDMuMTYxIiBoZWlnaHQ9IjQzLjE2MSIgcng9IjIxLjU4MSIgZmlsbD0iI0Y4RkVGQSIvPjxwYXRoIGQ9Ik05LjcgMTAuNmgxNC41MzRjNi41NjcgMCAxMS44OTIgNS4zMjMgMTEuODkyIDExLjg5IDAgNi41NjgtNS4zMjQgMTEuODkyLTExLjg5MiAxMS44OTJIOS43VjEwLjZaIiBmaWxsPSJ1cmwoI2EpIi8+PGNpcmNsZSBjeD0iMjIuNDczIiBjeT0iMjIuNDkxIiByPSI0Ljg0NSIgZmlsbD0iIzAwMCIvPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjE2IDExLjY5NTUgLTExLjkyNjc3IC4yMjAyOCAyMi42OTcgMjIuNjg3KSI+PHN0b3Agb2Zmc2V0PSIuMzU5IiBzdG9wLWNvbG9yPSIjRTlGRjAwIi8+PHN0b3Agb2Zmc2V0PSIuNzYiIHN0b3AtY29sb3I9IiMyNjM4MDAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'deip-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wootrade Network',\n symbol: 'WOO',\n icon:\n \"data:image/svg+xml,%3Csvg width='125' height='83' viewBox='0 0 125 83' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M102.422 0H122.958L113.203 30.9433H92.9243L102.422 0ZM75.982 29.4048L86.0788 53.3388L89.8436 41.0299H109.951L98.5713 78.0422C97.6301 80.9485 94.9776 82.9145 91.8972 82.9145H80.4314C77.6078 82.9145 75.0408 81.2049 73.9285 78.5551L61.2648 47.8682L48.8578 78.5551C47.831 81.2904 45.2641 83 42.3549 83H30.718C27.6376 83 24.9851 80.9485 24.0439 78.0422L0 5.85842e-05H20.1934L36.2797 53.3388L46.8898 29.3193C49.2857 23.3358 55.0185 19.4038 61.4359 19.4038C67.8533 19.4038 73.6718 23.3358 75.982 29.4048Z' fill='%2320252F'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usn',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' standalone='no'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='body_1' width='32' height='32'%3E%3Cg transform='matrix(1.3333334 0 0 1.3333334 0 0)'%3E%3Cimage x='0' y='0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA/tJREFUWIXtln9oVWUYxz/vOc67iWtNS9IkjcSui8RUsv40TbLfVoZE5R+li1JJioqYFlKI/bBQo+417A+pTSgkiH5p0ETIBIvaaosiRcRqYVM3t3Oe97zv0x+eO27jXt1kWoFfOJzDeX59npf3fc6B8/o/atNXOmKocgVnEmSt3vOvAaxr1stEdN5QAQwbbIAV7kO0dqgABrUCDR9rpVhdJqIO4KUdmjmnAEnCMon0Uom18/ltekXVSNafM4CVH+h4SVglkUdEDwELgoBHNu7RG846wIomb2xCXoQLpMdhRX8GrnWWwMDWV5v9mLMK0JuYx8QyX3ocNlZEtAWY3HPcE51w47z4rU9t1zM60qc9BYu36ExreQWArgTjNB5WEbaqMjE+AVZcZAzhyMBPA74ZUoBFeT/aJrwPZJAE0+sA9o2p9aPiKCYMg2dC53NrFlUdHWzhAQEk1mzGMAFVzFEBpxjDrrg3qg3CYOr6+pqDUT477tlc9iHgOqAW6AT2YGisXNp++HQAppzhttf9LcaYjwDoEUy3ABAYbtz+QvXOOHdVqLjVwNNAqXkQA+sM4ZpM/Q+uXJ2yG8cmZpVYEFFspyCxYkW7vHO7JV8XKK4RWN2v+ALgMNCUvl+tuEbJ15WtU9Iwe63WiWWWWLBdFht5rCgS66YP114YefVPAgsLrMBc4DmD+Q5oAT4vSrcw9R84gLXMEQtiQdLuJVa1lrfi3JQaoKHIvQK4tbK+fU2mvm1/EAY3pxDfFvk0pHEDAxDLlWIViRy2O0FEEdG25jdrDip6O1BdKk+Uy272zjdhOATcVWSvTuMGCJBQJYkpLo6I/pSap5cI2Zne64C7USabwPwB+CKfUnFlV6BDrCLdCTbWwtVd6KafuzXGfBnlspOAN4wJLq+sb9+lXh/tl79/XHkAm+hesWB7fd8KxHHfP0BHkWsvsCWztK0LuBd4V9X/GOWzNZycB8XqoIRKDqLEmU+d0yNBwmgTa+H1tAnzOg1cv7vItRl4OX1uArqA2iAIurzzyj+1mxIquQL7N5pem/CimLB4D4y3ksw0ATuAA6nrTcAvcX7KJOABjNlmCPLe6QxOzoiCDpjA7BgwAEDizIZ4+PBPxFI4hljxT2SWtFtgOVDo8IiqzgXGovq44n8D3QtMTO0KLM8sabOl6pQdxQCjFmuV6+h+jz9P3NmXTJl/bN8ln0W57ArgtaImfgdC4OKiFB5YWVnfvqFcjVMCAIy43xtz8NiDelwacH6SwhFVZketY1uiXHZOCnF1idCWtPgXp8p/WoCCLrrDmuO//jWdxF+jQEXIOz2tY52+PdXEzs4AnUXf19B8nQkr9pmHv++/Ec/rv6e/AQ/TFRmUSxQZAAAAAElFTkSuQmCC' width='24' height='24'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PembRock',\n symbol: 'PEM',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIj48cGF0aCBmaWxsPSIjMUUxRTFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMTMuMiAxNzAuNDJhODMuNTEgODMuNTEgMCAwIDAgNzAuNy04Mi42IDgzLjUgODMuNSAwIDAgMC01Ljc4LTMwLjYxbDEzLjY4LTIzLjg3aC0yOC4wOGE4My4xIDgzLjEgMCAwIDAtNjMuMi0yOS4wNiA4My4xIDgzLjEgMCAwIDAtNjMuMiAyOS4wNkg4LjU4TDIyLjcgNTcuNzhhODMuNSA4My41IDAgMCAwLTUuNTUgMzAuMDUgODMuNTEgODMuNTEgMCAwIDAgNzAuNiA4Mi41N2wxMi43NyAyMi4xMSAxMi42Ny0yMi4xWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0VBRUNFRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLjUzIDcuOTJBNzguNjYgNzguNjYgMCAwIDAgNDAuNjEgMzUuNmwtMS4xOCAxLjE3SDE2LjY1TDI4LjIzIDU3LjFsLS42OCAxLjc3Yy0zLjQgOC44Ny02LjA3IDE4LjEtNi4wNyAyOC4yIDAgMzkuNzcgMjkuMDMgNzMuMTQgNjYuOTQgNzlsMS44Ni4zIDEwLjM0IDE3Ljc5IDEwLjA2LTE3Ljc4IDEuODctLjNjMzcuOTUtNS44MSA2Ny4wMy0zOC44IDY3LjAzLTc4LjYxIDAtMTAuMy0yLjI0LTIwLjEzLTUuNzgtMjkuMTVsLS42OS0xLjc4IDExLjE4LTE5Ljc3aC0yMi42NWwtMS4xOC0xLjE3YTc4LjY2IDc4LjY2IDAgMCAwLTU5LjkzLTI3LjY3Wk0zNS44NCAyOS4wNEE4Ni40OCA4Ni40OCAwIDAgMSAxMDAuNTQgMGE4Ni40OCA4Ni40OCAwIDAgMSA2NC42OCAyOS4wNGgzMi42N0wxODEuODEgNTcuMmMzLjQ2IDkuNDMgNS42NSAxOS42MyA1LjY1IDMwLjI2IDAgNDMuMTItMzEuMDIgNzguOTUtNzEuODMgODYuMTRMMTAwLjY1IDIwMGwtMTUuMy0yNi40MmMtNDAuNzctNy4yMy03MS43NC00My40NC03MS43NC04Ni41MyAwLTEwLjQgMi42Mi0xOS45OSA1LjkzLTI5LjI1TDMgMjkuMDRoMzIuODRaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS44NSA0NS40MSA2OC43NSAxMjAuNDIgOC4wNi0xNC4xMi0yNy40Ny00OC4xM2gyNC4zTDcyLjMzIDQ1LjRIMzEuODVabTQ5LjE5IDAgNDQuMTUgNzcuMzIgNy42Ny0xMy40NC0yOC4xOC00OS4zNGg4LjM3bDIzLjk5IDQyLjAyTDE0NSA4OGwtMTYuMDItMjguMDVoMTYuNDJsLTQuNDMgNy43NiA3LjgxIDEzLjcgMjAuNTctMzZIODEuMDRaTTU2LjMgNTkuOTVsMTYuNjIgMjkuMTFoOC42N0w2NC45NyA1OS45NUg1Ni4zWk00NC4yIDg0LjZhNTYuNjUgNTYuNjUgMCAwIDAgMzEuMDUgNTQuMTJsNi4zMiAxMS4wMWE2NC40NSA2NC40NSAwIDAgMS00NS4yOS02MS43YzAtNC45Ny41Ni05LjggMS42LTE0LjQ0bDYuMzMgMTEuMDJabTc5LjY1LTQ3LjlhNTUuNDYgNTUuNDYgMCAwIDAtMjMuNjYtNS4yNyA1NS40NSA1NS40NSAwIDAgMC0yMy42NSA1LjI2SDYxLjVhNjMuMjYgNjMuMjYgMCAwIDEgMzguNy0xMy4xNmMxNC41NCAwIDI3Ljk1IDQuOSAzOC43IDEzLjE2aC0xNS4wNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGNjgyMUYiIGQ9Ik00NC4xIDg4LjAyYzAtMS4xNC4wNC0yLjI4LjEtMy40MWwtNi4zLTExLjAyYTY1LjI2IDY1LjI2IDAgMCAwLTEuNiAxNC40MyA2NC40NSA2NC40NSAwIDAgMCA0NS4yOCA2MS43MWwtNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMS0zMS4xNS01MC43Wm0xMTMuMTIgMGMwLTEuMTQtLjItMi4yOC0uMjctMy40MWw2LjI1LTExLjAyYTY1LjMxIDY1LjMxIDAgMCAxIDEuODQgMTQuNDMgNjQuNDUgNjQuNDUgMCAwIDEtNDUuMjkgNjEuNzFsNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMCAzMS4xNi01MC43WiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.pembrock.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Atocha Coin',\n symbol: 'ATO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMzYuODggMTM2Ljg4Ij48Y2lyY2xlIGN4PSI2OC40NCIgY3k9IjY4LjQ0IiByPSI2OC40NCIgc3R5bGU9ImZpbGw6Z29sZCIgZGF0YS1uYW1lPSJMYXllciAyIi8+PGcgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBkPSJNNzEuNjUgNzkuNXYyNC40MWMwIDEuMjcuMjQgMS40OSAxLjQ3IDEuMTcgMS4wOC0uMjkgMi4xMy0uNjggMy4xOC0xYTExLjU4IDExLjU4IDAgMCAwIDEuNS0uNTljMS40MS0uNzIgMi44NC0xLjQgNC4xOC0yLjIyYTI1LjU5IDI1LjU5IDAgMCAwIDUuNTktNC42NGMxLjM2LTEuNTIgMi41NC0zLjIgMy43OC00LjgyLjMzLS40My4xOS0uNzItLjM1LS43MS0uODYgMC0xLjcyLjEzLTIuNTguMjItLjQ5IDAtMSAuMTMtMS40Ny4xOWEuMzkuMzkgMCAwIDEtLjQ4LS4zN2wtLjMzLTJhMS41NSAxLjU1IDAgMCAwLS4wNy0uNDIgNS43OCA1Ljc4IDAgMCAxLS4zMy0yLjEzYy0uMDktMS0uMjUtMS45NC0uMzQtMi45Mi0uMDctLjc4LjA1LS44NC44My0uOTQgMS41OS0uMTkgMy4xOC0uNDQgNC43Ny0uNjVsMi43OS0uMzcgMS4xNC0uMTUgNC44Ny0uNzRjLjI3IDAgLjU0LS4wNS44LS4wOWwyLjE4LS4zNWEyLjc1IDIuNzUgMCAwIDEgLjU1LS4wOC40Ny40NyAwIDAgMSAuMzUuMTcgOS44NSA5Ljg1IDAgMCAxIC40NCAxLjFjLjI0LjY5LjQ2IDEuMzkuNjkgMi4wOGEyLjY5IDIuNjkgMCAwIDEgLjA5LjI4Yy4xNy44My4zMyAxLjY2LjUxIDIuNDkuMjYgMS4xNC41NCAyLjI3LjgxIDMuNC4zMSAxLjMxLjYgMi42My45MyAzLjkzLjE5Ljc1LjQ1IDEuNDkuNjUgMi4yNHMuNDUgMS44MS42NiAyLjcxYS40LjQgMCAwIDEtLjE0LjM0IDMuMzkgMy4zOSAwIDAgMS0uODEuMzVjLTEuMzYuMzYtMi43Mi42OS00LjA5IDFsLTIuNTEuNjVjLS42My4xNy0uNzcuMDgtLjkyLS41NHEtLjM5LTEuNTktLjgyLTMuMTdjMC0uMTQtLjIxLS4zNC0uMzItLjM0YS45MS45MSAwIDAgMC0uNTkuMjRjLS4yOS4zMy0uNDguNzQtLjc1IDEuMDgtLjkzIDEuMTgtMS45IDIuMzMtMi44MyAzLjUxYTMwIDMwIDAgMCAxLTQuNiA0LjMgMzkuNCAzOS40IDAgMCAxLTMuNzQgMi41OCAyNi41OSAyNi41OSAwIDAgMS0yLjcxIDEuNTljLTEuMDguNTMtMi4yIDEtMy4zMiAxLjQycy0yIC43OC0zLjA3IDEuMTFjLS43MS4yMy0xLjQ1LjM3LTIuMTcuNTUtLjIuMDUtLjQuMTQtLjYuMjFhNC41MSA0LjUxIDAgMCAxLS40NC4xNmMtLjYxLjE1LTEuMjMuMy0xLjg1LjQzYS42Mi42MiAwIDAgMC0uNTMuN2MwIC43OCAwIDEuNTctLjA2IDIuMzRhNS4yOCA1LjI4IDAgMCAxLS44IDIuNDkgMy44OCAzLjg4IDAgMCAxLTEuNTIgMS4zMiAxMi41NyAxMi41NyAwIDAgMS0xLjU0LjcxIDEuMjQgMS4yNCAwIDAgMS0uNzguMDcgNS44NiA1Ljg2IDAgMCAxLTMuNzMtMi45MiA4IDggMCAwIDEtLjQtMi42MiAxMCAxMCAwIDAgMSAwLTEuMjguNjcuNjcgMCAwIDAtLjYxLS43NGMtLjc1LS4xNC0xLjUtLjI2LTIuMjQtLjQ0cy0xLjU3LS40NC0yLjM1LS42OGMtLjUtLjE1LTEtLjI4LTEuNS0uNDctMS42My0uNjEtMy4yOC0xLjE5LTQuODktMS44NmExNS4xMiAxNS4xMiAwIDAgMS0yLjI3LTEuMjljLTEuMzgtLjg5LTIuNzgtMS43Ny00LjEtMi43Ni0xLS43Ni0xLjkyLTEuNjgtMi44OC0yLjUyYTM2LjMzIDM2LjMzIDAgMCAxLTQuODEtNS42OGMtLjU4LS43Ny0xLjEtMS41OC0xLjY4LTIuMzVhLjgxLjgxIDAgMCAwLS42LS4yOWMtLjE2IDAtLjM3LjI1LS40My40My0uMzEgMS0uNTcgMi4wNy0uODYgMy4xMXEtLjE5LjctLjQgMS4zOWMtLjExLjM1LS4zOS4zNC0uNjYuMjgtLjU4LS4xMy0xLjE2LS4yOC0xLjczLS40My0xLjYyLS40Mi0zLjI0LS44NC00Ljg2LTEuMjhhNi41NSA2LjU1IDAgMCAxLTEtLjQuMzQuMzQgMCAwIDEtLjEyLS4zYy4yMS0xIC40MS0xLjkzLjY2LTIuODkuMzMtMS4yNC43Mi0yLjQ3IDEtMy43Mi4zOC0xLjQ4LjcyLTMgMS4wOC00LjQ3LjIyLS44OS40Ni0xLjc4LjY4LTIuNjguMTgtLjcyLjM0LTEuNDUuNTItMi4xN3MuMzItMS4yMy41Mi0xLjgzLjM4LS41NS44OC0uNDJhNi43NCA2Ljc0IDAgMCAwIC45Mi4xNWMxLjIuMTUgMi4zOS4yOCAzLjU5LjQ0bDUuNi43NSA0LjYxLjU3Yy44NS4xMSAxLjY5LjI1IDIuNTMuMzYuMyAwIC40Ny4xOS40NC41MXYuNDNjLS4xMyAxLjI0LS4yMiAyLjQ5LS40IDMuNzJzLS40NSAyLjM4LS42NiAzLjU4Yy0uMDYuMzQtLjIzLjQ3LS41NS40MmwtMi4xNC0uMzVhMi4yIDIuMiAwIDAgMC0uNDcgMGMtLjQgMC0uNTcuMjItLjQyLjU5YTcuOTIgNy45MiAwIDAgMCAuNzEgMS4zNCAyNC45NCAyNC45NCAwIDAgMCAzLjUyIDQuMjFjLjkxLjg4IDEuODIgMS43NiAyLjc4IDIuNTdhMTkgMTkgMCAwIDAgNC4yOSAyLjY5YzEuMTEuNTEgMi4yMiAxIDMuMzcgMS40N3MyLjM4LjggMy41OCAxLjE4YTIgMiAwIDAgMCAuNTEuMDUuNDcuNDcgMCAwIDAgLjUyLS40IDIuOTEgMi45MSAwIDAgMCAuMDctLjU1Yy4wNy0zLjYuMTgtNy4xOS4yLTEwLjc5LjA1LTguMzIuMDYtMTYuNjQuMDgtMjVWNTQuODVjMC0uOS0uMi0xLjA5LTEuMS0xLjA5aC0xNmExMy41MSAxMy41MSAwIDAgMS0yLjc4LS4zOSAxLjMxIDEuMzEgMCAwIDEtLjczLS43IDMuNDUgMy40NSAwIDAgMS0uMzMtMS4zNXYtNC4zMWEzLjQ1IDMuNDUgMCAwIDEgLjMxLTEuMSAxIDEgMCAwIDEgLjk1LS42M2MxLjMtLjExIDIuNi0uMjQgMy45MS0uMjYgMy42MyAwIDcuMjUgMCAxMC44OC0uMDVoMy44M2MuNjYgMCAxLS4yNyAxLS45M1YzMi41NmExLjQzIDEuNDMgMCAwIDAtLjc1LTEuMzQgMTAuNDkgMTAuNDkgMCAwIDEtMy41NS0zLjU2IDcuNTcgNy41NyAwIDAgMS0xLjI5LTMuN2MtLjA2LTEuMTkgMC0yLjM5IDAtMy41OEE4LjM1IDguMzUgMCAwIDEgNTguNDEgMTdhOS41IDkuNSAwIDAgMSA0LTMuNzYgNi41MyA2LjUzIDAgMCAxIDIuNjgtMWMuNzMtLjA4IDEuNDQtLjMgMi4xNy0uMzRhNi4xNiA2LjE2IDAgMCAxIDEuNDIuMjJjLjEzIDAgLjI1LjA4LjM3LjA5YTEwLjM1IDEwLjM1IDAgMCAxIDUgMi4zNSA3LjYyIDcuNjIgMCAwIDEgMi4xOCAyLjhjLjQ2LjkzLjggMS45MyAxLjE3IDIuOWEyLjEyIDIuMTIgMCAwIDEgLjEuNjd2MS40NWE4LjEyIDguMTIgMCAwIDEtLjcxIDMuNTUgMTIuMzEgMTIuMzEgMCAwIDEtMi4xNyAzLjYzIDUuOCA1LjggMCAwIDEtMS45MyAxLjU3IDEuNjggMS42OCAwIDAgMC0xLjA2IDEuNzR2MTEuMjZjMCAuNjIuMjkuODYuOTIuODhIODUuNjljMS43NiAwIDMuNTIuMTQgNS4yOC4xNmExLjgyIDEuODIgMCAwIDEgMS42OCAxLjg1djQuNjFhMi4zMyAyLjMzIDAgMCAxLS41NyAxLjQ0IDEuMzUgMS4zNSAwIDAgMS0uNy40MSAyMC4wNyAyMC4wNyAwIDAgMS01LjE4LjM0SDcyLjY3Yy0uOTEgMC0xLjA3LjE2LTEuMDcgMS4wNnEuMDUgMTIuMzQuMDUgMjQuNjJabS00LjQ5LTUxLjU1YTUuNzQgNS43NCAwIDAgMCA1LjcxLTUuNjQgNS44MiA1LjgyIDAgMCAwLTYuMDgtNS42M2MtMi41Mi4wNS01LjExIDIuODMtNS4wNyA1LjcxYTUuNiA1LjYgMCAwIDAgNS40NCA1LjU2WiIvPjxwYXRoIGQ9Ik04MC45NCA3Ny41YTIwIDIwIDAgMCAxLTIuNjktLjM3IDcuMzMgNy4zMyAwIDAgMS00LjM0LTMgNy43IDcuNyAwIDAgMS0xLTYuMjQgNy43OCA3Ljc4IDAgMCAxIDMuNzYtNSAxMC4yNSAxMC4yNSAwIDAgMSA2LjM4LTEuNTEgOC4xIDguMSAwIDAgMSA2LjE3IDMuNEE3LjY1IDcuNjUgMCAwIDEgOTAuNTcgNzFhNi40NiA2LjQ2IDAgMCAxLTIuMTQgMy40NiAxMi4yNyAxMi4yNyAwIDAgMS0zLjQ2IDIuMjEgMTAuNjQgMTAuNjQgMCAwIDEtNC4wMy44M1ptMy01LjY2YTYuNjkgNi42OSAwIDAgMCAwLS44NSAyMi41IDIyLjUgMCAwIDAtMS4xNy00Ljc3IDEuODMgMS44MyAwIDAgMC0xLjQ4LTEuMzFjLTEuMjYtLjEzLTEuOTIgMS0xLjggMi4xOWEyMy43MiAyMy43MiAwIDAgMCAuNjQgMy40IDEzLjA3IDEzLjA3IDAgMCAwIC44NiAyLjM5IDEuNDggMS40OCAwIDAgMCAyLjMzLjU2IDEuODEgMS44MSAwIDAgMCAuNjEtMS42M1pNNDMuOTQgNzMuMzFhMy44NyAzLjg3IDAgMCAxIDItMy42QTguOTEgOC45MSAwIDAgMSA1MSA2OC4zOWE1LjU5IDUuNTkgMCAwIDAgLjYgMCAxIDEgMCAwIDAgMS0xIDEwIDEwIDAgMCAwLS4yNy0yLjU2IDEuMzMgMS4zMyAwIDAgMC0yLjM0LS41NGMtLjU3LjU1LTEgMS4yMS0xLjU3IDEuNzlhMi41NiAyLjU2IDAgMCAxLTIuMjIuOTQgMS40NyAxLjQ3IDAgMCAxLTEuMjEtMiAzLjkzIDMuOTMgMCAwIDEgMi0yLjA5IDEzLjI2IDEzLjI2IDAgMCAxIDIuNTctMS4wOCAxMC4zMSAxMC4zMSAwIDAgMSA1LjEzLS4yNyA3LjM1IDcuMzUgMCAwIDEgMi45MyAxLjM2QTMuMzggMy4zOCAwIDAgMSA1OSA2NS4zOWMuMDcgMS4yNy4wOCAyLjU0LjE1IDMuODEuMDYgMSAuMTYgMiAuMjYgM2ExLjIzIDEuMjMgMCAwIDAgLjg4IDEuMDVjLjY3LjI3Ljc0LjQ2LjU3IDEuMTRhMy44IDMuOCAwIDAgMS0yIDIuMzUgNC4zOCA0LjM4IDAgMCAxLTMuNjguNDUgMy4zIDMuMyAwIDAgMS0xLjE1LS42OWMtLjc0LS42OC0uODItLjc1LTEuNjItLjE5YTYuMjEgNi4yMSAwIDAgMS00LjY5IDEgNC4yMSA0LjIxIDAgMCAxLTMuMS0xLjgxIDMuMSAzLjEgMCAwIDEtLjY4LTIuMTlabTcuNy0yLjkxYTIgMiAwIDAgMC0xLjE3IDMuNDMgMS4yMiAxLjIyIDAgMCAwIDEuNzQtLjI0IDIuOSAyLjkgMCAwIDAgLjI2LTIuNjIuNzYuNzYgMCAwIDAtLjgyLS41N1oiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'atocha-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'SeatlabNFT',\n symbol: 'SEAT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='32px' height='32px' viewBox='0 0 32 32' style='enable-background:new 0 0 32 32;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23050035;%7D .st1%7Bfill:url(%23SVGID_1_);%7D%0A%3C/style%3E%3Cg id='Layer_1'%3E%3Ccircle class='st0' cx='16' cy='16' r='16'/%3E%3C/g%3E%3Cg id='Isolation_Mode'%3E%3ClinearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='6.2375' y1='16' x2='25.7625' y2='16'%3E%3Cstop offset='0' style='stop-color:%2300C2FF'/%3E%3Cstop offset='1' style='stop-color:%230067FF'/%3E%3C/linearGradient%3E%3Cpath class='st1' d='M14,6.1c-0.3,0-0.5,0.1-0.8,0.2L8.1,9.4L7.8,9.6L7.2,10c-0.5,0.3-0.9,0.6-0.9,1.7v4.1c0,0.9,0.3,1.6,0.9,1.9 l6.2,3.8c1,0.6,2.3-0.1,2.3-1.3v-2.9c0-0.7-0.4-1.4-1-1.8l-2.9-1.8l3-1.9c0.5-0.3,0.8-0.9,0.8-1.5V7.6C15.6,6.7,14.8,6.1,14,6.1z M14.7,10.4c0,0.3-0.2,0.6-0.4,0.8l-3.4,2.1l-1.8-1.1c-0.5-0.3-0.8-0.5-1.1-0.8c-0.3-0.3-0.2-0.8,0.2-1c0,0,0,0,0,0L13.7,7 C13.8,7,13.9,6.9,14,6.9c0.3,0,0.7,0.3,0.7,0.7V10.4z M24.9,14.3l-6.2-3.8c-1-0.6-2.3,0.1-2.3,1.3v2.9c0,0.7,0.4,1.4,1,1.8l2.9,1.8 l-3,1.9c-0.5,0.3-0.8,0.9-0.8,1.5v2.8c0,0.9,0.8,1.6,1.6,1.6c0.3,0,0.5-0.1,0.8-0.2l5.1-3.1l0.4-0.2l0.6-0.4 c0.5-0.3,0.9-0.6,0.9-1.7v-4.1C25.8,15.3,25.4,14.6,24.9,14.3z M23.8,21.6C23.8,21.6,23.8,21.6,23.8,21.6L18.3,25 c-0.1,0.1-0.2,0.1-0.4,0.1c-0.3,0-0.7-0.3-0.7-0.7v-2.8c0-0.3,0.2-0.6,0.4-0.8l3.4-2.1l1.8,1.1c0.5,0.3,0.8,0.5,1.1,0.8 C24.3,20.9,24.2,21.4,23.8,21.6z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 5,\n id: 'token.stlb.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Burrow Token',\n symbol: 'BRRR',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.burrow.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'FUSOTAO',\n symbol: 'TAO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTU1LjQxIDI5LjYzNS03LjI5NiA2LjE0N2ExLjY1OSAxLjY1OSAwIDAgMS0uNjc1IDIuMzlsMS44NDggOS41NDZjLjgwNS0uMjA4IDEuNTM2LS43MDIgMi4wODktMS41MzlhMTIuODE2IDEyLjgxNiAwIDAgMCAxLjk4Mi01LjI4OWMuMTctMS4yNTEuNTY0LTIuNDczIDEuMTU2LTMuNTg2YTEyLjgzMyAxMi44MzMgMCAwIDAgMS40ODItNS40NjljLjAzNS0uODYzLS4xODYtMS42LS41ODctMi4yeiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00NS4zNDIgMzUuOTA2YTEuNjM3IDEuNjM3IDAgMCAxIDIuMTgzLS42M2w3LjM3OC02LjE5M2MtMS4yODMtMS4xOTMtMy40NTktMS41NDctNS40NDUtLjkwM2wtMTIuNzQyIDQuMTM1Yy0uMzEuMS0uNTUzLjI5Ny0uNzE2LjU0Mmw5LjM0MiAzLjA0OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNNDMuODkyIDQ1LjM3YzEuMTQ5IDEuNTkyIDIuOTQ3IDIuNTcyIDQuNTk5IDIuNTI0bC0xLjg0NC05LjQ4N2ExLjY0NCAxLjY0NCAwIDAgMS0xLjUzOC0xLjY4bC05LjM2NC0zLjA1NWMuMDA0LjI2OC4wODcuNTQuMjYuNzhsNy44ODcgMTAuOTE5eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Im00MS40MSA1My4yMjMtOC4wNTYtNS4wOTJhMS42MzEgMS42MzEgMCAwIDEtMi40NjQuMDkxbC04LjQzOCA0LjcyMWMuNDQ0LjcwOCAxLjEzNiAxLjI1NiAyLjA5NyAxLjUyNyAxLjc5NC41MDYgMy43NC42MDMgNS42MDUuMjY1YTEwLjUzNiAxMC41MzYgMCAwIDEgMy43NDIgMGMxLjg3LjMzOSAzLjgyMS4yNCA1LjYxOS0uMjcuODI2LS4yMzMgMS40NTMtLjY3MyAxLjg5NS0xLjI0MnoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNMzIuMzg5IDQ1LjQzOGExLjY0NiAxLjY0NiAwIDAgMSAxLjI3IDEuODlsOC4xNDUgNS4xMzRjLjczNC0xLjU5NC4zOTctMy43ODItLjgyNy01LjQ4TDMzLjEyMyAzNi4wOWExLjM1NCAxLjM1NCAwIDAgMC0uNzM0LS41MTZ2OS44NjR6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTIyLjk3IDQ3LjAxN2MtMS4xNTEgMS41ODgtMS41MjQgMy42MDgtLjk2OSA1LjE3bDguNDItNC42OTJhMS42NDggMS42NDggMCAwIDEgMS4xMTctMS45ODd2LTkuODg0Yy0uMjUzLjA4Ny0uNDg1LjI1LS42NTkuNDlsLTcuOTA4IDEwLjkwM3oiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTUuODg2IDM1Ljc4Mi03LjI5NS02LjE0N2MtLjQwMS42LS42MjIgMS4zMzctLjU4NyAyLjJhMTIuODMgMTIuODMgMCAwIDAgMS40ODIgNS40NjkgMTAuNzUxIDEwLjc1MSAwIDAgMSAxLjE1NiAzLjU4NmMuMjU4IDEuODkyLjk1IDMuNzI3IDEuOTgyIDUuMjkuNTUzLjgzNiAxLjI4NCAxLjMzIDIuMDg5IDEuNTM4bDEuODQ4LTkuNTQ2YTEuNjU5IDEuNjU5IDAgMCAxLS42NzUtMi4zOXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTUuNTY4IDQ3Ljg1NmMxLjY0OS4wNDggMy40NDUtLjkzMiA0LjU5Mi0yLjUyMWw3Ljg3NS0xMC45MDhhMS4zNiAxLjM2IDAgMCAwIC4yNi0uNzhsLTkuMzUgMy4wNTJhMS42NDcgMS42NDcgMCAwIDEtMS41MzYgMS42NzlsLTEuODQgOS40Nzh6IiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0iTTE2Ljc0NSAzNS4xOTNhMS42NCAxLjY0IDAgMCAxIDEuOTI3Ljc0bDkuMzU2LTMuMDUyYTEuMzU3IDEuMzU3IDAgMCAwLS43MTctLjU0M2wtMTIuNzYxLTQuMTRjLTEuOTktLjY0NC00LjE2OC0uMjktNS40NTMuOTA1bDcuMzkgNi4yYy4wOC0uMDQ0LjE2Ny0uMDguMjU4LS4xMXoiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtNDAuNTcxIDE4LjA5LTMuNTQ2LTguODkyYy42ODktLjE5OCAxLjQ1My0uMTgyIDIuMjU4LjExOGExMi42NSAxMi42NSAwIDAgMSA0LjcwMyAzLjExIDEwLjYxNCAxMC42MTQgMCAwIDAgMy4wMjcgMi4yMTYgMTIuNjc2IDEyLjY3NiAwIDAgMSA0LjM4IDMuNTM1Yy42MTkuNzg4Ljg2IDEuNjQxLjgwNiAyLjQ3N2wtOS41OC0xLjE3OWExLjY0OSAxLjY0OSAwIDAgMC0uNjYyLTEuMTI2IDEuNjI2IDEuNjI2IDAgMCAwLTEuMzg2LS4yNnoiIGZpbGw9InVybCgjaikiLz48cGF0aCBkPSJNMzkuNzY0IDE4Ljc5Yy0uNDYzLjY0LS40IDEuNS4xMDQgMi4wNjZsLTUuNzczIDcuOThhMS4zNjMgMS4zNjMgMCAwIDEtLjI5Mi0uODVsLjAyMS0xMy40NDljLjAwNC0yLjA5NiAxLjAxMi00LjA2NCAyLjUzOC00LjkybDMuNTg1IDguOTZhMS42NiAxLjY2IDAgMCAwLS4xODMuMjEzeiIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Ik01Mi4xNiAyMS41NDhjLS40NjUgMS41OTEtMS45NSAzLjAwNi0zLjgxMiAzLjYxbC0xMi43ODIgNC4xNTVhMS4zNTIgMS4zNTIgMCAwIDEtLjgyLjAwOGw1Ljc4OC03Ljk5NmExLjY0IDEuNjQgMCAwIDAgMi4wNjctLjk0OWw5LjU1OSAxLjE3MnoiIGZpbGw9InVybCgjbCkiLz48cGF0aCBkPSJtMjcuNDYgOS4xOTgtMy41NDcgOC44OTJhMS42MjYgMS42MjYgMCAwIDAtMS4zODYuMjYgMS42NSAxLjY1IDAgMCAwLS42NjIgMS4xMjVsLTkuNTggMS4xNzljLS4wNTMtLjgzNi4xODctMS42OS44MDYtMi40NzdhMTIuNjc3IDEyLjY3NyAwIDAgMSA0LjM4LTMuNTM0IDEwLjYxNiAxMC42MTYgMCAwIDAgMy4wMjctMi4yMTcgMTIuNjUgMTIuNjUgMCAwIDEgNC43MDMtMy4xMWMuODA1LS4zIDEuNTY5LS4zMTYgMi4yNTgtLjExOHoiIGZpbGw9InVybCgjbSkiLz48cGF0aCBkPSJNMTYuMTk1IDI1LjE0M2MtMS44Ni0uNjA1LTMuMzQyLTIuMDE3LTMuODA2LTMuNjA3bDkuNTQ0LTEuMTdhMS42MzYgMS42MzYgMCAwIDAgMi4wNjQuOTQ4bDUuNzggNy45ODdhMS4zNDkgMS4zNDkgMCAwIDEtLjgxOS0uMDA4bC0xMi43NjMtNC4xNXoiIGZpbGw9InVybCgjbikiLz48cGF0aCBkPSJNMjQuNjM5IDIwLjg2N2ExLjY1NCAxLjY1NCAwIDAgMC0uMDc5LTIuMjgxbDMuNTktOC45N2MxLjUzLjg1NyAyLjUzOSAyLjgyOCAyLjU0MiA0LjkyNmwuMDIxIDEzLjQ2MmMuMDAxLjMyNy0uMTEuNjItLjI5Mi44NTJsLTUuNzgyLTcuOTg5eiIgZmlsbD0idXJsKCNvKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjgiIHkxPSI0My40NjciIHgyPSIxNi4zOTkiIHkyPSIzNy45MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjOUEwQTBFIi8+PHN0b3Agb2Zmc2V0PSIuODY5IiBzdG9wLWNvbG9yPSIjREExODFGIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI0NS45MjYiIHkxPSIzNi4wNTMiIHgyPSI1MS4wNjgiIHkyPSI0My41NjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii40NjQiIHN0b3AtY29sb3I9IiNFQTMwMkEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNDNTE1MUIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjQyLjk2MyIgeTE9IjEyLjIzIiB4Mj0iMzMuODY1IiB5Mj0iMjcuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjRjlCMTk4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUUxQzI1Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImsiIHgxPSI0Mi45NjMiIHkxPSIxMi4yMyIgeDI9IjMzLjg2NSIgeTI9IjI3LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5QjE5OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFMUMyNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iNDIuOTYzIiB5MT0iMTIuMjMiIHgyPSIzMy44NjUiIHkyPSIyNy4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNGOUIxOTgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'fusotao-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3847L21.3848 17.1421L19.3669 15.1243C18.5576 17.0302 17.0303 18.5576 15.1243 19.3669L17.1421 21.3847ZM9.4329 19.5792C7.45318 18.9089 5.82112 17.4847 4.87847 15.6484L3.24263 17.2842L7.48527 21.5269L9.4329 19.5792ZM4.63307 8.87568C5.4424 6.96973 6.96977 5.44237 8.87573 4.63305L7.24263 2.99995L2.99999 7.24259L4.63307 8.87568ZM15.6484 4.87847L17.3848 3.14209L21.6274 7.38473L19.5792 9.4329C18.9089 7.45318 17.4847 5.82112 15.6484 4.87847Z' fill='%232FA8AF'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E%0A\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.stader-labs.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DISCOVOL TOKEN',\n symbol: 'DISC',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGU+LnN0MHtmaWxsOiNmOTcxMTZ9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDYuMSAxOC43djEwNS42czIxLjMtNS41IDMzLjEtMjljMCAwIDEyLjctMjIuMi0uOS00OS43IDAgMC0xMC4xLTIwLjktMzIuMi0yNi45eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDUuNyA5LjRjMzEuMSAxOC4zIDM0LjUgNDguNCAzNC41IDQ4LjQgNi40IDM3LjktMTcgNjAuMy0xNyA2MC4zLTMxLjQgMzQuNS03My40IDIwLjMtNzMuNCAyMC4zIDMwLjYtOS4zIDQxLjktMzUuMSA0MS45LTM1LjEgMTYuNi0zNS41IDAtNjMuMiAwLTYzLjJDNzcgOS43IDQ3LjMgMy45IDQ3LjMgMy45YzMyLjQtMTEuMyA1OC40IDUuNSA1OC40IDUuNXptNyAxMS41UzExMS4xIDM4IDk0LjcgMzhjMCAwIDE2IDIuOCAxNy41IDE4LjggMCAwIDEuNC0xNy41IDE4LjItMTguMy0uMSAwLTE4LjUtMS41LTE3LjctMTcuNnpNMjUuNiAxNS45aDUuOXYxMTAuOEgyN1M4IDExMiAyLjIgODkuMmMwIDAtNy43LTI2LjIgNS01MC40LjEuMSA5LjUtMTcgMTguNC0yMi45eiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 14,\n id: 'discovol-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Stader',\n symbol: 'SD',\n icon:\n \"data:image/svg+xml,%3Csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z' fill='%236259D4'/%3E%3Cpath d='M126.852 191.869L126.822 181.088L153.98 165.105L153.886 133.025L163.667 127.882L164.056 170.723L126.852 191.869Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M153.98 165.105L126.822 181.088L126.852 191.869L164.056 170.723L163.667 127.882L153.886 133.025L153.98 165.105ZM154.207 133.218L154.3 165.104C154.301 165.218 154.241 165.323 154.143 165.381L127.143 181.271L127.171 191.32L163.735 170.538L163.352 128.41L154.207 133.218Z' fill='%236259D4'/%3E%3Cpath d='M134.785 112.611L145.906 106.314L173.184 123.396L173.334 175.037L164.063 170.734L163.673 127.894L134.785 112.611Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.673 127.894L164.063 170.734L173.334 175.037L173.184 123.396L145.906 106.314L134.785 112.611L163.673 127.894ZM135.451 112.601L163.823 127.611C163.927 127.666 163.992 127.773 163.993 127.891L164.381 170.529L173.013 174.535L172.865 123.574L145.898 106.687L135.451 112.601Z' fill='%236259D4'/%3E%3Cpath d='M126.443 53.3335L173.06 79.8728L173.094 90.9255L126.49 64.9081L126.443 53.3335Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M126.443 53.3335L126.49 64.9081L173.094 90.9255L173.06 79.8728L126.443 53.3335ZM126.766 53.8852L126.81 64.7198L172.773 90.3795L172.741 80.0592L126.766 53.8852Z' fill='%236259D4'/%3E%3Cpath d='M80.1584 134.322L80 80.4074L126.432 53.3335L126.48 64.9081L88.7187 86.0335L88.5731 128.106L80.1584 134.322Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M88.7187 86.0335L126.48 64.9081L126.432 53.3335L80 80.4074L80.1584 134.322L88.5731 128.106L88.7187 86.0335ZM88.2536 127.944L88.3987 86.0324C88.3991 85.9169 88.4617 85.8106 88.5624 85.7542L126.159 64.7209L126.115 53.8892L80.3205 80.5909L80.4766 133.689L88.2536 127.944Z' fill='%236259D4'/%3E%3Cpath d='M107.511 149.374L80.1562 134.324L88.5709 128.108L135.44 154.885L107.58 170.601L98.2445 175.794L126.85 191.879L164.054 170.733L173.325 175.035L126.619 202.66L80.2804 176.371L117.215 154.711L107.511 149.374Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M107.58 170.601L135.44 154.885L88.5709 128.108L80.1562 134.324L117.215 154.711L80.2804 176.371L126.619 202.66L173.325 175.035L164.054 170.733L126.85 191.879L98.2445 175.794L107.58 170.601ZM164.069 171.092L127.008 192.157C126.91 192.213 126.791 192.213 126.693 192.158L98.0877 176.073C97.9866 176.016 97.9242 175.909 97.9245 175.794C97.9248 175.678 97.9877 175.571 98.0889 175.515L107.423 170.322L134.792 154.884L88.5932 128.49L80.7483 134.285L107.666 149.093L117.369 154.431C117.47 154.486 117.533 154.592 117.535 154.707C117.536 154.822 117.476 154.929 117.377 154.987L80.9208 176.367L126.615 202.29L172.639 175.069L164.069 171.092Z' fill='%236259D4'/%3E%3Cpath d='M88.7207 86.0458L126.482 64.9204L173.085 90.9378L145.902 106.323L134.781 112.619L163.669 127.902L153.888 133.044L116.808 112.11L153.764 90.4499L144.947 85.4178L126.512 74.8955L99.0623 90.6069L88.7207 86.0458Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M173.085 90.9378L126.482 64.9204L88.7207 86.0458L99.0623 90.6069L126.512 74.8955L153.764 90.4499L116.808 112.11L153.888 133.044L163.669 127.902L134.781 112.619L173.085 90.9378ZM162.983 127.901L134.631 112.902C134.528 112.847 134.462 112.741 134.461 112.624C134.459 112.507 134.521 112.398 134.623 112.341L145.744 106.044L172.432 90.9397L126.482 65.287L89.4368 86.0119L99.0436 90.2489L126.353 74.6177C126.451 74.5614 126.572 74.5614 126.67 74.6175L153.923 90.172C154.022 90.2286 154.083 90.3338 154.084 90.4481C154.085 90.5623 154.024 90.6682 153.926 90.726L117.45 112.105L153.894 132.68L162.983 127.901Z' fill='%236259D4'/%3E%3Cpath d='M98.252 175.789L107.587 170.596L126.827 181.093L126.857 191.874L98.252 175.789Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M98.252 175.789L126.857 191.874L126.827 181.093L107.587 170.596L98.252 175.789ZM98.9075 175.791L126.536 191.326L126.508 181.283L107.589 170.962L98.9075 175.791Z' fill='%236259D4'/%3E%3Cpath d='M80.2804 176.368L80.2461 164.785L107.511 149.371L117.215 154.708L80.2804 176.368Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M80.2804 176.368L117.215 154.708L107.511 149.371L80.2461 164.785L80.2804 176.368ZM80.5987 175.81L116.567 154.717L107.513 149.737L80.5666 164.971L80.5987 175.81Z' fill='%236259D4'/%3E%3Cpath d='M116.809 112.109L116.92 101.073L144.947 85.417L153.764 90.4491L116.809 112.109Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M116.809 112.109L153.764 90.4491L144.947 85.417L116.92 101.073L116.809 112.109ZM117.134 111.547L153.125 90.4528L144.946 85.7845L117.238 101.262L117.134 111.547Z' fill='%236259D4'/%3E%3Cpath d='M88.5723 128.087L88.7179 86.0142L99.0595 90.5753L99.1537 123.589L135.407 143.582L135.442 154.864L88.5723 128.087Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M99.1537 123.589L99.0595 90.5753L88.7179 86.0142L88.5723 128.087L135.442 154.864L135.407 143.582L99.1537 123.589ZM135.088 143.771L98.9992 123.869C98.8974 123.813 98.8341 123.706 98.8337 123.59L98.7401 90.7841L89.0362 86.5043L88.8929 127.901L135.12 154.311L135.088 143.771Z' fill='%236259D4'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '30d20208d987713f46dfd34ef128bb16c404d10f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0',\n name: 'SWEAT',\n symbol: 'SWEAT',\n icon:\n \"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100' height='100' rx='50' fill='%23FF0D75'/%3E%3Cg clip-path='url(%23clip0_283_2788)'%3E%3Cpath d='M39.4653 77.5455L19.0089 40.02L35.5411 22.2805L55.9975 59.806L39.4653 77.5455Z' stroke='white' stroke-width='10'/%3E%3Cpath d='M66.0253 77.8531L45.569 40.3276L62.1012 22.5882L82.5576 60.1136L66.0253 77.8531Z' stroke='white' stroke-width='10'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_283_2788'%3E%3Crect width='100' height='56' fill='white' transform='translate(0 22)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.sweat',\n },\n {\n spec: 'ft-1.0.0',\n name: 'APYSwap',\n symbol: 'APYS',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iLTEwIC0xMCAxMjAgMTIwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTQ2OF81MTk1KSI+CjxwYXRoIGQ9Ik0zOC40MzUzIDEyLjY4NUw3NC41ODY5IDc3Ljg2NzdMOTguOTk5OSA3OC41NjYzTDYyLjY3NDkgMTMuMzc4N0wzOC40MzUzIDEyLjY4NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjxwYXRoIGQ9Ik0xMi43NjcyIDU1LjQwNzFMODYuOTM2NiA1Ni42MzI2TDk4Ljk5ODIgNzcuODM0OEwwLjAxMTcwNDYgNzYuMTk5MkwxMi43NjcyIDU1LjQwNzFaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTQ2OF81MTk1KSIvPgo8cGF0aCBkPSJNNjIuMjQxMSAxMy4wOTRMMjMuODY5OCA3Ny4wODU2TC0wLjUxMDgwNSA3Ni45MTIyTDM3Ljg2NzMgMTIuOTIwN0w2Mi4yNDExIDEzLjA5NFoiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSI1NS45Njc3IiB5MT0iMjMuODc4MSIgeDI9Ijg1LjQ4MjUiIHkyPSI3Ny4wMTI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwOEFFRUEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMkFGNTk4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSIyOS40ODcxIiB5MT0iNjcuODQzIiB4Mj0iNjguOTYzNiIgeTI9IjY4LjgwMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzE0NjhfNTE5NSIgeDE9IjUxLjk4MzUiIHkxPSIzLjEzMzQ1IiB4Mj0iMzEuMjQxOCIgeTI9IjM2LjE3MzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDY4XzUxOTUiPgo8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'apys.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.tether-token.near',\n },\n];\n\nexport function getDefaultTokenList() {\n const env = getConfig().networkId;\n\n switch (env) {\n case 'mainnet':\n return DefaultMainnetTokenList;\n case 'testnet':\n return DefaultTestnetTokenList;\n default:\n return DefaultMainnetTokenList;\n }\n}\n","import { TokenMetadata, Transaction } from '../types';\n\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport { DCLSwapGetStorageBalance } from '../ref';\nimport { DCL_POOL_FEE_LIST, getDCLPoolId } from './dcl-pool';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport _ from 'lodash';\nimport { toReadableNumber, percentLess } from '../utils';\nimport { NoPoolOnThisPair, SlippageError } from '../error';\n\ninterface SwapInfo {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n}\n\ninterface DCLSwapProps {\n swapInfo: SwapInfo;\n Swap?: {\n pool_ids: string[];\n min_output_amount: string;\n };\n SwapByOutput?: {\n pool_ids: string[];\n output_amount: string;\n };\n LimitOrderWithSwap?: {\n pool_id: string;\n output_amount: string;\n };\n AccountId: string;\n}\nexport const DCL_POOL_SPLITER = '|';\n\nexport const DCLSwap = async ({\n Swap,\n SwapByOutput,\n LimitOrderWithSwap,\n AccountId,\n swapInfo,\n}: DCLSwapProps) => {\n const transactions: Transaction[] = [];\n\n const { tokenA, tokenB, amountA } = swapInfo;\n\n if (Swap) {\n const pool_ids = Swap.pool_ids;\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const output_token = tokenB.id;\n const min_output_amount = toPrecision(Swap.min_output_amount, 0);\n\n const msg = JSON.stringify({\n Swap: {\n pool_ids,\n output_token,\n min_output_amount,\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByOutput) {\n const pool_ids = SwapByOutput.pool_ids;\n const output_token = tokenB.id;\n const output_amount = toNonDivisibleNumber(\n tokenB.decimals,\n SwapByOutput.output_amount\n );\n const msg = JSON.stringify({\n SwapByOutput: {\n pool_ids,\n output_token,\n output_amount,\n },\n });\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (LimitOrderWithSwap) {\n const pool_id = LimitOrderWithSwap.pool_id;\n\n const fee = Number(pool_id.split(DCL_POOL_SPLITER)[2]);\n\n const buy_token = tokenB.id;\n const point = priceToPoint({\n amountA,\n amountB: LimitOrderWithSwap.output_amount,\n tokenA,\n tokenB,\n fee,\n });\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const DCLRegistered = await DCLSwapGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (DCLRegistered === null) {\n transactions.push({\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: '0.5',\n },\n ],\n });\n }\n\n const new_point =\n pool_id.split(DCL_POOL_SPLITER)[0] === tokenA.id ? point : -point;\n\n const msg = JSON.stringify({\n LimitOrderWithSwap: {\n pool_id,\n buy_token,\n point: new_point,\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n }\n\n if (tokenA.id === WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n transactions.unshift({\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n }\n\n return transactions;\n};\n\nexport const quote = async ({\n pool_ids,\n input_amount,\n input_token,\n output_token,\n tag,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n input_amount: string;\n tag?: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n input_amount: toNonDivisibleNumber(input_token.decimals, input_amount),\n tag,\n },\n });\n};\n\nexport const list_user_assets = async (AccountId: string) => {\n if (!AccountId) return;\n\n return refDCLSwapViewFunction({\n methodName: 'list_user_assets',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const DCLSwapByInputOnBestPool = async ({\n tokenA,\n tokenB,\n amountA,\n slippageTolerance,\n AccountId,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n slippageTolerance: number;\n AccountId: string;\n}) => {\n if (slippageTolerance <= 0 || slippageTolerance >= 100) {\n throw SlippageError;\n }\n\n const estimates = await Promise.all(\n DCL_POOL_FEE_LIST.map(async fee => {\n const pool_id = getDCLPoolId(tokenA.id, tokenB.id, fee);\n return quote({\n pool_ids: [pool_id],\n input_token: tokenA,\n output_token: tokenB,\n input_amount: amountA,\n tag: `${tokenA.id}-${fee}-${amountA}`,\n }).catch(e => null);\n })\n );\n\n if (!estimates || estimates.every(e => e === null)) {\n throw NoPoolOnThisPair(tokenA.id, tokenB.id);\n }\n\n const bestEstimate =\n estimates && estimates?.some(e => !!e)\n ? _.maxBy(estimates, e => Number(!e || !e.tag ? -1 : e.amount))\n : null;\n\n const bestFee =\n bestEstimate &&\n bestEstimate.tag &&\n bestEstimate?.tag?.split('-')?.[1] &&\n Number(bestEstimate?.tag?.split('-')?.[1]);\n\n return DCLSwap({\n swapInfo: {\n tokenA,\n tokenB,\n amountA,\n },\n Swap: {\n pool_ids: [getDCLPoolId(tokenA.id, tokenB.id, bestFee)],\n min_output_amount: percentLess(slippageTolerance, bestEstimate.amount),\n },\n AccountId,\n });\n};\n\nexport const quote_by_output = ({\n pool_ids,\n output_amount,\n input_token,\n output_token,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n output_amount: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote_by_output',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n output_amount: toNonDivisibleNumber(output_token.decimals, output_amount),\n },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport { NoOrderFound, OrderNoRemainedAmount } from '../error';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport {\n ONE_YOCTO_NEAR,\n WRAP_NEAR_CONTRACT_ID,\n config,\n POINTLEFTRANGE,\n POINTRIGHTRANGE,\n} from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\n\nexport interface UserOrderInfo {\n order_id: string;\n owner_id: string;\n pool_id: string;\n point: number;\n sell_token: string;\n created_at: string;\n original_amount: string;\n remain_amount: string; // 0 means history order: ;\n cancel_amount: string;\n // amount through ft_transfer_call\n\n original_deposit_amount: string;\n // earn token amount through swap before actual place order\n\n swap_earn_amount: string;\n buy_token: string;\n unclaimed_amount: string; // claim will push it to inner account\n bought_amount: string; // accumalated amount into inner account\n}\n\nexport const list_history_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_history_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const list_active_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_active_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const get_order = async (order_id: string) => {\n return refDCLSwapViewFunction({\n methodName: 'get_order',\n args: {\n order_id,\n },\n }).catch(() => {\n throw NoOrderFound(order_id);\n });\n};\n\nexport const find_order = async ({\n pool_id,\n point,\n AccountId,\n}: {\n pool_id: string;\n point: number;\n AccountId: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'find_order',\n args: {\n account_id: AccountId,\n pool_id,\n point,\n },\n }).catch(() => {\n throw NoOrderFound();\n }) as Promise<UserOrderInfo>;\n};\nexport const cancel_order = async (order_id: string) => {\n const order = await get_order(order_id);\n\n if (!order.remain_amount) throw OrderNoRemainedAmount;\n\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: order.remain_amount,\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const claim_order = (order_id: string) => {\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: '0',\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const get_pointorder_range = ({\n pool_id,\n left_point,\n right_point,\n}: {\n pool_id: string;\n left_point?: number;\n right_point?: number;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'get_pointorder_range',\n args: {\n pool_id,\n left_point: left_point || POINTLEFTRANGE,\n right_point: right_point || POINTRIGHTRANGE,\n },\n });\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SwapWidgetProps } from './types';\nimport { TokenMetadata } from '../types';\nimport {\n useRefPools,\n useSwap,\n ThemeContextProvider,\n TokenPriceContextProvider,\n useAllTokens,\n} from './state';\nimport { ftGetBalance, ftGetTokenMetadata } from '../ref';\nimport {\n getAccountName,\n toReadableNumber,\n toPrecision,\n getPriceImpact,\n isMobile,\n} from '../utils';\nimport {\n Slider,\n SlippageSelector,\n TokenSelector,\n TokenAmount,\n DetailView,\n Notification,\n} from './components';\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { TiWarning } from '@react-icons/all-files/ti/TiWarning';\n\nimport './style.css';\nimport { useTokenPriceList, useTokenBalnces, useTokensIndexer } from './state';\n\nimport { CgArrowsExchangeAltV } from '@react-icons/all-files/cg/CgArrowsExchangeAltV';\nimport { RefIcon, AccountButton } from './components';\nimport Big from 'big.js';\nimport { ONLY_ZEROS } from '../utils';\nimport {\n defaultTheme,\n defaultDarkModeTheme,\n REF_WIDGET_SWAP_IN_KEY,\n REF_WIDGET_SWAP_OUT_KEY,\n} from './constant';\nimport {\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n REF_TOKEN_ID,\n REF_META_DATA,\n} from '../constant';\n\nexport const SwapWidget = (props: SwapWidgetProps) => {\n const {\n theme,\n defaultTokenList,\n onSwap,\n connection,\n width,\n height,\n enableSmartRouting,\n className,\n transactionState,\n onConnect,\n defaultTokenIn,\n defaultTokenOut,\n onDisConnect,\n darkMode,\n } = props;\n\n const curTheme = theme || (darkMode ? defaultDarkModeTheme : defaultTheme);\n\n const STORAGED_TOKEN_IN = localStorage.getItem(REF_WIDGET_SWAP_IN_KEY);\n\n const STORAGED_TOKEN_OUT = localStorage.getItem(REF_WIDGET_SWAP_OUT_KEY);\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n refIcon,\n } = curTheme;\n\n const { AccountId, isSignedIn: isSignedInProp } = connection;\n\n const isSignedIn = !!AccountId && isSignedInProp;\n\n const [tokenIn, setTokenIn] = useState<TokenMetadata>();\n\n const handleSetTokenIn = (token: TokenMetadata) => {\n setTokenIn(token);\n localStorage.setItem(REF_WIDGET_SWAP_IN_KEY, token.id);\n };\n\n const handleSetTokenOut = (token: TokenMetadata) => {\n setTokenOut(token);\n localStorage.setItem(REF_WIDGET_SWAP_OUT_KEY, token.id);\n };\n\n const [tokenOut, setTokenOut] = useState<TokenMetadata>();\n const [tokenInBalance, setTokenInBalance] = useState<string>('');\n\n const [tokenOutBalance, setTokenOutBalance] = useState<string>('');\n\n const [notOpen, setNotOpen] = useState<boolean>(false);\n\n useEffect(() => {\n if (!transactionState) return;\n\n if (transactionState && transactionState.state !== null) {\n setNotOpen(true);\n }\n transactionState?.setState(transactionState?.state || null);\n }, [transactionState]);\n\n const [widgetRoute, setWidgetRoute] = useState<\n 'swap' | 'token-selector-in' | 'token-selector-out'\n >('swap');\n\n const [amountIn, setAmountIn] = useState<string>('1');\n\n const [showSlip, setShowSlip] = useState<boolean>(false);\n\n const [slippageTolerance, setSlippageTolerance] = useState<number>(0.5);\n\n const { tokens, tokenLoading } = useTokensIndexer({\n defaultTokenList,\n AccountId,\n });\n\n // cache list tokens\n useAllTokens({ reload: true });\n\n const balances = useTokenBalnces(tokens, AccountId);\n\n const [refreshTrigger, setRreshTrigger] = useState<boolean>(false);\n\n const tokenPriceList = useTokenPriceList();\n\n const { allPools, allStablePools, poolFetchingState } = useRefPools(\n refreshTrigger\n );\n\n useEffect(() => {\n const defaultIn =\n STORAGED_TOKEN_IN || defaultTokenIn || WRAP_NEAR_CONTRACT_ID;\n\n const defaultOut = STORAGED_TOKEN_OUT || defaultTokenOut || REF_TOKEN_ID;\n\n if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) !== -1\n ) {\n if (defaultIn === WRAP_NEAR_CONTRACT_ID || defaultIn === 'NEAR') {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultIn).then(handleSetTokenIn);\n }\n } else if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) === -1\n ) {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n }\n if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) !== -1\n ) {\n if (defaultOut === WRAP_NEAR_CONTRACT_ID || defaultOut === 'NEAR') {\n handleSetTokenOut({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultOut).then(handleSetTokenOut);\n }\n } else if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) === -1\n ) {\n handleSetTokenOut(REF_META_DATA);\n }\n }, [tokens, tokenLoading]);\n\n useEffect(() => {\n if (!tokenIn) return;\n\n const wrapedId = tokenIn.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenIn.id;\n\n if (balances[wrapedId]) {\n setTokenInBalance(balances[wrapedId]);\n return;\n }\n\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenInBalance(toReadableNumber(tokenIn.decimals, available));\n });\n }, [tokenIn, AccountId, balances]);\n\n useEffect(() => {\n if (!tokenOut) return;\n\n const wrapedId =\n tokenOut.id === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenOut.id;\n\n if (balances[wrapedId]) {\n setTokenOutBalance(balances[wrapedId]);\n return;\n }\n ftGetBalance(wrapedId, AccountId).then(available => {\n setTokenOutBalance(toReadableNumber(tokenOut.decimals, available));\n });\n }, [tokenOut, AccountId, balances]);\n\n const {\n amountOut,\n minAmountOut,\n rate,\n fee,\n estimates,\n canSwap,\n swapError,\n makeSwap,\n setAmountOut,\n } = useSwap({\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountIn,\n simplePools: allPools.simplePools.filter(p => Number(p.shareSupply) > 0),\n options: {\n enableSmartRouting,\n stablePools: allPools.ratedPools\n .concat(allPools.unRatedPools)\n .filter(p => Number(p.shareSupply) > 0),\n stablePoolsDetail: allStablePools.filter(\n p => Number(p.shares_total_supply) > 0\n ),\n },\n slippageTolerance,\n onSwap,\n AccountId,\n refreshTrigger,\n poolFetchingState,\n });\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut) return '0';\n\n return getPriceImpact({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools: allStablePools,\n });\n }, [estimates, tokenIn, tokenOut, amountIn, amountOut, allStablePools]);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n setNotOpen(true);\n makeSwap();\n };\n\n const canSubmit =\n tokenIn &&\n tokenOut &&\n canSwap &&\n !swapError &&\n isSignedIn &&\n new Big(tokenInBalance || '0').gte(amountIn || '0') &&\n slippageTolerance > 0 &&\n slippageTolerance < 100 &&\n !ONLY_ZEROS.test(tokenInBalance);\n\n return (\n <ThemeContextProvider customTheme={curTheme}>\n <TokenPriceContextProvider>\n {widgetRoute === 'swap' && (\n <form\n className={`__ref-swap-widget-container ${className}`}\n onSubmit={handleSubmit}\n style={{\n background: container,\n fontFamily,\n width,\n height,\n }}\n >\n <div className=\"__ref-swap-widget-header __ref-swap-widget-row-flex-center\">\n <div\n style={{\n color: primary,\n }}\n className=\"__ref-swap-widget-header-title\"\n >\n Swap\n </div>\n\n <div\n className=\"__ref-swap-widget-header-button __ref-swap-widget-row-flex-center\"\n style={{\n position: 'relative',\n }}\n >\n <AccountButton\n onDisConnect={onDisConnect}\n AccountId={AccountId}\n />\n\n <Slider showSlip={showSlip} setShowSlip={setShowSlip} />\n\n <SlippageSelector\n slippageTolerance={slippageTolerance}\n onChangeSlippageTolerance={setSlippageTolerance}\n showSlip={showSlip}\n setShowSlip={setShowSlip}\n />\n </div>\n </div>\n\n <TokenAmount\n amount={amountIn}\n balance={tokenInBalance}\n token={tokenIn}\n price={!tokenIn ? null : tokenPriceList?.[tokenIn.id]?.price}\n onChangeAmount={setAmountIn}\n onSelectToken={() => {\n setWidgetRoute('token-selector-in');\n }}\n />\n\n <div\n className={`__ref-swap-widget-exchange-button __ref-swap-widget-row-flex-center `}\n style={{\n color: iconDefault,\n }}\n >\n <CgArrowsExchangeAltV\n style={{\n cursor: 'pointer',\n }}\n className={`__ref-swap-widget-exchange-button-icon ${\n isMobile()\n ? '__ref-swap-widget-active'\n : '__ref-swap-widget-hover'\n }`}\n size={30}\n onClick={() => {\n tokenOut && handleSetTokenIn(tokenOut);\n tokenIn && handleSetTokenOut(tokenIn);\n setAmountIn('1');\n setAmountOut('');\n }}\n />\n </div>\n\n <TokenAmount\n amount={toPrecision(amountOut, 8)}\n balance={tokenOutBalance}\n token={tokenOut}\n price={!tokenOut ? null : tokenPriceList?.[tokenOut.id]?.price}\n onSelectToken={() => {\n setWidgetRoute('token-selector-out');\n }}\n onForceUpdate={() => {\n setRreshTrigger(!refreshTrigger);\n }}\n poolFetchingState={poolFetchingState}\n />\n {!swapError && amountIn && amountOut && (\n <DetailView\n fee={fee}\n rate={rate}\n amountIn={amountIn}\n minReceived={minAmountOut}\n tokenIn={tokenIn}\n tokenOut={tokenOut}\n amountOut={amountOut}\n priceImpact={priceImpact}\n estimates={estimates}\n />\n )}\n\n {swapError && (\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: '#DE9450',\n fontSize: '14px',\n\n paddingTop: '16px',\n }}\n >\n <TiWarning fill=\"#DE9450\" size={20} />\n &nbsp;\n {swapError.message}\n </div>\n )}\n {isSignedIn ? (\n <button\n type=\"submit\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n style={{\n color: 'white',\n background: buttonBg,\n opacity: !canSubmit ? 0.5 : 1,\n cursor: !canSubmit ? 'not-allowed' : 'pointer',\n }}\n disabled={!canSubmit}\n >\n {'Swap'}\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n onClick={onConnect}\n style={{\n color: 'white',\n background: buttonBg,\n cursor: 'pointer',\n }}\n >\n {'Connect Wallet'}\n </button>\n )}\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'center',\n }}\n >\n <a\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: secondary,\n justifyContent: 'center',\n paddingTop: '12px',\n fontSize: '14px',\n display: 'inline-flex',\n }}\n href=\"https://ref.finance\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <RefIcon\n style={{\n color: refIcon || 'black',\n }}\n />\n &nbsp; Powered by Ref.finance\n </a>\n </div>\n\n <Notification\n state={transactionState?.state}\n setState={transactionState?.setState}\n open={notOpen}\n setOpen={setNotOpen}\n tx={transactionState?.tx}\n detail={transactionState?.detail}\n />\n </form>\n )}\n\n {widgetRoute === 'token-selector-in' && (\n <TokenSelector\n balances={balances}\n tokens={tokens}\n width={width}\n onSelect={token => {\n handleSetTokenIn(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n\n {widgetRoute === 'token-selector-out' && (\n <TokenSelector\n tokens={tokens}\n balances={balances}\n width={width}\n onSelect={token => {\n handleSetTokenOut(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n </TokenPriceContextProvider>\n </ThemeContextProvider>\n );\n};\n"],"names":["ONE_YOCTO_NEAR","ENV","getConfig","env","process","NEAR_ENV","REACT_APP_REF_SDK_ENV","networkId","nodeUrl","walletUrl","WRAP_NEAR_CONTRACT_ID","REF_FI_CONTRACT_ID","REF_TOKEN_ID","indexerUrl","explorerUrl","REF_DCL_SWAP_CONTRACT_ID","config","id","name","symbol","decimals","icon","NEAR_META_DATA","TokenLinks","NEAR","wNEAR","REF","OCT","PARAS","SKYWARD","FLX","PULSE","DBIO","MYRIA","PXT","HAPI","OIN","ABR","1MIL","MARMAJ","marmaj","USN","1INCH","GRT","LINK","Cheddar","AURORA","$META","UMINT","UTO","DEIP","WOO","LINEAR","PEM","ATO","SEAT","FAR","BSTN","BRRR","XNL","KSW","STNEAR","NearX","SD","DISC","switchEnv","REF_META_DATA","WNEAR_META_DATA","calc_d","amp","c_amounts","token_num","length","sum_amounts","_","sum","d_prev","d","i","d_prod","ann","Math","abs","calc_y","x_c_amount","current_c_amounts","index_x","index_y","s","c","b","y_prev","y","calc_swap","in_token_idx","in_c_amount","out_token_idx","old_c_amounts","trade_fee","dy","fee","amount","tradeFee","getSwappedAmount","tokenInId","tokenOutId","amountIn","stablePool","STABLE_LP_TOKEN_DECIMALS","total_fee","token_account_ids","findIndex","rates","map","r","toReadableNumber","toNonDivisibleNumber","scientificNotationToString","Big","times","toString","Number","DEFAULT_START_TOKEN_LIST_TESTNET","DEFAULT_START_TOKEN_LIST_MAINNET","defaultTheme","container","buttonBg","primary","secondary","borderRadius","fontFamily","hover","active","secondaryBg","borderColor","iconDefault","iconHover","defaultDarkModeTheme","refIcon","icons","4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near","wrap.near","wrap.testnet","6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near","berryclub.ek.near","dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near","1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near","514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near","a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near","2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near","7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near","a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near","50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near","4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near","6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near","6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near","c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near","c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near","9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near","0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near","c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near","0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near","111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near","f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near","de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near","a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near","token.cheddar.near","farm.berryclub.ek.near","d9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near","getTokenPriceList","_context","fetch","method","headers","Content-type","then","res","json","list","getTokens","reload","storagedTokens","window","localStorage","getItem","_context2","JSON","parse","tokens","Object","values","reduce","acc","cur","keys","REPLACE_TOKENS","includes","metaIconDefaults","setItem","stringify","getWhiteListTokensIndexer","whiteListIds","_context3","checkIntegerSumOfAllocations","allocations","totalInput","alloSum","item","round","a","plus","offset","minus","currMax","currMaxInd","gt","newAllocations","j","push","RM","DP","NE","PE","_marked5","yenFromPy","bisqrt","value","BigInt","newtonIteration","n","x0","x1","getBetaForRoute","route","path","beta","reserves","p2","getEpsilonForRoute","p","gamma","div","epsilon","p1","gamma1","gamma2","getAlphaForRoute","inputToken","outputToken","key2","token2Id","val2","token2Supply","token1Id","token1Supply","alpha","key12","val12","key22","val22","middleToken","alpha1","alpha2","getAllocationForRoute","phi","toFixed","getNodeRoutesFromPathsAndPoolChains","paths","poolChains","multiplicity","mul","elem1","elem2","nodeRoutes","m","k","getPoolChainFromPaths","pools","threshold","pathInd","chain","pairs","pairInd","pair","tokenPools","getPoolsByToken1ANDToken2","newChains","newPath","legInd","culledPath","cullPoolsWithInsufficientLiquidity","getCulledPoolChains","getRoutesFromPoolChain","routes","pci","newRoutes","flatMap","e","flat","getOutputSingleHop","pool","num","denom","getOutputFromRoute","nodeRoute","allocation","eq","output","poolIndex","c1","a1","c2","b2","getOutputDoubleHop","getOptOutputVec","getOptimalAllocationForRoutes","allocationVec","getAllocationVectorForRoutes","alphaSum","radical","getAlphaSumFromRoutes","betaSum","getBetaSumFromRoutes","getPhiFromRoutes","every","lt","some","goodIndices","newNodeRoutes","goodIndex","allocationDict","allocationVecNew","zeroAllocation","reduceRoutes","sumAllocations","result","getBestOptInputAndOutput","rawDict","outputRaw","inputRaw","input","v","bv1","bv2","getBestOptimalAllocationsAndOutputs","_getBestOptimalAllocationsAndOutputs","maxPathLength","_context6","getPathsFromPools","outputs","inputOutput","getActionListFromRoutesAndAllocations","hops","hop","allRoutes","allNodeRoutes","totalInputAmount","allAllocations","middleTokenAllocation","getHopActionsFromRoutes","getSmartRouteSwapActions","_getSmartRouteSwapActions","allTokens","numberOfRoutesLimit","MAX_NUMBER_PARALLEL_POOLS","decimalsCulledPoolIds","_context9","filter","resDict","sortedIndexValues","argsort","topIndices","slice","reducedRoutes","reducedNodeRoutes","ind","currentBestOutput","bestAllocations","bestNodeRoutes","parallelNodeRoutes","parallelRoutes","bestRoutes","currentNodeRoute","bestRoutesAreParallel","filteredAllocationsAndOutputs","parallelOutputs","parallellAllocations","sortIndices","filteredParallelRoutes","filteredParallelNodeRoutes","parallelOutput","canHaveTwoRoutes","route1","route2","nodeRoute1","nodeRoute2","route1PoolIds","Set","route2PoolIds","sharePool","has","currentRoutes","currentNodeRoutes","filteredAllocations","totalOutput","allSortedIndices","sortedIndices","filteredRoutes","filteredNodeRoutes","index","sharedRoute","allFilteredRoutes","allFilteredNodeRoutes","firstRoutePoolIds","allFilteredRouteIds","secondRoute","stringAllo","actions","ftGetTokenMetadata","hopInputTokenMeta","hopOutputTokenDecimals","expectedHopOutput","decimalEstimate","pow","status","Promise","all","t","_context8","estimate","gamma_bps","partialAmountIn","supplies","token0_ref_price","token0_price","tokenIds","Dex","token","routeInputToken","routeOutputToken","overallPriceImpact","x","calculateSmartRouteV2PriceImpact","action","_calculateSmartRouteV2PriceImpact","deltaY","inputTokenMeta","deltaX","R","P","totalAllocations","weights","_context12","_context11","weight","routeMarketPrice","num1","denom1","num2","denom2","priceImpact","arr","decor","sort","token1","token2","cullZeroLiquidityPools","filteredPools","thresh","normLiq","liquidities","poolInd","amounts","poolBigAmounts","liquidity","getLiqudityOfPoolsFromList","maxLiq","arrayOfBigs","maxElem","val","bigMax","getNormalizedLiquiditiesFromList","addEdge","g","edge","src","dst","deleteEdge","gNew","e1","e2","deleteNode","node","nodeInd","nodeNow","shortestPath","ignore_nodes","ignore_edges","gTemp","edgeInd","solution","graph","solutions","dist","parent","nearest","Infinity","ndist","adj","concat","dijkstra","unshift","PoolMode","PathBuffer","this","sortedpaths","_proto","len","cost","arrayContains","pop","shift","splice","indexOf","arrayEquals","Array","isArray","obj","obj_json","itemInd","source","target","listA","listB","prev_path","root","root_length","sol","spur","_context5","getKShortestPaths","gen","next","_getPathsFromPools","getGraphFromPoolList","poolList","edgeList","addEdges","stableSmart","_stableSmart","_context15","getExpectedOutputFromActionsORIG","getSimplePoolEstimate","tokenIn","tokenOut","amount_with_fee","in_balance","out_balance","getStablePoolEstimate","getStablePoolDecimal","amount_swapped","amountOut","isNaN","toPrecision","dyOut","noFeeAmountOut","singlePoolSwap","simplePools","stablePools","NoPoolError","parsedAmountIn","estimatesSimplePool","isStablePool","stablePoolThisPair","sp","estimatesStablePool","find","maxSimplePoolEstimate","undefined","maxBy","maxStablePoolEstimate","getStablePoolsThisPair","getPoolsByTokens","getPoolEstimate","stablePoolDetail","getHybridStableSmart","_getHybridStableSmart","stablePoolsDetail","isStablePoolToken","stablePoolsDetailById","pools1","pools2","pools1Right","pools2Right","candidatePools","otherStables","stablePoolsThisPair","otherStable","tmpPools","tobeAddedPools","middleTokens","_loop2","p2s","_loop","ftGetTokensMetadata","cp","tokensMedata","BestPoolPair","poolPair","stablePoolDetailThisPair","spd","tmpPool1","tmpPool2","tokenMidId","tokenMidMeta","estimate1","SMART","estimate2","bestPool","STABLE","pool1","pool2","estimateSwap","options","SameInputTokenError","ONLY_ZEROS","test","ZeroInputError","enableSmartRouting","_ref10","singleRouteEstimate","PARALLEL","inputPools","poolFormatter","simplePoolSmartRoutingEstimate","simplePoolSmartRoutingActions","hybridSmartRoutingEstimate","hybridSmartRoutingRes","gte","_singleRouteEstimate","_singleRouteEstimate$","_singleRouteEstimate2","_singleRouteEstimate3","parsePool","shareSupply","shares_total_supply","tvl","pool_kind","shares","tokenId","poolId","minAmountOut","isInteger","ceil","convertToPercentDecimal","percent","math","percentOf","percentLess","notation","getGas","gas","BN","number","substring","padStart","replace","split","_number$split$","padEnd","strParam","sysbol","negative","match","_strParam$match","basis","_strParam$match2","wholeStr","fractionStr","ifFraction","formatWithCommas","pattern","precision","withCommas","atLeastOne","whole","_number$split2$","decimal","str","lastIndexOf","transformTransactions","transactions","AccountId","signerId","receiverId","functionCalls","fc","type","params","methodName","args","toNumber","deposit","utils","format","parseNearAmount","separateRoutes","curRoute","calculateExchangeRate","from","to","getAvgFee","estimates","forEach","getAccountName","account","network","niceAccountId","symbolsArr","multiply","factor1","factor2","toInternationalCurrencySystemLongString","labelValue","percentOfBigNumber","valueBig","percentBig","toRealSymbol","charAt","toUpperCase","calculateFeeCharge","total","calculateFeePercent","getExpectedOutputFromSwapTodos","calculateAmountReceived","big_in_balance","big_out_balance","constant_product","new_in_balance","new_out_balance","calculateMarketPrice","cur_in_balance","cur_out_balance","calculateSmartRoutingPriceImpact","tokenInAmount","swapTodos","tokenMid","stableOutPool2","isPool1StablePool","isPool2StablePool","marketPrice1","_swapTodos$0$pool$rat","_swapTodos$0$pool$rat2","marketPrice2","_swapTodos$1$pool$rat","_swapTodos$1$pool$rat2","generalMarketPrice","tokenMidReceived","formattedTokenMidReceived","stablePool2","stableOut","tokenOutReceived","newMarketPrice","PriceImpact","numerator","denominator","calcStableSwapPriceImpact","marketPrice","calculatePriceImpact","finalMarketPrice","separatedReceivedAmount","finalTokenOutReceived","calculateSmartRoutesV2PriceImpact","tokenInPara","_routes$0$0$tokens","rawRes","readablePartialAmountIn","_r$0$tokens","_r$0$tokens2","_r$0$tokens3","_r$0$pool$rates","_r$0$pool$rates2","_r$0$tokens4","_r$0$tokens5","pre","getPriceImpact","priceImpactValueSmartRouting","priceImpactValueSmartRoutingV2","_estimates$0$tokens","_estimates$0$pool$rat","_estimates$0$pool$rat2","error","subtraction","initialValue","toBeSubtract","getPoolAllocationPercents","partialAmounts","ps","fill","sortedAmount","sortBy","minIndexes","minIndex","finalPIndex","isMobile","screen","width","divide","getMax","String","getPointByPrice","pointDelta","price","decimalRate","noNeedSlot","point","log","point_int","point_int_slot","floor","feeToPointDelta","NoFeeToPool","priceToPoint","tokenA","tokenB","amountA","amountB","DCL_POOL_FEE_LIST","decimal_price_A_by_B","registerAccountOnToken","registration_only","account_id","getKeyStore","keyStores","InMemoryKeyStore","BrowserLocalStorageKeyStore","provider","providers","JsonRpcProvider","url","getMemorySigner","keyPath","homedir","os","credentials","fs","readFileSync","credentialAccountId","NoCredential","AccountIdMisMatch","myKeyStore","setKey","KeyPair","fromString","private_key","signer","InMemorySigner","validateAccessKey","transaction","accessKey","permission","FunctionCall","method_names","receiver_id","parseFloat","getSignedTransactionsByMemoryKey","transactionsRef","block","finality","signedTransactions","getPublicKey","publicKey","NoPuiblicKeyError","query","request_type","public_key","InValidAccessKeyError","tx","nearTransactions","createTransaction","PublicKey","nonce","functionCall","serialize","base_decode","header","hash","signTransaction","sendTransactionsByMemoryKey","results","sendTransaction","HAPI_ID","WOO_ID","near","Near","keyStore","refFiViewFunction","viewFunction","ftViewFunction","ftGetStorageBalance","NoAccountIdFound","ftGetBalance","getAccountNearBalance","getTotalPools","tag","TokenNotExistError","metadata","getGlobalWhitelist","ids","_context7","getUserRegisteredTokens","accountId","data","nearDepositTransaction","nearWithdrawTransaction","refDCLSwapViewFunction","_context10","nearConnection","DCLInValid","DCLSwapGetStorageBalance","getDCLPoolId","join","getDCLPool","pool_id","_pool_id$split","token_seq","formatError","msg","Error","unNamedError","NotLoginError","SwapRouteError","NoLocalSignerError","NoPoolOnThisPair","SlippageError","NoOrderFound","order_id","OrderNoRemainedAmount","instantSwap","slippageTolerance","_swapTodos","registerToken","actionsList","allSwapsTokens","swapTokens","token_in","token_out","amount_in","min_amount_out","force","DEFAULT_PAGE_LIMIT","getRatedPoolDetail","pool_info","getUnRatedPoolDetail","getStablePools","getPool","_context4","getPoolByIds","pool_ids","getRefPools","page","perPage","from_index","limit","rawPool","fetchAllPools","min","pages","unRatedPools","ratedPools","ThemeContext","createContext","ThemeContextProvider","customTheme","children","useState","theme","setTheme","useEffect","React","Provider","TokenPriceContext","useTokenPriceList","tokenPriceList","setTokenPriceList","TokenPriceContextProvider","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","SmartRouteV2","tokensRaw","useContext","ParaTokenFrom","className","marginRight","Icon","alt","height","flexShrink","Hub","position","bottom","ArrowRight","_pools$","_pools$2","_pools$3","DetailView","rate","minReceived","storagedOpen","showDetail","setShowDetail","isRateReverse","setIsRateReverse","tokensPerRoute","swap","identicalRoutes","_estimates","hub","percents","useMemo","priceImpactDisplay","textColor","displayValue","tokenInInfo","displayRate","revertRate","revertDisplayRate","color","cursor","onClick","removeItem","FiChevronUp","FiChevronDown","RiExchangeFill","size","marginLeft","border","flexDirection","alignItems","justifyContent","RouterIcon","whiteSpace","minWidth","key","HalfAndMaxAmount","max","onChangeAmount","halfValue","hoverHalf","setHoverHalf","hoverMax","setHoverMax","background","onMouseEnter","onMouseLeave","half","TokenAmount","props","balance","reloading","onSelectToken","onForceUpdate","poolFetchingState","useRef","hoverSelect","setHoverSelect","handleChange","current","setCustomValidity","_ref$current","_ref$current2","curMax","RiRefreshLine","onWheel","blur","step","placeholder","onChange","disabled","onKeyDown","preventDefault","marginBottom","textAlign","fontSize","SlippageSelector","onChangeSlippageTolerance","showSlip","setShowSlip","invalid","setInValid","onclick","stopPropagation","paddingBottom","defaultValue","required","padding","IoWarning","StarToken","onDelete","hoverIcon","setHoverIcon","setHoverClose","top","right","boxShadow","IoCloseOutline","stroke","Token","isSticky","onClickPin","setHoverIndex","hoverIndex","displayBalance","hoverOutLink","setHoverOutLink","hoverPin","setHoverPin","HiOutlineExternalLink","marginTop","open","AiFillPushpin","AiOutlinePushpin","TokenListTable","balances","starList","setStarList","currentSort","setCurrentSort","newList","borderBottom","TiArrowSortedUp","TiArrowSortedDown","b1","_tokenPriceList$token","TokenSelector","onSelect","onClose","searchValue","setSearchValue","storagedStartList","DEFAULT_START_TOKEN_LIST","newStarList","starToken","FiChevronLeft","FaSearch","evt","_tokenPriceList$token2","searchValueLower","toLowerCase","_token$symbol","Slider","setHover","viewBox","xmlns","fillRule","clipRule","RefIcon","Loading","cx","cy","strokeWidth","strokeLinecap","Warning","y1","x2","y2","Success","left","gradientUnits","stopColor","Notification","state","detail","setOpen","setState","href","textDecoration","rel","fontWeight","AccountButton","onDisConnect","hoverAccount","setHoverAccount","DefaultTestnetTokenList","spec","reference","reference_hash","DefaultMainnetTokenList","DCLSwap","SwapByOutput","LimitOrderWithSwap","swapInfo","Swap","output_token","min_output_amount","output_amount","buy_token","new_point","quote","input_token","input_amount","list_user_assets","DCLSwapByInputOnBestPool","bestEstimate","bestFee","_bestEstimate$tag","_bestEstimate$tag$spl","_bestEstimate$tag2","_bestEstimate$tag2$sp","get_order","find_order","cancel_order","order","remain_amount","defaultTokenList","onSwap","connection","transactionState","onConnect","defaultTokenIn","defaultTokenOut","curTheme","darkMode","STORAGED_TOKEN_IN","STORAGED_TOKEN_OUT","isSignedIn","setTokenIn","handleSetTokenIn","handleSetTokenOut","setTokenOut","tokenInBalance","setTokenInBalance","tokenOutBalance","setTokenOutBalance","notOpen","setNotOpen","setTokens","setTokensLoading","widgetRoute","setWidgetRoute","setAmountIn","setSlippageTolerance","tokenLoading","setTokenLoading","whiteList","globalWhiteListTokens","parsedTokens","getTokensList","useTokensIndexer","fetchTokens","setBalances","validTokens","balancesMap","useTokenBalnces","refreshTrigger","setRreshTrigger","allPools","setAllPools","setPoolFetchingState","allStablePools","setAllStablePools","useRefPools","defaultIn","defaultOut","wrapedId","available","setEstimates","canSwap","setCanSwap","swapError","setSwapError","setAmountOut","isEstimating","setIsEstimating","forceEstimate","setForceEstimate","makeSwap","outEstimate","bigEstimate","estimateValidationPass","_swapTodos$","totalPartialAmountIn","estimateValidator","expectAmountOut","getEstimate","_params$tokenIn","_params$tokenOut","_params$tokenIn2","_params$tokenOut2","_params$options","useSwap","canSubmit","onSubmit","CgArrowsExchangeAltV","paddingTop","TiWarning","message","opacity","display","left_point","right_point","undecimal_price"],"mappings":"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"}