diff --git a/readme.md b/readme.md
index 1ff4bc95b4..2114f15640 100644
--- a/readme.md
+++ b/readme.md
@@ -1,10 +1,46 @@
-# 99Tech Code Challenge #1 #
+# 99Tech Code Challenge #1
Note that if you fork this repository, your responses may be publicly linked to this repo.
-Please submit your application along with the solutions attached or linked.
+Please submit your application along with the solutions attached or linked.
It is important that you minimally attempt the problems, even if you do not arrive at a working solution.
-## Submission ##
+## Submission
+
You can either provide a link to an online repository, attach the solution in your application, or whichever method you prefer.
We're cool as long as we can view your solution without any pain.
+
+## Problem Descriptions
+
+### Problem 1
+In `src/problem1/index.js` you’ll find three implementations of the same algorithm – summing the first `n` natural numbers:
+
+- **`sum_to_n_a`**: straightforward iterative loop accumulating the sum.
+- **`sum_to_n_b`**: recursive version that adds `n` to the result of `sum_to_n_b(n-1)` (note the stack‑overflow warning for large `n`).
+- **`sum_to_n_c`**: constant‑time formula using `n * (n + 1) / 2`.
+
+Each variant demonstrates a different approach to solving the same mathematical problem and could be used to discuss performance and edge cases.
+
+### Problem 2
+This directory contains a working Vite‑powered React + TypeScript project, not just a boilerplate. Key points:
+
+- **Configuration**: `tsconfig.json`, `tsconfig.node.json`, `.eslintrc.cjs`, and `vite.config.ts` are already set up for linting, type checking, and hot‑module reloading.
+- **Dependencies** include `react`, `react-dom`, `axios`, `styled-components` along with TypeScript and ESLint tooling.
+- **Structure**: under `src/` you’ll find a small swap‑UI application:
+ - Reusable components (`Button`, `Loading`, `TokenImage`, `SwapSection`, `SelectTokensModal`, `ConfirmSwapModal`)
+ - Pages (`SwapPage`) and styling helpers (`Flex.styled.ts`)
+ - Shared `constants`, `enums`, `types`, and utility scripts (e.g. `generateImportImages.js`)
+ - Asset management under `assets/img` with an importer script
+- **Scripts**: `npm run dev` starts the dev server, `npm run build` compiles TypeScript and bundles via Vite, and there’s a helper `generateImageObject` script.
+
+The application demonstrates a typical modern React stack with styled‑components and structured folder layout.
+
+### Problem 3
+Two versions of a wallet balance page are provided:
+
+- **`Example.tsx`** – an initial implementation sketching out the component, priority logic, and a placeholder `Datasource` class.
+- **`RefactorVersion.tsx`** – a refactored, more polished variant that adds type definitions, `makeStyles` for styling, and detailed comments about performance considerations.
+
+Both versions use a custom hook `useWalletBalances` (imported but not shown) to retrieve balances, then fetch price data from `https://interview.switcheo.com/prices.json` via the `Datasource` class. Balances are filtered and sorted by blockchain priority and converted to `WalletRow` elements with formatted amounts and USD values. The refactor includes notes about memoization, avoiding redundant calculations, and key generation for list items.
+
+This problem exercises React hooks, async data fetching, and basic optimization/documentation practices.
diff --git a/src/problem1/.keep b/src/problem1/.keep
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/src/problem1/index.js b/src/problem1/index.js
new file mode 100644
index 0000000000..f4a51f4dce
--- /dev/null
+++ b/src/problem1/index.js
@@ -0,0 +1,28 @@
+// Implementation 1: Iterative
+// This implementation uses a simple iterative loop to calculate the summation.
+function sum_to_n_a(n) {
+ let sum = 0;
+
+ for (let i = 1; i <= n; i++) {
+ sum += i;
+ }
+
+ return sum;
+}
+
+// Implementation 2: Recursive
+// This implementation uses recursion to calculate the summation.
+//Warning: When n is large, this implementation may cause a stack overflow error due to the large number of recursive calls.
+function sum_to_n_b(n) {
+ if (n === 1) {
+ return 1;
+ } else {
+ return n + sum_to_n_b(n - 1);
+ }
+}
+
+// Implementation 3: Formula
+// This implementation utilizes the formula for the summation of the first N natural numbers, which is n * (n + 1) / 2.
+function sum_to_n_c(n) {
+ return (n * (n + 1)) / 2;
+}
diff --git a/src/problem2/.eslintrc.cjs b/src/problem2/.eslintrc.cjs
new file mode 100644
index 0000000000..d6c9537953
--- /dev/null
+++ b/src/problem2/.eslintrc.cjs
@@ -0,0 +1,18 @@
+module.exports = {
+ root: true,
+ env: { browser: true, es2020: true },
+ extends: [
+ 'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
+ 'plugin:react-hooks/recommended',
+ ],
+ ignorePatterns: ['dist', '.eslintrc.cjs'],
+ parser: '@typescript-eslint/parser',
+ plugins: ['react-refresh'],
+ rules: {
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+}
diff --git a/src/problem2/.gitignore b/src/problem2/.gitignore
new file mode 100644
index 0000000000..a547bf36d8
--- /dev/null
+++ b/src/problem2/.gitignore
@@ -0,0 +1,24 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/src/problem2/README.md b/src/problem2/README.md
new file mode 100644
index 0000000000..0d6babeddb
--- /dev/null
+++ b/src/problem2/README.md
@@ -0,0 +1,30 @@
+# React + TypeScript + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## Expanding the ESLint configuration
+
+If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
+
+- Configure the top-level `parserOptions` property like this:
+
+```js
+export default {
+ // other rules...
+ parserOptions: {
+ ecmaVersion: 'latest',
+ sourceType: 'module',
+ project: ['./tsconfig.json', './tsconfig.node.json'],
+ tsconfigRootDir: __dirname,
+ },
+}
+```
+
+- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked`
+- Optionally add `plugin:@typescript-eslint/stylistic-type-checked`
+- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list
diff --git a/src/problem2/index.html b/src/problem2/index.html
index 4058a68bff..6591eaaca8 100644
--- a/src/problem2/index.html
+++ b/src/problem2/index.html
@@ -1,27 +1,13 @@
-
-
-
-
- Fancy Form
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ Fancy Swap Form
+
+
+
+
+
diff --git a/src/problem2/package.json b/src/problem2/package.json
new file mode 100644
index 0000000000..9cd28b0ce3
--- /dev/null
+++ b/src/problem2/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "problem2",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc && vite build",
+ "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
+ "preview": "vite preview",
+ "generateImageObject": "node src/utils/generateImportImages.js"
+ },
+ "dependencies": {
+ "axios": "^1.6.8",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "styled-components": "^6.1.8"
+ },
+ "devDependencies": {
+ "@types/node": "^20.12.2",
+ "@types/react": "^18.2.66",
+ "@types/react-dom": "^18.2.22",
+ "@typescript-eslint/eslint-plugin": "^7.2.0",
+ "@typescript-eslint/parser": "^7.2.0",
+ "@vitejs/plugin-react": "^4.2.1",
+ "eslint": "^8.57.0",
+ "eslint-plugin-react-hooks": "^4.6.0",
+ "eslint-plugin-react-refresh": "^0.4.6",
+ "typescript": "^5.2.2",
+ "vite": "^5.2.0"
+ }
+}
diff --git a/src/problem2/public/vite.svg b/src/problem2/public/vite.svg
new file mode 100644
index 0000000000..e7b8dfb1b2
--- /dev/null
+++ b/src/problem2/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/problem2/script.js b/src/problem2/script.js
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/src/problem2/src/App.css b/src/problem2/src/App.css
new file mode 100644
index 0000000000..79fb1bf3b1
--- /dev/null
+++ b/src/problem2/src/App.css
@@ -0,0 +1,38 @@
+#root {
+}
+
+.logo {
+ height: 6em;
+ padding: 1.5em;
+ will-change: filter;
+ transition: filter 300ms;
+}
+.logo:hover {
+ filter: drop-shadow(0 0 2em #646cffaa);
+}
+.logo.react:hover {
+ filter: drop-shadow(0 0 2em #61dafbaa);
+}
+
+@keyframes logo-spin {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ a:nth-of-type(2) .logo {
+ animation: logo-spin infinite 20s linear;
+ }
+}
+
+.card {
+ padding: 2em;
+}
+
+.read-the-docs {
+ color: #888;
+}
diff --git a/src/problem2/src/App.tsx b/src/problem2/src/App.tsx
new file mode 100644
index 0000000000..a4947052c5
--- /dev/null
+++ b/src/problem2/src/App.tsx
@@ -0,0 +1,8 @@
+import "./App.css";
+import SwapPage from "./pages/SwapPage/SwapPage";
+
+function App() {
+ return ;
+}
+
+export default App;
diff --git a/src/problem2/src/assets/img/icons/arrow-down.svg b/src/problem2/src/assets/img/icons/arrow-down.svg
new file mode 100644
index 0000000000..d9bbc8aab5
--- /dev/null
+++ b/src/problem2/src/assets/img/icons/arrow-down.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/problem2/src/assets/img/icons/chevron-down-black.svg b/src/problem2/src/assets/img/icons/chevron-down-black.svg
new file mode 100644
index 0000000000..a36139bef5
--- /dev/null
+++ b/src/problem2/src/assets/img/icons/chevron-down-black.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/problem2/src/assets/img/icons/chevron-down-white.svg b/src/problem2/src/assets/img/icons/chevron-down-white.svg
new file mode 100644
index 0000000000..bb74535f66
--- /dev/null
+++ b/src/problem2/src/assets/img/icons/chevron-down-white.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/problem2/src/assets/img/icons/close.svg b/src/problem2/src/assets/img/icons/close.svg
new file mode 100644
index 0000000000..4416cc46ee
--- /dev/null
+++ b/src/problem2/src/assets/img/icons/close.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/problem2/src/assets/img/icons/loading.svg b/src/problem2/src/assets/img/icons/loading.svg
new file mode 100644
index 0000000000..cb71211aef
--- /dev/null
+++ b/src/problem2/src/assets/img/icons/loading.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/icons/search.svg b/src/problem2/src/assets/img/icons/search.svg
new file mode 100644
index 0000000000..cfe5976671
--- /dev/null
+++ b/src/problem2/src/assets/img/icons/search.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/problem2/src/assets/img/index.ts b/src/problem2/src/assets/img/index.ts
new file mode 100644
index 0000000000..e3cab805b2
--- /dev/null
+++ b/src/problem2/src/assets/img/index.ts
@@ -0,0 +1,871 @@
+import AAVE from './tokens/AAVE.svg';
+import ADA from './tokens/ADA.svg';
+import AEVO from './tokens/AEVO.svg';
+import AGI from './tokens/AGI.svg';
+import AKRO from './tokens/AKRO.svg';
+import AKT from './tokens/AKT.svg';
+import ALGO from './tokens/ALGO.svg';
+import ALPHA from './tokens/ALPHA.svg';
+import ALT from './tokens/ALT.svg';
+import AMP from './tokens/AMP.svg';
+import ANC from './tokens/ANC.svg';
+import ANDR from './tokens/ANDR.svg';
+import ANKR from './tokens/ANKR.svg';
+import ANT from './tokens/ANT.svg';
+import ANY from './tokens/ANY.svg';
+import APE from './tokens/APE.svg';
+import APOLLO from './tokens/APOLLO.svg';
+import AR from './tokens/AR.svg';
+import ARB from './tokens/ARB.svg';
+import ARCH from './tokens/ARCH.svg';
+import ASA from './tokens/ASA.svg';
+import ASTRO from './tokens/ASTRO.svg';
+import ATOM from './tokens/ATOM.svg';
+import AUDIO from './tokens/AUDIO.svg';
+import AUT from './tokens/AUT.svg';
+import AVA from './tokens/AVA.svg';
+import AVAX from './tokens/AVAX.svg';
+import AXL from './tokens/AXL.svg';
+import AXS from './tokens/AXS.svg';
+import AXT from './tokens/AXT.svg';
+import BAKE from './tokens/BAKE.svg';
+import BAL from './tokens/BAL.svg';
+import BAND from './tokens/BAND.svg';
+import BAT from './tokens/BAT.svg';
+import BCD from './tokens/BCD.svg';
+import BCH from './tokens/BCH.svg';
+import BCHA from './tokens/BCHA.svg';
+import BCN from './tokens/BCN.svg';
+import BCNA from './tokens/BCNA.svg';
+import BELT from './tokens/BELT.svg';
+import BHC from './tokens/BHC.svg';
+import BIT from './tokens/BIT.svg';
+import BLAST from './tokens/BLAST.svg';
+import BLD from './tokens/BLD.svg';
+import BLOX from './tokens/BLOX.svg';
+import BLUR from './tokens/BLUR.svg';
+import BNB from './tokens/BNB.svg';
+import BNT from './tokens/BNT.svg';
+import BOLT from './tokens/BOLT.svg';
+import BOOT from './tokens/BOOT.svg';
+import BRAINS from './tokens/BRAINS.svg';
+import BRKL from './tokens/BRKL.svg';
+import BTC from './tokens/BTC.svg';
+import BTCST from './tokens/BTCST.svg';
+import BTG from './tokens/BTG.svg';
+import BTM from './tokens/BTM.svg';
+import BTMX from './tokens/BTMX.svg';
+import BTSG from './tokens/BTSG.svg';
+import BTT from './tokens/BTT.svg';
+import BUNNY from './tokens/BUNNY.svg';
+import BUSD from './tokens/BUSD.svg';
+import BUSDT from './tokens/BUSDT.svg';
+import C98 from './tokens/C98.svg';
+import CAKE from './tokens/CAKE.svg';
+import CANTO from './tokens/CANTO.svg';
+import CARB from './tokens/CARB.svg';
+import CAT from './tokens/CAT.svg';
+import CEL from './tokens/CEL.svg';
+import CELO from './tokens/CELO.svg';
+import CETH from './tokens/CETH.svg';
+import CFX from './tokens/CFX.svg';
+import CGAS from './tokens/CGAS.svg';
+import CHEQ from './tokens/CHEQ.svg';
+import CHSB from './tokens/CHSB.svg';
+import CHT from './tokens/CHT.svg';
+import CHZ from './tokens/CHZ.svg';
+import CKB from './tokens/CKB.svg';
+import CLP from './tokens/CLP.svg';
+import CMDX from './tokens/CMDX.svg';
+import CMST from './tokens/CMST.svg';
+import CNT from './tokens/CNT.svg';
+import COIN from './tokens/COIN.svg';
+import COMP from './tokens/COMP.svg';
+import CRBRUS from './tokens/CRBRUS.svg';
+import CRE from './tokens/CRE.svg';
+import CRO from './tokens/CRO.svg';
+import CRV from './tokens/CRV.svg';
+import CTK from './tokens/CTK.svg';
+import CW from './tokens/CW.svg';
+import DAG from './tokens/DAG.svg';
+import DAI from './tokens/DAI.svg';
+import DARC from './tokens/DARC.svg';
+import DASH from './tokens/DASH.svg';
+import DBC from './tokens/DBC.svg';
+import DCR from './tokens/DCR.svg';
+import DEC from './tokens/DEC.svg';
+import DENT from './tokens/DENT.svg';
+import DGB from './tokens/DGB.svg';
+import DIG from './tokens/DIG.svg';
+import DKT from './tokens/DKT.svg';
+import DODO from './tokens/DODO.svg';
+import DOGE from './tokens/DOGE.svg';
+import DOT from './tokens/DOT.svg';
+import DPX from './tokens/DPX.svg';
+import DRFT from './tokens/DRFT.svg';
+import DSM from './tokens/DSM.svg';
+import DVPN from './tokens/DVPN.svg';
+import DYDX from './tokens/DYDX.svg';
+import DYM from './tokens/DYM.svg';
+import EEUR from './tokens/EEUR.svg';
+import ELA from './tokens/ELA.svg';
+import ELF from './tokens/ELF.svg';
+import ENJ from './tokens/ENJ.svg';
+import ENS from './tokens/ENS.svg';
+import EOS from './tokens/EOS.svg';
+import EPS from './tokens/EPS.svg';
+import ETC from './tokens/ETC.svg';
+import ETH from './tokens/ETH.svg';
+import ETN from './tokens/ETN.svg';
+import EUROC from './tokens/EUROC.svg';
+import EUT from './tokens/EUT.svg';
+import EVMOS from './tokens/EVMOS.svg';
+import EWT from './tokens/EWT.svg';
+import FEES from './tokens/FEES.svg';
+import FET from './tokens/FET.svg';
+import FIL from './tokens/FIL.svg';
+import FIS from './tokens/FIS.svg';
+import FLIX from './tokens/FLIX.svg';
+import FLM from './tokens/FLM.svg';
+import FLOW from './tokens/FLOW.svg';
+import FLUID from './tokens/FLUID.svg';
+import FLUO from './tokens/FLUO.svg';
+import FRANK from './tokens/FRANK.svg';
+import FTM from './tokens/FTM.svg';
+import FTT from './tokens/FTT.svg';
+import FTTC from './tokens/FTTC.svg';
+import FUN from './tokens/FUN.svg';
+import GALA from './tokens/GALA.svg';
+import GAS from './tokens/GAS.svg';
+import GBT from './tokens/GBT.svg';
+import GLP from './tokens/GLP.svg';
+import GM from './tokens/GM.svg';
+import GMX from './tokens/GMX.svg';
+import GNO from './tokens/GNO.svg';
+import GNS from './tokens/GNS.svg';
+import GRAV from './tokens/GRAV.svg';
+import GRT from './tokens/GRT.svg';
+import GT from './tokens/GT.svg';
+import HBAR from './tokens/HBAR.svg';
+import HDN from './tokens/HDN.svg';
+import HELMET from './tokens/HELMET.svg';
+import HKT from './tokens/HKT.svg';
+import HNT from './tokens/HNT.svg';
+import HOPE from './tokens/HOPE.svg';
+import HOT from './tokens/HOT.svg';
+import HT from './tokens/HT.svg';
+import HUAHUA from './tokens/HUAHUA.svg';
+import HUNY from './tokens/HUNY.svg';
+import HUSD from './tokens/HUSD.svg';
+import IBCX from './tokens/IBCX.svg';
+import ICP from './tokens/ICP.svg';
+import ICX from './tokens/ICX.svg';
+import IDT from './tokens/IDT.svg';
+import INJ from './tokens/INJ.svg';
+import INT from './tokens/INT.svg';
+import ION from './tokens/ION.svg';
+import IOST from './tokens/IOST.svg';
+import IOTX from './tokens/IOTX.svg';
+import IOV from './tokens/IOV.svg';
+import IRIS from './tokens/IRIS.svg';
+import IXO from './tokens/IXO.svg';
+import JPT from './tokens/JPT.svg';
+import JTO from './tokens/JTO.svg';
+import JUNO from './tokens/JUNO.svg';
+import JUP from './tokens/JUP.svg';
+import KAS from './tokens/KAS.svg';
+import KCS from './tokens/KCS.svg';
+import KFLOKI from './tokens/KFLOKI.svg';
+import KLAY from './tokens/KLAY.svg';
+import KMD from './tokens/KMD.svg';
+import KNC from './tokens/KNC.svg';
+import KPEPE from './tokens/KPEPE.svg';
+import KRT from './tokens/KRT.svg';
+import KSM from './tokens/KSM.svg';
+import KUJI from './tokens/KUJI.svg';
+import LDO from './tokens/LDO.svg';
+import LEO from './tokens/LEO.svg';
+import LET from './tokens/LET.svg';
+import LIKE from './tokens/LIKE.svg';
+import LINK from './tokens/LINK.svg';
+import LKT from './tokens/LKT.svg';
+import LOOM from './tokens/LOOM.svg';
+import LOOP from './tokens/LOOP.svg';
+import LOTA from './tokens/LOTA.svg';
+import LPT from './tokens/LPT.svg';
+import LRC from './tokens/LRC.svg';
+import LSI from './tokens/LSI.svg';
+import LSK from './tokens/LSK.svg';
+import LTC from './tokens/LTC.svg';
+import LUM from './tokens/LUM.svg';
+import LUNA from './tokens/LUNA.svg';
+import LUNAX from './tokens/LUNAX.svg';
+import LUNC from './tokens/LUNC.svg';
+import LUNI from './tokens/LUNI.svg';
+import LUNR from './tokens/LUNR.svg';
+import LUV from './tokens/LUV.svg';
+import M87 from './tokens/M87.svg';
+import MANA from './tokens/MANA.svg';
+import MANTA from './tokens/MANTA.svg';
+import MARBLE from './tokens/MARBLE.svg';
+import MATH from './tokens/MATH.svg';
+import MATIC from './tokens/MATIC.svg';
+import MDX from './tokens/MDX.svg';
+import MED from './tokens/MED.svg';
+import MEME from './tokens/MEME.svg';
+import METIS from './tokens/METIS.svg';
+import MIAW from './tokens/MIAW.svg';
+import MINA from './tokens/MINA.svg';
+import MINE from './tokens/MINE.svg';
+import MIOTA from './tokens/MIOTA.svg';
+import MIR from './tokens/MIR.svg';
+import MKR from './tokens/MKR.svg';
+import MNT from './tokens/MNT.svg';
+import MNTA from './tokens/MNTA.svg';
+import MNTL from './tokens/MNTL.svg';
+import MYT from './tokens/MYT.svg';
+import NANO from './tokens/NANO.svg';
+import NAS from './tokens/NAS.svg';
+import NEAR from './tokens/NEAR.svg';
+import NEO from './tokens/NEO.svg';
+import NETA from './tokens/NETA.svg';
+import NEX from './tokens/NEX.svg';
+import NEXO from './tokens/NEXO.svg';
+import NGM from './tokens/NGM.svg';
+import NKN from './tokens/NKN.svg';
+import NMR from './tokens/NMR.svg';
+import NOT from './tokens/NOT.svg';
+import NOTE from './tokens/NOTE.svg';
+import NPXS from './tokens/NPXS.svg';
+import NTRN from './tokens/NTRN.svg';
+import NXM from './tokens/NXM.svg';
+import OCEAN from './tokens/OCEAN.svg';
+import OCH from './tokens/OCH.svg';
+import OGN from './tokens/OGN.svg';
+import OKB from './tokens/OKB.svg';
+import OKT from './tokens/OKT.svg';
+import OMG from './tokens/OMG.svg';
+import OMG_2 from './tokens/OMG_2.svg';
+import OMI from './tokens/OMI.svg';
+import ONE from './tokens/ONE.svg';
+import ONT from './tokens/ONT.svg';
+import OP from './tokens/OP.svg';
+import OPUL from './tokens/OPUL.svg';
+import ORDI from './tokens/ORDI.svg';
+import ORION from './tokens/ORION.svg';
+import ORNE from './tokens/ORNE.svg';
+import OSMO from './tokens/OSMO.svg';
+import OXT from './tokens/OXT.svg';
+import OXY from './tokens/OXY.svg';
+import PAX from './tokens/PAX.svg';
+import PEPE from './tokens/PEPE.svg';
+import PHT from './tokens/PHT.svg';
+import PLAY from './tokens/PLAY.svg';
+import PLQ from './tokens/PLQ.svg';
+import PLY from './tokens/PLY.svg';
+import POLY from './tokens/POLY.svg';
+import PORT from './tokens/PORT.svg';
+import PROM from './tokens/PROM.svg';
+import PSI from './tokens/PSI.svg';
+import PSTAKE from './tokens/PSTAKE.svg';
+import PYTH from './tokens/PYTH.svg';
+import QCK from './tokens/QCK.svg';
+import QKC from './tokens/QKC.svg';
+import QNT from './tokens/QNT.svg';
+import QTUM from './tokens/QTUM.svg';
+import RATOM from './tokens/RATOM.svg';
+import RAY from './tokens/RAY.svg';
+import RBN from './tokens/RBN.svg';
+import REEF from './tokens/REEF.svg';
+import REGEN from './tokens/REGEN.svg';
+import REN from './tokens/REN.svg';
+import REP from './tokens/REP.svg';
+import REV from './tokens/REV.svg';
+import RLB from './tokens/RLB.svg';
+import RLC from './tokens/RLC.svg';
+import RNDR from './tokens/RNDR.svg';
+import ROAR from './tokens/ROAR.svg';
+import ROWAN from './tokens/ROWAN.svg';
+import RSR from './tokens/RSR.svg';
+import RUNE from './tokens/RUNE.svg';
+import RVN from './tokens/RVN.svg';
+import SAFEMOON from './tokens/SAFEMOON.svg';
+import SAND from './tokens/SAND.svg';
+import SAYVE from './tokens/SAYVE.svg';
+import SC from './tokens/SC.svg';
+import SCRT from './tokens/SCRT.svg';
+import SDT from './tokens/SDT.svg';
+import SEI from './tokens/SEI.svg';
+import SET from './tokens/SET.svg';
+import SGT from './tokens/SGT.svg';
+import SHD from './tokens/SHD.svg';
+import SHIB from './tokens/SHIB.svg';
+import SITY from './tokens/SITY.svg';
+import SLERF from './tokens/SLERF.svg';
+import SNT from './tokens/SNT.svg';
+import SNX from './tokens/SNX.svg';
+import SOL from './tokens/SOL.svg';
+import SOM from './tokens/SOM.svg';
+import SOMM from './tokens/SOMM.svg';
+import SPEC from './tokens/SPEC.svg';
+import SRM from './tokens/SRM.svg';
+import SRV from './tokens/SRV.svg';
+import STARS from './tokens/STARS.svg';
+import STATOM from './tokens/STATOM.svg';
+import STEEM from './tokens/STEEM.svg';
+import STEVMOS from './tokens/STEVMOS.svg';
+import STLUNA from './tokens/STLUNA.svg';
+import STMX from './tokens/STMX.svg';
+import STORJ from './tokens/STORJ.svg';
+import STOSMO from './tokens/STOSMO.svg';
+import STRAX from './tokens/STRAX.svg';
+import STRD from './tokens/STRD.svg';
+import STREAM from './tokens/STREAM.svg';
+import STRK from './tokens/STRK.svg';
+import STT from './tokens/STT.svg';
+import STX from './tokens/STX.svg';
+import SUSHI from './tokens/SUSHI.svg';
+import SWTH from './tokens/SWTH.svg';
+import SXP from './tokens/SXP.svg';
+import TEL from './tokens/TEL.svg';
+import TFUEL from './tokens/TFUEL.svg';
+import THETA from './tokens/THETA.svg';
+import THT from './tokens/THT.svg';
+import TIA from './tokens/TIA.svg';
+import TICK from './tokens/TICK.svg';
+import TITAN from './tokens/TITAN.svg';
+import TLAND from './tokens/TLAND.svg';
+import TLM from './tokens/TLM.svg';
+import TOMO from './tokens/TOMO.svg';
+import TON from './tokens/TON.svg';
+import TPC from './tokens/TPC.svg';
+import TRAXX from './tokens/TRAXX.svg';
+import TRB from './tokens/TRB.svg';
+import TRU from './tokens/TRU.svg';
+import TRX from './tokens/TRX.svg';
+import TTT from './tokens/TTT.svg';
+import TUSD from './tokens/TUSD.svg';
+import TWD from './tokens/TWD.svg';
+import TWT from './tokens/TWT.svg';
+import Token from './tokens/Token.svg';
+import UBQ from './tokens/UBQ.svg';
+import UMEE from './tokens/UMEE.svg';
+import UNA from './tokens/UNA.svg';
+import UNI from './tokens/UNI.svg';
+import UOS from './tokens/UOS.svg';
+import USC from './tokens/USC.svg';
+import USD from './tokens/USD.svg';
+import USDC from './tokens/USDC.svg';
+import USDP from './tokens/USDP.svg';
+import USDT from './tokens/USDT.svg';
+import USK from './tokens/USK.svg';
+import UST from './tokens/UST.svg';
+import VDL from './tokens/VDL.svg';
+import VET from './tokens/VET.svg';
+import VKR from './tokens/VKR.svg';
+import VRTX from './tokens/VRTX.svg';
+import W from './tokens/W.svg';
+import WAVE from './tokens/WAVE.svg';
+import WBNB from './tokens/WBNB.svg';
+import WBTC from './tokens/WBTC.svg';
+import WETH from './tokens/WETH.svg';
+import WHALE from './tokens/WHALE.svg';
+import WIF from './tokens/WIF.svg';
+import WIN from './tokens/WIN.svg';
+import WLD from './tokens/WLD.svg';
+import WMATIC from './tokens/WMATIC.svg';
+import WRX from './tokens/WRX.svg';
+import XCAD from './tokens/XCAD.svg';
+import XDC from './tokens/XDC.svg';
+import XEM from './tokens/XEM.svg';
+import XKI from './tokens/XKI.svg';
+import XLM from './tokens/XLM.svg';
+import XMR from './tokens/XMR.svg';
+import XPRT from './tokens/XPRT.svg';
+import XRP from './tokens/XRP.svg';
+import XSGD from './tokens/XSGD.svg';
+import XTRA from './tokens/XTRA.svg';
+import XTZ from './tokens/XTZ.svg';
+import XVG from './tokens/XVG.svg';
+import XVS from './tokens/XVS.svg';
+import YAM from './tokens/YAM.svg';
+import YFI from './tokens/YFI.svg';
+import YieldUSD from './tokens/YieldUSD.svg';
+import ZCH from './tokens/ZCH.svg';
+import ZEC from './tokens/ZEC.svg';
+import ZEN from './tokens/ZEN.svg';
+import ZIL from './tokens/ZIL.svg';
+import ZRO from './tokens/ZRO.svg';
+import ZRX from './tokens/ZRX.svg';
+import ZWAP from './tokens/ZWAP.svg';
+import ampKUJI from './tokens/ampKUJI.svg';
+import ampLUNA from './tokens/ampLUNA.svg';
+import axlUSDC from './tokens/axlUSDC.svg';
+import bCFX from './tokens/bCFX.svg';
+import bNEO from './tokens/bNEO.svg';
+import cGLP from './tokens/cGLP.svg';
+import cUSD from './tokens/cUSD.svg';
+import dINJ from './tokens/dINJ.svg';
+import dXCAD from './tokens/dXCAD.svg';
+import eGLD from './tokens/eGLD.svg';
+import ePLAY from './tokens/ePLAY.svg';
+import esFLUO from './tokens/esFLUO.svg';
+import gZIL from './tokens/gZIL.svg';
+import iSEI from './tokens/iSEI.svg';
+import iUSD from './tokens/iUSD.svg';
+import milkTIA from './tokens/milkTIA.svg';
+import nNEO from './tokens/nNEO.svg';
+import rSWTH from './tokens/rSWTH.svg';
+import sARCH from './tokens/sARCH.svg';
+import stDYDX from './tokens/stDYDX.svg';
+import stDYM from './tokens/stDYM.svg';
+import stETH from './tokens/stETH.svg';
+import stFLUO from './tokens/stFLUO.svg';
+import stIBCX from './tokens/stIBCX.svg';
+import stINJ from './tokens/stINJ.svg';
+import stJUNO from './tokens/stJUNO.svg';
+import stOKT from './tokens/stOKT.svg';
+import stSTARS from './tokens/stSTARS.svg';
+import stTIA from './tokens/stTIA.svg';
+import stZIL from './tokens/stZIL.svg';
+import stkATOM from './tokens/stkATOM.svg';
+import stkDYDX from './tokens/stkDYDX.svg';
+import vZWAP from './tokens/vZWAP.svg';
+import veFLUO from './tokens/veFLUO.svg';
+import wKAS from './tokens/wKAS.svg';
+import wstETH from './tokens/wstETH.svg'; export const images: { [key: string]: string } = { AAVE,
+ADA,
+AEVO,
+AGI,
+AKRO,
+AKT,
+ALGO,
+ALPHA,
+ALT,
+AMP,
+ANC,
+ANDR,
+ANKR,
+ANT,
+ANY,
+APE,
+APOLLO,
+AR,
+ARB,
+ARCH,
+ASA,
+ASTRO,
+ATOM,
+AUDIO,
+AUT,
+AVA,
+AVAX,
+AXL,
+AXS,
+AXT,
+BAKE,
+BAL,
+BAND,
+BAT,
+BCD,
+BCH,
+BCHA,
+BCN,
+BCNA,
+BELT,
+BHC,
+BIT,
+BLAST,
+BLD,
+BLOX,
+BLUR,
+BNB,
+BNT,
+BOLT,
+BOOT,
+BRAINS,
+BRKL,
+BTC,
+BTCST,
+BTG,
+BTM,
+BTMX,
+BTSG,
+BTT,
+BUNNY,
+BUSD,
+BUSDT,
+C98,
+CAKE,
+CANTO,
+CARB,
+CAT,
+CEL,
+CELO,
+CETH,
+CFX,
+CGAS,
+CHEQ,
+CHSB,
+CHT,
+CHZ,
+CKB,
+CLP,
+CMDX,
+CMST,
+CNT,
+COIN,
+COMP,
+CRBRUS,
+CRE,
+CRO,
+CRV,
+CTK,
+CW,
+DAG,
+DAI,
+DARC,
+DASH,
+DBC,
+DCR,
+DEC,
+DENT,
+DGB,
+DIG,
+DKT,
+DODO,
+DOGE,
+DOT,
+DPX,
+DRFT,
+DSM,
+DVPN,
+DYDX,
+DYM,
+EEUR,
+ELA,
+ELF,
+ENJ,
+ENS,
+EOS,
+EPS,
+ETC,
+ETH,
+ETN,
+EUROC,
+EUT,
+EVMOS,
+EWT,
+FEES,
+FET,
+FIL,
+FIS,
+FLIX,
+FLM,
+FLOW,
+FLUID,
+FLUO,
+FRANK,
+FTM,
+FTT,
+FTTC,
+FUN,
+GALA,
+GAS,
+GBT,
+GLP,
+GM,
+GMX,
+GNO,
+GNS,
+GRAV,
+GRT,
+GT,
+HBAR,
+HDN,
+HELMET,
+HKT,
+HNT,
+HOPE,
+HOT,
+HT,
+HUAHUA,
+HUNY,
+HUSD,
+IBCX,
+ICP,
+ICX,
+IDT,
+INJ,
+INT,
+ION,
+IOST,
+IOTX,
+IOV,
+IRIS,
+IXO,
+JPT,
+JTO,
+JUNO,
+JUP,
+KAS,
+KCS,
+KFLOKI,
+KLAY,
+KMD,
+KNC,
+KPEPE,
+KRT,
+KSM,
+KUJI,
+LDO,
+LEO,
+LET,
+LIKE,
+LINK,
+LKT,
+LOOM,
+LOOP,
+LOTA,
+LPT,
+LRC,
+LSI,
+LSK,
+LTC,
+LUM,
+LUNA,
+LUNAX,
+LUNC,
+LUNI,
+LUNR,
+LUV,
+M87,
+MANA,
+MANTA,
+MARBLE,
+MATH,
+MATIC,
+MDX,
+MED,
+MEME,
+METIS,
+MIAW,
+MINA,
+MINE,
+MIOTA,
+MIR,
+MKR,
+MNT,
+MNTA,
+MNTL,
+MYT,
+NANO,
+NAS,
+NEAR,
+NEO,
+NETA,
+NEX,
+NEXO,
+NGM,
+NKN,
+NMR,
+NOT,
+NOTE,
+NPXS,
+NTRN,
+NXM,
+OCEAN,
+OCH,
+OGN,
+OKB,
+OKT,
+OMG,
+OMG_2,
+OMI,
+ONE,
+ONT,
+OP,
+OPUL,
+ORDI,
+ORION,
+ORNE,
+OSMO,
+OXT,
+OXY,
+PAX,
+PEPE,
+PHT,
+PLAY,
+PLQ,
+PLY,
+POLY,
+PORT,
+PROM,
+PSI,
+PSTAKE,
+PYTH,
+QCK,
+QKC,
+QNT,
+QTUM,
+RATOM,
+RAY,
+RBN,
+REEF,
+REGEN,
+REN,
+REP,
+REV,
+RLB,
+RLC,
+RNDR,
+ROAR,
+ROWAN,
+RSR,
+RUNE,
+RVN,
+SAFEMOON,
+SAND,
+SAYVE,
+SC,
+SCRT,
+SDT,
+SEI,
+SET,
+SGT,
+SHD,
+SHIB,
+SITY,
+SLERF,
+SNT,
+SNX,
+SOL,
+SOM,
+SOMM,
+SPEC,
+SRM,
+SRV,
+STARS,
+STATOM,
+STEEM,
+STEVMOS,
+STLUNA,
+STMX,
+STORJ,
+STOSMO,
+STRAX,
+STRD,
+STREAM,
+STRK,
+STT,
+STX,
+SUSHI,
+SWTH,
+SXP,
+TEL,
+TFUEL,
+THETA,
+THT,
+TIA,
+TICK,
+TITAN,
+TLAND,
+TLM,
+TOMO,
+TON,
+TPC,
+TRAXX,
+TRB,
+TRU,
+TRX,
+TTT,
+TUSD,
+TWD,
+TWT,
+Token,
+UBQ,
+UMEE,
+UNA,
+UNI,
+UOS,
+USC,
+USD,
+USDC,
+USDP,
+USDT,
+USK,
+UST,
+VDL,
+VET,
+VKR,
+VRTX,
+W,
+WAVE,
+WBNB,
+WBTC,
+WETH,
+WHALE,
+WIF,
+WIN,
+WLD,
+WMATIC,
+WRX,
+XCAD,
+XDC,
+XEM,
+XKI,
+XLM,
+XMR,
+XPRT,
+XRP,
+XSGD,
+XTRA,
+XTZ,
+XVG,
+XVS,
+YAM,
+YFI,
+YieldUSD,
+ZCH,
+ZEC,
+ZEN,
+ZIL,
+ZRO,
+ZRX,
+ZWAP,
+ampKUJI,
+ampLUNA,
+axlUSDC,
+bCFX,
+bNEO,
+cGLP,
+cUSD,
+dINJ,
+dXCAD,
+eGLD,
+ePLAY,
+esFLUO,
+gZIL,
+iSEI,
+iUSD,
+milkTIA,
+nNEO,
+rSWTH,
+sARCH,
+stDYDX,
+stDYM,
+stETH,
+stFLUO,
+stIBCX,
+stINJ,
+stJUNO,
+stOKT,
+stSTARS,
+stTIA,
+stZIL,
+stkATOM,
+stkDYDX,
+vZWAP,
+veFLUO,
+wKAS,
+wstETH,}
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/AAVE.svg b/src/problem2/src/assets/img/tokens/AAVE.svg
new file mode 100644
index 0000000000..a5cb956a17
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AAVE.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ADA.svg b/src/problem2/src/assets/img/tokens/ADA.svg
new file mode 100644
index 0000000000..c57bee9598
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ADA.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AEVO.svg b/src/problem2/src/assets/img/tokens/AEVO.svg
new file mode 100644
index 0000000000..26c36a62dd
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AEVO.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AGI.svg b/src/problem2/src/assets/img/tokens/AGI.svg
new file mode 100644
index 0000000000..2617764b4c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AGI.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AKRO.svg b/src/problem2/src/assets/img/tokens/AKRO.svg
new file mode 100644
index 0000000000..33501e5c2e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AKRO.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AKT.svg b/src/problem2/src/assets/img/tokens/AKT.svg
new file mode 100644
index 0000000000..a0733cd5e8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AKT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ALGO.svg b/src/problem2/src/assets/img/tokens/ALGO.svg
new file mode 100644
index 0000000000..0c79ab88fd
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ALGO.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ALPHA.svg b/src/problem2/src/assets/img/tokens/ALPHA.svg
new file mode 100644
index 0000000000..9d916fb949
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ALPHA.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ALT.svg b/src/problem2/src/assets/img/tokens/ALT.svg
new file mode 100644
index 0000000000..fb551dfa7d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ALT.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AMP.svg b/src/problem2/src/assets/img/tokens/AMP.svg
new file mode 100644
index 0000000000..71bec9f9b4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AMP.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ANC.svg b/src/problem2/src/assets/img/tokens/ANC.svg
new file mode 100644
index 0000000000..bd414783cf
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ANC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ANDR.svg b/src/problem2/src/assets/img/tokens/ANDR.svg
new file mode 100644
index 0000000000..fc7e23b4ef
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ANDR.svg
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ANKR.svg b/src/problem2/src/assets/img/tokens/ANKR.svg
new file mode 100644
index 0000000000..b8599f0165
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ANKR.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ANT.svg b/src/problem2/src/assets/img/tokens/ANT.svg
new file mode 100644
index 0000000000..f805ff79f5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ANT.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ANY.svg b/src/problem2/src/assets/img/tokens/ANY.svg
new file mode 100644
index 0000000000..c504391175
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ANY.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/APE.svg b/src/problem2/src/assets/img/tokens/APE.svg
new file mode 100644
index 0000000000..26ff9cfd4e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/APE.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/APOLLO.svg b/src/problem2/src/assets/img/tokens/APOLLO.svg
new file mode 100644
index 0000000000..852aa5cea2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/APOLLO.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AR.svg b/src/problem2/src/assets/img/tokens/AR.svg
new file mode 100644
index 0000000000..5efc91fdb4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AR.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ARB.svg b/src/problem2/src/assets/img/tokens/ARB.svg
new file mode 100644
index 0000000000..2666c28ab2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ARB.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ARCH.svg b/src/problem2/src/assets/img/tokens/ARCH.svg
new file mode 100644
index 0000000000..b6deb843a1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ARCH.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ASA.svg b/src/problem2/src/assets/img/tokens/ASA.svg
new file mode 100644
index 0000000000..7023a06245
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ASA.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ASTRO.svg b/src/problem2/src/assets/img/tokens/ASTRO.svg
new file mode 100644
index 0000000000..23047ab947
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ASTRO.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ATOM.svg b/src/problem2/src/assets/img/tokens/ATOM.svg
new file mode 100644
index 0000000000..f3f9d10429
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ATOM.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AUDIO.svg b/src/problem2/src/assets/img/tokens/AUDIO.svg
new file mode 100644
index 0000000000..527d7ae79e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AUDIO.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AUT.svg b/src/problem2/src/assets/img/tokens/AUT.svg
new file mode 100644
index 0000000000..4f442bcfe1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AUT.svg
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AVA.svg b/src/problem2/src/assets/img/tokens/AVA.svg
new file mode 100644
index 0000000000..b88859ee56
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AVA.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AVAX.svg b/src/problem2/src/assets/img/tokens/AVAX.svg
new file mode 100644
index 0000000000..a62f12b076
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AVAX.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AXL.svg b/src/problem2/src/assets/img/tokens/AXL.svg
new file mode 100644
index 0000000000..a0d81a72ff
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AXL.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AXS.svg b/src/problem2/src/assets/img/tokens/AXS.svg
new file mode 100644
index 0000000000..ab64a1a097
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AXS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/AXT.svg b/src/problem2/src/assets/img/tokens/AXT.svg
new file mode 100644
index 0000000000..a0be2a7e32
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/AXT.svg
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BAKE.svg b/src/problem2/src/assets/img/tokens/BAKE.svg
new file mode 100644
index 0000000000..48e18cc4c8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BAKE.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BAL.svg b/src/problem2/src/assets/img/tokens/BAL.svg
new file mode 100644
index 0000000000..274d48692b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BAL.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BAND.svg b/src/problem2/src/assets/img/tokens/BAND.svg
new file mode 100644
index 0000000000..fe0b053178
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BAND.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BAT.svg b/src/problem2/src/assets/img/tokens/BAT.svg
new file mode 100644
index 0000000000..6bea15edba
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BAT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BCD.svg b/src/problem2/src/assets/img/tokens/BCD.svg
new file mode 100644
index 0000000000..2eae4d86ac
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BCD.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BCH.svg b/src/problem2/src/assets/img/tokens/BCH.svg
new file mode 100644
index 0000000000..c1b2185860
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BCH.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BCHA.svg b/src/problem2/src/assets/img/tokens/BCHA.svg
new file mode 100644
index 0000000000..d1c50093bd
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BCHA.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BCN.svg b/src/problem2/src/assets/img/tokens/BCN.svg
new file mode 100644
index 0000000000..446afbc222
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BCN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BCNA.svg b/src/problem2/src/assets/img/tokens/BCNA.svg
new file mode 100644
index 0000000000..81cb2950dc
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BCNA.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BELT.svg b/src/problem2/src/assets/img/tokens/BELT.svg
new file mode 100644
index 0000000000..0711b1485c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BELT.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/BHC.svg b/src/problem2/src/assets/img/tokens/BHC.svg
new file mode 100644
index 0000000000..c1b2185860
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BHC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BIT.svg b/src/problem2/src/assets/img/tokens/BIT.svg
new file mode 100644
index 0000000000..123a839eb5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BIT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BLAST.svg b/src/problem2/src/assets/img/tokens/BLAST.svg
new file mode 100644
index 0000000000..d931df3f89
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BLAST.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BLD.svg b/src/problem2/src/assets/img/tokens/BLD.svg
new file mode 100644
index 0000000000..1674899d4e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BLD.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BLOX.svg b/src/problem2/src/assets/img/tokens/BLOX.svg
new file mode 100644
index 0000000000..7a3045c57f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BLOX.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BLUR.svg b/src/problem2/src/assets/img/tokens/BLUR.svg
new file mode 100644
index 0000000000..bf1e280984
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BLUR.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BNB.svg b/src/problem2/src/assets/img/tokens/BNB.svg
new file mode 100644
index 0000000000..a7c6699768
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BNB.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BNT.svg b/src/problem2/src/assets/img/tokens/BNT.svg
new file mode 100644
index 0000000000..4c29bec3c9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BNT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BOLT.svg b/src/problem2/src/assets/img/tokens/BOLT.svg
new file mode 100644
index 0000000000..a74a21608e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BOLT.svg
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BOOT.svg b/src/problem2/src/assets/img/tokens/BOOT.svg
new file mode 100644
index 0000000000..2469b80cfd
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BOOT.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BRAINS.svg b/src/problem2/src/assets/img/tokens/BRAINS.svg
new file mode 100644
index 0000000000..5c6a1d4184
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BRAINS.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BRKL.svg b/src/problem2/src/assets/img/tokens/BRKL.svg
new file mode 100644
index 0000000000..5963d18244
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BRKL.svg
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTC.svg b/src/problem2/src/assets/img/tokens/BTC.svg
new file mode 100644
index 0000000000..cd3b1e78e2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTC.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTCST.svg b/src/problem2/src/assets/img/tokens/BTCST.svg
new file mode 100644
index 0000000000..63d5b3c441
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTCST.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTG.svg b/src/problem2/src/assets/img/tokens/BTG.svg
new file mode 100644
index 0000000000..41629e7d6a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTG.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTM.svg b/src/problem2/src/assets/img/tokens/BTM.svg
new file mode 100644
index 0000000000..16fdbdfda4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTM.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTMX.svg b/src/problem2/src/assets/img/tokens/BTMX.svg
new file mode 100644
index 0000000000..5e4a26a71e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTMX.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTSG.svg b/src/problem2/src/assets/img/tokens/BTSG.svg
new file mode 100644
index 0000000000..9b82cf6a0b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTSG.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BTT.svg b/src/problem2/src/assets/img/tokens/BTT.svg
new file mode 100644
index 0000000000..736450a2db
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BTT.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BUNNY.svg b/src/problem2/src/assets/img/tokens/BUNNY.svg
new file mode 100644
index 0000000000..4bed16291f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BUNNY.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BUSD.svg b/src/problem2/src/assets/img/tokens/BUSD.svg
new file mode 100644
index 0000000000..b992764bd1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BUSD.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/BUSDT.svg b/src/problem2/src/assets/img/tokens/BUSDT.svg
new file mode 100644
index 0000000000..a0f22bf490
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/BUSDT.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/C98.svg b/src/problem2/src/assets/img/tokens/C98.svg
new file mode 100644
index 0000000000..3a0ff2bb70
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/C98.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CAKE.svg b/src/problem2/src/assets/img/tokens/CAKE.svg
new file mode 100644
index 0000000000..ce45fbe253
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CAKE.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CANTO.svg b/src/problem2/src/assets/img/tokens/CANTO.svg
new file mode 100644
index 0000000000..d2758becf9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CANTO.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CARB.svg b/src/problem2/src/assets/img/tokens/CARB.svg
new file mode 100644
index 0000000000..02e14d0bfe
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CARB.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CAT.svg b/src/problem2/src/assets/img/tokens/CAT.svg
new file mode 100644
index 0000000000..8f81af95be
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CAT.svg
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CEL.svg b/src/problem2/src/assets/img/tokens/CEL.svg
new file mode 100644
index 0000000000..02cfbd269c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CEL.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CELO.svg b/src/problem2/src/assets/img/tokens/CELO.svg
new file mode 100644
index 0000000000..5ff3c6c83c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CELO.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CETH.svg b/src/problem2/src/assets/img/tokens/CETH.svg
new file mode 100644
index 0000000000..448a94a7a7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CETH.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CFX.svg b/src/problem2/src/assets/img/tokens/CFX.svg
new file mode 100644
index 0000000000..07e8c434db
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CFX.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CGAS.svg b/src/problem2/src/assets/img/tokens/CGAS.svg
new file mode 100644
index 0000000000..3c31d75c0c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CGAS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CHEQ.svg b/src/problem2/src/assets/img/tokens/CHEQ.svg
new file mode 100644
index 0000000000..ed1621a482
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CHEQ.svg
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CHSB.svg b/src/problem2/src/assets/img/tokens/CHSB.svg
new file mode 100644
index 0000000000..0118cfce5c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CHSB.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CHT.svg b/src/problem2/src/assets/img/tokens/CHT.svg
new file mode 100644
index 0000000000..19d6392712
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CHT.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CHZ.svg b/src/problem2/src/assets/img/tokens/CHZ.svg
new file mode 100644
index 0000000000..68897c58f1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CHZ.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CKB.svg b/src/problem2/src/assets/img/tokens/CKB.svg
new file mode 100644
index 0000000000..888ff3323e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CKB.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CLP.svg b/src/problem2/src/assets/img/tokens/CLP.svg
new file mode 100644
index 0000000000..bb168fcf19
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CLP.svg
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CMDX.svg b/src/problem2/src/assets/img/tokens/CMDX.svg
new file mode 100644
index 0000000000..028d44e951
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CMDX.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CMST.svg b/src/problem2/src/assets/img/tokens/CMST.svg
new file mode 100644
index 0000000000..cd6cb419eb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CMST.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CNT.svg b/src/problem2/src/assets/img/tokens/CNT.svg
new file mode 100644
index 0000000000..c098860f72
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CNT.svg
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/COIN.svg b/src/problem2/src/assets/img/tokens/COIN.svg
new file mode 100644
index 0000000000..098ee36d37
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/COIN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/COMP.svg b/src/problem2/src/assets/img/tokens/COMP.svg
new file mode 100644
index 0000000000..563bf3af25
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/COMP.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CRBRUS.svg b/src/problem2/src/assets/img/tokens/CRBRUS.svg
new file mode 100644
index 0000000000..d847b37b3c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CRBRUS.svg
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CRE.svg b/src/problem2/src/assets/img/tokens/CRE.svg
new file mode 100644
index 0000000000..4008331be2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CRE.svg
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CRO.svg b/src/problem2/src/assets/img/tokens/CRO.svg
new file mode 100644
index 0000000000..75ddad7d51
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CRO.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CRV.svg b/src/problem2/src/assets/img/tokens/CRV.svg
new file mode 100644
index 0000000000..f9fa597fac
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CRV.svg
@@ -0,0 +1,790 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CTK.svg b/src/problem2/src/assets/img/tokens/CTK.svg
new file mode 100644
index 0000000000..96bfa4f618
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CTK.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/CW.svg b/src/problem2/src/assets/img/tokens/CW.svg
new file mode 100644
index 0000000000..e0d8eef0af
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/CW.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DAG.svg b/src/problem2/src/assets/img/tokens/DAG.svg
new file mode 100644
index 0000000000..a06db4c405
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DAG.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DAI.svg b/src/problem2/src/assets/img/tokens/DAI.svg
new file mode 100644
index 0000000000..00fdd7ae1b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DAI.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DARC.svg b/src/problem2/src/assets/img/tokens/DARC.svg
new file mode 100644
index 0000000000..8e131ded9b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DARC.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DASH.svg b/src/problem2/src/assets/img/tokens/DASH.svg
new file mode 100644
index 0000000000..17e5eb7146
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DASH.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DBC.svg b/src/problem2/src/assets/img/tokens/DBC.svg
new file mode 100644
index 0000000000..91e7b72378
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DBC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DCR.svg b/src/problem2/src/assets/img/tokens/DCR.svg
new file mode 100644
index 0000000000..d97040bcfe
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DCR.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DEC.svg b/src/problem2/src/assets/img/tokens/DEC.svg
new file mode 100644
index 0000000000..025f6329b0
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DEC.svg
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DENT.svg b/src/problem2/src/assets/img/tokens/DENT.svg
new file mode 100644
index 0000000000..10035d5a1a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DENT.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DGB.svg b/src/problem2/src/assets/img/tokens/DGB.svg
new file mode 100644
index 0000000000..ecf85eb29f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DGB.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DIG.svg b/src/problem2/src/assets/img/tokens/DIG.svg
new file mode 100644
index 0000000000..b75f6740df
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DIG.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DKT.svg b/src/problem2/src/assets/img/tokens/DKT.svg
new file mode 100644
index 0000000000..8d1d5a5604
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DKT.svg
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DODO.svg b/src/problem2/src/assets/img/tokens/DODO.svg
new file mode 100644
index 0000000000..514dd23b5e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DODO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DOGE.svg b/src/problem2/src/assets/img/tokens/DOGE.svg
new file mode 100644
index 0000000000..f019ca4b5e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DOGE.svg
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DOT.svg b/src/problem2/src/assets/img/tokens/DOT.svg
new file mode 100644
index 0000000000..db6de54b24
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DOT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DPX.svg b/src/problem2/src/assets/img/tokens/DPX.svg
new file mode 100644
index 0000000000..d96e812979
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DPX.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DRFT.svg b/src/problem2/src/assets/img/tokens/DRFT.svg
new file mode 100644
index 0000000000..3f64fd9620
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DRFT.svg
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DSM.svg b/src/problem2/src/assets/img/tokens/DSM.svg
new file mode 100644
index 0000000000..b305f5f5ea
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DSM.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DVPN.svg b/src/problem2/src/assets/img/tokens/DVPN.svg
new file mode 100644
index 0000000000..cb35dbc086
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DVPN.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DYDX.svg b/src/problem2/src/assets/img/tokens/DYDX.svg
new file mode 100644
index 0000000000..7977307c0f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DYDX.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/DYM.svg b/src/problem2/src/assets/img/tokens/DYM.svg
new file mode 100644
index 0000000000..e696de4fd5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/DYM.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EEUR.svg b/src/problem2/src/assets/img/tokens/EEUR.svg
new file mode 100644
index 0000000000..25f940a5b3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EEUR.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ELA.svg b/src/problem2/src/assets/img/tokens/ELA.svg
new file mode 100644
index 0000000000..7612168452
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ELA.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ELF.svg b/src/problem2/src/assets/img/tokens/ELF.svg
new file mode 100644
index 0000000000..fd3bc6cfe8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ELF.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ENJ.svg b/src/problem2/src/assets/img/tokens/ENJ.svg
new file mode 100644
index 0000000000..7b832779f7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ENJ.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ENS.svg b/src/problem2/src/assets/img/tokens/ENS.svg
new file mode 100644
index 0000000000..94d385bc10
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ENS.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EOS.svg b/src/problem2/src/assets/img/tokens/EOS.svg
new file mode 100644
index 0000000000..61de71db6d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EOS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EPS.svg b/src/problem2/src/assets/img/tokens/EPS.svg
new file mode 100644
index 0000000000..ef8bb614e1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EPS.svg
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ETC.svg b/src/problem2/src/assets/img/tokens/ETC.svg
new file mode 100644
index 0000000000..7b3e8b3869
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ETC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ETH.svg b/src/problem2/src/assets/img/tokens/ETH.svg
new file mode 100644
index 0000000000..6a7cd5afc4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ETH.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ETN.svg b/src/problem2/src/assets/img/tokens/ETN.svg
new file mode 100644
index 0000000000..a13bc14247
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ETN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EUROC.svg b/src/problem2/src/assets/img/tokens/EUROC.svg
new file mode 100644
index 0000000000..81134495c6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EUROC.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EUT.svg b/src/problem2/src/assets/img/tokens/EUT.svg
new file mode 100644
index 0000000000..56c4d324a5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EUT.svg
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EVMOS.svg b/src/problem2/src/assets/img/tokens/EVMOS.svg
new file mode 100644
index 0000000000..8d0b90acb4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EVMOS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/EWT.svg b/src/problem2/src/assets/img/tokens/EWT.svg
new file mode 100644
index 0000000000..db6e0ec632
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/EWT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FEES.svg b/src/problem2/src/assets/img/tokens/FEES.svg
new file mode 100644
index 0000000000..f31a2e1f85
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FEES.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FET.svg b/src/problem2/src/assets/img/tokens/FET.svg
new file mode 100644
index 0000000000..20b53be3d1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FET.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FIL.svg b/src/problem2/src/assets/img/tokens/FIL.svg
new file mode 100644
index 0000000000..a875441006
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FIL.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FIS.svg b/src/problem2/src/assets/img/tokens/FIS.svg
new file mode 100644
index 0000000000..ae28f926c9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FIS.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FLIX.svg b/src/problem2/src/assets/img/tokens/FLIX.svg
new file mode 100644
index 0000000000..962e47fb2d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FLIX.svg
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FLM.svg b/src/problem2/src/assets/img/tokens/FLM.svg
new file mode 100644
index 0000000000..73ba619981
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FLM.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FLOW.svg b/src/problem2/src/assets/img/tokens/FLOW.svg
new file mode 100644
index 0000000000..7cf7e32db2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FLOW.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FLUID.svg b/src/problem2/src/assets/img/tokens/FLUID.svg
new file mode 100644
index 0000000000..9202222f8f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FLUID.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FLUO.svg b/src/problem2/src/assets/img/tokens/FLUO.svg
new file mode 100644
index 0000000000..d4e4c7f345
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FLUO.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FRANK.svg b/src/problem2/src/assets/img/tokens/FRANK.svg
new file mode 100644
index 0000000000..6a49dcfec1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FRANK.svg
@@ -0,0 +1,268 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FTM.svg b/src/problem2/src/assets/img/tokens/FTM.svg
new file mode 100644
index 0000000000..0f46c6923c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FTM.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FTT.svg b/src/problem2/src/assets/img/tokens/FTT.svg
new file mode 100644
index 0000000000..fcd829ef4f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FTT.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FTTC.svg b/src/problem2/src/assets/img/tokens/FTTC.svg
new file mode 100644
index 0000000000..b53103bc49
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FTTC.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/FUN.svg b/src/problem2/src/assets/img/tokens/FUN.svg
new file mode 100644
index 0000000000..59cdc4bf25
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/FUN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GALA.svg b/src/problem2/src/assets/img/tokens/GALA.svg
new file mode 100644
index 0000000000..58a423f8bb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GALA.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GAS.svg b/src/problem2/src/assets/img/tokens/GAS.svg
new file mode 100644
index 0000000000..3c31d75c0c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GAS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GBT.svg b/src/problem2/src/assets/img/tokens/GBT.svg
new file mode 100644
index 0000000000..7dcf617c3e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GBT.svg
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GLP.svg b/src/problem2/src/assets/img/tokens/GLP.svg
new file mode 100644
index 0000000000..c5eefed0ad
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GLP.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GM.svg b/src/problem2/src/assets/img/tokens/GM.svg
new file mode 100644
index 0000000000..7739426dcb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GM.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GMX.svg b/src/problem2/src/assets/img/tokens/GMX.svg
new file mode 100644
index 0000000000..80a8c19e74
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GMX.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GNO.svg b/src/problem2/src/assets/img/tokens/GNO.svg
new file mode 100644
index 0000000000..b53b4961bc
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GNO.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GNS.svg b/src/problem2/src/assets/img/tokens/GNS.svg
new file mode 100644
index 0000000000..f47eaabf71
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GNS.svg
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GRAV.svg b/src/problem2/src/assets/img/tokens/GRAV.svg
new file mode 100644
index 0000000000..658e155072
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GRAV.svg
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GRT.svg b/src/problem2/src/assets/img/tokens/GRT.svg
new file mode 100644
index 0000000000..2d283004da
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GRT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/GT.svg b/src/problem2/src/assets/img/tokens/GT.svg
new file mode 100644
index 0000000000..6cb00ff5c5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/GT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HBAR.svg b/src/problem2/src/assets/img/tokens/HBAR.svg
new file mode 100644
index 0000000000..62d8831906
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HBAR.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HDN.svg b/src/problem2/src/assets/img/tokens/HDN.svg
new file mode 100644
index 0000000000..f5fb0b1a70
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HDN.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HELMET.svg b/src/problem2/src/assets/img/tokens/HELMET.svg
new file mode 100644
index 0000000000..1a50859878
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HELMET.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HKT.svg b/src/problem2/src/assets/img/tokens/HKT.svg
new file mode 100644
index 0000000000..d2f5c930a7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HKT.svg
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HNT.svg b/src/problem2/src/assets/img/tokens/HNT.svg
new file mode 100644
index 0000000000..402e236890
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HNT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HOPE.svg b/src/problem2/src/assets/img/tokens/HOPE.svg
new file mode 100644
index 0000000000..b7541ae4a9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HOPE.svg
@@ -0,0 +1,144 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HOT.svg b/src/problem2/src/assets/img/tokens/HOT.svg
new file mode 100644
index 0000000000..eab9101a1f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HOT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HT.svg b/src/problem2/src/assets/img/tokens/HT.svg
new file mode 100644
index 0000000000..72cdfdd097
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HUAHUA.svg b/src/problem2/src/assets/img/tokens/HUAHUA.svg
new file mode 100644
index 0000000000..e94cd98d8d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HUAHUA.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/HUNY.svg b/src/problem2/src/assets/img/tokens/HUNY.svg
new file mode 100644
index 0000000000..b06f2f5457
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HUNY.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/HUSD.svg b/src/problem2/src/assets/img/tokens/HUSD.svg
new file mode 100644
index 0000000000..30b26c0373
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/HUSD.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IBCX.svg b/src/problem2/src/assets/img/tokens/IBCX.svg
new file mode 100644
index 0000000000..061c6ccefe
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IBCX.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ICP.svg b/src/problem2/src/assets/img/tokens/ICP.svg
new file mode 100644
index 0000000000..c7a99ba9bd
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ICP.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ICX.svg b/src/problem2/src/assets/img/tokens/ICX.svg
new file mode 100644
index 0000000000..53efc54ef9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ICX.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IDT.svg b/src/problem2/src/assets/img/tokens/IDT.svg
new file mode 100644
index 0000000000..91288c58bf
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IDT.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/INJ.svg b/src/problem2/src/assets/img/tokens/INJ.svg
new file mode 100644
index 0000000000..b6d304e498
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/INJ.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/INT.svg b/src/problem2/src/assets/img/tokens/INT.svg
new file mode 100644
index 0000000000..9ab0d29f35
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/INT.svg
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ION.svg b/src/problem2/src/assets/img/tokens/ION.svg
new file mode 100644
index 0000000000..adad5f300f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ION.svg
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IOST.svg b/src/problem2/src/assets/img/tokens/IOST.svg
new file mode 100644
index 0000000000..8f791796a3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IOST.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IOTX.svg b/src/problem2/src/assets/img/tokens/IOTX.svg
new file mode 100644
index 0000000000..97a8461838
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IOTX.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IOV.svg b/src/problem2/src/assets/img/tokens/IOV.svg
new file mode 100644
index 0000000000..2c37835fff
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IOV.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IRIS.svg b/src/problem2/src/assets/img/tokens/IRIS.svg
new file mode 100644
index 0000000000..59b13b5aa6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IRIS.svg
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/IXO.svg b/src/problem2/src/assets/img/tokens/IXO.svg
new file mode 100644
index 0000000000..0d1fb10136
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/IXO.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/JPT.svg b/src/problem2/src/assets/img/tokens/JPT.svg
new file mode 100644
index 0000000000..14014e4cb8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/JPT.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/JTO.svg b/src/problem2/src/assets/img/tokens/JTO.svg
new file mode 100644
index 0000000000..3ce7f51587
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/JTO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/JUNO.svg b/src/problem2/src/assets/img/tokens/JUNO.svg
new file mode 100644
index 0000000000..d65fb3da31
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/JUNO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/JUP.svg b/src/problem2/src/assets/img/tokens/JUP.svg
new file mode 100644
index 0000000000..adf9284819
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/JUP.svg
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KAS.svg b/src/problem2/src/assets/img/tokens/KAS.svg
new file mode 100644
index 0000000000..1c9ea6bc49
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KAS.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KCS.svg b/src/problem2/src/assets/img/tokens/KCS.svg
new file mode 100644
index 0000000000..a4b333dfb8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KCS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KFLOKI.svg b/src/problem2/src/assets/img/tokens/KFLOKI.svg
new file mode 100644
index 0000000000..d35699e87e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KFLOKI.svg
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KLAY.svg b/src/problem2/src/assets/img/tokens/KLAY.svg
new file mode 100644
index 0000000000..6f1d4cabef
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KLAY.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KMD.svg b/src/problem2/src/assets/img/tokens/KMD.svg
new file mode 100644
index 0000000000..62598658bb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KMD.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KNC.svg b/src/problem2/src/assets/img/tokens/KNC.svg
new file mode 100644
index 0000000000..d9ed00657f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KNC.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KPEPE.svg b/src/problem2/src/assets/img/tokens/KPEPE.svg
new file mode 100644
index 0000000000..92665e5502
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KPEPE.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KRT.svg b/src/problem2/src/assets/img/tokens/KRT.svg
new file mode 100644
index 0000000000..e6ea416cf6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KRT.svg
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KSM.svg b/src/problem2/src/assets/img/tokens/KSM.svg
new file mode 100644
index 0000000000..771f73596e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KSM.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/KUJI.svg b/src/problem2/src/assets/img/tokens/KUJI.svg
new file mode 100644
index 0000000000..7c169dd724
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/KUJI.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LDO.svg b/src/problem2/src/assets/img/tokens/LDO.svg
new file mode 100644
index 0000000000..c8860768cf
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LDO.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LEO.svg b/src/problem2/src/assets/img/tokens/LEO.svg
new file mode 100644
index 0000000000..f94a11c945
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LEO.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LET.svg b/src/problem2/src/assets/img/tokens/LET.svg
new file mode 100644
index 0000000000..8f6a4a06e6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LET.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LIKE.svg b/src/problem2/src/assets/img/tokens/LIKE.svg
new file mode 100644
index 0000000000..a0ac6ac6ac
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LIKE.svg
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LINK.svg b/src/problem2/src/assets/img/tokens/LINK.svg
new file mode 100644
index 0000000000..8484106a43
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LINK.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LKT.svg b/src/problem2/src/assets/img/tokens/LKT.svg
new file mode 100644
index 0000000000..f224ae0ff2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LKT.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LOOM.svg b/src/problem2/src/assets/img/tokens/LOOM.svg
new file mode 100644
index 0000000000..5ad0435613
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LOOM.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LOOP.svg b/src/problem2/src/assets/img/tokens/LOOP.svg
new file mode 100644
index 0000000000..6c69420439
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LOOP.svg
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LOTA.svg b/src/problem2/src/assets/img/tokens/LOTA.svg
new file mode 100644
index 0000000000..10c742ae6d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LOTA.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LPT.svg b/src/problem2/src/assets/img/tokens/LPT.svg
new file mode 100644
index 0000000000..c026842d93
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LPT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LRC.svg b/src/problem2/src/assets/img/tokens/LRC.svg
new file mode 100644
index 0000000000..2319bb063d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LRC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LSI.svg b/src/problem2/src/assets/img/tokens/LSI.svg
new file mode 100644
index 0000000000..48618f66b3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LSI.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LSK.svg b/src/problem2/src/assets/img/tokens/LSK.svg
new file mode 100644
index 0000000000..d7b38f123e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LSK.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LTC.svg b/src/problem2/src/assets/img/tokens/LTC.svg
new file mode 100644
index 0000000000..d734c3ac54
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LTC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUM.svg b/src/problem2/src/assets/img/tokens/LUM.svg
new file mode 100644
index 0000000000..8994d02ad5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUM.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUNA.svg b/src/problem2/src/assets/img/tokens/LUNA.svg
new file mode 100644
index 0000000000..6a839981dd
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUNA.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUNAX.svg b/src/problem2/src/assets/img/tokens/LUNAX.svg
new file mode 100644
index 0000000000..afc19e17de
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUNAX.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUNC.svg b/src/problem2/src/assets/img/tokens/LUNC.svg
new file mode 100644
index 0000000000..fe40173c96
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUNC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUNI.svg b/src/problem2/src/assets/img/tokens/LUNI.svg
new file mode 100644
index 0000000000..1721643744
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUNI.svg
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUNR.svg b/src/problem2/src/assets/img/tokens/LUNR.svg
new file mode 100644
index 0000000000..958d0e6e11
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUNR.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/LUV.svg b/src/problem2/src/assets/img/tokens/LUV.svg
new file mode 100644
index 0000000000..0f7342c490
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/LUV.svg
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/M87.svg b/src/problem2/src/assets/img/tokens/M87.svg
new file mode 100644
index 0000000000..77f8c882b5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/M87.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MANA.svg b/src/problem2/src/assets/img/tokens/MANA.svg
new file mode 100644
index 0000000000..0629467224
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MANA.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MANTA.svg b/src/problem2/src/assets/img/tokens/MANTA.svg
new file mode 100644
index 0000000000..1970537a1f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MANTA.svg
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MARBLE.svg b/src/problem2/src/assets/img/tokens/MARBLE.svg
new file mode 100644
index 0000000000..4e9c2214f2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MARBLE.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MATH.svg b/src/problem2/src/assets/img/tokens/MATH.svg
new file mode 100644
index 0000000000..144d40f0bb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MATH.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MATIC.svg b/src/problem2/src/assets/img/tokens/MATIC.svg
new file mode 100644
index 0000000000..7f2e0a7037
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MATIC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MDX.svg b/src/problem2/src/assets/img/tokens/MDX.svg
new file mode 100644
index 0000000000..8f3b267801
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MDX.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MED.svg b/src/problem2/src/assets/img/tokens/MED.svg
new file mode 100644
index 0000000000..900d139258
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MED.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MEME.svg b/src/problem2/src/assets/img/tokens/MEME.svg
new file mode 100644
index 0000000000..d784304a65
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MEME.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/METIS.svg b/src/problem2/src/assets/img/tokens/METIS.svg
new file mode 100644
index 0000000000..3bd43ffadb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/METIS.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MIAW.svg b/src/problem2/src/assets/img/tokens/MIAW.svg
new file mode 100644
index 0000000000..ddf46721c7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MIAW.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MINA.svg b/src/problem2/src/assets/img/tokens/MINA.svg
new file mode 100644
index 0000000000..d5aafd7398
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MINA.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MINE.svg b/src/problem2/src/assets/img/tokens/MINE.svg
new file mode 100644
index 0000000000..ff71cab9e7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MINE.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MIOTA.svg b/src/problem2/src/assets/img/tokens/MIOTA.svg
new file mode 100644
index 0000000000..3d3c08c604
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MIOTA.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MIR.svg b/src/problem2/src/assets/img/tokens/MIR.svg
new file mode 100644
index 0000000000..0247791318
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MIR.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MKR.svg b/src/problem2/src/assets/img/tokens/MKR.svg
new file mode 100644
index 0000000000..9a639d1374
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MKR.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MNT.svg b/src/problem2/src/assets/img/tokens/MNT.svg
new file mode 100644
index 0000000000..1aa231ddd4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MNT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MNTA.svg b/src/problem2/src/assets/img/tokens/MNTA.svg
new file mode 100644
index 0000000000..e3b7cfa957
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MNTA.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MNTL.svg b/src/problem2/src/assets/img/tokens/MNTL.svg
new file mode 100644
index 0000000000..71e1c497e9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MNTL.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/MYT.svg b/src/problem2/src/assets/img/tokens/MYT.svg
new file mode 100644
index 0000000000..92cbc6468d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/MYT.svg
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NANO.svg b/src/problem2/src/assets/img/tokens/NANO.svg
new file mode 100644
index 0000000000..9ed54dd843
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NANO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NAS.svg b/src/problem2/src/assets/img/tokens/NAS.svg
new file mode 100644
index 0000000000..071766c17c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NAS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NEAR.svg b/src/problem2/src/assets/img/tokens/NEAR.svg
new file mode 100644
index 0000000000..7bc784c808
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NEAR.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NEO.svg b/src/problem2/src/assets/img/tokens/NEO.svg
new file mode 100644
index 0000000000..d4a90e1b27
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NEO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NETA.svg b/src/problem2/src/assets/img/tokens/NETA.svg
new file mode 100644
index 0000000000..b617dbef98
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NETA.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NEX.svg b/src/problem2/src/assets/img/tokens/NEX.svg
new file mode 100644
index 0000000000..34be620b9e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NEX.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NEXO.svg b/src/problem2/src/assets/img/tokens/NEXO.svg
new file mode 100644
index 0000000000..4f8507a40f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NEXO.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NGM.svg b/src/problem2/src/assets/img/tokens/NGM.svg
new file mode 100644
index 0000000000..ebdc8a035d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NGM.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NKN.svg b/src/problem2/src/assets/img/tokens/NKN.svg
new file mode 100644
index 0000000000..e008ac5d71
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NKN.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NMR.svg b/src/problem2/src/assets/img/tokens/NMR.svg
new file mode 100644
index 0000000000..fcb458cafa
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NMR.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NOT.svg b/src/problem2/src/assets/img/tokens/NOT.svg
new file mode 100644
index 0000000000..7cdadfbc34
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NOT.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NOTE.svg b/src/problem2/src/assets/img/tokens/NOTE.svg
new file mode 100644
index 0000000000..9f44e1971f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NOTE.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NPXS.svg b/src/problem2/src/assets/img/tokens/NPXS.svg
new file mode 100644
index 0000000000..d9a52dfe14
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NPXS.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NTRN.svg b/src/problem2/src/assets/img/tokens/NTRN.svg
new file mode 100644
index 0000000000..150a6137d2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NTRN.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/NXM.svg b/src/problem2/src/assets/img/tokens/NXM.svg
new file mode 100644
index 0000000000..165bc3b984
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/NXM.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OCEAN.svg b/src/problem2/src/assets/img/tokens/OCEAN.svg
new file mode 100644
index 0000000000..ad0f99d6ae
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OCEAN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OCH.svg b/src/problem2/src/assets/img/tokens/OCH.svg
new file mode 100644
index 0000000000..51c3f8e039
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OCH.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OGN.svg b/src/problem2/src/assets/img/tokens/OGN.svg
new file mode 100644
index 0000000000..e15dbac858
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OGN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OKB.svg b/src/problem2/src/assets/img/tokens/OKB.svg
new file mode 100644
index 0000000000..786f75ba42
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OKB.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OKT.svg b/src/problem2/src/assets/img/tokens/OKT.svg
new file mode 100644
index 0000000000..0afcd8a1cf
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OKT.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OMG.svg b/src/problem2/src/assets/img/tokens/OMG.svg
new file mode 100644
index 0000000000..2d3d8ae8e6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OMG.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OMG_2.svg b/src/problem2/src/assets/img/tokens/OMG_2.svg
new file mode 100644
index 0000000000..5735f9f726
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OMG_2.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OMI.svg b/src/problem2/src/assets/img/tokens/OMI.svg
new file mode 100644
index 0000000000..b1d5020084
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OMI.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ONE.svg b/src/problem2/src/assets/img/tokens/ONE.svg
new file mode 100644
index 0000000000..63c1260c06
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ONE.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ONT.svg b/src/problem2/src/assets/img/tokens/ONT.svg
new file mode 100644
index 0000000000..93378b4745
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ONT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OP.svg b/src/problem2/src/assets/img/tokens/OP.svg
new file mode 100644
index 0000000000..b5feac7946
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OP.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OPUL.svg b/src/problem2/src/assets/img/tokens/OPUL.svg
new file mode 100644
index 0000000000..c7ae4dbf3e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OPUL.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ORDI.svg b/src/problem2/src/assets/img/tokens/ORDI.svg
new file mode 100644
index 0000000000..380181270d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ORDI.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ORION.svg b/src/problem2/src/assets/img/tokens/ORION.svg
new file mode 100644
index 0000000000..b5f9ba6fff
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ORION.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ORNE.svg b/src/problem2/src/assets/img/tokens/ORNE.svg
new file mode 100644
index 0000000000..d986b3f31e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ORNE.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OSMO.svg b/src/problem2/src/assets/img/tokens/OSMO.svg
new file mode 100644
index 0000000000..e98545517b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OSMO.svg
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OXT.svg b/src/problem2/src/assets/img/tokens/OXT.svg
new file mode 100644
index 0000000000..bba9547da1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OXT.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/OXY.svg b/src/problem2/src/assets/img/tokens/OXY.svg
new file mode 100644
index 0000000000..9175a0b900
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/OXY.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PAX.svg b/src/problem2/src/assets/img/tokens/PAX.svg
new file mode 100644
index 0000000000..32b0ef8211
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PAX.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PEPE.svg b/src/problem2/src/assets/img/tokens/PEPE.svg
new file mode 100644
index 0000000000..1e6ba151a3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PEPE.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PHT.svg b/src/problem2/src/assets/img/tokens/PHT.svg
new file mode 100644
index 0000000000..d515118058
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PHT.svg
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PLAY.svg b/src/problem2/src/assets/img/tokens/PLAY.svg
new file mode 100644
index 0000000000..bae2577420
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PLAY.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PLQ.svg b/src/problem2/src/assets/img/tokens/PLQ.svg
new file mode 100644
index 0000000000..31b353bb45
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PLQ.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PLY.svg b/src/problem2/src/assets/img/tokens/PLY.svg
new file mode 100644
index 0000000000..c79b320445
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PLY.svg
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/POLY.svg b/src/problem2/src/assets/img/tokens/POLY.svg
new file mode 100644
index 0000000000..b894fef5d5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/POLY.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PORT.svg b/src/problem2/src/assets/img/tokens/PORT.svg
new file mode 100644
index 0000000000..d846537361
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PORT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PROM.svg b/src/problem2/src/assets/img/tokens/PROM.svg
new file mode 100644
index 0000000000..044c9e3576
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PROM.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PSI.svg b/src/problem2/src/assets/img/tokens/PSI.svg
new file mode 100644
index 0000000000..674744b4e5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PSI.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PSTAKE.svg b/src/problem2/src/assets/img/tokens/PSTAKE.svg
new file mode 100644
index 0000000000..caf13d8d63
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PSTAKE.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/PYTH.svg b/src/problem2/src/assets/img/tokens/PYTH.svg
new file mode 100644
index 0000000000..b34cc9ea3d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/PYTH.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/QCK.svg b/src/problem2/src/assets/img/tokens/QCK.svg
new file mode 100644
index 0000000000..358cb7dbbf
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/QCK.svg
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/QKC.svg b/src/problem2/src/assets/img/tokens/QKC.svg
new file mode 100644
index 0000000000..e312777506
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/QKC.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/QNT.svg b/src/problem2/src/assets/img/tokens/QNT.svg
new file mode 100644
index 0000000000..a611eaa24a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/QNT.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/QTUM.svg b/src/problem2/src/assets/img/tokens/QTUM.svg
new file mode 100644
index 0000000000..e96f6cf2ca
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/QTUM.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RATOM.svg b/src/problem2/src/assets/img/tokens/RATOM.svg
new file mode 100644
index 0000000000..8cd5f8056f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RATOM.svg
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RAY.svg b/src/problem2/src/assets/img/tokens/RAY.svg
new file mode 100644
index 0000000000..e769284e27
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RAY.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RBN.svg b/src/problem2/src/assets/img/tokens/RBN.svg
new file mode 100644
index 0000000000..ef40c376d8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RBN.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/REEF.svg b/src/problem2/src/assets/img/tokens/REEF.svg
new file mode 100644
index 0000000000..5c777f840f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/REEF.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/REGEN.svg b/src/problem2/src/assets/img/tokens/REGEN.svg
new file mode 100644
index 0000000000..242a4c66c9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/REGEN.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/REN.svg b/src/problem2/src/assets/img/tokens/REN.svg
new file mode 100644
index 0000000000..bae08ca56f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/REN.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/REP.svg b/src/problem2/src/assets/img/tokens/REP.svg
new file mode 100644
index 0000000000..c311970b6d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/REP.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/REV.svg b/src/problem2/src/assets/img/tokens/REV.svg
new file mode 100644
index 0000000000..6dcaa131aa
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/REV.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RLB.svg b/src/problem2/src/assets/img/tokens/RLB.svg
new file mode 100644
index 0000000000..344fe8e022
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RLB.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RLC.svg b/src/problem2/src/assets/img/tokens/RLC.svg
new file mode 100644
index 0000000000..c816edf016
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RLC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RNDR.svg b/src/problem2/src/assets/img/tokens/RNDR.svg
new file mode 100644
index 0000000000..031e8816b3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RNDR.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ROAR.svg b/src/problem2/src/assets/img/tokens/ROAR.svg
new file mode 100644
index 0000000000..d29ab09634
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ROAR.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ROWAN.svg b/src/problem2/src/assets/img/tokens/ROWAN.svg
new file mode 100644
index 0000000000..6b395742d4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ROWAN.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RSR.svg b/src/problem2/src/assets/img/tokens/RSR.svg
new file mode 100644
index 0000000000..f85bb78c23
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RSR.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RUNE.svg b/src/problem2/src/assets/img/tokens/RUNE.svg
new file mode 100644
index 0000000000..ccbb65ceff
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RUNE.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/RVN.svg b/src/problem2/src/assets/img/tokens/RVN.svg
new file mode 100644
index 0000000000..4d6d30eeef
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/RVN.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SAFEMOON.svg b/src/problem2/src/assets/img/tokens/SAFEMOON.svg
new file mode 100644
index 0000000000..9ff12873a5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SAFEMOON.svg
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SAND.svg b/src/problem2/src/assets/img/tokens/SAND.svg
new file mode 100644
index 0000000000..4e01196b45
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SAND.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SAYVE.svg b/src/problem2/src/assets/img/tokens/SAYVE.svg
new file mode 100644
index 0000000000..2cea35fc51
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SAYVE.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SC.svg b/src/problem2/src/assets/img/tokens/SC.svg
new file mode 100644
index 0000000000..aebc27644b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SCRT.svg b/src/problem2/src/assets/img/tokens/SCRT.svg
new file mode 100644
index 0000000000..9451de4116
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SCRT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SDT.svg b/src/problem2/src/assets/img/tokens/SDT.svg
new file mode 100644
index 0000000000..222a72897f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SDT.svg
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SEI.svg b/src/problem2/src/assets/img/tokens/SEI.svg
new file mode 100644
index 0000000000..65ea99277e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SEI.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SET.svg b/src/problem2/src/assets/img/tokens/SET.svg
new file mode 100644
index 0000000000..f46a6ba24f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SET.svg
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SGT.svg b/src/problem2/src/assets/img/tokens/SGT.svg
new file mode 100644
index 0000000000..a975dece90
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SGT.svg
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SHD.svg b/src/problem2/src/assets/img/tokens/SHD.svg
new file mode 100644
index 0000000000..bdb7e6c29c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SHD.svg
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SHIB.svg b/src/problem2/src/assets/img/tokens/SHIB.svg
new file mode 100644
index 0000000000..2ab2cf8371
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SHIB.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SITY.svg b/src/problem2/src/assets/img/tokens/SITY.svg
new file mode 100644
index 0000000000..7cfb8209bf
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SITY.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SLERF.svg b/src/problem2/src/assets/img/tokens/SLERF.svg
new file mode 100644
index 0000000000..713f29af95
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SLERF.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SNT.svg b/src/problem2/src/assets/img/tokens/SNT.svg
new file mode 100644
index 0000000000..cc8ad2df4c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SNT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SNX.svg b/src/problem2/src/assets/img/tokens/SNX.svg
new file mode 100644
index 0000000000..14e0591389
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SNX.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SOL.svg b/src/problem2/src/assets/img/tokens/SOL.svg
new file mode 100644
index 0000000000..0568e80881
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SOL.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SOM.svg b/src/problem2/src/assets/img/tokens/SOM.svg
new file mode 100644
index 0000000000..778bf9b5c9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SOM.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SOMM.svg b/src/problem2/src/assets/img/tokens/SOMM.svg
new file mode 100644
index 0000000000..fa82d261ee
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SOMM.svg
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SPEC.svg b/src/problem2/src/assets/img/tokens/SPEC.svg
new file mode 100644
index 0000000000..75c9b37b2b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SPEC.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SRM.svg b/src/problem2/src/assets/img/tokens/SRM.svg
new file mode 100644
index 0000000000..e488de82db
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SRM.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SRV.svg b/src/problem2/src/assets/img/tokens/SRV.svg
new file mode 100644
index 0000000000..b15a61c77f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SRV.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STARS.svg b/src/problem2/src/assets/img/tokens/STARS.svg
new file mode 100644
index 0000000000..de6d376db8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STARS.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STATOM.svg b/src/problem2/src/assets/img/tokens/STATOM.svg
new file mode 100644
index 0000000000..c3e505f8b3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STATOM.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STEEM.svg b/src/problem2/src/assets/img/tokens/STEEM.svg
new file mode 100644
index 0000000000..503009b90d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STEEM.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STEVMOS.svg b/src/problem2/src/assets/img/tokens/STEVMOS.svg
new file mode 100644
index 0000000000..a2a8888208
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STEVMOS.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/STLUNA.svg b/src/problem2/src/assets/img/tokens/STLUNA.svg
new file mode 100644
index 0000000000..606be7947d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STLUNA.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/STMX.svg b/src/problem2/src/assets/img/tokens/STMX.svg
new file mode 100644
index 0000000000..976e86474b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STMX.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STORJ.svg b/src/problem2/src/assets/img/tokens/STORJ.svg
new file mode 100644
index 0000000000..85a332a6ce
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STORJ.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STOSMO.svg b/src/problem2/src/assets/img/tokens/STOSMO.svg
new file mode 100644
index 0000000000..73d296046b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STOSMO.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STRAX.svg b/src/problem2/src/assets/img/tokens/STRAX.svg
new file mode 100644
index 0000000000..a34822931d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STRAX.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STRD.svg b/src/problem2/src/assets/img/tokens/STRD.svg
new file mode 100644
index 0000000000..f25a48536c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STRD.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STREAM.svg b/src/problem2/src/assets/img/tokens/STREAM.svg
new file mode 100644
index 0000000000..fba4ce0609
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STREAM.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STRK.svg b/src/problem2/src/assets/img/tokens/STRK.svg
new file mode 100644
index 0000000000..22c139824d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STRK.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STT.svg b/src/problem2/src/assets/img/tokens/STT.svg
new file mode 100644
index 0000000000..d37590a8d3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STT.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/STX.svg b/src/problem2/src/assets/img/tokens/STX.svg
new file mode 100644
index 0000000000..ed89fc9276
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/STX.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SUSHI.svg b/src/problem2/src/assets/img/tokens/SUSHI.svg
new file mode 100644
index 0000000000..e118f213b5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SUSHI.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SWTH.svg b/src/problem2/src/assets/img/tokens/SWTH.svg
new file mode 100644
index 0000000000..353c1b5bcc
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SWTH.svg
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/SXP.svg b/src/problem2/src/assets/img/tokens/SXP.svg
new file mode 100644
index 0000000000..89fd3b147e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/SXP.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TEL.svg b/src/problem2/src/assets/img/tokens/TEL.svg
new file mode 100644
index 0000000000..2992514bf1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TEL.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TFUEL.svg b/src/problem2/src/assets/img/tokens/TFUEL.svg
new file mode 100644
index 0000000000..d57d7d9493
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TFUEL.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/THETA.svg b/src/problem2/src/assets/img/tokens/THETA.svg
new file mode 100644
index 0000000000..8ff93f4019
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/THETA.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/THT.svg b/src/problem2/src/assets/img/tokens/THT.svg
new file mode 100644
index 0000000000..8ee5eb9ff3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/THT.svg
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TIA.svg b/src/problem2/src/assets/img/tokens/TIA.svg
new file mode 100644
index 0000000000..41d8ab96c1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TIA.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TICK.svg b/src/problem2/src/assets/img/tokens/TICK.svg
new file mode 100644
index 0000000000..3be70db269
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TICK.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TITAN.svg b/src/problem2/src/assets/img/tokens/TITAN.svg
new file mode 100644
index 0000000000..d52faa138c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TITAN.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TLAND.svg b/src/problem2/src/assets/img/tokens/TLAND.svg
new file mode 100644
index 0000000000..9f9e3e2330
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TLAND.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TLM.svg b/src/problem2/src/assets/img/tokens/TLM.svg
new file mode 100644
index 0000000000..1fe3283fee
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TLM.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TOMO.svg b/src/problem2/src/assets/img/tokens/TOMO.svg
new file mode 100644
index 0000000000..45bda83d4b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TOMO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TON.svg b/src/problem2/src/assets/img/tokens/TON.svg
new file mode 100644
index 0000000000..c1e0b91485
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TON.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TPC.svg b/src/problem2/src/assets/img/tokens/TPC.svg
new file mode 100644
index 0000000000..29f8a4af8d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TPC.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TRAXX.svg b/src/problem2/src/assets/img/tokens/TRAXX.svg
new file mode 100644
index 0000000000..05c2ec0999
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TRAXX.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TRB.svg b/src/problem2/src/assets/img/tokens/TRB.svg
new file mode 100644
index 0000000000..e319e65d7e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TRB.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TRU.svg b/src/problem2/src/assets/img/tokens/TRU.svg
new file mode 100644
index 0000000000..29ddc8ac24
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TRU.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TRX.svg b/src/problem2/src/assets/img/tokens/TRX.svg
new file mode 100644
index 0000000000..c105ddc307
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TRX.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TTT.svg b/src/problem2/src/assets/img/tokens/TTT.svg
new file mode 100644
index 0000000000..13e6080a8a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TTT.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TUSD.svg b/src/problem2/src/assets/img/tokens/TUSD.svg
new file mode 100644
index 0000000000..712ec923da
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TUSD.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TWD.svg b/src/problem2/src/assets/img/tokens/TWD.svg
new file mode 100644
index 0000000000..014f525557
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TWD.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/TWT.svg b/src/problem2/src/assets/img/tokens/TWT.svg
new file mode 100644
index 0000000000..b67bf37535
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/TWT.svg
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/Token.svg b/src/problem2/src/assets/img/tokens/Token.svg
new file mode 100644
index 0000000000..bed64e2942
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/Token.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/UBQ.svg b/src/problem2/src/assets/img/tokens/UBQ.svg
new file mode 100644
index 0000000000..139af049ce
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/UBQ.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/UMEE.svg b/src/problem2/src/assets/img/tokens/UMEE.svg
new file mode 100644
index 0000000000..f9243257df
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/UMEE.svg
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/UNA.svg b/src/problem2/src/assets/img/tokens/UNA.svg
new file mode 100644
index 0000000000..077c1555e7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/UNA.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/UNI.svg b/src/problem2/src/assets/img/tokens/UNI.svg
new file mode 100644
index 0000000000..aa1771ccf0
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/UNI.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/UOS.svg b/src/problem2/src/assets/img/tokens/UOS.svg
new file mode 100644
index 0000000000..eb07c3cce8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/UOS.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/USC.svg b/src/problem2/src/assets/img/tokens/USC.svg
new file mode 100644
index 0000000000..32bd9541f5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/USC.svg
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/USD.svg b/src/problem2/src/assets/img/tokens/USD.svg
new file mode 100644
index 0000000000..abf67ab105
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/USD.svg
@@ -0,0 +1,8 @@
+
+
+ Token Symbol/USD
+
+
+
+
+
\ No newline at end of file
diff --git a/src/problem2/src/assets/img/tokens/USDC.svg b/src/problem2/src/assets/img/tokens/USDC.svg
new file mode 100644
index 0000000000..eee4251a7b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/USDC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/USDP.svg b/src/problem2/src/assets/img/tokens/USDP.svg
new file mode 100644
index 0000000000..b7e76ff9d1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/USDP.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/USDT.svg b/src/problem2/src/assets/img/tokens/USDT.svg
new file mode 100644
index 0000000000..0eb76592a1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/USDT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/USK.svg b/src/problem2/src/assets/img/tokens/USK.svg
new file mode 100644
index 0000000000..15ba03fe9d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/USK.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/UST.svg b/src/problem2/src/assets/img/tokens/UST.svg
new file mode 100644
index 0000000000..2a0a597074
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/UST.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/VDL.svg b/src/problem2/src/assets/img/tokens/VDL.svg
new file mode 100644
index 0000000000..d839e0da4d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/VDL.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/VET.svg b/src/problem2/src/assets/img/tokens/VET.svg
new file mode 100644
index 0000000000..88ebf982a5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/VET.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/VKR.svg b/src/problem2/src/assets/img/tokens/VKR.svg
new file mode 100644
index 0000000000..cb3c68d595
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/VKR.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/VRTX.svg b/src/problem2/src/assets/img/tokens/VRTX.svg
new file mode 100644
index 0000000000..8cb3dc30ef
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/VRTX.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/W.svg b/src/problem2/src/assets/img/tokens/W.svg
new file mode 100644
index 0000000000..3c3c6fdae3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/W.svg
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WAVE.svg b/src/problem2/src/assets/img/tokens/WAVE.svg
new file mode 100644
index 0000000000..2ca6ac0708
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WAVE.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WBNB.svg b/src/problem2/src/assets/img/tokens/WBNB.svg
new file mode 100644
index 0000000000..e45c696b5c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WBNB.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WBTC.svg b/src/problem2/src/assets/img/tokens/WBTC.svg
new file mode 100644
index 0000000000..3ab3886566
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WBTC.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WETH.svg b/src/problem2/src/assets/img/tokens/WETH.svg
new file mode 100644
index 0000000000..ed516a2cf2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WETH.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WHALE.svg b/src/problem2/src/assets/img/tokens/WHALE.svg
new file mode 100644
index 0000000000..a42a2449d8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WHALE.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WIF.svg b/src/problem2/src/assets/img/tokens/WIF.svg
new file mode 100644
index 0000000000..6df4ea15a2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WIF.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WIN.svg b/src/problem2/src/assets/img/tokens/WIN.svg
new file mode 100644
index 0000000000..bc2435409b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WIN.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WLD.svg b/src/problem2/src/assets/img/tokens/WLD.svg
new file mode 100644
index 0000000000..62191032d6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WLD.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WMATIC.svg b/src/problem2/src/assets/img/tokens/WMATIC.svg
new file mode 100644
index 0000000000..ba0630b510
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WMATIC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/WRX.svg b/src/problem2/src/assets/img/tokens/WRX.svg
new file mode 100644
index 0000000000..543f570909
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/WRX.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XCAD.svg b/src/problem2/src/assets/img/tokens/XCAD.svg
new file mode 100644
index 0000000000..545a88d1b9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XCAD.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XDC.svg b/src/problem2/src/assets/img/tokens/XDC.svg
new file mode 100644
index 0000000000..c90381022e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XDC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XEM.svg b/src/problem2/src/assets/img/tokens/XEM.svg
new file mode 100644
index 0000000000..da54e72a22
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XEM.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XKI.svg b/src/problem2/src/assets/img/tokens/XKI.svg
new file mode 100644
index 0000000000..dd5fea7cf0
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XKI.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XLM.svg b/src/problem2/src/assets/img/tokens/XLM.svg
new file mode 100644
index 0000000000..d836619c15
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XLM.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XMR.svg b/src/problem2/src/assets/img/tokens/XMR.svg
new file mode 100644
index 0000000000..475a95cb7d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XMR.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XPRT.svg b/src/problem2/src/assets/img/tokens/XPRT.svg
new file mode 100644
index 0000000000..7ecd4ace95
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XPRT.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XRP.svg b/src/problem2/src/assets/img/tokens/XRP.svg
new file mode 100644
index 0000000000..b3d441bf40
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XRP.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XSGD.svg b/src/problem2/src/assets/img/tokens/XSGD.svg
new file mode 100644
index 0000000000..f04caab93b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XSGD.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XTRA.svg b/src/problem2/src/assets/img/tokens/XTRA.svg
new file mode 100644
index 0000000000..1c6367d3be
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XTRA.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XTZ.svg b/src/problem2/src/assets/img/tokens/XTZ.svg
new file mode 100644
index 0000000000..28b924e5c7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XTZ.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XVG.svg b/src/problem2/src/assets/img/tokens/XVG.svg
new file mode 100644
index 0000000000..537378cff6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XVG.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/XVS.svg b/src/problem2/src/assets/img/tokens/XVS.svg
new file mode 100644
index 0000000000..3176f9fb66
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/XVS.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/YAM.svg b/src/problem2/src/assets/img/tokens/YAM.svg
new file mode 100644
index 0000000000..2e8a654216
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/YAM.svg
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/YFI.svg b/src/problem2/src/assets/img/tokens/YFI.svg
new file mode 100644
index 0000000000..b7674608b7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/YFI.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/YieldUSD.svg b/src/problem2/src/assets/img/tokens/YieldUSD.svg
new file mode 100644
index 0000000000..e435a687c9
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/YieldUSD.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZCH.svg b/src/problem2/src/assets/img/tokens/ZCH.svg
new file mode 100644
index 0000000000..1e9d4250d4
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZCH.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZEC.svg b/src/problem2/src/assets/img/tokens/ZEC.svg
new file mode 100644
index 0000000000..b6b86dcc1d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZEC.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZEN.svg b/src/problem2/src/assets/img/tokens/ZEN.svg
new file mode 100644
index 0000000000..b305169acb
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZEN.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZIL.svg b/src/problem2/src/assets/img/tokens/ZIL.svg
new file mode 100644
index 0000000000..c89e8ce16f
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZIL.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZRO.svg b/src/problem2/src/assets/img/tokens/ZRO.svg
new file mode 100644
index 0000000000..e485e3b2ab
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZRO.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZRX.svg b/src/problem2/src/assets/img/tokens/ZRX.svg
new file mode 100644
index 0000000000..f42e914a6a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZRX.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ZWAP.svg b/src/problem2/src/assets/img/tokens/ZWAP.svg
new file mode 100644
index 0000000000..130d14d73b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ZWAP.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ampKUJI.svg b/src/problem2/src/assets/img/tokens/ampKUJI.svg
new file mode 100644
index 0000000000..2692787da5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ampKUJI.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ampLUNA.svg b/src/problem2/src/assets/img/tokens/ampLUNA.svg
new file mode 100644
index 0000000000..ebeab58687
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ampLUNA.svg
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/axlUSDC.svg b/src/problem2/src/assets/img/tokens/axlUSDC.svg
new file mode 100644
index 0000000000..fc879f679a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/axlUSDC.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/bCFX.svg b/src/problem2/src/assets/img/tokens/bCFX.svg
new file mode 100644
index 0000000000..07e8c434db
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/bCFX.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/bNEO.svg b/src/problem2/src/assets/img/tokens/bNEO.svg
new file mode 100644
index 0000000000..561b2282d8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/bNEO.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/cGLP.svg b/src/problem2/src/assets/img/tokens/cGLP.svg
new file mode 100644
index 0000000000..eba97e4ff3
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/cGLP.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/cUSD.svg b/src/problem2/src/assets/img/tokens/cUSD.svg
new file mode 100644
index 0000000000..812540db80
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/cUSD.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/dINJ.svg b/src/problem2/src/assets/img/tokens/dINJ.svg
new file mode 100644
index 0000000000..05b1763cc2
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/dINJ.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/dXCAD.svg b/src/problem2/src/assets/img/tokens/dXCAD.svg
new file mode 100644
index 0000000000..881f50fd02
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/dXCAD.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/eGLD.svg b/src/problem2/src/assets/img/tokens/eGLD.svg
new file mode 100644
index 0000000000..e42ad2510e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/eGLD.svg
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/ePLAY.svg b/src/problem2/src/assets/img/tokens/ePLAY.svg
new file mode 100644
index 0000000000..bae2577420
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/ePLAY.svg
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/esFLUO.svg b/src/problem2/src/assets/img/tokens/esFLUO.svg
new file mode 100644
index 0000000000..0b69ed3189
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/esFLUO.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/gZIL.svg b/src/problem2/src/assets/img/tokens/gZIL.svg
new file mode 100644
index 0000000000..27334389ba
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/gZIL.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/iSEI.svg b/src/problem2/src/assets/img/tokens/iSEI.svg
new file mode 100644
index 0000000000..246b86f8a1
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/iSEI.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/iUSD.svg b/src/problem2/src/assets/img/tokens/iUSD.svg
new file mode 100644
index 0000000000..ca263a0474
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/iUSD.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/milkTIA.svg b/src/problem2/src/assets/img/tokens/milkTIA.svg
new file mode 100644
index 0000000000..d595abfa30
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/milkTIA.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/nNEO.svg b/src/problem2/src/assets/img/tokens/nNEO.svg
new file mode 100644
index 0000000000..d4a90e1b27
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/nNEO.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/rSWTH.svg b/src/problem2/src/assets/img/tokens/rSWTH.svg
new file mode 100644
index 0000000000..d5250ff90d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/rSWTH.svg
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/sARCH.svg b/src/problem2/src/assets/img/tokens/sARCH.svg
new file mode 100644
index 0000000000..3ec2b656f0
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/sARCH.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stDYDX.svg b/src/problem2/src/assets/img/tokens/stDYDX.svg
new file mode 100644
index 0000000000..6d851637a8
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stDYDX.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stDYM.svg b/src/problem2/src/assets/img/tokens/stDYM.svg
new file mode 100644
index 0000000000..d961755725
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stDYM.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stETH.svg b/src/problem2/src/assets/img/tokens/stETH.svg
new file mode 100644
index 0000000000..8c490e47f0
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stETH.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stFLUO.svg b/src/problem2/src/assets/img/tokens/stFLUO.svg
new file mode 100644
index 0000000000..bf182c96de
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stFLUO.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stIBCX.svg b/src/problem2/src/assets/img/tokens/stIBCX.svg
new file mode 100644
index 0000000000..8a10d241d5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stIBCX.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stINJ.svg b/src/problem2/src/assets/img/tokens/stINJ.svg
new file mode 100644
index 0000000000..6b97bec4f7
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stINJ.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stJUNO.svg b/src/problem2/src/assets/img/tokens/stJUNO.svg
new file mode 100644
index 0000000000..8d92f375c6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stJUNO.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stOKT.svg b/src/problem2/src/assets/img/tokens/stOKT.svg
new file mode 100644
index 0000000000..33b541d11d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stOKT.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stSTARS.svg b/src/problem2/src/assets/img/tokens/stSTARS.svg
new file mode 100644
index 0000000000..ffc7def96a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stSTARS.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stTIA.svg b/src/problem2/src/assets/img/tokens/stTIA.svg
new file mode 100644
index 0000000000..3d3e28470d
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stTIA.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stZIL.svg b/src/problem2/src/assets/img/tokens/stZIL.svg
new file mode 100644
index 0000000000..81323f746a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stZIL.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stkATOM.svg b/src/problem2/src/assets/img/tokens/stkATOM.svg
new file mode 100644
index 0000000000..1e6c7a2b2c
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stkATOM.svg
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/stkDYDX.svg b/src/problem2/src/assets/img/tokens/stkDYDX.svg
new file mode 100644
index 0000000000..2d2883a9e6
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/stkDYDX.svg
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/vZWAP.svg b/src/problem2/src/assets/img/tokens/vZWAP.svg
new file mode 100644
index 0000000000..0874b89e8b
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/vZWAP.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/veFLUO.svg b/src/problem2/src/assets/img/tokens/veFLUO.svg
new file mode 100644
index 0000000000..3624b5647a
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/veFLUO.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/wKAS.svg b/src/problem2/src/assets/img/tokens/wKAS.svg
new file mode 100644
index 0000000000..14185747c5
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/wKAS.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/problem2/src/assets/img/tokens/wstETH.svg b/src/problem2/src/assets/img/tokens/wstETH.svg
new file mode 100644
index 0000000000..15c8a9716e
--- /dev/null
+++ b/src/problem2/src/assets/img/tokens/wstETH.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/problem2/src/components/Button/Button.tsx b/src/problem2/src/components/Button/Button.tsx
new file mode 100644
index 0000000000..9445e8d791
--- /dev/null
+++ b/src/problem2/src/components/Button/Button.tsx
@@ -0,0 +1,83 @@
+import React from "react";
+import styled from "styled-components";
+import Loading from "../Loading/Loading";
+import { ButtonVariant } from "../../types";
+
+interface ButtonProps {
+ variant?: ButtonVariant;
+ disabled?: boolean;
+ title: string;
+ loading?: boolean;
+ onClick?: () => void;
+}
+
+const ButtonContainer = styled.button>`
+ /* Shared styles */
+ // padding: 16px 0;
+ height: 64px;
+ font-size: 20px;
+ font-weight: 600;
+ cursor: ${({ disabled }) => (disabled ? "not-allowed" : "pointer")};
+ border-radius: 24px;
+ border: none;
+ outline: none;
+ transition: all 0.3s ease;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ gap: 8px;
+
+ margin-top: 16px;
+
+ @media screen and (max-width: 768px) {
+ height: 48px;
+ font-size: 16px;
+ margin-top: 8px;
+ }
+
+ ${({ variant }) =>
+ variant === "primary" &&
+ `
+ background-color: #FFE2F1;
+ color: #fb118e;
+ `}
+ ${({ variant }) =>
+ variant === "secondary" &&
+ `
+ background-color: #fb118e;
+ color: white;
+ `}
+ ${({ variant }) =>
+ variant === "disabled" &&
+ `
+ background-color: #F5F6FC;
+ color: #BBBFCF;
+ `}
+
+ &:hover {
+ opacity: 0.8;
+ }
+`;
+
+const Button: React.FC = ({
+ variant = "primary",
+ disabled,
+ title,
+ loading,
+ onClick,
+}) => {
+ return (
+
+ {loading && }
+ {title}
+
+ );
+};
+
+export default Button;
diff --git a/src/problem2/src/components/ConfirmSwapModal/ConfirmSwapModal.styled.ts b/src/problem2/src/components/ConfirmSwapModal/ConfirmSwapModal.styled.ts
new file mode 100644
index 0000000000..9abfbc7612
--- /dev/null
+++ b/src/problem2/src/components/ConfirmSwapModal/ConfirmSwapModal.styled.ts
@@ -0,0 +1,86 @@
+import styled from "styled-components";
+
+const ConfirmSwapModalContainer = styled.div`
+ position: fixed;
+ width: 100%;
+ height: 100vh;
+ background-color: rgba(0, 0, 0, 0.35);
+ z-index: 2;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+`;
+
+const ConfirmSwapModalInner = styled.div`
+ max-width: 375px;
+ background-color: white;
+ border-radius: 16px;
+ padding: 32px;
+ position: relative;
+ margin: 16px;
+`;
+
+const ConfirmSwapModalContent = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+`;
+
+const Title = styled.h2`
+ font-size: 20px;
+ font-weight: 500;
+ margin-bottom: 16px;
+ color: black;
+ margin-top: 16px;
+ @media screen and (max-width: 768px) {
+ font-size: 16px;
+ margin-top: 12px;
+ margin-bottom: 12px;
+ }
+`;
+
+const Description = styled.p`
+ font-size: 16px;
+ color: #6e6e6e;
+ text-align: center;
+ line-height: 1.5;
+ @media screen and (max-width: 768px) {
+ font-size: 14px;
+ }
+`;
+
+const TokenSwapInformation = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 16px;
+ margin: 32px 0;
+ @media screen and (max-width: 768px) {
+ margin: 24px 0;
+ }
+`;
+
+const CloseModalIcon = styled.img`
+ position: absolute;
+ cursor: pointer;
+ padding: 16px 8px 16px;
+ top: 16px;
+ right: 16px;
+ @media screen and (max-width: 768px) {
+ padding: 12px 4px 12px;
+ top: 12px;
+ right: 12px;
+ width: 12px;
+ }
+`;
+
+export {
+ ConfirmSwapModalContainer,
+ ConfirmSwapModalInner,
+ ConfirmSwapModalContent,
+ Title,
+ TokenSwapInformation,
+ Description,
+ CloseModalIcon,
+};
diff --git a/src/problem2/src/components/ConfirmSwapModal/ConfirmSwapModal.tsx b/src/problem2/src/components/ConfirmSwapModal/ConfirmSwapModal.tsx
new file mode 100644
index 0000000000..aab2e2b0ad
--- /dev/null
+++ b/src/problem2/src/components/ConfirmSwapModal/ConfirmSwapModal.tsx
@@ -0,0 +1,95 @@
+import { ESwapStatus } from "../../enums";
+import { TokenPriceInfo } from "../../types";
+import Loading from "../Loading/Loading";
+import TokenImage from "../TokenImage/TokenImage";
+import CloseIcon from "../../assets/img/icons/close.svg";
+import {
+ CloseModalIcon,
+ ConfirmSwapModalContainer,
+ ConfirmSwapModalContent,
+ ConfirmSwapModalInner,
+ Description,
+ Title,
+ TokenSwapInformation,
+} from "./ConfirmSwapModal.styled";
+
+interface ConfirmSwapModalProps {
+ swapData: {
+ amountYouPay: string;
+ amountYouReceive: string;
+ tokenYouPay: TokenPriceInfo;
+ tokenYouReceive: TokenPriceInfo;
+ };
+ swapStatus: ESwapStatus;
+ onCloseModal: () => void;
+}
+
+const ConfirmSwapModal = (props: ConfirmSwapModalProps) => {
+ const { swapData, swapStatus, onCloseModal } = props;
+
+ const { amountYouPay, amountYouReceive, tokenYouPay, tokenYouReceive } =
+ swapData;
+
+ const generateModalContent = () => {
+ switch (swapStatus) {
+ case ESwapStatus.SUCCESS:
+ return (
+ <>
+ Swap Success
+
+ You have successfully swapped {amountYouPay}{" "}
+ {tokenYouPay.currency} for {amountYouReceive}{" "}
+ {tokenYouReceive.currency}
+
+ >
+ );
+ case ESwapStatus.FAILED:
+ return (
+ <>
+ Swap Failed
+
+ Something went wrong. Please try again later.
+
+ >
+ );
+ case ESwapStatus.IDLE:
+ return (
+ <>
+
+ Swapping...
+ >
+ );
+
+ default:
+ return null;
+ }
+ };
+ return (
+
+
+
+
+
+ {generateModalContent()}
+
+
+
+ {amountYouPay} {swapData.tokenYouPay.currency}
+
+ →
+
+
+ {amountYouReceive} {tokenYouReceive.currency}
+
+
+
+
+
+ );
+};
+
+export default ConfirmSwapModal;
diff --git a/src/problem2/src/components/Loading/Loading.tsx b/src/problem2/src/components/Loading/Loading.tsx
new file mode 100644
index 0000000000..5230ff0917
--- /dev/null
+++ b/src/problem2/src/components/Loading/Loading.tsx
@@ -0,0 +1,34 @@
+import styled, { keyframes } from "styled-components";
+
+import LoadingIcon from "../../assets/img/icons/loading.svg";
+
+const rotate = keyframes`
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(360deg);
+ }
+`;
+
+const LoadingContainer = styled.div``;
+
+const LoadingContent = styled.img`
+ width: 32px;
+ height: 32px;
+ animation: ${rotate} 2s linear infinite;
+ @media screen and (max-width: 768px) {
+ width: 24px;
+ height: 24px;
+ }
+`;
+
+const Loading = () => {
+ return (
+
+
+
+ );
+};
+
+export default Loading;
diff --git a/src/problem2/src/components/SelectTokensModal/SelectTokenModal.styled.ts b/src/problem2/src/components/SelectTokensModal/SelectTokenModal.styled.ts
new file mode 100644
index 0000000000..563c3381c8
--- /dev/null
+++ b/src/problem2/src/components/SelectTokensModal/SelectTokenModal.styled.ts
@@ -0,0 +1,137 @@
+import styled from "styled-components";
+
+const SelectTokensModalContainer = styled.div`
+ position: fixed;
+ width: 100%;
+ height: 100vh;
+ background-color: rgba(0, 0, 0, 0.35);
+ z-index: 2;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+`;
+
+const SelectTokensModalInner = styled.div`
+ width: 375px;
+ padding-bottom: 32px;
+ background-color: white;
+ border-radius: 16px;
+`;
+
+const SelectTokensModalHeader = styled.div`
+ padding: 16px;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+`;
+
+const SelectTokenModalSearchInputBox = styled.div`
+ border-radius: 12px;
+ background-color: white;
+ border: 1px solid #d2d9ee;
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+ padding: 8px;
+ margin-top: 8px;
+`;
+
+const SelectTokenModalSearchInput = styled.input`
+ padding: 4px 0;
+ border: none;
+ outline: none;
+ color: rgb(34, 34, 34);
+ background-color: white;
+ &::placeholder {
+ color: rgb(125, 125, 125);
+ }
+ font-size: 15px;
+ font-weight: 500;
+ width: 100%;
+ margin-left: 8px;
+
+ @media screen and (max-width: 768px) {
+ font-size: 13px;
+ }
+`;
+
+const SearchInputIcon = styled.img`
+ width: 20px;
+ height: 20px;
+ @media screen and (max-width: 768px) {
+ width: 16px;
+ height: 16px;
+ }
+`;
+
+const Title = styled.h2`
+ font-size: 24px;
+ font-weight: 700;
+ color: rgb(34, 34, 34);
+ @media screen and (max-width: 768px) {
+ font-size: 16px;
+ }
+`;
+
+const CloseModalIcon = styled.img`
+ cursor: pointer;
+ padding: 16px 8px 16px;
+`;
+
+const SelectTokensModalContent = styled.div`
+ height: 400px;
+ overflow-y: auto;
+ overflow-x: hidden;
+`;
+
+const SubTitle = styled.h3`
+ font-size: 14px;
+ font-weight: 700;
+ color: rgb(155, 155, 155);
+ width: 100%;
+ margin: 16px;
+
+ @media screen and (max-width: 768px) {
+ font-size: 12px;
+ }
+`;
+
+const TokenImageItem = styled.div`
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ cursor: pointer;
+ margin-bottom: 16px;
+ padding: 8px 16px;
+ border-radius: 8px;
+ transition: 0.3s;
+ &:hover {
+ background-color: #d2d9ee60;
+ }
+
+`;
+
+const Currency = styled.div`
+ font-size: 16px;
+ font-weight: 700;
+ color: rgb(34, 34, 34);
+ width: 100%;
+ width: 100%;
+ height: 100%;
+ @media screen and (max-width: 768px) {
+ font-size: 14px;
+ }
+`;
+
+export {
+ SelectTokensModalContainer,
+ SelectTokensModalInner,
+ SelectTokensModalHeader,
+ Title,
+ SubTitle,
+ CloseModalIcon,
+ SelectTokensModalContent,
+ TokenImageItem,
+ Currency,
+ SelectTokenModalSearchInput,
+ SelectTokenModalSearchInputBox,
+ SearchInputIcon,
+};
diff --git a/src/problem2/src/components/SelectTokensModal/SelectTokensModal.tsx b/src/problem2/src/components/SelectTokensModal/SelectTokensModal.tsx
new file mode 100644
index 0000000000..701082ae09
--- /dev/null
+++ b/src/problem2/src/components/SelectTokensModal/SelectTokensModal.tsx
@@ -0,0 +1,86 @@
+import { TokenPriceInfo } from "../../types";
+import TokenImage from "../TokenImage/TokenImage";
+import CloseIcon from "../../assets/img/icons/close.svg";
+import SearchIcon from "../../assets/img/icons/search.svg";
+import {
+ CloseModalIcon,
+ Currency,
+ SearchInputIcon,
+ SelectTokenModalSearchInput,
+ SelectTokenModalSearchInputBox,
+ SelectTokensModalContainer,
+ SelectTokensModalContent,
+ SelectTokensModalHeader,
+ SelectTokensModalInner,
+ SubTitle,
+ Title,
+ TokenImageItem,
+} from "./SelectTokenModal.styled";
+import Flex from "../../styles/Flex.styled";
+
+interface SelectTokensModalProps {
+ tokenPriceInfo: TokenPriceInfo[];
+ searchTokenValue: string;
+ onCloseModal: () => void;
+ onSelectToken: (token: TokenPriceInfo) => void;
+ onChangeSearchToken: (e: React.ChangeEvent) => void;
+}
+
+const SelectTokensModal = ({
+ tokenPriceInfo,
+ onCloseModal,
+ onSelectToken,
+ onChangeSearchToken,
+ searchTokenValue,
+}: SelectTokensModalProps) => {
+ return (
+
+
+
+
+ Select Token
+
+
+
+
+
+
+
+
+
+ {tokenPriceInfo.length ? (
+ <>
+
+ {searchTokenValue
+ ? "Search Results"
+ : "Popular Token"}
+
+ {tokenPriceInfo?.map(
+ (token: TokenPriceInfo, index: number) => (
+ onSelectToken(token)}
+ >
+ {token.currency}
+
+
+ )
+ )}
+ >
+ ) : (
+ No result found.
+ )}
+
+
+
+ );
+};
+
+export default SelectTokensModal;
diff --git a/src/problem2/src/components/SwapSection/SwapSection.styled.ts b/src/problem2/src/components/SwapSection/SwapSection.styled.ts
new file mode 100644
index 0000000000..a4805ab52b
--- /dev/null
+++ b/src/problem2/src/components/SwapSection/SwapSection.styled.ts
@@ -0,0 +1,121 @@
+import styled from "styled-components";
+
+const SwapSectionContainer = styled.div`
+ border: 1px solid rgb(249, 249, 249);
+ border-radius: 24px;
+ padding: 16px;
+ background-color: rgb(249, 249, 249);
+`;
+
+const Title = styled.h3`
+ font-size: 16px;
+ font-weight: 700;
+ color: rgb(34, 34, 34);
+ margin-bottom: 16px;
+ width: 100%;
+ @media screen and (max-width: 768px) {
+ font-size: 14px;
+ margin-bottom: 12px;
+ }
+`;
+
+const InputContent = styled.div`
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ width: 100%;
+`;
+
+const TextInput = styled.input`
+ padding: 8px 0;
+ border: none;
+ outline: none;
+ color: rgb(34, 34, 34);
+ background-color: rgb(249, 249, 249);
+ &::placeholder {
+ color: rgb(125, 125, 125);
+ }
+ font-size: 32px;
+ font-weight: 700;
+ margin-right: 32px;
+ width: 60%;
+ @media screen and (max-width: 768px) {
+ font-size: 20px;
+ margin-right: 16px;
+ width: 40%;
+ }
+`;
+
+const PriceInUSD = styled.p`
+ color: rgb(125, 125, 125);
+ font-size: 14px;
+ margin-top: 16px;
+ width: 100%;
+ font-weight: 600;
+ @media screen and (max-width: 768px) {
+ font-size: 12px;
+ margin-top: 12px;
+ margin-bottom: 4px;
+ }
+`;
+
+const SelectTokenButton = styled.div`
+ background-color: #fb118e;
+ padding: 12px 16px;
+ color: white;
+ display: flex;
+ border-radius: 32px;
+ align-items: center;
+ justify-content: space-between;
+ cursor: pointer;
+ transition: 0.3s;
+ &:hover {
+ opacity: 0.6;
+ }
+ @media screen and (max-width: 768px) {
+ padding: 8px 12px;
+ border-radius: 24px;
+ }
+`;
+
+const SelectTokenButtonContent = styled.div`
+ display: flex;
+ align-items: center;
+ flex-shrink: 0;
+`;
+
+const SelectTokenButtonTitle = styled.p`
+ color: white;
+ font-size: 14px;
+ font-weight: 700;
+ margin-right: 8px;
+ @media screen and (max-width: 768px) {
+ font-size: 11px;
+ }
+`;
+
+const SelectTokenButtonImage = styled.div`
+ margin-right: 8px;
+`;
+
+const SelectTokenButtonIcon = styled.img`
+ width: 16px;
+ height: 16px;
+ @media screen and (max-width: 768px) {
+ width: 10px;
+ height: 10px;
+ }
+`;
+
+export {
+ SwapSectionContainer,
+ Title,
+ InputContent,
+ TextInput,
+ PriceInUSD,
+ SelectTokenButton,
+ SelectTokenButtonContent,
+ SelectTokenButtonTitle,
+ SelectTokenButtonImage,
+ SelectTokenButtonIcon,
+};
diff --git a/src/problem2/src/components/SwapSection/SwapSection.tsx b/src/problem2/src/components/SwapSection/SwapSection.tsx
new file mode 100644
index 0000000000..c83f42eccc
--- /dev/null
+++ b/src/problem2/src/components/SwapSection/SwapSection.tsx
@@ -0,0 +1,93 @@
+import { useMemo } from "react";
+
+import ChevronDownWhiteIcon from "../../assets/img/icons/chevron-down-white.svg";
+import { TokenPriceInfo } from "../../types";
+import TokenImage from "../TokenImage/TokenImage";
+import {
+ InputContent,
+ PriceInUSD,
+ SelectTokenButton,
+ SelectTokenButtonContent,
+ SelectTokenButtonIcon,
+ SelectTokenButtonImage,
+ SelectTokenButtonTitle,
+ SwapSectionContainer,
+ TextInput,
+ Title,
+} from "./SwapSection.styled";
+import { exceptThisSymbols } from "../../constants";
+
+interface SwapSectionProps {
+ title: string;
+ amountInput: string;
+ isDisabledInput?: boolean;
+ selectedToken: TokenPriceInfo;
+ getAmountInput?: (amount: string) => void;
+ onToggleModal?: () => void;
+}
+
+const SwapSection = ({
+ title,
+ amountInput,
+ getAmountInput,
+ selectedToken,
+ isDisabledInput = false,
+ onToggleModal,
+}: SwapSectionProps) => {
+ const handleAmountChange = (e: React.ChangeEvent) => {
+ getAmountInput && getAmountInput(e.target.value);
+ };
+
+ const USDPriceConverted = useMemo(() => {
+ if (!selectedToken || !amountInput) return null;
+ return selectedToken.price * parseFloat(amountInput);
+ }, [amountInput, selectedToken]);
+
+ return (
+ <>
+
+ {title}
+
+
+ exceptThisSymbols.includes(e.key) &&
+ e.preventDefault()
+ }
+ />
+
+
+ {selectedToken?.currency && (
+
+
+
+ )}
+
+
+ {selectedToken?.currency || "Select Token"}
+
+
+
+
+
+
+ ${USDPriceConverted || " - "}
+
+ >
+ );
+};
+
+export default SwapSection;
diff --git a/src/problem2/src/components/TokenImage/TokenImage.styled.ts b/src/problem2/src/components/TokenImage/TokenImage.styled.ts
new file mode 100644
index 0000000000..42fe47dc10
--- /dev/null
+++ b/src/problem2/src/components/TokenImage/TokenImage.styled.ts
@@ -0,0 +1,13 @@
+import styled from "styled-components";
+
+const TokenImageContainer = styled.img`
+ width: ${(props) => props.width}px;
+ height: ${(props) => props.height}px;
+
+ @media screen and (max-width: 768px) {
+ width: ${(props) => Number(props.width) * 2 / 3}px;
+ height: ${(props) => Number(props.height) * 2 / 3}px;
+ }
+`;
+
+export { TokenImageContainer };
diff --git a/src/problem2/src/components/TokenImage/TokenImage.tsx b/src/problem2/src/components/TokenImage/TokenImage.tsx
new file mode 100644
index 0000000000..e52cc532a8
--- /dev/null
+++ b/src/problem2/src/components/TokenImage/TokenImage.tsx
@@ -0,0 +1,27 @@
+import { memo } from "react";
+
+import { images } from "../../assets/img";
+import { TokenImageContainer } from "./TokenImage.styled";
+
+interface TokenImageProps {
+ currency: string;
+ width?: number;
+ height?: number;
+}
+
+const TokenImage = ({
+ currency,
+ width = 44,
+ height = 44,
+}: TokenImageProps) => {
+ return (
+
+ );
+};
+
+export default memo(TokenImage);
diff --git a/src/problem2/src/constants/index.ts b/src/problem2/src/constants/index.ts
new file mode 100644
index 0000000000..2d22e13e52
--- /dev/null
+++ b/src/problem2/src/constants/index.ts
@@ -0,0 +1,5 @@
+export const DEFAULT_CURRENCY_YOU_PAY = "ETH";
+export const MOCK_TOKEN_PRICE_INFO_API =
+ "https://interview.switcheo.com/prices.json";
+
+export const exceptThisSymbols = ["e", "E", "+", "-"];
diff --git a/src/problem2/src/enums/index.ts b/src/problem2/src/enums/index.ts
new file mode 100644
index 0000000000..ae8c69338b
--- /dev/null
+++ b/src/problem2/src/enums/index.ts
@@ -0,0 +1,10 @@
+export enum EInputType {
+ PAY = "pay",
+ RECEIVE = "receive",
+}
+
+export enum ESwapStatus {
+ SUCCESS = "success",
+ FAILED = "failed",
+ IDLE = "idle",
+}
diff --git a/src/problem2/src/index.css b/src/problem2/src/index.css
new file mode 100644
index 0000000000..ddb5a806d9
--- /dev/null
+++ b/src/problem2/src/index.css
@@ -0,0 +1,201 @@
+:root {
+ font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ line-height: 1.5;
+ font-weight: 400;
+ color: rgba(255, 255, 255, 0.87);
+
+ font-synthesis: none;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+ font-weight: 500;
+ color: #646cff;
+ text-decoration: inherit;
+}
+a:hover {
+ color: #535bf2;
+}
+
+h1 {
+ font-size: 3.2em;
+ line-height: 1.1;
+}
+
+/* button {
+ border-radius: 8px;
+ border: 1px solid transparent;
+ padding: 0.6em 1.2em;
+ font-size: 1em;
+ font-weight: 500;
+ font-family: inherit;
+ background-color: #1a1a1a;
+ cursor: pointer;
+ transition: border-color 0.25s;
+}
+button:hover {
+ border-color: #646cff;
+}
+button:focus,
+button:focus-visible {
+ outline: 4px auto -webkit-focus-ring-color;
+} */
+
+/* @media (prefers-color-scheme: light) {
+ :root {
+ color: #213547;
+ background-color: #ffffff;
+ }
+ a:hover {
+ color: #747bff;
+ }
+ button {
+ background-color: #f9f9f9;
+ }
+} */
+
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section {
+ display: block;
+}
+/* HTML5 hidden-attribute fix for newer browsers */
+*[hidden] {
+ display: none;
+}
+body {
+ line-height: 1;
+}
+menu,
+ol,
+ul {
+ list-style: none;
+}
+blockquote,
+q {
+ quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: "";
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/* Chrome, Safari, Edge, Opera */
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}
+
+/* Firefox */
+input[type="number"] {
+ -moz-appearance: textfield;
+}
diff --git a/src/problem2/src/main.tsx b/src/problem2/src/main.tsx
new file mode 100644
index 0000000000..f9f4d613f2
--- /dev/null
+++ b/src/problem2/src/main.tsx
@@ -0,0 +1,10 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App.tsx";
+import "./index.css";
+
+ReactDOM.createRoot(document.getElementById("root")!).render(
+
+
+
+);
diff --git a/src/problem2/src/pages/SwapPage/SwapPage.styled.ts b/src/problem2/src/pages/SwapPage/SwapPage.styled.ts
new file mode 100644
index 0000000000..0d02e74a81
--- /dev/null
+++ b/src/problem2/src/pages/SwapPage/SwapPage.styled.ts
@@ -0,0 +1,74 @@
+import styled from "styled-components";
+
+const SwapPageContainer = styled.div`
+ height: 100vh;
+ padding: 0 16px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+`;
+
+const SwapPageInner = styled.div`
+ max-width: 500px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ border-radius: 32px;
+ border: 1px solid #d2d9ee;
+ padding: 12px;
+ @media screen and (max-width: 768px) {
+ padding: 8px;
+ }
+`;
+
+const Heading = styled.h1`
+ font-size: 56px;
+ font-weight: 700;
+ margin-bottom: 32px;
+ color: rgb(34, 34, 34);
+ text-align: center;
+ width: 100%;
+
+ @media screen and (max-width: 768px) {
+ font-size: 36px;
+ margin-bottom: 24px;
+ }
+`;
+
+const SwapInputArrowButton = styled.div`
+ background-color: #f5f5f5;
+ padding: 16px;
+ margin: -28px;
+ border-radius: 16px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border: 6px solid white;
+ position: relative;
+ z-index: 1;
+ cursor: pointer;
+
+ @media screen and (max-width: 768px) {
+ padding: 8px;
+ margin: -18px;
+ }
+`;
+
+const SwapArrowIcon = styled.img`
+ width: 20px;
+ height: 20px;
+ @media screen and (max-width: 768px) {
+ width: 14px;
+ height: 14px;
+ }
+`;
+
+export {
+ SwapPageContainer,
+ SwapPageInner,
+ Heading,
+ SwapInputArrowButton,
+ SwapArrowIcon,
+};
diff --git a/src/problem2/src/pages/SwapPage/SwapPage.tsx b/src/problem2/src/pages/SwapPage/SwapPage.tsx
new file mode 100644
index 0000000000..dd0fb717f8
--- /dev/null
+++ b/src/problem2/src/pages/SwapPage/SwapPage.tsx
@@ -0,0 +1,315 @@
+import axios from "axios";
+import { useEffect, useRef, useState } from "react";
+
+import { TokenPriceInfo } from "../../types";
+import { EInputType, ESwapStatus } from "../../enums";
+import {
+ SwapPageContainer,
+ SwapPageInner,
+ Heading,
+ SwapArrowIcon,
+ SwapInputArrowButton,
+} from "./SwapPage.styled";
+import SwapSection from "../../components/SwapSection/SwapSection";
+import { MOCK_TOKEN_PRICE_INFO_API } from "../../constants";
+import SelectTokensModal from "../../components/SelectTokensModal/SelectTokensModal";
+import ArrowDownIcon from "../../assets/img/icons/arrow-down.svg";
+import Button from "../../components/Button/Button";
+import { delay } from "../../utils/delay";
+import ConfirmSwapModal from "../../components/ConfirmSwapModal/ConfirmSwapModal";
+
+interface SelectedToken {
+ youPay: TokenPriceInfo;
+ youReceive: TokenPriceInfo;
+}
+
+interface AmountOutput {
+ amountYouPay: string;
+ amountYouReceive: string;
+}
+
+const SwapPage = () => {
+ const [tokenPriceInfo, setTokenPriceInfo] = useState([]);
+
+ const tokenPriceInfoInitialState = useRef([]);
+
+ const [selectedToken, setSelectedToken] = useState<{
+ youPay: TokenPriceInfo;
+ youReceive: TokenPriceInfo;
+ }>({
+ youPay: {} as TokenPriceInfo,
+ youReceive: {} as TokenPriceInfo,
+ });
+
+ const [amountOutput, setAmountOutput] = useState({
+ amountYouPay: "",
+ amountYouReceive: "",
+ });
+
+ const [searchTokenValue, setSearchTokenValue] = useState("");
+
+ const [isConnectedWallet, setIsConnectedWallet] = useState(false);
+ const [loadingButton, setLoadingButton] = useState(false);
+
+ const [isShowConfirmSwapModal, setIsShowConfirmSwapModal] = useState(false);
+
+ const [swapStatus, setSwapStatus] = useState(ESwapStatus.IDLE);
+
+ const getPrices = async () => {
+ try {
+ const response = await axios.get(MOCK_TOKEN_PRICE_INFO_API);
+ if (response && response.data) {
+ setTokenPriceInfo(response.data);
+ tokenPriceInfoInitialState.current = response.data;
+ }
+ } catch (error) {
+ console.log(error);
+ }
+ };
+
+ const handleAmountInput = (type: EInputType, amountInput: string) => {
+ switch (type) {
+ case EInputType.PAY: {
+ setAmountOutput({
+ ...amountOutput,
+ amountYouPay: amountInput,
+ });
+ break;
+ }
+
+ default: {
+ return null;
+ }
+ }
+ };
+
+ const calculateAmountYouReceive = (selectedToken: SelectedToken) => {
+ const amountYouPay = parseFloat(amountOutput.amountYouPay);
+ const tokenPrice = tokenPriceInfo.find(
+ (token) => token.currency === selectedToken.youReceive.currency
+ );
+ if (tokenPrice) {
+ const amountYouReceive =
+ (amountYouPay * selectedToken.youPay.price) / tokenPrice.price;
+ setAmountOutput({
+ ...amountOutput,
+ amountYouReceive: amountYouReceive.toString(),
+ });
+ }
+ };
+
+ const [modalState, setModalState] = useState({
+ status: false,
+ modalType: "",
+ });
+
+ const handleToggleModal = (inputType: EInputType) => {
+ setModalState({
+ status: !modalState.status,
+ modalType: inputType,
+ });
+ };
+
+ const handleCloseModal = () => {
+ setModalState({
+ status: false,
+ modalType: "",
+ });
+ setSearchTokenValue("");
+ };
+
+ const handleSelectToken = (token: TokenPriceInfo) => {
+ switch (modalState.modalType) {
+ case EInputType.PAY: {
+ setSelectedToken({
+ ...selectedToken,
+ youPay: token,
+ });
+ break;
+ }
+
+ case EInputType.RECEIVE: {
+ setSelectedToken({
+ ...selectedToken,
+ youReceive: token,
+ });
+ break;
+ }
+
+ default: {
+ return null;
+ }
+ }
+ handleCloseModal();
+ };
+
+ const handleChangeSearchToken = (
+ e: React.ChangeEvent
+ ) => {
+ setSearchTokenValue(e.target.value);
+ };
+
+ const handleSearchPriceInModal = (searchValue: string) => {
+ if (!searchValue)
+ return setTokenPriceInfo(tokenPriceInfoInitialState.current);
+ const searchResult = tokenPriceInfo.filter((token) =>
+ token.currency.toLowerCase().includes(searchValue.toLowerCase())
+ );
+ setTokenPriceInfo(searchResult);
+ };
+
+ useEffect(() => {
+ handleSearchPriceInModal(searchTokenValue);
+ }, [searchTokenValue]);
+
+ useEffect(() => {
+ getPrices();
+ }, []);
+
+ useEffect(() => {
+ if (selectedToken.youReceive.currency)
+ calculateAmountYouReceive(selectedToken);
+ }, [selectedToken, amountOutput.amountYouPay]);
+
+ const swapInputArrow = () => {
+ setSelectedToken({
+ youPay: selectedToken.youReceive,
+ youReceive: selectedToken.youPay,
+ });
+ setAmountOutput({
+ amountYouPay: amountOutput.amountYouReceive,
+ amountYouReceive: amountOutput.amountYouPay,
+ });
+ };
+
+ const connectWallet = async () => {
+ try {
+ setLoadingButton(true);
+ //Call API or call method to connect wallet
+ await delay(2000);
+ //Set connected wallet status if success
+ setIsConnectedWallet(true);
+ } catch (error) {
+ console.log(error);
+ //Set connected wallet status if failed
+ setIsConnectedWallet(false);
+ } finally {
+ setLoadingButton(false);
+ }
+ };
+
+ const generateButton = () => {
+ const isValidSwapToken =
+ selectedToken.youPay.currency &&
+ selectedToken.youReceive.currency &&
+ amountOutput.amountYouPay &&
+ amountOutput.amountYouReceive;
+
+ if (isConnectedWallet && !isValidSwapToken) {
+ return ;
+ }
+ if (isConnectedWallet && isValidSwapToken) {
+ return (
+
+ );
+ }
+ return (
+
+ );
+ };
+
+ const handleSwapToken = async () => {
+ try {
+ setIsShowConfirmSwapModal(true);
+ //Call API or call method to swap token
+ await delay(2000);
+ //Set swap status if success
+ setSwapStatus(ESwapStatus.SUCCESS);
+ } catch (error) {
+ console.log(error);
+ //Set swap status if failed
+ setSwapStatus(ESwapStatus.FAILED);
+ }
+ };
+
+ const handleCloseConfirmSwapModal = () => {
+ setIsShowConfirmSwapModal(false);
+ if (swapStatus === ESwapStatus.SUCCESS) {
+ setAmountOutput({
+ amountYouPay: "",
+ amountYouReceive: "",
+ });
+ setSelectedToken({
+ youPay: {} as TokenPriceInfo,
+ youReceive: {} as TokenPriceInfo,
+ });
+ }
+
+ setSwapStatus(ESwapStatus.IDLE);
+ };
+
+ return (
+
+ Swap anytime, anywhere.
+
+
+ handleAmountInput(EInputType.PAY, amountInput)
+ }
+ onToggleModal={() => handleToggleModal(EInputType.PAY)}
+ />
+
+
+
+
+
+ handleToggleModal(EInputType.RECEIVE)}
+ />
+
+ {generateButton()}
+
+ {modalState.status && (
+
+ )}
+ {isShowConfirmSwapModal && (
+
+ )}
+
+ );
+};
+
+export default SwapPage;
diff --git a/src/problem2/src/styles/Flex.styled.ts b/src/problem2/src/styles/Flex.styled.ts
new file mode 100644
index 0000000000..5075d30b8c
--- /dev/null
+++ b/src/problem2/src/styles/Flex.styled.ts
@@ -0,0 +1,28 @@
+import { HTMLAttributes } from "react";
+import styled from "styled-components";
+
+interface FlexProps extends HTMLAttributes {
+ direction?: "row" | "row-reverse" | "column" | "column-reverse";
+ justify?:
+ | "flex-start"
+ | "flex-end"
+ | "center"
+ | "space-between"
+ | "space-around";
+ align?: "stretch" | "flex-start" | "flex-end" | "center" | "baseline";
+ wrap?: boolean;
+ gap?: string;
+}
+
+// Define a styled component for Flex
+const Flex = styled.div`
+ display: flex;
+ flex-direction: ${(props) => props.direction || "row"};
+ justify-content: ${(props) => props.justify || "flex-start"};
+ align-items: ${(props) => props.align || "stretch"};
+ flex-wrap: ${(props) => (props.wrap ? "wrap" : "nowrap")};
+ gap: ${(props) => props.gap || "0"};
+ /* Additional styling properties can be added here */
+`;
+
+export default Flex;
diff --git a/src/problem2/src/types/index.ts b/src/problem2/src/types/index.ts
new file mode 100644
index 0000000000..a751a063c0
--- /dev/null
+++ b/src/problem2/src/types/index.ts
@@ -0,0 +1,7 @@
+export type TokenPriceInfo = {
+ currency: string;
+ price: number;
+ date: Date;
+};
+
+export type ButtonVariant = "primary" | "secondary" | "disabled";
diff --git a/src/problem2/src/utils/delay.ts b/src/problem2/src/utils/delay.ts
new file mode 100644
index 0000000000..d096736773
--- /dev/null
+++ b/src/problem2/src/utils/delay.ts
@@ -0,0 +1,5 @@
+export function delay(ms: number) {
+ return new Promise((resolve) => {
+ setTimeout(resolve, ms);
+ });
+}
diff --git a/src/problem2/src/utils/generateImportImages.js b/src/problem2/src/utils/generateImportImages.js
new file mode 100644
index 0000000000..991b5e9c74
--- /dev/null
+++ b/src/problem2/src/utils/generateImportImages.js
@@ -0,0 +1,33 @@
+import fs from "fs";
+
+const convertFilesToArray = (path, data) => {
+ return data.map((file) => {
+ return {
+ name: file.replace(".svg", ""),
+ path: `./${path}/${file}`,
+ };
+ });
+};
+
+const generateImportImage = () => {
+ const tokenImageFiles = fs.readdirSync("src/assets/img/tokens");
+
+ const tokenImagesArray = convertFilesToArray("tokens", tokenImageFiles);
+
+ const content = `${tokenImagesArray
+ .map((image) => `import ${image.name} from '${image.path}';`)
+ .join(
+ "\n"
+ )} export const images: { [key: string]: string } = { ${tokenImagesArray
+ .map((image) => `${image.name},`)
+ .join("\n")}}`;
+
+ fs.writeFile("src/assets/img/index.ts", content, (err) => {
+ if (err) {
+ throw err;
+ }
+ console.log("Content written to 'src/assets/images/index.ts'");
+ });
+};
+
+generateImportImage();
diff --git a/src/problem2/src/vite-env.d.ts b/src/problem2/src/vite-env.d.ts
new file mode 100644
index 0000000000..11f02fe2a0
--- /dev/null
+++ b/src/problem2/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/src/problem2/style.css b/src/problem2/style.css
deleted file mode 100644
index 915af91c72..0000000000
--- a/src/problem2/style.css
+++ /dev/null
@@ -1,8 +0,0 @@
-body {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: center;
- min-width: 360px;
- font-family: Arial, Helvetica, sans-serif;
-}
diff --git a/src/problem2/tsconfig.json b/src/problem2/tsconfig.json
new file mode 100644
index 0000000000..a7fc6fbf23
--- /dev/null
+++ b/src/problem2/tsconfig.json
@@ -0,0 +1,25 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/src/problem2/tsconfig.node.json b/src/problem2/tsconfig.node.json
new file mode 100644
index 0000000000..97ede7ee6f
--- /dev/null
+++ b/src/problem2/tsconfig.node.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "allowSyntheticDefaultImports": true,
+ "strict": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/src/problem2/vite.config.ts b/src/problem2/vite.config.ts
new file mode 100644
index 0000000000..5a33944a9b
--- /dev/null
+++ b/src/problem2/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+})
diff --git a/src/problem2/yarn.lock b/src/problem2/yarn.lock
new file mode 100644
index 0000000000..476330e416
--- /dev/null
+++ b/src/problem2/yarn.lock
@@ -0,0 +1,1834 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
+"@ampproject/remapping@^2.2.0":
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2":
+ version "7.24.2"
+ resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz"
+ integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
+ dependencies:
+ "@babel/highlight" "^7.24.2"
+ picocolors "^1.0.0"
+
+"@babel/compat-data@^7.23.5":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz"
+ integrity sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==
+
+"@babel/core@^7.23.5":
+ version "7.24.3"
+ resolved "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz"
+ integrity sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.24.2"
+ "@babel/generator" "^7.24.1"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.24.1"
+ "@babel/parser" "^7.24.1"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.1"
+ "@babel/types" "^7.24.0"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
+"@babel/generator@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz"
+ integrity sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==
+ dependencies:
+ "@babel/types" "^7.24.0"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+ jsesc "^2.5.1"
+
+"@babel/helper-compilation-targets@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz"
+ integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
+ dependencies:
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-validator-option" "^7.23.5"
+ browserslist "^4.22.2"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
+"@babel/helper-environment-visitor@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz"
+ integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
+
+"@babel/helper-function-name@^7.23.0":
+ version "7.23.0"
+ resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz"
+ integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
+ dependencies:
+ "@babel/template" "^7.22.15"
+ "@babel/types" "^7.23.0"
+
+"@babel/helper-hoist-variables@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz"
+ integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-module-imports@^7.22.15":
+ version "7.24.3"
+ resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz"
+ integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==
+ dependencies:
+ "@babel/types" "^7.24.0"
+
+"@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
+ dependencies:
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-module-imports" "^7.22.15"
+ "@babel/helper-simple-access" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/helper-validator-identifier" "^7.22.20"
+
+"@babel/helper-plugin-utils@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz"
+ integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
+
+"@babel/helper-simple-access@^7.22.5":
+ version "7.22.5"
+ resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz"
+ integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-split-export-declaration@^7.22.6":
+ version "7.22.6"
+ resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz"
+ integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
+ dependencies:
+ "@babel/types" "^7.22.5"
+
+"@babel/helper-string-parser@^7.23.4":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz"
+ integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
+
+"@babel/helper-validator-identifier@^7.22.20":
+ version "7.22.20"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz"
+ integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
+
+"@babel/helper-validator-option@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz"
+ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
+
+"@babel/helpers@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz"
+ integrity sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==
+ dependencies:
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.1"
+ "@babel/types" "^7.24.0"
+
+"@babel/highlight@^7.24.2":
+ version "7.24.2"
+ resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz"
+ integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.22.20"
+ chalk "^2.4.2"
+ js-tokens "^4.0.0"
+ picocolors "^1.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz"
+ integrity sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==
+
+"@babel/plugin-transform-react-jsx-self@^7.23.3":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz"
+ integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.0"
+
+"@babel/plugin-transform-react-jsx-source@^7.23.3":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz"
+ integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.24.0"
+
+"@babel/template@^7.22.15", "@babel/template@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
+ dependencies:
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
+
+"@babel/traverse@^7.24.1":
+ version "7.24.1"
+ resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz"
+ integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==
+ dependencies:
+ "@babel/code-frame" "^7.24.1"
+ "@babel/generator" "^7.24.1"
+ "@babel/helper-environment-visitor" "^7.22.20"
+ "@babel/helper-function-name" "^7.23.0"
+ "@babel/helper-hoist-variables" "^7.22.5"
+ "@babel/helper-split-export-declaration" "^7.22.6"
+ "@babel/parser" "^7.24.1"
+ "@babel/types" "^7.24.0"
+ debug "^4.3.1"
+ globals "^11.1.0"
+
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0":
+ version "7.24.0"
+ resolved "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
+ dependencies:
+ "@babel/helper-string-parser" "^7.23.4"
+ "@babel/helper-validator-identifier" "^7.22.20"
+ to-fast-properties "^2.0.0"
+
+"@emotion/is-prop-valid@1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz"
+ integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==
+ dependencies:
+ "@emotion/memoize" "^0.8.1"
+
+"@emotion/memoize@^0.8.1":
+ version "0.8.1"
+ resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz"
+ integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==
+
+"@emotion/unitless@0.8.0":
+ version "0.8.0"
+ resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz"
+ integrity sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==
+
+"@esbuild/aix-ppc64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537"
+ integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==
+
+"@esbuild/android-arm64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9"
+ integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==
+
+"@esbuild/android-arm@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995"
+ integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==
+
+"@esbuild/android-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98"
+ integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==
+
+"@esbuild/darwin-arm64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz"
+ integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==
+
+"@esbuild/darwin-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0"
+ integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==
+
+"@esbuild/freebsd-arm64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911"
+ integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==
+
+"@esbuild/freebsd-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c"
+ integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==
+
+"@esbuild/linux-arm64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5"
+ integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==
+
+"@esbuild/linux-arm@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c"
+ integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==
+
+"@esbuild/linux-ia32@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa"
+ integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==
+
+"@esbuild/linux-loong64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5"
+ integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==
+
+"@esbuild/linux-mips64el@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa"
+ integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==
+
+"@esbuild/linux-ppc64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20"
+ integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==
+
+"@esbuild/linux-riscv64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300"
+ integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==
+
+"@esbuild/linux-s390x@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685"
+ integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==
+
+"@esbuild/linux-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff"
+ integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==
+
+"@esbuild/netbsd-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6"
+ integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==
+
+"@esbuild/openbsd-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf"
+ integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==
+
+"@esbuild/sunos-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f"
+ integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==
+
+"@esbuild/win32-arm64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90"
+ integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==
+
+"@esbuild/win32-ia32@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23"
+ integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==
+
+"@esbuild/win32-x64@0.20.2":
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc"
+ integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==
+
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
+ version "4.10.0"
+ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz"
+ integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==
+
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz"
+ integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
+
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
+"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
+ version "1.4.15"
+ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
+ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
+
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
+"@rollup/rollup-android-arm-eabi@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz#fbf098f49d96a8cac9056f22f5fd80906ef3af85"
+ integrity sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==
+
+"@rollup/rollup-android-arm64@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz#0d2448251040fce19a98eee505dff5b3c8ec9b98"
+ integrity sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==
+
+"@rollup/rollup-darwin-arm64@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz"
+ integrity sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==
+
+"@rollup/rollup-darwin-x64@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz#fcc05af54379f8ee5c7e954987d4514c6fd0fb42"
+ integrity sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==
+
+"@rollup/rollup-linux-arm-gnueabihf@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz#2ce200efa1ef4a56ee2af7b453edc74a259d7d31"
+ integrity sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==
+
+"@rollup/rollup-linux-arm64-gnu@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz#5a24aac882bff9abfda3f45f6f1db2166c342a4a"
+ integrity sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==
+
+"@rollup/rollup-linux-arm64-musl@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz#f1fb4c6f961d3f3397231a99e621d199200e4ea9"
+ integrity sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==
+
+"@rollup/rollup-linux-powerpc64le-gnu@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz#46b2463d94ac3af3e0f7a2947b695397bc13b755"
+ integrity sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==
+
+"@rollup/rollup-linux-riscv64-gnu@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz#47b932ee59a5395a3a341b0493e361d9e6032cf2"
+ integrity sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==
+
+"@rollup/rollup-linux-s390x-gnu@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz#8e14a1b3c3b9a4440c70a9c1ba12d32aa21f9712"
+ integrity sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==
+
+"@rollup/rollup-linux-x64-gnu@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz#270e939194b66df77bcb33dd9a5ddf7784bd7997"
+ integrity sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==
+
+"@rollup/rollup-linux-x64-musl@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz#e8dd0f3c2046acbda2934490b36552e856a3bc6a"
+ integrity sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==
+
+"@rollup/rollup-win32-arm64-msvc@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz#f8b65a4a7e7a6b383e7b14439129b2f474ff123c"
+ integrity sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==
+
+"@rollup/rollup-win32-ia32-msvc@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz#bc1c5a4fbc4337d6cb15da80a4de95fd53ab3573"
+ integrity sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==
+
+"@rollup/rollup-win32-x64-msvc@4.13.2":
+ version "4.13.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz#851959c4c1c3c6647aba1f388198c8243aed6917"
+ integrity sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==
+
+"@types/babel__core@^7.20.5":
+ version "7.20.5"
+ resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
+ dependencies:
+ "@babel/parser" "^7.20.7"
+ "@babel/types" "^7.20.7"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.8"
+ resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz"
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.4.4"
+ resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz"
+ integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*":
+ version "7.20.5"
+ resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz"
+ integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
+ dependencies:
+ "@babel/types" "^7.20.7"
+
+"@types/estree@1.0.5":
+ version "1.0.5"
+ resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz"
+ integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
+
+"@types/json-schema@^7.0.12":
+ version "7.0.15"
+ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
+ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
+
+"@types/node@^20.12.2":
+ version "20.12.2"
+ resolved "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz"
+ integrity sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/prop-types@*":
+ version "15.7.12"
+ resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz"
+ integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
+
+"@types/react-dom@^18.2.22":
+ version "18.2.23"
+ resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz"
+ integrity sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==
+ dependencies:
+ "@types/react" "*"
+
+"@types/react@*", "@types/react@^18.2.66":
+ version "18.2.73"
+ resolved "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz"
+ integrity sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==
+ dependencies:
+ "@types/prop-types" "*"
+ csstype "^3.0.2"
+
+"@types/semver@^7.5.0":
+ version "7.5.8"
+ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz"
+ integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
+
+"@types/stylis@4.2.0":
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz"
+ integrity sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==
+
+"@typescript-eslint/eslint-plugin@^7.2.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz"
+ integrity sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==
+ dependencies:
+ "@eslint-community/regexpp" "^4.5.1"
+ "@typescript-eslint/scope-manager" "7.4.0"
+ "@typescript-eslint/type-utils" "7.4.0"
+ "@typescript-eslint/utils" "7.4.0"
+ "@typescript-eslint/visitor-keys" "7.4.0"
+ debug "^4.3.4"
+ graphemer "^1.4.0"
+ ignore "^5.2.4"
+ natural-compare "^1.4.0"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/parser@^7.2.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz"
+ integrity sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "7.4.0"
+ "@typescript-eslint/types" "7.4.0"
+ "@typescript-eslint/typescript-estree" "7.4.0"
+ "@typescript-eslint/visitor-keys" "7.4.0"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz"
+ integrity sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==
+ dependencies:
+ "@typescript-eslint/types" "7.4.0"
+ "@typescript-eslint/visitor-keys" "7.4.0"
+
+"@typescript-eslint/type-utils@7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz"
+ integrity sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "7.4.0"
+ "@typescript-eslint/utils" "7.4.0"
+ debug "^4.3.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/types@7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz"
+ integrity sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==
+
+"@typescript-eslint/typescript-estree@7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz"
+ integrity sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==
+ dependencies:
+ "@typescript-eslint/types" "7.4.0"
+ "@typescript-eslint/visitor-keys" "7.4.0"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ minimatch "9.0.3"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/utils@7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz"
+ integrity sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.12"
+ "@types/semver" "^7.5.0"
+ "@typescript-eslint/scope-manager" "7.4.0"
+ "@typescript-eslint/types" "7.4.0"
+ "@typescript-eslint/typescript-estree" "7.4.0"
+ semver "^7.5.4"
+
+"@typescript-eslint/visitor-keys@7.4.0":
+ version "7.4.0"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz"
+ integrity sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==
+ dependencies:
+ "@typescript-eslint/types" "7.4.0"
+ eslint-visitor-keys "^3.4.1"
+
+"@ungap/structured-clone@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz"
+ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
+
+"@vitejs/plugin-react@^4.2.1":
+ version "4.2.1"
+ resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz"
+ integrity sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==
+ dependencies:
+ "@babel/core" "^7.23.5"
+ "@babel/plugin-transform-react-jsx-self" "^7.23.3"
+ "@babel/plugin-transform-react-jsx-source" "^7.23.3"
+ "@types/babel__core" "^7.20.5"
+ react-refresh "^0.14.0"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn@^8.9.0:
+ version "8.11.3"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
+ integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+axios@^1.6.8:
+ version "1.6.8"
+ resolved "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz"
+ integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
+ dependencies:
+ follow-redirects "^1.15.6"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+browserslist@^4.22.2:
+ version "4.23.0"
+ resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
+ dependencies:
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
+ update-browserslist-db "^1.0.13"
+
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+camelize@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz"
+ integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
+
+caniuse-lite@^1.0.30001587:
+ version "1.0.30001600"
+ resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz"
+ integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^4.0.0:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+combined-stream@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
+ integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+convert-source-map@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"
+ integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
+
+cross-spawn@^7.0.2:
+ version "7.0.3"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
+css-color-keywords@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz"
+ integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
+
+css-to-react-native@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz"
+ integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==
+ dependencies:
+ camelize "^1.0.0"
+ css-color-keywords "^1.0.0"
+ postcss-value-parser "^4.0.2"
+
+csstype@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
+ integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
+
+csstype@^3.0.2:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz"
+ integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+
+debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
+ integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
+electron-to-chromium@^1.4.668:
+ version "1.4.722"
+ resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.722.tgz"
+ integrity sha512-5nLE0TWFFpZ80Crhtp4pIp8LXCztjYX41yUcV6b+bKR2PqzjskTMOOlBi1VjBHlvHwS+4gar7kNKOrsbsewEZQ==
+
+esbuild@^0.20.1:
+ version "0.20.2"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz"
+ integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==
+ optionalDependencies:
+ "@esbuild/aix-ppc64" "0.20.2"
+ "@esbuild/android-arm" "0.20.2"
+ "@esbuild/android-arm64" "0.20.2"
+ "@esbuild/android-x64" "0.20.2"
+ "@esbuild/darwin-arm64" "0.20.2"
+ "@esbuild/darwin-x64" "0.20.2"
+ "@esbuild/freebsd-arm64" "0.20.2"
+ "@esbuild/freebsd-x64" "0.20.2"
+ "@esbuild/linux-arm" "0.20.2"
+ "@esbuild/linux-arm64" "0.20.2"
+ "@esbuild/linux-ia32" "0.20.2"
+ "@esbuild/linux-loong64" "0.20.2"
+ "@esbuild/linux-mips64el" "0.20.2"
+ "@esbuild/linux-ppc64" "0.20.2"
+ "@esbuild/linux-riscv64" "0.20.2"
+ "@esbuild/linux-s390x" "0.20.2"
+ "@esbuild/linux-x64" "0.20.2"
+ "@esbuild/netbsd-x64" "0.20.2"
+ "@esbuild/openbsd-x64" "0.20.2"
+ "@esbuild/sunos-x64" "0.20.2"
+ "@esbuild/win32-arm64" "0.20.2"
+ "@esbuild/win32-ia32" "0.20.2"
+ "@esbuild/win32-x64" "0.20.2"
+
+escalade@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-plugin-react-hooks@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz"
+ integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==
+
+eslint-plugin-react-refresh@^0.4.6:
+ version "0.4.6"
+ resolved "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz"
+ integrity sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+eslint@^8.57.0:
+ version "8.57.0"
+ resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
+esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.9:
+ version "3.3.2"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz"
+ integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.17.1"
+ resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
+ dependencies:
+ reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
+ dependencies:
+ flatted "^3.2.9"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flatted@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
+
+follow-redirects@^1.15.6:
+ version "1.15.6"
+ resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
+
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2, fsevents@~2.3.3:
+ version "2.3.3"
+ resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+gensync@^1.0.0-beta.2:
+ version "1.0.0-beta.2"
+ resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz"
+ integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
+
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
+globals@^13.19.0:
+ version "13.24.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz"
+ integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
+ dependencies:
+ type-fest "^0.20.2"
+
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+ignore@^5.2.0, ignore@^5.2.4:
+ version "5.3.1"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
+ integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
+isexe@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
+ integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@^2.2.3:
+ version "2.2.3"
+ resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
+ integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+keyv@^4.5.3:
+ version "4.5.4"
+ resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
+ integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
+ dependencies:
+ json-buffer "3.0.1"
+
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+loose-envify@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+ dependencies:
+ js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru-cache@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
+ integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+ dependencies:
+ yallist "^4.0.0"
+
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4:
+ version "4.0.5"
+ resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
+ integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+ dependencies:
+ braces "^3.0.2"
+ picomatch "^2.3.1"
+
+mime-db@1.52.0:
+ version "1.52.0"
+ resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
+ integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+ version "2.1.35"
+ resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
+ integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+ dependencies:
+ mime-db "1.52.0"
+
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+nanoid@^3.3.6, nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
+ integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
+
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
+
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+optionator@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
+ dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
+ integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+postcss-value-parser@^4.0.2:
+ version "4.2.0"
+ resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
+ integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
+
+postcss@8.4.31:
+ version "8.4.31"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
+ dependencies:
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
+
+postcss@^8.4.38:
+ version "8.4.38"
+ resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz"
+ integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==
+ dependencies:
+ nanoid "^3.3.7"
+ picocolors "^1.0.0"
+ source-map-js "^1.2.0"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+punycode@^2.1.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
+ integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
+
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-dom@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz"
+ integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
+ dependencies:
+ loose-envify "^1.1.0"
+ scheduler "^0.23.0"
+
+react-refresh@^0.14.0:
+ version "0.14.0"
+ resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz"
+ integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==
+
+react@^18.2.0:
+ version "18.2.0"
+ resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
+ integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
+ dependencies:
+ loose-envify "^1.1.0"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+rollup@^4.13.0:
+ version "4.13.2"
+ resolved "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz"
+ integrity sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.13.2"
+ "@rollup/rollup-android-arm64" "4.13.2"
+ "@rollup/rollup-darwin-arm64" "4.13.2"
+ "@rollup/rollup-darwin-x64" "4.13.2"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.13.2"
+ "@rollup/rollup-linux-arm64-gnu" "4.13.2"
+ "@rollup/rollup-linux-arm64-musl" "4.13.2"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.13.2"
+ "@rollup/rollup-linux-riscv64-gnu" "4.13.2"
+ "@rollup/rollup-linux-s390x-gnu" "4.13.2"
+ "@rollup/rollup-linux-x64-gnu" "4.13.2"
+ "@rollup/rollup-linux-x64-musl" "4.13.2"
+ "@rollup/rollup-win32-arm64-msvc" "4.13.2"
+ "@rollup/rollup-win32-ia32-msvc" "4.13.2"
+ "@rollup/rollup-win32-x64-msvc" "4.13.2"
+ fsevents "~2.3.2"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+scheduler@^0.23.0:
+ version "0.23.0"
+ resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz"
+ integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
+ dependencies:
+ loose-envify "^1.1.0"
+
+semver@^6.3.1:
+ version "6.3.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.5.4:
+ version "7.6.0"
+ resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+ dependencies:
+ lru-cache "^6.0.0"
+
+shallowequal@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz"
+ integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
+
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+source-map-js@^1.0.2, source-map-js@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz"
+ integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+
+strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-json-comments@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+styled-components@^6.1.8:
+ version "6.1.8"
+ resolved "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz"
+ integrity sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==
+ dependencies:
+ "@emotion/is-prop-valid" "1.2.1"
+ "@emotion/unitless" "0.8.0"
+ "@types/stylis" "4.2.0"
+ css-to-react-native "3.2.0"
+ csstype "3.1.2"
+ postcss "8.4.31"
+ shallowequal "1.1.0"
+ stylis "4.3.1"
+ tslib "2.5.0"
+
+stylis@4.3.1:
+ version "4.3.1"
+ resolved "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz"
+ integrity sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
+ integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+ts-api-utils@^1.0.1:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz"
+ integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
+
+tslib@2.5.0:
+ version "2.5.0"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz"
+ integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+typescript@^5.2.2:
+ version "5.4.3"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz"
+ integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+update-browserslist-db@^1.0.13:
+ version "1.0.13"
+ resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz"
+ integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
+ dependencies:
+ escalade "^3.1.1"
+ picocolors "^1.0.0"
+
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
+vite@^5.2.0:
+ version "5.2.7"
+ resolved "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz"
+ integrity sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==
+ dependencies:
+ esbuild "^0.20.1"
+ postcss "^8.4.38"
+ rollup "^4.13.0"
+ optionalDependencies:
+ fsevents "~2.3.3"
+
+which@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yallist@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
+ integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/src/problem3/.keep b/src/problem3/.keep
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/src/problem3/Example.tsx b/src/problem3/Example.tsx
new file mode 100644
index 0000000000..5931415019
--- /dev/null
+++ b/src/problem3/Example.tsx
@@ -0,0 +1,97 @@
+interface WalletBalance {
+ currency: string;
+ amount: number;
+}
+interface FormattedWalletBalance {
+ currency: string;
+ amount: number;
+ formatted: string;
+}
+
+class Datasource {
+ // TODO: Implement datasource class
+}
+
+interface Props extends BoxProps {}
+const WalletPage: React.FC = (props: Props) => {
+ const { children, ...rest } = props;
+ const balances = useWalletBalances();
+ const [prices, setPrices] = useState({});
+
+ useEffect(() => {
+ const datasource = new Datasource(
+ "https://interview.switcheo.com/prices.json"
+ );
+ datasource
+ .getPrices()
+ .then((prices) => {
+ setPrices(prices);
+ })
+ .catch((error) => {
+ console.err(error);
+ });
+ }, []);
+
+ const getPriority = (blockchain: any): number => {
+ switch (blockchain) {
+ case "Osmosis":
+ return 100;
+ case "Ethereum":
+ return 50;
+ case "Arbitrum":
+ return 30;
+ case "Zilliqa":
+ return 20;
+ case "Neo":
+ return 20;
+ default:
+ return -99;
+ }
+ };
+
+ const sortedBalances = useMemo(() => {
+ return balances
+ .filter((balance: WalletBalance) => {
+ const balancePriority = getPriority(balance.blockchain);
+ if (lhsPriority > -99) {
+ if (balance.amount <= 0) {
+ return true;
+ }
+ }
+ return false;
+ })
+ .sort((lhs: WalletBalance, rhs: WalletBalance) => {
+ const leftPriority = getPriority(lhs.blockchain);
+ const rightPriority = getPriority(rhs.blockchain);
+ if (leftPriority > rightPriority) {
+ return -1;
+ } else if (rightPriority > leftPriority) {
+ return 1;
+ }
+ });
+ }, [balances, prices]);
+
+ const formattedBalances = sortedBalances.map((balance: WalletBalance) => {
+ return {
+ ...balance,
+ formatted: balance.amount.toFixed(),
+ };
+ });
+
+ const rows = sortedBalances.map(
+ (balance: FormattedWalletBalance, index: number) => {
+ const usdValue = prices[balance.currency] * balance.amount;
+ return (
+
+ );
+ }
+ );
+
+ return {rows}
;
+};
diff --git a/src/problem3/RefactorVersion.tsx b/src/problem3/RefactorVersion.tsx
new file mode 100644
index 0000000000..b5a3a1733e
--- /dev/null
+++ b/src/problem3/RefactorVersion.tsx
@@ -0,0 +1,136 @@
+import React, { useEffect, useState, useMemo, PropsWithChildren } from "react";
+import WalletRow from "./WalletRow";
+import { useWalletBalances } from "./hooks/useWalletBalances";
+import { makeStyles } from "@material-ui/core/styles";
+
+interface WalletBalance {
+ currency: string;
+ amount: number;
+ blockchain: string; // Added blockchain property
+}
+
+interface PricesResponse {
+ currency: string;
+ price: number;
+ date: Date;
+}
+
+interface Props {
+ children?: React.ReactNode;
+}
+
+const useStyles = makeStyles({
+ row: {
+ // Your row styles here
+ },
+});
+
+// Implement the Datasource class so that it can retrieve the prices required.
+class Datasource {
+ url: string;
+
+ constructor(url: string) {
+ this.url = url;
+ }
+
+ async getPrices(): Promise {
+ try {
+ const response = await fetch(this.url);
+ if (!response.ok) {
+ throw new Error("Failed to fetch prices");
+ }
+ return response.json();
+ } catch (error) {
+ throw new Error("Failed to fetch prices: " + error.message);
+ }
+ }
+}
+
+const WalletPage: React.FC = (props: Props) => {
+ const { children, ...rest } = props;
+ const classes = useStyles(); // Using makeStyles to define styles
+ const balances = useWalletBalances();
+ const [prices, setPrices] = useState({});
+
+ useEffect(() => {
+ const datasource = new Datasource(
+ "https://interview.switcheo.com/prices.json"
+ );
+ datasource
+ .getPrices()
+ .then((prices) => setPrices(prices))
+ .catch((error) => console.error(error));
+ }, []);
+
+ /**
+ * The sortedBalances array is sorted based on the priority of each balance's blockchain.
+ * However, the getPriority function is called multiple times during the sorting process, which can be inefficient, especially if the balances array is large.
+ * The priority should ideally be computed once for each balance and stored to avoid redundant calculations.
+ */
+ const sortedBalances = useMemo(() => {
+ const getPriority = (blockchain: string): number => {
+ switch (blockchain) {
+ case "Osmosis":
+ return 100;
+ case "Ethereum":
+ return 50;
+ case "Arbitrum":
+ return 30;
+ case "Zilliqa":
+ case "Neo":
+ return 20;
+ default:
+ return -99;
+ }
+ };
+
+ return balances
+ .filter(
+ (balance: WalletBalance) =>
+ balance.amount <= 0 || getPriority(balance.blockchain) > -99
+ )
+ .sort(
+ (lhs: WalletBalance, rhs: WalletBalance) =>
+ getPriority(rhs.blockchain) - getPriority(lhs.blockchain)
+ );
+ }, [balances]);
+
+ /**
+ * The formattedBalances array is created using map on sortedBalances to add a formatted property to each balance.
+ * However, this information is not directly used in the rendering process.
+ * If the formatted property is not required elsewhere, this step is redundant and adds unnecessary computation.
+ */
+ const rows = useMemo(() => {
+ return sortedBalances.map((balance: WalletBalance, index: number) => {
+ /**
+ * Combine map and sort in a single iteration: Instead of sorting sortedBalances after filtering,
+ * you can combine the filter and sort operations in a single step to avoid looping through the array multiple times.
+ */
+ const formattedAmount = balance.amount.toFixed();
+
+ /**
+ * Since prices is an array of objects, we need to find the correct price object based on the currency before calculating the USD value.
+ */
+ const existedPrice = prices.find(
+ (price: PricesResponse) => price.currency === balance.currency
+ );
+ const usdValue = existedPrice
+ ? existedPrice.price * balance.amount
+ : 0;
+
+ return (
+
+ );
+ });
+ }, [sortedBalances, prices]);
+
+ return {rows}
;
+};
+
+export default WalletPage;