Index: abelrc
===================================================================
--- .babelrc	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,3 +1,0 @@
-{
-    "presets": ["next/babel"]
-}
Index: .gitignore
===================================================================
--- .gitignore	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ .gitignore	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -2,5 +2,5 @@
 
 # dependencies
-node_modules
+/node_modules
 /.pnp
 .pnp.js
@@ -28,9 +28,4 @@
 # local env files
 .env*.local
-.env.local
-.env
-.env.development
-.env.production
-.env.productions
 
 # vercel
Index: README.md
===================================================================
--- README.md	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ README.md	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -1,40 +1,34 @@
-# Caessino
+This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
 
-Firstly, create a .env file in the project's root directory and populate it like so:
+## Getting Started
 
-        HOME_URL="http://localhost:3000"  
-        POSTGRES_HOST="db"  
-        POSTGRES_USER="postgres"  
-        POSTGRES_PASSWORD="postgres"  
-        POSTGRES_DB="postgres"  
-        GOOGLE_EMAIL="YOUR_GOOGLE_EMAIL"  
-        GOOGLE_APP_PASSWORD="YOUR_GOOGLE_APP_PASSWORD"  
-        GOOGLE_CLIENT_ID=YOUR_GOOGLE_CLIENT_ID_OAUTH2  
-        GOOGLE_CLIENT_SECRET=YOUR_GOOGLE_CLIENT_SECRET_OAUTH2  
-        NEXT_SECRET="S0s2l3jzcxVw93sS0s2l3j"  
-        NEXTAUTH_URL="http://localhost:3000/api/auth/"  
+First, run the development server:
 
+```bash
+npm run dev
+# or
+yarn dev
+```
 
-Now, in your console, navigate to the project's root directory and run:
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
 
-        docker-compose up
+You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
 
+[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
 
-===========================================================================
+The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
 
-If you are configuring this project for the first time, do the following, in order to set up the database.
+## Learn More
 
--- Note: The containers should be running in the background! (previously started with docker-compose up)
+To learn more about Next.js, take a look at the following resources:
 
-Open another console and run:
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
 
-        docker exec -it NAME_OF_DATABASE_CONTAINER /bin/bash  
-        psql -U postgres postgres `<` /usr/local/app/caessino.sql  
+You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
 
--- Note: When inserting `<`, it should not be surrounded by quotation marks
+## Deploy on Vercel
 
-===========================================================================
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
 
-Now you are all set up.
-
-Enjoy your stay at Caessino.
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
Index: essino.sql
===================================================================
--- caessino.sql	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,207 +1,0 @@
-DROP TABLE IF EXISTS "public"."admins";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS admins_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."admins" (
-    "id" int4 NOT NULL DEFAULT nextval('admins_id_seq'::regclass),
-    "username" text,
-    "password" text,
-    "salt" text
-);
-
-DROP TABLE IF EXISTS "public"."blackjack";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Table Definition
-CREATE TABLE "public"."blackjack" (
-    "data" text,
-    "identifier" text DEFAULT 'blackjack_data'::text
-);
-
-DROP TABLE IF EXISTS "public"."blackjack_history";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS blackjack_history_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."blackjack_history" (
-    "id" int4 NOT NULL DEFAULT nextval('blackjack_history_id_seq'::regclass),
-    "username" text,
-    "history" text
-);
-
-DROP TABLE IF EXISTS "public"."complaints";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS complaints_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."complaints" (
-    "id" int4 NOT NULL DEFAULT nextval('complaints_id_seq'::regclass),
-    "date" text,
-    "by" text,
-    "description" text,
-    "answered" text,
-    "answer" text
-);
-
-DROP TABLE IF EXISTS "public"."credit_cards";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS credit_cards_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."credit_cards" (
-    "id" int4 NOT NULL DEFAULT nextval('credit_cards_id_seq'::regclass),
-    "username" text,
-    "card_hash" text,
-    "card_salt" text
-);
-
-DROP TABLE IF EXISTS "public"."players";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS players_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."players" (
-    "id" int4 NOT NULL DEFAULT nextval('players_id_seq'::regclass),
-    "username" text NOT NULL,
-    "display_name" text NOT NULL,
-    "credits" float8
-);
-
-DROP TABLE IF EXISTS "public"."poker";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Table Definition
-CREATE TABLE "public"."poker" (
-    "data" text,
-    "identifier" text DEFAULT 'poker_data'::text
-);
-
-DROP TABLE IF EXISTS "public"."poker_history";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS poker_history_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."poker_history" (
-    "id" int4 NOT NULL DEFAULT nextval('poker_history_id_seq'::regclass),
-    "username" text,
-    "history" text
-);
-
-DROP TABLE IF EXISTS "public"."roulette";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Table Definition
-CREATE TABLE "public"."roulette" (
-    "data" text,
-    "identifier" text DEFAULT 'roulette_data'::text
-);
-
-DROP TABLE IF EXISTS "public"."roulette_history";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS roulette_history_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."roulette_history" (
-    "id" int4 NOT NULL DEFAULT nextval('roulette_history_id_seq'::regclass),
-    "username" text,
-    "history" text
-);
-
-DROP TABLE IF EXISTS "public"."sessions";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Table Definition
-CREATE TABLE "public"."sessions" (
-    "data" text,
-    "identifier" text DEFAULT 'sessions_data'::text
-);
-
-DROP TABLE IF EXISTS "public"."stats";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS stats_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."stats" (
-    "id" int4 NOT NULL DEFAULT nextval('stats_id_seq'::regclass),
-    "username" text NOT NULL,
-    "blackjack_games" int8,
-    "roulette_games" int8,
-    "poker_games" int8,
-    "blackjack_won_games" int8,
-    "roulette_won_games" int8,
-    "poker_won_games" int8,
-    "money_bet" int8,
-    "money_earned" int8
-);
-
-DROP TABLE IF EXISTS "public"."users";
--- This script only contains the table creation statements and does not fully represent the table in the database. It's still missing: indices, triggers. Do not use it as a backup.
-
--- Sequence and defined type
-CREATE SEQUENCE IF NOT EXISTS users_id_seq;
-
--- Table Definition
-CREATE TABLE "public"."users" (
-    "id" int4 NOT NULL DEFAULT nextval('users_id_seq'::regclass),
-    "username" text NOT NULL,
-    "password" text NOT NULL,
-    "salt" text NOT NULL,
-    "email" text NOT NULL,
-    "email_activation_id" text NOT NULL,
-    "activated" text NOT NULL
-);
-
-INSERT INTO "public"."admins" ("id", "username", "password", "salt") VALUES
-(1, 'admin', 'c7258f1d118136a210cbd591a5bf03236226d34e6567bdf4ccc780dcd96a722c4a21b3433eb282220d8d4172d99c2ad6a7c7be1d2ab3b20e090cf8d3c799d578', 'fd67bce156239de46b59f05aaed57435');
-
-
-INSERT INTO "public"."blackjack" ("data", "identifier") VALUES
-('[]', 'blackjack_data');
-
-
-
-
-INSERT INTO "public"."complaints" ("id", "date", "by", "description", "answered", "answer") VALUES
-(1, '2022-07-13T19:22:46.631+02:00', 'simon', 'I have a problem with logging in. It says my name is already taken.', 'true', 'Unfortunately, that means that someone else has already registered with that username before you. Please choose a different a username.');
-
-
-
-
-
-
-INSERT INTO "public"."poker" ("data", "identifier") VALUES
-('[]', 'poker_data');
-
-
-
-
-INSERT INTO "public"."roulette" ("data", "identifier") VALUES
-('{}', 'roulette_data');
-
-
-
-
-INSERT INTO "public"."sessions" ("data", "identifier") VALUES
-('[]', 'sessions_data');
-
-
-
-
-
Index: mponents/Alert.jsx
===================================================================
--- components/Alert.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,45 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import { HiOutlineArrowNarrowRight } from 'react-icons/hi'
-
-import axios from 'axios'
-
-import { setStyle } from '../redux/reducers/styleSlice'
-
-const Alert = ({ onTop = false }) => {
-    const styleState = useSelector(state => state.style)
-
-    const dispatch = useDispatch()
-
-    const display = styleState?.style?.alert?.show ? 'flex' : 'none'
-
-    function clicked() {
-        if (styleState.style.alert.button.action === 'play_again') {
-            axios.get(`/api/blackjack?action=play_again&session_id=${localStorage.CAESSINO_SESSION_ID}`);
-        }
-        else if (styleState.style.alert.button.action === 'continue_from_side_bet') {
-            axios.get(`/api/blackjack?action=continue_from_side_bet&session_id=${localStorage.CAESSINO_SESSION_ID}`);
-        }
-        else {
-            dispatch(setStyle({
-                ...styleState.style,
-                alert: {
-                    ...styleState.style.alert,
-                    show: false
-                }
-            }))
-        }
-    }
-
-    return (
-        <div className="alert" style={{display: display, top: `${onTop ? '35vh' : '50vh'}`}}>
-            <h1>{styleState.style.alert.title}</h1>
-            <h3>{styleState.style.alert.subtitle}</h3>
-            <button className='primaryButton' onClick={() => clicked()}>{styleState.style.alert.button.text} <HiOutlineArrowNarrowRight style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-        </div>
-    )
-}
-
-export default Alert
Index: mponents/Card.jsx
===================================================================
--- components/Card.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,13 +1,0 @@
-import React from 'react'
-
-const Card = ( { card, pos, rotateZ } ) => {
-    const src = `/cards/${card}.png`;
-
-    return (
-      <div className="card" style={{backgroundImage: `url("${src}")`, left: `${pos?.left}vw`, top: `${pos?.top}vh`, transform: `translate(-50%, -50%) rotateZ(${rotateZ}deg)`}}>
-        
-      </div>
-    )
-}
-
-export default Card
Index: mponents/Complain.jsx
===================================================================
--- components/Complain.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,113 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import { useRef } from 'react'
-
-import { setStyle } from '../redux/reducers/styleSlice';
-
-import axios from 'axios';
-
-const ComplainScreen = () => {
-    const ref = useRef(null);
-
-    const dispatch = useDispatch();
-
-    const styleState = useSelector(state => state.style);
-
-    setTimeout(() => {
-        if (styleState.style.displayComplainScreen && styleState.style.complainScreenInfo.setFocus) {
-            ref.current.focus();
-            dispatch(setStyle({
-                ...styleState.style,
-                complainScreenInfo: {
-                    ...styleState.style.complainScreenInfo,
-                    setFocus: false
-                }
-            }))
-        }
-    }, 10);
-
-    function onChangeDescription(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            complainScreenInfo: {
-                ...styleState.style.complainScreenInfo,
-                description: e.target.value,
-            }
-        }))
-    }
-
-    function keyUp(e) {
-        if (e.key === 'Enter') {
-            complain();
-        }
-    }
-
-    function closeForm() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayComplainScreen: false,
-            complainScreenInfo: {
-                description: '',
-            },
-            inlineAlertText: '',
-        }));
-
-    }
-    function complain() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }))
-
-        axios.post(`/api/postgre`, {
-            action: 'complain',
-            session_id: localStorage.CAESSINO_SESSION_ID,
-            description: styleState.style.complainScreenInfo.description,
-        })
-            .then(res => {
-                if (res.data?.success) {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayLoadingScreen: false,
-                        displayComplainScreen: false,
-                        complainScreenInfo: {
-                            description: '',
-                        },
-                        notification: {
-                            show: true,
-                            text: 'Complain sent successfully',
-                            status: 'success',
-                        },
-                        inlineAlertText: '',
-                    }));
-                }
-                else {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayComplainScreen: true,
-                        inlineAlertText: res.data?.message,
-                    }));
-                }
-            })
-    }
-
-    return (
-        <div className="fullscreen fs-centered complainScreen" style={{display: styleState.style.displayComplainScreen ? 'block' : 'none'}}>
-            <div className="fs-inputs-container">
-                {styleState.style.inlineAlertText.length > 0 && <span className="inlineAlert">{styleState.style.inlineAlertText}</span>}
-                <div>
-                    <span>Describe the problem:</span>
-                    <textarea ref={ref} type="text" onChange={(e) => {onChangeDescription(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.complainScreenInfo.description} placeholder="I have a problem with..."/>
-                    <div style={{width: '100%', display: 'flex', flexDirection: 'row', justifyContent: 'space-between'}}>
-                        <button className="primaryButton" onClick={() => closeForm()}>Close Form</button>
-                        <button className="secondaryButton" onClick={() => complain()}>Send Complaint</button>
-                    </div>
-                </div>
-            </div>
-        </div>
-    )
-}
-
-export default ComplainScreen
Index: mponents/FreeflowCard.jsx
===================================================================
--- components/FreeflowCard.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,13 +1,0 @@
-import React from 'react'
-
-const FreeflowCard = ( { card } ) => {
-    const src = `/cards/${card}.png`;
-
-    return (
-      <div className="card" style={{backgroundImage: `url("${src}")`}}>
-        
-      </div>
-    )
-}
-
-export default FreeflowCard
Index: mponents/FullwidthText.jsx
===================================================================
--- components/FullwidthText.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,16 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const FullwidthText = ({title, subtitle}) => {
-  const playerState = useSelector(state => state.player);
-
-  return (
-    <div className="fullwidthText">
-      <h1>{title}, {playerState.player.displayName}</h1>
-      <h3>{subtitle}</h3>
-   </div>
-  )
-}
-
-export default FullwidthText
Index: mponents/GameCircle.jsx
===================================================================
--- components/GameCircle.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,41 +1,0 @@
-import React from 'react'
-
-import { ArcText } from '@arctext/react'
-
-import { useRouter } from 'next/router'
-
-const GameCircle = ( { src, text, routeTo, game } ) => {
-  const router = useRouter()
-
-  function clicked() {
-    router.push(routeTo)
-  }
-
-  return (
-    <div className="gameCircle" onClick={() => clicked()}>
-        <div className="circleLarge">
-            <div className="circle" style={{backgroundImage: `url('${src}')`}}>
-
-            </div>
-        </div>
-        <h3>
-            <ArcText
-                text={text}
-                upsideDown
-                width={600}
-                characterWidth={4.8}
-                style={{color: 'white',
-                        position: 'relative',
-                        transform: 'rotateZ(180deg) scaleX(-1)',
-                        marginTop: '30px',
-                        fontSize: '1.6rem',
-                        color: '#FFD700',
-                        fontWeight: 'bold'
-                }}
-            />
-        </h3>
-    </div>
-  )
-}
-
-export default GameCircle
Index: mponents/GamesHistory.jsx
===================================================================
--- components/GamesHistory.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,135 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import { setStyle } from '../redux/reducers/styleSlice';
-import FreeflowCard from './FreeflowCard';
-import Calculations from './admin/Calculations';
-
-const GamesHistory = () => {
-  const dispatch = useDispatch();
-
-  const styleState = useSelector(state => state.style);
-  
-  function hideGamesHistoryScreen() {
-    dispatch(setStyle({
-      ...styleState.style,
-        displayGamesHistoryScreen: false,
-    }))
-  }
-
-  if (styleState.style.displayGamesHistoryScreen) {
-    return (
-        <div className="fullscreen top-to-bottom-centered gamesHistoryScreen">
-            <div>
-                <p className="link" onClick={() => hideGamesHistoryScreen()}>⬅ Go Back</p>
-
-                <h3>These are all the games you&apos;ve played.</h3>
-
-                <div className="liveGamesMegaContainer">
-                <div className="liveBlackjackGames liveGamesContainer">
-                    <h3>Blackjack Games:</h3>
-                    { styleState.style.gamesHistory.blackjack?.rooms?.map((room, roomIdx) => (
-                    <div key={room.id + roomIdx} className="liveBlackjackGame">
-                        <div>
-                        <div>
-                            { room?.playerCards?.map((card, i) => (
-                            <FreeflowCard key={`playercard${i}`} card={card}/>
-                            ))}
-                            <h5><Calculations action="calculateHandValue" cards={room.playerCards}/></h5>
-                        </div>
-                        <p>Player {room?.displayName} (${parseInt(room.initialBet) + parseInt(room.sideBet)})</p>
-                        </div>
-                        <div>
-                        <div>
-                            <h6><span>Played on:<br/>{room.finished}</span></h6>
-                            { room?.outcome?.lenght > 0 && <h6><span>Outcome:</span><br/>{room.outcome}</h6> }
-                            { room?.sideBetOutcome.lenght > 0 && <h6><span>Side Bet Outcome:</span><br/>{room.sideBetOutcome}</h6> }
-                        </div>
-                        </div>
-                        <div>
-                        <div>
-                            <h5><Calculations action="calculateHandValue" cards={room.dealerCards}/></h5>
-                            { room?.dealerCards?.map((card, i) => (
-                            <FreeflowCard key={`dealercard${i}`} card={card}/>
-                            ))}
-                        </div>
-                        <p>Dealer {room.dealerName}</p>
-                        </div>
-                    </div>
-                    )) }
-                </div>
-
-                <div className="liveRouletteGame liveGamesContainer">
-                    <h3>Roulette Games:</h3>
-                    { styleState.style.gamesHistory.roulette?.games?.map((game, gameIdx) => (
-                        <div key={`roulettegame${gameIdx}`}>
-                            <h6>
-                                <span>Played on: {game?.finished}</span><br/>
-                                <span>Ball on number: </span>{game?.magicNumber}&nbsp;&nbsp;&nbsp;&nbsp;
-                                <span>Winning bets: </span>{game?.winningBets?.join(", ")}
-                            </h6>
-                            <h6 style={{marginTop: '2rem'}}><span>Players:</span></h6>
-                            { game?.players?.map((player, i) => (
-                                <div key={player.session_id} className="playerInLiveRouletteGame">
-                                <div>
-                                    <h6><span>Player {i+1} -&gt;</span></h6>
-                                </div>
-                                <div>
-                                    <h6><span>{player.name} (</span>${player.betAmount}<span>)</span></h6>
-                                </div>
-                                <div>
-                                    <h6><span>Betted on: </span>{player.whichBets.join(", ")}</h6>
-                                </div>
-                                <div>
-                                    <h6><span>Outcome: </span>{player.outcome}</h6>
-                                </div>
-                                </div>
-                            )) }
-                        </div>
-                    )) }
-                </div>
-
-                <div className="livePokerGames liveGamesContainer">
-                    <h3>Poker Games:</h3>
-                    { styleState.style.gamesHistory.poker?.tables?.map(table => (
-                    <div key={table.id} className="livePokerGame">
-                        <h6>
-                        <span>Played on: {table?.finished}</span><br/>
-                        <span>Pot: </span>${table?.pot}&nbsp;&nbsp;&nbsp;&nbsp;
-                        <span>Winners: </span>{table?.winners?.map(e=>e?.displayName)?.join(", ")}
-                        </h6>
-                        <div className="cardsOnTable" style={{marginTop: '2rem'}}>
-                        { table?.cards?.map((card, i) => (
-                            <FreeflowCard key={`tablecard${i}`} card={card}/>
-                        ))}
-                        </div>
-                        <h6 style={{marginTop: '2rem'}}><span>Players:</span></h6>
-                        {table.players?.map(player => (
-                        <div key={player.id} className="playerInLivePokerGame">
-                            <div>
-                            <h6><span>Player {player?.displayName} (</span>${player.betAmount}<span>)</span></h6>
-                            </div>
-                            <div className="cards">
-                            { player?.cards?.map((card, i) => (
-                                <FreeflowCard key={`playercard${i}`} card={card}/>
-                            ))}
-                            </div>
-                            <div>
-                            <h6><span>Hand: </span><Calculations action="getBestHandDetails" cards={player.cards} cards2={table.cards}/></h6>
-                            </div>
-                        </div>
-                        ))}
-                    </div>
-                    )) }
-                </div>
-                </div>
-            </div>
-        </div>
-    )}
-    else {
-        return <></>
-    }
-}
-
-export default GamesHistory
Index: mponents/Header.jsx
===================================================================
--- components/Header.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,211 +1,0 @@
-import React from 'react'
-
-import Link from 'next/link'
-
-import { useEffect } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-
-import { setPlayer } from '../redux/reducers/playerSlice'
-import { setStyle } from '../redux/reducers/styleSlice'
-
-import axios from 'axios';
-
-import { signOut, useSession } from 'next-auth/react';
-
-const Header = () => {
-  const { data: googleSession } = useSession();
-
-  useEffect(() => {
-    if (googleSession && (!localStorage.CAESSINO_SESSION_ID || localStorage.CAESSINO_SESSION_ID === "")) {
-      axios.post(`/api/postgre`, {
-        action: 'login_via_google',
-        googleSession: googleSession,
-      })
-        .then(res => {
-          if (res.data?.success) {
-            localStorage.CAESSINO_SESSION_ID = res.data?.session?.id;
-
-            dispatch(setPlayer({
-                ...playerState.player,
-                username: res.data?.session?.username,
-                displayName: res.data?.session?.displayName,
-                credits: res.data?.session.credits,
-                session_id: res.data?.session?.id,
-            }));
-
-            dispatch(setStyle({
-                ...styleState.style,
-                displayLoadingScreen: false,
-                displayLoginScreen: false,
-                loginScreenInfo: {
-                    username: '',
-                    password: '',
-                },
-                notification: {
-                    show: true,
-                    text: 'Successfully logged in.',
-                    status: 'success',
-                },
-                inlineAlertText: '',
-            }));
-          }
-      });
-    }
-  }, [googleSession])
-
-
-  const dispatch = useDispatch();
-
-  const playerState = useSelector(state => state.player);
-  const styleState = useSelector(state => state.style);
-
-  function register() {
-    dispatch(setStyle({
-      ...styleState.style,
-      displayRegisterScreen: true,
-      registerScreenInfo: {
-        ...styleState.style.registerScreenInfo,
-        setFocus: true
-      }
-    }))
-  }
-
-  function login() {
-    dispatch(setStyle({
-      ...styleState.style,
-      displayLoginScreen: true,
-      loginScreenInfo: {
-        ...styleState.style.loginScreenInfo,
-        setFocus: true
-      }
-    }))
-  }
-
-  function logout() {
-    axios.get(`/api/postgre?action=logout&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-      if (res.data?.success) {
-        localStorage.removeItem('CAESSINO_SESSION_ID');
-        dispatch(setPlayer({
-          displayName: '',
-          username: '',
-          session_id: '',
-          room_id: '',
-          credits: 0,
-        }))
-        signOut();
-      }
-    })
-  }
-
-  function complain() {
-    dispatch(setStyle({
-      ...styleState.style,
-      displayComplainScreen: true,
-    }))
-  }
-
-  function showStats() {
-    axios.get(`/api/postgre?action=get_stats&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-      if (res.data?.success) {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayStatsScreen: true,
-            statsScreenInfo: {
-                money: {
-                    ...styleState.style.statsScreenInfo.money,
-                    earned: res.data.stats.money_earned,
-                },
-                blackjack: {
-                    ...styleState.style.statsScreenInfo.blackjack,
-                    wins: res.data.stats.blackjack_won_games,
-                },
-                roulette: {
-                    ...styleState.style.statsScreenInfo.roulette,
-                    wins: res.data.stats.roulette_won_games,
-                },
-                poker: {
-                    ...styleState.style.statsScreenInfo.poker,
-                    wins: res.data.stats.poker_won_games,
-                }                            
-            }
-        }))
-      }
-    })
-  }
-
-  function manageCredits() {
-    dispatch(setStyle({
-      ...styleState.style,
-      displayManageCreditsScreen: true,
-      displayDepositModal: false,
-      displayWithdrawModal: false,
-    }))
-  }
-
-  useEffect(() => {
-    if (playerState.player.displayName === '') {
-      dispatch(setStyle({
-        ...styleState.style,
-        displayLoadingScreen: true
-      }));
-
-      let success = false;
-
-      if (localStorage?.CAESSINO_SESSION_ID && localStorage.CAESSINO_SESSION_ID.length > 0) {
-        axios.get(`/api/postgre?action=check_if_logged_in&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-          if (res.data?.success) {
-            success = true;
-
-            dispatch(setPlayer({
-              ...playerState.player,
-              displayName: res.data?.displayName,
-              username: res.data?.username,
-              session_id: res.data?.session_id,
-              credits: res.data?.credits,
-            }));
-          }
-        });
-      }
-
-      if (!success) {
-        dispatch(setPlayer({
-          ...playerState.player,
-          displayName: 'Guest',
-        }))
-        dispatch(setStyle({
-          ...styleState.style,
-          displayLoadingScreen: false,
-        }))
-      }
-    }
-  }, [dispatch, playerState.player, styleState.style]);
-
-  return (
-    <header className="header">
-      <Link href="/" passHref>
-        <div className="logo">
-          
-        </div>
-      </Link>
-      <nav className='mainHeaderNavigation'>
-          <ul>
-            {playerState.player.displayName === '' || playerState.player.displayName === 'Guest' ? (
-              <>
-                <li onClick={() => {register()}}>Register</li>
-                <li onClick={() => {login()}}>Login</li>
-              </>
-            ) : (
-              <>
-                <li onClick={() => {manageCredits()}}>Manage Credits</li>
-                <li onClick={() => {showStats()}}>Statistics</li>
-                <li onClick={() => {complain()}}>Complain</li>
-                <li onClick={() => {logout()}}>Logout</li>
-              </>
-            )}
-          </ul>
-      </nav>
-  </header>
-  )
-}
-
-export default Header
Index: mponents/Loading.jsx
===================================================================
--- components/Loading.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,17 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const Loading = () => {
-    const styleState = useSelector(state => state.style);
-    
-    return (
-        <div className="fullscreen fs-centered loadingScreen" style={{display: styleState.style.displayLoadingScreen ? 'block' : 'none', zIndex: 10}}>
-            <div>
-                <h1>Loading...</h1>
-            </div>
-        </div>
-    )
-}
-
-export default Loading
Index: mponents/LoginScreen.jsx
===================================================================
--- components/LoginScreen.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,158 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import { useRef } from 'react'
-
-import { setPlayer } from '../redux/reducers/playerSlice';
-import { setStyle } from '../redux/reducers/styleSlice';
-
-import { FcGoogle } from 'react-icons/fc';
-import { signIn } from 'next-auth/react';
-
-import axios from 'axios';
-
-const LoginScreen = () => {
-    const ref = useRef(null);
-
-    const dispatch = useDispatch();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    setTimeout(() => {
-        if (styleState.style.displayLoginScreen && styleState.style.loginScreenInfo.setFocus) {
-            ref.current.focus();
-            dispatch(setStyle({
-                ...styleState.style,
-                loginScreenInfo: {
-                    ...styleState.style.loginScreenInfo,
-                    setFocus: false
-                }
-            }))
-        }
-    }, 10);
-
-    function onChangeUsername(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            loginScreenInfo: {
-                ...styleState.style.loginScreenInfo,
-                username: e.target.value,
-            }
-        }))
-    }
-
-    function onChangePassword(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            loginScreenInfo: {
-                ...styleState.style.loginScreenInfo,
-                password: e.target.value,
-            }
-        }))
-    }
-
-    function keyUp(e) {
-        if (e.key === 'Enter') {
-            login();
-        }
-    }
-
-    function closeForm() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoginScreen: false,
-            loginScreenInfo: {
-                username: '',
-                password: '',
-            },
-            inlineAlertText: '',
-        }));
-
-    }
-    function login() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }))
-
-        axios.post(`/api/postgre`, {
-            action: 'login',
-            username: styleState.style.loginScreenInfo.username,
-            password: styleState.style.loginScreenInfo.password,
-        })
-            .then(res => {
-                if (res.data?.success) {
-                    localStorage.CAESSINO_SESSION_ID = res.data?.session?.id;
-
-                    dispatch(setPlayer({
-                        ...playerState.player,
-                        username: res.data?.session?.username,
-                        displayName: res.data?.session?.displayName,
-                        credits: res.data?.session.credits,
-                        session_id: res.data?.session?.id,
-                    }));
-
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayLoadingScreen: false,
-                        displayLoginScreen: false,
-                        loginScreenInfo: {
-                            username: '',
-                            password: '',
-                        },
-                        notification: {
-                            show: true,
-                            text: 'Successfully logged in.',
-                            status: 'success',
-                        },
-                        inlineAlertText: '',
-                    }));
-                }
-                else {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayLoginScreen: true,
-                        inlineAlertText: res.data?.message,
-                    }));
-                }
-            })
-    }
-
-    function checkForLink(e) {
-        if (e.target.innerHTML.includes('Register')) {
-            dispatch(setStyle({
-                ...styleState.style,
-                displayRegisterScreen: true,
-                displayLoginScreen: false,
-                loginScreenInfo: {
-                    username: '',
-                    password: '',
-                },
-                inlineAlertText: '',
-            }));
-        }
-    }
-
-    return (
-        <div className="fullscreen fs-centered loginScreen" style={{display: styleState.style.displayLoginScreen ? 'block' : 'none'}}>
-            <div className="fs-inputs-container">
-                {styleState.style.inlineAlertText.length > 0 && <span className="inlineAlert" onClick={(e) => checkForLink(e)}>{styleState.style.inlineAlertText}</span>}
-                <div>
-                    <span>Username:</span>
-                    <input ref={ref} type="text" onChange={(e) => {onChangeUsername(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.loginScreenInfo.username} placeholder="johndoe"/>
-                    <span>Password:</span>
-                    <input type="password" onChange={(e) => {onChangePassword(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.loginScreenInfo.password} placeholder="****************"/>
-                    <div style={{width: '100%', display: 'flex', flexDirection: 'row', justifyContent: 'space-between'}}>
-                        <button className="primaryButton" onClick={() => closeForm()}>Close Form</button>
-                        <button className="secondaryButton" onClick={() => login()}>Log In</button>
-                    </div>
-                    <button onClick={() => signIn()} className="primaryButton" style={{marginTop: '10rem', color: '#eee', padding: '.6rem 2rem'}}><FcGoogle style={{padding: '.2rem', background: '#eee', borderRadius: '50%', fontSize: '2rem', marginBottom: '-.4rem'}}/> Log In With Google</button>
-                </div>
-            </div>
-        </div>
-    )
-}
-
-export default LoginScreen
Index: mponents/LostConnection.jsx
===================================================================
--- components/LostConnection.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,19 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const LostConnection = () => {
-    const styleState = useSelector(state => state.style);
-    
-    return (
-        <div className="fullscreen fs-centered lostConnectionScreen" style={{display: styleState.style.lostConnectionInfo.show ? 'block' : 'none', zIndex: 100}}>
-            <div>
-                <h3>Lost connection to the server.</h3>
-                <h3>This is a server error. Nothing you can do.</h3>
-                <h3>{styleState.style.lostConnectionInfo.message}</h3>
-            </div>
-        </div>
-    )
-}
-
-export default LostConnection
Index: mponents/ManageCredits.jsx
===================================================================
--- components/ManageCredits.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,211 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-import { setStyle } from '../redux/reducers/styleSlice';
-
-import { AiOutlineClose } from 'react-icons/ai';
-import { setPlayer } from '../redux/reducers/playerSlice';
-
-import axios from 'axios';
-
-const ManageCredits = () => {
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    const dispatch = useDispatch();
-
-    function close(action = '') {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayManageCreditsScreen: false,
-            displayDepositModal: false,
-            displayWithdrawModal: false,
-            depositModalInputs: {
-                name: '',
-                card: '',
-                expire: '',
-                ccv: '',
-                amount: '',
-            },
-            displayWithdrawModal: false,
-            withdrawModalInputs: {
-                citibank: '',
-                iban: '',
-                bic: '',
-                beneficiary: '',
-                address: '',
-                amount: '',
-            },
-            inlineAlertText: '',
-            notification: action === 'deposit' ? {
-                show: true,
-                text: `Deposited $${styleState.style.depositModalInputs.amount} successfully`,
-                status: 'success',
-            } : action === 'withdraw' ? {
-                show: true,
-                text: `Withdrew $${Math.min(styleState.style.withdrawModalInputs.amount, playerState.player.credits)} successfully`,
-                status: 'success',
-            } : {
-                show: false,
-                text: '',
-                status: ''
-            },
-        }))
-    }
-
-    
-    function openDepositModal() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayDepositModal: true,
-            displayWithdrawModal: false,
-            inlineAlertText: '',
-        }))
-    }
-
-    function openWithdrawModal() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayDepositModal: false,
-            displayWithdrawModal: true,
-            inlineAlertText: '',
-        }))
-    }
-
-    function buyCredits() {
-        axios.post(`/api/postgre`, {
-            action: 'deposit',
-            session_id: localStorage.CAESSINO_SESSION_ID,
-            data: styleState.style.depositModalInputs
-        })
-            .then(res => {
-                if (res.data?.success) {
-                    dispatch(setPlayer({
-                        ...playerState.player,
-                        credits: res.data.credits,
-                    }))
-
-                    close('deposit');
-                }
-                else {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayManageCreditsScreen: true,
-                        inlineAlertText: res.data?.message,
-                    }));
-                }
-            })
-    }
-
-    function sellCredits() {
-        axios.post(`/api/postgre`, {
-            action: 'withdraw',
-            session_id: localStorage.CAESSINO_SESSION_ID,
-            data: styleState.style.withdrawModalInputs
-        })
-            .then(res => {
-                if (res.data?.success) {
-                    dispatch(setPlayer({
-                        ...playerState.player,
-                        credits: res.data.credits,
-                    }))
-
-                    close('withdraw');
-                }
-                else {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayManageCreditsScreen: true,
-                        inlineAlertText: res.data?.message,
-                    }));
-                }
-            })
-    }
-
-    return (
-        <div className="fullscreen fs-centered manageCreditsScreen" style={{display: styleState.style.displayManageCreditsScreen ? 'block' : 'none'}}>
-            <AiOutlineClose onClick={() => close()} style={{position: 'absolute', top: '20px', right: '20px'}}/>
-            <div>
-                <div>
-                    <h2>Manage (In-Game) Credits:</h2>
-                    <p>You currently have: ${playerState.player.credits}</p>
-                </div>
-                <div className="main">
-                    <div>
-                        { styleState.style.displayDepositModal && styleState.style.inlineAlertText.length > 0 && <span className="inlineAlert">{styleState.style.inlineAlertText}</span>}
-                        { !styleState.style.displayDepositModal && <button className="primaryButton" onClick={() => openDepositModal()}>Deposit From Credit Card<br/><span>Buy (In-Game) Credits</span></button> }
-                        { styleState.style.displayDepositModal && (
-                            <div className="fs-inputs-container">
-                                <div>
-                                    <label>Name and Surname</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeDeposit(e, 'name')}} value={styleState.style.depositModalInputs.name} placeholder="John Doe"/>
-                                    <label>Card Number</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeDeposit(e, 'card')}} value={styleState.style.depositModalInputs.card} placeholder="2333 9298 9821 1111"/>
-                                    <label>Expire Date</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeDeposit(e, 'expire')}} value={styleState.style.depositModalInputs.expire} placeholder="07/24"/>
-                                    <label>CCV</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeDeposit(e, 'ccv')}} value={styleState.style.depositModalInputs.ccv} placeholder="337"/>
-                                    <label><span>Amount</span></label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeDeposit(e, 'amount')}} value={styleState.style.depositModalInputs.amount} placeholder="500"/>
-                                    <button className="primaryButton" onClick={() => buyCredits()}>Deposit</button>
-                                </div>
-                            </div>
-                        )}
-                    </div>
-                    <div>
-                        { styleState.style.displayWithdrawModal && styleState.style.inlineAlertText.length > 0 && <span className="inlineAlert">{styleState.style.inlineAlertText}</span>}
-                        { !styleState.style.displayWithdrawModal && <button className="primaryButton" onClick={() => openWithdrawModal()}>Withdraw To Personal Account<br/><span>Sell (In-Game) Credits</span></button> }
-                        { styleState.style.displayWithdrawModal && (
-                            <div className="fs-inputs-container">
-                                <div>
-                                    <label>Bank name</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeWithdraw(e, 'citibank')}} value={styleState.style.withdrawModalInputs.citibank} placeholder="Swedbank"/>
-                                    <label>IBAN</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeWithdraw(e, 'iban')}} value={styleState.style.withdrawModalInputs.iban} placeholder="SE45 5000 0000 0583 9825 7466"/>
-                                    <label>BIC</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeWithdraw(e, 'bic')}} value={styleState.style.withdrawModalInputs.bic} placeholder="SWEDSESSXXX"/>
-                                    <label>Beneficiary Name</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeWithdraw(e, 'beneficiary')}} value={styleState.style.withdrawModalInputs.beneficiary} placeholder="John Doe"/>
-                                    <label>Bank Address</label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeWithdraw(e, 'address')}} value={styleState.style.withdrawModalInputs.address} placeholder="Landsvägen 40, Sundbyberg"/>
-                                    <label><span>Amount</span></label>
-                                    <input type="text" className="primaryInput" onChange={(e) => {onChangeWithdraw(e, 'amount')}} value={styleState.style.withdrawModalInputs.amount} placeholder="500"/>
-                                    <button className="primaryButton" onClick={() => sellCredits()}>Withdraw</button>
-                                </div>
-                            </div>
-                        )}
-                    </div>
-                </div>
-            </div>
-        </div>
-    )
-
-    function onChangeDeposit(e, what) {
-        dispatch(setStyle({
-            ...styleState.style,
-            depositModalInputs: {
-                name: what === 'name' ? e.target.value : styleState.style.depositModalInputs.name,
-                card: what === 'card' ? e.target.value : styleState.style.depositModalInputs.card,
-                expire: what === 'expire' ? e.target.value : styleState.style.depositModalInputs.expire,
-                ccv: what === 'ccv' ? e.target.value : styleState.style.depositModalInputs.ccv,
-                amount: what === 'amount' ? e.target.value : styleState.style.depositModalInputs.amount,
-            }
-        }))
-    }
-
-    function onChangeWithdraw(e, what) {
-        dispatch(setStyle({
-            ...styleState.style,
-            withdrawModalInputs: {
-                citibank: what === 'citibank' ? e.target.value : styleState.style.depositModalInputs.citibank,
-                iban: what === 'iban' ? e.target.value : styleState.style.depositModalInputs.iban,
-                bic: what === 'bic' ? e.target.value : styleState.style.depositModalInputs.bic,
-                beneficiary: what === 'beneficiary' ? e.target.value : styleState.style.depositModalInputs.beneficiary,
-                address: what === 'address' ? e.target.value : styleState.style.depositModalInputs.address,
-                amount: what === 'amount' ? e.target.value : styleState.style.depositModalInputs.amount,
-            }
-        }))
-    }
-}
-
-export default ManageCredits
Index: mponents/Notification.jsx
===================================================================
--- components/Notification.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,48 +1,0 @@
-import React from 'react'
-
-import { AiOutlineClose } from 'react-icons/ai';
-
-import { useState } from 'react';
-
-import { useDispatch, useSelector } from 'react-redux';
-import { setStyle } from '../redux/reducers/styleSlice';
-
-const Notification = () => {
-    const [timeoutIsSet, setTimeoutIsSet] = useState(false);
-
-    const styleState = useSelector(state => state.style);
-
-    const dispatch = useDispatch();
-
-    const display = styleState.style.notification.show === true ? 'flex' : 'none';
-    const bg = styleState.style.notification.status === 'success' ? 'rgba(0, 200, 255, 0.8)' : 'rgba(255, 0, 0, 0.8)';
-
-    function close() {
-        dispatch(setStyle({
-            ...styleState.style,
-            notification: {
-                ...styleState.style.notification,
-                show: false,
-            }
-        }))
-    }
-
-    if (styleState.style.notification.show === true && !timeoutIsSet) {
-        setTimeoutIsSet(true);
-        setTimeout(() => {
-            close();
-            setTimeoutIsSet(false);
-        }, 3000);
-    }
-
-    return (
-        <div className="notification" style={{display: display, backgroundColor: bg}}>
-            <AiOutlineClose onClick={() => close()}/>
-            <div>
-                {styleState.style.notification.text}
-            </div>
-        </div>
-    )
-}
-
-export default Notification
Index: mponents/RegisterScreen.jsx
===================================================================
--- components/RegisterScreen.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,161 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import { useRef } from 'react'
-
-import { setStyle } from '../redux/reducers/styleSlice';
-
-import axios from 'axios';
-
-const RegisterScreen = () => {
-    const ref = useRef(null);
-
-    const dispatch = useDispatch();
-
-    const styleState = useSelector(state => state.style);
-
-    setTimeout(() => {
-        if (styleState.style.displayRegisterScreen && styleState.style.registerScreenInfo.setFocus) {
-            ref.current.focus();
-            dispatch(setStyle({
-                ...styleState.style,
-                registerScreenInfo: {
-                    ...styleState.style.registerScreenInfo,
-                    setFocus: false
-                }
-            }))
-        }
-    }, 10);
-
-    function onChangeEmail(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            registerScreenInfo: {
-                ...styleState.style.registerScreenInfo,
-                email: e.target.value,
-            }
-        }))
-    }
-
-    function onChangeUsername(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            registerScreenInfo: {
-                ...styleState.style.registerScreenInfo,
-                username: e.target.value,
-            }
-        }))
-    }
-
-    function onChangeDisplayName(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            registerScreenInfo: {
-                ...styleState.style.registerScreenInfo,
-                displayName: e.target.value,
-            }
-        }))
-    }
-
-    function onChangePassword(e) {
-        dispatch(setStyle({
-            ...styleState.style,
-            registerScreenInfo: {
-                ...styleState.style.registerScreenInfo,
-                password: e.target.value,
-            }
-        }))
-    }
-
-    function keyUp(e) {
-        if (e.key === 'Enter') {
-            register();
-        }
-    }
-
-    function closeForm() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayRegisterScreen: false,
-            registerScreenInfo: {
-                username: '',
-                displayName: '',
-                password: '',
-            },
-            inlineAlertText: '',
-        }));
-    }
-
-    function register() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }))
-
-        axios.post('/api/postgre', {
-            action: 'register',
-            email: styleState.style.registerScreenInfo.email,
-            username: styleState.style.registerScreenInfo.username,
-            displayName: styleState.style.registerScreenInfo.displayName,
-            password: styleState.style.registerScreenInfo.password,
-        })
-            .then(res => {
-                if (res.data?.success) {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayRegisterScreen: false,
-                    }));
-
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayLoadingScreen: false,
-                        displayRegisterScreen: false,
-                        displayLoginScreen: true,
-                        registerScreenInfo: {
-                            username: '',
-                            displayName: '',
-                            password: '',
-                        },
-                        notification: {
-                            show: true,
-                            text: 'Successfully registered! Please check your email and activate your account.',
-                            status: 'success',
-                        },
-                        inlineAlertText: '',
-                    }));
-                }
-                else {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        displayRegisterScreen: true,
-                        inlineAlertText: res.data?.message,
-                    }));
-                }
-            })
-    }
-
-    return (
-        <div className="fullscreen fs-centered registerScreen" style={{display: styleState.style.displayRegisterScreen ? 'block' : 'none'}}>
-            <div className="fs-inputs-container">
-                {styleState.style.inlineAlertText.length > 0 && <span className="inlineAlert">{styleState.style.inlineAlertText}</span>}
-                <div>
-                    <span>Email:</span>
-                    <input ref={ref} type="text" onChange={(e) => {onChangeEmail(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.registerScreenInfo.email} placeholder="john.doe@gmail.com"/>
-                    <span>Username:</span>
-                    <input type="text" onChange={(e) => {onChangeUsername(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.registerScreenInfo.username} placeholder="johndoe"/>
-                    <span>Display Name:</span>
-                    <input type="text" onChange={(e) => {onChangeDisplayName(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.registerScreenInfo.displayName} placeholder="John Doe"/>
-                    <span>Password:</span>
-                    <input type="password" onChange={(e) => {onChangePassword(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.style.registerScreenInfo.password} placeholder="***************"/>
-                    <div style={{width: '100%', display: 'flex', flexDirection: 'row', justifyContent: 'space-between'}}>
-                        <button className="primaryButton" onClick={() => closeForm()}>Close Form</button>
-                        <button className="secondaryButton" onClick={() => register()}>Register</button>
-                    </div>
-                </div>
-            </div>
-        </div>
-    )
-}
-
-export default RegisterScreen
Index: mponents/Stats.jsx
===================================================================
--- components/Stats.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,60 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-import { setStyle } from '../redux/reducers/styleSlice';
-
-import { AiOutlineClose } from 'react-icons/ai';
-
-import axios from 'axios';
-
-const Stats = () => {
-    const styleState = useSelector(state => state.style);
-
-    const dispatch = useDispatch();
-
-    function close() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayStatsScreen: false,
-        }))
-    }
-
-    function openHistory() {
-        axios.get(`/api/postgre?action=get_games_history&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-            if (res.data?.success) {
-                dispatch(setStyle({
-                    ...styleState.style,
-                    gamesHistory: {
-                        blackjack: {
-                            rooms: res.data?.blackjack,
-                        },
-                        roulette: {
-                            games: res.data?.roulette,
-                        },
-                        poker: {
-                            tables: res.data?.poker,
-                        },
-                    },
-                    displayGamesHistoryScreen: true,
-                }))
-            }
-        })
-    }
-
-    return (
-        <div className="fullscreen fs-centered statsScreen" style={{display: styleState.style.displayStatsScreen ? 'block' : 'none'}}>
-            <AiOutlineClose onClick={() => close()} style={{position: 'absolute', top: '20px', right: '20px'}}/>
-            <div>
-                <h1>Stats:</h1>
-                <p>Total money won: <span>${styleState.style.statsScreenInfo.money.earned}</span></p>
-                <p>Total blackjack games won: <span>{styleState.style.statsScreenInfo.blackjack.wins}</span></p>
-                <p>Total roulette games won: <span>{styleState.style.statsScreenInfo.roulette.wins}</span></p>
-                <p>Total poker games won: <span>{styleState.style.statsScreenInfo.poker.wins}</span></p>
-
-                <button onClick={() => openHistory()} className="primaryButton" style={{marginTop: '5rem', marginLeft: '1rem'}}>See Games History</button>
-            </div>
-        </div>
-    )
-}
-
-export default Stats
Index: mponents/admin/Calculations.jsx
===================================================================
--- components/admin/Calculations.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,156 +1,0 @@
-import React from 'react'
-
-
-function calculateHandValue(cards) {
-    let value = 0;
-    let aces = 0;
-    for (let i = 0; i < cards.length; i++) {
-      let card = cards[i];
-      if (card.substring(1) === 'A') {
-        value += 11;
-        aces++;
-      } else if (card.substring(1) === 'X' || card.substring(1) === 'J' || card.substring(1) === 'Q' || card.substring(1) === 'K') {
-        value += 10;
-      } else {
-        value += parseInt(card.substring(1));
-      }
-    }
-    while (value > 21 && aces > 0) {
-      value -= 10;
-      aces--;
-    }
-    return value;
-}
-
-const hands = [
-    'Royal Flush',
-    'Straight Flush',
-    'Four of a Kind',
-    'Full House',
-    'Flush',
-    'Straight',
-    'Three of a Kind',
-    'Two Pairs',
-    'Pair',
-    'High Card',
-]
-
-const order = "23456789XJQKA"
-function getHandDetails(hand) {
-    const cards = hand
-    const faces = cards.map(a => String.fromCharCode([77 - order.indexOf(a[1])])).sort()
-    const suits = cards.map(a => a[0]).sort()
-    const counts = faces.reduce(count, {})
-    const duplicates = Object.values(counts).reduce(count, {})
-    const flush = suits[0] === suits[4]
-    const first = faces[0].charCodeAt(1)
-    const straight = faces.every((f, index) => f.charCodeAt(1) - first === index)
-    let rank =
-        (flush && straight && 1) ||
-        (duplicates[4] && 2) ||
-        (duplicates[3] && duplicates[2] && 3) ||
-        (flush && 4) ||
-        (straight && 5) ||
-        (duplicates[3] && 6) ||
-        (duplicates[2] > 1 && 7) ||
-        (duplicates[2] && 8) ||
-        9;
-
-    return { hand: hands[rank], highCard: faces.sort(byCountFirst).join("") }
-
-    function byCountFirst(a, b) {
-        //Counts are in reverse order - bigger is better
-        const countDiff = counts[b] - counts[a]
-        if (countDiff) return countDiff // If counts don't match return
-        return b > a ? -1 : b === a ? 0 : 1
-    }
-
-    function count(c, a) {
-        c[a] = (c[a] || 0) + 1
-        return c
-    }
-}
-
-function compareHands(h1, h2) {
-    let d1 = getHandDetails(h1)
-    let d2 = getHandDetails(h2)
-    if (hands.indexOf(d1.hand) === hands.indexOf(d2.hand)) {
-        if (d1.highCard < d2.highCard) {
-            return d2;
-        } else if (d1.highCard > d2.highCard) {
-            return d1;
-        } else {
-            return d1;
-        }
-    }
-    return hands.indexOf(d1.hand) < hands.indexOf(d2.hand) ? d2 : d1;
-}
-
-function getBestHandDetails(playerCards, tableCards) {
-    let combinations = getCardCombinations(playerCards, tableCards);
-
-    let h1 = combinations[0];
-    let bestHand = h1;
-    combinations.forEach(combination => {
-        bestHand = compareHands(h1, combination);
-        h1 = combination;
-    })
-
-    return bestHand;
-}
-
-function getCardCombinations(playerCards, tableCards) {
-    let combinations = [];
-
-    if (tableCards[3] !== undefined) {
-        combinations.push([playerCards[0], tableCards[0], tableCards[1], tableCards[2], tableCards[3]])
-        combinations.push([playerCards[1], tableCards[0], tableCards[1], tableCards[2], tableCards[3]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[1], tableCards[3]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[2], tableCards[3]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[1], tableCards[2], tableCards[3]])
-    }
-    
-    if (tableCards[4] !== undefined) {
-        combinations.push([playerCards[0], tableCards[0], tableCards[1], tableCards[2], tableCards[4]])
-        combinations.push([playerCards[0], tableCards[0], tableCards[1], tableCards[4], tableCards[3]])
-        combinations.push([playerCards[0], tableCards[0], tableCards[4], tableCards[2], tableCards[3]])
-        combinations.push([playerCards[0], tableCards[4], tableCards[1], tableCards[2], tableCards[3]])
-        
-        combinations.push([playerCards[1], tableCards[0], tableCards[1], tableCards[2], tableCards[4]])
-        combinations.push([playerCards[1], tableCards[0], tableCards[1], tableCards[4], tableCards[3]])
-        combinations.push([playerCards[1], tableCards[0], tableCards[4], tableCards[2], tableCards[3]])
-        combinations.push([playerCards[1], tableCards[4], tableCards[1], tableCards[2], tableCards[3]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[1], tableCards[4]])
-    
-        combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[2], tableCards[4]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[3], tableCards[4]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[1], tableCards[2], tableCards[4]])
-        combinations.push([playerCards[0], playerCards[1], tableCards[1], tableCards[3], tableCards[4]])
-    
-        combinations.push([playerCards[0], playerCards[1], tableCards[2], tableCards[3], tableCards[4]])
-    }
-
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[1], tableCards[2]])
-
-    return combinations;
-}
-
-const Calculations = ({action, cards, cards2}) => {
-    if (action === 'calculateHandValue') {
-        return (
-            <>
-                {calculateHandValue(cards)}
-            </>
-        )
-    }
-    else {
-        return (
-            <>
-                { cards.length > 0 && cards2.length > 0 && getBestHandDetails(cards, cards2).hand}
-                { (cards.length === 0 || cards2.length === 0) && <span>-</span>}
-            </>
-        )
-    }
-}
-  
-export default Calculations
Index: mponents/admin/Complaints.jsx
===================================================================
--- components/admin/Complaints.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,143 +1,0 @@
-import React from 'react'
-
-import { useEffect } from 'react';
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import axios from 'axios';
-import { setAdminInformation } from '../../redux/reducers/adminInformationSlice';
-import { setAdmin } from '../../redux/reducers/adminSlice';
-import { setStyle } from '../../redux/reducers/styleSlice';
-
-const Complaints = () => {
-  const dispatch = useDispatch();
-
-  const styleState = useSelector(state => state.style);
-  const adminState = useSelector(state => state.admin);
-  const adminInformationState = useSelector(state => state.adminInformation);
-
-  useEffect(() => {
-    axios.get(`/api/postgre?action=get_complaints_as_admin&admin_id=${localStorage.CAESSINO_ADMIN_ID}`).then(res => {
-      if (res.data?.success) {
-        dispatch(setAdminInformation({
-          ...adminInformationState.adminInformation,
-          complaints: res.data?.complaints,
-        }))
-      }
-    })
-  }, [])
-  
-  function hideComplaintsScreen() {
-    dispatch(setAdmin({
-      ...adminState.admin,
-      displays: {
-        ...adminState.admin.displays,
-        complaintsScreen: false,
-      }
-    }))
-  }
-
-  function answerComplaint(idx) {
-    dispatch(setAdminInformation({
-      ...adminInformationState.adminInformation,
-      answeringComplaintIndex: idx,
-      answerForComplaint: '',
-    }))
-  }
-
-  function sendAnswer(complaint) {
-    axios.post(`/api/postgre`, {
-      action: 'send_complaint_answer_as_admin',
-      admin_id: localStorage.CAESSINO_ADMIN_ID,
-      complaint: {
-        ...complaint,
-        answer: adminInformationState.adminInformation.answerForComplaint,
-      }
-    }).then(res => {
-      if (res.data?.success) {
-        dispatch(setAdminInformation({
-          ...adminInformationState.adminInformation,
-          complaints: res.data?.complaints,
-          answerForComplaint: '',
-        }))
-
-        dispatch(setStyle({
-          ...styleState.style,
-          notification: {
-            show: true,
-            text: 'Answer sent successfully',
-            status: 'success',
-          },
-        }))
-      }
-    });
-  }
-
-  function onChangeAnswer(e) {
-    dispatch(setAdminInformation({
-      ...adminInformationState.adminInformation,
-      answerForComplaint: e.target.value,
-    }))
-  }
-
-  return (
-    <div className="fullscreen top-to-bottom-centered admin complaintsScreen">
-      <div>
-          <p className="link" onClick={() => hideComplaintsScreen()}>⬅ Go Back</p>
-
-          <h3>These are the complaints sent by players. You can answer them, and an email will be sent to the player so that he knows his complaint has been listened to.</h3>
-
-          { adminInformationState.adminInformation?.complaints?.map(function(complaint, complaintIndex) {
-            if (complaint.answered === "false") return (
-              <div className='complaint' key={complaint.by + complaint.description.substr(0, 20)}>
-                <div>
-                  <p>By: {complaint.by}</p>
-                  <p>Date: {new Date(complaint.date).toGMTString()}</p>
-                  <div>
-                    { adminInformationState.adminInformation.answeringComplaintIndex !== complaintIndex &&
-                      <button className='primaryButton' onClick={() => answerComplaint(complaintIndex)}>Answer Complaint</button>
-                    }
-                  </div>
-                </div>
-                <div>
-                  <textarea readOnly value={complaint.description}></textarea>
-                </div>
-                { adminInformationState.adminInformation.answeringComplaintIndex === complaintIndex && (
-                  <div className="answering">
-                    <p>Your answer:</p>
-                    <textarea value={adminInformationState.adminInformation.answerForComplaint} onChange={(e) => onChangeAnswer(e)} placeholder="Post your answer here admin."></textarea>
-                    <div>
-                      <button className='secondaryButton' onClick={() => sendAnswer(complaint)}>Send Your Answer</button>
-                    </div>
-                  </div>
-                )}
-              </div>
-            )}
-          )}
-
-          { adminInformationState.adminInformation?.complaints?.map(function(complaint, complaintIndex) {
-            if (complaint.answered === "true") return (
-              <div className='complaint' key={complaint.by + complaint.description.substr(0, 20)}>
-                <div>
-                  <p>By: {complaint.by}</p>
-                  <p>Date: {new Date(complaint.date).toGMTString()}</p>
-                  <div>
-                    <p>Answered</p>
-                  </div>
-                </div>
-                <div>
-                  <textarea readOnly value={complaint.description}></textarea>
-                </div>
-                <div className="answering">
-                  <p>Your answer:</p>
-                  <textarea readOnly value={complaint.answer}></textarea>
-                </div>
-              </div>
-            )}
-          )}
-      </div>
-    </div>
-  )
-}
-
-export default Complaints
Index: mponents/admin/Dashboard.jsx
===================================================================
--- components/admin/Dashboard.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,46 +1,0 @@
-import React from 'react'
-
-import { useDispatch, useSelector } from 'react-redux'
-import { setAdmin } from '../../redux/reducers/adminSlice';
-
-const Dashboard = () => {
-  const dispatch = useDispatch();
-
-  const adminState = useSelector(state => state.admin);
-
-  function seeComplaints() {
-    dispatch(setAdmin({
-      ...adminState.admin,
-      displays: {
-        ...adminState.admin.displays,
-        complaintsScreen: true,
-      }
-    }))
-  }
-
-  function seeLiveGames() {
-    dispatch(setAdmin({
-      ...adminState.admin,
-      displays: {
-        ...adminState.admin.displays,
-        liveGamesScreen: true,
-      }
-    }))
-  }
-
-  return (
-    <div className="fullscreen fs-centered admin dashboardScreen">
-        <div className="fs-inputs-container">
-            <div>
-                <span>Hello Admin</span>
-                <div>
-                  <button className="primaryButton" onClick={() => seeComplaints()}>See complaints</button>
-                  <button className="primaryButton" onClick={() => seeLiveGames()}>See live games</button>
-                </div>
-            </div>
-        </div>
-    </div>
-  )
-}
-
-export default Dashboard
Index: mponents/admin/LiveGames.jsx
===================================================================
--- components/admin/LiveGames.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,165 +1,0 @@
-import React from 'react'
-
-import { useEffect } from 'react';
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import axios from 'axios';
-import { setAdminInformation } from '../../redux/reducers/adminInformationSlice';
-import { setAdmin } from '../../redux/reducers/adminSlice';
-import FreeflowCard from '../FreeflowCard';
-import Calculations from './Calculations';
-
-const LiveGames = () => {
-  const dispatch = useDispatch();
-
-  const adminState = useSelector(state => state.admin);
-  const adminInformationState = useSelector(state => state.adminInformation);
-
-  useEffect(() => {
-    let interval = setInterval(() => {
-      axios.get(`/api/postgre?action=get_live_games_as_admin&admin_id=${localStorage.CAESSINO_ADMIN_ID}`).then(res => {
-        if (res.data?.success) {
-          dispatch(setAdminInformation({
-            ...adminInformationState.adminInformation,
-            liveGames: {
-              blackjack: {
-                rooms: res.data?.blackjack,
-              },
-              roulette: res.data?.roulette,
-              poker: {
-                tables: res.data?.poker,
-              },
-            }
-          }))
-        }
-      })
-    }, 1000);
-
-    return () => {
-      if (interval !== null) clearInterval(interval);
-  };
-  }, [])
-  
-  function hideLiveGamesScreen() {
-    dispatch(setAdmin({
-      ...adminState.admin,
-      displays: {
-        ...adminState.admin.displays,
-        liveGamesScreen: false,
-      }
-    }))
-  }
-
-  return (
-    <div className="fullscreen top-to-bottom-centered admin liveGamesScreen">
-      <div>
-        <p className="link" onClick={() => hideLiveGamesScreen()}>⬅ Go Back</p>
-
-        <h3>These are the current live games.</h3>
-
-        <div className="liveGamesMegaContainer">
-          <div className="liveBlackjackGames liveGamesContainer">
-            <h3>Live BLackjack Games:</h3>
-            { adminInformationState.adminInformation.liveGames.blackjack?.rooms?.map(room => (
-              <div key={room.id} className="liveBlackjackGame">
-                <div>
-                  <div>
-                    { room?.playerCards?.map((card, i) => (
-                      <FreeflowCard key={`playercard${i}`} card={card}/>
-                    ))}
-                    <h5><Calculations action="calculateHandValue" cards={room.playerCards}/></h5>
-                  </div>
-                  <p>Player {room?.displayName} (${parseInt(room.initialBet) + parseInt(room.sideBet)})</p>
-                </div>
-                <div>
-                  <div>
-                      <h6><span>Status:</span><br/>{room.status}</h6>
-                      { room?.outcome?.length > 0 && <h6><span>Outcome:</span><br/>{room.outcome}</h6> }
-                      { room?.sideBetOutcome?.length > 0 && <h6><span>Side Bet Outcome:</span><br/>{room.sideBetOutcome}</h6> }
-                  </div>
-                </div>
-                <div>
-                  <div>
-                    <h5><Calculations action="calculateHandValue" cards={room.dealerCards}/></h5>
-                    { room?.dealerCards?.map((card, i) => (
-                      <FreeflowCard key={`dealercard${i}`} card={card}/>
-                    ))}
-                  </div>
-                  <p>Dealer {room.dealerName}</p>
-                </div>
-              </div>
-            )) }
-          </div>
-
-          <div className="liveRouletteGame liveGamesContainer">
-            <h3>Live Roulette Game:</h3>
-            <div>
-              <h6>
-                <span>Status: </span>{adminInformationState.adminInformation?.liveGames?.roulette?.status}&nbsp;&nbsp;&nbsp;&nbsp;
-                <span>Time to start: </span>{adminInformationState.adminInformation?.liveGames?.roulette?.timeToStart}&nbsp;&nbsp;&nbsp;&nbsp;
-                { adminInformationState.adminInformation?.liveGames?.roulette?.magicNumber != -1 && <><span>Ball on number: </span>{adminInformationState.adminInformation?.liveGames?.roulette?.magicNumber}&nbsp;&nbsp;&nbsp;&nbsp;</> }
-                { adminInformationState.adminInformation?.liveGames?.roulette?.magicNumber != -1 && <><span>Winning bets: </span>{adminInformationState.adminInformation?.liveGames?.roulette?.winningBets?.join(", ")}</> }
-              </h6>
-              <h6 style={{marginTop: '2rem'}}><span>Players:</span></h6>
-              { adminInformationState.adminInformation?.liveGames?.roulette?.players?.map((player, i) => (
-                <div key={player.session_id} className="playerInLiveRouletteGame">
-                  <div>
-                    <h6><span>Player {i+1} -&gt;</span></h6>
-                  </div>
-                  <div>
-                    <h6><span>{player.name} (${player?.betAmount})</span></h6>
-                  </div>
-                  <div>
-                    { player?.whichBets?.length > 0 && <h6><span>Betted on: </span>{player?.whichBets?.join(", ")}</h6> }
-                  </div>
-                  <div>
-                    { adminInformationState.adminInformation?.liveGames?.roulette?.magicNumber != -1 && player?.whichBets?.length > 0 && <h6><span>Outcome: </span>{player.outcome}</h6> }
-                  </div>
-                </div>
-              )) }
-            </div>
-          </div>
-
-          <div className="livePokerGames liveGamesContainer">
-            <h3>Live Poker Games:</h3>
-            { adminInformationState.adminInformation.liveGames.poker?.tables?.map(table => (
-              <div key={table.id} className="livePokerGame">
-                <h6>
-                  <span>Round: </span>{table?.round}/4&nbsp;&nbsp;&nbsp;&nbsp;
-                  <span>Started: </span>{table?.started}&nbsp;&nbsp;&nbsp;&nbsp;
-                  <span>Player on turn: </span>{table.players[table.turnIdx]?.displayName ?? '-'}&nbsp;&nbsp;&nbsp;&nbsp;
-                  <span>Pot: </span>${table?.pot}&nbsp;&nbsp;&nbsp;&nbsp;
-                  { table?.winners?.length > 0 && <><span>Winners: </span>{table?.winners?.map(e=>e?.displayName)?.join(", ")}</> }
-                </h6>
-                <div className="cardsOnTable" style={{marginTop: '2rem'}}>
-                  { table?.cards?.map((card, i) => (
-                    <FreeflowCard key={`tablecard${i}`} card={card}/>
-                  ))}
-                </div>
-                <h6 style={{marginTop: '2rem'}}><span>Players:</span></h6>
-                {table.players?.map(player => (
-                  <div key={player.id} className="playerInLivePokerGame">
-                    <div>
-                      <h6><span>Player {player?.displayName} (${player.betAmount})</span></h6>
-                    </div>
-                    <div className="cards">
-                      { player?.cards?.map((card, i) => (
-                        <FreeflowCard key={`playercard${i}`} card={card}/>
-                      ))}
-                    </div>
-                    <div>
-                      { table?.cards?.length > 0 && <h6><span>Hand: </span><Calculations action="getBestHandDetails" cards={player.cards} cards2={table.cards}/></h6> }
-                    </div>
-                  </div>
-                ))}
-              </div>
-            )) }
-          </div>
-        </div>
-      </div>
-    </div>
-  )
-}
-
-export default LiveGames
Index: mponents/admin/Login.jsx
===================================================================
--- components/admin/Login.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,119 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import { useRef } from 'react'
-
-import { setAdmin } from '../../redux/reducers/adminSlice';
-import { setStyle } from '../../redux/reducers/styleSlice';
-
-import axios from 'axios';
-
-const Login = () => {
-    const ref = useRef(null);
-
-    const dispatch = useDispatch();
-
-    const adminState = useSelector(state => state.admin);
-    const styleState = useSelector(state => state.style);
-
-    setTimeout(() => {
-        if (adminState.admin.displays.setFocus) {
-            if (ref !== null && ref.current !== null) {
-                ref.current.focus();
-            }
-
-            dispatch(setAdmin({
-                ...adminState.admin,
-                displays: {
-                    ...adminState.admin.displays,
-                    setFocus: false
-                }
-            }))
-        }
-    }, 10);
-
-    function onChangeUsername(e) {
-        dispatch(setAdmin({
-            ...adminState.admin,
-            inputControls: {
-                ...adminState.admin.inputControls,
-                username: e.target.value,
-            }
-        }))
-    }
-
-    function onChangePassword(e) {
-        dispatch(setAdmin({
-            ...adminState.admin,
-            inputControls: {
-                ...adminState.admin.inputControls,
-                password: e.target.value,
-            }
-        }))
-    }
-
-    function keyUp(e) {
-        if (e.key === 'Enter') {
-            login();
-        }
-    }
-
-    function login() {
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }))
-
-        axios.post(`/api/postgre`, {
-            action: 'login_as_admin',
-            username: adminState.admin.inputControls.username,
-            password: adminState.admin.inputControls.password,
-        })
-            .then(res => {
-                if (res.data?.success) {
-                    localStorage.CAESSINO_ADMIN_ID = res.data?.session?.id;
-
-                    dispatch(setAdmin({
-                        ...adminState.admin,
-                        session_id: res.data?.session?.id,
-                        inlineAlertText: '',
-                        inputControls: {
-                            username: '',
-                            password: '',
-                        }
-                    }))                    
-                }
-                else {
-                    dispatch(setAdmin({
-                        ...adminState.admin,
-                        inlineAlertText: res.data?.message,
-                    }));
-                }
-                
-                dispatch(setStyle({
-                    ...styleState.style,
-                    displayLoadingScreen: false,
-                }))
-            })
-    }
-
-    return (
-        <div className="fullscreen fs-centered admin loginScreen">
-            <div className="fs-inputs-container">
-                <div>
-                    {adminState.admin.inlineAlertText.length > 0 && <span className="inlineAlert">{adminState.admin.inlineAlertText}</span>}
-                    <span>Username:</span>
-                    <input ref={ref} type="text" onChange={(e) => {onChangeUsername(e)}} onKeyUp={(e) => keyUp(e)} value={adminState.admin.inputControls.username} placeholder="admin"/>
-                    <span>Password:</span>
-                    <input type="password" onChange={(e) => {onChangePassword(e)}} onKeyUp={(e) => keyUp(e)} value={adminState.admin.inputControls.password} placeholder="****************"/>
-                    <div style={{width: '100%', display: 'flex', flexDirection: 'row', justifyContent: 'flex-end'}}>
-                        <button className="secondaryButton" onClick={() => login()}>Log In as Admin</button>
-                    </div>
-                </div>
-            </div>
-        </div>
-    )
-}
-
-export default Login
Index: mponents/blackjack/Blackjack.jsx
===================================================================
--- components/blackjack/Blackjack.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,40 +1,0 @@
-import React from 'react'
-
-import Head from 'next/head'
-
-import BlackjackHeader from './BlackjackHeader'
-import PlayButtons from '../../components/blackjack/PlayButtons'
-import Cards from '../../components/blackjack/Cards'
-import DisplayBet from '../../components/blackjack/DisplayBet'
-import Loading from '../Loading'
-import Alert from '../Alert'
-import Notification from '../Notification'
-import LostConnection from '../LostConnection'
-
-const Blackjack = () => {
-  return (
-    <div className="app blackjackMainContainer" style={{backgroundImage: 'url("/images/blackjack-bg.png")', backgroundPosition: '0% 30%'}}>
-      <Head>
-        <title>Caessino - Blackjack</title>
-      </Head>
-  
-      <BlackjackHeader/>
-
-      <PlayButtons/>
-
-      <Cards/>
-
-      <DisplayBet/>
-
-      <Loading/>
-
-      <Alert/>
-
-      <Notification/>
-
-      <LostConnection/>
-    </div>
-  )
-}
-
-export default Blackjack
Index: mponents/blackjack/BlackjackHeader.jsx
===================================================================
--- components/blackjack/BlackjackHeader.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,156 +1,0 @@
-/* eslint-disable @next/next/no-html-link-for-pages */
-import React from 'react'
-
-import Link from 'next/link'
-
-import { useRouter } from 'next/router'
-
-import { AiOutlineArrowLeft } from 'react-icons/ai'
-
-import { useEffect } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-
-import { setBlackjackGame, setPlayer } from '../../redux/reducers/playerSlice'
-import { setBlackjack, setStyle } from '../../redux/reducers/styleSlice'
-
-import axios from 'axios';
-
-const BlackjackHeader = () => {
-    const dispatch = useDispatch();
-
-    const router = useRouter();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    useEffect(() => {
-        // display loading screen
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }));
-
-        let interval = null;
-        axios.get(`/api/blackjack?action=get_player_info_on_enter&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-            if (res.data?.success) {
-                dispatch(setPlayer({
-                    ...playerState.player,
-                    displayName: res.data?.displayName,
-                    session_id: res.data?.session_id,
-                    credits: res.data?.credits,
-                }))
-
-                dispatch(setBlackjack({
-                    ...styleState.blackjack,
-                    inputControls: {
-                        ...styleState.blackjack.inputControls,
-                        initialBet: {
-                            ...styleState.blackjack.inputControls.initialBet,
-                            chosenCredits: parseInt(playerState.player.credits/2),
-                        },
-                        sideBet: {
-                            ...styleState.blackjack.inputControls.sideBet,
-                            chosenCredits: parseInt(playerState.player.credits/2),
-                        }
-                    },
-                }))
-
-                if (interval !== null) clearInterval(interval);
-                
-                interval = setInterval(() => {
-                    axios.get(`/api/blackjack?action=update_state&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(newRes => {
-                        if (newRes.data?.success) {
-                            dispatch(setBlackjackGame(newRes.data?.blackjackGame))
-
-                            if (newRes.data?.blackjackGame?.credits !== playerState.player.credits && parseInt(newRes.data?.blackjackGame?.credits) >= 0) {
-                                dispatch(setPlayer({
-                                    ...playerState.player,
-                                    displayName: res.data?.displayName,
-                                    session_id: res.data?.session_id,
-                                    credits: newRes.data?.blackjackGame?.credits,
-                                }))
-                            }
-
-                            dispatch(setStyle({
-                                ...styleState.style,
-                                displayLoadingScreen: false,
-                                notification: {
-                                    ...styleState.style.notification,
-                                    show: false,
-                                },
-                                lostConnectionInfo: {
-                                    show: false,
-                                    message: ''
-                                },
-                                alert: (newRes.data?.blackjackGame?.status?.includes('_5_') && !newRes.data?.blackjackGame?.betOutcomeMessageShown) ? {
-                                    show: true,
-                                    title: newRes.data?.blackjackGame?.messageTitle,
-                                    subtitle: newRes.data?.blackjackGame?.messageDescription,
-                                    button: {
-                                        text: 'Play Again',
-                                        action: 'play_again',
-                                    }
-                                } : (newRes.data?.blackjackGame?.status?.includes('_4_') && !newRes.data?.blackjackGame?.sideBetOutcomeMessageShown && newRes.data?.blackjackGame?.sideBet > 0) ? {
-                                    show: true,
-                                    title: newRes.data?.blackjackGame?.messageTitle,
-                                    subtitle: newRes.data?.blackjackGame?.messageDescription,
-                                    button: {
-                                        text: 'Continue',
-                                        action: 'continue_from_side_bet',
-                                    }
-                                } : {
-                                    ...styleState.style.alert,
-                                    show: false,
-                                },
-                            }))
-                        }
-                    }).catch(error => {
-                        dispatch(setStyle({
-                            ...styleState.style,
-                            displayLoadingScreen: false,
-                            lostConnectionInfo: {
-                                show: true,
-                                message: 'Game will resume upon reconnection to the server.'
-                            }
-                        }))
-                    });
-                }, 1000);
-            }
-            else {
-                dispatch(setStyle({
-                    ...styleState.style,
-                    notification: {
-                        show: true,
-                        text: 'Please login in order to play blackjack.',
-                        status: 'error',
-                    },
-                    displayLoadingScreen: false,
-                }))
-
-                router.push('/');
-            }
-        });
-
-        return () => {
-            if (interval !== null) clearInterval(interval);
-        };
-    }, []);
-
-    return (
-        <header className="header">
-            <a href="/">
-                <h2>
-                    <AiOutlineArrowLeft />
-                </h2>
-            </a>
-            <nav>
-                <ul>
-                    <li>Hi, {playerState?.player?.displayName}</li>
-                    <li>Balance: ${playerState?.player?.credits}</li>
-                </ul>
-            </nav>
-        </header>
-    )
-}
-
-export default BlackjackHeader
Index: mponents/blackjack/Cards.jsx
===================================================================
--- components/blackjack/Cards.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,34 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-import Card from '../Card'
-
-const Cards = () => {
-  const playerState = useSelector(state => state.player)
-
-  let playerPos = {
-    left: 50,
-    top: 75.5
-  }
-
-  let dealerPos = {
-    left: 50,
-    top: 32,
-  }
-
-  const splitCardsMultiplyByInt = 2;
-
-  return (
-    <div className="blackjackCards">
-      {playerState?.blackjackGame?.playerCards?.map((card, i) => (
-        <Card key={card} card={card} rotateZ={i*splitCardsMultiplyByInt} pos={{left: playerPos.left+i*splitCardsMultiplyByInt, top: playerPos.top}}/>
-      ))}
-      {playerState?.blackjackGame?.dealerCards?.map((card, i) => (
-        <Card key={card} card={card} rotateZ={i*splitCardsMultiplyByInt} pos={{left: dealerPos.left+i*splitCardsMultiplyByInt, top: dealerPos.top}}/>
-      ))}
-    </div>
-  )
-}
-
-export default Cards
Index: mponents/blackjack/DisplayBet.jsx
===================================================================
--- components/blackjack/DisplayBet.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,18 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux';
-
-const DisplayBet = () => {
-  const playerState = useSelector(state => state.player);
-  const styleState = useSelector(state => state.style);
-  let display = parseInt(playerState.blackjackGame.status.substr(1, 1)) >= 2 ? 'block' : 'none';
-  let displaySideBet = ( parseInt(playerState.blackjackGame.status.substr(1, 1)) >= 3 && parseInt(playerState.blackjackGame.sideBet) > 0 && !playerState.blackjackGame.sideBetOutcomeMessageShown ) ? 'block' : 'none';
-
-  return (
-    <div className="blackjackDisplayBet" style={{display: display}}>
-      <span>${playerState.blackjackGame.initialBet}{displaySideBet === 'block' ? ` + $${playerState.blackjackGame.sideBet}` : ''}</span>
-    </div>
-  )
-}
-
-export default DisplayBet
Index: mponents/blackjack/PlayButtons.jsx
===================================================================
--- components/blackjack/PlayButtons.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,253 +1,0 @@
-import React from 'react'
-
-import { GiTwoCoins, GiReturnArrow, GiCardDraw } from 'react-icons/gi'
-import { AiFillCheckCircle } from 'react-icons/ai'
-
-import { setBlackjackGame, setPlayer } from '../../redux/reducers/playerSlice';
-import { setBlackjack, setStyle } from '../../redux/reducers/styleSlice';
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import axios from 'axios';
-
-const PlayButtons = () => {
-    const dispatch = useDispatch();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    function chooseCoins(e) {
-        dispatch(setBlackjack({
-            ...styleState.blackjack,
-            inputControls: {
-                ...styleState.blackjack.inputControls,
-                initialBet: {
-                    ...styleState.blackjack.inputControls.initialBet,
-                    chosenCredits: parseInt(e.target.value),
-                }
-            }
-        }))
-    }
-
-    function chooseCoinsSideBet(e) {
-        dispatch(setBlackjack({
-            ...styleState.blackjack,
-            inputControls: {
-                ...styleState.blackjack.inputControls,
-                sideBet: {
-                    ...styleState.blackjack.inputControls.sideBet,
-                    chosenCredits: parseInt(e.target.value),
-                }
-            }
-        }));
-    }
-
-    function placeInitialBetClicked() {
-        axios.get(`/api/blackjack?action=make_initial_bet&session_id=${localStorage.CAESSINO_SESSION_ID}&bet=${styleState.blackjack.inputControls.initialBet.chosenCredits}`);
-    }
-
-    function placeSideBetsClicked() {
-        dispatch(setBlackjack({
-            ...styleState.blackjack,
-            displays: {
-                ...styleState.blackjack.displays,
-                sideBetsModal: true,
-                sideBetsChooseCreditsModal: false,
-            },
-            inputControls: {
-                ...styleState.blackjack.inputControls,
-                sideBet: {
-                    ...styleState.blackjack.inputControls.sideBet,
-                    chosenCredits: parseInt(playerState.player.credits/2),
-                }
-            }
-        }))
-    }
-
-    function splitTexts(text) {
-        let chooseCreditsText = ''
-        let paysText = ''
-
-        let allowCopy = true;
-        let copyToPaysText = false;
-        for (let i = 0; i < text.length; i++) {
-            if (text[i] === '<') {
-                allowCopy = false;
-            }
-
-            if (allowCopy) {
-                if (text.length - 1 - i >= 4 && text.substring(i, i + 4) === 'Pays') {
-                    copyToPaysText = true;
-                }
-
-                if (!copyToPaysText) {
-                    chooseCreditsText += text[i];
-                }
-                else {
-                    paysText += text[i];
-                }
-            }
-            
-            if (text[i] === '>') {
-                allowCopy = true;
-            }
-        }
-
-        return {
-            chooseCreditsText,
-            paysText,
-        }
-    }
-
-    function selectedSideBet(e, sideBetName) {
-        const texts = splitTexts(e.target.innerHTML);
-
-        dispatch(setBlackjack({
-            ...styleState.blackjack,
-            sideBetName: sideBetName,
-            displays: {
-                ...styleState.blackjack.displays,
-                sideBetsModal: false,
-                sideBetsChooseCreditsModal: true,
-            },
-            texts: {
-                ...styleState.blackjack.texts,
-                sideBetsChooseCreditsText: texts.chooseCreditsText,
-                sideBetsPaysText: texts.paysText,
-            }
-        }))
-    }
-
-    function placeSideBetClicked() {
-        axios.get(`/api/blackjack?action=make_side_bet&session_id=${localStorage.CAESSINO_SESSION_ID}&bet=${styleState.blackjack.inputControls.sideBet.chosenCredits}&betName=${styleState.blackjack.sideBetName}`).then(res => {
-            if (res.data?.success) {
-                dispatch(setBlackjack({
-                    ...styleState.blackjack,
-                    displays: {
-                        ...styleState.blackjack.displays,
-                        sideBetsChooseCreditsModal: false,
-                    }
-                }))
-
-                getCards();
-            }
-        });
-    }
-
-    function skipSideBetsClicked() {
-        axios.get(`/api/blackjack?action=make_side_bet&session_id=${localStorage.CAESSINO_SESSION_ID}&bet=0&betName=none&skip=true`).then(res => {
-            if (res.data?.success) {
-                dispatch(setBlackjack({
-                    ...styleState.blackjack,
-                    displays: {
-                        ...styleState.blackjack.displays,
-                        sideBetsModal: false,
-                        sideBetsChooseCreditsModal: false,
-                    },
-                }))
-
-                getCards();
-            }
-        });
-    }
-
-    function getCards() {
-        axios.get(`/api/blackjack?action=get_initial_cards&session_id=${localStorage.CAESSINO_SESSION_ID}`);
-    }
-
-    function hitClicked() {
-        axios.get(`/api/blackjack?action=hit_a_card&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-            if (res.data?.success) {
-                dispatch(setBlackjackGame({
-                    ...playerState.blackjackGame,
-                    status: res.data?.status,
-                    playerCards: res.data?.playerCards,
-                }))
-
-                if (res.data?.status === '_5_game_over') {
-                    if (res.data?.outcome === 'player_busted') {
-                        dispatch(setPlayer({
-                            ...playerState.player,
-                            credits: res.data?.credits,
-                        }))
-
-                        dispatch(setStyle({
-                            ...styleState.style,
-                            alert: {
-                                show: true,
-                                title: 'You busted!',
-                                subtitle: `You lost $${-1*res.data?.earnings}`,
-                                button: {
-                                    text: 'Play again',
-                                    action: 'play_again',
-                                }
-                            }
-                        }))
-                    }
-                }
-            }
-        });
-    }
-
-    function standClicked() {
-        axios.get(`/api/blackjack?action=stand&session_id=${localStorage.CAESSINO_SESSION_ID}`);
-    }
-
-    return (
-        <div className="blackjackButtons">
-            <div className="blackjackInitialBet" style={{display: playerState.blackjackGame.status.includes('_1_') ? 'flex' : 'none'}}>
-                <div>
-                    <input type="range" className="primarySlider" min={0} max={playerState.player.credits} step={1} value={styleState.blackjack.inputControls.initialBet.chosenCredits} onChange={(e) => chooseCoins(e)} />
-                    <div style={{marginTop: '15px', marginBottom: '-30px'}}>
-                        <span>${styleState.blackjack.inputControls.initialBet.chosenCredits}</span>
-                    </div>
-                </div>
-                <button className="primaryButton" onClick={() => placeInitialBetClicked()}>Place Initial Bet <GiTwoCoins style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-            </div>
-            <div className="blackjackSideBet" style={{display: playerState.blackjackGame.status.includes('_2_') ? 'flex' : 'none'}}>
-                <button className="primaryButton" onClick={() => placeSideBetsClicked()}>Place Side Bets <GiTwoCoins style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-                <button className="primaryButton" onClick={() => skipSideBetsClicked()}>Skip <GiReturnArrow style={{marginTop: '3px', marginBottom: '-3px', transform: 'rotateZ(-15deg)'}} /></button>
-            </div>
-            <div className="blackjackHitStand" style={{display: parseInt(playerState.blackjackGame.status.toString().substr(1, 1)) >= 3 ? 'flex' : 'none'}}>
-                <button className="primaryButton" onClick={() => hitClicked()}>Hit <GiCardDraw style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-                <button className="primaryButton" onClick={() => standClicked()}>Stand <AiFillCheckCircle style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-            </div>
-
-            <div className="blackjackSideBetsModal" style={{display: styleState.blackjack.displays.sideBetsModal ? 'flex' : 'none'}}>
-                <div className="blackjackSideBetSelect">
-                    <h1>Perfect Pairs</h1>
-                    <div>
-                        <p onClick={(e) => selectedSideBet(e, 'mixed_pair')}>Mixed pair (two of the same value but different suit and colour)<br/><span>Pays 5:1</span></p>
-                        <p onClick={(e) => selectedSideBet(e, 'coloured_pair')}>Coloured pair (two of the same value and the same colour)<br/><span>Pays 12:1</span></p>
-                        <p onClick={(e) => selectedSideBet(e, 'perfect_pair')}>Perfect pair (two of the same card)<br/><span>Pays 25:1</span></p>
-                    </div>
-                </div>
-                <div className="blackjackSideBetSelect">
-                    <h1>21+3</h1>
-                    <div>
-                        <p onClick={(e) => selectedSideBet(e, 'flush')}>Flush (all cards are suited)<br/><span>Pays 5:1</span></p>
-                        <p onClick={(e) => selectedSideBet(e, 'straight')}>Straight (all cards consecutive)<br/><span>Pays 10:1</span></p>
-                        <p onClick={(e) => selectedSideBet(e, 'three_of_a_kind')}>Three of a kind (not the same suit)<br/><span>Pays 30:1</span></p>
-                        <p onClick={(e) => selectedSideBet(e, 'straight_flush')}>Straight flush (consecutive cards same suit)<br/><span>Pays 40:1</span></p>
-                        <p onClick={(e) => selectedSideBet(e, 'suited_triple')}>Suited triple (three of the same card)<br/><span>Pays 100:1</span></p>
-                    </div>
-                </div>
-            </div>
-
-            <div className="blackjackSideBetsChooseCreditsModal" style={{display: styleState.blackjack.displays.sideBetsChooseCreditsModal ? 'flex' : 'none'}}>
-                <p>{styleState.blackjack.texts.sideBetsChooseCreditsText}<br/><span>{styleState.blackjack.texts.sideBetsPaysText}</span></p>
-                <div>
-                    <div>
-                        <input type="range" className="primarySlider" min={0} max={playerState.player.credits} step={1} value={styleState.blackjack.inputControls.sideBet.chosenCredits} onChange={(e) => chooseCoinsSideBet(e)} />
-                        <div style={{marginTop: '15px', marginBottom: '-30px'}}>
-                            <span>${styleState.blackjack.inputControls.sideBet.chosenCredits}</span>
-                        </div>
-                    </div>
-                    <button style={{marginTop: '40px'}} className="primaryButton" onClick={() => placeSideBetClicked()}>Place Side Bet <GiTwoCoins style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-                </div>
-            </div>
-        </div>
-    )
-}
-
-export default PlayButtons
Index: mponents/poker/Poker.jsx
===================================================================
--- components/poker/Poker.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,34 +1,0 @@
-import React from 'react'
-
-import Head from 'next/head'
-
-import PokerHeader from './PokerHeader'
-import Loading from '../Loading'
-import Alert from '../Alert'
-import Notification from '../Notification'
-import PokerSections from './PokerSections'
-import LostConnection from '../LostConnection'
-
-const Poker = () => {
-  return (
-    <div className="app pokerMainContainer" style={{backgroundImage: 'url("/images/poker-bg.jpg")'}}>
-      <Head>
-        <title>Caessino - Poker</title>
-      </Head>
-
-      <PokerSections/>
-
-      <PokerHeader/>
-
-      <Loading/>
-
-      <Alert/>
-
-      <Notification/>
-
-      <LostConnection/>
-    </div>
-  )
-}
-
-export default Poker
Index: mponents/poker/PokerHeader.jsx
===================================================================
--- components/poker/PokerHeader.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,130 +1,0 @@
-/* eslint-disable @next/next/no-html-link-for-pages */
-import React from 'react'
-
-import Link from 'next/link'
-
-import { useRouter } from 'next/router'
-
-import { AiOutlineArrowLeft } from 'react-icons/ai'
-
-import { useEffect } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-
-import { setPlayer, setPokerGame } from '../../redux/reducers/playerSlice'
-import { setStyle } from '../../redux/reducers/styleSlice'
-
-import axios from 'axios';
-
-const PokerHeader = () => {
-    const dispatch = useDispatch();
-
-    const router = useRouter();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    useEffect(() => {
-        // display loading screen
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }));
-
-        let interval = null;
-
-        axios.get(`/api/poker?action=get_player_info_on_enter&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-            if (res.data?.success) {
-                dispatch(setPlayer({
-                    ...playerState.player,
-                    displayName: res.data?.displayName,
-                    username: res.data?.username,
-                    session_id: res.data?.session_id,
-                    credits: res.data?.credits,
-                }))
-
-                if (interval !== null) clearInterval(interval);
-
-                interval = setInterval(() => {
-                    axios.get(`/api/poker?action=update_state&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(newRes => {
-                        if (newRes.data?.success) {
-                            dispatch(setPokerGame(newRes.data?.pokerGame))
-        
-                            if (newRes.data?.pokerGame?.player?.credits !== playerState.player.credits && newRes.data?.pokerGame?.player?.credits >= 0) {
-                                dispatch(setPlayer({
-                                    ...playerState.player,
-                                    displayName: res.data?.displayName,
-                                    session_id: res.data?.session_id,
-                                    credits: newRes.data?.pokerGame?.player?.credits,
-                                }))
-                            }
-                        }
-
-                        dispatch(setStyle({
-                            ...styleState.style,
-                            displayLoadingScreen: false,
-                            notification: {
-                                ...styleState.style.notification,
-                                show: false,
-                            },
-                            lostConnectionInfo: {
-                                show: false,
-                                message: ''
-                            }
-                        }))
-                    }).catch(error => {
-                        dispatch(setStyle({
-                            ...styleState.style,
-                            displayLoadingScreen: false,
-                            lostConnectionInfo: {
-                                show: true,
-                                message: 'Game will be played until the end upon server gets live. You cannot continue your game, but the money earned / lost will be updated.'
-                            }
-                        }))
-                    });
-                }, 1000);
-            }
-            else {
-                dispatch(setStyle({
-                    ...styleState.style,
-                    notification: {
-                        show: true,
-                        text: 'Please login in order to play poker.',
-                        status: 'error',
-                    },
-                    displayLoadingScreen: false,
-                }))
-
-                router.push('/');
-            }
-        });
-
-        return () => {
-            if (interval !== null) clearInterval(interval);
-        };
-    }, [])
-
-    function leaveTable() {
-        axios.get(`/api/poker?action=leave_table&session_id=${localStorage.CAESSINO_SESSION_ID}`);
-    }
-
-    return (
-        <header className="header">
-            <div style={{display: 'flex', alignItems: 'center'}}>
-                <a href="/">
-                    <h2>
-                        <AiOutlineArrowLeft />
-                    </h2>
-                </a>
-                { playerState.pokerGame?.player?.table?.length > 0 && <button style={{marginBottom: '4px', marginLeft: '32px', fontSize: '16px'}} className="tertiaryButton" onClick={() => leaveTable()}>Leave Table</button> }
-            </div>
-            <nav>
-                <ul>
-                    <li>Hi, {playerState?.player?.displayName}</li>
-                    <li>Balance: ${playerState?.player?.credits}</li>
-                </ul>
-            </nav>
-        </header>
-    )
-}
-
-export default PokerHeader
Index: mponents/poker/PokerSections.jsx
===================================================================
--- components/poker/PokerSections.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,42 +1,0 @@
-import React from 'react'
-
-import CardsInTheMiddle from './sections/CardsInTheMiddle'
-import Chairs from './sections/Chairs'
-import Messages from './sections/Messages'
-import PlayButtons from './sections/PlayButtons'
-import PickATable from './sections/PickATable'
-
-import { useSelector } from 'react-redux'
-import Pot from './sections/Pot'
-import RaiseModal from './sections/RaiseModal'
-
-const PokerSections = () => {
-  const playerState = useSelector(state => state.player);
-
-  if (playerState.pokerGame?.player?.table?.length > 0) {
-    return (
-      <>
-          <Messages/>
-
-          <Chairs/>
-
-          <CardsInTheMiddle/>
-
-          <Pot/>
-
-          <PlayButtons/>
-
-          <RaiseModal/>
-      </>
-    )
-  }
-  else {
-    return (
-      <>
-        <PickATable/>
-      </>
-    )
-  }
-}
-
-export default PokerSections
Index: mponents/poker/sections/CardsInTheMiddle.jsx
===================================================================
--- components/poker/sections/CardsInTheMiddle.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,18 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-import FreeflowCard from '../../FreeflowCard';
-
-const CardsInTheMiddle = () => {
-    const playerState = useSelector(state => state.player);
-
-    return (
-      <div className='cardsInTheMiddleContainer'>
-          {playerState?.pokerGame?.table.cards?.map((card, i) => (
-            <FreeflowCard key={card + i} card={card}/>
-          ))}
-      </div>
-    )
-}
-
-export default CardsInTheMiddle
Index: mponents/poker/sections/Chairs.jsx
===================================================================
--- components/poker/sections/Chairs.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,49 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-import FreeflowCard from '../../FreeflowCard';
-
-const Chairs = () => {
-  const playerState = useSelector(state => state.player);
-
-  const positions = [
-    { x: 16, y: 35 },
-    { x: 16, y: 65 },
-    { x: 25, y: 85 },
-    { x: 40, y: 90 },
-    { x: 60, y: 90 },
-    { x: 75, y: 85 },
-    { x: 84, y: 65 },
-    { x: 84, y: 35 },
-  ]
-
-  return (
-    <div className="pokerChairsContainer">
-      {positions.map((pos, i) => {
-        let extraClass = '';
-        if (i === playerState.pokerGame.table.turnIdx) extraClass = 'onTurn';
-        if (playerState.pokerGame.table.players[i] !== undefined && playerState.pokerGame.table.players[i].isFolded) extraClass = 'folded';
-
-        return (
-          <div className={`pokerChair ${extraClass}`} style={{left: `${pos.x}vw`, top: `${pos.y}vh`}} key={'chair' + pos.x + pos.y}>
-            {playerState.pokerGame.table.players[i] !== undefined && playerState.pokerGame.table.players[i].isSatDown && (
-              <div className="pokerPlayerCardsContainer">
-                <div>
-                  { playerState.pokerGame.table.players[i].cards[0] !== undefined && <FreeflowCard card={playerState.pokerGame.table.players[i].cards[0]}/> }
-                  { playerState.pokerGame.table.players[i].cards[1] !== undefined && <FreeflowCard card={playerState.pokerGame.table.players[i].cards[1]}/> }
-                </div>
-              </div>
-            )}
-
-            <div>
-              {playerState.pokerGame.table.players[i] !== undefined && playerState.pokerGame.table.players[i].isSatDown && <p>{playerState.pokerGame.table.players[i].displayName}</p>}
-              {playerState.pokerGame.table.players[i] !== undefined && playerState.pokerGame.table.players[i].isSatDown && <p>${playerState.pokerGame.table.players[i].betAmount}</p>}
-            </div>
-          </div>
-        )
-      })}
-    </div>
-  )
-}
-
-export default Chairs
Index: mponents/poker/sections/Messages.jsx
===================================================================
--- components/poker/sections/Messages.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,39 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const Messages = () => {
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    let roundMessage = '';
-    if (playerState.pokerGame.table.round === 1) {
-        roundMessage = ' - Everyone must call $20 before cards are dealt.';
-    }
-
-    let turnMessage = '';
-    let callMessage = '';
-    if (playerState.pokerGame.table.players[playerState.pokerGame.table.turnIdx] !== undefined) {
-        turnMessage = `It\'s ${playerState.pokerGame.table.players[playerState.pokerGame.table.turnIdx].displayName}\'s turn.`;
-
-        if (parseInt(playerState.pokerGame.table.lastBet) > 0) {
-            callMessage = `${playerState.pokerGame.table.players[playerState.pokerGame.table.turnIdx].displayName} must at least call $${Math.min(playerState.player.credits, playerState.pokerGame.table.lastBet)}`;
-        }
-    }
-
-    return (
-        <div className="pokerMessagesContainer">
-            { playerState.pokerGame.table.ended && playerState.pokerGame.table.onlyOnePlayerLeft && <p>Game over - {playerState.pokerGame.table.winners[0]?.displayName} won ${playerState.pokerGame.table.winners[0]?.wonAmount} because everyone else folded! Congratulations.</p> }
-            { playerState.pokerGame.table.ended && !playerState.pokerGame.table.onlyOnePlayerLeft && playerState.pokerGame.table.winners.length === 1 && <p>Game over - {playerState.pokerGame.table.winners[0]?.displayName} won ${playerState.pokerGame.table.winners[0]?.wonAmount} with a {playerState.pokerGame.table.winners[0]?.hand?.hand} combination! Congratulations.</p> }
-            { playerState.pokerGame.table.ended && playerState.pokerGame.table.winners.length > 1 && <p>Game over - {playerState.pokerGame.table.winners.map(e=>e.displayName).join(", ")} drew!</p> }
-            { playerState.pokerGame.table.ended && <p>New game will start soon.</p> }
-
-            { playerState.pokerGame.table.started && !playerState.pokerGame.table.ended && <p>Round {playerState.pokerGame.table.round}/4{roundMessage}</p> }
-            { !playerState.pokerGame.table.started && !playerState.pokerGame.table.ended && <p>Waiting for coordinator {playerState.pokerGame.table.creator} to start the game.</p> }
-            { playerState.pokerGame.table.started && !playerState.pokerGame.table.ended && <p>{turnMessage}</p> }
-            { playerState.pokerGame.table.started && !playerState.pokerGame.table.ended && <p>{callMessage}</p> }
-        </div>
-    )
-}
-
-export default Messages
Index: mponents/poker/sections/PickATable.jsx
===================================================================
--- components/poker/sections/PickATable.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,64 +1,0 @@
-import React from 'react'
-
-import { useRef } from 'react'
-import { useSelector, useDispatch } from 'react-redux'
-import { setPoker } from '../../../redux/reducers/styleSlice';
-
-import axios from 'axios';
-
-const PickATable = () => {
-    const ref = useRef(null);
-
-    const dispatch = useDispatch();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-    
-    function keyUp(e) {
-        if (e.key === 'Enter') {
-            createATable();
-        }
-    }
-
-    function onChangeTableName(e) {
-        dispatch(setPoker({
-            ...styleState.poker,
-            inputControls: {
-                ...styleState.poker.inputControls,
-                tableName: e.target.value,
-            }
-        }))
-    }
-
-    function createATable() {
-        axios.get(`/api/poker?action=create_a_table&session_id=${localStorage.CAESSINO_SESSION_ID}&displayName=${playerState.player.displayName}&tableName=${styleState.poker.inputControls.tableName}&username=${playerState.player.username}`);
-    }
-
-    function joinATable(e) {
-        axios.get(`/api/poker?action=join_a_table&session_id=${localStorage.CAESSINO_SESSION_ID}&tableId=${e.target?.dataset?.table}&displayName=${playerState.player.displayName}&username=${playerState.player.username}`);
-    }
-
-    return (
-        <div className="pokerPickATableContainer">
-            <div className="createATable">
-                <input ref={ref} type="text" onChange={(e) => {onChangeTableName(e)}} onKeyUp={(e) => keyUp(e)} value={styleState.poker.inputControls.tableName} placeholder="Table name"/>
-                <button className="secondaryButton" onClick={() => createATable()}>Create a table</button>
-            </div>
-            <div>
-                <h3>Pick a table:</h3>
-                <div onClick={(e) => joinATable(e)}>
-                    {playerState.pokerGame.tables.filter(table=>table.started===false).map(table => (
-                        <div data-table={table.id} key={table.id}>
-                            <p data-table={table.id}>Table name: {table.name}</p>
-                            <p data-table={table.id}>Creator: {table.creator}</p>
-                            <p data-table={table.id}>Players: {table.players.filter(e=>e.isGhost===false).length}/8</p>
-                            <p data-table={table.id}>Join</p>
-                        </div>
-                    ))}
-                </div>
-            </div>
-        </div>
-    )
-}
-
-export default PickATable
Index: mponents/poker/sections/PlayButtons.jsx
===================================================================
--- components/poker/sections/PlayButtons.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,69 +1,0 @@
-import React from 'react'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import axios from 'axios';
-import { setPoker } from '../../../redux/reducers/styleSlice';
-
-const PlayButtons = () => {
-  const dispatch = useDispatch();
-
-  const playerState = useSelector(state => state.player);
-  const styleState = useSelector(state => state.style);
-
-  function sitDown() {
-    axios.get(`/api/poker?action=sit_down&session_id=${localStorage.CAESSINO_SESSION_ID}&tableId=${playerState.pokerGame.player.table}`);
-  }
-
-  function startGame() {
-    axios.get(`/api/poker?action=start_game&session_id=${localStorage.CAESSINO_SESSION_ID}`);
-  }
-
-  const checkClass = playerState.pokerGame.table.lastBet === 0 ? 'secondaryButton' : 'tertiaryButton';
-  const callClass = playerState.pokerGame.table.lastBet > 0 ? 'secondaryButton' : 'tertiaryButton'
-  const raiseClass = playerState.pokerGame.table.round >= 2 ? 'secondaryButton' : 'tertiaryButton';
-  const foldClass = 'secondaryButton';
-
-  function check() {
-    axios.get(`/api/poker?action=game_action&session_id=${localStorage.CAESSINO_SESSION_ID}&specificAction=check&betAmount=0`);
-  }
-
-  function call() {
-    axios.get(`/api/poker?action=game_action&session_id=${localStorage.CAESSINO_SESSION_ID}&specificAction=call&betAmount=0`);
-  }
-
-  function raise() {
-    dispatch(setPoker({
-        ...styleState.poker,
-        displays: {
-            ...styleState.poker.displays,
-            raiseModal: true,
-        },
-    }))
-  }
-
-  function fold() {
-    axios.get(`/api/poker?action=game_action&session_id=${localStorage.CAESSINO_SESSION_ID}&specificAction=fold&betAmount=0`);
-  }
-
-  if (playerState.pokerGame.table.started && playerState.pokerGame.player.isSatDown && parseInt(playerState.pokerGame.table.round) < 5) {
-    return (
-      <div className="pokerPlayButtonsContainer">
-        <button className={checkClass} onClick={() => check()}>Check</button>
-        <button className={callClass} onClick={() => call()}>Call</button>
-        <button className={raiseClass} onClick={() => raise()}>Raise</button>
-        <button className={foldClass} onClick={() => fold()}>Fold</button>
-      </div>
-    )
-  }
-  else {
-    return (
-      <div className="pokerPlayButtonsContainer">
-        {!playerState.pokerGame.table.started && !playerState.pokerGame.table.ended && playerState.pokerGame.player.isCoordinator && playerState.pokerGame.player.isSatDown && <button className="secondaryButton" onClick={() => startGame()}>Start game</button>}
-        {!playerState.pokerGame.table.started && !playerState.pokerGame.player.isSatDown && <button className="secondaryButton" onClick={() => sitDown()}>Take a seat</button>}
-      </div>
-    )
-  }
-}
-
-export default PlayButtons
Index: mponents/poker/sections/Pot.jsx
===================================================================
--- components/poker/sections/Pot.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,15 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const Pot = () => {
-    const playerState = useSelector(state => state.player);
-
-    return (
-        <div className="pokerPotContainer">
-            { playerState.pokerGame.table.started && <p>${playerState.pokerGame.table.pot}</p> }
-        </div>
-    )
-}
-
-export default Pot
Index: mponents/poker/sections/RaiseModal.jsx
===================================================================
--- components/poker/sections/RaiseModal.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,64 +1,0 @@
-import React from 'react'
-
-import { GiTwoCoins } from 'react-icons/gi'
-import { AiOutlineClose } from 'react-icons/ai'
-
-import { useSelector, useDispatch } from 'react-redux'
-
-import axios from 'axios';
-import { setPoker } from '../../../redux/reducers/styleSlice';
-
-const RaiseModal = () => {
-    const dispatch = useDispatch();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    function chooseBet(e) {
-        dispatch(setPoker({
-            ...styleState.poker,
-            inputControls: {
-                ...styleState.poker.inputControls,
-                raise: {
-                    ...styleState.poker.inputControls.bet,
-                    chosenCredits: parseInt(e.target.value),
-                }
-            }
-        }));
-    }
-
-    function raise() {
-        axios.get(`/api/poker?action=game_action&session_id=${localStorage.CAESSINO_SESSION_ID}&specificAction=raise&betAmount=${styleState.poker.inputControls.raise.chosenCredits}`);
-
-        closeModal();
-    }
-
-    function closeModal() {
-        dispatch(setPoker({
-            ...styleState.poker,
-            displays: {
-                ...styleState.poker.displays,
-                raiseModal: false,
-            },
-        }))
-    }
-
-    return (
-        <div className="pokerRaiseModal" style={{display: styleState.poker.displays.raiseModal ? 'flex' : 'none'}}>
-            <p>Please select the amount you will raise.</p>
-            <div>
-                <div>
-                    <input type="range" className="primarySlider" min={0} max={playerState.player.credits} step={1} value={styleState.poker.inputControls.raise.chosenCredits} onChange={(e) => chooseBet(e)} />
-                    <div style={{marginTop: '15px', marginBottom: '-30px'}}>
-                        <span>${styleState.poker.inputControls.raise.chosenCredits}</span>
-                    </div>
-                </div>
-                <button style={{marginTop: '50px'}} className="primaryButton" onClick={() => raise()}>Raise <GiTwoCoins style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-                <br/>
-                <button style={{position: 'absolute', bottom: '10%', left: '50%', transform: 'translateX(-50%)'}} className="tertiaryButton" onClick={() => closeModal()}>Cancel <AiOutlineClose style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-            </div>
-        </div>
-    )
-}
-
-export default RaiseModal
Index: mponents/roulette/Ball.jsx
===================================================================
--- components/roulette/Ball.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,17 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const Ball = () => {
-    const playerState = useSelector(state => state.player);
-
-    return (
-        <>
-            { (playerState.rouletteGame.game.timeToStart > playerState.rouletteGame.game.COUNTDOWN_FROM || playerState.rouletteGame.game.timeToStart <= 0) &&
-                <img id="rouletteBall" src="/images/roulette-ball.png" alt="Roulette ball"/>
-            }
-        </>
-    )
-}
-
-export default Ball
Index: mponents/roulette/BetModal.jsx
===================================================================
--- components/roulette/BetModal.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,64 +1,0 @@
-import React from 'react'
-
-import { GiTwoCoins } from 'react-icons/gi'
-import { AiOutlineClose } from 'react-icons/ai'
-
-import { useSelector, useDispatch } from 'react-redux'
-import { setRoulette } from '../../redux/reducers/styleSlice';
-
-import axios from 'axios';
-
-const BetModal = () => {
-    const dispatch = useDispatch();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    function chooseBet(e) {
-        dispatch(setRoulette({
-            ...styleState.roulette,
-            inputControls: {
-                ...styleState.roulette.inputControls,
-                bet: {
-                    ...styleState.roulette.inputControls.bet,
-                    chosenCredits: parseInt(e.target.value),
-                }
-            }
-        }));
-    }
-
-    function placeBet() {
-        axios.get(`/api/roulette?action=place_bet&session_id=${localStorage.CAESSINO_SESSION_ID}&betAmount=${styleState.roulette.inputControls.bet.chosenCredits}&whichBets=${styleState.roulette.whichBets.toString()}&coinPlacedX=${styleState.roulette.coinPlaced.x}&coinPlacedY=${styleState.roulette.coinPlaced.y}`);
-
-        closeModal();
-    }
-
-    function closeModal() {
-        dispatch(setRoulette({
-            ...styleState.roulette,
-            displays: {
-                ...styleState.roulette.displays,
-                betModal: false,
-            },
-        }));
-    }
-
-    return (
-        <div className="rouletteBetModal" style={{display: styleState.roulette.displays.betModal && playerState.rouletteGame.game.timeToStart > 10 && playerState.rouletteGame.game.timeToStart <= playerState.rouletteGame.game.COUNTDOWN_FROM ? 'flex' : 'none'}}>
-            <p>You have chosen to bet on: <span>{styleState.roulette.whichBets.map((bet, i) => `${bet} `)}</span><br/>Please select the amount you will bet</p>
-            <div>
-                <div>
-                    <input type="range" className="primarySlider" min={0} max={playerState.player.credits} step={1} value={styleState.roulette.inputControls.bet.chosenCredits} onChange={(e) => chooseBet(e)} />
-                    <div style={{marginTop: '15px', marginBottom: '-30px'}}>
-                        <span>${styleState.roulette.inputControls.bet.chosenCredits}</span>
-                    </div>
-                </div>
-                <button style={{marginTop: '50px'}} className="primaryButton" onClick={() => placeBet()}>Place Bet <GiTwoCoins style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-                <br/>
-                <button style={{position: 'absolute', bottom: '10%', left: '50%', transform: 'translateX(-50%)'}} className="tertiaryButton" onClick={() => closeModal()}>Cancel <AiOutlineClose style={{marginTop: '3px', marginBottom: '-3px'}} /></button>
-            </div>
-        </div>
-    )
-}
-
-export default BetModal
Index: mponents/roulette/BetsImage.jsx
===================================================================
--- components/roulette/BetsImage.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,309 +1,0 @@
-import React from 'react'
-
-import { useDispatch, useSelector } from 'react-redux';
-import { setRoulette } from '../../redux/reducers/styleSlice';
-
-const BetsImage = () => {
-    const dispatch = useDispatch();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    function selectWhichBet(e) {
-        const imgRect = document.getElementById('rouletteBetsImg').getBoundingClientRect();
-    
-        const coinOffset = 16;
-    
-        const xOffset = e.clientX - imgRect.x + coinOffset;
-        const yOffset = e.clientY - imgRect.y + coinOffset;
-    
-        const MULTIPLIER = 4;
-    
-        const singleX = imgRect.width / ( 14 * MULTIPLIER );
-        const singleY = imgRect.height / ( 4 * MULTIPLIER );
-    
-        let clicked = getClickedArray(xOffset, singleX, yOffset, singleY);
-
-        if (clicked.length > 0 && playerState.rouletteGame.game.status.includes("_1_")) {
-          if (playerState.rouletteGame.player.status.includes("_1_")) {
-            openModal(clicked, e);
-          }
-        }
-    }
-
-    function openModal(clicked, e) {
-      dispatch(setRoulette({
-        ...styleState.roulette,
-        whichBets: clicked,
-        displays: {
-          ...styleState.roulette.displays,
-          betModal: true,
-        },
-        coinPlaced: {
-          x: e.clientX + 16,
-          y: e.clientY + 16
-        }
-      }))
-    }
-
-    return (
-        <>
-            <img id="rouletteBetsImg" src="/images/roulette-bets.png" alt="Roulette bets" onClick={(e) => selectWhichBet(e)}/>
-        </>
-    )
-}
-
-
-function getClickedArray(xOffset, singleX, yOffset, singleY) {
-    let clicked = [];
-  
-    if (xOffset < 4 * singleX) {
-      if (yOffset < 3 * 4 * singleY) {
-        clicked = ['0']
-      }
-    }
-    else if (xOffset < 7 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['3']
-      else if (yOffset < 5 * singleY)     clicked = ['3', '2']
-      else if (yOffset < 7 * singleY)     clicked = ['2']
-      else if (yOffset < 8 * singleY)     clicked = ['2', '1']
-      else if (yOffset < 11 * singleY)    clicked = ['1']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    clicked = ['1-18']
-    }
-    else if (xOffset < 9 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['3', '6']
-      else if (yOffset < 5 * singleY)     clicked = ['3', '2', '6', '5']
-      else if (yOffset < 7 * singleY)     clicked = ['2', '5']
-      else if (yOffset < 8 * singleY)     clicked = ['2', '1', '5', '4']
-      else if (yOffset < 11 * singleY)    clicked = ['1', '4']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    clicked = ['1-18']
-    }
-    else if (xOffset < 11 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['6']
-      else if (yOffset < 5 * singleY)     clicked = ['6', '5']
-      else if (yOffset < 7 * singleY)     clicked = ['5']
-      else if (yOffset < 8 * singleY)     clicked = ['5', '4']
-      else if (yOffset < 11 * singleY)    clicked = ['4']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    clicked = ['1-18']
-    }
-    else if (xOffset < 13 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['6', '9']
-      else if (yOffset < 5 * singleY)     clicked = ['6', '5', '9', '8']
-      else if (yOffset < 7 * singleY)     clicked = ['5', '8']
-      else if (yOffset < 8 * singleY)     clicked = ['5', '4', '8', '7']
-      else if (yOffset < 11 * singleY)    clicked = ['4', '7']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    ;
-    }
-    else if (xOffset < 15 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['9']
-      else if (yOffset < 5 * singleY)     clicked = ['9', '8']
-      else if (yOffset < 7 * singleY)     clicked = ['8']
-      else if (yOffset < 8 * singleY)     clicked = ['8', '7']
-      else if (yOffset < 11 * singleY)    clicked = ['7']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    clicked = ['Even']
-    }
-    else if (xOffset < 17 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['9', '12']
-      else if (yOffset < 5 * singleY)     clicked = ['9', '8', '12', '11']
-      else if (yOffset < 7 * singleY)     clicked = ['8', '11']
-      else if (yOffset < 8 * singleY)     clicked = ['8', '7', '11', '10']
-      else if (yOffset < 11 * singleY)    clicked = ['7', '10']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    clicked = ['Even']
-    }
-    else if (xOffset < 19 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['12']
-      else if (yOffset < 5 * singleY)     clicked = ['12', '11']
-      else if (yOffset < 7 * singleY)     clicked = ['11']
-      else if (yOffset < 8 * singleY)     clicked = ['11', '10']
-      else if (yOffset < 11 * singleY)    clicked = ['10']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['1-12']
-      else if (yOffset < 16 * singleY)    clicked = ['Even']
-    }
-    else if (xOffset < 21 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['12', '15']
-      else if (yOffset < 5 * singleY)     clicked = ['12', '11', '15', '14']
-      else if (yOffset < 7 * singleY)     clicked = ['11', '14']
-      else if (yOffset < 8 * singleY)     clicked = ['11', '10', '14', '13']
-      else if (yOffset < 11 * singleY)    clicked = ['10', '13']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    ;
-      else if (yOffset < 16 * singleY)    ;
-    }
-    else if (xOffset < 23 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['15']
-      else if (yOffset < 5 * singleY)     clicked = ['15', '14']
-      else if (yOffset < 7 * singleY)     clicked = ['14']
-      else if (yOffset < 8 * singleY)     clicked = ['14', '13']
-      else if (yOffset < 11 * singleY)    clicked = ['13']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    clicked = ['Red']
-    }
-    else if (xOffset < 25 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['15', '18']
-      else if (yOffset < 5 * singleY)     clicked = ['15', '14', '18', '17']
-      else if (yOffset < 7 * singleY)     clicked = ['14', '17']
-      else if (yOffset < 8 * singleY)     clicked = ['14', '13', '17', '16']
-      else if (yOffset < 11 * singleY)    clicked = ['13', '16']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    clicked = ['Red']
-    }
-    else if (xOffset < 27 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['18']
-      else if (yOffset < 5 * singleY)     clicked = ['18', '17']
-      else if (yOffset < 7 * singleY)     clicked = ['17']
-      else if (yOffset < 8 * singleY)     clicked = ['17', '16']
-      else if (yOffset < 11 * singleY)    clicked = ['16']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    clicked = ['Red']
-    }
-    else if (xOffset < 29 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['18', '21']
-      else if (yOffset < 5 * singleY)     clicked = ['18', '17', '21', '20']
-      else if (yOffset < 7 * singleY)     clicked = ['17', '20']
-      else if (yOffset < 8 * singleY)     clicked = ['17', '16', '20', '19']
-      else if (yOffset < 11 * singleY)    clicked = ['16', '19']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    ;
-    }
-    else if (xOffset < 31 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['21']
-      else if (yOffset < 5 * singleY)     clicked = ['21', '20']
-      else if (yOffset < 7 * singleY)     clicked = ['20']
-      else if (yOffset < 8 * singleY)     clicked = ['20', '19']
-      else if (yOffset < 11 * singleY)    clicked = ['19']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    clicked = ['Black']
-    }
-    else if (xOffset < 33 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['21', '24']
-      else if (yOffset < 5 * singleY)     clicked = ['21', '20', '24', '23']
-      else if (yOffset < 7 * singleY)     clicked = ['20', '23']
-      else if (yOffset < 8 * singleY)     clicked = ['20', '19', '23', '22']
-      else if (yOffset < 11 * singleY)    clicked = ['19', '22']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    clicked = ['Black']
-    }
-    else if (xOffset < 35 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['24']
-      else if (yOffset < 5 * singleY)     clicked = ['24', '23']
-      else if (yOffset < 7 * singleY)     clicked = ['23']
-      else if (yOffset < 8 * singleY)     clicked = ['23', '22']
-      else if (yOffset < 11 * singleY)    clicked = ['22']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['13-24']
-      else if (yOffset < 16 * singleY)    clicked = ['Black']
-    }
-    else if (xOffset < 37 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['24', '27']
-      else if (yOffset < 5 * singleY)     clicked = ['24', '23', '27', '26']
-      else if (yOffset < 7 * singleY)     clicked = ['23', '26']
-      else if (yOffset < 8 * singleY)     clicked = ['23', '22', '26', '25']
-      else if (yOffset < 11 * singleY)    clicked = ['22', '25']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    ;
-      else if (yOffset < 16 * singleY)    ;
-    }
-    else if (xOffset < 39 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['27']
-      else if (yOffset < 5 * singleY)     clicked = ['27', '26']
-      else if (yOffset < 7 * singleY)     clicked = ['26']
-      else if (yOffset < 8 * singleY)     clicked = ['26', '25']
-      else if (yOffset < 11 * singleY)    clicked = ['25']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    clicked = ['Odd']
-    }
-    else if (xOffset < 41 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['27', '30']
-      else if (yOffset < 5 * singleY)     clicked = ['27', '26', '30', '29']
-      else if (yOffset < 7 * singleY)     clicked = ['26', '29']
-      else if (yOffset < 8 * singleY)     clicked = ['26', '25', '29', '28']
-      else if (yOffset < 11 * singleY)    clicked = ['25', '28']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    clicked = ['Odd']
-    }
-    else if (xOffset < 43 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['30']
-      else if (yOffset < 5 * singleY)     clicked = ['30', '29']
-      else if (yOffset < 7 * singleY)     clicked = ['29']
-      else if (yOffset < 8 * singleY)     clicked = ['29', '28']
-      else if (yOffset < 11 * singleY)    clicked = ['28']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    clicked = ['Odd']
-    }
-    else if (xOffset < 45 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['30', '33']
-      else if (yOffset < 5 * singleY)     clicked = ['30', '29', '33', '32']
-      else if (yOffset < 7 * singleY)     clicked = ['29', '32']
-      else if (yOffset < 8 * singleY)     clicked = ['29', '28', '32', '31']
-      else if (yOffset < 11 * singleY)    clicked = ['28', '31']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    ;
-    }
-    else if (xOffset < 47 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['33']
-      else if (yOffset < 5 * singleY)     clicked = ['33', '32']
-      else if (yOffset < 7 * singleY)     clicked = ['32']
-      else if (yOffset < 8 * singleY)     clicked = ['32', '31']
-      else if (yOffset < 11 * singleY)    clicked = ['31']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    clicked = ['19-36']
-    }
-    else if (xOffset < 49 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['33', '36']
-      else if (yOffset < 5 * singleY)     clicked = ['33', '32', '36', '35']
-      else if (yOffset < 7 * singleY)     clicked = ['32', '35']
-      else if (yOffset < 8 * singleY)     clicked = ['32', '31', '35', '34']
-      else if (yOffset < 11 * singleY)    clicked = ['31', '34']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    clicked = ['19-36']
-    }
-    else if (xOffset < 52 * singleX) {
-      if (yOffset < 3 * singleY)          clicked = ['36']
-      else if (yOffset < 5 * singleY)     clicked = ['36', '35']
-      else if (yOffset < 7 * singleY)     clicked = ['35']
-      else if (yOffset < 8 * singleY)     clicked = ['35', '34']
-      else if (yOffset < 11 * singleY)    clicked = ['34']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    clicked = ['25-36']
-      else if (yOffset < 16 * singleY)    clicked = ['19-36']
-    }
-    else {
-      if (yOffset < 3 * singleY)          clicked = ['Remainder0']
-      else if (yOffset < 5 * singleY)     ;
-      else if (yOffset < 7 * singleY)     clicked = ['Remainder2']
-      else if (yOffset < 8 * singleY)     ;
-      else if (yOffset < 11 * singleY)    clicked = ['Remainder1']
-      else if (yOffset < 12 * singleY)    ;
-      else if (yOffset < 14 * singleY)    ;
-      else if (yOffset < 16 * singleY)    ;
-    }
-  
-    return clicked;
-  }
-
-export default BetsImage
Index: mponents/roulette/CoinOnTable.jsx
===================================================================
--- components/roulette/CoinOnTable.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,15 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux';
-
-const CoinOnTable = () => {
-    const playerState = useSelector(state => state.player);
-
-    return (
-        <>
-            {playerState.rouletteGame?.player.coinPlaced.x && playerState.rouletteGame.player.coinPlaced.x !== -1 && <img id="coinOnTable" src="/gold-coin.cur" alt="Gold coin" style={{zIndex: 20, position: 'absolute', left: `${playerState.rouletteGame.player.coinPlaced.x}px`, top: `${playerState.rouletteGame.player.coinPlaced.y}px`, transform: 'translate(-50%, -50%)'}}/>}
-        </>
-    )
-}
-
-export default CoinOnTable
Index: mponents/roulette/PlayersDisplay.jsx
===================================================================
--- components/roulette/PlayersDisplay.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,52 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const PlayersDisplay = () => {
-    const playerState = useSelector(state => state.player);
-
-    // See results.
-    if (playerState.rouletteGame.game.timeToStart > playerState.rouletteGame.game.COUNTDOWN_FROM) {
-        return (
-            <div className="roulettePlayersContainer">
-                <div>
-                    <p>Winners:</p>
-                    <hr/>
-                    {playerState.rouletteGame?.game.players.map((player, i) => (
-                        player.betAmount > 0 && player.outcome === 'won' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span></p> : <span key={player + i}></span>
-                    ))}
-                </div>
-                <div>
-                    <p>Losers:</p>
-                    <hr/>
-                    {playerState.rouletteGame?.game.players.map((player, i) => (
-                        player.betAmount > 0 && player.outcome === 'lost' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span></p> : <span key={player + i}></span>
-                    ))}
-                </div>
-            </div>
-        )
-    }
-    // See who betted.
-    else {
-        return (
-            <div className="roulettePlayersContainer">
-                <div>
-                    <p>Online:</p>
-                    <hr/>
-                    {playerState.rouletteGame?.game.players.map((player, i) => (
-                        player.status.substr(1, 1) === '1' ? <p key={player + i}>{player.name}</p> : <span key={player + i}></span>
-                    ))}
-                </div>
-                <div>
-                    <p>Betted:</p>
-                    <hr/>
-                    {playerState.rouletteGame?.game.players.map((player, i) => (
-                        player.status.substr(1, 1) === '2' ? <p key={player + i}>{player.name} <span style={{color: '#ead24d'}}>[{player.whichBets.toString()}]</span></p> : <span key={player + i}></span>
-                    ))}
-                </div>
-            </div>
-        )
-    }
-}
-
-export default PlayersDisplay
Index: mponents/roulette/Roulette.jsx
===================================================================
--- components/roulette/Roulette.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,34 +1,0 @@
-import React from 'react'
-
-import Head from 'next/head'
-
-import RouletteHeader from './RouletteHeader'
-import Loading from '../Loading'
-import Alert from '../Alert'
-import Notification from '../Notification'
-import Sections from './Sections'
-import LostConnection from '../LostConnection'
-
-const Roulette = () => {
-  return (
-    <div className="app rouletteMainContainer">
-      <Head>
-        <title>Caessino - Roulette</title>
-      </Head>
-
-      <RouletteHeader/>
-
-      <Sections/>
-
-      <Loading/>
-
-      <Alert onTop="true"/>
-
-      <Notification/>
-
-      <LostConnection/>
-    </div>
-  )
-}
-
-export default Roulette
Index: mponents/roulette/RouletteHeader.jsx
===================================================================
--- components/roulette/RouletteHeader.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,167 +1,0 @@
-/* eslint-disable @next/next/no-html-link-for-pages */
-import React from 'react'
-
-import Link from 'next/link'
-
-import { useRouter } from 'next/router'
-
-import { AiOutlineArrowLeft } from 'react-icons/ai'
-
-import { useEffect, useState } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-
-import { setRouletteGame, setPlayer } from '../../redux/reducers/playerSlice'
-import { setRoulette, setStyle } from '../../redux/reducers/styleSlice'
-
-import axios from 'axios';
-
-const RouletteHeader = () => {
-    const dispatch = useDispatch();
-
-    const router = useRouter();
-
-    const playerState = useSelector(state => state.player);
-    const styleState = useSelector(state => state.style);
-
-    useEffect(() => {
-        function spin_wheel(magicNumber, winningBets) {
-            document.getElementById('rouletteWheelImg').classList.add('spin');
-    
-            setTimeout(() => {
-                document.getElementById('rouletteWheelImg').classList.remove('spin');
-    
-                const extraSpin = ( 5 + numbersOfWheel.indexOf(playerState.rouletteGame.game?.magicNumber) * (360 / 37.0) ) + 'deg';
-                document.getElementById('rouletteWheelImg').style.transform = `translate(-50%, -50%) rotateZ(${extraSpin})`;
-    
-                setTimeout(() => {
-                    dispatch(setStyle({
-                        ...styleState.style,
-                        alert: {
-                            show: true,
-                            title: `Winning number: ${magicNumber}`,
-                            subtitle: `Winning bets: [${winningBets.join(', ')}]`,
-                            button: {
-                                text: 'Continue',
-                                action: '',
-                            }
-                        }
-                    }))
-                }, 2000);
-            }, 4000);
-        }
-
-        // display loading screen
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }));
-
-        let interval = null;
-
-        axios.get(`/api/roulette?action=get_player_info_on_enter&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(res => {
-            if (res.data?.success) {
-                dispatch(setPlayer({
-                    ...playerState.player,
-                    displayName: res.data?.displayName,
-                    session_id: res.data?.session_id,
-                    credits: res.data?.credits,
-                }));
-
-                interval = setInterval(() => {
-                    axios.get(`/api/roulette?action=update_state&session_id=${localStorage.CAESSINO_SESSION_ID}`).then(newRes => {
-                        if (newRes.data?.success) {
-                            dispatch(setRouletteGame(newRes.data?.rouletteGame));
-
-                            if (newRes.data?.extraAction === "spin_wheel") {
-                                spin_wheel(newRes.data.magicNumber ?? -1, newRes.data.winningBets ?? -1);
-                            }
-
-                            if (newRes.data?.rouletteGame?.player?.credits !== playerState.player.credits && newRes.data?.rouletteGame?.player?.credits >= 0) {
-                                dispatch(setPlayer({
-                                    ...playerState.player,
-                                    displayName: res.data?.displayName,
-                                    session_id: res.data?.session_id,
-                                    credits: newRes.data?.rouletteGame?.player?.credits,
-                                }))
-                            }
-                        }
-
-                        if (newRes.data?.extraAction !== "spin_wheel" && newRes.data?.extraAction2 !== "keep_alert") {
-                            dispatch(setStyle({
-                                ...styleState.style,
-                                displayLoadingScreen: false,
-                                notification: {
-                                    ...styleState.style.notification,
-                                    show: false,
-                                },
-                                lostConnectionInfo: {
-                                    show: false,
-                                    message: ''
-                                }
-                            }))
-                        }
-                    }).catch(error => {
-                        dispatch(setStyle({
-                            ...styleState.style,
-                            displayLoadingScreen: false,
-                            lostConnectionInfo: {
-                                show: true,
-                                message: 'Game will resume upon reconnection to the server.'
-                            }
-                        }))
-                    });
-                }, 1000);
-
-                dispatch(setRoulette({
-                    ...styleState.roulette,
-                    inputControls: {
-                        ...styleState.roulette.inputControls,
-                        bet: {
-                            ...styleState.roulette.inputControls.bet,
-                            chosenCredits: parseInt(res.data?.credits/2),
-                        }
-                    },
-                    showCoin: false,
-                }));
-            }
-            else {
-                dispatch(setStyle({
-                    ...styleState.style,
-                    notification: {
-                        show: true,
-                        text: 'Please login in order to play roulette.',
-                        status: 'error',
-                    },
-                    displayLoadingScreen: false,
-                }))
-
-                router.push('/');
-            }
-        });
-
-        return () => {
-            if (interval !== null) clearInterval(interval);
-        };
-    }, []);
-
-    return (
-        <header className="header">
-            <a href="/">
-                <h2>
-                    <AiOutlineArrowLeft />
-                </h2>
-            </a>
-            <nav>
-                <ul>
-                    <li>Hi, {playerState?.player?.displayName}</li>
-                    <li>Balance: ${playerState?.player?.credits}</li>
-                </ul>
-            </nav>
-        </header>
-    )
-}
-
-// 10 starts from 5deg
-const numbersOfWheel = [10, 23, 8, 30, 11, 36, 13, 27, 6, 34, 17, 25, 2, 21, 4, 19, 15, 32, 0, 26, 3, 35, 12, 28, 7, 29, 18, 22, 9, 31, 14, 20, 1, 33, 16, 24, 5];
-
-export default RouletteHeader
Index: mponents/roulette/Sections.jsx
===================================================================
--- components/roulette/Sections.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,33 +1,0 @@
-import React from 'react'
-import Ball from './Ball';
-
-import BetModal from './BetModal';
-import BetsImage from './BetsImage';
-import CoinOnTable from './CoinOnTable';
-import PlayersDisplay from './PlayersDisplay';
-import Timer from './Timer';
-
-const Sections = () => {
-
-  return (
-    <>
-        <p className="rouletteInfoText">Please click on the number(s) you wish to bet on and select the amount you&apos;ll bet.<br/>Then, wait for the timer to go down to 0, and the wheel will spin. Best of luck 🍀</p>
-
-        <BetsImage/>
-
-        <CoinOnTable/>
-
-        <img id="rouletteWheelImg" src="/images/roulette-wheel.png" alt="Roulette wheel" style={{transform: 'translate(-50%, -50%)'}}/>
-
-        <Ball/>
-
-        <PlayersDisplay/>
-
-        <Timer/>
-
-        <BetModal/>
-    </>
-  )
-}
-
-export default Sections
Index: mponents/roulette/Timer.jsx
===================================================================
--- components/roulette/Timer.jsx	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,32 +1,0 @@
-import React from 'react'
-
-import { useSelector } from 'react-redux'
-
-const Timer = () => {
-    const playerState = useSelector(state => state.player);
-
-    function getTimer() {
-        const timer = playerState.rouletteGame.game.timeToStart;
-
-        const timeString = (timer < 0 || timer > playerState.rouletteGame.game.COUNTDOWN_FROM - 2) ? '00:00' : '0' + parseInt(timer/60) + ':' + (timer%60 < 10 ? '0' : '') + (timer%60);
-
-        return timeString;
-    }
-
-    return (
-        <div className="rouletteTimer">
-            {playerState.rouletteGame.game.timeToStart > 0 && playerState.rouletteGame.game.timeToStart <= playerState.rouletteGame.game.COUNTDOWN_FROM - 2 && <span style={{fontSize: '1rem'}}>Wheel will spin in:</span>}
-            
-            <span>{getTimer()}</span>
-
-            {playerState.rouletteGame.game.timeToStart > 10 && playerState.rouletteGame.game.timeToStart <= playerState.rouletteGame.game.COUNTDOWN_FROM - 2 && <span style={{fontSize: '1rem'}}>Make your bets.</span>}
-
-            {playerState.rouletteGame.game.timeToStart <= 10 && <span style={{fontSize: '1rem'}}>Betting time is over.</span>}
-
-            {playerState.rouletteGame.game.timeToStart > playerState.rouletteGame.game.COUNTDOWN_FROM && <span style={{fontSize: '1rem'}}>Time to see who won :)</span>}
-            {playerState.rouletteGame.game.timeToStart > playerState.rouletteGame.game.COUNTDOWN_FROM && <span style={{fontSize: '.7rem'}}>(And prepare, you can bet again soon.)</span>}
-        </div>
-    )
-}
-
-export default Timer
Index: cker-compose.yml
===================================================================
--- docker-compose.yml	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,25 +1,0 @@
-version: "3.7"
-services:
-  db:
-    build:
-      context: .
-      dockerfile: docker_db.Dockerfile
-    restart: always
-    ports:
-      - 4321:5432
-    volumes:
-      - pgdata:/var/lib/postgresql/data
-    environment:
-      POSTGRES_DB: postgres
-      POSTGRES_PASSWORD: postgres
-      POSTGRES_USER: postgres
-  server:
-    build:
-      context: .
-      dockerfile: docker_server.Dockerfile
-    restart: always
-    ports:
-      - 3000:3000
-
-volumes: 
-  pgdata:
Index: cker_db.Dockerfile
===================================================================
--- docker_db.Dockerfile	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,3 +1,0 @@
-FROM postgres
-
-COPY dummy_database.sql /usr/local/app/dummy_database.sql
Index: cker_server.Dockerfile
===================================================================
--- docker_server.Dockerfile	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,11 +1,0 @@
-FROM node:18
-
-COPY . /usr/local/app
-
-WORKDIR /usr/local/app
-
-RUN yarn install
-
-RUN yarn run build
-
-CMD [ "yarn", "run", "start" ]
Index: next.config.js
===================================================================
--- next.config.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ next.config.js	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -2,10 +2,4 @@
 const nextConfig = {
   reactStrictMode: true,
-  
-  webpack: (config) => {
-    config.experiments = config.experiments || {}
-    config.experiments.topLevelAwait = true
-    return config
-  },
 }
 
Index: ckage-lock.json
===================================================================
--- package-lock.json	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,6212 +1,0 @@
-{
-  "name": "caessino2",
-  "version": "0.1.0",
-  "lockfileVersion": 2,
-  "requires": true,
-  "packages": {
-    "": {
-      "name": "caessino2",
-      "version": "0.1.0",
-      "dependencies": {
-        "@arctext/react": "^1.0.0",
-        "@reduxjs/toolkit": "^1.8.1",
-        "axios": "^0.27.2",
-        "crypto": "^1.0.1",
-        "dotenv": "^16.0.0",
-        "next": "12.1.6",
-        "next-auth": "^4.10.0",
-        "nodemailer": "^6.7.7",
-        "pg": "^8.7.3",
-        "react": "18.1.0",
-        "react-dom": "18.1.0",
-        "react-icons": "^4.3.1",
-        "react-redux": "^8.0.1",
-        "socket.io": "^4.5.1",
-        "socket.io-client": "^4.5.1",
-        "uuid": "^8.3.2"
-      },
-      "devDependencies": {
-        "eslint": "8.15.0",
-        "eslint-config-next": "12.1.6"
-      }
-    },
-    "node_modules/@arctext/react": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@arctext/react/-/react-1.0.0.tgz",
-      "integrity": "sha512-K+dKaSOjjHs/6dw2gS0dWFOzGI28sqa3o1KOLMB48t8KRdulnh5QtPb33+C/ryWDV1eteIQM0Zi4ZDyEu7ES0g==",
-      "peerDependencies": {
-        "react": "^17.0.2"
-      }
-    },
-    "node_modules/@babel/runtime": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
-      "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
-      "dependencies": {
-        "regenerator-runtime": "^0.13.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/runtime-corejs3": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz",
-      "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==",
-      "dev": true,
-      "dependencies": {
-        "core-js-pure": "^3.20.2",
-        "regenerator-runtime": "^0.13.4"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@eslint/eslintrc": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz",
-      "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.3.2",
-        "globals": "^13.9.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"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.9.5",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
-      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
-      "dev": true,
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^1.2.1",
-        "debug": "^4.1.1",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=10.10.0"
-      }
-    },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
-      "dev": true
-    },
-    "node_modules/@next/env": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.6.tgz",
-      "integrity": "sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA=="
-    },
-    "node_modules/@next/eslint-plugin-next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz",
-      "integrity": "sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw==",
-      "dev": true,
-      "dependencies": {
-        "glob": "7.1.7"
-      }
-    },
-    "node_modules/@next/eslint-plugin-next/node_modules/glob": {
-      "version": "7.1.7",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@next/swc-android-arm-eabi": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz",
-      "integrity": "sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-android-arm64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz",
-      "integrity": "sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-darwin-arm64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz",
-      "integrity": "sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-darwin-x64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz",
-      "integrity": "sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm-gnueabihf": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz",
-      "integrity": "sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw==",
-      "cpu": [
-        "arm"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm64-gnu": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz",
-      "integrity": "sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-arm64-musl": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz",
-      "integrity": "sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-x64-gnu": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz",
-      "integrity": "sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-linux-x64-musl": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz",
-      "integrity": "sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-arm64-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz",
-      "integrity": "sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g==",
-      "cpu": [
-        "arm64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-ia32-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz",
-      "integrity": "sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA==",
-      "cpu": [
-        "ia32"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@next/swc-win32-x64-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz",
-      "integrity": "sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA==",
-      "cpu": [
-        "x64"
-      ],
-      "optional": true,
-      "os": [
-        "win32"
-      ],
-      "engines": {
-        "node": ">= 10"
-      }
-    },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@panva/hkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz",
-      "integrity": "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA==",
-      "funding": {
-        "url": "https://github.com/sponsors/panva"
-      }
-    },
-    "node_modules/@reduxjs/toolkit": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.1.tgz",
-      "integrity": "sha512-Q6mzbTpO9nOYRnkwpDlFOAbQnd3g7zj7CtHAZWz5SzE5lcV97Tf8f3SzOO8BoPOMYBFgfZaqTUZqgGu+a0+Fng==",
-      "dependencies": {
-        "immer": "^9.0.7",
-        "redux": "^4.1.2",
-        "redux-thunk": "^2.4.1",
-        "reselect": "^4.1.5"
-      },
-      "peerDependencies": {
-        "react": "^16.9.0 || ^17.0.0 || ^18",
-        "react-redux": "^7.2.1 || ^8.0.0-beta"
-      },
-      "peerDependenciesMeta": {
-        "react": {
-          "optional": true
-        },
-        "react-redux": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@rushstack/eslint-patch": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz",
-      "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==",
-      "dev": true
-    },
-    "node_modules/@socket.io/component-emitter": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-      "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
-    },
-    "node_modules/@types/component-emitter": {
-      "version": "1.2.11",
-      "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
-      "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
-    },
-    "node_modules/@types/cookie": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
-      "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
-    },
-    "node_modules/@types/cors": {
-      "version": "2.8.12",
-      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
-      "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
-    },
-    "node_modules/@types/hoist-non-react-statics": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
-      "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
-      "dependencies": {
-        "@types/react": "*",
-        "hoist-non-react-statics": "^3.3.0"
-      }
-    },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
-      "dev": true
-    },
-    "node_modules/@types/node": {
-      "version": "18.0.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz",
-      "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA=="
-    },
-    "node_modules/@types/prop-types": {
-      "version": "15.7.5",
-      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
-      "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
-    },
-    "node_modules/@types/react": {
-      "version": "18.0.9",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
-      "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==",
-      "dependencies": {
-        "@types/prop-types": "*",
-        "@types/scheduler": "*",
-        "csstype": "^3.0.2"
-      }
-    },
-    "node_modules/@types/scheduler": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
-      "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
-    },
-    "node_modules/@types/use-sync-external-store": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
-      "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
-    },
-    "node_modules/@typescript-eslint/parser": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz",
-      "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "5.22.0",
-        "@typescript-eslint/types": "5.22.0",
-        "@typescript-eslint/typescript-estree": "5.22.0",
-        "debug": "^4.3.2"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz",
-      "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.22.0",
-        "@typescript-eslint/visitor-keys": "5.22.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz",
-      "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz",
-      "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.22.0",
-        "@typescript-eslint/visitor-keys": "5.22.0",
-        "debug": "^4.3.2",
-        "globby": "^11.0.4",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
-      "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
-      "bin": {
-        "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz",
-      "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.22.0",
-        "eslint-visitor-keys": "^3.0.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/accepts": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
-      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
-      "dependencies": {
-        "mime-types": "~2.1.34",
-        "negotiator": "0.6.3"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/acorn": {
-      "version": "8.7.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
-      "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
-      "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "peerDependencies": {
-        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
-      }
-    },
-    "node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "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"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true
-    },
-    "node_modules/aria-query": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
-      "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/runtime": "^7.10.2",
-        "@babel/runtime-corejs3": "^7.10.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      }
-    },
-    "node_modules/array-includes": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
-      "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5",
-        "get-intrinsic": "^1.1.1",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
-      "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.2",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
-      "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.2",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/ast-types-flow": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
-      "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
-      "dev": true
-    },
-    "node_modules/asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-    },
-    "node_modules/axe-core": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
-      "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/axios": {
-      "version": "0.27.2",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
-      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
-      "dependencies": {
-        "follow-redirects": "^1.14.9",
-        "form-data": "^4.0.0"
-      }
-    },
-    "node_modules/axobject-query": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
-      "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
-      "dev": true
-    },
-    "node_modules/balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "node_modules/base64id": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
-      "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
-      "engines": {
-        "node": "^4.5.0 || >= 5.9"
-      }
-    },
-    "node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "dependencies": {
-        "fill-range": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/buffer-writer": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
-      "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/caniuse-lite": {
-      "version": "1.0.30001338",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz",
-      "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-        }
-      ]
-    },
-    "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/combined-stream": {
-      "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"
-      },
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/component-emitter": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
-    },
-    "node_modules/concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "node_modules/cookie": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
-      "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/core-js-pure": {
-      "version": "3.22.4",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.4.tgz",
-      "integrity": "sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/core-js"
-      }
-    },
-    "node_modules/cors": {
-      "version": "2.8.5",
-      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-      "dependencies": {
-        "object-assign": "^4",
-        "vary": "^1"
-      },
-      "engines": {
-        "node": ">= 0.10"
-      }
-    },
-    "node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/crypto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
-      "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==",
-      "deprecated": "This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in."
-    },
-    "node_modules/csstype": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
-      "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
-    },
-    "node_modules/damerau-levenshtein": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
-      "dev": true
-    },
-    "node_modules/debug": {
-      "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"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/deep-is": {
-      "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==",
-      "dev": true
-    },
-    "node_modules/define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
-      "dev": true,
-      "dependencies": {
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/dotenv": {
-      "version": "16.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz",
-      "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==",
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/engine.io": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
-      "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
-      "dependencies": {
-        "@types/cookie": "^0.4.1",
-        "@types/cors": "^2.8.12",
-        "@types/node": ">=10.0.0",
-        "accepts": "~1.3.4",
-        "base64id": "2.0.0",
-        "cookie": "~0.4.1",
-        "cors": "~2.8.5",
-        "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
-        "ws": "~8.2.3"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/engine.io-client": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.2.tgz",
-      "integrity": "sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ==",
-      "dependencies": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
-        "ws": "~8.2.3",
-        "xmlhttprequest-ssl": "~2.0.0"
-      }
-    },
-    "node_modules/engine.io-parser": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
-      "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/es-abstract": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz",
-      "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.1.1",
-        "get-symbol-description": "^1.0.0",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.3",
-        "is-callable": "^1.2.4",
-        "is-negative-zero": "^2.0.2",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
-        "is-string": "^1.0.7",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.0",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.2",
-        "regexp.prototype.flags": "^1.4.1",
-        "string.prototype.trimend": "^1.0.5",
-        "string.prototype.trimstart": "^1.0.5",
-        "unbox-primitive": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/eslint": {
-      "version": "8.15.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz",
-      "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==",
-      "dev": true,
-      "dependencies": {
-        "@eslint/eslintrc": "^1.2.3",
-        "@humanwhocodes/config-array": "^0.9.2",
-        "ajv": "^6.10.0",
-        "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.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.3.2",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^6.0.1",
-        "globals": "^13.6.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "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.1",
-        "regexpp": "^3.2.0",
-        "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "bin": {
-        "eslint": "bin/eslint.js"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/eslint-config-next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.1.6.tgz",
-      "integrity": "sha512-qoiS3g/EPzfCTkGkaPBSX9W0NGE/B1wNO3oWrd76QszVGrdpLggNqcO8+LR6MB0CNqtp9Q8NoeVrxNVbzM9hqA==",
-      "dev": true,
-      "dependencies": {
-        "@next/eslint-plugin-next": "12.1.6",
-        "@rushstack/eslint-patch": "^1.1.3",
-        "@typescript-eslint/parser": "^5.21.0",
-        "eslint-import-resolver-node": "^0.3.6",
-        "eslint-import-resolver-typescript": "^2.7.1",
-        "eslint-plugin-import": "^2.26.0",
-        "eslint-plugin-jsx-a11y": "^6.5.1",
-        "eslint-plugin-react": "^7.29.4",
-        "eslint-plugin-react-hooks": "^4.5.0"
-      },
-      "peerDependencies": {
-        "eslint": "^7.23.0 || ^8.0.0",
-        "next": ">=10.2.0",
-        "typescript": ">=3.3.1"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
-      "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^3.2.7",
-        "resolve": "^1.20.0"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true
-    },
-    "node_modules/eslint-import-resolver-typescript": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
-      "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^4.3.4",
-        "glob": "^7.2.0",
-        "is-glob": "^4.0.3",
-        "resolve": "^1.22.0",
-        "tsconfig-paths": "^3.14.1"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "*",
-        "eslint-plugin-import": "*"
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
-      "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
-      "dev": true,
-      "dependencies": {
-        "debug": "^3.2.7",
-        "find-up": "^2.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true
-    },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.26.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
-      "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.4",
-        "array.prototype.flat": "^1.2.5",
-        "debug": "^2.6.9",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.6",
-        "eslint-module-utils": "^2.7.3",
-        "has": "^1.0.3",
-        "is-core-module": "^2.8.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.values": "^1.1.5",
-        "resolve": "^1.22.0",
-        "tsconfig-paths": "^3.14.1"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.0.0"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-      "dev": true
-    },
-    "node_modules/eslint-plugin-jsx-a11y": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
-      "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
-      "dev": true,
-      "dependencies": {
-        "@babel/runtime": "^7.16.3",
-        "aria-query": "^4.2.2",
-        "array-includes": "^3.1.4",
-        "ast-types-flow": "^0.0.7",
-        "axe-core": "^4.3.5",
-        "axobject-query": "^2.2.0",
-        "damerau-levenshtein": "^1.0.7",
-        "emoji-regex": "^9.2.2",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^3.2.1",
-        "language-tags": "^1.0.5",
-        "minimatch": "^3.0.4"
-      },
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-react": {
-      "version": "7.29.4",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz",
-      "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.4",
-        "array.prototype.flatmap": "^1.2.5",
-        "doctrine": "^2.1.0",
-        "estraverse": "^5.3.0",
-        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-        "minimatch": "^3.1.2",
-        "object.entries": "^1.1.5",
-        "object.fromentries": "^2.0.5",
-        "object.hasown": "^1.1.0",
-        "object.values": "^1.1.5",
-        "prop-types": "^15.8.1",
-        "resolve": "^2.0.0-next.3",
-        "semver": "^6.3.0",
-        "string.prototype.matchall": "^4.0.6"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-react-hooks": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz",
-      "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
-      }
-    },
-    "node_modules/eslint-plugin-react/node_modules/resolve": {
-      "version": "2.0.0-next.3",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
-      "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/eslint-scope": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
-      "dev": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "dependencies": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "engines": {
-        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      },
-      "peerDependencies": {
-        "eslint": ">=5"
-      }
-    },
-    "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/eslint-visitor-keys": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/eslint/node_modules/doctrine": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-      "dev": true,
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/espree": {
-      "version": "9.3.2",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
-      "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
-      "dev": true,
-      "dependencies": {
-        "acorn": "^8.7.1",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      }
-    },
-    "node_modules/esquery": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
-      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=0.10"
-      }
-    },
-    "node_modules/esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "dependencies": {
-        "estraverse": "^5.2.0"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/fast-deep-equal": {
-      "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==",
-      "dev": true
-    },
-    "node_modules/fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
-      "dev": true,
-      "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"
-      },
-      "engines": {
-        "node": ">=8.6.0"
-      }
-    },
-    "node_modules/fast-glob/node_modules/glob-parent": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fast-json-stable-stringify": {
-      "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==",
-      "dev": true
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "node_modules/fastq": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
-      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
-      "dev": true,
-      "dependencies": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "node_modules/file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-      "dev": true,
-      "dependencies": {
-        "flat-cache": "^3.0.4"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "dependencies": {
-        "to-regex-range": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-      "dev": true,
-      "dependencies": {
-        "flatted": "^3.1.0",
-        "rimraf": "^3.0.2"
-      },
-      "engines": {
-        "node": "^10.12.0 || >=12.0.0"
-      }
-    },
-    "node_modules/flatted": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
-      "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
-      "dev": true
-    },
-    "node_modules/follow-redirects": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
-      "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==",
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://github.com/sponsors/RubenVerborgh"
-        }
-      ],
-      "engines": {
-        "node": ">=4.0"
-      },
-      "peerDependenciesMeta": {
-        "debug": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/form-data": {
-      "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"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "node_modules/function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
-      "dev": true
-    },
-    "node_modules/functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-intrinsic": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
-      "dev": true,
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "dependencies": {
-        "is-glob": "^4.0.3"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
-    "node_modules/globals": {
-      "version": "13.14.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.14.0.tgz",
-      "integrity": "sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg==",
-      "dev": true,
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "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"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "dependencies": {
-        "function-bind": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "node_modules/has-bigints": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-      "dev": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "dependencies": {
-        "react-is": "^16.7.0"
-      }
-    },
-    "node_modules/ignore": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 4"
-      }
-    },
-    "node_modules/immer": {
-      "version": "9.0.12",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz",
-      "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/immer"
-      }
-    },
-    "node_modules/import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dev": true,
-      "dependencies": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.19"
-      }
-    },
-    "node_modules/inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "dependencies": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "node_modules/inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "node_modules/internal-slot": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
-      "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
-      "dev": true,
-      "dependencies": {
-        "get-intrinsic": "^1.1.0",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-      "dev": true,
-      "dependencies": {
-        "has-bigints": "^1.0.1"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-callable": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
-      "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-core-module": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
-      "dev": true,
-      "dependencies": {
-        "has": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "dependencies": {
-        "is-extglob": "^2.1.1"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
-    "node_modules/is-number-object": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-      "dev": true,
-      "dependencies": {
-        "has-tostringtag": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-      "dev": true,
-      "dependencies": {
-        "has-symbols": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "node_modules/jose": {
-      "version": "4.8.3",
-      "resolved": "https://registry.npmjs.org/jose/-/jose-4.8.3.tgz",
-      "integrity": "sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g==",
-      "funding": {
-        "url": "https://github.com/sponsors/panva"
-      }
-    },
-    "node_modules/js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
-    "node_modules/js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "dependencies": {
-        "argparse": "^2.0.1"
-      },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
-      }
-    },
-    "node_modules/json-schema-traverse": {
-      "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==",
-      "dev": true
-    },
-    "node_modules/json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
-      "dev": true
-    },
-    "node_modules/json5": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
-    "node_modules/jsx-ast-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz",
-      "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==",
-      "dev": true,
-      "dependencies": {
-        "array-includes": "^3.1.4",
-        "object.assign": "^4.1.2"
-      },
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/language-subtag-registry": {
-      "version": "0.3.21",
-      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
-      "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
-      "dev": true
-    },
-    "node_modules/language-tags": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
-      "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
-      "dev": true,
-      "dependencies": {
-        "language-subtag-registry": "~0.3.2"
-      }
-    },
-    "node_modules/levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "node_modules/loose-envify": {
-      "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"
-      },
-      "bin": {
-        "loose-envify": "cli.js"
-      }
-    },
-    "node_modules/lru-cache": {
-      "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"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-      "dev": true,
-      "dependencies": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
-      },
-      "engines": {
-        "node": ">=8.6"
-      }
-    },
-    "node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/mime-types": {
-      "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"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
-    "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-      "dev": true
-    },
-    "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-    },
-    "node_modules/nanoid": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
-      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
-      "dev": true
-    },
-    "node_modules/negotiator": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
-      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/next/-/next-12.1.6.tgz",
-      "integrity": "sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==",
-      "dependencies": {
-        "@next/env": "12.1.6",
-        "caniuse-lite": "^1.0.30001332",
-        "postcss": "8.4.5",
-        "styled-jsx": "5.0.2"
-      },
-      "bin": {
-        "next": "dist/bin/next"
-      },
-      "engines": {
-        "node": ">=12.22.0"
-      },
-      "optionalDependencies": {
-        "@next/swc-android-arm-eabi": "12.1.6",
-        "@next/swc-android-arm64": "12.1.6",
-        "@next/swc-darwin-arm64": "12.1.6",
-        "@next/swc-darwin-x64": "12.1.6",
-        "@next/swc-linux-arm-gnueabihf": "12.1.6",
-        "@next/swc-linux-arm64-gnu": "12.1.6",
-        "@next/swc-linux-arm64-musl": "12.1.6",
-        "@next/swc-linux-x64-gnu": "12.1.6",
-        "@next/swc-linux-x64-musl": "12.1.6",
-        "@next/swc-win32-arm64-msvc": "12.1.6",
-        "@next/swc-win32-ia32-msvc": "12.1.6",
-        "@next/swc-win32-x64-msvc": "12.1.6"
-      },
-      "peerDependencies": {
-        "fibers": ">= 3.1.0",
-        "node-sass": "^6.0.0 || ^7.0.0",
-        "react": "^17.0.2 || ^18.0.0-0",
-        "react-dom": "^17.0.2 || ^18.0.0-0",
-        "sass": "^1.3.0"
-      },
-      "peerDependenciesMeta": {
-        "fibers": {
-          "optional": true
-        },
-        "node-sass": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/next-auth": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.10.0.tgz",
-      "integrity": "sha512-4CKZbv9VeCaqfDAXyqFThZy05ApbLd0bhXEB+DCq9aD43h6Rkvz0QgM7QOCJXESy0QKJUXHzopkBq+iaGxdc0g==",
-      "dependencies": {
-        "@babel/runtime": "^7.16.3",
-        "@panva/hkdf": "^1.0.1",
-        "cookie": "^0.4.1",
-        "jose": "^4.3.7",
-        "oauth": "^0.9.15",
-        "openid-client": "^5.1.0",
-        "preact": "^10.6.3",
-        "preact-render-to-string": "^5.1.19",
-        "uuid": "^8.3.2"
-      },
-      "engines": {
-        "node": "^12.19.0 || ^14.15.0 || ^16.13.0"
-      },
-      "peerDependencies": {
-        "nodemailer": "^6.6.5",
-        "react": "^17.0.2 || ^18",
-        "react-dom": "^17.0.2 || ^18"
-      },
-      "peerDependenciesMeta": {
-        "nodemailer": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/nodemailer": {
-      "version": "6.7.7",
-      "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz",
-      "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA==",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/oauth": {
-      "version": "0.9.15",
-      "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
-      "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
-    },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/object-hash": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
-      "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
-      "engines": {
-        "node": ">= 6"
-      }
-    },
-    "node_modules/object-inspect": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
-      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
-        "object-keys": "^1.1.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.entries": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
-      "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.fromentries": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
-      "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.hasown": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
-      "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
-      "dev": true,
-      "dependencies": {
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
-      "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/oidc-token-hash": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
-      "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==",
-      "engines": {
-        "node": "^10.13.0 || >=12.0.0"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "dependencies": {
-        "wrappy": "1"
-      }
-    },
-    "node_modules/openid-client": {
-      "version": "5.1.8",
-      "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.1.8.tgz",
-      "integrity": "sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ==",
-      "dependencies": {
-        "jose": "^4.1.4",
-        "lru-cache": "^6.0.0",
-        "object-hash": "^2.0.1",
-        "oidc-token-hash": "^5.0.1"
-      },
-      "engines": {
-        "node": "^12.19.0 || ^14.15.0 || ^16.13.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/panva"
-      }
-    },
-    "node_modules/optionator": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-      "dev": true,
-      "dependencies": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.3"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/packet-reader": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
-      "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
-    },
-    "node_modules/parent-module": {
-      "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==",
-      "dev": true,
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pg": {
-      "version": "8.7.3",
-      "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz",
-      "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==",
-      "dependencies": {
-        "buffer-writer": "2.0.0",
-        "packet-reader": "1.0.0",
-        "pg-connection-string": "^2.5.0",
-        "pg-pool": "^3.5.1",
-        "pg-protocol": "^1.5.0",
-        "pg-types": "^2.1.0",
-        "pgpass": "1.x"
-      },
-      "engines": {
-        "node": ">= 8.0.0"
-      },
-      "peerDependencies": {
-        "pg-native": ">=2.0.0"
-      },
-      "peerDependenciesMeta": {
-        "pg-native": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/pg-connection-string": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
-      "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
-    },
-    "node_modules/pg-int8": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
-      "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/pg-pool": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz",
-      "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==",
-      "peerDependencies": {
-        "pg": ">=8.0"
-      }
-    },
-    "node_modules/pg-protocol": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
-      "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
-    },
-    "node_modules/pg-types": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
-      "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
-      "dependencies": {
-        "pg-int8": "1.0.1",
-        "postgres-array": "~2.0.0",
-        "postgres-bytea": "~1.0.0",
-        "postgres-date": "~1.0.4",
-        "postgres-interval": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/pgpass": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
-      "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
-      "dependencies": {
-        "split2": "^4.1.0"
-      }
-    },
-    "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
-      }
-    },
-    "node_modules/postcss": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
-      "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
-      "dependencies": {
-        "nanoid": "^3.1.30",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.1"
-      },
-      "engines": {
-        "node": "^10 || ^12 || >=14"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      }
-    },
-    "node_modules/postgres-array": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
-      "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postgres-bytea": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
-      "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postgres-date": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
-      "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/postgres-interval": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
-      "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
-      "dependencies": {
-        "xtend": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/preact": {
-      "version": "10.10.0",
-      "resolved": "https://registry.npmjs.org/preact/-/preact-10.10.0.tgz",
-      "integrity": "sha512-fszkg1iJJjq68I4lI8ZsmBiaoQiQHbxf1lNq+72EmC/mZOsFF5zn3k1yv9QGoFgIXzgsdSKtYymLJsrJPoamjQ==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/preact"
-      }
-    },
-    "node_modules/preact-render-to-string": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.1.tgz",
-      "integrity": "sha512-Wp3ner1aIVBpKg02C4AoLdBiw4kNaiFSYHr4wUF+fR7FWKAQzNri+iPfPp31sEhAtBfWoJrSxiEFzd5wp5zCgQ==",
-      "dependencies": {
-        "pretty-format": "^3.8.0"
-      },
-      "peerDependencies": {
-        "preact": ">=10"
-      }
-    },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/pretty-format": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
-      "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
-    },
-    "node_modules/prop-types": {
-      "version": "15.8.1",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-      "dev": true,
-      "dependencies": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.13.1"
-      }
-    },
-    "node_modules/punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
-    "node_modules/react": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
-      "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
-      "dependencies": {
-        "loose-envify": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/react-dom": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
-      "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
-      "dependencies": {
-        "loose-envify": "^1.1.0",
-        "scheduler": "^0.22.0"
-      },
-      "peerDependencies": {
-        "react": "^18.1.0"
-      }
-    },
-    "node_modules/react-icons": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz",
-      "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==",
-      "peerDependencies": {
-        "react": "*"
-      }
-    },
-    "node_modules/react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-    },
-    "node_modules/react-redux": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.1.tgz",
-      "integrity": "sha512-LMZMsPY4DYdZfLJgd7i79n5Kps5N9XVLCJJeWAaPYTV+Eah2zTuBjTxKtNEbjiyitbq80/eIkm55CYSLqAub3w==",
-      "dependencies": {
-        "@babel/runtime": "^7.12.1",
-        "@types/hoist-non-react-statics": "^3.3.1",
-        "@types/use-sync-external-store": "^0.0.3",
-        "hoist-non-react-statics": "^3.3.2",
-        "react-is": "^18.0.0",
-        "use-sync-external-store": "^1.0.0"
-      },
-      "peerDependencies": {
-        "@types/react": "^16.8 || ^17.0 || ^18.0",
-        "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
-        "react": "^16.8 || ^17.0 || ^18.0",
-        "react-dom": "^16.8 || ^17.0 || ^18.0",
-        "react-native": ">=0.59",
-        "redux": "^4"
-      },
-      "peerDependenciesMeta": {
-        "@types/react": {
-          "optional": true
-        },
-        "@types/react-dom": {
-          "optional": true
-        },
-        "react-dom": {
-          "optional": true
-        },
-        "react-native": {
-          "optional": true
-        },
-        "redux": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/react-redux/node_modules/react-is": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz",
-      "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg=="
-    },
-    "node_modules/redux": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz",
-      "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==",
-      "dependencies": {
-        "@babel/runtime": "^7.9.2"
-      }
-    },
-    "node_modules/redux-thunk": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
-      "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
-      "peerDependencies": {
-        "redux": "^4"
-      }
-    },
-    "node_modules/regenerator-runtime": {
-      "version": "0.13.9",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-      "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
-    },
-    "node_modules/regexp.prototype.flags": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
-      "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "functions-have-names": "^1.2.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/mysticatea"
-      }
-    },
-    "node_modules/reselect": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz",
-      "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ=="
-    },
-    "node_modules/resolve": {
-      "version": "1.22.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-      "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.8.1",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true,
-      "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "dev": true,
-      "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "node_modules/scheduler": {
-      "version": "0.22.0",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
-      "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
-      "dependencies": {
-        "loose-envify": "^1.1.0"
-      }
-    },
-    "node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/socket.io": {
-      "version": "4.5.1",
-      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
-      "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
-      "dependencies": {
-        "accepts": "~1.3.4",
-        "base64id": "~2.0.0",
-        "debug": "~4.3.2",
-        "engine.io": "~6.2.0",
-        "socket.io-adapter": "~2.4.0",
-        "socket.io-parser": "~4.0.4"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/socket.io-adapter": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
-      "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
-    },
-    "node_modules/socket.io-client": {
-      "version": "4.5.1",
-      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.1.tgz",
-      "integrity": "sha512-e6nLVgiRYatS+AHXnOnGi4ocOpubvOUCGhyWw8v+/FxW8saHkinG6Dfhi9TU0Kt/8mwJIAASxvw6eujQmjdZVA==",
-      "dependencies": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.2",
-        "engine.io-client": "~6.2.1",
-        "socket.io-parser": "~4.2.0"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/socket.io-client/node_modules/socket.io-parser": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
-      "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
-      "dependencies": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.1"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/socket.io-parser": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz",
-      "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==",
-      "dependencies": {
-        "@types/component-emitter": "^1.2.10",
-        "component-emitter": "~1.3.0",
-        "debug": "~4.3.1"
-      },
-      "engines": {
-        "node": ">=10.0.0"
-      }
-    },
-    "node_modules/source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/split2": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
-      "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==",
-      "engines": {
-        "node": ">= 10.x"
-      }
-    },
-    "node_modules/string.prototype.matchall": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
-      "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1",
-        "get-intrinsic": "^1.1.1",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.3",
-        "regexp.prototype.flags": "^1.4.1",
-        "side-channel": "^1.0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
-      "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
-      "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/strip-json-comments": {
-      "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==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/styled-jsx": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
-      "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==",
-      "engines": {
-        "node": ">= 12.0.0"
-      },
-      "peerDependencies": {
-        "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "@babel/core": {
-          "optional": true
-        },
-        "babel-plugin-macros": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-      "dev": true
-    },
-    "node_modules/to-regex-range": {
-      "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==",
-      "dev": true,
-      "dependencies": {
-        "is-number": "^7.0.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/tsconfig-paths": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
-      "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
-      "dev": true,
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.1",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-      "dev": true
-    },
-    "node_modules/tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^1.8.1"
-      },
-      "engines": {
-        "node": ">= 6"
-      },
-      "peerDependencies": {
-        "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
-      }
-    },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "dependencies": {
-        "prelude-ls": "^1.2.1"
-      },
-      "engines": {
-        "node": ">= 0.8.0"
-      }
-    },
-    "node_modules/type-fest": {
-      "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==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-      "dev": true,
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "dependencies": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "node_modules/use-sync-external-store": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
-      "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
-      "peerDependencies": {
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
-      }
-    },
-    "node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
-    "node_modules/v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-      "dev": true
-    },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "dependencies": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "node_modules/ws": {
-      "version": "8.2.3",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
-      "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
-      "engines": {
-        "node": ">=10.0.0"
-      },
-      "peerDependencies": {
-        "bufferutil": "^4.0.1",
-        "utf-8-validate": "^5.0.2"
-      },
-      "peerDependenciesMeta": {
-        "bufferutil": {
-          "optional": true
-        },
-        "utf-8-validate": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/xmlhttprequest-ssl": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
-      "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
-    "node_modules/xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-      "engines": {
-        "node": ">=0.4"
-      }
-    },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    }
-  },
-  "dependencies": {
-    "@arctext/react": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@arctext/react/-/react-1.0.0.tgz",
-      "integrity": "sha512-K+dKaSOjjHs/6dw2gS0dWFOzGI28sqa3o1KOLMB48t8KRdulnh5QtPb33+C/ryWDV1eteIQM0Zi4ZDyEu7ES0g==",
-      "requires": {}
-    },
-    "@babel/runtime": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz",
-      "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==",
-      "requires": {
-        "regenerator-runtime": "^0.13.4"
-      }
-    },
-    "@babel/runtime-corejs3": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz",
-      "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==",
-      "dev": true,
-      "requires": {
-        "core-js-pure": "^3.20.2",
-        "regenerator-runtime": "^0.13.4"
-      }
-    },
-    "@eslint/eslintrc": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz",
-      "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.3.2",
-        "globals": "^13.9.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"
-      }
-    },
-    "@humanwhocodes/config-array": {
-      "version": "0.9.5",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
-      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
-      "dev": true,
-      "requires": {
-        "@humanwhocodes/object-schema": "^1.2.1",
-        "debug": "^4.1.1",
-        "minimatch": "^3.0.4"
-      }
-    },
-    "@humanwhocodes/object-schema": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
-      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
-      "dev": true
-    },
-    "@next/env": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/env/-/env-12.1.6.tgz",
-      "integrity": "sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA=="
-    },
-    "@next/eslint-plugin-next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz",
-      "integrity": "sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw==",
-      "dev": true,
-      "requires": {
-        "glob": "7.1.7"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.7",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
-          "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        }
-      }
-    },
-    "@next/swc-android-arm-eabi": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz",
-      "integrity": "sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ==",
-      "optional": true
-    },
-    "@next/swc-android-arm64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz",
-      "integrity": "sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew==",
-      "optional": true
-    },
-    "@next/swc-darwin-arm64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz",
-      "integrity": "sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw==",
-      "optional": true
-    },
-    "@next/swc-darwin-x64": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz",
-      "integrity": "sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg==",
-      "optional": true
-    },
-    "@next/swc-linux-arm-gnueabihf": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz",
-      "integrity": "sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw==",
-      "optional": true
-    },
-    "@next/swc-linux-arm64-gnu": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz",
-      "integrity": "sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ==",
-      "optional": true
-    },
-    "@next/swc-linux-arm64-musl": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz",
-      "integrity": "sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ==",
-      "optional": true
-    },
-    "@next/swc-linux-x64-gnu": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz",
-      "integrity": "sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ==",
-      "optional": true
-    },
-    "@next/swc-linux-x64-musl": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz",
-      "integrity": "sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag==",
-      "optional": true
-    },
-    "@next/swc-win32-arm64-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz",
-      "integrity": "sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g==",
-      "optional": true
-    },
-    "@next/swc-win32-ia32-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz",
-      "integrity": "sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA==",
-      "optional": true
-    },
-    "@next/swc-win32-x64-msvc": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz",
-      "integrity": "sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA==",
-      "optional": true
-    },
-    "@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
-      "dev": true,
-      "requires": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
-      }
-    },
-    "@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true
-    },
-    "@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "requires": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
-      }
-    },
-    "@panva/hkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz",
-      "integrity": "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA=="
-    },
-    "@reduxjs/toolkit": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.1.tgz",
-      "integrity": "sha512-Q6mzbTpO9nOYRnkwpDlFOAbQnd3g7zj7CtHAZWz5SzE5lcV97Tf8f3SzOO8BoPOMYBFgfZaqTUZqgGu+a0+Fng==",
-      "requires": {
-        "immer": "^9.0.7",
-        "redux": "^4.1.2",
-        "redux-thunk": "^2.4.1",
-        "reselect": "^4.1.5"
-      }
-    },
-    "@rushstack/eslint-patch": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz",
-      "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==",
-      "dev": true
-    },
-    "@socket.io/component-emitter": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
-      "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
-    },
-    "@types/component-emitter": {
-      "version": "1.2.11",
-      "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
-      "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
-    },
-    "@types/cookie": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz",
-      "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
-    },
-    "@types/cors": {
-      "version": "2.8.12",
-      "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
-      "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
-    },
-    "@types/hoist-non-react-statics": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
-      "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
-      "requires": {
-        "@types/react": "*",
-        "hoist-non-react-statics": "^3.3.0"
-      }
-    },
-    "@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "18.0.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz",
-      "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA=="
-    },
-    "@types/prop-types": {
-      "version": "15.7.5",
-      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
-      "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
-    },
-    "@types/react": {
-      "version": "18.0.9",
-      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
-      "integrity": "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==",
-      "requires": {
-        "@types/prop-types": "*",
-        "@types/scheduler": "*",
-        "csstype": "^3.0.2"
-      }
-    },
-    "@types/scheduler": {
-      "version": "0.16.2",
-      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
-      "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
-    },
-    "@types/use-sync-external-store": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
-      "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
-    },
-    "@typescript-eslint/parser": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz",
-      "integrity": "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/scope-manager": "5.22.0",
-        "@typescript-eslint/types": "5.22.0",
-        "@typescript-eslint/typescript-estree": "5.22.0",
-        "debug": "^4.3.2"
-      }
-    },
-    "@typescript-eslint/scope-manager": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz",
-      "integrity": "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.22.0",
-        "@typescript-eslint/visitor-keys": "5.22.0"
-      }
-    },
-    "@typescript-eslint/types": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz",
-      "integrity": "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==",
-      "dev": true
-    },
-    "@typescript-eslint/typescript-estree": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz",
-      "integrity": "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.22.0",
-        "@typescript-eslint/visitor-keys": "5.22.0",
-        "debug": "^4.3.2",
-        "globby": "^11.0.4",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.5",
-        "tsutils": "^3.21.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "7.3.7",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        }
-      }
-    },
-    "@typescript-eslint/visitor-keys": {
-      "version": "5.22.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz",
-      "integrity": "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.22.0",
-        "eslint-visitor-keys": "^3.0.0"
-      }
-    },
-    "accepts": {
-      "version": "1.3.8",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
-      "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
-      "requires": {
-        "mime-types": "~2.1.34",
-        "negotiator": "0.6.3"
-      }
-    },
-    "acorn": {
-      "version": "8.7.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
-      "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
-      "dev": true
-    },
-    "acorn-jsx": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
-      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
-      "dev": true,
-      "requires": {}
-    },
-    "ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
-      "requires": {
-        "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": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true
-    },
-    "ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "requires": {
-        "color-convert": "^2.0.1"
-      }
-    },
-    "argparse": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-      "dev": true
-    },
-    "aria-query": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
-      "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
-      "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.10.2",
-        "@babel/runtime-corejs3": "^7.10.2"
-      }
-    },
-    "array-includes": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
-      "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5",
-        "get-intrinsic": "^1.1.1",
-        "is-string": "^1.0.7"
-      }
-    },
-    "array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true
-    },
-    "array.prototype.flat": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
-      "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.2",
-        "es-shim-unscopables": "^1.0.0"
-      }
-    },
-    "array.prototype.flatmap": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
-      "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.2",
-        "es-shim-unscopables": "^1.0.0"
-      }
-    },
-    "ast-types-flow": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
-      "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
-      "dev": true
-    },
-    "asynckit": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-    },
-    "axe-core": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
-      "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
-      "dev": true
-    },
-    "axios": {
-      "version": "0.27.2",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
-      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
-      "requires": {
-        "follow-redirects": "^1.14.9",
-        "form-data": "^4.0.0"
-      }
-    },
-    "axobject-query": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
-      "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
-      "dev": true
-    },
-    "balanced-match": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
-      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-      "dev": true
-    },
-    "base64id": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
-      "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
-    },
-    "brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "requires": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "braces": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
-      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
-      "dev": true,
-      "requires": {
-        "fill-range": "^7.0.1"
-      }
-    },
-    "buffer-writer": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
-      "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
-    },
-    "call-bind": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
-      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "get-intrinsic": "^1.0.2"
-      }
-    },
-    "callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
-      "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
-      "dev": true
-    },
-    "caniuse-lite": {
-      "version": "1.0.30001338",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz",
-      "integrity": "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ=="
-    },
-    "chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "requires": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      }
-    },
-    "color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "requires": {
-        "color-name": "~1.1.4"
-      }
-    },
-    "color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "combined-stream": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
-      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
-      "requires": {
-        "delayed-stream": "~1.0.0"
-      }
-    },
-    "component-emitter": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
-    },
-    "concat-map": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "cookie": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
-      "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
-    },
-    "core-js-pure": {
-      "version": "3.22.4",
-      "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.4.tgz",
-      "integrity": "sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==",
-      "dev": true
-    },
-    "cors": {
-      "version": "2.8.5",
-      "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
-      "requires": {
-        "object-assign": "^4",
-        "vary": "^1"
-      }
-    },
-    "cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "requires": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      }
-    },
-    "crypto": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz",
-      "integrity": "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig=="
-    },
-    "csstype": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
-      "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
-    },
-    "damerau-levenshtein": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
-      "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
-      "dev": true
-    },
-    "debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
-      "requires": {
-        "ms": "2.1.2"
-      }
-    },
-    "deep-is": {
-      "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==",
-      "dev": true
-    },
-    "define-properties": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
-      "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
-      "dev": true,
-      "requires": {
-        "has-property-descriptors": "^1.0.0",
-        "object-keys": "^1.1.1"
-      }
-    },
-    "delayed-stream": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-    },
-    "dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "requires": {
-        "path-type": "^4.0.0"
-      }
-    },
-    "doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "requires": {
-        "esutils": "^2.0.2"
-      }
-    },
-    "dotenv": {
-      "version": "16.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz",
-      "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q=="
-    },
-    "emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "engine.io": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
-      "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
-      "requires": {
-        "@types/cookie": "^0.4.1",
-        "@types/cors": "^2.8.12",
-        "@types/node": ">=10.0.0",
-        "accepts": "~1.3.4",
-        "base64id": "2.0.0",
-        "cookie": "~0.4.1",
-        "cors": "~2.8.5",
-        "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
-        "ws": "~8.2.3"
-      }
-    },
-    "engine.io-client": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.2.tgz",
-      "integrity": "sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ==",
-      "requires": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
-        "ws": "~8.2.3",
-        "xmlhttprequest-ssl": "~2.0.0"
-      }
-    },
-    "engine.io-parser": {
-      "version": "5.0.4",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
-      "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
-    },
-    "es-abstract": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz",
-      "integrity": "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "es-to-primitive": "^1.2.1",
-        "function-bind": "^1.1.1",
-        "function.prototype.name": "^1.1.5",
-        "get-intrinsic": "^1.1.1",
-        "get-symbol-description": "^1.0.0",
-        "has": "^1.0.3",
-        "has-property-descriptors": "^1.0.0",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.3",
-        "is-callable": "^1.2.4",
-        "is-negative-zero": "^2.0.2",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.2",
-        "is-string": "^1.0.7",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.12.0",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.2",
-        "regexp.prototype.flags": "^1.4.1",
-        "string.prototype.trimend": "^1.0.5",
-        "string.prototype.trimstart": "^1.0.5",
-        "unbox-primitive": "^1.0.2"
-      }
-    },
-    "es-shim-unscopables": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
-      "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3"
-      }
-    },
-    "es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "requires": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      }
-    },
-    "escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
-      "dev": true
-    },
-    "eslint": {
-      "version": "8.15.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz",
-      "integrity": "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==",
-      "dev": true,
-      "requires": {
-        "@eslint/eslintrc": "^1.2.3",
-        "@humanwhocodes/config-array": "^0.9.2",
-        "ajv": "^6.10.0",
-        "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.1.1",
-        "eslint-utils": "^3.0.0",
-        "eslint-visitor-keys": "^3.3.0",
-        "espree": "^9.3.2",
-        "esquery": "^1.4.0",
-        "esutils": "^2.0.2",
-        "fast-deep-equal": "^3.1.3",
-        "file-entry-cache": "^6.0.1",
-        "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^6.0.1",
-        "globals": "^13.6.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.0.0",
-        "imurmurhash": "^0.1.4",
-        "is-glob": "^4.0.0",
-        "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.1",
-        "regexpp": "^3.2.0",
-        "strip-ansi": "^6.0.1",
-        "strip-json-comments": "^3.1.0",
-        "text-table": "^0.2.0",
-        "v8-compile-cache": "^2.0.3"
-      },
-      "dependencies": {
-        "doctrine": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
-          "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
-          "dev": true,
-          "requires": {
-            "esutils": "^2.0.2"
-          }
-        }
-      }
-    },
-    "eslint-config-next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.1.6.tgz",
-      "integrity": "sha512-qoiS3g/EPzfCTkGkaPBSX9W0NGE/B1wNO3oWrd76QszVGrdpLggNqcO8+LR6MB0CNqtp9Q8NoeVrxNVbzM9hqA==",
-      "dev": true,
-      "requires": {
-        "@next/eslint-plugin-next": "12.1.6",
-        "@rushstack/eslint-patch": "^1.1.3",
-        "@typescript-eslint/parser": "^5.21.0",
-        "eslint-import-resolver-node": "^0.3.6",
-        "eslint-import-resolver-typescript": "^2.7.1",
-        "eslint-plugin-import": "^2.26.0",
-        "eslint-plugin-jsx-a11y": "^6.5.1",
-        "eslint-plugin-react": "^7.29.4",
-        "eslint-plugin-react-hooks": "^4.5.0"
-      }
-    },
-    "eslint-import-resolver-node": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
-      "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
-      "dev": true,
-      "requires": {
-        "debug": "^3.2.7",
-        "resolve": "^1.20.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true
-        }
-      }
-    },
-    "eslint-import-resolver-typescript": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
-      "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
-      "dev": true,
-      "requires": {
-        "debug": "^4.3.4",
-        "glob": "^7.2.0",
-        "is-glob": "^4.0.3",
-        "resolve": "^1.22.0",
-        "tsconfig-paths": "^3.14.1"
-      }
-    },
-    "eslint-module-utils": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
-      "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
-      "dev": true,
-      "requires": {
-        "debug": "^3.2.7",
-        "find-up": "^2.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-          "dev": true
-        }
-      }
-    },
-    "eslint-plugin-import": {
-      "version": "2.26.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
-      "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
-      "dev": true,
-      "requires": {
-        "array-includes": "^3.1.4",
-        "array.prototype.flat": "^1.2.5",
-        "debug": "^2.6.9",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.6",
-        "eslint-module-utils": "^2.7.3",
-        "has": "^1.0.3",
-        "is-core-module": "^2.8.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.values": "^1.1.5",
-        "resolve": "^1.22.0",
-        "tsconfig-paths": "^3.14.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-          "dev": true
-        }
-      }
-    },
-    "eslint-plugin-jsx-a11y": {
-      "version": "6.5.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
-      "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
-      "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.16.3",
-        "aria-query": "^4.2.2",
-        "array-includes": "^3.1.4",
-        "ast-types-flow": "^0.0.7",
-        "axe-core": "^4.3.5",
-        "axobject-query": "^2.2.0",
-        "damerau-levenshtein": "^1.0.7",
-        "emoji-regex": "^9.2.2",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^3.2.1",
-        "language-tags": "^1.0.5",
-        "minimatch": "^3.0.4"
-      }
-    },
-    "eslint-plugin-react": {
-      "version": "7.29.4",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz",
-      "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==",
-      "dev": true,
-      "requires": {
-        "array-includes": "^3.1.4",
-        "array.prototype.flatmap": "^1.2.5",
-        "doctrine": "^2.1.0",
-        "estraverse": "^5.3.0",
-        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
-        "minimatch": "^3.1.2",
-        "object.entries": "^1.1.5",
-        "object.fromentries": "^2.0.5",
-        "object.hasown": "^1.1.0",
-        "object.values": "^1.1.5",
-        "prop-types": "^15.8.1",
-        "resolve": "^2.0.0-next.3",
-        "semver": "^6.3.0",
-        "string.prototype.matchall": "^4.0.6"
-      },
-      "dependencies": {
-        "resolve": {
-          "version": "2.0.0-next.3",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
-          "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
-          "dev": true,
-          "requires": {
-            "is-core-module": "^2.2.0",
-            "path-parse": "^1.0.6"
-          }
-        }
-      }
-    },
-    "eslint-plugin-react-hooks": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz",
-      "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==",
-      "dev": true,
-      "requires": {}
-    },
-    "eslint-scope": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
-      "dev": true,
-      "requires": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
-      }
-    },
-    "eslint-utils": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
-      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
-      "dev": true,
-      "requires": {
-        "eslint-visitor-keys": "^2.0.0"
-      },
-      "dependencies": {
-        "eslint-visitor-keys": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-          "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-          "dev": true
-        }
-      }
-    },
-    "eslint-visitor-keys": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
-      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
-      "dev": true
-    },
-    "espree": {
-      "version": "9.3.2",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
-      "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
-      "dev": true,
-      "requires": {
-        "acorn": "^8.7.1",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.3.0"
-      }
-    },
-    "esquery": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
-      "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
-      "dev": true,
-      "requires": {
-        "estraverse": "^5.1.0"
-      }
-    },
-    "esrecurse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-      "dev": true,
-      "requires": {
-        "estraverse": "^5.2.0"
-      }
-    },
-    "estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
-      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
-      "dev": true
-    },
-    "fast-deep-equal": {
-      "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==",
-      "dev": true
-    },
-    "fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
-      "dev": true,
-      "requires": {
-        "@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"
-      },
-      "dependencies": {
-        "glob-parent": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-          "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-          "dev": true,
-          "requires": {
-            "is-glob": "^4.0.1"
-          }
-        }
-      }
-    },
-    "fast-json-stable-stringify": {
-      "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==",
-      "dev": true
-    },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "fastq": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
-      "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
-      "dev": true,
-      "requires": {
-        "reusify": "^1.0.4"
-      }
-    },
-    "file-entry-cache": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
-      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
-      "dev": true,
-      "requires": {
-        "flat-cache": "^3.0.4"
-      }
-    },
-    "fill-range": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
-      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
-      "dev": true,
-      "requires": {
-        "to-regex-range": "^5.0.1"
-      }
-    },
-    "find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-      "dev": true,
-      "requires": {
-        "locate-path": "^2.0.0"
-      }
-    },
-    "flat-cache": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
-      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
-      "dev": true,
-      "requires": {
-        "flatted": "^3.1.0",
-        "rimraf": "^3.0.2"
-      }
-    },
-    "flatted": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
-      "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
-      "dev": true
-    },
-    "follow-redirects": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
-      "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
-    },
-    "form-data": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
-      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
-      "requires": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
-        "mime-types": "^2.1.12"
-      }
-    },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
-    },
-    "function-bind": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
-    },
-    "function.prototype.name": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
-      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.0",
-        "functions-have-names": "^1.2.2"
-      }
-    },
-    "functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
-      "dev": true
-    },
-    "functions-have-names": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-      "dev": true
-    },
-    "get-intrinsic": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
-      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1",
-        "has": "^1.0.3",
-        "has-symbols": "^1.0.1"
-      }
-    },
-    "get-symbol-description": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
-      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "get-intrinsic": "^1.1.1"
-      }
-    },
-    "glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
-      "dev": true,
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      }
-    },
-    "glob-parent": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
-      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
-      "dev": true,
-      "requires": {
-        "is-glob": "^4.0.3"
-      }
-    },
-    "globals": {
-      "version": "13.14.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.14.0.tgz",
-      "integrity": "sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg==",
-      "dev": true,
-      "requires": {
-        "type-fest": "^0.20.2"
-      }
-    },
-    "globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "requires": {
-        "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"
-      }
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
-    "has-bigints": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-      "dev": true
-    },
-    "has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true
-    },
-    "has-property-descriptors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
-      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-      "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.1.1"
-      }
-    },
-    "has-symbols": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-      "dev": true
-    },
-    "has-tostringtag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
-      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-      "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.2"
-      }
-    },
-    "hoist-non-react-statics": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
-      "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
-      "requires": {
-        "react-is": "^16.7.0"
-      }
-    },
-    "ignore": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
-      "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
-      "dev": true
-    },
-    "immer": {
-      "version": "9.0.12",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz",
-      "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA=="
-    },
-    "import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
-      "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
-      "dev": true,
-      "requires": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      }
-    },
-    "imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
-    },
-    "internal-slot": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
-      "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
-      "dev": true,
-      "requires": {
-        "get-intrinsic": "^1.1.0",
-        "has": "^1.0.3",
-        "side-channel": "^1.0.4"
-      }
-    },
-    "is-bigint": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-      "dev": true,
-      "requires": {
-        "has-bigints": "^1.0.1"
-      }
-    },
-    "is-boolean-object": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-callable": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
-      "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
-      "dev": true
-    },
-    "is-core-module": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
-      "dev": true,
-      "requires": {
-        "has": "^1.0.3"
-      }
-    },
-    "is-date-object": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-      "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
-    },
-    "is-glob": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
-      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
-      "dev": true,
-      "requires": {
-        "is-extglob": "^2.1.1"
-      }
-    },
-    "is-negative-zero": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-      "dev": true
-    },
-    "is-number": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
-      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
-      "dev": true
-    },
-    "is-number-object": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-      "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-regex": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-shared-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2"
-      }
-    },
-    "is-string": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-      "dev": true,
-      "requires": {
-        "has-tostringtag": "^1.0.0"
-      }
-    },
-    "is-symbol": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-      "dev": true,
-      "requires": {
-        "has-symbols": "^1.0.2"
-      }
-    },
-    "is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2"
-      }
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "jose": {
-      "version": "4.8.3",
-      "resolved": "https://registry.npmjs.org/jose/-/jose-4.8.3.tgz",
-      "integrity": "sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g=="
-    },
-    "js-tokens": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-    },
-    "js-yaml": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-      "dev": true,
-      "requires": {
-        "argparse": "^2.0.1"
-      }
-    },
-    "json-schema-traverse": {
-      "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==",
-      "dev": true
-    },
-    "json-stable-stringify-without-jsonify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
-      "dev": true
-    },
-    "json5": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
-      "dev": true,
-      "requires": {
-        "minimist": "^1.2.0"
-      }
-    },
-    "jsx-ast-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz",
-      "integrity": "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==",
-      "dev": true,
-      "requires": {
-        "array-includes": "^3.1.4",
-        "object.assign": "^4.1.2"
-      }
-    },
-    "language-subtag-registry": {
-      "version": "0.3.21",
-      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
-      "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
-      "dev": true
-    },
-    "language-tags": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
-      "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
-      "dev": true,
-      "requires": {
-        "language-subtag-registry": "~0.3.2"
-      }
-    },
-    "levn": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
-      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "^1.2.1",
-        "type-check": "~0.4.0"
-      }
-    },
-    "locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
-      "dev": true,
-      "requires": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      }
-    },
-    "lodash.merge": {
-      "version": "4.6.2",
-      "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
-      "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
-      "dev": true
-    },
-    "loose-envify": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
-      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
-      "requires": {
-        "js-tokens": "^3.0.0 || ^4.0.0"
-      }
-    },
-    "lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "requires": {
-        "yallist": "^4.0.0"
-      }
-    },
-    "merge2": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
-      "dev": true
-    },
-    "micromatch": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
-      "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
-      "dev": true,
-      "requires": {
-        "braces": "^3.0.2",
-        "picomatch": "^2.3.1"
-      }
-    },
-    "mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
-    },
-    "mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "requires": {
-        "mime-db": "1.52.0"
-      }
-    },
-    "minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "requires": {
-        "brace-expansion": "^1.1.7"
-      }
-    },
-    "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-      "dev": true
-    },
-    "ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-    },
-    "nanoid": {
-      "version": "3.3.4",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
-      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
-    },
-    "natural-compare": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
-      "dev": true
-    },
-    "negotiator": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
-      "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
-    },
-    "next": {
-      "version": "12.1.6",
-      "resolved": "https://registry.npmjs.org/next/-/next-12.1.6.tgz",
-      "integrity": "sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==",
-      "requires": {
-        "@next/env": "12.1.6",
-        "@next/swc-android-arm-eabi": "12.1.6",
-        "@next/swc-android-arm64": "12.1.6",
-        "@next/swc-darwin-arm64": "12.1.6",
-        "@next/swc-darwin-x64": "12.1.6",
-        "@next/swc-linux-arm-gnueabihf": "12.1.6",
-        "@next/swc-linux-arm64-gnu": "12.1.6",
-        "@next/swc-linux-arm64-musl": "12.1.6",
-        "@next/swc-linux-x64-gnu": "12.1.6",
-        "@next/swc-linux-x64-musl": "12.1.6",
-        "@next/swc-win32-arm64-msvc": "12.1.6",
-        "@next/swc-win32-ia32-msvc": "12.1.6",
-        "@next/swc-win32-x64-msvc": "12.1.6",
-        "caniuse-lite": "^1.0.30001332",
-        "postcss": "8.4.5",
-        "styled-jsx": "5.0.2"
-      }
-    },
-    "next-auth": {
-      "version": "4.10.0",
-      "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.10.0.tgz",
-      "integrity": "sha512-4CKZbv9VeCaqfDAXyqFThZy05ApbLd0bhXEB+DCq9aD43h6Rkvz0QgM7QOCJXESy0QKJUXHzopkBq+iaGxdc0g==",
-      "requires": {
-        "@babel/runtime": "^7.16.3",
-        "@panva/hkdf": "^1.0.1",
-        "cookie": "^0.4.1",
-        "jose": "^4.3.7",
-        "oauth": "^0.9.15",
-        "openid-client": "^5.1.0",
-        "preact": "^10.6.3",
-        "preact-render-to-string": "^5.1.19",
-        "uuid": "^8.3.2"
-      }
-    },
-    "nodemailer": {
-      "version": "6.7.7",
-      "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz",
-      "integrity": "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA=="
-    },
-    "oauth": {
-      "version": "0.9.15",
-      "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
-      "integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
-    },
-    "object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
-    },
-    "object-hash": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
-      "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
-    },
-    "object-inspect": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
-      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
-      "dev": true
-    },
-    "object-keys": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
-    },
-    "object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
-        "object-keys": "^1.1.1"
-      }
-    },
-    "object.entries": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
-      "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      }
-    },
-    "object.fromentries": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
-      "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      }
-    },
-    "object.hasown": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
-      "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5"
-      }
-    },
-    "object.values": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
-      "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1"
-      }
-    },
-    "oidc-token-hash": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz",
-      "integrity": "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ=="
-    },
-    "once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
-      "requires": {
-        "wrappy": "1"
-      }
-    },
-    "openid-client": {
-      "version": "5.1.8",
-      "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.1.8.tgz",
-      "integrity": "sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ==",
-      "requires": {
-        "jose": "^4.1.4",
-        "lru-cache": "^6.0.0",
-        "object-hash": "^2.0.1",
-        "oidc-token-hash": "^5.0.1"
-      }
-    },
-    "optionator": {
-      "version": "0.9.1",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
-      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
-      "dev": true,
-      "requires": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.3"
-      }
-    },
-    "p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-      "dev": true,
-      "requires": {
-        "p-try": "^1.0.0"
-      }
-    },
-    "p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
-      "dev": true,
-      "requires": {
-        "p-limit": "^1.1.0"
-      }
-    },
-    "p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
-      "dev": true
-    },
-    "packet-reader": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
-      "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
-    },
-    "parent-module": {
-      "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==",
-      "dev": true,
-      "requires": {
-        "callsites": "^3.0.0"
-      }
-    },
-    "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-      "dev": true
-    },
-    "path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
-    },
-    "path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true
-    },
-    "path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
-      "dev": true
-    },
-    "path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true
-    },
-    "pg": {
-      "version": "8.7.3",
-      "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz",
-      "integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==",
-      "requires": {
-        "buffer-writer": "2.0.0",
-        "packet-reader": "1.0.0",
-        "pg-connection-string": "^2.5.0",
-        "pg-pool": "^3.5.1",
-        "pg-protocol": "^1.5.0",
-        "pg-types": "^2.1.0",
-        "pgpass": "1.x"
-      }
-    },
-    "pg-connection-string": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
-      "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
-    },
-    "pg-int8": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
-      "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
-    },
-    "pg-pool": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz",
-      "integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==",
-      "requires": {}
-    },
-    "pg-protocol": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
-      "integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
-    },
-    "pg-types": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
-      "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
-      "requires": {
-        "pg-int8": "1.0.1",
-        "postgres-array": "~2.0.0",
-        "postgres-bytea": "~1.0.0",
-        "postgres-date": "~1.0.4",
-        "postgres-interval": "^1.1.0"
-      }
-    },
-    "pgpass": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
-      "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
-      "requires": {
-        "split2": "^4.1.0"
-      }
-    },
-    "picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-    },
-    "picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-      "dev": true
-    },
-    "postcss": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
-      "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
-      "requires": {
-        "nanoid": "^3.1.30",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.1"
-      }
-    },
-    "postgres-array": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
-      "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
-    },
-    "postgres-bytea": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
-      "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
-    },
-    "postgres-date": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
-      "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
-    },
-    "postgres-interval": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
-      "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
-      "requires": {
-        "xtend": "^4.0.0"
-      }
-    },
-    "preact": {
-      "version": "10.10.0",
-      "resolved": "https://registry.npmjs.org/preact/-/preact-10.10.0.tgz",
-      "integrity": "sha512-fszkg1iJJjq68I4lI8ZsmBiaoQiQHbxf1lNq+72EmC/mZOsFF5zn3k1yv9QGoFgIXzgsdSKtYymLJsrJPoamjQ=="
-    },
-    "preact-render-to-string": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.1.tgz",
-      "integrity": "sha512-Wp3ner1aIVBpKg02C4AoLdBiw4kNaiFSYHr4wUF+fR7FWKAQzNri+iPfPp31sEhAtBfWoJrSxiEFzd5wp5zCgQ==",
-      "requires": {
-        "pretty-format": "^3.8.0"
-      }
-    },
-    "prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
-      "dev": true
-    },
-    "pretty-format": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz",
-      "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
-    },
-    "prop-types": {
-      "version": "15.8.1",
-      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
-      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
-      "dev": true,
-      "requires": {
-        "loose-envify": "^1.4.0",
-        "object-assign": "^4.1.1",
-        "react-is": "^16.13.1"
-      }
-    },
-    "punycode": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
-      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
-      "dev": true
-    },
-    "queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
-      "dev": true
-    },
-    "react": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
-      "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
-      "requires": {
-        "loose-envify": "^1.1.0"
-      }
-    },
-    "react-dom": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
-      "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
-      "requires": {
-        "loose-envify": "^1.1.0",
-        "scheduler": "^0.22.0"
-      }
-    },
-    "react-icons": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz",
-      "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==",
-      "requires": {}
-    },
-    "react-is": {
-      "version": "16.13.1",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
-      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-    },
-    "react-redux": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.1.tgz",
-      "integrity": "sha512-LMZMsPY4DYdZfLJgd7i79n5Kps5N9XVLCJJeWAaPYTV+Eah2zTuBjTxKtNEbjiyitbq80/eIkm55CYSLqAub3w==",
-      "requires": {
-        "@babel/runtime": "^7.12.1",
-        "@types/hoist-non-react-statics": "^3.3.1",
-        "@types/use-sync-external-store": "^0.0.3",
-        "hoist-non-react-statics": "^3.3.2",
-        "react-is": "^18.0.0",
-        "use-sync-external-store": "^1.0.0"
-      },
-      "dependencies": {
-        "react-is": {
-          "version": "18.1.0",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz",
-          "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg=="
-        }
-      }
-    },
-    "redux": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz",
-      "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==",
-      "requires": {
-        "@babel/runtime": "^7.9.2"
-      }
-    },
-    "redux-thunk": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
-      "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
-      "requires": {}
-    },
-    "regenerator-runtime": {
-      "version": "0.13.9",
-      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
-      "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
-    },
-    "regexp.prototype.flags": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
-      "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "functions-have-names": "^1.2.2"
-      }
-    },
-    "regexpp": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
-      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
-      "dev": true
-    },
-    "reselect": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz",
-      "integrity": "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ=="
-    },
-    "resolve": {
-      "version": "1.22.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
-      "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
-      "dev": true,
-      "requires": {
-        "is-core-module": "^2.8.1",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      }
-    },
-    "resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
-      "dev": true
-    },
-    "reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
-      "dev": true
-    },
-    "rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "dev": true,
-      "requires": {
-        "glob": "^7.1.3"
-      }
-    },
-    "run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
-      "dev": true,
-      "requires": {
-        "queue-microtask": "^1.2.2"
-      }
-    },
-    "scheduler": {
-      "version": "0.22.0",
-      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
-      "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
-      "requires": {
-        "loose-envify": "^1.1.0"
-      }
-    },
-    "semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
-      "dev": true
-    },
-    "shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "requires": {
-        "shebang-regex": "^3.0.0"
-      }
-    },
-    "shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true
-    },
-    "side-channel": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
-      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.0",
-        "get-intrinsic": "^1.0.2",
-        "object-inspect": "^1.9.0"
-      }
-    },
-    "slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true
-    },
-    "socket.io": {
-      "version": "4.5.1",
-      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz",
-      "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==",
-      "requires": {
-        "accepts": "~1.3.4",
-        "base64id": "~2.0.0",
-        "debug": "~4.3.2",
-        "engine.io": "~6.2.0",
-        "socket.io-adapter": "~2.4.0",
-        "socket.io-parser": "~4.0.4"
-      }
-    },
-    "socket.io-adapter": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
-      "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
-    },
-    "socket.io-client": {
-      "version": "4.5.1",
-      "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.1.tgz",
-      "integrity": "sha512-e6nLVgiRYatS+AHXnOnGi4ocOpubvOUCGhyWw8v+/FxW8saHkinG6Dfhi9TU0Kt/8mwJIAASxvw6eujQmjdZVA==",
-      "requires": {
-        "@socket.io/component-emitter": "~3.1.0",
-        "debug": "~4.3.2",
-        "engine.io-client": "~6.2.1",
-        "socket.io-parser": "~4.2.0"
-      },
-      "dependencies": {
-        "socket.io-parser": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
-          "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
-          "requires": {
-            "@socket.io/component-emitter": "~3.1.0",
-            "debug": "~4.3.1"
-          }
-        }
-      }
-    },
-    "socket.io-parser": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz",
-      "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==",
-      "requires": {
-        "@types/component-emitter": "^1.2.10",
-        "component-emitter": "~1.3.0",
-        "debug": "~4.3.1"
-      }
-    },
-    "source-map-js": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-      "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
-    },
-    "split2": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
-      "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ=="
-    },
-    "string.prototype.matchall": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
-      "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.19.1",
-        "get-intrinsic": "^1.1.1",
-        "has-symbols": "^1.0.3",
-        "internal-slot": "^1.0.3",
-        "regexp.prototype.flags": "^1.4.1",
-        "side-channel": "^1.0.4"
-      }
-    },
-    "string.prototype.trimend": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
-      "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5"
-      }
-    },
-    "string.prototype.trimstart": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
-      "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.1.4",
-        "es-abstract": "^1.19.5"
-      }
-    },
-    "strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^5.0.1"
-      }
-    },
-    "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true
-    },
-    "strip-json-comments": {
-      "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==",
-      "dev": true
-    },
-    "styled-jsx": {
-      "version": "5.0.2",
-      "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz",
-      "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==",
-      "requires": {}
-    },
-    "supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "requires": {
-        "has-flag": "^4.0.0"
-      }
-    },
-    "supports-preserve-symlinks-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
-      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
-      "dev": true
-    },
-    "text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-      "dev": true
-    },
-    "to-regex-range": {
-      "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==",
-      "dev": true,
-      "requires": {
-        "is-number": "^7.0.0"
-      }
-    },
-    "tsconfig-paths": {
-      "version": "3.14.1",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
-      "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
-      "dev": true,
-      "requires": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.1",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-      "dev": true
-    },
-    "tsutils": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
-      "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
-      "dev": true,
-      "requires": {
-        "tslib": "^1.8.1"
-      }
-    },
-    "type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "^1.2.1"
-      }
-    },
-    "type-fest": {
-      "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==",
-      "dev": true
-    },
-    "unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-      "dev": true,
-      "requires": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
-      }
-    },
-    "uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
-    "use-sync-external-store": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz",
-      "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==",
-      "requires": {}
-    },
-    "uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
-    },
-    "v8-compile-cache": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
-      "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
-      "dev": true
-    },
-    "vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
-    },
-    "which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "requires": {
-        "isexe": "^2.0.0"
-      }
-    },
-    "which-boxed-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-      "dev": true,
-      "requires": {
-        "is-bigint": "^1.0.1",
-        "is-boolean-object": "^1.1.0",
-        "is-number-object": "^1.0.4",
-        "is-string": "^1.0.5",
-        "is-symbol": "^1.0.3"
-      }
-    },
-    "word-wrap": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
-      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
-      "dev": true
-    },
-    "wrappy": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
-    },
-    "ws": {
-      "version": "8.2.3",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
-      "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
-      "requires": {}
-    },
-    "xmlhttprequest-ssl": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
-      "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
-    },
-    "xtend": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
-      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-    },
-    "yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-    }
-  }
-}
Index: package.json
===================================================================
--- package.json	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ package.json	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -7,24 +7,10 @@
     "build": "next build",
     "start": "next start",
-    "lint": "next lint",
-    "launch": "next build && next start"
+    "lint": "next lint"
   },
   "dependencies": {
-    "@arctext/react": "^1.0.0",
-    "@reduxjs/toolkit": "^1.8.1",
-    "axios": "^0.27.2",
-    "crypto": "^1.0.1",
-    "dotenv": "^16.0.0",
     "next": "12.1.6",
-    "next-auth": "^4.10.0",
-    "nodemailer": "^6.7.7",
-    "pg": "^8.7.3",
     "react": "18.1.0",
-    "react-dom": "18.1.0",
-    "react-icons": "^4.3.1",
-    "react-redux": "^8.0.1",
-    "socket.io": "^4.5.1",
-    "socket.io-client": "^4.5.1",
-    "uuid": "^8.3.2"
+    "react-dom": "18.1.0"
   },
   "devDependencies": {
Index: pages/_app.js
===================================================================
--- pages/_app.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ pages/_app.js	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -1,16 +1,6 @@
 import '../styles/globals.css'
 
-import { store } from '../redux/store'
-import { Provider } from 'react-redux'
-import { SessionProvider } from 'next-auth/react'
-
-function MyApp({ Component, pageProps: {session, ...pageProps} }) {
-  return (
-    <SessionProvider session={session}>
-      <Provider store={store}>
-        <Component {...pageProps} />
-      </Provider>
-    </SessionProvider>
-  )
+function MyApp({ Component, pageProps }) {
+  return <Component {...pageProps} />
 }
 
Index: ges/activate/[id].js
===================================================================
--- pages/activate/[id].js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,81 +1,0 @@
-import React from 'react'
-
-import { useRouter } from 'next/router'
-
-import { useEffect, useState } from 'react'
-import { useDispatch, useSelector } from 'react-redux'
-
-import { setStyle } from '../../redux/reducers/styleSlice'
-
-import Head from 'next/head'
-
-import axios from "axios";
-
-const Activate = (props) => {
-    const dispatch = useDispatch();
-
-    const router = useRouter();
-
-    const styleState = useSelector(state => state.style);
-    
-    const [activated, setActivated] = useState(false);
-    
-    useEffect(() => {
-        // display loading screen
-        dispatch(setStyle({
-            ...styleState.style,
-            displayLoadingScreen: true,
-        }));
-
-        const emailActivationId = props.id;
-
-        axios.get(`/api/postgre/activate/${emailActivationId}?action=activate_account`).then(res => {
-            if (res.data?.success) {
-                setActivated(true);
-            }
-            
-            dispatch(setStyle({
-                ...styleState.style,
-                displayLoadingScreen: false,
-            }));
-        });
-    }, []);
-
-    function goHome() {
-        router.push('/');
-    }
-
-    return (
-        <>
-            <Head>
-                <title>Caessino - Activate account</title>
-            </Head>
-
-            <div className="fullscreen fs-centered activateScreen">
-                { activated ? (
-                    <div>
-                        <h3>Your account is activated.</h3>
-                        <h3>You may now login at Caessino.</h3>
-                        <button onClick={() => goHome()} className="primaryButton">Go To The Homepage</button>
-                    </div>
-                ) : (
-                    <div>
-                        <h3>Wrong email activation id.</h3>
-                        <h3>We were unable to activate your account.</h3>
-                        <button onClick={() => goHome()} className="primaryButton">Go To The Homepage</button>
-                    </div>
-                )}
-            </div>
-        </>
-    )
-}
-
-export default Activate
-
-export async function getServerSideProps(context) {
-    return {
-      props: {
-        id: context.query.id
-      },
-    }
-  }
Index: ges/admin/index.js
===================================================================
--- pages/admin/index.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,37 +1,0 @@
-import Head from 'next/head'
-
-import React from 'react'
-import Complaints from '../../components/admin/Complaints'
-import Dashboard from '../../components/admin/Dashboard'
-import LiveGames from '../../components/admin/LiveGames'
-import Login from '../../components/admin/Login'
-
-import { useSelector } from 'react-redux';
-import Loading from '../../components/Loading'
-
-const Admin = () => {
-    const adminState = useSelector(state => state.admin);
-
-    return (
-        <div>
-            <Head>
-                <title>Caessino - Admin dashboard</title>
-            </Head>
-
-
-            <Loading/>
-
-            { adminState.admin.session_id === '' ? (
-                <Login/>
-            ) : (
-                <Dashboard/>
-            )}
-
-            { adminState.admin.displays.complaintsScreen && <Complaints/> }
-            
-            { adminState.admin.displays.liveGamesScreen && <LiveGames/> }
-        </div>
-    )
-}
-
-export default Admin
Index: ges/api/auth/[...nextauth].js
===================================================================
--- pages/api/auth/[...nextauth].js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,12 +1,0 @@
-import NextAuth from 'next-auth'
-import GoogleProvider from 'next-auth/providers/google'
-
-export default NextAuth({
-    providers: [
-        GoogleProvider({
-            clientId: process.env.GOOGLE_CLIENT_ID,
-            clientSecret: process.env.GOOGLE_CLIENT_SECRET
-        })
-    ],
-    secret: process.env.NEXT_SECRET,
-})
Index: ges/api/blackjack/calculateEarnings.js
===================================================================
--- pages/api/blackjack/calculateEarnings.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,71 +1,0 @@
-import { checkIfSameValue, checkIfSameColour, checkIfSameSuit, checkIfStraight } from './checkCardCombinations'
-
-export function calculateEarnings(room) {
-    let betEarnings = 0;
-
-    if (room.outcome === 'draw') {
-        betEarnings = room.initialBet;
-    }
-    else if (room.outcome === 'player_won' || room.outcome === 'dealer_busted') {
-        betEarnings = 2 * room.initialBet;
-    }
-    else if (room.outcome === 'player_lost' || room.outcome === 'player_busted') {
-        betEarnings = -1 * room.initialBet;
-    }
-
-    return betEarnings;
-}
-  
-export function calculateSideBetEarnings(room) {
-    let sideBetEarnings = -1 * room.sideBet;
-  
-    if (room.sideBetName != '') {
-      if (room.sideBetName === 'mixed_pair') {
-        if (checkIfSameValue(room.playerCards)) {
-          sideBetEarnings = room.sideBet * 5;
-        }
-      }
-      else if (room.sideBetName === 'coloured_pair') {
-        if (checkIfSameValue(room.playerCards) && checkIfSameColour(room.playerCards)) {
-          sideBetEarnings = room.sideBet * 12;
-        }
-      }
-      else if (room.sideBetName === 'perfect_pair') {
-        if (checkIfSameValue(room.playerCards) && checkIfSameSuit(room.playerCards)) {
-          sideBetEarnings = room.sideBet * 25;
-        }
-      }
-      else if (room.sideBetName === 'flush') {
-        const tmpCards = room.playerCards.slice().concat(room.dealerCards[0]);
-        if (checkIfSameSuit(tmpCards)) {
-          sideBetEarnings = room.sideBet * 5;
-        }
-      }
-      else if (room.sideBetName === 'straight') {
-        const tmpCards = room.playerCards.slice().concat(room.dealerCards[0]);
-        if (checkIfStraight(tmpCards)) {
-          sideBetEarnings = room.sideBet * 10;
-        }
-      }
-      else if (room.sideBetName === 'three_of_a_kind') {
-        const tmpCards = room.playerCards.slice().concat(room.dealerCards[0]);
-        if (checkIfSameValue(tmpCards)) {
-          sideBetEarnings = room.sideBet * 30;
-        }
-      }
-      else if (room.sideBetName === 'straight_flush') {
-        const tmpCards = room.playerCards.slice().concat(room.dealerCards[0]);
-        if (checkIfStraight(tmpCards) && checkIfSameSuit(tmpCards)) {
-          sideBetEarnings = room.sideBet * 40;
-        }
-      }
-      else if (room.sideBetName === 'suited_triple') {
-        const tmpCards = room.playerCards.slice().concat(room.dealerCards[0]);
-        if (checkIfSameSuit(tmpCards) && checkIfSameValue(tmpCards)) {
-          sideBetEarnings = room.sideBet * 100;
-        }
-      }
-    }
-  
-    return sideBetEarnings;
-}
Index: ges/api/blackjack/checkCardCombinations.js
===================================================================
--- pages/api/blackjack/checkCardCombinations.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,88 +1,0 @@
-export function checkIfSameValue(cards) {
-    for (let i = 1; i < cards.length; i++) {
-      if (cards[i][1] !== cards[i-1][1]) {
-        return false;
-      }
-    }
-  
-    return true;
-}
-  
-function checkIf2CardsAreSameColour(card1, card2) {
-    if (card1[0] === card2[0]) return true;
-    if (card1[0] === 'H' && card2[0] === 'D') return true;
-    if (card1[0] === 'D' && card2[0] === 'H') return true;
-    if (card1[0] === 'S' && card2[0] === 'C') return true;
-    if (card1[0] === 'C' && card2[0] === 'S') return true;
-    return false;
-}
-  
-export function checkIfSameColour(cards) {
-    for (let i = 1; i < cards.length; i++) {
-      if (!checkIf2CardsAreSameColour(cards[i], cards[i-1])) {
-        return false;
-      }
-    }
-  
-    return true;
-}
-  
-export function checkIfSameSuit(cards) {
-    for (let i = 1; i < cards.length; i++) {
-      if (cards[i][0] !== cards[i-1][0]) {
-        return false;
-      }
-    }
-  
-    return true;
-}
-  
-export function checkIfStraight(cards) {
-    let values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', 'X', 'J', 'Q', 'K'];
-  
-    let valuesInCards = [];
-    for (let i = 0; i < cards.length; i++) {
-      valuesInCards.push(cards[i][1]);
-    }
-  
-    let temp = values.reduce((c, v, i) => Object.assign(c, {[v]: i}), {});
-  
-    valuesInCards = valuesInCards.sort((a, b) => temp[a] - temp[b]);
-  
-    let idx = values.indexOf(valuesInCards[0]);
-  
-    let straight = true;
-  
-    for (let i = 0; i < valuesInCards.length; i++) {
-      if (valuesInCards[i] !== values[idx]) {
-        straight = false;
-        break; 
-      }
-  
-      idx++;
-      if (idx >= temp.length) {
-        straight = false;
-        break;
-      }
-    }
-  
-    if (straight) {
-      return true;
-    }
-  
-    values = ['2', '3', '4', '5', '6', '7', '8', '9', 'X', 'J', 'Q', 'K', 'A'];
-    temp = values.reduce((c, v, i) => Object.assign(c, {[v]: i}), {});
-  
-    valuesInCards = valuesInCards.sort((a, b) => temp[a] - temp[b]);
-  
-    idx = values.indexOf(valuesInCards[0]);
-  
-    for (let i = 0; i < valuesInCards.length; i++) {
-      if (valuesInCards[i] !== values[idx]) return false;
-  
-      idx++;
-      if (idx >= temp.length) return false;
-    }
-  
-    return true;
-}
Index: ges/api/blackjack/gameStates.js
===================================================================
--- pages/api/blackjack/gameStates.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,114 +1,0 @@
-import { rooms } from "../postgre";
-
-const singleDeck = ["SA", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "SX", "SJ", "SQ", "SK",
-                    "HA", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "HX", "HJ", "HQ", "HK",
-                    "CA", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CX", "CJ", "CQ", "CK",
-                    "DA", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DX", "DJ", "DQ", "DK"    ];
-
-/* We are using 5 decks */
-const deck = singleDeck.concat(singleDeck).concat(singleDeck).concat(singleDeck).concat(singleDeck);
-
-/**
- * Sample game state (Begining of the game)
- */
-export let game = {
-  credits: -1,
-  username: '',
-  displayName: '',
-  deck: [...deck],
-  status: '_1_room_created',      // statuses: _1_room_created, _2_made_initial_bet, _3_made_side_bet, _4_cards_on_the_table, _5_game_over
-  playerCards: [],
-  dealerName: 'Lazar',
-  dealerCards: [],
-  initialBet: 0,
-  sideBet: 0,
-  sideBetName: '',
-  outcome: '',
-  earnings: 0,
-  sideBetOutcome: '',
-  sideBetEarnings: 0,
-  messageTitle: '',
-  messageDescription: '',
-  betOutcomeMessageShown: true,
-  sideBetOutcomeMessageShown: true,
-}
-
-export function getGame(session_id) {
-  if (rooms[session_id] !== undefined) {
-    return {
-      success: true,
-      game: rooms[session_id],
-    }
-  }
-
-  return {
-      success: false,
-      game: {...game, playerCards: [...game.playerCards], dealerCards: [...game.dealerCards]},
-  };
-}
-
-export function getRestrictedGameObject(session_id) {
-  const { success, game } = getGame(session_id)
-
-  return {
-    ...game,
-    dealerCards: game.status.includes('_5_') ? game.dealerCards : game.dealerCards.length > 0 ? [game.dealerCards[0]].concat(['back']) : [],
-  }
-}
-
-/**
- * Replace deck if empty
- */
-function checkDeckSize(game) {
-  if (game.deck.length === 0) {
-    game.deck = [...deck];
-  }
-}
-  
-/**
- * Draw a SINGLE random card
- */
-export function drawASingleCard(room) {
-    checkDeckSize(room);
-    let idx = Math.floor(Math.random() * room.deck.length);
-    let card = room.deck[idx];
-  
-    room.deck.splice(idx, 1);
-  
-    return card;
-}
-  
-/**
- * Deal the initial hand of cards
- */
-export function getInitialCards(room) {
-    room.playerCards.push(drawASingleCard(room));
-    room.playerCards.push(drawASingleCard(room));
-  
-    room.dealerCards.push(drawASingleCard(room));
-    room.dealerCards.push(drawASingleCard(room));
-}
-
-/**
- * Calculate the hand value
- */
-export function calculateHandValue(cards) {
-    let value = 0;
-    let aces = 0;
-    for (let i = 0; i < cards.length; i++) {
-      let card = cards[i];
-      if (card.substring(1) === 'A') {
-        value += 11;
-        aces++;
-      } else if (card.substring(1) === 'X' || card.substring(1) === 'J' || card.substring(1) === 'Q' || card.substring(1) === 'K') {
-        value += 10;
-      } else {
-        value += parseInt(card.substring(1));
-      }
-    }
-    while (value > 21 && aces > 0) {
-      value -= 10;
-      aces--;
-    }
-    return value;
-}
Index: ges/api/blackjack/index.js
===================================================================
--- pages/api/blackjack/index.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,433 +1,0 @@
-import axios from 'axios';
-
-require('dotenv').config();
-
-import { game, drawASingleCard, getInitialCards, calculateHandValue, getGame, getRestrictedGameObject } from './gameStates';
-import { calculateEarnings, calculateSideBetEarnings } from './calculateEarnings';
-
-import { rooms, saveGameInHistory, update_rooms_to_database } from '../postgre/index'
-
-/**
- * Set up a room
- */
-function createARoom(session_id, displayName, username) {
-  let room = {
-    ...game, displayName: displayName, username: username, playerCards: [...game.playerCards], dealerCards: [...game.dealerCards],
-  }
-
-  rooms[session_id] = room;
-}
-
-/**
- * ********************* BEGIN OF REQUEST HANDLER *********************
- */
-export default async function handler(req, res) {
-  /**
-   * GET method
-   */
-   if (req.method === 'GET') {
-    /**
-     * /---------------------- GET ----------------------/
-     * If game status is _5_game_over, restart the room for a new game.
-     * @action play_again
-     * @param session_id
-     */
-    if (req.query.action === 'play_again' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '5') {
-        rooms[session_id] = {...game, displayName: rooms[session_id].displayName, username: rooms[session_id].username, playerCards: [...game.playerCards], dealerCards: [...game.dealerCards]};
-
-        rooms[session_id].betOutcomeMessageShown = true;
-
-        update_rooms_to_database();
-      }
-
-      res.end();
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * If game status is _4_cards_on_the_table, turn off the alert for side bet outcome
-     * @action continue_from_side_bet
-     * @param session_id
-     */
-     if (req.query.action === 'continue_from_side_bet' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '4') {
-        rooms[session_id].sideBetOutcomeMessageShown = true;
-
-        update_rooms_to_database();
-      }
-
-      res.end();
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * If game status is _4_cards_on_the_table, draw cards for the dealer while handValue < 17, and calculate game outcome and player earnings.
-     * Also, update the player's credits and stats in the database through /api/postgre?action=add_credits.
-     * @action stand
-     * @param session_id
-     */
-    if (req.query.action === 'stand' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '4') {
-        const room = rooms[session_id];
-
-        while (calculateHandValue(room.dealerCards) < 17) {
-          room.dealerCards.push(drawASingleCard(room));
-        }
-
-        room.status = '_5_game_over';
-
-        if (calculateHandValue(room.dealerCards) > 21) {
-          room.outcome = 'dealer_busted';
-        }
-        else if (calculateHandValue(room.playerCards) > calculateHandValue(room.dealerCards)) {
-          room.outcome = 'player_won';
-        }
-        else if (calculateHandValue(room.playerCards) < calculateHandValue(room.dealerCards)) {
-          room.outcome = 'player_lost';
-        }
-        else {
-          room.outcome = 'draw';
-        }
-
-        room.earnings = calculateEarnings(room);
-
-        if (room.outcome === 'draw') {
-          room.messageTitle = 'Draw!';
-          room.messageDescription = `You got your $${room.earnings} back`
-        }
-        else if (room.outcome === 'player_won') {
-          room.messageTitle = 'You won!';
-          room.messageDescription = `You won $${room.earnings}`
-        }
-        else if (room.outcome === 'dealer_busted') {
-          room.messageTitle = `Dealer ${room.dealerName} busted!`;
-          room.messageDescription = `You won $${room.earnings}`
-        }
-        else if (room.outcome === 'player_lost') {
-          room.messageTitle = 'You lost!';
-          room.messageDescription = `You lost $${-1*room.earnings}`
-        }
-        room.betOutcomeMessageShown = false;
-
-        rooms[session_id] = room;
-
-        axios.get(`${process.env.HOME_URL}/api/postgre/?action=add_credits&session_id=${session_id}&credits=${room.earnings}&game=blackjack&outcome=${room.outcome}`).then(postgreRes => {
-          if (postgreRes.data?.success) {
-            rooms[session_id].credits = postgreRes.data?.credits;
-
-            res.json({
-              success: true,
-              status: rooms[session_id].status,
-              playerCards: rooms[session_id].playerCards,
-              dealerCards: rooms[session_id].dealerCards,
-              outcome: rooms[session_id].outcome,
-              earnings: rooms[session_id].earnings,
-              credits: postgreRes.data?.credits,
-            })
-
-            update_rooms_to_database();
-          }
-          else {
-            res.json({
-              success: false,
-            })
-          }
-        });
-
-        rooms[session_id].finished = new Date().toGMTString();
-        saveGameInHistory('blackjack', rooms[session_id], rooms[session_id].username);
-
-        return ;
-      }
-
-      res.json({
-        success: false,
-      })
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * If game status is _4_cards_on_the_table, draw a card for the player.
-     * If player busts, update the player's stats in the database through /api/postgre?action=add_credits.
-     * @action hit_a_card
-     * @param session_id
-     */
-    if (req.query.action === 'hit_a_card' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '4') {
-        const room = rooms[session_id];
-
-        room.playerCards.push(drawASingleCard(room));
-
-        rooms[session_id] = room;
-
-        if (calculateHandValue(room.playerCards) > 21) {
-          room.status = '_5_game_over';
-          room.outcome = 'player_busted';
-          
-          room.earnings = calculateEarnings(room);
-
-          room.messageTitle = 'You busted!';
-          room.messageDescription = `You lost $${-1*room.earnings}`
-          
-          room.betOutcomeMessageShown = false;
-
-          rooms[session_id] = room;
-
-          axios.get(`${process.env.HOME_URL}/api/postgre/?action=add_credits&session_id=${session_id}&credits=${room.earnings}&game=blackjack&outcome=${room.outcome}`).then(postgreRes => {
-            if (postgreRes.data?.success) {
-              rooms[session_id].credits = postgreRes.data?.credits;
-
-              res.json({
-                success: true,
-                status: rooms[session_id].status,
-                playerCards: rooms[session_id].playerCards,
-                outcome: rooms[session_id].outcome,
-                earnings: rooms[session_id].earnings,
-                credits: postgreRes.data?.credits,
-              })
-            
-              update_rooms_to_database();
-            }
-            else {
-              res.json({
-                success: false,
-              })
-            }
-          });
-          
-          rooms[session_id].finished = new Date().toGMTString();
-          saveGameInHistory('blackjack', rooms[session_id], rooms[session_id].username);
-        }
-        else {
-          res.json({
-            success: true,
-            status: rooms[session_id].status,
-            playerCards: rooms[session_id].playerCards,
-            outcome: rooms[session_id].outcome,
-            earnings: rooms[session_id].earnings,
-          })
-            
-          update_rooms_to_database();
-        }
-
-        return ;
-      }
-
-      res.json({
-        success: false,
-      })
-    }
-
-     /**
-     * /---------------------- GET ----------------------/
-     * If game status is _3_made_side_bet, check if the player won the side bet or not (if they placed a side bet of course).
-     * Update the player's stats in the database through /api/postgre?action=add_credits.
-     * @action get_initial_cards
-     * @param session_id
-     */
-    if (req.query.action === 'get_initial_cards' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '3') {
-        const room = rooms[session_id];
-
-        getInitialCards(room);
-
-        room.status = '_4_cards_on_the_table';
-
-        rooms[session_id] = room;
-
-        update_rooms_to_database();
-
-        if (room.sideBetName !== '' && room.sideBetName !== 'none') {
-          room.sideBetEarnings = calculateSideBetEarnings(room);
-          room.sideBetOutcome = room.sideBetEarnings > 0 ? 'side_bet_won' : 'side_bet_lost';
-
-          if (room.sideBetOutcome === 'side_bet_won') {
-            room.messageTitle = `You won the side bet!`;
-            room.messageDescription = `You won $${room.sideBetEarnings}`
-          }
-          else if (room.sideBetOutcome === 'side_bet_lost') {
-            room.messageTitle = `You lost the side bet!`;
-            room.messageDescription = `You lost $${-1*room.sideBetEarnings}`
-          }
-
-          room.sideBetOutcomeMessageShown = false;
-          
-          rooms[session_id] = room;
-
-          axios.get(`${process.env.HOME_URL}/api/postgre/?action=add_credits&session_id=${session_id}&credits=${room.sideBetEarnings}`).then(postgreRes => {
-            if (postgreRes.data?.success) {
-              rooms[session_id].credits = postgreRes.data?.credits;
-
-              update_rooms_to_database();
-            }
-          });
-        }
-      }
-
-      res.end();
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * If game status is _2_made_initial_bet, place a side bet if the user has chosen one.
-     * @action make_side_bet
-     * @param session_id
-     * @param bet
-     * @param betName
-     */
-    if (req.query.action === 'make_side_bet' && req.query?.session_id && req.query?.bet && req.query?.betName) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '2') {
-        if (req.query?.skip !== 'true' && parseInt(req.query.bet) <= 0) {
-            return ;
-        }
-
-        axios.get(`${process.env.HOME_URL}/api/postgre?action=take_credits&session_id=${session_id}&credits=${req.query.bet}`).then(postgreRes => {
-          if (postgreRes.data?.success) {
-            rooms[session_id].credits = postgreRes.data?.credits;
-
-            const room = rooms[session_id];
-
-            room.sideBet = parseInt(req.query.bet);
-            room.sideBetName = req.query.betName;
-            room.status = '_3_made_side_bet';
-
-            rooms[session_id] = room;
-
-            res.json({
-              success: true,
-            })
-            
-            update_rooms_to_database();
-          }
-          else {
-            res.end();
-          }
-        });
-      }
-    }
-    
-    /**
-     * /---------------------- GET ----------------------/
-     * If game status is _1_room_created, get the initial bet placed by the player.
-     * @action make_initial_bet
-     * @param session_id
-     * @param bet
-     */
-    if (req.query.action === 'make_initial_bet' && req.query?.session_id && req.query?.bet) {
-      const session_id = req.query.session_id;
-
-      if (rooms[session_id] !== undefined && rooms[session_id].status.substr(1, 1) === '1') {
-        if (parseInt(req.query.bet) <= 0) return ;
-
-        axios.get(`${process.env.HOME_URL}/api/postgre?action=take_credits&session_id=${session_id}&credits=${req.query.bet}`).then(postgreRes => {
-          if (postgreRes.data?.success) {
-            rooms[session_id].credits = postgreRes.data?.credits;
-
-            const room = rooms[session_id];
-
-            room.initialBet = parseInt(req.query.bet);
-            room.status = '_2_made_initial_bet';
-
-            rooms[session_id] = room;
-            
-            update_rooms_to_database();
-          }
-        });
-      }
-
-      res.end();
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * Updates the state periodically
-     * @action update_state
-     * @param session_id
-     */
-     if (req.query.action === 'update_state' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      const { success, game } = getGame(session_id);
-
-      res.json({
-          success: true,
-          blackjackGame: getRestrictedGameObject(session_id),
-      })
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * If the player is not in an existing room, create a room for them.
-     * If they are reconnecting, get the room they were in.
-     * @action get_player_info_on_enter
-     * @param session_id
-     */
-    if (req.query.action === 'get_player_info_on_enter' && req.query?.session_id) {
-      const session_id = req.query.session_id;
-
-      axios.get(`${process.env.HOME_URL}/api/postgre?action=check_if_logged_in&session_id=${session_id}`).then(postgreRes => {
-        if (postgreRes.data?.success) {
-          if (rooms[session_id] !== undefined) {
-            // room exists
-          }
-          else {
-            createARoom(session_id, postgreRes.data?.displayName, postgreRes.data?.username);
-          }
-    
-          let dealerCardsTmp = [];
-          if (rooms[session_id].status.substr(1, 1) != '5') { // 5 == game_over
-            rooms[session_id].dealerCards.forEach((card, i) => {
-              if (i === 0) {
-                dealerCardsTmp.push(card);
-              }
-              else {
-                dealerCardsTmp.push('back');
-              }
-            })
-          }
-          else {
-            dealerCardsTmp = rooms[session_id].dealerCards;
-          }
-    
-          res.json({
-            success: true,
-            status: rooms[session_id].status,
-            initialBet: rooms[session_id].initialBet,
-            sideBet: rooms[session_id].sideBet,
-            sideBetName: rooms[session_id].sideBetName,
-            playerCards: rooms[session_id].playerCards,
-            dealerCards: dealerCardsTmp,
-            outcome: rooms[session_id].outcome,
-            earnings: rooms[session_id].earnings,
-            displayName: postgreRes.data?.displayName,
-            session_id: postgreRes.data?.session_id,
-            credits: postgreRes.data?.credits,
-          })
-            
-          update_rooms_to_database();
-        }
-        else {
-          res.json({
-            success: false,
-          })
-        }
-      });
-    }
-  }
-}
-/**
- * ********************* END OF REQUEST HANDLER *********************
- */
Index: pages/api/hello.js
===================================================================
--- pages/api/hello.js	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
+++ pages/api/hello.js	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -0,0 +1,5 @@
+// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
+
+export default function handler(req, res) {
+  res.status(200).json({ name: 'John Doe' })
+}
Index: ges/api/poker/gameStates.js
===================================================================
--- pages/api/poker/gameStates.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,230 +1,0 @@
-import { tables } from "../postgre/index";
-
-import { v4 as uuidv4 } from "uuid";
-
-export const singleDeck = ["SA", "S2", "S3", "S4", "S5", "S6", "S7", "S8", "S9", "SX", "SJ", "SQ", "SK",
-                           "HA", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "HX", "HJ", "HQ", "HK",
-                           "CA", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "CX", "CJ", "CQ", "CK",
-                           "DA", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "DX", "DJ", "DQ", "DK"    ];
-
-export const deck = [...singleDeck];
-
-export const sampleTable = {
-    id: '',
-    name: '',
-    status: '_1_just_created',
-    creator: '',
-    started: false,
-    ended: false,
-    round: 0,
-    turnIdx: -1,
-    lastActivity: 0,
-    pot: 0,
-    lastBet: 20,
-    turnsSinceLastBet: 0,
-    deck: [...deck],
-    players: [],
-    winners: [],
-    splitWinners: false,
-    cards: [],
-}
-
-export const samplePlayer = {
-    id: '',
-    table: '',
-    credits: -1,
-    status: '_1_just_entered',
-    displayName: '',
-    cards: [],
-    betAmount: 0,
-    wonAmount: 0,
-    isSatDown: false,
-    isCoordinator: false,
-    isFolded: false,
-    isGhost: false,
-    hand: {
-        hand: '',
-        highCard: 0,
-    },
-}
-
-
-/**
- * ********************* BEGIN OF FUNCTIONS *********************
- */
-
-export function createTable(playerId, playerName, tableName, username) {
-    const tableId = uuidv4();
-
-    const table = {
-        id: tableId,
-        name: tableName,
-        status: '_1_just_created',
-        creator: playerName,
-        started: false,
-        ended: false,
-        round: 0,
-        turnIdx: -1,
-        lastActivity: 0,
-        prevTurnIdx: -2,
-        pot: 0,
-        lastBet: 20,
-        turnsSinceLastBet: 0,
-        deck: [...deck],
-        players: [{
-            id: playerId,
-            table: tableId,
-            username: username,
-            credits: -1,
-            status: '_1_just_entered',
-            displayName: playerName,
-            cards: [],
-            betAmount: 0,
-            wonAmount: 0,
-            isSatDown: false,
-            isCoordinator: true,
-            isFolded: false,
-            isGhost: false,
-            hand: {
-                hand: '',
-                highCard: 0,
-            },
-        }],
-        onlyOnePlayerLeft: false,
-        winners: [],
-        splitWinners: false,
-        cards: [],
-    }
-
-    tables.push(table)
-
-    return table;
-}
-
-export function getRestrictedTablesArray() {
-    let result = [];
-
-    tables.forEach(table => {
-        let tmpPlayers = [];
-        table.players.forEach(player => {
-            tmpPlayers.push({
-                ...player,
-                id: '',
-                table: '',
-                cards: '',
-            })
-        });
-
-        let tmpWinners = [];
-        table.winners.forEach(winner => {
-            tmpWinners.push({
-                ...winner,
-                id: '',
-                table: '',
-                cards: '',
-            })
-        });
-
-        let tmp = {
-            ...table,
-            deck: [],
-            players: tmpPlayers,
-            winners: tmpWinners,
-            turnTimeout: null,
-        }
-
-        result.push({...tmp});
-    })
-
-    return result;
-}
-
-export function getRestrictedTableArray(tableId, session_id) {
-    let result = undefined;
-
-    let tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tableIdx !== -1) {
-        let table = tables[tableIdx];
-
-        let tmpPlayers = [];
-        table.players.forEach(player => {
-            if (player.id === session_id) {
-                tmpPlayers.push({
-                    ...player,
-                    id: '',
-                    table: '',
-                })
-            }
-            else {
-                tmpPlayers.push({
-                    ...player,
-                    id: '',
-                    table: '',
-                    cards: table.ended ? player.cards : player.cards.length > 0 ? ['back', 'back'] : '',
-                })
-            }
-        });
-
-        let tmpWinners = [];
-        table.winners.forEach(winner => {
-            if (winner.id === session_id) {
-                tmpWinners.push({
-                    ...winner,
-                    id: '',
-                    table: '',
-                })
-            }
-            else {
-                tmpWinners.push({
-                    ...winner,
-                    id: '',
-                    table: '',
-                    cards: table.ended ? winner.cards : winner.cards.length > 0 ? ['back', 'back'] : '',
-                })
-            }
-        });
-        result = {
-            ...table,
-            players: tmpPlayers,
-            winners: tmpWinners,
-            turnTimeout: null,
-        }
-    }
-
-    return result;
-}
-
-export function getTable(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tableIdx !== -1) {
-        return tables[tableIdx];
-    }
-
-    return undefined;
-}
-
-export function getTableAndPlayer(session_id) {
-    for (let tableIdx = 0; tableIdx < tables.length; tableIdx++) {
-        const playerIdx = tables[tableIdx].players.filter(e=>e.isGhost === false).map(e=>e.id).indexOf(session_id);
-
-        if (playerIdx !== -1) {
-            return {
-                success: true,
-                table: tables[tableIdx],
-                player: tables[tableIdx].players[playerIdx],
-            }
-        }
-    }
-
-    return {
-        success: false,
-        table: {...sampleTable},
-        player: {...samplePlayer},
-    };
-}
-
-/**
- * ********************* END OF FUNCTIONS *********************
- */
Index: ges/api/poker/handEvaluations.js
===================================================================
--- pages/api/poker/handEvaluations.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,113 +1,0 @@
-export const hands = [
-    'Royal Flush',
-    'Straight Flush',
-    'Four of a Kind',
-    'Full House',
-    'Flush',
-    'Straight',
-    'Three of a Kind',
-    'Two Pairs',
-    'Pair',
-    'High Card',
-]
-
-const order = "23456789XJQKA"
-export function getHandDetails(hand) {
-    const cards = hand
-    const faces = cards.map(a => String.fromCharCode([77 - order.indexOf(a[1])])).sort()
-    const suits = cards.map(a => a[0]).sort()
-    const counts = faces.reduce(count, {})
-    const duplicates = Object.values(counts).reduce(count, {})
-    const flush = suits[0] === suits[4]
-    const first = faces[0].charCodeAt(1)
-    const straight = faces.every((f, index) => f.charCodeAt(1) - first === index)
-    let rank =
-        (flush && straight && 1) ||
-        (duplicates[4] && 2) ||
-        (duplicates[3] && duplicates[2] && 3) ||
-        (flush && 4) ||
-        (straight && 5) ||
-        (duplicates[3] && 6) ||
-        (duplicates[2] > 1 && 7) ||
-        (duplicates[2] && 8) ||
-        9;
-
-    return { hand: hands[rank], highCard: faces.sort(byCountFirst).join("") }
-
-    function byCountFirst(a, b) {
-        //Counts are in reverse order - bigger is better
-        const countDiff = counts[b] - counts[a]
-        if (countDiff) return countDiff // If counts don't match return
-        return b > a ? -1 : b === a ? 0 : 1
-    }
-
-    function count(c, a) {
-        c[a] = (c[a] || 0) + 1
-        return c
-    }
-}
-
-export function compareHands(h1, h2) {
-    let d1 = getHandDetails(h1)
-    let d2 = getHandDetails(h2)
-    if (hands.indexOf(d1.hand) === hands.indexOf(d2.hand)) {
-        if (d1.highCard < d2.highCard) {
-            return d2;
-        } else if (d1.highCard > d2.highCard) {
-            return d1;
-        } else {
-            return d1;
-        }
-    }
-    return hands.indexOf(d1.hand) < hands.indexOf(d2.hand) ? d2 : d1;
-}
-
-export function getBestHandDetails(playerCards, tableCards) {
-    let combinations = getCardCombinations(playerCards, tableCards);
-
-    let h1 = combinations[0];
-    let bestHand = h1;
-    combinations.forEach(combination => {
-        bestHand = compareHands(h1, combination);
-        h1 = combination;
-    })
-
-    return bestHand;
-}
-
-export function getCardCombinations(playerCards, tableCards) {
-    let combinations = [];
-
-    combinations.push([playerCards[0], tableCards[0], tableCards[1], tableCards[2], tableCards[3]])
-    combinations.push([playerCards[0], tableCards[0], tableCards[1], tableCards[2], tableCards[4]])
-
-    combinations.push([playerCards[0], tableCards[0], tableCards[1], tableCards[4], tableCards[3]])
-    combinations.push([playerCards[0], tableCards[0], tableCards[4], tableCards[2], tableCards[3]])
-    combinations.push([playerCards[0], tableCards[4], tableCards[1], tableCards[2], tableCards[3]])
-
-    
-    combinations.push([playerCards[1], tableCards[0], tableCards[1], tableCards[2], tableCards[3]])
-    combinations.push([playerCards[1], tableCards[0], tableCards[1], tableCards[2], tableCards[4]])
-
-    combinations.push([playerCards[1], tableCards[0], tableCards[1], tableCards[4], tableCards[3]])
-    combinations.push([playerCards[1], tableCards[0], tableCards[4], tableCards[2], tableCards[3]])
-    combinations.push([playerCards[1], tableCards[4], tableCards[1], tableCards[2], tableCards[3]])
-
-
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[1], tableCards[2]])
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[1], tableCards[3]])
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[1], tableCards[4]])
-
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[2], tableCards[3]])
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[2], tableCards[4]])
-    combinations.push([playerCards[0], playerCards[1], tableCards[0], tableCards[3], tableCards[4]])
-
-    combinations.push([playerCards[0], playerCards[1], tableCards[1], tableCards[2], tableCards[3]])
-    combinations.push([playerCards[0], playerCards[1], tableCards[1], tableCards[2], tableCards[4]])
-    combinations.push([playerCards[0], playerCards[1], tableCards[1], tableCards[3], tableCards[4]])
-
-    combinations.push([playerCards[0], playerCards[1], tableCards[2], tableCards[3], tableCards[4]])
-
-
-    return combinations;
-}
Index: ges/api/poker/index.js
===================================================================
--- pages/api/poker/index.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,326 +1,0 @@
-import axios from 'axios';
-
-require('dotenv').config();
-
-import { createTable, getRestrictedTablesArray, getRestrictedTableArray, getTable, getTableAndPlayer } from './gameStates';
-
-import { drawASingleCard, setNextPlayerIdx, progressRoundIfNeeded } from './tableSpecific'
-
-import { update_tables_to_database } from '../postgre/index'
-
-/**
- * ********************* BEGIN OF REQUEST HANDLER *********************
- */
-export default async function handler(req, res) {
-    /**
-     * GET method
-     */
-    if (req.method === 'GET') {
-        
-        /**
-         * /---------------------- GET ----------------------/
-         * Creates the table and enters the user inside
-         * @action game_action
-         * @param session_id
-         * @param specificAction
-         * @param betAmount
-         */
-        if (req.query.action === 'game_action' && req.query?.session_id && req.query?.specificAction && req.query?.betAmount) {
-            const { success, table, player } = getTableAndPlayer(req.query.session_id)
-
-            if (success && table.started && !table.ended && player.isSatDown && !player.isFolded) {
-                if (table.players.map(e=>e.id).indexOf(req.query.session_id) !== table.turnIdx) {
-                    res.end();
-                    return ;
-                }
-
-                let okayToGo = false;
-
-                if (req.query.specificAction === 'check') {
-                    if (table.lastBet === 0) {
-                        table.turnsSinceLastBet++;
-                        okayToGo = true;
-                        
-                        progressRoundIfNeeded(table.id);
-                    }
-                }
-                else if (req.query.specificAction === 'call') {
-                    await axios.get(`${process.env.HOME_URL}/api/postgre/?action=take_credits&session_id=${req.query.session_id}&credits=${table.lastBet}&takeWhatYouCan=true`).then(postgreRes => {
-                        if (postgreRes.data?.success) {
-                            player.credits = postgreRes.data?.credits;
-
-                            if (player.credits >= table.lastBet)
-                                player.betAmount += table.lastBet;
-                            else
-                                player.betAmount += player.credits;
-                                
-                            table.pot += table.lastBet;
-                            table.turnsSinceLastBet++;
-                            okayToGo = true;
-        
-                            progressRoundIfNeeded(table.id);
-                        }
-                    });
-                }
-                else if (req.query.specificAction === 'raise') {
-                    const betAmount = parseInt(req.query.betAmount);
-
-                    if (betAmount >= table.lastBet) {
-                        await axios.get(`${process.env.HOME_URL}/api/postgre/?action=take_credits&session_id=${req.query.session_id}&credits=${betAmount}&takeWhatYouCan=true`).then(postgreRes => {
-                            if (postgreRes.data?.success) {
-                                player.credits = postgreRes.data?.credits;
-
-                                player.betAmount += betAmount;
-                                table.pot += betAmount;
-                                table.turnsSinceLastBet = 1;
-                                okayToGo = true;
-                                
-                                progressRoundIfNeeded(table.id);
-                            }
-                        });
-                    }
-                }
-                else if (req.query.specificAction === 'fold') {
-                    player.isFolded = true;
-                    okayToGo = true;
-
-                    progressRoundIfNeeded(table.id);
-                }
-
-                if (okayToGo) {
-                    table.lastActivity = Date.now();
-                    setNextPlayerIdx(table.id);
-                }
-            }
-            
-            update_tables_to_database();
-
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Creates the table and enters the user inside
-         * @action start_game
-         * @param session_id
-         */
-        if (req.query.action === 'start_game' && req.query?.session_id) {
-            const { success, table } = getTableAndPlayer(req.query.session_id)
-
-            if (success && !table.started && !table.ended && table.players.filter(e=>e.isSatDown===true).length >= 2) {
-                table.players.forEach(player => {
-                    axios.get(`${process.env.HOME_URL}/api/postgre/?action=check_if_logged_in&session_id=${player.id}`).then(postgreRes => {
-                        if (postgreRes.data?.success) {
-                            player.credits = postgreRes.data?.credits;
-                        }
-                    });
-                })
-
-                table.lastActivity = Date.now();
-                table.started = true;
-                table.round = 1;
-
-                table.turnIdx = Math.floor(Math.random(0, table.players.length))
-                setNextPlayerIdx(table.id);
-
-                table.players.forEach(player => {
-                    if (player.isSatDown) {
-                        for (let i = 0; i < 2; i++) {
-                            const card = drawASingleCard(table.id);
-                            
-                            if (card !== undefined) {
-                                player.cards.push(card);
-                            }
-                        }
-                    }
-                })
-            }
-
-            update_tables_to_database();
-            
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Creates the table and enters the user inside
-         * @action sit_down
-         * @param session_id
-         * @param tableId
-         */
-         if (req.query.action === 'sit_down' && req.query?.session_id && req.query?.tableId) {
-            const { success, table, player } = getTableAndPlayer(req.query.session_id)
-
-            if (success && !table.started) {
-                player.isSatDown = true;
-            }
-
-            update_tables_to_database();
-
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Creates the table and enters the user inside
-         * @action leave_table
-         * @param session_id
-         */
-         if (req.query.action === 'leave_table' && req.query?.session_id) {
-            const { success, table, player } = getTableAndPlayer(req.query.session_id);
-
-            if (success) {
-                table.lastActivity = Date.now();
-                
-                player.isGhost = true;
-                player.isFolded = true;
-
-                if (table.started) {
-                    if (table.players[table.turnIdx] !== undefined && table.players[table.turnIdx] === player) {
-                        setNextPlayerIdx(table.id);
-                    }
-                }
-                else {
-                    table.players = table.players.filter(e=>e.isGhost === false);
-                }
-            }
-
-            update_tables_to_database();
-
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Creates the table and enters the user inside
-         * @action join_a_table
-         * @param session_id
-         * @param tableId
-         * @param displayName
-         * @param username
-         */
-         if (req.query.action === 'join_a_table' && req.query?.session_id && req.query?.tableId && req.query?.displayName && req.query?.username) {
-            if (req.query.tableId.length > 0) {
-                const { success } = getTableAndPlayer(req.query.session_id);
-
-                if (!success) {
-                    const table = getTable(req.query.tableId)
-
-                    if (table !== undefined && !table.started) {
-                        table.players.push({
-                            id: req.query.session_id,
-                            table: req.query.tableId,
-                            username: req.query.username,
-                            credits: -1,
-                            status: '_1_just_entered',
-                            displayName: req.query.displayName,
-                            cards: [],
-                            betAmount: 0,
-                            wonAmount: 0,
-                            isSatDown: false,
-                            isCoordinator: false,
-                            isFolded: false,
-                            isGhost: false,
-                            hand: {
-                                hand: '',
-                                highCard: 0,
-                            },
-                        })
-                    }
-                }
-            }
-
-            update_tables_to_database();
-
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Creates the table and enters the user inside
-         * @action create_a_table
-         * @param session_id
-         * @param displayName
-         * @param tableName
-         * @param username
-         */
-        if (req.query.action === 'create_a_table' && req.query?.session_id && req.query?.displayName && req.query?.tableName && req.query?.username) {
-            const { success } = getTableAndPlayer(req.query.session_id);
-
-            if (!success) {
-                createTable(req.query.session_id, req.query.displayName, req.query.tableName, req.query.username);
-            }
-
-            update_tables_to_database();
-
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Updates the state periodically
-         * @action update_state
-         * @param session_id
-         */
-        if (req.query.action === 'update_state' && req.query?.session_id) {
-            const session_id = req.query.session_id;
-
-            const { success, table, player } = getTableAndPlayer(session_id);
-
-            if (success && table.started && !table.ended) {
-                const d = Date.now();
-
-                if (d - table.lastActivity > 30000) {
-                    if (table.players[table.turnIdx] !== undefined) {
-                        table.players[table.turnIdx].isFolded = true;
-
-                        table.lastActivity = Date.now();
-                        setNextPlayerIdx(table.id);
-                        
-                        update_tables_to_database();
-                    }
-                }
-            }
-
-            res.json({
-                success: true,
-                pokerGame: {
-                    tables: getRestrictedTablesArray(),
-                    table: getRestrictedTableArray(table.id, req.query.session_id),
-                    player: player,
-                }
-            })
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * If the player is not in an existing room, create a room for them.
-         * If they are reconnecting, get the room they were in.
-         * @action get_player_info_on_enter
-         * @param session_id
-         */
-        if (req.query.action === 'get_player_info_on_enter' && req.query?.session_id) {
-            const session_id = req.query.session_id;
-
-            axios.get(`${process.env.HOME_URL}/api/postgre?action=check_if_logged_in&session_id=${session_id}`).then(postgreRes => {
-                if (postgreRes.data?.success) {
-                    res.json({
-                        success: true,
-                        displayName: postgreRes.data?.displayName,
-                        username: postgreRes.data?.username,
-                        session_id: postgreRes.data?.session_id,
-                        credits: postgreRes.data?.credits,
-                    })
-                }
-                else {
-                    res.json({
-                        success: false,
-                    })
-                }
-            });
-        }
-    }
-}
-/**
- * ********************* END OF REQUEST HANDLER *********************
- */
Index: ges/api/poker/tableSpecific.js
===================================================================
--- pages/api/poker/tableSpecific.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,338 +1,0 @@
-import { saveGameInHistory, tables } from '../postgre/index';
-
-import { deck } from './gameStates'
-
-import { hands, getBestHandDetails } from './handEvaluations';
-
-import axios from 'axios';
-
-require('dotenv').config();
-
-/**
- * Replace deck if empty
- */
-export function checkDeckSize(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        if (tables[tableIdx].deck.length === 0) {
-            tables[tableIdx].deck = [...deck];
-        }
-    }
-}
-
-/**
- * Draw a SINGLE random card
- */
-export function drawASingleCard(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        checkDeckSize(tableId);
-        
-        let idx = Math.floor(Math.random() * tables[tableIdx].deck.length);
-        let card = tables[tableIdx].deck[idx];
-
-        tables[tableIdx].deck.splice(idx, 1);
-
-        return card;
-    }
-
-    return undefined;
-}
-
-export function getMaxBet(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        let maxBet = 0;
-        table.players.forEach(player => {
-            if (player.betAmount > maxBet) {
-                maxBet = player.betAmount;
-            }
-        })
-        
-        return maxBet;
-    }
-    
-    return 0;
-}
-
-export function setNextPlayerIdx(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined && tables[tableIdx].started && !tables[tableIdx].ended) {
-        const table = tables[tableIdx];
-
-        const remainingPlayers = table.players.filter(e=>e.isSatDown===true).filter(e=>e.isGhost===false);
-        if (remainingPlayers.length === 1) {
-            setWinnerDirect(table.id, remainingPlayers[0]);
-
-            return ;
-        }
-
-        const remainingPlayersWithCredits = table.players.filter(e=>e.isSatDown===true).filter(e=>e.isGhost===false).filter(e=>e.isFolded===false).filter(e=>e.credits > 0);
-        if (remainingPlayersWithCredits.length === 1) {
-            progressRoundTillTheEnd(table.id);
-
-            return ;
-        }
-
-        if (table.turnTimeout !== null) clearTimeout(table.turnTimeout);
-        table.prevTurnIdx = -2;
-
-        let counter = 10;
-
-        while (true) {
-            counter--;
-
-            table.turnIdx++;
-            table.turnIdx %= table.players.length;
-            
-            if (table.players[table.turnIdx] !== undefined && table.players[table.turnIdx].isSatDown && !table.players[table.turnIdx].isFolded) {
-                if (table.round >= 2 && table.players[table.turnIdx].credits === 0) continue;
-
-                table.lastBet = getMaxBet(table.id) - table.players[table.turnIdx].betAmount;
-                if (table.round === 1 && getMaxBet(table.id) <= 20) table.lastBet = 20;
-
-                return ;
-            }
-
-            if (counter <= 0) {
-                return ;
-            }
-        }
-    }
-}
-
-export function getCardsOnTable(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        if (table.round === 2) {
-            for (let i = 0; i < 3; i++) {
-                const card = drawASingleCard(table.id);
-                            
-                if (card !== undefined) {
-                    table.cards.push(card);
-                }
-            }
-        }
-        else if (table.round > 2) {
-            const card = drawASingleCard(table.id);
-                            
-            if (card !== undefined) {
-                table.cards.push(card);
-            }
-        }
-    }
-}
-
-export function resetGame(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        table.started = false;
-        table.ended = false;
-        table.round = 0;
-        table.turnIdx = -1;
-        table.lastActivity = 0;
-        table.turnTimeout = null;
-        table.pot = 0;
-        table.lastBet = 20;
-        table.turnsSinceLastBet = 0;
-        table.deck = [...deck];
-
-        table.players = table.players.filter(e=>e.isGhost === false).filter(e=>e.credits >= 20);
-
-        table.players.forEach(player => {
-            player.credits = 0;
-            player.cards = [];
-            player.isFolded = false;
-            player.betAmount = 0;
-            player.wonAmount = 0;
-            player.hand = {
-                hand: '',
-                highCard: 0,
-            }
-        })
-
-        table.onlyOnePlayerLeft = false;
-        table.winners = [];
-        table.splitWinners = false;
-        table.cards = [];
-    }
-}
-
-export function giveMoneyToTheWinners(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        table.players.forEach(player => {
-            let winnings = 0;
-            if (table.winners.indexOf(player) !== -1) {
-                // winner
-                winnings = 0;
-                table.players.forEach(tmpPlayer => {
-                    winnings += Math.min(tmpPlayer.betAmount, player.betAmount);
-                })
-
-                axios.get(`${process.env.HOME_URL}/api/postgre/?action=add_credits&session_id=${player.id}&credits=${winnings}&game=poker&outcome=won`).then(postgreRes => {
-                    if (postgreRes.data?.success) {
-                        player.credits = postgreRes.data?.credits;
-                    }
-                });
-            }
-            else {
-                // loser
-                winnings = player.betAmount;
-                table.players.forEach(tmpPlayer => {
-                    if (table.winners.indexOf(tmpPlayer) !== -1) {
-                        winnings -= tmpPlayer.betAmount;
-                    }
-                })
-
-                axios.get(`${process.env.HOME_URL}/api/postgre/?action=add_credits&session_id=${player.id}&credits=${winnings}&game=poker&outcome=lost`).then(postgreRes => {
-                    if (postgreRes.data?.success) {
-                        player.credits = postgreRes.data?.credits;
-                    }
-                });
-            }
-
-            player.wonAmount = winnings;
-
-            table.finished = new Date().toGMTString();
-            saveGameInHistory('poker', table, player.username)
-        })
-
-        setTimeout(() => {
-            resetGame(table.id);
-        }, 15000);
-    }
-}
-
-export function setWinnerDirect(tableId, player) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        table.turnIdx = -1;
-        table.started = false;
-        table.ended = true;
-        if (table.turnTimeout !== null) clearTimeout(table.turnTimeout);
-        table.turnTimeout = null;
-
-        table.onlyOnePlayerLeft = true;
-        table.winners = [player];
-
-        giveMoneyToTheWinners(table.id);
-    }
-}
-
-export function setWinner(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        table.turnIdx = -1;
-
-        table.players.forEach(player => {
-            if (player.isSatDown && !player.isFolded) {
-                player.hand = getBestHandDetails(player.cards, table.cards);
-            }
-        })
-
-        hands.forEach(hand => {
-            const playerHands = table.players.filter(e=>e.hand.hand === hand);
-
-            if (table.winners.length === 0) {
-                if (playerHands.length === 1) {
-                    table.winners.push(playerHands[0])
-                }
-                else if (playerHands.length > 1) {
-                    let tmp = playerHands[0].hand.highCard;
-                    let tmpWinners = [];
-
-                    playerHands.forEach(player => {
-                        if (player.hand.highCard > tmp) {
-                            tmp = player.hand.highCard;
-                        }
-                    })
-
-                    playerHands.forEach(player => {
-                        if (player.hand.highCard === tmp) {
-                            tmpWinners.push(player);
-                        }
-                    })
-
-                    if (tmpWinners.length > 1) table.splitWinners = true;
-                    table.winners = [...tmpWinners];
-                }
-            }
-        })
-
-        giveMoneyToTheWinners(table.id);
-    }
-}
-
-export function progressRoundTillTheEnd(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        while (table.round < 4) {
-            table.round++;
-            getCardsOnTable(table.id);
-        }
-
-        table.started = false;
-        table.ended = true;
-        if (table.turnTimeout !== null) clearTimeout(table.turnTimeout);
-        table.turnTimeout = null;
-        if (table.ended && table.winners.length === 0) {
-            setWinner(table.id);
-        }
-    }
-}
-
-export function progressRoundIfNeeded(tableId) {
-    const tableIdx = tables.map(e=>e.id).indexOf(tableId);
-
-    if (tables[tableIdx] !== undefined) {
-        const table = tables[tableIdx];
-
-        const satDownPlayers = table.players.filter(e=>e.isSatDown === true);
-        const remainingPlayers = satDownPlayers.filter(e=>e.isFolded === false);
-
-        if (table.turnsSinceLastBet === remainingPlayers.length) {
-            table.round++;
-            table.lastBet = 0;
-            table.turnsSinceLastBet = 0;
-
-            if (table.round <= 4) {
-                getCardsOnTable(table.id);
-            }
-            else {
-                table.started = false;
-                table.ended = true;
-                if (table.turnTimeout !== null) clearTimeout(table.turnTimeout);
-                table.turnTimeout = null;
-            }
-
-            if (table.ended && table.winners.length === 0) {
-                setWinner(table.id);
-            }
-        }
-    }
-}
Index: ges/api/postgre/activate/[id].js
===================================================================
--- pages/api/postgre/activate/[id].js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,29 +1,0 @@
-import axios from "axios";
-
-export default function handler(req, res) {
-    /**
-     * GET method
-     */
-    if (req.method === 'GET') {
-        /**
-         * /---------------------- GET ----------------------/
-         * Activate account
-         * @action activate_account
-         * @param id emailActivationId
-         */
-        if (req.query?.action === 'activate_account' && req.query?.id) {
-            const emailActivationId = req.query.id
-
-            axios.get(`${process.env.HOME_URL}/api/postgre/?action=activate_account&emailActivationId=${emailActivationId}`).then(postgreRes => {
-                if (postgreRes.data?.success) {
-                    res.json({
-                        success: true,
-                    })
-                }
-                else {
-                    res.end();
-                }
-            });
-        }
-    }
-}
Index: ges/api/postgre/index.js
===================================================================
--- pages/api/postgre/index.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,1458 +1,0 @@
-import { v4 as uuidv4 } from 'uuid';
-
-import axios from 'axios';
-
-require('dotenv').config();
-
-const crypto = require('crypto');
-
-const nodemailer = require('nodemailer');
-
-import { progressRoundTillTheEnd } from '../poker/tableSpecific';
-
-const Pool = require('pg').Pool
-const pool = new Pool({
-  connectionString: `postgres://${process.env.POSTGRES_USER}:${process.env.POSTGRES_PASSWORD}@${process.env.POSTGRES_HOST}/${process.env.POSTGRES_DB}`
-});
-
-let LAST_LOGIN_REQUEST = Date.now();
-
-export default function handler(req, res) {
-  /**
-   * GET method
-   */
-  if (req.method === 'GET') {
-    /**
-     * /---------------------- GET ----------------------/
-     * If the player won credits, update them in the database.
-     * Also, update the stats in the database.
-     * @action give_credits
-     * @param session_id
-     * @param credits
-     */
-    if (req.query?.action === 'add_credits' && req.query?.session_id && req.query?.credits) {
-      const session_id = req.query.session_id
-      const session = sessions.find(session => session.id === session_id)
-
-      if (session) {
-        session.lastActivity = Date.now();
-
-        if (parseInt(req.query.credits) > 0) {
-          session.credits = session.credits + parseInt(req.query.credits)
-
-          pool.query('UPDATE players SET credits = $1 WHERE username = $2', [session.credits, session.username], (error, results) => {
-            if (error) throw error;
-          });
-        }
-
-        if (req.query?.dont_update_stats) {
-          // continue
-        } else {
-          pool.query('SELECT * FROM stats WHERE username = $1', [session.username], (error, results) => {
-            if (error) throw error;
-
-            if (results.rows.length > 0) {
-              const stats = results.rows[0]
-
-              if (parseInt(req.query.credits) > 0) {
-                pool.query('UPDATE stats SET money_earned = $1 WHERE username = $2', [parseInt(stats.money_earned) + parseInt(req.query.credits), session.username], (error, results) => {
-                  if (error) throw error;
-                });
-              }
-
-              if (req.query?.game === 'blackjack') {
-                if (req.query?.outcome === 'player_busted' || req.query?.outcome === 'player_lost') {
-                  pool.query('UPDATE stats SET blackjack_games = $1 WHERE username = $2', [parseInt(stats.blackjack_games) + 1, session.username], (error, results) => {
-                    if (error) throw error;
-                  });
-                }
-                else if (req.query?.outcome === 'dealer_busted' || req.query?.outcome === 'player_won') {
-                  pool.query('UPDATE stats SET blackjack_games = $1, blackjack_won_games = $2 WHERE username = $3', [parseInt(stats.blackjack_games) + 1, parseInt(stats.blackjack_won_games) + 1, session.username], (error, results) => {
-                    if (error) throw error;
-                  });
-                }
-              }
-              else if (req.query?.game === 'roulette') {
-                if (req.query?.outcome === 'lost') {
-                  pool.query('UPDATE stats SET roulette_games = $1 WHERE username = $2', [parseInt(stats.roulette_games) + 1, session.username], (error, results) => {
-                    if (error) throw error;
-                  });
-                }
-                else if (req.query?.outcome === 'won') {
-                  pool.query('UPDATE stats SET roulette_games = $1, roulette_won_games = $2 WHERE username = $3', [parseInt(stats.roulette_games) + 1, parseInt(stats.roulette_won_games) + 1, session.username], (error, results) => {
-                    if (error) throw error;
-                  });
-                }
-              }
-              else if (req.query?.game === 'poker') {
-                if (req.query?.outcome === 'lost') {
-                  pool.query('UPDATE stats SET poker_games = $1 WHERE username = $2', [parseInt(stats.poker_games) + 1, session.username], (error, results) => {
-                    if (error) throw error;
-                  });
-                }
-                else if (req.query?.outcome === 'won') {
-                  pool.query('UPDATE stats SET poker_games = $1, poker_won_games = $2 WHERE username = $3', [parseInt(stats.poker_games) + 1, parseInt(stats.poker_won_games) + 1, session.username], (error, results) => {
-                    if (error) throw error;
-                  });
-                }
-              }
-            }
-          });
-        }
-
-        update_sessions_to_database();
-          
-        res.json({
-          success: true,
-          credits: session.credits,
-        })
-
-        return ;
-      }
-
-      res.json({
-        success: false,
-      })
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * The player lost credits, update this in the database.
-     * @action take_credits
-     * @param session_id
-     * @param credits
-     */
-    if (req.query?.action === 'take_credits' && req.query?.session_id && req.query?.credits) {
-      const session_id = req.query.session_id
-      const session = sessions.find(session => session.id === session_id)
-
-      let takeWhatYouCan = false;
-      if (req.query?.takeWhatYouCan === "true") takeWhatYouCan = true;
-
-      if (session) {
-        session.lastActivity = Date.now();
-
-        if (session.credits < parseInt(req.query.credits)) {
-          if (takeWhatYouCan) {
-            session.credits = 0;
-          }
-          else {
-            res.json({
-              success: false,
-            });
-
-            return ;
-          }
-        }
-        else {
-          session.credits = session.credits - parseInt(req.query.credits)
-        }
-
-        pool.query('UPDATE players SET credits = $1 WHERE username = $2', [session.credits, session.username], (error, results) => {
-          if (error) throw error;
-        });
-
-        pool.query('SELECT * FROM stats WHERE username = $1', [session.username], (error, results) => {
-          if (error) throw error;
-
-          if (results.rows.length > 0) {
-            const stats = results.rows[0]
-
-            pool.query('UPDATE stats SET money_bet = $1 WHERE username = $2', [parseInt(stats.money_bet) + parseInt(req.query.credits), session.username], (error, results) => {
-              if (error) throw error;
-            });
-          }
-        });
-
-        update_sessions_to_database();
-
-        res.json({
-          success: true,
-          credits: session.credits,
-        })
-        return ;
-      }
-
-      res.json({
-        success: false,
-      })
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * Get all the games played in the past.
-     * @action get_games_history
-     * @param session_id
-     */
-     if (req.query?.action === 'get_games_history' && req.query?.session_id) {
-      const session_id = req.query.session_id
-      const session = sessions.find(session => session.id === session_id)
-
-      let blackjackHistory = [];
-      let rouletteHistory = [];
-      let pokerHistory = [];
-
-      if (session) {
-        // work
-        pool.query('SELECT * FROM blackjack_history WHERE username = $1', [session.username], (error, blackjackResults) => {
-          if (error) throw error;
-
-          if (blackjackResults.rows.length > 0) {
-            blackjackHistory = blackjackResults.rows[0];
-          }
-          
-          pool.query('SELECT * FROM roulette_history WHERE username = $1', [session.username], (error, rouletteResults) => {
-            if (error) throw error;
-
-            if (rouletteResults.rows.length > 0) {
-              rouletteHistory = rouletteResults.rows[0];
-            }
-            
-            pool.query('SELECT * FROM poker_history WHERE username = $1', [session.username], (error, pokerResults) => {
-              if (error) throw error;
-
-              if (pokerResults.rows.length > 0) {
-                pokerHistory = pokerResults.rows[0];
-              }
-
-              res.json({
-                success: true,
-                blackjack: JSON.parse(blackjackHistory.history ?? "[]").reverse(),
-                roulette: JSON.parse(rouletteHistory.history ?? "[]").reverse(),
-                poker: JSON.parse(pokerHistory.history ?? "[]").reverse(),
-              })
-            });
-          });
-        });
-        
-        return ;
-      }
-      else {
-        res.json({
-          success: false,
-        })
-      }
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * /--------------------- ADMIN ----------------------/
-     * Get all the games currently played.
-     * @action get_live_games_as_admin
-     * @param admin_id
-     */
-     if (req.query?.action === 'get_live_games_as_admin' && req.query?.admin_id) {
-      const admin_id = req.query.admin_id
-      const adminSession = adminSessions.find(adminSession => adminSession.id === admin_id)
-
-      if (adminSession) {
-        let tmpRooms = [];
-  
-        for (let key in rooms) {
-          if (key === "loaded") continue ;
-
-          tmpRooms.push(rooms[key]);
-          tmpRooms[tmpRooms.length - 1].id = key;
-        }
-
-        res.json({
-          success: true,
-          blackjack: tmpRooms,
-          roulette: game,
-          poker: tables,
-        })
-        
-        return ;
-      }
-      else {
-        res.json({
-          success: false,
-        })
-      }
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * /--------------------- ADMIN ----------------------/
-     * Get complaints from the players and show them to the admin
-     * @action get_complaints_as_admin
-     * @param admin_id
-     */
-     if (req.query?.action === 'get_complaints_as_admin' && req.query?.admin_id) {
-      const admin_id = req.query.admin_id
-      const adminSession = adminSessions.find(adminSession => adminSession.id === admin_id)
-
-      if (adminSession) {
-        pool.query('SELECT * FROM complaints', (error, results) => {
-          if (error) throw error;
-
-          if (results.rows.length > 0) {
-            res.json({
-              success: true,
-              complaints: results.rows,
-            })
-          }
-          else {
-            res.json({
-              success: false,
-            })
-          }
-        });
-        
-        return ;
-      }
-      else {
-        res.json({
-          success: false,
-        })
-      }
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * Get stats for the player, so we can display them in the front end.
-     * @action get_stats
-     * @param session_id
-     */
-    if (req.query?.action === 'get_stats' && req.query?.session_id) {
-      const session_id = req.query.session_id
-      const session = sessions.find(session => session.id === session_id)
-
-      if (session) {
-        session.lastActivity = Date.now();
-
-        pool.query('SELECT * FROM stats WHERE username = $1', [session.username], (error, results) => {
-          if (error) throw error;
-
-          if (results.rows.length > 0) {
-            res.json({
-              success: true,
-              stats: results.rows[0],
-            })
-          }
-          else {
-            res.json({
-              success: false,
-            })
-          }
-        });
-        
-        return ;
-      }
-
-      res.json({
-        success: false,
-      })
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * Activates an user account if not activated.
-     * @action activate_account
-     * @param emailActivationId
-     */
-    if (req.query?.action === 'activate_account' && req.query?.emailActivationId) {
-      pool.query('SELECT * FROM users WHERE email_activation_id = $1', [req.query.emailActivationId], (error, results) => {
-        if (error) throw error;
-
-        if (results.rows.length > 0) {
-          pool.query('UPDATE users SET activated = $1 WHERE email_activation_id = $2', [true, req.query.emailActivationId], (error, results) => {
-            if (error) throw error;
-
-            res.json({
-              success: true,
-            })
-          });
-        }
-        else {
-          res.json({
-            success: false,
-          })
-        }
-      });
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * Checks if the player is logged in, and returns his session if so.
-     * @action check_if_logged_in
-     * @param session_id
-     */
-     if (req.query?.action === 'check_if_logged_in' && req.query?.session_id) {
-      const session_id = req.query.session_id
-      const session = sessions.find(session => session.id === session_id)
-
-      if (session) {
-        res.json({
-          success: true,
-          displayName: session.displayName,
-          username: session.username,
-          session_id: session.id,
-          credits: session.credits,
-        })
-        return ;
-      }
-
-      res.json({
-        success: false,
-      })
-    }
-
-    /**
-     * /---------------------- GET ----------------------/
-     * Takes the credits in the player's session, and updates the database.
-     * Logs the player out and kills the session.
-     * @action logout
-     * @param session_id
-     */
-    if (req.query?.action === 'logout' && req.query?.session_id) {
-      const session_id = req.query.session_id
-      const session = sessions.find(session => session.id === session_id)
-
-      if (session) {
-        pool.query('UPDATE players SET credits = $1 WHERE username = $2', [session.credits, session.username], (error, results) => {
-          if (error) throw error;
-        });
-
-        sessions.splice(sessions.indexOf(session), 1);
-        update_sessions_to_database();
-
-        // remove player from games:
-        if (rooms[session_id] !== undefined) {
-          delete rooms[session_id];
-          update_rooms_to_database();
-        }
-
-        if (game.players?.map(e=>e.session_id).indexOf(session_id) !== -1) {
-          game.players?.splice(game.players?.map(e=>e.session_id).indexOf(session_id), 1);
-          update_game_to_database();
-        }
-
-        tables.forEach(table => {
-          table.players?.forEach(player => {
-            if (player.id === session_id) {
-              player.isGhost = true;
-            }
-          })
-        })
-        update_tables_to_database();
-      }
-
-      res.json({
-        success: true,
-        message: 'Successfully logged out',
-      })
-    }
-  }
-
-  /**
-   * POST method
-   */
-  if (req.method === 'POST') {
-    const { body } = req;
-
-    /**
-     * /---------------------- POST ----------------------/
-     * Deposits money from credit card to game account.
-     * @action deposit
-     * @param session_id
-     * @param data
-     */
-    if (body?.action === 'deposit') {
-      // checks
-      if (body?.session_id == "undefined" || body?.session_id == "null" || body?.session_id == "") {
-        res.json({
-          success: false,
-          message: 'You are not logged in. Please log in first.',
-        });
-        return ;
-      }
-      if (body?.data?.name == "undefined" || body?.data?.name == "null" || body?.data?.name == "") {
-        res.json({
-          success: false,
-          message: 'Name field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.card == "undefined" || body?.data?.card == "null" || body?.data?.card == "") {
-        res.json({
-          success: false,
-          message: 'Card numbers field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.expire == "undefined" || body?.data?.expire == "null" || body?.data?.expire == "") {
-        res.json({
-          success: false,
-          message: 'Expiration date field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.ccv == "undefined" || body?.data?.ccv == "null" || body?.data?.ccv == "") {
-        res.json({
-          success: false,
-          message: 'CCV field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.amount == "undefined" || body?.data?.amount == "null" || body?.data?.amount == "") {
-        res.json({
-          success: false,
-          message: 'Amount field cannot be empty',
-        });
-        return ;
-      }
-      if (parseInt(body?.data?.amount) > 5000) {
-        res.json({
-          success: false,
-          message: 'Failed to deposit. Insufficient credit on card.',
-        });
-        return ;
-      }
-
-      let session = sessions.find(session => session.id === body?.session_id)
-
-      if (session) {
-        if (parseInt(body.data.amount) > 0) {
-          session.credits = session.credits + parseInt(body.data.amount)
-
-          pool.query('UPDATE players SET credits = $1 WHERE username = $2', [session.credits, session.username], (error, results) => {
-            if (error) throw error;
-            
-            res.json({
-              success: true,
-              credits: session.credits
-            })
-            
-            update_sessions_to_database();
-
-            pool.query('SELECT * FROM credit_cards WHERE username = $1', [session.username], (error, cardsResults) => {
-              if (error) throw error;
-
-              if (cardsResults.rows.length === 0) {
-                const cardSalt = crypto.randomBytes(16).toString('hex');
-                const cardShort = body.data.name + body.data.card + body.data.expire + body.data.ccv;
-                const cardHash = crypto.pbkdf2Sync(cardShort, cardSalt, 1000, 64, 'sha512').toString('hex');
-                pool.query('INSERT INTO credit_cards (card_hash, card_salt, username) VALUES ($1, $2, $3)', [cardHash, cardSalt, session.username], (error, results) => {
-                  if (error) throw error;
-                });
-              }
-            });
-          });
-        }
-      }
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * Withdraws money from game account to personal account.
-     * @action withdraw
-     * @param session_id
-     * @param data
-     */
-     if (body?.action === 'withdraw') {
-      // checks
-      if (body?.session_id == "undefined" || body?.session_id == "null" || body?.session_id == "") {
-        res.json({
-          success: false,
-          message: 'You are not logged in. Please log in first.',
-        });
-        return ;
-      }
-      if (body?.data?.citibank == "undefined" || body?.data?.citibank == "null" || body?.data?.citibank == "") {
-        res.json({
-          success: false,
-          message: 'Bank name field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.iban == "undefined" || body?.data?.iban == "null" || body?.data?.iban == "") {
-        res.json({
-          success: false,
-          message: 'IBAN code field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.bic == "undefined" || body?.data?.bic == "null" || body?.data?.bic == "") {
-        res.json({
-          success: false,
-          message: 'BIC code field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.beneficiary == "undefined" || body?.data?.beneficiary == "null" || body?.data?.beneficiary == "") {
-        res.json({
-          success: false,
-          message: 'Beneficiary name field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.address == "undefined" || body?.data?.address == "null" || body?.data?.address == "") {
-        res.json({
-          success: false,
-          message: 'Bank address field cannot be empty',
-        });
-        return ;
-      }
-      if (body?.data?.amount == "undefined" || body?.data?.amount == "null" || body?.data?.amount == "") {
-        res.json({
-          success: false,
-          message: 'Amount field cannot be empty',
-        });
-        return ;
-      }
-
-      let session = sessions.find(session => session.id === body?.session_id)
-
-      if (session) {
-        if (parseInt(body.data.amount) > 0) {
-          session.credits = Math.max(session.credits - parseInt(body.data.amount), 0)
-
-          pool.query('UPDATE players SET credits = $1 WHERE username = $2', [session.credits, session.username], (error, results) => {
-            if (error) throw error;
-
-            res.json({
-              success: true,
-              credits: session.credits
-            })
-
-            update_sessions_to_database();
-          });
-        }
-      }
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * /---------------------- ADMIN ----------------------/
-     * Sends an answer to a complaint.
-     * @action send_complaint_answer_as_admin
-     * @param admin_id
-     * @param complaint
-     */
-     if (body?.action === 'send_complaint_answer_as_admin') {
-      // checks
-      if (body?.admin_id == "undefined" || body?.admin_id == "null" || body?.admin_id == "") {
-        res.json({
-          success: false,
-          message: 'You are not logged in. Please log in first.',
-        });
-        return ;
-      }
-      if (body?.complaint.by == "undefined" || body?.complaint.by == "null" || body?.complaint.by == "") {
-        res.json({
-          success: false,
-          message: 'You cannot send the answer to noone.',
-        });
-        return ;
-      }
-      if (body?.complaint.description == "undefined" || body?.complaint.description == "null" || body?.complaint.description == "") {
-        res.json({
-          success: false,
-          message: 'You cannot answer an empty complaint.',
-        });
-        return ;
-      }
-      if (body?.complaint.answer == "undefined" || body?.complaint.answer == "null" || body?.complaint.answer == "") {
-        res.json({
-          success: false,
-          message: 'You cannot submit an empty answer.',
-        });
-        return ;
-      }
-
-      let adminSession = adminSessions.find(adminSession => adminSession.id === body.admin_id)
-
-      if (adminSession) {
-        pool.query('UPDATE complaints SET answer = $1, answered = $2 WHERE by = $3', [body.complaint.answer, true, body.complaint.by], (error, complaintResults) => {
-          if (error) throw error;
-
-          pool.query('SELECT * FROM complaints', (error, results) => {
-            if (error) throw error;
-
-            res.json({
-              success: true,
-              complaints: results.rows,
-            })
-          });
-
-          sendMailForComplaintAnswered(body.complaint);
-        });
-      }
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * Sends a complaint.
-     * @action complain
-     * @param session_id
-     * @param description
-     */
-     if (body?.action === 'complain') {
-      // checks
-      if (body?.session_id == "undefined" || body?.session_id == "null" || body?.session_id == "") {
-        res.json({
-          success: false,
-          message: 'You are not logged in. Please log in first.',
-        });
-        return ;
-      }
-      if (body?.description == "undefined" || body?.description == "null" || body?.description == "") {
-        res.json({
-          success: false,
-          message: 'You cannot submit an empty complaint.',
-        });
-        return ;
-      }
-
-      let session = sessions.find(session => session.id === body.session_id)
-
-      if (session) {
-        // date, by, description, answered
-        const date = new Date();
-        pool.query('INSERT INTO complaints (date, by, description, answered, answer) VALUES ($1, $2, $3, $4, $5)', [date, session.username, body.description, false, ''], (error, complaintResults) => {
-          if (error) throw error;
-
-          res.json({
-            success: true,
-          })
-        });
-      }
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * Checks if the entered account info is good, and registers a new user in the database if so.
-     * @action register
-     * @param username
-     * @param displayName
-     * @param password
-     */
-    if (body?.action === 'register') {
-      // checks
-      if (body?.email == "undefined" || body?.email == "null" || body?.email == "") {
-        res.json({
-          success: false,
-          message: 'Email is required',
-        });
-        return ;
-      }
-      if (!body?.email?.includes('@') || body?.email?.indexOf('@', body?.email?.indexOf('@')+1) !== -1) {
-        res.json({
-          success: false,
-          message: 'Not a valid email',
-        });
-        return ;
-      }
-      if (body?.username == "undefined" || body?.username == "null" || body?.username == "") {
-        res.json({
-          success: false,
-          message: 'Username is required',
-        });
-        return ;
-      }
-      if (/[^a-zA-Z]/g.test(body?.username)) {
-        res.json({
-          success: false,
-          message: 'Username must contain only letters',
-        })
-        return ;
-      }
-      if (body?.displayName == "undefined" || body?.displayName == "null" || body?.displayName == "") {
-        res.json({
-          success: false,
-          message: 'Display name is required',
-        });
-        return ;
-      }
-      if (body?.displayName?.toLowerCase() === "guest") {
-        res.json({
-          success: false,
-          message: 'Display name cannot be guest',
-        });
-        return ;
-      }
-      if (body?.password == "undefined" || body?.password == "null" || body?.password == "") {
-        res.json({
-          success: false,
-          message: 'Password is required',
-        });
-        return ;
-      }
-
-      // everything's okay
-      body.username = body.username.toLowerCase()
-
-      // hash password
-      const salt = crypto.randomBytes(16).toString('hex');
-      const hashedPassword = crypto.pbkdf2Sync(body.password, salt, 1000, 64, 'sha512').toString('hex');
-
-      // check if user already exists
-      pool.query('SELECT * FROM users WHERE username = $1', [body.username], (error, results) => {
-        if (error) throw error;
-
-        if (results.rows.length > 0) {
-          res.json({
-            success: false,
-            message: 'Username already exists',
-          });
-          return ;
-        }
-
-        const emailActivationId = uuidv4();
-
-        // store user in database
-        pool.query('INSERT INTO users (username, password, salt, email, email_activation_id, activated) VALUES ($1, $2, $3, $4, $5, $6)', [body.username, hashedPassword, salt, body.email, emailActivationId, false], (error, usersResults) => {
-          if (error) throw error;
-
-          pool.query('INSERT INTO players (username, display_name, credits) VALUES ($1, $2, $3)', [body.username, body.displayName, 1000], (error, playersResults) => {
-            if (error) throw error;
-
-            pool.query('INSERT INTO stats (username, blackjack_games, roulette_games, poker_games, blackjack_won_games, roulette_won_games, poker_won_games, money_bet, money_earned) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)', [body.username, 0, 0, 0, 0, 0, 0, 0, 0], (error, statsResults) => {
-              if (error) throw error;
-
-              sendMailForActivation(body.displayName, body.email, emailActivationId);
-
-              res.json({
-                success: true,
-                message: 'Registration successful',
-              });
-              return ;
-            });
-          });
-        });
-      });
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * Checks if the entered account info is good, and logs the user in if so.
-     * @action login
-     * @param username
-     * @param password
-     */
-    if (body?.action === 'login') {
-      // checks
-      if (body?.username == "undefined" || body?.username == "null" || body?.username == "") {
-        res.json({
-          success: false,
-          message: 'Username is required',
-        });
-        return ;
-      }
-      if (/[^a-zA-Z]/g.test(body?.username)) {
-        res.json({
-          success: false,
-          message: 'Username must contain only letters',
-        })
-        return ;
-      }
-      if (body?.password == "undefined" || body?.password == "null" || body?.password == "") {
-        res.json({
-          success: false,
-          message: 'Password is required',
-        });
-        return ;
-      }
-
-      // everything's okay
-      body.username = body.username.toLowerCase();
-
-      // check if user exists
-      pool.query('SELECT * FROM users WHERE username = $1', [body.username], (error, usersResults) => {
-        if (error) throw error;
-
-        if (usersResults.rows.length === 0) {
-          res.json({
-            success: false,
-            message: 'User does not exist. Try Registering instead.',
-          });
-          return ;
-        }
-        else {
-          if (usersResults.rows.length > 0) {
-            const user = usersResults.rows[0];
-
-            const salt = user.salt;
-            const hashedPassword = crypto.pbkdf2Sync(body.password, salt, 1000, 64, 'sha512').toString('hex');
-
-            if (hashedPassword === user.password) {
-              if (user.activated === "false") {
-                res.json({
-                  success: false,
-                  message: 'Account not activated. Check your email.',
-                })
-
-                return ;
-              }
-
-              pool.query('SELECT * FROM players WHERE username = $1', [body.username], (error, playersResults) => {
-                if (playersResults.rows.length > 0) {
-                  let session = sessions.find(session => session.username === playersResults.rows[0].username)
-
-                  if (session) {
-                    // Already logged in
-                    res.json({
-                      success: true,
-                      message: 'Login successful',
-                      session: session,
-                    })
-                  }
-                  else {
-                    // create a session
-                    session = {
-                      id: uuidv4(),
-                      displayName: playersResults.rows[0].display_name,
-                      username: playersResults.rows[0].username,
-                      credits: playersResults.rows[0].credits,
-                      lastActivity: Date.now(),
-                    }
-
-                    sessions.push(session);
-
-                    update_sessions_to_database();
-    
-                    res.json({
-                      success: true,
-                      message: 'Login successful',
-                      session: session,
-                    })
-                  }
-
-                  return ;
-                }
-              });
-            }
-            else {
-              res.json({
-                success: false,
-                message: 'Username and password do not match.',
-              });
-            }
-          }
-        }
-      });
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * Checks if an active google session is available, and logs the user via their google account.
-     * @action login_via_google
-     * @param googleSession
-     */
-    if (body?.action === 'login_via_google') {
-      // checks
-      if (!body?.googleSession?.user?.email || body?.googleSession?.user?.email == "undefined" || body?.googleSession?.user?.email == "null" || body?.googleSession?.user?.email == "") {
-        res.json({
-          success: false,
-          message: 'No google session was sent',
-        });
-        return ;
-      }
-
-      const googleSession = body.googleSession.user;
-      googleSession.username = googleSession.email;
-
-      // check if user already exists
-      pool.query('SELECT * FROM users WHERE username = $1', [googleSession.username], (error, results) => {
-        if (error) throw error;
-
-        if (results.rows.length > 0) {
-          let session = sessions.find(session => session.username === googleSession.username)
-
-          if (session) {
-            // Already logged in
-            res.json({
-              success: true,
-              message: 'Login successful',
-              session: session,
-            })
-          }
-          else {
-            pool.query('SELECT * FROM players WHERE username = $1', [googleSession.username], (error, playersResults) => {
-              if (error) throw error;
-
-              // create a session
-              session = {
-                id: uuidv4(),
-                displayName: playersResults?.rows[0]?.display_name,
-                username: playersResults?.rows[0]?.username,
-                credits: playersResults?.rows[0]?.credits,
-                lastActivity: Date.now(),
-              }
-
-              sessions.push(session);
-
-              update_sessions_to_database();
-
-              res.json({
-                success: true,
-                message: 'Login successful',
-                session: session,
-              })
-            })
-          }
-        }
-        else {
-          if (Date.now() - LAST_LOGIN_REQUEST <= 3000) {
-            res.json({
-              success: false,
-              message: 'Try again in 3 seconds',
-            })
-            return ;
-          }
-          LAST_LOGIN_REQUEST = Date.now();
-
-          // store user in database
-          pool.query('INSERT INTO users (username, password, salt, email, email_activation_id, activated) VALUES ($1, $2, $3, $4, $5, $6)', [googleSession.username, "none", "none", googleSession.email, "none", true], (error, usersResults) => {
-            if (error) throw error;
-
-            pool.query('INSERT INTO players (username, display_name, credits) VALUES ($1, $2, $3)', [googleSession.username, googleSession.name, 1000], (error, playersResults) => {
-              if (error) throw error;
-
-              pool.query('INSERT INTO stats (username, blackjack_games, roulette_games, poker_games, blackjack_won_games, roulette_won_games, poker_won_games, money_bet, money_earned) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)', [googleSession.username, 0, 0, 0, 0, 0, 0, 0, 0], (error, statsResults) => {
-                if (error) throw error;
-
-                pool.query('SELECT * FROM players WHERE username = $1', [googleSession.username], (error, playersResults) => {
-                  if (error) throw error;
-
-                  // create a session
-                  const session = {
-                    id: uuidv4(),
-                    displayName: playersResults?.rows[0]?.display_name,
-                    username: playersResults?.rows[0]?.username,
-                    credits: playersResults?.rows[0]?.credits,
-                    lastActivity: Date.now(),
-                  }
-
-                  sessions.push(session);
-
-                  update_sessions_to_database();
-
-                  res.json({
-                    success: true,
-                    message: 'Login successful',
-                    session: session,
-                  })
-                })
-
-              });
-            });
-          });
-        }
-      });
-    }
-
-    /**
-     * /---------------------- POST ----------------------/
-     * /---------------------- ADMIN ----------------------/
-     * Checks if the entered account info is good, and logs the admin in if so.
-     * @action login_as_admin
-     * @param username
-     * @param password
-     */
-    if (body?.action === 'login_as_admin') {
-      // checks
-      if (body?.username == "undefined" || body?.username == "null" || body?.username == "") {
-        res.json({
-          success: false,
-          message: 'Username is required',
-        });
-        return ;
-      }
-      if (/[^a-zA-Z]/g.test(body?.username)) {
-        res.json({
-          success: false,
-          message: 'Username must contain only letters',
-        })
-        return ;
-      }
-      if (body?.password == "undefined" || body?.password == "null" || body?.password == "") {
-        res.json({
-          success: false,
-          message: 'Password is required',
-        });
-        return ;
-      }
-
-      // everything's okay
-      body.username = body.username.toLowerCase();
-
-      // check if user exists
-      pool.query('SELECT * FROM admins WHERE username = $1', [body.username], (error, adminsResults) => {
-        if (error) throw error;
-
-        if (adminsResults.rows.length === 0) {
-          res.json({
-            success: false,
-            message: 'Admin does not exist.',
-          });
-          return ;
-        }
-        else {
-          if (adminsResults.rows.length > 0) {
-            const user = adminsResults.rows[0];
-
-            const salt = user.salt;
-            const hashedPassword = crypto.pbkdf2Sync(body.password, salt, 1000, 64, 'sha512').toString('hex');
-
-            if (hashedPassword === user.password) {
-              let adminSession = adminSessions.find(session => session.username === adminsResults.rows[0].username)
-
-              if (adminSession) {
-                // Already logged in
-                res.json({
-                  success: true,
-                  message: 'Login successful',
-                  session: adminSession,
-                })
-              }
-              else {
-                // create a session
-                adminSession = {
-                  id: uuidv4(),
-                  username: adminsResults.rows[0].username,
-                }
-
-                adminSessions.push(adminSession);
-
-                res.json({
-                  success: true,
-                  message: 'Login successful',
-                  session: adminSession,
-                })
-              }
-
-              return ;
-            }
-            else {
-              res.json({
-                success: false,
-                message: 'Username and password do not match.',
-              });
-            }
-          }
-        }
-      });
-    }
-  }
-}
-
-// Mailing
-const transporter = nodemailer.createTransport({
-  service: 'gmail',
-  auth: {
-      user: process.env.GOOGLE_EMAIL,
-      pass: process.env.GOOGLE_APP_PASSWORD,
-  }
-})
-
-function sendMailForActivation(displayName, userEmail, emailActivationId) {
-  const message = {
-      from: process.env.GOOGLE_EMAIL,
-      to: userEmail,
-      subject: "Caessino - Activate your account",
-      html: `
-          <h4>Hello, ${displayName}</h4>
-          <p>Thank you for creating an account at Caessino. Just one more step and you can start enjoying the games!</p>
-          <p>To activate your account please follow this link: <a target="_blank" href="${process.env.HOME_URL}/activate/${emailActivationId}">Activate account</a>
-          <br/>
-          <p>Cheers and happy playing,</p>
-          <p>The Team ESS</p>
-      `
-  }
-
-  transporter.sendMail(message, (err, data) => {
-      if (err) {
-          console.log(err);
-      }
-  })
-}
-
-let mailSentTo = {
-  poker: [],
-  roulette: [],
-  blackjack: [],
-}
-function sendMailForGameCompletition(game, username, displayName) {
-  const msgPoker = 'Your game was played to the end by the computer with the following rules:<br/>1. No more bets were made by any player;<br/>2. Cards were dealt normally like they would be under normal circumstances;<br/>3. Credits were given to the winners and taken from the losers.';
-  const msgRoulette = 'If you reconnect immediately, you can catch this ongoing game. But don\'t worry if you can\'t! If you win, credits will be awarded to you.';
-  const msgBlackjack = 'You can now continue playing your game.';
-  
-  pool.query('SELECT * FROM users WHERE username = $1', [username], (error, results) => {
-    if (error) throw error;
-
-    if (results.rows.length > 0) {
-      const userEmail = results.rows[0].email;
-
-      if ((game === 'poker' && mailSentTo.poker.indexOf(userEmail) === -1) ||
-          (game === 'roulette' && mailSentTo.roulette.indexOf(userEmail) === -1) ||
-          (game === 'blackjack' && mailSentTo.blackjack.indexOf(userEmail) === -1))
-      {
-        const message = {
-          from: process.env.GOOGLE_EMAIL,
-          to: userEmail,
-          subject: "Caessino - Server is back online",
-          html: `
-            <h4>Hello, ${displayName}</h4>
-            <p>We are writing to inform you that the server is back online.</p>
-            <p>We know that you were in the middle of playing ${game}, and we apologize for the interrupt.</p>
-            <p>${game === 'poker' ? msgPoker : game === 'roulette' ? msgRoulette : msgBlackjack}</p>
-            <br/>
-            <p>All the best,</p>
-            <p>The Team ESS</p>
-            `
-        }
-
-        transporter.sendMail(message, (err, data) => {
-          if (err) {
-              console.log(err);
-          }
-        })
-
-        mailSentTo[game].push(userEmail)
-      }
-    }
-  });
-}
-
-function sendMailForComplaintAnswered(complaint) {
-  pool.query('SELECT * FROM users WHERE username = $1', [complaint.by], (error, results) => {
-    if (error) throw error;
-
-    if (results.rows.length > 0) {
-      const userEmail = results.rows[0].email;
-
-      const message = {
-        from: process.env.GOOGLE_EMAIL,
-        to: userEmail,
-        subject: "Caessino - Your complaint has been answered",
-        html: `
-          <h4>Hello, ${complaint.by}</h4>
-          <p>You wrote a complaint on ${new Date(complaint.date).toGMTString()}, saying:</p>$
-          <blockquote><em>${complaint.description}</em></blockquote>
-          <br/>
-          <p>Your complaint has been listened to, here's what the admin has to say:<p>
-          <blockquote><em>${complaint.answer}</em></blockquote>
-          <br/>
-          <p>We hope this fixes your issue,</p>
-          <p>The Team ESS</p>
-          `
-      }
-
-      transporter.sendMail(message, (err, data) => {
-        if (err) {
-            console.log(err);
-        }
-      })
-    }
-  });
-}
-
-/**
- * Admin session data
- */
- export var adminSessions = []
-
-/**
- * User session data
- */
-export var sessions = []
-
-export function update_sessions_to_database() {
-  pool.query('UPDATE sessions SET data = $1 WHERE identifier = $2', [JSON.stringify(sessions), 'sessions_data'], (error, results) => {
-    if (error) throw error;
-  });
-}
-   
-export function load_sessions_from_database() {
-  pool.query('SELECT data FROM sessions WHERE identifier = $1', ['sessions_data'], (error, results) => {
-    if (error) throw error;
-
-    sessions = JSON.parse(results?.rows[0]?.data || []);
-  });
-}
-load_sessions_from_database();
- 
-/**
- *  Poker game data
- */
-export var tables = []
- 
-export function cleanTables() {
-   tables = [];
-}
- 
-export function update_tables_to_database() {
-  tables = tables.map(table => ({...table, turnTimeout: null}));
-
-  pool.query('UPDATE poker SET data = $1 WHERE identifier = $2', [JSON.stringify(tables), 'poker_data'], (error, results) => {
-    if (error) throw error;
-  });
-}
-   
-export async function load_tables_from_database() {
-  pool.query('SELECT data FROM poker WHERE identifier = $1', ['poker_data'], (error, results) => {
-    if (error) throw error;
-
-    tables = JSON.parse(results?.rows[0]?.data || []);
-
-    tables.forEach(table => {
-      if (table.started) {
-        progressRoundTillTheEnd(table.id);
-      }
-    })
-
-    tables.forEach(table => {
-      if (table.ended) {
-        table.players?.forEach(player => {
-          if (!player.isGhost) {
-            sendMailForGameCompletition('poker', player.username, player.displayName);
-          }
-        })
-      }
-    })
-
-    cleanTables();
-
-    update_tables_to_database();
-  });
-}
-load_tables_from_database();
-
-/**
- *  Roulette game data
- */
-export var game = {}
-  
-export function update_game_to_database() {
-  pool.query('UPDATE roulette SET data = $1 WHERE identifier = $2', [JSON.stringify(game), 'roulette_data'], (error, results) => {
-    if (error) throw error;
-  });
-}
-    
-export async function load_game_from_database() {
-  pool.query('SELECT data FROM roulette WHERE identifier = $1', ['roulette_data'], (error, results) => {
-    if (error) throw error;
-
-    game = JSON.parse(results?.rows[0]?.data || []);
-
-    game.players?.forEach(player => {
-      sendMailForGameCompletition('roulette', player.username, player.name);
-    })
-
-    game.loaded = true;
-  });
-}
-load_game_from_database();
-
-/**
- *  Blackjack game data
- */
-export var rooms = []
-  
-export function update_rooms_to_database() {
-  let tmpRooms = [];
-  
-  for (let key in rooms) {
-    if (key === "loaded") continue ;
-
-    tmpRooms.push(rooms[key]);
-    tmpRooms[tmpRooms.length - 1].id = key;
-  }
-
-  pool.query('UPDATE blackjack SET data = $1 WHERE identifier = $2', [JSON.stringify(tmpRooms), 'blackjack_data'], (error, results) => {
-    if (error) throw error;
-  });
-}
-     
-export async function load_rooms_from_database() {
-  pool.query('SELECT data FROM blackjack WHERE identifier = $1', ['blackjack_data'], (error, results) => {
-    if (error) throw error;
-
-    if (results?.rows[0]?.data) {
-      const tmpRooms = JSON.parse(results.rows[0].data);
-
-      tmpRooms.forEach(room => {
-        rooms[room.id] = {...room, id: ''}
-      })
-
-      tmpRooms.forEach(room => {
-        sendMailForGameCompletition('blackjack', room.username, room.displayName);
-      })
-      
-      rooms["loaded"] = true;
-    }
-  });
-}
-load_rooms_from_database();
-
-export async function saveGameInHistory(gameType, game, username) {
-  if (!username || !game || !gameType) return ;
-
-  if (gameType === 'blackjack') {
-    pool.query('SELECT * FROM blackjack_history WHERE username = $1', [username], (error, results) => {
-      if (error) throw error;
-  
-      if (results.rows.length > 0) {
-        let games = JSON.parse(results?.rows[0]?.history ?? []);
-
-        if (games.indexOf(game) === -1)
-          games.push(game);
-
-        pool.query('UPDATE blackjack_history SET history = $1 WHERE username = $2', [JSON.stringify(games), username], (error, newResults) => {
-          if (error) throw error;
-        });
-      }
-      else {
-        pool.query('INSERT INTO blackjack_history (username, history) VALUES ($1, $2)', [username, JSON.stringify([game])], (error, newResults) => {
-          if (error) throw error;
-        });
-      }
-    });
-  }
-
-  if (gameType === 'roulette') {
-    pool.query('SELECT * FROM roulette_history WHERE username = $1', [username], (error, results) => {
-      if (error) throw error;
-  
-      if (results.rows.length > 0) {
-        let games = JSON.parse(results?.rows[0]?.history ?? []);
-
-        if (games.indexOf(game) === -1)
-          games.push(game);
-
-        pool.query('UPDATE roulette_history SET history = $1 WHERE username = $2', [JSON.stringify(games), username], (error, newResults) => {
-          if (error) throw error;
-        });
-      }
-      else {
-        pool.query('INSERT INTO roulette_history (username, history) VALUES ($1, $2)', [username, JSON.stringify([game])], (error, newResults) => {
-          if (error) throw error;
-        });
-      }
-    });
-  }
-
-  if (gameType === 'poker') {
-    pool.query('SELECT * FROM poker_history WHERE username = $1', [username], (error, results) => {
-      if (error) throw error;
-  
-      if (results.rows.length > 0) {
-        let games = JSON.parse(results?.rows[0]?.history ?? []);
-
-        if (games.indexOf(game) === -1)
-          games.push(game);
-
-        pool.query('UPDATE poker_history SET history = $1 WHERE username = $2', [JSON.stringify(games), username], (error, newResults) => {
-          if (error) throw error;
-        });
-      }
-      else {
-        pool.query('INSERT INTO poker_history (username, history) VALUES ($1, $2)', [username, JSON.stringify([game])], (error, newResults) => {
-          if (error) throw error;
-        });
-      }
-    });
-  }
-}
Index: ges/api/roulette/calculateWinnings.js
===================================================================
--- pages/api/roulette/calculateWinnings.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,49 +1,0 @@
-export function getWinningBets(magicNumber) {
-    let winningBets = [];
-    winningBets.push(magicNumber);
-    
-    if (magicNumber != 0) {
-        if ((magicNumber <= 9 && magicNumber % 2 == 1) || (magicNumber > 10 && magicNumber <= 18 && magicNumber % 2 == 0) ||
-            (magicNumber > 19 && magicNumber <= 27 && magicNumber % 2 == 1) || (magicNumber > 27 && magicNumber % 2 == 0)) {
-
-            winningBets.push('Red');
-        }
-        else {
-            winningBets.push('Black');
-        }
-
-        if (magicNumber % 2 === 0)      winningBets.push('Even');
-        else                            winningBets.push('Odd');
-
-        if (magicNumber <= 12)          winningBets.push('1-12');
-        else if (magicNumber <= 24)     winningBets.push('13-24');
-        else                            winningBets.push('25-36');
-
-        if (magicNumber <= 18)          winningBets.push('1-18');
-        else                            winningBets.push('19-36');
-
-        if (magicNumber % 3 === 0)      winningBets.push('Remainder3');
-        else if (magicNumber % 3 === 2) winningBets.push('Remainder2');
-        else                            winningBets.push('Remainder1');
-    }
-
-    return winningBets;
-}
-
-export function calculateWinnings(player) {
-    if (player.outcome === 'lost') return 0;
-
-    let bets = player.whichBets;
-    let bet = player.betAmount;
-
-    if (bets[0] === 'Even' || bets[0] === 'Odd') return 2 * bet;
-    else if (bets[0] === 'Red' || bets[0] === 'Black') return 2 * bet;
-    else if (bets[0].includes('Remainder')) return 3 * bet;
-    else if (bets[0] === '1-12' || bets[0] === '13-24' || bets[0] === '25-36') return 3 * bet;
-    else if (bets[0] === '1-18' || bets[0] === '19-36') return 2 * bet;
-    else if (bets.length === 4) return 9 * bet;
-    else if (bets.length === 2) return 18 * bet;
-    else if (bets.length === 1) return 36 * bet;
-
-    return 0;
-}
Index: ges/api/roulette/gameStates.js
===================================================================
--- pages/api/roulette/gameStates.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,137 +1,0 @@
-import { calculateWinnings } from './calculateWinnings'
-
-import { game, saveGameInHistory } from '../postgre/index'
-
-import axios from 'axios';
-
-export let samplePlayer = {
-    session_id: '',
-    name: '',
-    whichBets: [],
-    coinPlaced: {
-        x: -1,
-        y: -1,                
-    },
-    credits: -1,
-    betAmount: 0,
-    wonAmount: 0,
-    status: '_1_',
-    outcome: 'none',
-    gotResults: false,
-}
-
-export function resetGame() {
-    game.magicNumber = -1;
-    game.winningBets = [];
-    game.status = '_1_ongoing_timer';
-
-    let inactivePlayers = []
-
-    game.players.forEach(player => {
-        player.whichBets = [];
-        player.betAmount = 0;
-        player.wonAmount = 0;
-        player.coinPlaced = {
-            x: -1,
-            y: -1,                
-        },
-        player.outcome = 'none';
-        player.status = '_1_no_placed_bet';
-        player.gotResults = false;
-
-        const d = Date.now();
-
-        if (d - player.lastActivity > 200000) {
-            inactivePlayers.push(player);
-        }
-    })
-
-    for (let i = 0; i < inactivePlayers.length; i++) {
-        if (game.players.indexOf(inactivePlayers[i]) !== -1) {
-            game.players.splice(game.players.indexOf(inactivePlayers[i]), 1);
-        }
-    }
-}
-
-export function updateGameWithWinners() {
-    for (let i = 0; i < game.players.length; i++) {
-        const player = game.players[i];
-
-        let playerWon = false;
-        player.whichBets.forEach(bet => {
-            if (game.winningBets.indexOf(bet) !== -1) {
-                playerWon = true;
-            }
-        })
-
-        if (playerWon) {
-            player.outcome = 'won';
-        }
-        else {
-            player.outcome = 'lost';
-        }
-
-        player.wonAmount = calculateWinnings(player);
-
-        axios.get(`${process.env.HOME_URL}/api/postgre/?action=add_credits&session_id=${player.session_id}&credits=${player.wonAmount}&game=roulette&outcome=${player.outcome}`).then(postgreRes => {
-            if (postgreRes.data?.success) {
-                player.credits = postgreRes.data?.credits;
-            }
-        });
-
-        if (player.whichBets?.length > 0) {
-          game.finished = new Date().toGMTString();
-          saveGameInHistory('roulette', game, player.username)
-        }
-    }
-}
-
-export function addPlayer(session_id, name, username) {
-    if (game.players.map(e=>e.session_id).indexOf(session_id) === -1) {
-        game.players.push({
-            lastActivity: Date.now(),
-            session_id: session_id,
-            username: username,
-            name: name,
-            whichBets: [],
-            coinPlaced: {
-                x: -1,
-                y: -1,                
-            },
-            credits: -1,
-            betAmount: 0,
-            wonAmount: 0,
-            status: '_1_no_placed_bet',
-            outcome: 'none',
-            gotResults: false,
-        })
-    }
-    else {
-        game.players[game.players.map(e=>e.session_id).indexOf(session_id)].credits = -1;
-    }
-}
-
-export function getPlayer(session_id) {
-    const playerIdx = game.players.map(e=>e.session_id).indexOf(session_id);
-
-    if (playerIdx !== -1) {
-        return {
-            success: true,
-            player: game.players[playerIdx],
-        }
-    }
-
-    return {
-        success: false,
-        player: {...samplePlayer},
-    };
-}
-
-export function restrictGameInfo() {
-    const restrictedPlayers = game.players.map(player=>({...player, session_id: ""}))
-
-    return {
-        ...game,
-        players: restrictedPlayers,
-    }
-}
Index: ges/api/roulette/index.js
===================================================================
--- pages/api/roulette/index.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,167 +1,0 @@
-import axios from 'axios';
-
-import { game, update_game_to_database } from '../postgre/index'
-
-require('dotenv').config();
-
-import { resetGame, updateGameWithWinners, addPlayer, getPlayer, restrictGameInfo } from './gameStates'
-
-import { getWinningBets } from './calculateWinnings'
-
-(function() {
-    setInterval(() => {
-        game.timeToStart--;
-
-        // WAIT_BEFORE seconds is the time allocated for spinning the wheel and seeing the results.
-        if (game.timeToStart == 0) {
-            game.timeToStart = game.COUNTDOWN_FROM + game.WAIT_BEFORE;
-
-            game.magicNumber = Math.floor(Math.random() * 37);
-            game.winningBets = getWinningBets(game.magicNumber);
-            
-            setTimeout(() => {
-                updateGameWithWinners();
-            }, 6000)
-        }
-        else if (game.timeToStart == 10) {
-            game.status = '_2_spinning';
-        }
-        else if (game.timeToStart == game.COUNTDOWN_FROM) {
-            resetGame();
-        }
-
-    }, 1000);
-})();
-
-if (game.status === undefined) {
-    game.status = '_1_ongoing_timer';     // statuses: _1_ongoing_timer, _2_spinning
-    game.timeToStart = 30;                // in seconds
-    game.COUNTDOWN_FROM = 30;
-    game.WAIT_BEFORE = 20;
-    game.magicNumber = -1;
-    game.winningBets = [];
-    game.players = [];
-}
-
-/**
- * ********************* BEGIN OF REQUEST HANDLER *********************
- */
-export default async function handler(req, res) {
-    /**
-     * GET method
-     */
-    if (req.method === 'GET') {
-        /**
-         * /---------------------- GET ----------------------/
-         * Place a bet.
-         * @action place_bet
-         * @param session_id
-         * @param betAmount
-         * @param whichBets
-         * @param coinPlacedX
-         * @param coinPlacedY
-         */
-        if (req.query.action === 'place_bet' && req.query?.session_id && req.query?.betAmount && req.query?.whichBets && req.query?.coinPlacedX && req.query?.coinPlacedY) {
-            const session_id = req.query.session_id;
-
-            const { success, player } = getPlayer(session_id);
-
-            if (success && game.status.includes('_1_') && player.status.includes('_1_')) {
-                axios.get(`${process.env.HOME_URL}/api/postgre?action=take_credits&session_id=${session_id}&credits=${req.query.betAmount}`).then(postgreRes => {
-                    if (postgreRes.data?.success) {
-                        player.betAmount = parseInt(req.query.betAmount);
-                        player.whichBets = req.query.whichBets.split(',');
-                        player.status = '_2_placed_bet';
-                        player.coinPlaced = {
-                            x: req.query.coinPlacedX,
-                            y: req.query.coinPlacedY,
-                        },
-                        player.credits = postgreRes.data?.credits;
-                        player.lastActivity = Date.now();
-                    }
-                });
-            }
-
-            res.end();
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * Updates the state periodically
-         * @action update_state
-         * @param session_id
-         */
-         if (req.query.action === 'update_state' && req.query?.session_id) {
-            const session_id = req.query.session_id;
-
-            const { success, player } = getPlayer(session_id);
-
-            let extraAction = "";
-            let extraAction2 = "";
-            let magicNumber = -1;
-            let winningBets = [];
-
-            if (success) {
-                if (game.timeToStart > game.COUNTDOWN_FROM && !player.gotResults) {
-                    extraAction = "spin_wheel";
-                    magicNumber = game.magicNumber;
-                    winningBets = game.winningBets;
-
-                    player.gotResults = true;
-                }
-                if (game.timeToStart > game.COUNTDOWN_FROM + game.WAIT_BEFORE - 15) {
-                    extraAction2 = "keep_alert";
-                }
-            }
-
-            if (game.loaded !== undefined && game.loaded) {
-                update_game_to_database();
-            }
-
-            res.json({
-                success: true,
-                rouletteGame: {
-                    game: restrictGameInfo(),
-                    player: player,
-                },
-                extraAction: extraAction,
-                extraAction2: extraAction2,
-                magicNumber: magicNumber,
-                winningBets: winningBets,
-            })
-        }
-
-        /**
-         * /---------------------- GET ----------------------/
-         * If the player is not in an existing room, create a room for them.
-         * If they are reconnecting, get the room they were in.
-         * @action get_player_info_on_enter
-         * @param session_id
-         */
-        if (req.query.action === 'get_player_info_on_enter' && req.query?.session_id) {
-            const session_id = req.query.session_id;
-
-            axios.get(`${process.env.HOME_URL}/api/postgre?action=check_if_logged_in&session_id=${session_id}`).then(postgreRes => {
-                if (postgreRes.data?.success) {
-                    addPlayer(session_id, postgreRes.data?.displayName, postgreRes.data?.username);
-                
-                    res.json({
-                        success: true,
-                        game: game,
-                        displayName: postgreRes.data?.displayName,
-                        session_id: postgreRes.data?.session_id,
-                        credits: postgreRes.data?.credits,
-                    })
-                }
-                else {
-                    res.json({
-                        success: false,
-                    })
-                }
-            });
-        }
-   }
-}
-/**
- * ********************* END OF REQUEST HANDLER *********************
- */
Index: ges/games/blackjack.js
===================================================================
--- pages/games/blackjack.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,11 +1,0 @@
-import React from 'react'
-
-import Blackjack from '../../components/blackjack/Blackjack'
-
-const blackjack = () => {
-  return (
-    <Blackjack/>
-  )
-}
-
-export default blackjack
Index: ges/games/poker.js
===================================================================
--- pages/games/poker.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,13 +1,0 @@
-import React from 'react'
-
-import Poker from '../../components/poker/Poker'
-
-const poker = () => {
-  return (
-    <div className="app">
-      <Poker/>
-    </div>
-  )
-}
-
-export default poker
Index: ges/games/roulette.js
===================================================================
--- pages/games/roulette.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,12 +1,0 @@
-import React from 'react'
-import Roulette from '../../components/roulette/Roulette'
-
-const roulette = () => {
-  return (
-    <div className="app">
-      <Roulette/>
-    </div>
-  )
-}
-
-export default roulette
Index: pages/index.js
===================================================================
--- pages/index.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ pages/index.js	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -1,58 +1,68 @@
 import Head from 'next/head'
-
-import Header from '../components/Header'
-import FullwidthText from '../components/FullwidthText'
-import GameCircle from '../components/GameCircle'
-import Loading from '../components/Loading'
-import RegisterScreen from '../components/RegisterScreen'
-import LoginScreen from '../components/LoginScreen'
-import Alert from '../components/Alert'
-import Notification from '../components/Notification'
-import Stats from '../components/Stats'
-import ManageCredits from '../components/ManageCredits'
-import ComplainScreen from '../components/Complain'
-import GamesHistory from '../components/GamesHistory'
+import Image from 'next/image'
+import styles from '../styles/Home.module.css'
 
 export default function Home() {
   return (
-    <div className="app" style={{backgroundImage: 'url("/images/bg.png")'}}>
+    <div className={styles.container}>
       <Head>
-        <meta charSet="utf-8"/>
-        <meta name="description" content="Enjoy your stay at Caessino (The best E-Casino out there!). Play Blackjack, Roulette or Poker and win huge prizes!"/>
-        <meta name="keywords" content="caessino, e-casino, casino, blackjack, roulette, poker"/>
+        <title>Create Next App</title>
+        <meta name="description" content="Generated by create next app" />
+        <link rel="icon" href="/favicon.ico" />
+      </Head>
 
-        <meta name="author" content="ESS" />
-        <meta name="copyright" content="&copy; ESS CORP 2022" />
+      <main className={styles.main}>
+        <h1 className={styles.title}>
+          Welcome to <a href="https://nextjs.org">Next.js!</a>
+        </h1>
 
-        <title>Caessino</title>
-      </Head>
-  
-      <Header/>
-      
-      <FullwidthText title="Welcome to Caessino" subtitle="Choose Your Game"/>
+        <p className={styles.description}>
+          Get started by editing{' '}
+          <code className={styles.code}>pages/index.js</code>
+        </p>
 
-      <div className="gameCircles">
-        <GameCircle src={"/images/blackjack.png"} text="Play Blackjack" routeTo="/games/blackjack" game="Blackjack"/>
-        <GameCircle src={"/images/roulette.png"} text="Play Roulette" routeTo="/games/roulette" game="Roulette"/>
-        <GameCircle src={"/images/poker.png"} text="Play Poker" routeTo="/games/poker" game="Poker"/>
-      </div>
+        <div className={styles.grid}>
+          <a href="https://nextjs.org/docs" className={styles.card}>
+            <h2>Documentation &rarr;</h2>
+            <p>Find in-depth information about Next.js features and API.</p>
+          </a>
 
-      <Loading/>
+          <a href="https://nextjs.org/learn" className={styles.card}>
+            <h2>Learn &rarr;</h2>
+            <p>Learn about Next.js in an interactive course with quizzes!</p>
+          </a>
 
-      <RegisterScreen/>
+          <a
+            href="https://github.com/vercel/next.js/tree/canary/examples"
+            className={styles.card}
+          >
+            <h2>Examples &rarr;</h2>
+            <p>Discover and deploy boilerplate example Next.js projects.</p>
+          </a>
 
-      <LoginScreen/>
+          <a
+            href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
+            className={styles.card}
+          >
+            <h2>Deploy &rarr;</h2>
+            <p>
+              Instantly deploy your Next.js site to a public URL with Vercel.
+            </p>
+          </a>
+        </div>
+      </main>
 
-      <Alert/>
-
-      <Notification/>
-
-      <Stats/>
-
-      <ManageCredits/>
-
-      <ComplainScreen/>
-
-      <GamesHistory/>
+      <footer className={styles.footer}>
+        <a
+          href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
+          target="_blank"
+          rel="noopener noreferrer"
+        >
+          Powered by{' '}
+          <span className={styles.logo}>
+            <Image src="/vercel.svg" alt="Vercel Logo" width={72} height={16} />
+          </span>
+        </a>
+      </footer>
     </div>
   )
Index: dux/reducers/adminInformationSlice.js
===================================================================
--- redux/reducers/adminInformationSlice.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,34 +1,0 @@
-import { createSlice } from '@reduxjs/toolkit';
-
-const initialState = {
-    adminInformation: {
-        complaints: [],
-        answeringComplaintIndex: -1,
-        answerForComplaint: '',
-        liveGames: {
-            blackjack: {
-                rooms: [],
-            },
-            roulette: {
-                players: [],
-            },
-            poker: {
-                tables: [],
-            },
-        },
-    },
-}
-
-export const adminInformationSlice = createSlice({
-    name: 'adminInformation',
-    initialState,
-    reducers: {
-        setAdminInformation: (state, action) => {
-            state.adminInformation = action.payload;
-        },
-    }
-})
-
-export const { setAdminInformation } = adminInformationSlice.actions
-
-export default adminInformationSlice.reducer
Index: dux/reducers/adminSlice.js
===================================================================
--- redux/reducers/adminSlice.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,32 +1,0 @@
-import { createSlice } from '@reduxjs/toolkit';
-
-const initialState = {
-    admin: {
-        session_id: '',
-        inputControls: {
-            username: '',
-            password: '',
-        },
-        displays: {
-            setFocus: true,
-            complaintsScreen: false,
-            liveGamesScreen: false,
-            loadingScreen: false,
-        },
-        inlineAlertText: '',
-    },
-}
-
-export const adminSlice = createSlice({
-    name: 'admin',
-    initialState,
-    reducers: {
-        setAdmin: (state, action) => {
-            state.admin = action.payload;
-        },
-    }
-})
-
-export const { setAdmin } = adminSlice.actions
-
-export default adminSlice.reducer
Index: dux/reducers/playerSlice.js
===================================================================
--- redux/reducers/playerSlice.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,100 +1,0 @@
-import { createSlice } from '@reduxjs/toolkit';
-
-const initialState = {
-    player: {
-        displayName: '',
-        username: '',
-        session_id: '',
-        room_id: '',
-        credits: 0,
-    },
-    blackjackGame: {
-        status: '',
-        playerCards: [],
-        dealerCards: [],
-        sideBetName: '',
-        betAmount: 0,
-        sideBetAmount: 0,
-    },
-    rouletteGame: {
-        game: {
-            status: '_1_ongoing_timer',
-            timeToStart: 30,
-            COUNTDOWN_FROM: 30,
-            WAIT_BEFORE: 20,
-            magicNumber: -1,
-            winningBets: [],
-            players: [],
-        },
-        player: {
-            session_id: '',
-            name: '',
-            whichBets: [],
-            coinPlaced: {
-                x: -1,
-                y: -1,
-            },
-            credits: -1,
-            betAmount: 0,
-            wonAmount: 0,
-            status: '_1_',
-            outcome: 'none',
-            gotResults: false,
-        },
-    },
-    pokerGame: {
-        tables: [],
-        table: {
-            id: '',
-            name: '',
-            status: '',
-            creator: '',
-            started: false,
-            round: 0,
-            turnIdx: 0,
-            lastBet: 0,
-            turnsSinceLastBet: 0,
-            players: [{
-                id: '',
-                table: '',
-                status: '',
-                displayName: '',
-                cards: [],
-                betAmount: 0,
-                isSatDown: false,
-                iSCoordinator: false,
-            }],
-            cards: [],
-        },
-        player: {
-            status: '',
-            cards: [],
-            table: '',
-            isSatDown: false,
-            isCoordinator: false,
-        },
-    },
-}
-
-export const playerSlice = createSlice({
-    name: 'player',
-    initialState,
-    reducers: {
-        setPlayer: (state, action) => {
-            state.player = action.payload;
-        },
-        setBlackjackGame: (state, action) => {
-            state.blackjackGame = action.payload;
-        },
-        setRouletteGame: (state, action) => {
-            state.rouletteGame = action.payload;
-        },
-        setPokerGame: (state, action) => {
-            state.pokerGame = action.payload;
-        },
-    }
-})
-
-export const { setPlayer, setBlackjackGame, setRouletteGame, setPokerGame } = playerSlice.actions
-
-export default playerSlice.reducer
Index: dux/reducers/styleSlice.js
===================================================================
--- redux/reducers/styleSlice.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,182 +1,0 @@
-import { createSlice } from '@reduxjs/toolkit';
-
-const initialState = {
-    style: {
-        // login
-        displayLoadingScreen: false,
-        displayRegisterScreen: false,
-        registerScreenInfo: {
-            setFocus: true,
-            username: '',
-            displayName: '',
-            password: '',
-        },
-        displayLoginScreen: false,
-        loginScreenInfo: {
-            setFocus: true,
-            username: '',
-            password: '',
-        },
-        // custom
-        inlineAlertText: '',
-        alert: {
-            show: false,
-            title: '',
-            subtitle: '',
-            button: {
-                text: '',
-                action: '',
-            }
-        },
-        notification: {
-            show: false,
-            text: '',
-            status: '',
-        },
-        // stats
-        displayStatsScreen: false,
-        statsScreenInfo: {
-            money: {
-                bet: 0,
-                earned: 0,
-            },
-            blackjack: {
-                games: 0,
-                wins: 0,
-            },
-            roulette: {
-                games: 0,
-                wins: 0,
-            },
-            poker: {
-                games: 0,
-                wins: 0,
-            },
-        },
-        // manage credits
-        displayManageCreditsScreen: false,
-        displayDepositModal: false,
-        depositModalInputs: {
-            name: '',
-            card: '',
-            expire: '',
-            ccv: '',
-            amount: '',
-        },
-        displayWithdrawModal: false,
-        withdrawModalInputs: {
-            citibank: '',
-            iban: '',
-            bic: '',
-            beneficiary: '',
-            address: '',
-            amount: '',
-        },
-        // complain
-        displayComplainScreen: false,
-        complainScreenInfo: {
-            setFocus: true,
-            description: '',
-        },
-        // lost connection
-        lostConnectionInfo: {
-            show: false,
-            message: ''
-        },
-        // games history
-        displayGamesHistoryScreen: false,
-        gamesHistory: {
-            blackjack: {
-                rooms: [],
-            },
-            roulette: {
-                games: [],
-            },
-            poker: {
-                tables: [],
-            },
-        },
-    },
-    // blackjack
-    blackjack: {
-        displays: {
-            sideBetsChooseCreditsModal: false,
-            sideBetsModal: false,
-            initialBet: true,
-            sideBet: false,
-            hitStand: false,
-        },
-        inputControls: {
-            initialBet: {
-                chosenCredits: 0,
-                maxCredits: 0,
-            },
-            sideBet: {
-                chosenCredits: 0,
-                maxCredits: 0,
-            }
-        },
-        sideBetName: '',
-        texts: {
-            sideBetsChooseCreditsText: '',
-            sideBetsPaysText: '',
-        }
-    },
-    // roulette
-    roulette: {
-        displays: {
-            betModal: false,
-        },
-        inputControls: {
-            bet: {
-                chosenCredits: 0,
-            },
-        },
-        whichBets: [],
-        coinPlaced: {
-            x: -1,
-            y: -1,
-        }
-    },
-    // poker
-    poker: {
-        displays: {
-            raiseModal: false,
-        },
-        inputControls: {
-            raise: {
-                chosenCredits: 0,
-            },
-            tableName: '',
-        },
-        callAmount: 0,
-        texts: {
-            text1: '',
-            text2: '',
-            text3: ''
-        }
-    },
-}
-
-export const styleSlice = createSlice({
-    name: 'style',
-    initialState,
-    reducers: {
-        setStyle: (state, action) => {
-            state.style = action.payload;
-        },
-        setBlackjack: (state, action) => {
-            state.blackjack = action.payload;
-        },
-        setRoulette: (state, action) => {
-            state.roulette = action.payload;
-        },
-        setPoker: (state, action) => {
-            state.poker = action.payload;
-        }
-    }
-})
-
-export const { setStyle, setBlackjack, setRoulette, setPoker } = styleSlice.actions
-
-export default styleSlice.reducer
Index: dux/store.js
===================================================================
--- redux/store.js	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,15 +1,0 @@
-import { configureStore } from "@reduxjs/toolkit";
-
-import playerReducer from "./reducers/playerSlice";
-import styleReducer from "./reducers/styleSlice";
-import adminReducer from "./reducers/adminSlice";
-import adminInformationReducer from "./reducers/adminInformationSlice";
-
-export const store = configureStore({
-    reducer: {
-        player: playerReducer,
-        style: styleReducer,
-        admin: adminReducer,
-        adminInformation: adminInformationReducer,
-    },
-})
Index: styles/Home.module.css
===================================================================
--- styles/Home.module.css	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
+++ styles/Home.module.css	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -0,0 +1,116 @@
+.container {
+  padding: 0 2rem;
+}
+
+.main {
+  min-height: 100vh;
+  padding: 4rem 0;
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+
+.footer {
+  display: flex;
+  flex: 1;
+  padding: 2rem 0;
+  border-top: 1px solid #eaeaea;
+  justify-content: center;
+  align-items: center;
+}
+
+.footer a {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex-grow: 1;
+}
+
+.title a {
+  color: #0070f3;
+  text-decoration: none;
+}
+
+.title a:hover,
+.title a:focus,
+.title a:active {
+  text-decoration: underline;
+}
+
+.title {
+  margin: 0;
+  line-height: 1.15;
+  font-size: 4rem;
+}
+
+.title,
+.description {
+  text-align: center;
+}
+
+.description {
+  margin: 4rem 0;
+  line-height: 1.5;
+  font-size: 1.5rem;
+}
+
+.code {
+  background: #fafafa;
+  border-radius: 5px;
+  padding: 0.75rem;
+  font-size: 1.1rem;
+  font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
+    Bitstream Vera Sans Mono, Courier New, monospace;
+}
+
+.grid {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-wrap: wrap;
+  max-width: 800px;
+}
+
+.card {
+  margin: 1rem;
+  padding: 1.5rem;
+  text-align: left;
+  color: inherit;
+  text-decoration: none;
+  border: 1px solid #eaeaea;
+  border-radius: 10px;
+  transition: color 0.15s ease, border-color 0.15s ease;
+  max-width: 300px;
+}
+
+.card:hover,
+.card:focus,
+.card:active {
+  color: #0070f3;
+  border-color: #0070f3;
+}
+
+.card h2 {
+  margin: 0 0 1rem 0;
+  font-size: 1.5rem;
+}
+
+.card p {
+  margin: 0;
+  font-size: 1.25rem;
+  line-height: 1.5;
+}
+
+.logo {
+  height: 1em;
+  margin-left: 0.5rem;
+}
+
+@media (max-width: 600px) {
+  .grid {
+    width: 100%;
+    flex-direction: column;
+  }
+}
Index: styles/globals.css
===================================================================
--- styles/globals.css	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ styles/globals.css	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -1,9 +1,8 @@
-@import url(https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap);
 html,
 body {
   padding: 0;
   margin: 0;
-  font-family: 'Inter', sans-serif;
-  overflow: hidden;
+  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
+    Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
 }
 
@@ -14,1669 +13,4 @@
 
 * {
-  -webkit-box-sizing: border-box;
-          box-sizing: border-box;
+  box-sizing: border-box;
 }
-
-p, h1, h3 {
-  margin: 0;
-}
-
-.app {
-  color: white;
-  letter-spacing: 1px;
-  width: 100vw;
-  height: 100vh;
-  margin: auto;
-  overflow: hidden;
-  background-size: cover;
-  background-repeat: no-repeat;
-  background-position: 0% 50%;
-  text-align: center;
-}
-
-/**
-  * Component <- Header
-  */
-header.header {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: justify;
-      -ms-flex-pack: justify;
-          justify-content: space-between;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  width: 92vw;
-  margin: auto;
-  margin-top: 20px;
-  position: relative;
-  z-index: 5;
-}
-
-header.header .logo {
-  width: 80px;
-  aspect-ratio: 1;
-  border-radius: 100%;
-  background-image: url("/images/logo.png");
-  background-size: cover;
-  border: 2px solid rgba(255, 255, 255, 0.2);
-  cursor: pointer;
-}
-
-header.header h2 {
-  cursor: pointer;
-}
-
-header.header nav ul {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: horizontal;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: row;
-          flex-direction: row;
-  list-style-type: none;
-}
-
-header.header nav ul li {
-  margin-right: 4rem;
-}
-
-header.header nav ul li:last-child {
-  margin-right: 0;
-}
-
-header.header nav.mainHeaderNavigation ul li {
-  cursor: pointer;
-}
-
-/**
-  * Component <- Full Width Text
-  *
-  * Used in "Welcome To Caessino"
-  */
-.fullwidthText {
-  width: 100vw;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  margin-top: 40px;
-  padding: 15px 0 20px 0;
-  background-color: rgba(0, 0, 0, 0.6);
-}
-
-.fullwidthText h1 {
-  color: #FFD700;
-  font-weight: lighter;
-  font-size: 2.5rem;
-}
-
-.fullwidthText h3 {
-  margin-top: 15px;
-  font-weight: lighter;
-}
-
-/**
-  * Component <- Alert
-  *
-  * Similar to Full Width Text
-  */
-.alert {
-  z-index: 30;
-  width: 100vw;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  padding: 20px 0 25px 0;
-  background-color: rgba(0, 0, 0, 0.9);
-  position: absolute;
-  -webkit-transform: translateY(-70%);
-          transform: translateY(-70%);
-  -webkit-transition: '.5s linear';
-  transition: '.5s linear';
-}
-
-.alert h1 {
-  color: #FFD700;
-  font-weight: lighter;
-  font-size: 2.5rem;
-}
-
-.alert h3 {
-  margin-top: 10px;
-  font-weight: lighter;
-}
-
-.alert button {
-  width: 500px;
-  margin-top: 20px;
-}
-
-/**
-  * Component <- Notification
-  *
-  * Displayed fixed in the top right corner
-  */
-.notification {
-  z-index: 30;
-  position: fixed;
-  top: 40px;
-  right: 30px;
-  width: 500px;
-  min-height: 200px;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: end;
-      -ms-flex-align: end;
-          align-items: flex-end;
-  font-size: 2rem;
-  padding: 20px;
-  border-radius: 15px;
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-}
-
-.notification svg {
-  cursor: pointer;
-}
-
-.notification > div {
-  -webkit-box-flex: 1;
-      -ms-flex: 1;
-          flex: 1;
-  width: 100%;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  font-size: 1.5rem;
-  margin-bottom: 1.2rem;
-  text-align: center;
-}
-
-/**
-  * Component <- Game Circle
-  *
-  * Used in Landing Page -> to display the games in circles
-  */
-.gameCircles {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: horizontal;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: row;
-          flex-direction: row;
-  -webkit-box-pack: justify;
-      -ms-flex-pack: justify;
-          justify-content: space-between;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  width: 92vw;
-  margin: auto;
-  margin-top: 50px;
-}
-
-.gameCircles .gameCircle {
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-  cursor: pointer;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.gameCircles .gameCircle .circleLarge {
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-  width: 22vw;
-  aspect-ratio: 1;
-  border-radius: 100%;
-  background: -webkit-gradient(linear, left bottom, right top, from(#ffd900cc), to(#B65714));
-  background: linear-gradient(to top right, #ffd900cc, #B65714);
-  opacity: .95;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-}
-
-.gameCircles .gameCircle .circleLarge .circle {
-  border-radius: 100%;
-  width: 98%;
-  background-size: cover;
-  margin: auto;
-  aspect-ratio: 1;
-}
-
-.gameCircles .gameCircle h3 {
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-  font-weight: lighter;
-  margin-top: 30px;
-  opacity: 0;
-}
-
-.gameCircles .gameCircle h1.loading {
-  color: white;
-  position: absolute;
-  width: 100vw;
-  top: 50vh;
-  left: 50vw;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  font-size: 5rem;
-  z-index: 10;
-}
-
-.gameCircles .gameCircle:hover .circleLarge {
-  -webkit-transform: scale(1.1);
-          transform: scale(1.1);
-  opacity: 1;
-}
-
-.gameCircles .gameCircle:hover h3 {
-  opacity: 1;
-}
-
-.gameCircles:hover .gameCircle .circleLarge {
-  opacity: 1 !important;
-}
-
-/**
-  * Full Screen Overlay
-  */
-.fullscreen {
-  position: fixed;
-  top: 0;
-  left: 0;
-  width: 100vw;
-  height: 100vh;
-  background: -webkit-gradient(linear, left top, right top, from(#0B932E), to(#097625));
-  background: linear-gradient(to right, #0B932E, #097625);
-  color: #ead24d;
-  z-index: 10;
-}
-
-.fs-centered > div {
-  position: fixed;
-  top: 50vh;
-  left: 50vw;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-}
-
-.top-to-bottom-centered {
-  overflow-y: scroll;
-}
-
-.top-to-bottom-centered > div {
-  padding-block: 2rem;
-  width: 70vw;
-  margin-inline: auto;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  gap: 4rem;
-}
-
-.top-to-bottom-centered > div .link {
-  color: #fff3ae;
-  text-decoration: underline;
-  cursor: pointer;
-}
-
-.top-to-bottom-centered > div h3 {
-  font-size: 1.5rem;
-  text-align: center;
-}
-
-.fs-inputs-container > div {
-  margin: auto;
-  margin-top: 2.4rem;
-  width: -webkit-fit-content;
-  width: -moz-fit-content;
-  width: fit-content;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.fs-inputs-container > div > span {
-  margin-bottom: .5rem;
-  font-size: 1.5rem;
-}
-
-.fs-inputs-container > div > input {
-  margin-bottom: 2rem;
-  padding-left: 4px;
-  padding-right: 4px;
-  font-size: 2rem;
-}
-
-.statsScreen svg {
-  cursor: pointer;
-  font-size: 2.5rem;
-  color: white;
-}
-
-.statsScreen > div h1 {
-  font-size: 2.5rem;
-  margin-bottom: 5rem;
-}
-
-.statsScreen > div p {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: justify;
-      -ms-flex-pack: justify;
-          justify-content: space-between;
-  font-size: 1.5rem;
-  margin-bottom: 1rem;
-}
-
-.statsScreen > div p:nth-child(2n) {
-  color: white;
-}
-
-.statsScreen > div p span {
-  margin-left: 5rem;
-}
-
-.manageCreditsScreen .inlineAlert {
-  font-size: 1.5rem !important;
-  cursor: auto;
-}
-
-.manageCreditsScreen svg {
-  z-index: 100;
-  cursor: pointer;
-  font-size: 2.5rem;
-  color: white;
-}
-
-.manageCreditsScreen > div {
-  top: 0%;
-  -webkit-transform: translate(-50%, 0);
-          transform: translate(-50%, 0);
-  width: 100%;
-}
-
-.manageCreditsScreen > div h2 {
-  font-size: 1.5rem;
-  margin-bottom: 1rem;
-}
-
-.manageCreditsScreen > div p {
-  margin-bottom: 5rem;
-  color: white;
-}
-
-.manageCreditsScreen > div button span {
-  color: white;
-}
-
-.manageCreditsScreen > div > div:not(.main) {
-  margin-top: 5vh;
-  height: 15vh;
-}
-
-.manageCreditsScreen > div > div.main {
-  height: 70vh;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-}
-
-.manageCreditsScreen > div > div.main > div {
-  -webkit-box-flex: 1;
-      -ms-flex: 1;
-          flex: 1;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.manageCreditsScreen > div > div.main > div .fs-inputs-container {
-  width: 40%;
-}
-
-.manageCreditsScreen > div > div.main > div .fs-inputs-container > div {
-  width: 100%;
-}
-
-.manageCreditsScreen > div > div.main > div .fs-inputs-container > div label {
-  color: white;
-}
-
-.manageCreditsScreen > div > div.main > div .fs-inputs-container > div span {
-  color: #ead24d;
-}
-
-.manageCreditsScreen > div > div.main > div .fs-inputs-container > div input {
-  font-size: 1.2rem;
-  width: 100%;
-  text-align: center;
-}
-
-.complainScreen .inlineAlert {
-  cursor: auto;
-}
-
-.complainScreen > div > div textarea {
-  background-color: #c3ffd2;
-  width: 50vw;
-  height: 40vh;
-  font-size: 2rem;
-  margin-top: 1rem;
-  margin-bottom: 3rem;
-}
-
-.inlineAlert {
-  cursor: pointer;
-  background-color: #ffdddd;
-  padding: .8rem 2.4rem;
-  border-radius: 15px;
-  color: #ff0000;
-  font-size: 1.8rem !important;
-  font-weight: 100;
-  letter-spacing: -.030em;
-}
-
-/**
-  * Component <- Loading
-  */
-.loadingScreen h1 {
-  font-size: 5rem;
-}
-
-.lostConnectionScreen > div {
-  text-align: center;
-}
-
-.lostConnectionScreen h3 {
-  font-size: 2rem;
-  margin-bottom: 1rem;
-}
-
-.lostConnectionScreen h3:nth-child(2) {
-  color: white;
-}
-
-.activateScreen > div {
-  text-align: center;
-}
-
-.activateScreen h3 {
-  font-size: 2rem;
-  margin-bottom: 1rem;
-}
-
-.activateScreen h3:nth-child(1) {
-  color: white;
-}
-
-.activateScreen button {
-  font-size: 1.8rem;
-  margin-top: 8rem;
-}
-
-/**
-  * Component <- LoginScreen
-  */
-.loginScreen.admin {
-  z-index: 50;
-}
-
-.liveGamesMegaContainer {
-  margin-top: 3rem;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  gap: 8rem;
-}
-
-.liveGamesMegaContainer .liveGamesContainer {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-align: start;
-      -ms-flex-align: start;
-          align-items: flex-start;
-  gap: 2rem;
-}
-
-.liveGamesMegaContainer .liveGamesContainer h3 {
-  color: white;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div {
-  width: 100%;
-  padding: 2rem;
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-  -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div:hover {
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div h6 {
-  margin-inline: 0;
-  margin-block: .5rem;
-  color: #ead24d;
-  font-weight: normal;
-  font-size: 1.2rem;
-  text-align: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div h6 span {
-  color: white;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div {
-  -webkit-box-flex: 1;
-      -ms-flex: 1;
-          flex: 1;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div:nth-child(1) {
-  -webkit-box-align: start;
-      -ms-flex-align: start;
-          align-items: flex-start;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div:nth-child(2) {
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div:nth-child(2) > div {
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div:nth-child(3) {
-  -webkit-box-align: end;
-      -ms-flex-align: end;
-          align-items: flex-end;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div:nth-child(3) h5 {
-  margin-inline: 4rem;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div p {
-  margin-top: 1rem;
-  font-size: 1.5rem;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div h5 {
-  font-size: 5rem;
-  font-weight: 100;
-  font-style: italic;
-  margin-inline: 3rem;
-  margin-block: 0;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div > div {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  margin-inline: 2.5rem;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div.liveBlackjackGame > div > div .card {
-  margin-inline: -2.5rem;
-  position: relative;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .cardsOnTable, .liveGamesMegaContainer .liveGamesContainer > div .cards {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  margin-inline: 2.5rem;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .cardsOnTable .card, .liveGamesMegaContainer .liveGamesContainer > div .cards .card {
-  margin-inline: -2.5rem;
-  position: relative;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .cardsOnTable {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .cards {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .cards .card {
-  margin-inline: -1.6rem;
-  height: 100px;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .playerInLiveRouletteGame, .liveGamesMegaContainer .liveGamesContainer > div .playerInLivePokerGame {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .playerInLiveRouletteGame > div, .liveGamesMegaContainer .liveGamesContainer > div .playerInLivePokerGame > div {
-  -webkit-box-flex: 1;
-      -ms-flex: 1;
-          flex: 1;
-}
-
-.liveGamesMegaContainer .liveGamesContainer > div .playerInLivePokerGame {
-  margin-block: .8rem;
-}
-
-.complaintsScreen {
-  z-index: 20;
-}
-
-.complaintsScreen .complaint {
-  width: 100%;
-  padding: 2rem;
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-  -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);
-}
-
-.complaintsScreen .complaint:hover {
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-}
-
-.complaintsScreen .complaint:nth-child(2n+1) {
-  color: white;
-}
-
-.complaintsScreen .complaint > div:nth-child(1) {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: justify;
-      -ms-flex-pack: justify;
-          justify-content: space-between;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-}
-
-.complaintsScreen .complaint > div:nth-child(1) > * {
-  -webkit-box-flex: 1;
-      -ms-flex: 1;
-          flex: 1;
-}
-
-.complaintsScreen .complaint > div:nth-child(1) > div {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: end;
-      -ms-flex-pack: end;
-          justify-content: flex-end;
-}
-
-.complaintsScreen .complaint textarea {
-  width: 100%;
-  height: 7rem;
-  margin-top: .5rem;
-  font-size: 1.2rem;
-  padding: .4rem;
-  background-color: #c3ffd2;
-}
-
-.complaintsScreen .complaint .answering {
-  margin-top: 1rem;
-}
-
-.complaintsScreen .complaint .answering > div {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: end;
-      -ms-flex-pack: end;
-          justify-content: flex-end;
-  margin-top: 1rem;
-}
-
-.complaintsScreen .complaint .primaryButton, .complaintsScreen .complaint .secondaryButton {
-  font-size: 1rem;
-}
-
-.liveGamesScreen {
-  z-index: 20;
-}
-
-.dashboardScreen.admin .fs-inputs-container {
-  -webkit-transform: translate(-50%, -75%);
-          transform: translate(-50%, -75%);
-}
-
-.dashboardScreen.admin .fs-inputs-container > div {
-  gap: 10rem;
-}
-
-.dashboardScreen.admin .fs-inputs-container > div > div {
-  width: 50vw;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -ms-flex-pack: distribute;
-      justify-content: space-around;
-}
-
-/**
-  * Primary Thingies
-  */
-.primaryButton {
-  background: -webkit-gradient(linear, left top, right top, from(#0B932E), to(#097625));
-  background: linear-gradient(to right, #0B932E, #097625);
-  color: #ead24d;
-  outline: none;
-  border: none;
-  border-radius: 10px;
-  font-size: 1.5rem;
-  font-weight: bold;
-  padding: 5px 20px;
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-  cursor: pointer;
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-}
-
-.primaryButton:hover {
-  -webkit-transform: scale(1.1) rotateZ(-1deg);
-          transform: scale(1.1) rotateZ(-1deg);
-}
-
-.primaryButton:active {
-  -webkit-transition: .05s linear;
-  transition: .05s linear;
-  -webkit-transform: scale(1) rotateZ(-1deg);
-          transform: scale(1) rotateZ(-1deg);
-}
-
-.secondaryButton {
-  background: -webkit-gradient(linear, left top, right top, from(#4d99ea), to(#4d99ea));
-  background: linear-gradient(to right, #4d99ea, #4d99ea);
-  color: white;
-  outline: none;
-  border: none;
-  border-radius: 10px;
-  font-size: 1.5rem;
-  font-weight: bold;
-  padding: 5px 20px;
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-  cursor: pointer;
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-}
-
-.secondaryButton:hover {
-  -webkit-transform: scale(1.1) rotateZ(-1deg);
-          transform: scale(1.1) rotateZ(-1deg);
-}
-
-.secondaryButton:active {
-  -webkit-transition: .05s linear;
-  transition: .05s linear;
-  -webkit-transform: scale(1) rotateZ(-1deg);
-          transform: scale(1) rotateZ(-1deg);
-}
-
-.tertiaryButton {
-  background: -webkit-gradient(linear, left top, right top, from(#484848), to(#6a6a6a));
-  background: linear-gradient(to right, #484848, #6a6a6a);
-  color: white;
-  outline: none;
-  border: none;
-  border-radius: 10px;
-  font-size: 1.5rem;
-  font-weight: bold;
-  padding: 5px 20px;
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-  cursor: pointer;
-  -webkit-transition: all .2s linear;
-  transition: all .2s linear;
-}
-
-.tertiaryButton:hover {
-  background: -webkit-gradient(linear, left top, right top, from(#6e6e6e), to(#a0a0a0));
-  background: linear-gradient(to right, #6e6e6e, #a0a0a0);
-}
-
-.tertiaryButton:active {
-  -webkit-transition: .05s linear;
-  transition: .05s linear;
-  background: -webkit-gradient(linear, left top, right top, from(#484848), to(#6a6a6a));
-  background: linear-gradient(to right, #484848, #6a6a6a);
-}
-
-/**
-  * Input Sliders
-  */
-.primarySlider {
-  -webkit-appearance: none;
-  width: 250px;
-  height: 10px;
-  background: #0B932E;
-  outline: none;
-  border-radius: 10px;
-  -webkit-transition: .2s;
-  -webkit-transition: opacity .2s;
-  transition: opacity .2s;
-  -webkit-box-shadow: 0 5px 25px rgba(234, 210, 77, 0.25);
-          box-shadow: 0 5px 25px rgba(234, 210, 77, 0.25);
-}
-
-.primarySlider:hover {
-  opacity: 1;
-}
-
-.primarySlider::-webkit-slider-thumb {
-  -webkit-appearance: none;
-  appearance: none;
-  outline: none;
-  border: none;
-  width: 35px;
-  height: 35px;
-  border-radius: 50%;
-  background: url("/images/gold-coin.png");
-  background-size: contain;
-  background-color: #ead24d;
-  cursor: pointer;
-}
-
-.primarySlider::-moz-range-thumb {
-  -moz-appearance: none;
-       appearance: none;
-  outline: none;
-  border: none;
-  width: 35px;
-  height: 35px;
-  border-radius: 50%;
-  background: url("/images/gold-coin.png");
-  background-size: contain;
-  background-color: #ead24d;
-  cursor: pointer;
-}
-
-/**
-  * Scrollbar
-  */
-/* width */
-::-webkit-scrollbar {
-  width: 15px;
-}
-
-/* Track */
-::-webkit-scrollbar-track {
-  background: #0B932E;
-}
-
-/* Handle */
-::-webkit-scrollbar-thumb {
-  background: #ead24d;
-}
-
-/* Handle on hover */
-::-webkit-scrollbar-thumb:hover {
-  background: #efcb00;
-}
-
-/**
-  * File <- Blackjack Main
-  */
-.blackjackButtons {
-  position: absolute;
-  left: 0;
-  top: 90vh;
-  width: 100vw;
-  height: 10vh;
-  overflow: hidden;
-}
-
-.blackjackButtons > div {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: horizontal;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: row;
-          flex-direction: row;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  -webkit-transition: .5s ease-in-out;
-  transition: .5s ease-in-out;
-}
-
-.blackjackButtons > div > button {
-  width: 300px;
-}
-
-.blackjackButtons > div > button:nth-child(2) {
-  margin-left: 30px;
-}
-
-.card {
-  aspect-ratio: 400/560;
-  height: 150px;
-  background-size: contain;
-  position: absolute;
-  -webkit-transition: .5s ease-in-out;
-  transition: .5s ease-in-out;
-  border-radius: 10px;
-  border: 1px solid black;
-}
-
-.blackjackDisplayBet {
-  position: absolute;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  left: 51vw;
-  top: 63.5vh;
-}
-
-.blackjackSideBetsModal {
-  z-index: 20;
-  -webkit-box-orient: vertical !important;
-  -webkit-box-direction: normal !important;
-      -ms-flex-direction: column !important;
-          flex-direction: column !important;
-  position: fixed;
-  left: 50vw;
-  top: 45vh;
-  width: 41vw;
-  height: 80vh;
-  padding: 10px;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  background: -webkit-gradient(linear, left top, right top, from(#0B932Ec0), to(#097625e0));
-  background: linear-gradient(to right, #0B932Ec0, #097625e0);
-  -webkit-box-shadow: 0 5px 50px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 50px rgba(0, 0, 0, 0.25);
-  border-radius: 20px;
-  overflow-y: scroll;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  width: 100%;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect:first-child {
-  margin-top: 10rem;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect h1 {
-  margin-bottom: 1rem;
-  color: #ead24d;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect > div {
-  text-align: left;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect > div p {
-  margin-bottom: 1rem;
-  padding: 10px 20px;
-  border-radius: 5px;
-  cursor: pointer;
-  -webkit-transition: all .25s linear;
-  transition: all .25s linear;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect > div p span {
-  font-size: 1.2rem;
-  color: #ead24d;
-}
-
-.blackjackSideBetsModal .blackjackSideBetSelect > div p:hover {
-  color: #ead24d;
-  -webkit-box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-}
-
-.blackjackSideBetsChooseCreditsModal {
-  z-index: 20;
-  -webkit-box-orient: vertical !important;
-  -webkit-box-direction: normal !important;
-      -ms-flex-direction: column !important;
-          flex-direction: column !important;
-  position: fixed;
-  left: 50vw;
-  top: 45vh;
-  width: 41vw;
-  height: 80vh;
-  padding: 10px;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  background: -webkit-gradient(linear, left top, right top, from(#00000080), to(#00000080));
-  background: linear-gradient(to right, #00000080, #00000080);
-  -webkit-box-shadow: 0 5px 50px rgba(0, 0, 0, 0.25);
-          box-shadow: 0 5px 50px rgba(0, 0, 0, 0.25);
-  border-radius: 20px;
-}
-
-.blackjackSideBetsChooseCreditsModal p {
-  margin-bottom: 1rem;
-  padding: 10px 20px;
-  border-radius: 5px;
-  -webkit-transition: all .25s linear;
-  transition: all .25s linear;
-}
-
-.blackjackSideBetsChooseCreditsModal p span {
-  font-size: 1.2rem;
-  color: white;
-}
-
-/**
-  * File <- Roulette Main
-  */
-.rouletteMainContainer {
-  background-color: #006600;
-}
-
-#rouletteBall {
-  position: absolute;
-  top: 87.5%;
-  left: 17.5%;
-  width: 1rem;
-}
-
-#rouletteBetsImg {
-  position: absolute;
-  top: 65%;
-  left: 59%;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  width: 50vw;
-  height: auto;
-  cursor: url(/gold-coin.cur), auto;
-}
-
-#rouletteWheelImg {
-  position: absolute;
-  top: 60%;
-  left: 18%;
-  -webkit-transition: all .5s ease-in-out;
-  transition: all .5s ease-in-out;
-  width: 450px;
-  height: auto;
-}
-
-.rouletteInfoText {
-  position: absolute;
-  top: 15%;
-  width: 100vw;
-  text-align: center;
-  font-size: 1.1rem;
-}
-
-.roulettePlayersContainer {
-  position: absolute;
-  top: 15%;
-  right: 4%;
-  width: 10vw;
-  height: 80vh;
-  -webkit-box-shadow: 0 0 10px rgba(10, 148, 45, 0.25);
-          box-shadow: 0 0 10px rgba(10, 148, 45, 0.25);
-  padding: 1rem;
-  display: -ms-grid;
-  display: grid;
-  -ms-grid-rows: (minmax(0, 1fr))[2];
-      grid-template-rows: repeat(2, minmax(0, 1fr));
-  overflow-x: hidden;
-  overflow-y: scroll;
-}
-
-.roulettePlayersContainer p {
-  word-wrap: break-word;
-  margin-top: .5rem;
-}
-
-.rouletteTimer {
-  position: absolute;
-  top: calc((60% + 450px) / 2);
-  left: calc(18.5%);
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  gap: 5px;
-  font-size: 2.5rem;
-  color: black;
-}
-
-.rouletteBetModal {
-  z-index: 20;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  position: fixed;
-  left: 0;
-  top: 0;
-  width: 100vw;
-  height: 100vh;
-  background: #000000c0;
-}
-
-.rouletteBetModal p {
-  margin-bottom: 1rem;
-  padding: 10px 20px;
-  border-radius: 5px;
-  -webkit-transition: all .25s linear;
-  transition: all .25s linear;
-}
-
-.rouletteBetModal p span {
-  font-size: 1.2rem;
-  color: #ead24d;
-}
-
-.pokerRaiseModal {
-  z-index: 20;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  position: fixed;
-  left: 0;
-  top: 0;
-  width: 100vw;
-  height: 100vh;
-  background: #000000c0;
-}
-
-.pokerRaiseModal p {
-  margin-bottom: 1rem;
-  padding: 10px 20px;
-  border-radius: 5px;
-  -webkit-transition: all .25s linear;
-  transition: all .25s linear;
-}
-
-.pokerRaiseModal p span {
-  font-size: 1.2rem;
-  color: #ead24d;
-}
-
-/**
-  * Spin effect on the roulette wheel
-  */
-.spin {
-  -webkit-animation: spinner 4s infinite;
-          animation: spinner 4s infinite;
-  -webkit-animation-timing-function: ease-in-out;
-          animation-timing-function: ease-in-out;
-}
-
-@-webkit-keyframes spinner {
-  0% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(0deg);
-            transform: translate(-50%, -50%) rotateZ(0deg);
-  }
-  10% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(20 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(20 * 360deg));
-  }
-  20% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(38 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(38 * 360deg));
-  }
-  30% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(54 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(54 * 360deg));
-  }
-  40% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(78 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(78 * 360deg));
-  }
-  50% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(90 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(90 * 360deg));
-  }
-  60% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(100 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(100 * 360deg));
-  }
-  70% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(108 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(108 * 360deg));
-  }
-  80% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(116 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(116 * 360deg));
-  }
-  90% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(120 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(120 * 360deg));
-  }
-  100% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(122 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(122 * 360deg));
-  }
-}
-
-@keyframes spinner {
-  0% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(0deg);
-            transform: translate(-50%, -50%) rotateZ(0deg);
-  }
-  10% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(20 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(20 * 360deg));
-  }
-  20% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(38 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(38 * 360deg));
-  }
-  30% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(54 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(54 * 360deg));
-  }
-  40% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(78 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(78 * 360deg));
-  }
-  50% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(90 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(90 * 360deg));
-  }
-  60% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(100 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(100 * 360deg));
-  }
-  70% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(108 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(108 * 360deg));
-  }
-  80% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(116 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(116 * 360deg));
-  }
-  90% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(120 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(120 * 360deg));
-  }
-  100% {
-    -webkit-transform: translate(-50%, -50%) rotateZ(calc(122 * 360deg));
-            transform: translate(-50%, -50%) rotateZ(calc(122 * 360deg));
-  }
-}
-
-/**
-  * File <- Poker Main
-  */
-.pokerMainContainer .pokerPickATableContainer {
-  position: absolute;
-  left: 0;
-  top: 0;
-  width: 100vw;
-  height: 100vh;
-  background-color: #111;
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  gap: 5rem;
-}
-
-.pokerMainContainer .pokerPickATableContainer .createATable > input {
-  margin-bottom: 2rem;
-  padding-left: 4px;
-  padding-right: 4px;
-  font-size: 1.5rem;
-  margin-right: 1rem;
-  border-radius: .5rem;
-}
-
-.pokerMainContainer .pokerPickATableContainer > div:not(.createATable) > h3 {
-  margin-bottom: 1rem;
-}
-
-.pokerMainContainer .pokerPickATableContainer > div:not(.createATable) > div {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-align: center;
-      -ms-flex-align: center;
-          align-items: center;
-  gap: 2rem;
-  width: 100vw;
-  max-height: 45vh;
-  padding-block: 2rem;
-  overflow-x: hidden;
-  overflow-y: scroll;
-}
-
-.pokerMainContainer .pokerPickATableContainer > div:not(.createATable) > div > div {
-  -webkit-box-shadow: 0 5px 25px #4d99eaaa;
-          box-shadow: 0 5px 25px #4d99eaaa;
-  width: 60vw;
-  padding: 1rem 3rem;
-  border-radius: .5rem;
-  cursor: pointer;
-  display: -ms-grid;
-  display: grid;
-  -ms-grid-columns: (minmax(0, 1fr))[4];
-      grid-template-columns: repeat(4, minmax(0, 1fr));
-  place-items: center;
-  -webkit-transition: all .2s ease-out;
-  transition: all .2s ease-out;
-}
-
-.pokerMainContainer .pokerPickATableContainer > div:not(.createATable) > div > div:hover {
-  -webkit-transform: scale(1.05);
-          transform: scale(1.05);
-  -webkit-box-shadow: 0 10px 35px #4d99eaaa;
-          box-shadow: 0 10px 35px #4d99eaaa;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair {
-  position: absolute;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  width: 110px;
-  aspect-ratio: 1;
-  border-radius: 50%;
-  border: 5px solid #ead24daa;
-  background-color: black;
-  display: -ms-grid;
-  display: grid;
-  place-items: center;
-  font-size: .8rem;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair.onTurn {
-  border: 5px dotted #ead24d;
-  background-color: #ead24d55;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair.folded {
-  border: 5px solid rgba(59, 59, 59, 0.667);
-  background-color: rgba(59, 59, 59, 0.667);
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair > div p {
-  margin-block: 2px;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair .pokerPlayerCardsContainer {
-  position: relative;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair .pokerPlayerCardsContainer > div {
-  position: absolute;
-  top: -2vh;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair .pokerPlayerCardsContainer > div .card {
-  height: 80px;
-  margin-inline: -1rem;
-  position: relative;
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair .pokerPlayerCardsContainer > div .card:first-child {
-  -webkit-transform: rotateZ(-5deg);
-          transform: rotateZ(-5deg);
-}
-
-.pokerMainContainer .pokerChairsContainer .pokerChair .pokerPlayerCardsContainer > div .card:last-child {
-  -webkit-transform: rotateZ(5deg);
-          transform: rotateZ(5deg);
-}
-
-.pokerMainContainer .pokerPotContainer {
-  position: absolute;
-  top: 57vh;
-  left: 50vw;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-}
-
-.pokerMainContainer .pokerPlayButtonsContainer {
-  position: absolute;
-  top: 62vh;
-  left: 50vw;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-  gap: 1rem;
-}
-
-.pokerMainContainer .pokerPlayButtonsContainer button {
-  min-width: 110px;
-}
-
-.pokerMainContainer .cardsInTheMiddleContainer {
-  position: absolute;
-  top: 45vh;
-  left: 50vw;
-  -webkit-transform: translate(-50%, -50%);
-          transform: translate(-50%, -50%);
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-pack: center;
-      -ms-flex-pack: center;
-          justify-content: center;
-}
-
-.pokerMainContainer .cardsInTheMiddleContainer .card {
-  height: 130px;
-  position: relative;
-  margin-inline: 2px;
-}
-
-.pokerMainContainer .pokerMessagesContainer {
-  position: absolute;
-  top: 5vh;
-  left: 50vw;
-  -webkit-transform: translateX(-50%);
-          transform: translateX(-50%);
-}
-
-.pokerMainContainer .pokerMessagesContainer > p:first-child {
-  font-style: italic;
-  color: #c1fbaa;
-}
-
-.pokerMainContainer .pokerMessagesContainer > p:not(:first-child):not(:last-child) {
-  font-size: 1.2rem;
-  margin-top: 1rem;
-}
-
-.pokerMainContainer .pokerMessagesContainer > p:last-child {
-  margin-top: .5rem;
-  color: #ccc;
-}
-/*# sourceMappingURL=globals.css.map */
Index: yles/globals.css.map
===================================================================
--- styles/globals.css.map	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,9 +1,0 @@
-{
-    "version": 3,
-    "mappings": "AAAA,OAAO,CAAC,6FAAI;AAEZ,AAAA,IAAI;AACJ,IAAI,CAAC;EACH,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EAIT,WAAW,EAAE,mBAAmB;EAEhC,QAAQ,EAAE,MAAM;CACjB;;AAED,AAAA,CAAC,CAAC;EACA,KAAK,EAAE,OAAO;EACd,eAAe,EAAE,IAAI;CACtB;;AAED,AAAA,CAAC,CAAC;EACA,UAAU,EAAE,UAAU;CACvB;;AAGD,AAAA,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;EACR,MAAM,EAAE,CAAC;CACV;;AAED,AAAA,IAAI,CAAC;EACH,KAAK,EAAE,KAAK;EAEZ,cAAc,EAAE,GAAG;EAEnB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EAEb,MAAM,EAAE,IAAI;EAEZ,QAAQ,EAAE,MAAM;EAEhB,eAAe,EAAE,KAAK;EACtB,iBAAiB,EAAE,SAAS;EAC5B,mBAAmB,EAAE,MAAM;EAE3B,UAAU,EAAE,MAAM;CACnB;;AAED;;IAEI;AACJ,AAAA,MAAM,AAAA,OAAO,CAAC;EACZ,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa;EAC9B,WAAW,EAAE,MAAM;EAEnB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;EAEhB,QAAQ,EAAE,QAAQ;EAClB,OAAO,EAAE,CAAC;CA0CX;;AApDD,AAYE,MAZI,AAAA,OAAO,CAYX,KAAK,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,CAAC;EACf,aAAa,EAAE,IAAI;EAEnB,gBAAgB,EAAE,uBAAuB;EACzC,eAAe,EAAE,KAAK;EAEtB,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,wBAAwB;EAE1C,MAAM,EAAE,OAAO;CAChB;;AAvBH,AAyBE,MAzBI,AAAA,OAAO,CAyBX,EAAE,CAAC;EACD,MAAM,EAAE,OAAO;CAChB;;AA3BH,AA8BI,MA9BE,AAAA,OAAO,CA6BX,GAAG,CACD,EAAE,CAAC;EACD,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,GAAG;EACnB,eAAe,EAAE,IAAI;CAStB;;AA1CL,AAmCM,MAnCA,AAAA,OAAO,CA6BX,GAAG,CACD,EAAE,CAKA,EAAE,CAAC;EACD,YAAY,EAAE,IAAI;CAKnB;;AAzCP,AAsCQ,MAtCF,AAAA,OAAO,CA6BX,GAAG,CACD,EAAE,CAKA,EAAE,AAGC,WAAW,CAAC;EACX,YAAY,EAAE,CAAC;CAChB;;AAxCT,AA8CQ,MA9CF,AAAA,OAAO,CA6BX,GAAG,AAeA,qBAAqB,CACpB,EAAE,CACA,EAAE,CAAC;EACD,MAAM,EAAE,OAAO;CAChB;;AAMT;;;;IAII;AACJ,AAAA,cAAc,CAAC;EACb,KAAK,EAAE,KAAK;EAEZ,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EAEnB,UAAU,EAAE,IAAI;EAEhB,OAAO,EAAE,aAAa;EAEtB,gBAAgB,EAAE,kBAAiB;CAYpC;;AAxBD,AAcE,cAdY,CAcZ,EAAE,CAAC;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,SAAS,EAAE,MAAM;CAClB;;AAlBH,AAoBE,cApBY,CAoBZ,EAAE,CAAC;EACD,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,OAAO;CACrB;;AAGH;;;;IAII;AACJ,AAAA,MAAM,CAAC;EACL,OAAO,EAAE,EAAE;EAEX,KAAK,EAAE,KAAK;EAEZ,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EAEnB,OAAO,EAAE,aAAa;EAEtB,gBAAgB,EAAE,kBAAiB;EAEnC,QAAQ,EAAE,QAAQ;EAElB,SAAS,EAAE,gBAAgB;EAE3B,UAAU,EAAE,YAAY;CAiBzB;;AAnCD,AAoBE,MApBI,CAoBJ,EAAE,CAAC;EACD,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,SAAS,EAAE,MAAM;CAClB;;AAxBH,AA0BE,MA1BI,CA0BJ,EAAE,CAAC;EACD,UAAU,EAAE,IAAI;EAChB,WAAW,EAAE,OAAO;CACrB;;AA7BH,AA+BE,MA/BI,CA+BJ,MAAM,CAAC;EACL,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,IAAI;CACjB;;AAGH;;;;IAII;AACJ,AAAA,aAAa,CAAC;EACZ,OAAO,EAAE,EAAE;EAEX,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,IAAI;EACT,KAAK,EAAE,IAAI;EAEX,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,KAAK;EAEjB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,QAAQ;EAsBrB,SAAS,EAAE,IAAI;EAEf,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,IAAI;EAEnB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;CAC3C;;AAzCD,AAeE,aAfW,CAeX,GAAG,CAAC;EACF,MAAM,EAAE,OAAO;CAChB;;AAjBH,AAmBE,aAnBW,GAmBT,GAAG,CAAC;EACJ,IAAI,EAAE,CAAC;EAEP,KAAK,EAAE,IAAI;EAEX,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EAEnB,SAAS,EAAE,MAAM;EAEjB,aAAa,EAAE,MAAM;EAErB,UAAU,EAAE,MAAM;CACnB;;AAUH;;;;IAII;AACJ,AAAA,YAAY,CAAC;EACX,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,GAAG;EACnB,eAAe,EAAE,aAAa;EAC9B,WAAW,EAAE,MAAM;EAEnB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,IAAI;CA2EjB;;AAnFD,AAUE,YAVU,CAUV,WAAW,CAAC;EACV,UAAU,EAAE,cAAc;EAC1B,MAAM,EAAE,OAAO;EAEf,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;CAyDpB;;AA1EH,AAmBI,YAnBQ,CAUV,WAAW,CAST,YAAY,CAAC;EACX,UAAU,EAAE,cAAc;EAE1B,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,CAAC;EAEf,aAAa,EAAE,IAAI;EAEnB,UAAU,EAAE,iDAAiD;EAC7D,OAAO,EAAE,GAAG;EAEZ,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;CASvB;;AAxCL,AAiCM,YAjCM,CAUV,WAAW,CAST,YAAY,CAcV,OAAO,CAAC;EACN,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,GAAG;EACV,eAAe,EAAE,KAAK;EACtB,MAAM,EAAE,IAAI;EACZ,YAAY,EAAE,CAAC;CAChB;;AAvCP,AA0CI,YA1CQ,CAUV,WAAW,CAgCT,EAAE,CAAC;EACD,UAAU,EAAE,cAAc;EAE1B,WAAW,EAAE,OAAO;EACpB,UAAU,EAAE,IAAI;EAEhB,OAAO,EAAE,CAAC;CACX;;AAjDL,AAmDI,YAnDQ,CAUV,WAAW,CAyCT,EAAE,AAAA,QAAQ,CAAC;EACT,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,KAAK;EACZ,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,IAAI;EACV,SAAS,EAAE,qBAAqB;EAEhC,SAAS,EAAE,IAAI;EAEf,OAAO,EAAE,EAAE;CACZ;;AA9DL,AAiEM,YAjEM,CAUV,WAAW,AAsDR,MAAM,CACL,YAAY,CAAC;EACX,SAAS,EAAE,UAAU;EACrB,OAAO,EAAE,CAAC;CACX;;AApEP,AAsEM,YAtEM,CAUV,WAAW,AAsDR,MAAM,CAML,EAAE,CAAC;EACD,OAAO,EAAE,CAAC;CACX;;AAxEP,AA8EM,YA9EM,AA4ET,MAAM,CACL,WAAW,CACT,YAAY,CAAC;EACX,OAAO,EAAE,YAAY;CACtB;;AAKP;;IAEI;AACJ,AAAA,WAAW,CAAC;EACV,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EAEP,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EAEb,UAAU,EAAE,2CAA2C;EACvD,KAAK,EAAE,OAAO;EAEd,OAAO,EAAE,EAAE;CACZ;;AAED,AACE,YADU,GACR,GAAG,CAAC;EACJ,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,IAAI;EACV,SAAS,EAAE,qBAAqB;CACjC;;AAGH,AAAA,uBAAuB,CAAC;EACtB,UAAU,EAAE,MAAM;CAuBnB;;AAxBD,AAGE,uBAHqB,GAGnB,GAAG,CAAC;EACJ,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,IAAI;EAEnB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,GAAG,EAAE,IAAI;CAaV;;AAvBH,AAYI,uBAZmB,GAGnB,GAAG,CASH,KAAK,CAAC;EACJ,KAAK,EAAE,OAAO;EACd,eAAe,EAAE,SAAS;EAC1B,MAAM,EAAE,OAAO;CAChB;;AAhBL,AAkBI,uBAlBmB,GAGnB,GAAG,CAeH,EAAE,CAAC;EACD,SAAS,EAAE,MAAM;EACjB,UAAU,EAAE,MAAM;CACnB;;AAKL,AACE,oBADkB,GAChB,GAAG,CAAC;EACJ,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,WAAW;EAElB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;CAgBpB;;AAzBH,AAWI,oBAXgB,GAChB,GAAG,GAUD,IAAI,CAAC;EACL,aAAa,EAAE,KAAK;EAEpB,SAAS,EAAE,MAAM;CAClB;;AAfL,AAiBI,oBAjBgB,GAChB,GAAG,GAgBD,KAAK,CAAC;EACN,aAAa,EAAE,IAAI;EAEnB,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAElB,SAAS,EAAE,IAAI;CAChB;;AAIL,AACE,YADU,CACV,GAAG,CAAC;EACF,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,KAAK;CACb;;AALH,AAQI,YARQ,GAOR,GAAG,CACH,EAAE,CAAC;EACD,SAAS,EAAE,MAAM;EACjB,aAAa,EAAE,IAAI;CACpB;;AAXL,AAaI,YAbQ,GAOR,GAAG,CAMH,CAAC,CAAC;EACA,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa;EAE9B,SAAS,EAAE,MAAM;EACjB,aAAa,EAAE,IAAI;CASpB;;AA3BL,AAoBM,YApBM,GAOR,GAAG,CAMH,CAAC,AAOE,UAAW,CAAA,EAAE,EAAE;EACd,KAAK,EAAE,KAAK;CACb;;AAtBP,AAwBM,YAxBM,GAOR,GAAG,CAMH,CAAC,CAWC,IAAI,CAAC;EACH,WAAW,EAAE,IAAI;CAClB;;AAKP,AACE,oBADkB,CAClB,YAAY,CAAC;EACX,SAAS,EAAE,iBAAiB;EAC5B,MAAM,EAAE,IAAI;CACb;;AAJH,AAME,oBANkB,CAMlB,GAAG,CAAC;EACF,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,OAAO;EACf,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,KAAK;CACb;;AAXH,AAaE,oBAbkB,GAahB,GAAG,CAAC;EACJ,GAAG,EAAE,EAAE;EACP,SAAS,EAAE,kBAAkB;EAC7B,KAAK,EAAE,IAAI;CA6DZ;;AA7EH,AAkBI,oBAlBgB,GAahB,GAAG,CAKH,EAAE,CAAC;EACD,SAAS,EAAE,MAAM;EACjB,aAAa,EAAE,IAAI;CACpB;;AArBL,AAuBI,oBAvBgB,GAahB,GAAG,CAUH,CAAC,CAAC;EACA,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,KAAK;CACb;;AA1BL,AA6BM,oBA7Bc,GAahB,GAAG,CAeH,MAAM,CACJ,IAAI,CAAC;EACH,KAAK,EAAE,KAAK;CACb;;AA/BP,AAkCI,oBAlCgB,GAahB,GAAG,GAqBD,GAAG,AAAA,IAAK,CAAA,KAAK,EAAE;EACf,UAAU,EAAE,GAAG;EACf,MAAM,EAAE,IAAI;CACb;;AArCL,AAuCI,oBAvCgB,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,CAAC;EACT,MAAM,EAAE,IAAI;EAEZ,OAAO,EAAE,IAAI;CAkCd;;AA5EL,AA4CM,oBA5Cc,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,GAKN,GAAG,CAAC;EACJ,IAAI,EAAE,CAAC;EAEP,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;CAyBpB;;AA3EP,AAqDQ,oBArDY,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,GAKN,GAAG,CASH,oBAAoB,CAAC;EACnB,KAAK,EAAE,GAAG;CAoBX;;AA1ET,AAwDU,oBAxDU,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,GAKN,GAAG,CASH,oBAAoB,GAGhB,GAAG,CAAC;EACJ,KAAK,EAAE,IAAI;CAgBZ;;AAzEX,AA2DY,oBA3DQ,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,GAKN,GAAG,CASH,oBAAoB,GAGhB,GAAG,CAGH,KAAK,CAAC;EACJ,KAAK,EAAE,KAAK;CACb;;AA7Db,AA+DY,oBA/DQ,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,GAKN,GAAG,CASH,oBAAoB,GAGhB,GAAG,CAOH,IAAI,CAAC;EACH,KAAK,EAAE,OAAO;CACf;;AAjEb,AAmEY,oBAnEQ,GAahB,GAAG,GA0BD,GAAG,AAAA,KAAK,GAKN,GAAG,CASH,oBAAoB,GAGhB,GAAG,CAWH,KAAK,CAAC;EACJ,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,IAAI;EAEX,UAAU,EAAE,MAAM;CACnB;;AAQb,AACE,eADa,CACb,YAAY,CAAC;EACX,MAAM,EAAE,IAAI;CACb;;AAHH,AAOM,eAPS,GAKX,GAAG,GACD,GAAG,CACH,QAAQ,CAAC;EACP,gBAAgB,EAAE,OAAkB;EAEpC,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,SAAS,EAAE,IAAI;EACf,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,IAAI;CACpB;;AAKP,AAAA,YAAY,CAAC;EACX,MAAM,EAAE,OAAO;EAEf,gBAAgB,EAAE,OAAO;EACzB,OAAO,EAAE,YAAY;EACrB,aAAa,EAAE,IAAI;EAEnB,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,iBAAiB;EAC5B,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,OAAO;CACxB;;AAED;;IAEI;AACJ,AACE,cADY,CACZ,EAAE,CAAC;EACD,SAAS,EAAE,IAAI;CAChB;;AAGH,AACE,qBADmB,GACjB,GAAG,CAAC;EACJ,UAAU,EAAE,MAAM;CACnB;;AAHH,AAKE,qBALmB,CAKnB,EAAE,CAAC;EACD,SAAS,EAAE,IAAI;EACf,aAAa,EAAE,IAAI;CAKpB;;AAZH,AASI,qBATiB,CAKnB,EAAE,AAIC,UAAW,CAAA,CAAC,EAAE;EACb,KAAK,EAAE,KAAK;CACb;;AAIL,AACE,eADa,GACX,GAAG,CAAC;EACJ,UAAU,EAAE,MAAM;CACnB;;AAHH,AAKE,eALa,CAKb,EAAE,CAAC;EACD,SAAS,EAAE,IAAI;EACf,aAAa,EAAE,IAAI;CAKpB;;AAZH,AASI,eATW,CAKb,EAAE,AAIC,UAAW,CAAA,CAAC,EAAE;EACb,KAAK,EAAE,KAAK;CACb;;AAXL,AAcE,eAda,CAcb,MAAM,CAAC;EACL,SAAS,EAAE,MAAM;EACjB,UAAU,EAAE,IAAI;CACjB;;AAGH;;IAEI;AACJ,AACE,YADU,AACT,MAAM,CAAC;EACN,OAAO,EAAE,EAAE;CACZ;;AAGH,AAAA,uBAAuB,CAAC;EACtB,UAAU,EAAE,IAAI;EAEhB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,GAAG,EAAE,IAAI;CA6IV;;AAlJD,AAOE,uBAPqB,CAOrB,mBAAmB,CAAC;EAClB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,WAAW,EAAE,UAAU;EAEvB,GAAG,EAAE,IAAI;CAqIV;;AAjJH,AAcI,uBAdmB,CAOrB,mBAAmB,CAOjB,EAAE,CAAC;EACD,KAAK,EAAE,KAAK;CACb;;AAhBL,AAkBI,uBAlBmB,CAOrB,mBAAmB,GAWf,GAAG,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EAEb,UAAU,EAAE,cAAc;EAC1B,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAkB;CAyHzC;;AAhJL,AAwBM,uBAxBiB,CAOrB,mBAAmB,GAWf,GAAG,AAMF,MAAM,CAAC;EACN,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAkB;CAC1C;;AA1BP,AA4BM,uBA5BiB,CAOrB,mBAAmB,GAWf,GAAG,CAUH,EAAE,CAAC;EAKD,aAAa,EAAE,CAAC;EAChB,YAAY,EAAE,KAAK;EAEnB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,MAAM;EACnB,SAAS,EAAE,MAAM;EAEjB,UAAU,EAAE,MAAM;CACnB;;AAzCP,AA6BQ,uBA7Be,CAOrB,mBAAmB,GAWf,GAAG,CAUH,EAAE,CACA,IAAI,CAAC;EACH,KAAK,EAAE,KAAK;CACb;;AA/BT,AA2CM,uBA3CiB,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,CAAC;EAClB,OAAO,EAAE,IAAI;CA0Dd;;AAtGP,AA8CQ,uBA9Ce,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,CAAC;EACJ,IAAI,EAAE,CAAC;EACP,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;CAoDvB;;AArGT,AAmDU,uBAnDa,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,AAKF,UAAW,CAAA,CAAC,EAAE;EACb,WAAW,EAAE,UAAU;CACxB;;AArDX,AAuDU,uBAvDa,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,AASF,UAAW,CAAA,CAAC,EAAE;EACb,WAAW,EAAE,MAAM;CAMpB;;AA9DX,AA0DY,uBA1DW,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,AASF,UAAW,CAAA,CAAC,IAGT,GAAG,CAAC;EACJ,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;CACxB;;AA7Db,AAgEU,uBAhEa,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,AAkBF,UAAW,CAAA,CAAC,EAAE;EACb,WAAW,EAAE,QAAQ;CAKtB;;AAtEX,AAmEY,uBAnEW,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,AAkBF,UAAW,CAAA,CAAC,EAGX,EAAE,CAAC;EACD,aAAa,EAAE,IAAI;CACpB;;AArEb,AAwEU,uBAxEa,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,CA0BH,CAAC,CAAC;EACA,UAAU,EAAE,IAAI;EAEhB,SAAS,EAAE,MAAM;CAClB;;AA5EX,AA8EU,uBA9Ea,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,CAgCH,EAAE,CAAC;EACD,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;EAChB,UAAU,EAAE,MAAM;EAElB,aAAa,EAAE,IAAI;EACnB,YAAY,EAAE,CAAC;EAEf,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;CACpB;;AAxFX,AA0FU,uBA1Fa,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,GA4CD,GAAG,CAAC;EACJ,OAAO,EAAE,IAAI;EAEb,aAAa,EAAE,MAAM;CAOtB;;AApGX,AA+FY,uBA/FW,CAOrB,mBAAmB,GAWf,GAAG,AAyBF,kBAAkB,GAGf,GAAG,GA4CD,GAAG,CAKH,KAAK,CAAC;EACJ,aAAa,EAAE,OAAO;EAEtB,QAAQ,EAAE,QAAQ;CACnB;;AAnGb,AAwGM,uBAxGiB,CAOrB,mBAAmB,GAWf,GAAG,CAsFH,aAAa,EAxGnB,uBAAuB,CAOrB,mBAAmB,GAWf,GAAG,CAsFY,MAAM,CAAC;EACpB,OAAO,EAAE,IAAI;EAEb,aAAa,EAAE,MAAM;CAOtB;;AAlHP,AA6GQ,uBA7Ge,CAOrB,mBAAmB,GAWf,GAAG,CAsFH,aAAa,CAKX,KAAK,EA7Gb,uBAAuB,CAOrB,mBAAmB,GAWf,GAAG,CAsFY,MAAM,CAKnB,KAAK,CAAC;EACJ,aAAa,EAAE,OAAO;EAEtB,QAAQ,EAAE,QAAQ;CACnB;;AAjHT,AAoHM,uBApHiB,CAOrB,mBAAmB,GAWf,GAAG,CAkGH,aAAa,CAAC;EACZ,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;CACxB;;AAvHP,AAyHM,uBAzHiB,CAOrB,mBAAmB,GAWf,GAAG,CAuGH,MAAM,CAAC;EACL,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;CAOxB;;AAlIP,AA6HQ,uBA7He,CAOrB,mBAAmB,GAWf,GAAG,CAuGH,MAAM,CAIJ,KAAK,CAAC;EACJ,aAAa,EAAE,OAAO;EAEtB,MAAM,EAAE,KAAK;CACd;;AAjIT,AAoIM,uBApIiB,CAOrB,mBAAmB,GAWf,GAAG,CAkHH,yBAAyB,EApI/B,uBAAuB,CAOrB,mBAAmB,GAWf,GAAG,CAkHwB,sBAAsB,CAAC;EAChD,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;CAKpB;;AA3IP,AAwIQ,uBAxIe,CAOrB,mBAAmB,GAWf,GAAG,CAkHH,yBAAyB,GAIrB,GAAG,EAxIb,uBAAuB,CAOrB,mBAAmB,GAWf,GAAG,CAkHwB,sBAAsB,GAI7C,GAAG,CAAC;EACJ,IAAI,EAAE,CAAC;CACR;;AA1IT,AA6IM,uBA7IiB,CAOrB,mBAAmB,GAWf,GAAG,CA2HH,sBAAsB,CAAC;EACrB,YAAY,EAAE,KAAK;CACpB;;AAKP,AAAA,iBAAiB,CAAC;EAChB,OAAO,EAAE,EAAE;CAuDZ;;AAxDD,AAGE,iBAHe,CAGf,UAAU,CAAC;EACT,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EAEb,UAAU,EAAE,cAAc;EAC1B,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,mBAAkB;CA+CzC;;AAvDH,AASI,iBATa,CAGf,UAAU,AAMP,MAAM,CAAC;EACN,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAkB;CAC1C;;AAXL,AAaI,iBAba,CAGf,UAAU,AAUP,UAAW,CAAA,IAAI,EAAE;EAChB,KAAK,EAAE,KAAK;CACb;;AAfL,AAiBI,iBAjBa,CAGf,UAAU,GAcN,GAAG,AAAA,UAAW,CAAA,CAAC,EAAE;EACjB,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,aAAa;EAC9B,WAAW,EAAE,MAAM;CAUpB;;AA9BL,AAsBM,iBAtBW,CAGf,UAAU,GAcN,GAAG,AAAA,UAAW,CAAA,CAAC,IAKb,CAAC,CAAC;EACF,IAAI,EAAE,CAAC;CACR;;AAxBP,AA0BM,iBA1BW,CAGf,UAAU,GAcN,GAAG,AAAA,UAAW,CAAA,CAAC,IASb,GAAG,CAAC;EACJ,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,QAAQ;CAC1B;;AA7BP,AAgCI,iBAhCa,CAGf,UAAU,CA6BR,QAAQ,CAAC;EACP,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,MAAM;EACjB,OAAO,EAAE,KAAK;EAEd,gBAAgB,EAAE,OAAkB;CACrC;;AAxCL,AA0CI,iBA1Ca,CAGf,UAAU,CAuCR,UAAU,CAAC;EACT,UAAU,EAAE,IAAI;CAOjB;;AAlDL,AA6CM,iBA7CW,CAGf,UAAU,CAuCR,UAAU,GAGN,GAAG,CAAC;EACJ,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,QAAQ;EACzB,UAAU,EAAE,IAAI;CACjB;;AAjDP,AAoDI,iBApDa,CAGf,UAAU,CAiDR,cAAc,EApDlB,iBAAiB,CAGf,UAAU,CAiDQ,gBAAgB,CAAC;EAC/B,SAAS,EAAE,IAAI;CAChB;;AAIL,AAAA,gBAAgB,CAAC;EACf,OAAO,EAAE,EAAE;CACZ;;AAED,AAEI,gBAFY,AACb,MAAM,CACL,oBAAoB,CAAC;EACnB,SAAS,EAAE,qBAAqB;CAWjC;;AAdL,AAKM,gBALU,AACb,MAAM,CACL,oBAAoB,GAGhB,GAAG,CAAC;EACJ,GAAG,EAAE,KAAK;CAOX;;AAbP,AAQQ,gBARQ,AACb,MAAM,CACL,oBAAoB,GAGhB,GAAG,GAGD,GAAG,CAAC;EACJ,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,YAAY;CAC9B;;AAMT;;IAEI;AACJ,AAAA,cAAc,CAAC;EACb,UAAU,EAAE,2CAA2C;EACvD,KAAK,EAAE,OAAO;EAEd,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EAEnB,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,QAAQ;EAEjB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EAE1C,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,cAAc;CAW3B;;AA1BD,AAiBE,cAjBY,AAiBX,MAAM,CAAC;EACN,SAAS,EAAE,UAAU,CAAC,cAAc;CAErC;;AApBH,AAsBE,cAtBY,AAsBX,OAAO,CAAC;EACP,UAAU,EAAE,WAAW;EACvB,SAAS,EAAE,QAAQ,CAAC,cAAc;CACnC;;AAGH,AAAA,gBAAgB,CAAC;EACf,UAAU,EAAE,2CAA2C;EACvD,KAAK,EAAE,KAAK;EAEZ,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EAEnB,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,QAAQ;EAEjB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EAE1C,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,cAAc;CAW3B;;AA1BD,AAiBE,gBAjBc,AAiBb,MAAM,CAAC;EACN,SAAS,EAAE,UAAU,CAAC,cAAc;CAErC;;AApBH,AAsBE,gBAtBc,AAsBb,OAAO,CAAC;EACP,UAAU,EAAE,WAAW;EACvB,SAAS,EAAE,QAAQ,CAAC,cAAc;CACnC;;AAGH,AAAA,eAAe,CAAC;EACd,UAAU,EAAE,2CAA2C;EACvD,KAAK,EAAE,KAAK;EAEZ,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EAEnB,SAAS,EAAE,MAAM;EACjB,WAAW,EAAE,IAAI;EACjB,OAAO,EAAE,QAAQ;EAEjB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EAE1C,MAAM,EAAE,OAAO;EACf,UAAU,EAAE,cAAc;CAU3B;;AAzBD,AAiBE,eAjBa,AAiBZ,MAAM,CAAC;EACN,UAAU,EAAE,2CAA2C;CACxD;;AAnBH,AAqBE,eArBa,AAqBZ,OAAO,CAAC;EACP,UAAU,EAAE,WAAW;EACvB,UAAU,EAAE,2CAA2C;CACxD;;AAGH;;IAEI;AACJ,AAAA,cAAc,CAAC;EACb,kBAAkB,EAAE,IAAI;EACxB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,IAAI;EACnB,kBAAkB,EAAE,GAAG;EACvB,UAAU,EAAE,WAAW;EAEvB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB;CAChD;;AAED,AAAA,cAAc,AAAA,MAAM,CAAC;EACnB,OAAO,EAAE,CAAC;CACX;;AAED,AAAA,cAAc,AAAA,sBAAsB,CAAC;EACnC,kBAAkB,EAAE,IAAI;EACxB,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,4BAA4B;EACxC,eAAe,EAAE,OAAO;EACxB,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,OAAO;CAChB;;AAED,AAAA,cAAc,AAAA,kBAAkB,CAAC;EAC/B,UAAU,EAAE,IAAI;EAChB,OAAO,EAAE,IAAI;EACb,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,4BAA4B;EACxC,eAAe,EAAE,OAAO;EACxB,gBAAgB,EAAE,OAAO;EACzB,MAAM,EAAE,OAAO;CAChB;;AAED;;IAEI;AAEJ,WAAW;AACX,AAAA,mBAAmB,CAAC;EAClB,KAAK,EAAE,IAAI;CACZ;;AAED,WAAW;AACX,AAAA,yBAAyB,CAAC;EACxB,UAAU,EAAE,OAAO;CACpB;;AAED,YAAY;AACZ,AAAA,yBAAyB,CAAC;EACxB,UAAU,EAAE,OAAO;CACpB;;AAED,qBAAqB;AACrB,AAAA,yBAAyB,AAAA,MAAM,CAAC;EAC9B,UAAU,EAAE,OAAO;CACpB;;AAED;;IAEI;AACJ,AAAA,iBAAiB,CAAC;EAChB,QAAQ,EAAE,QAAQ;EAElB,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,IAAI;EAET,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,IAAI;EAEZ,QAAQ,EAAE,MAAM;CAkBjB;;AA3BD,AAWE,iBAXe,GAWb,GAAG,CAAC;EACJ,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,GAAG;EACnB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EAEnB,UAAU,EAAE,eAAe;CAS5B;;AA1BH,AAmBI,iBAnBa,GAWb,GAAG,GAQD,MAAM,CAAC;EACP,KAAK,EAAE,KAAK;CACb;;AArBL,AAuBI,iBAvBa,GAWb,GAAG,GAYD,MAAM,AAAA,UAAW,CAAA,CAAC,EAAE;EACpB,WAAW,EAAE,IAAI;CAClB;;AAIL,AAAA,KAAK,CAAC;EACJ,YAAY,EAAE,OAAO;EACrB,MAAM,EAAE,KAAK;EAEb,eAAe,EAAE,OAAO;EAExB,QAAQ,EAAE,QAAQ;EAElB,UAAU,EAAE,eAAe;EAE3B,aAAa,EAAE,IAAI;EAEnB,MAAM,EAAE,eAAe;CACxB;;AAED,AAAA,oBAAoB,CAAC;EACnB,QAAQ,EAAE,QAAQ;EAElB,SAAS,EAAE,qBAAqB;EAEhC,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,MAAM;CACZ;;AAED,AAAA,uBAAuB,CAAC;EACtB,OAAO,EAAE,EAAE;EAEX,cAAc,EAAE,iBAAiB;EAEjC,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,IAAI;EAET,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EAEZ,OAAO,EAAE,IAAI;EAEb,SAAS,EAAE,qBAAqB;EAEhC,UAAU,EAAE,+CAA+C;EAE3D,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EAE1C,aAAa,EAAE,IAAI;EAEnB,UAAU,EAAE,MAAM;CA0CnB;;AAhED,AAwBE,uBAxBqB,CAwBrB,uBAAuB,CAAC;EAKtB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,KAAK,EAAE,IAAI;CAgCZ;;AA/DH,AAyBI,uBAzBmB,CAwBrB,uBAAuB,AACpB,YAAY,CAAC;EACZ,UAAU,EAAE,KAAK;CAClB;;AA3BL,AAiCI,uBAjCmB,CAwBrB,uBAAuB,CASrB,EAAE,CAAC;EACD,aAAa,EAAE,IAAI;EAEnB,KAAK,EAAE,OAAO;CACf;;AArCL,AAuCI,uBAvCmB,CAwBrB,uBAAuB,GAenB,GAAG,CAAC;EACJ,UAAU,EAAE,IAAI;CAsBjB;;AA9DL,AA0CM,uBA1CiB,CAwBrB,uBAAuB,GAenB,GAAG,CAGH,CAAC,CAAC;EACA,aAAa,EAAE,IAAI;EAEnB,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE,GAAG;EAElB,MAAM,EAAE,OAAO;EAEf,UAAU,EAAE,eAAe;CAW5B;;AA7DP,AAoDQ,uBApDe,CAwBrB,uBAAuB,GAenB,GAAG,CAGH,CAAC,CAUC,IAAI,CAAC;EACH,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,OAAO;CACf;;AAvDT,AAyDQ,uBAzDe,CAwBrB,uBAAuB,GAenB,GAAG,CAGH,CAAC,AAeE,MAAM,CAAC;EACN,KAAK,EAAE,OAAO;EACd,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;CAC3C;;AAMT,AAAA,oCAAoC,CAAC;EACnC,OAAO,EAAE,EAAE;EAEX,cAAc,EAAE,iBAAiB;EAEjC,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,IAAI;EAET,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EAEZ,OAAO,EAAE,IAAI;EAEb,SAAS,EAAE,qBAAqB;EAEhC,UAAU,EAAE,+CAA+C;EAE3D,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EAE1C,aAAa,EAAE,IAAI;CAepB;;AAnCD,AAsBE,oCAtBkC,CAsBlC,CAAC,CAAC;EACA,aAAa,EAAE,IAAI;EAEnB,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE,GAAG;EAElB,UAAU,EAAE,eAAe;CAM5B;;AAlCH,AA8BI,oCA9BgC,CAsBlC,CAAC,CAQC,IAAI,CAAC;EACH,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,KAAK;CACb;;AAIL;;IAEI;AACJ,AAAA,sBAAsB,CAAC;EACrB,gBAAgB,EAAE,OAAO;CAC1B;;AAED,AAAA,aAAa,CAAC;EACZ,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,KAAK;EACV,IAAI,EAAE,KAAK;EAEX,KAAK,EAAE,IAAI;CACZ;;AAED,AAAA,gBAAgB,CAAC;EACf,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EAET,SAAS,EAAE,qBAAqB;EAEhC,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EAEZ,MAAM,EAAE,mBAAmB,EAAE,IAAI;CAClC;;AAED,AAAA,iBAAiB,CAAC;EAChB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EAET,UAAU,EAAE,mBAAmB;EAE/B,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,IAAI;CACb;;AAED,AAAA,iBAAiB,CAAC;EAChB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EAER,KAAK,EAAE,KAAK;EAEZ,UAAU,EAAE,MAAM;EAElB,SAAS,EAAE,MAAM;CAClB;;AAED,AAAA,yBAAyB,CAAC;EACxB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,EAAE;EAET,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EAEZ,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAsB;EAE3C,OAAO,EAAE,IAAI;EAEb,OAAO,EAAE,IAAI;EACb,kBAAkB,EAAE,yBAAyB;EAE7C,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,MAAM;CAMnB;;AAtBD,AAkBE,yBAlBuB,CAkBvB,CAAC,CAAC;EACA,SAAS,EAAE,UAAU;EACrB,UAAU,EAAE,KAAK;CAClB;;AAGH,AAAA,cAAc,CAAC;EACb,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,uBAAuB;EAC5B,IAAI,EAAE,WAAW;EAEjB,SAAS,EAAE,qBAAqB;EAEhC,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EACnB,GAAG,EAAE,GAAG;EAER,SAAS,EAAE,MAAM;EAEjB,KAAK,EAAE,KAAK;CACb;;AAED,AAAA,iBAAiB,CAAC;EAChB,OAAO,EAAE,EAAE;EAEX,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EAEnB,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EAEN,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EAEb,UAAU,EAAE,SAAS;CAetB;;AA7BD,AAgBE,iBAhBe,CAgBf,CAAC,CAAC;EACA,aAAa,EAAE,IAAI;EAEnB,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE,GAAG;EAElB,UAAU,EAAE,eAAe;CAM5B;;AA5BH,AAwBI,iBAxBa,CAgBf,CAAC,CAQC,IAAI,CAAC;EACH,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,OAAO;CACf;;AAIL,AAAA,gBAAgB,CAAC;EACf,OAAO,EAAE,EAAE;EAEX,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EAEnB,QAAQ,EAAE,KAAK;EACf,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EAEN,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EAEb,UAAU,EAAE,SAAS;CAetB;;AA7BD,AAgBE,gBAhBc,CAgBd,CAAC,CAAC;EACA,aAAa,EAAE,IAAI;EAEnB,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE,GAAG;EAElB,UAAU,EAAE,eAAe;CAM5B;;AA5BH,AAwBI,gBAxBY,CAgBd,CAAC,CAQC,IAAI,CAAC;EACH,SAAS,EAAE,MAAM;EACjB,KAAK,EAAE,OAAO;CACf;;AAIL;;IAEI;AACJ,AAAA,KAAK,CAAC;EACJ,SAAS,EAAE,mBAAmB;EAC9B,yBAAyB,EAAE,WAAW;CACvC;;AAED,UAAU,CAAV,OAAU;EACR,EAAE;IACA,SAAS,EAAE,qBAAqB,CAAC,aAAa;;EAEhD,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,0BAA0B;;EAE7D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,0BAA0B;;EAE7D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,0BAA0B;;EAE7D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,0BAA0B;;EAE7D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,0BAA0B;;EAE7D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,2BAA2B;;EAE9D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,2BAA2B;;EAE9D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,2BAA2B;;EAE9D,GAAG;IACD,SAAS,EAAE,qBAAqB,CAAC,2BAA2B;;EAE9D,IAAI;IACF,SAAS,EAAE,qBAAqB,CAAC,2BAA2B;;;;AAIhE;;IAEI;AACJ,AACE,mBADiB,CACjB,yBAAyB,CAAC;EACxB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EAEb,gBAAgB,EAAE,IAAI;EAEtB,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,eAAe,EAAE,MAAM;EACvB,WAAW,EAAE,MAAM;EACnB,GAAG,EAAE,IAAI;CA0DV;;AAxEH,AAiBM,mBAjBa,CACjB,yBAAyB,CAevB,aAAa,GACT,KAAK,CAAC;EACN,aAAa,EAAE,IAAI;EAEnB,YAAY,EAAE,GAAG;EACjB,aAAa,EAAE,GAAG;EAElB,SAAS,EAAE,MAAM;EAEjB,YAAY,EAAE,IAAI;EAElB,aAAa,EAAE,KAAK;CACrB;;AA5BP,AAgCM,mBAhCa,CACjB,yBAAyB,GA8BrB,GAAG,AAAA,IAAK,CAAA,aAAa,IACnB,EAAE,CAAC;EACH,aAAa,EAAE,IAAI;CACpB;;AAlCP,AAoCM,mBApCa,CACjB,yBAAyB,GA8BrB,GAAG,AAAA,IAAK,CAAA,aAAa,IAKnB,GAAG,CAAC;EACJ,OAAO,EAAE,IAAI;EACb,cAAc,EAAE,MAAM;EACtB,WAAW,EAAE,MAAM;EACnB,GAAG,EAAE,IAAI;EAET,KAAK,EAAE,KAAK;EACZ,UAAU,EAAE,IAAI;EAChB,aAAa,EAAE,IAAI;EAEnB,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,MAAM;CAuBnB;;AAtEP,AAiDQ,mBAjDW,CACjB,yBAAyB,GA8BrB,GAAG,AAAA,IAAK,CAAA,aAAa,IAKnB,GAAG,GAaD,GAAG,CAAC;EACJ,UAAU,EAAE,oBAAoB;EAEhC,KAAK,EAAE,IAAI;EAEX,OAAO,EAAE,SAAS;EAClB,aAAa,EAAE,KAAK;EAEpB,MAAM,EAAE,OAAO;EAEf,OAAO,EAAE,IAAI;EACb,qBAAqB,EAAE,yBAAyB;EAChD,WAAW,EAAE,MAAM;EAEnB,UAAU,EAAE,gBAAgB;CAM7B;;AArET,AAiEU,mBAjES,CACjB,yBAAyB,GA8BrB,GAAG,AAAA,IAAK,CAAA,aAAa,IAKnB,GAAG,GAaD,GAAG,AAgBF,MAAM,CAAC;EACN,SAAS,EAAE,WAAW;EACtB,UAAU,EAAE,qBAAqB;CAClC;;AApEX,AA2EI,mBA3Ee,CA0EjB,qBAAqB,CACnB,WAAW,CAAC;EACV,QAAQ,EAAE,QAAQ;EAElB,SAAS,EAAE,qBAAqB;EAEhC,KAAK,EAAE,KAAK;EACZ,YAAY,EAAE,CAAC;EAEf,aAAa,EAAE,GAAG;EAElB,MAAM,EAAE,mBAAmB;EAC3B,gBAAgB,EAAE,KAAK;EAEvB,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;EAEnB,SAAS,EAAE,KAAK;CA8CjB;;AAzIL,AA6FM,mBA7Fa,CA0EjB,qBAAqB,CACnB,WAAW,AAkBR,OAAO,CAAC;EACP,MAAM,EAAE,kBAAkB;EAC1B,gBAAgB,EAAE,SAAS;CAC5B;;AAhGP,AAkGM,mBAlGa,CA0EjB,qBAAqB,CACnB,WAAW,AAuBR,OAAO,CAAC;EACP,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,uBAAuB;EACzC,gBAAgB,EAAE,uBAAuB;CAC1C;;AArGP,AAwGQ,mBAxGW,CA0EjB,qBAAqB,CACnB,WAAW,GA4BP,GAAG,CACH,CAAC,CAAC;EACA,YAAY,EAAE,GAAG;CAClB;;AA1GT,AA6GM,mBA7Ga,CA0EjB,qBAAqB,CACnB,WAAW,CAkCT,0BAA0B,CAAC;EACzB,QAAQ,EAAE,QAAQ;CA0BnB;;AAxIP,AAgHQ,mBAhHW,CA0EjB,qBAAqB,CACnB,WAAW,CAkCT,0BAA0B,GAGtB,GAAG,CAAC;EACJ,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EAET,SAAS,EAAE,qBAAqB;EAEhC,OAAO,EAAE,IAAI;CAiBd;;AAvIT,AAwHU,mBAxHS,CA0EjB,qBAAqB,CACnB,WAAW,CAkCT,0BAA0B,GAGtB,GAAG,CAQH,KAAK,CAAC;EACJ,MAAM,EAAE,IAAI;EAEZ,aAAa,EAAE,KAAK;EAEpB,QAAQ,EAAE,QAAQ;CASnB;;AAtIX,AA+HY,mBA/HO,CA0EjB,qBAAqB,CACnB,WAAW,CAkCT,0BAA0B,GAGtB,GAAG,CAQH,KAAK,AAOF,YAAY,CAAC;EACZ,SAAS,EAAE,cAAc;CAC1B;;AAjIb,AAmIY,mBAnIO,CA0EjB,qBAAqB,CACnB,WAAW,CAkCT,0BAA0B,GAGtB,GAAG,CAQH,KAAK,AAWF,WAAW,CAAC;EACX,SAAS,EAAE,aAAa;CACzB;;AArIb,AA4IE,mBA5IiB,CA4IjB,kBAAkB,CAAC;EACjB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,IAAI;EAEV,SAAS,EAAE,qBAAqB;CACjC;;AAlJH,AAoJE,mBApJiB,CAoJjB,0BAA0B,CAAC;EACzB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,IAAI;EAEV,SAAS,EAAE,qBAAqB;EAEhC,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;EACvB,GAAG,EAAE,IAAI;CAKV;;AAlKH,AA+JI,mBA/Je,CAoJjB,0BAA0B,CAWxB,MAAM,CAAC;EACL,SAAS,EAAE,KAAK;CACjB;;AAjKL,AAoKE,mBApKiB,CAoKjB,0BAA0B,CAAC;EACzB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,IAAI;EACT,IAAI,EAAE,IAAI;EAEV,SAAS,EAAE,qBAAqB;EAEhC,OAAO,EAAE,IAAI;EACb,eAAe,EAAE,MAAM;CAQxB;;AApLH,AA8KI,mBA9Ke,CAoKjB,0BAA0B,CAUxB,KAAK,CAAC;EACJ,MAAM,EAAE,KAAK;EAEb,QAAQ,EAAE,QAAQ;EAClB,aAAa,EAAE,GAAG;CACnB;;AAnLL,AAsLE,mBAtLiB,CAsLjB,uBAAuB,CAAC;EACtB,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,IAAI;EAEV,SAAS,EAAE,gBAAgB;CAgB5B;;AA3MH,AA6LI,mBA7Le,CAsLjB,uBAAuB,GAOnB,CAAC,AAAA,YAAY,CAAC;EACd,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,OAAO;CACf;;AAhML,AAkMI,mBAlMe,CAsLjB,uBAAuB,GAYnB,CAAC,AAAA,IAAK,CAAA,YAAY,CAAC,IAAK,CAAA,WAAW,EAAE;EACrC,SAAS,EAAE,MAAM;EACjB,UAAU,EAAE,IAAI;CACjB;;AArML,AAuMI,mBAvMe,CAsLjB,uBAAuB,GAiBnB,CAAC,AAAA,WAAW,CAAC;EACb,UAAU,EAAE,KAAK;EACjB,KAAK,EAAE,IAAI;CACZ",
-    "sources": [
-        "globals.scss"
-    ],
-    "names": [],
-    "file": "globals.css"
-}
Index: yles/globals.scss
===================================================================
--- styles/globals.scss	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ 	(revision )
@@ -1,1542 +1,0 @@
-@import url(https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap);
-
-html,
-body {
-  padding: 0;
-  margin: 0;
-  // font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
-  //   Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
-
-  font-family: 'Inter', sans-serif;
-
-  overflow: hidden;
-}
-
-a {
-  color: inherit;
-  text-decoration: none;
-}
-
-* {
-  box-sizing: border-box;
-}
-
-// my code below:
-p, h1, h3 {
-  margin: 0;
-}
-
-.app {
-  color: white;
-
-  letter-spacing: 1px;
-
-  width: 100vw;
-  height: 100vh;
-
-  margin: auto;
-
-  overflow: hidden;
-
-  background-size: cover;
-  background-repeat: no-repeat;
-  background-position: 0% 50%;
-
-  text-align: center;
-}
-
-/**
-  * Component <- Header
-  */
-header.header {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-
-  width: 92vw;
-  margin: auto;
-  margin-top: 20px;
-
-  position: relative;
-  z-index: 5;
-
-  .logo {
-    width: 80px;
-    aspect-ratio: 1;
-    border-radius: 100%;
-
-    background-image: url("/images/logo.png");
-    background-size: cover;
-
-    border: 2px solid rgba(255, 255, 255, 0.2);
-
-    cursor: pointer;
-  }
-
-  h2 {
-    cursor: pointer;
-  }
-
-  nav {
-    ul {
-      display: flex;
-      flex-direction: row;
-      list-style-type: none;
-
-      li {
-        margin-right: 4rem;
-
-        &:last-child {
-          margin-right: 0;
-        }
-      }
-    }
-
-    &.mainHeaderNavigation {
-      ul {
-        li {
-          cursor: pointer;
-        }
-      }
-    }
-  }
-}
-
-/**
-  * Component <- Full Width Text
-  *
-  * Used in "Welcome To Caessino"
-  */
-.fullwidthText {
-  width: 100vw;
-  
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-
-  margin-top: 40px;
-
-  padding: 15px 0 20px 0;
-
-  background-color: rgba(0, 0, 0, .6);
-
-  h1 {
-    color: #FFD700;
-    font-weight: lighter;
-    font-size: 2.5rem;
-  }
-
-  h3 {
-    margin-top: 15px;
-    font-weight: lighter;
-  }
-}
-
-/**
-  * Component <- Alert
-  *
-  * Similar to Full Width Text
-  */
-.alert {
-  z-index: 30;
-
-  width: 100vw;
-  
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-
-  padding: 20px 0 25px 0;
-
-  background-color: rgba(0, 0, 0, .9);
-
-  position: absolute;
-
-  transform: translateY(-70%);
-  
-  transition: '.5s linear';
-
-  h1 {
-    color: #FFD700;
-    font-weight: lighter;
-    font-size: 2.5rem;
-  }
-
-  h3 {
-    margin-top: 10px;
-    font-weight: lighter;
-  }
-
-  button {
-    width: 500px;
-    margin-top: 20px;
-  }
-}
-
-/**
-  * Component <- Notification
-  *
-  * Displayed fixed in the top right corner
-  */
-.notification {
-  z-index: 30;
-
-  position: fixed;
-  top: 40px;
-  right: 30px;
-  
-  width: 500px;
-  min-height: 200px;
-
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: flex-end;
-
-  svg {
-    cursor: pointer;
-  }
-
-  &>div {
-    flex: 1;
-
-    width: 100%;
-
-    display: flex;
-    justify-content: center;
-    align-items: center;
-
-    font-size: 1.5rem;
-
-    margin-bottom: 1.2rem;
-
-    text-align: center;
-  }
-
-  font-size: 2rem;
-
-  padding: 20px;
-  border-radius: 15px;
-
-  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-}
-
-/**
-  * Component <- Game Circle
-  *
-  * Used in Landing Page -> to display the games in circles
-  */
-.gameCircles {
-  display: flex;
-  flex-direction: row;
-  justify-content: space-between;
-  align-items: center;
-
-  width: 92vw;
-  margin: auto;
-  margin-top: 50px;
-
-  .gameCircle {
-    transition: all .2s linear;
-    cursor: pointer;
-
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-
-    .circleLarge {
-      transition: all .2s linear;
-      
-      width: 22vw;
-      aspect-ratio: 1;
-      
-      border-radius: 100%;
-      
-      background: linear-gradient(to top right, #ffd900cc, #B65714);
-      opacity: .95;
-      
-      display: flex;
-      flex-direction: column;
-
-      .circle {
-        border-radius: 100%;
-        width: 98%;
-        background-size: cover;
-        margin: auto;
-        aspect-ratio: 1;
-      }
-    }
-
-    h3 {
-      transition: all .2s linear;
-
-      font-weight: lighter;
-      margin-top: 30px;
-
-      opacity: 0;
-    }
-
-    h1.loading {
-      color: white;
-      position: absolute;
-      width: 100vw;
-      top: 50vh;
-      left: 50vw;
-      transform: translate(-50%, -50%);
-
-      font-size: 5rem;
-
-      z-index: 10;
-    }
-
-    &:hover {
-      .circleLarge {
-        transform: scale(1.1);
-        opacity: 1;
-      }
-
-      h3 {
-        opacity: 1;
-      }
-    }
-  }
-  
-  &:hover {
-    .gameCircle {
-      .circleLarge {
-        opacity: 1 !important;
-      }
-    }
-  }
-}
-
-/**
-  * Full Screen Overlay
-  */
-.fullscreen {
-  position: fixed;
-  top: 0;
-  left: 0;
-
-  width: 100vw;
-  height: 100vh;
-
-  background: linear-gradient(to right, #0B932E, #097625);
-  color: #ead24d;
-
-  z-index: 10;
-}
-
-.fs-centered {
-  &>div {
-    position: fixed;
-    top: 50vh;
-    left: 50vw;
-    transform: translate(-50%, -50%);
-  }
-}
-
-.top-to-bottom-centered {
-  overflow-y: scroll;
-
-  &>div {
-    padding-block: 2rem;
-    width: 70vw;
-    margin-inline: auto;
-
-    display: flex;
-    flex-direction: column;
-    gap: 4rem;
-
-    .link {
-      color: #fff3ae;
-      text-decoration: underline;
-      cursor: pointer;
-    }
-
-    h3 {
-      font-size: 1.5rem;
-      text-align: center;
-    }
-    
-  }
-}
-
-.fs-inputs-container {
-  &>div {
-    margin: auto;
-    margin-top: 2.4rem;
-    width: fit-content;
-
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    
-    &>span {
-      margin-bottom: .5rem;
-      
-      font-size: 1.5rem;
-    }
-    
-    &>input {
-      margin-bottom: 2rem;
-
-      padding-left: 4px;
-      padding-right: 4px;
-      
-      font-size: 2rem;
-    }
-  }
-}
-
-.statsScreen {
-  svg {
-    cursor: pointer;
-    font-size: 2.5rem;
-    color: white;
-  }
-
-  &>div {
-    h1 {
-      font-size: 2.5rem;
-      margin-bottom: 5rem;
-    }
-
-    p {
-      display: flex;
-      justify-content: space-between;
-
-      font-size: 1.5rem;
-      margin-bottom: 1rem;
-
-      &:nth-child(2n) {
-        color: white;
-      }
-
-      span {
-        margin-left: 5rem;
-      }
-    }
-  }
-}
-
-.manageCreditsScreen {
-  .inlineAlert {
-    font-size: 1.5rem !important;
-    cursor: auto;
-  }
-
-  svg {
-    z-index: 100;
-    cursor: pointer;
-    font-size: 2.5rem;
-    color: white;
-  }
-
-  &>div {
-    top: 0%;
-    transform: translate(-50%, 0);
-    width: 100%;
-
-    h2 {
-      font-size: 1.5rem;
-      margin-bottom: 1rem;
-    }
-
-    p {
-      margin-bottom: 5rem;
-      color: white;
-    }
-
-    button {
-      span {
-        color: white;
-      }
-    }
-
-    &>div:not(.main) {
-      margin-top: 5vh;
-      height: 15vh;
-    }
-  
-    &>div.main {
-      height: 70vh;
-
-      display: flex;
-
-      &>div {
-        flex: 1;
-
-        display: flex;
-        flex-direction: column;
-        justify-content: center;
-        align-items: center;
-
-
-        .fs-inputs-container {
-          width: 40%;
-
-          &>div {
-            width: 100%;
-
-            label {
-              color: white;
-            }
-
-            span {
-              color: #ead24d;
-            }
-
-            input {
-              font-size: 1.2rem;
-              width: 100%;
-
-              text-align: center;
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-.complainScreen {
-  .inlineAlert {
-    cursor: auto;
-  }
-
-  &>div {
-    &>div {
-      textarea {
-        background-color: rgb(195, 255, 210);
-
-        width: 50vw;
-        height: 40vh;
-        font-size: 2rem;
-        margin-top: 1rem;
-        margin-bottom: 3rem;
-      }
-    }
-  }
-}
-
-.inlineAlert {
-  cursor: pointer;
-
-  background-color: #ffdddd;
-  padding: .8rem 2.4rem;
-  border-radius: 15px;
-
-  color: #ff0000;
-  font-size: 1.8rem !important;
-  font-weight: 100;
-  letter-spacing: -.030em;
-}
-
-/**
-  * Component <- Loading
-  */
-.loadingScreen {
-  h1 {
-    font-size: 5rem;
-  }
-}
-
-.lostConnectionScreen {
-  &>div {
-    text-align: center;
-  }
-
-  h3 {
-    font-size: 2rem;
-    margin-bottom: 1rem;
-
-    &:nth-child(2) {
-      color: white;
-    }
-  }
-}
-
-.activateScreen {
-  &>div {
-    text-align: center;
-  }
-
-  h3 {
-    font-size: 2rem;
-    margin-bottom: 1rem;
-
-    &:nth-child(1) {
-      color: white;
-    }
-  }
-
-  button {
-    font-size: 1.8rem;
-    margin-top: 8rem;
-  }
-}
-
-/**
-  * Component <- LoginScreen
-  */
-.loginScreen {
-  &.admin {
-    z-index: 50;
-  }
-}
-
-.liveGamesMegaContainer {
-  margin-top: 3rem;
-
-  display: flex;
-  flex-direction: column;
-  gap: 8rem;
-
-  .liveGamesContainer {
-    display: flex;
-    flex-direction: column;
-    align-items: flex-start;
-
-    gap: 2rem;
-
-    h3 {
-      color: white;
-    }
-
-    &>div {
-      width: 100%;
-      padding: 2rem;
-
-      transition: all .2s linear;
-      box-shadow: 0 2px 5px rgba(0, 0, 0, .25);
-      &:hover {
-        box-shadow: 0 5px 25px rgba(0, 0, 0, .25);
-      }
-
-      h6 {
-        span {
-          color: white;
-        }
-
-        margin-inline: 0;
-        margin-block: .5rem;
-
-        color: #ead24d;
-        font-weight: normal;
-        font-size: 1.2rem;
-
-        text-align: center;
-      }
-
-      &.liveBlackjackGame {
-        display: flex;
-
-        &>div {
-          flex: 1;
-          display: flex;
-          flex-direction: column;
-
-          &:nth-child(1) {
-            align-items: flex-start;
-          }
-
-          &:nth-child(2) {
-            align-items: center;
-
-            &>div {
-              flex-direction: column;
-              justify-content: center;
-            }
-          }
-
-          &:nth-child(3) {
-            align-items: flex-end;
-
-            h5 {
-              margin-inline: 4rem;
-            }
-          }
-
-          p {
-            margin-top: 1rem;
-            
-            font-size: 1.5rem;
-          }
-
-          h5 {
-            font-size: 5rem;
-            font-weight: 100;
-            font-style: italic;
-
-            margin-inline: 3rem;
-            margin-block: 0;
-
-            display: flex;
-            align-items: center;
-          }
-
-          &>div {
-            display: flex;
-
-            margin-inline: 2.5rem;
-
-            .card {
-              margin-inline: -2.5rem;
-            
-              position: relative;
-            }
-          }
-        }
-      }
-
-      .cardsOnTable, .cards {
-        display: flex;
-
-        margin-inline: 2.5rem;
-
-        .card {
-          margin-inline: -2.5rem;
-            
-          position: relative;
-        }
-      }
-
-      .cardsOnTable {
-        display: flex;
-        justify-content: center;
-      }
-
-      .cards {
-        display: flex;
-        justify-content: center;
-        
-        .card {
-          margin-inline: -1.6rem;
-          
-          height: 100px;
-        }
-      }
-
-      .playerInLiveRouletteGame, .playerInLivePokerGame {
-        display: flex;
-        align-items: center;
-
-        &>div {
-          flex: 1;
-        }
-      }
-
-      .playerInLivePokerGame {
-        margin-block: .8rem;
-      }
-    }
-  }
-}
-
-.complaintsScreen {
-  z-index: 20;
-
-  .complaint {
-    width: 100%;
-    padding: 2rem;
-
-    transition: all .2s linear;
-    box-shadow: 0 2px 5px rgba(0, 0, 0, .25);
-    &:hover {
-      box-shadow: 0 5px 25px rgba(0, 0, 0, .25);
-    }
-    
-    &:nth-child(2n+1) {
-      color: white;
-    }
-    
-    &>div:nth-child(1) {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      
-      &>* {
-        flex: 1;
-      }
-
-      &>div {
-        display: flex;
-        justify-content: flex-end;
-      }
-    }
-
-    textarea {
-      width: 100%;
-      height: 7rem;
-      margin-top: .5rem;
-      font-size: 1.2rem;
-      padding: .4rem;
-
-      background-color: rgb(195, 255, 210);
-    }
-
-    .answering {
-      margin-top: 1rem;
-
-      &>div {
-        display: flex;
-        justify-content: flex-end;
-        margin-top: 1rem;
-      }
-    }
-
-    .primaryButton, .secondaryButton {
-      font-size: 1rem;
-    }
-  }
-}
-
-.liveGamesScreen {
-  z-index: 20;
-}
-
-.dashboardScreen {
-  &.admin {
-    .fs-inputs-container {
-      transform: translate(-50%, -75%);
-
-      &>div {
-        gap: 10rem;
-
-        &>div {
-          width: 50vw;
-          display: flex;
-          justify-content: space-around;
-        }
-      }
-    }
-  }
-}
-
-/**
-  * Primary Thingies
-  */
-.primaryButton {
-  background: linear-gradient(to right, #0B932E, #097625);
-  color: #ead24d;
-
-  outline: none;
-  border: none;
-  border-radius: 10px;
-
-  font-size: 1.5rem;
-  font-weight: bold;
-  padding: 5px 20px;
-
-  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-
-  cursor: pointer;
-  transition: all .2s linear;
-
-  &:hover {
-    transform: scale(1.1) rotateZ(-1deg);
-    // padding: 10px 20px;
-  }
-
-  &:active {
-    transition: .05s linear;
-    transform: scale(1) rotateZ(-1deg);
-  }
-}
-
-.secondaryButton {
-  background: linear-gradient(to right, #4d99ea, #4d99ea);
-  color: white;
-
-  outline: none;
-  border: none;
-  border-radius: 10px;
-
-  font-size: 1.5rem;
-  font-weight: bold;
-  padding: 5px 20px;
-
-  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-
-  cursor: pointer;
-  transition: all .2s linear;
-
-  &:hover {
-    transform: scale(1.1) rotateZ(-1deg);
-    // padding: 10px 20px;
-  }
-
-  &:active {
-    transition: .05s linear;
-    transform: scale(1) rotateZ(-1deg);
-  }
-}
-
-.tertiaryButton {
-  background: linear-gradient(to right, #484848, #6a6a6a);
-  color: white;
-
-  outline: none;
-  border: none;
-  border-radius: 10px;
-
-  font-size: 1.5rem;
-  font-weight: bold;
-  padding: 5px 20px;
-
-  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);
-
-  cursor: pointer;
-  transition: all .2s linear;
-
-  &:hover {
-    background: linear-gradient(to right, #6e6e6e, #a0a0a0);
-  }
-
-  &:active {
-    transition: .05s linear;
-    background: linear-gradient(to right, #484848, #6a6a6a);
-  }
-}
-
-/**
-  * Input Sliders
-  */
-.primarySlider {
-  -webkit-appearance: none;
-  width: 250px;
-  height: 10px;
-  background: #0B932E;
-  outline: none;
-  border-radius: 10px;
-  -webkit-transition: .2s;
-  transition: opacity .2s;
-
-  box-shadow: 0 5px 25px rgba(234, 210, 77, 0.25);
-}
-
-.primarySlider:hover {
-  opacity: 1;
-}
-
-.primarySlider::-webkit-slider-thumb {
-  -webkit-appearance: none;
-  appearance: none;
-  outline: none;
-  border: none;
-  width: 35px;
-  height: 35px;
-  border-radius: 50%;
-  background: url("/images/gold-coin.png");
-  background-size: contain;
-  background-color: #ead24d;
-  cursor: pointer;
-}
-
-.primarySlider::-moz-range-thumb {
-  appearance: none;
-  outline: none;
-  border: none;
-  width: 35px;
-  height: 35px;
-  border-radius: 50%;
-  background: url("/images/gold-coin.png");
-  background-size: contain;
-  background-color: #ead24d;
-  cursor: pointer;
-}
-
-/**
-  * Scrollbar
-  */
-
-/* width */
-::-webkit-scrollbar {
-  width: 15px;
-}
-
-/* Track */
-::-webkit-scrollbar-track {
-  background: #0B932E;
-}
-
-/* Handle */
-::-webkit-scrollbar-thumb {
-  background: #ead24d;
-}
-
-/* Handle on hover */
-::-webkit-scrollbar-thumb:hover {
-  background: #efcb00;
-}
-
-/**
-  * File <- Blackjack Main
-  */
-.blackjackButtons {
-  position: absolute;
-
-  left: 0;
-  top: 90vh;
-
-  width: 100vw;
-  height: 10vh;
-
-  overflow: hidden;
-
-  &>div {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;
-    align-items: center;
-
-    transition: .5s ease-in-out;
-
-    &>button {
-      width: 300px;
-    }
-
-    &>button:nth-child(2) {
-      margin-left: 30px;
-    }
-  }
-}
-
-.card {    
-  aspect-ratio: 400/560;
-  height: 150px;
-
-  background-size: contain;
-
-  position: absolute;
-
-  transition: .5s ease-in-out;
-
-  border-radius: 10px;
-
-  border: 1px solid black;
-}
-
-.blackjackDisplayBet {
-  position: absolute;
-
-  transform: translate(-50%, -50%);
-
-  left: 51vw;
-  top: 63.5vh;
-}
-
-.blackjackSideBetsModal {
-  z-index: 20;
-
-  flex-direction: column !important;
-
-  position: fixed;
-  left: 50vw;
-  top: 45vh;
-
-  width: 41vw;
-  height: 80vh;
-
-  padding: 10px;
-
-  transform: translate(-50%, -50%);
-
-  background: linear-gradient(to right, #0B932Ec0, #097625e0);
-
-  box-shadow: 0 5px 50px rgba(0, 0, 0, 0.25);
-
-  border-radius: 20px;
-
-  overflow-y: scroll;
-
-  .blackjackSideBetSelect {
-    &:first-child {
-      margin-top: 10rem;
-    }
-
-    display: flex;
-    flex-direction: column;
-    width: 100%;
-    
-    h1 {
-      margin-bottom: 1rem;
-      
-      color: #ead24d;
-    }
-
-    &>div {
-      text-align: left;
-
-      p {
-        margin-bottom: 1rem;
-
-        padding: 10px 20px;
-        border-radius: 5px;
-
-        cursor: pointer;
-
-        transition: all .25s linear;
-
-        span {
-          font-size: 1.2rem;
-          color: #ead24d;
-        }
-        
-        &:hover {
-          color: #ead24d;
-          box-shadow: 0 5px 25px rgba(0, 0, 0, 0.25);          
-        }
-      }
-    }
-  }
-}
-
-.blackjackSideBetsChooseCreditsModal {
-  z-index: 20;
-
-  flex-direction: column !important;
-
-  position: fixed;
-  left: 50vw;
-  top: 45vh;
-
-  width: 41vw;
-  height: 80vh;
-
-  padding: 10px;
-
-  transform: translate(-50%, -50%);
-
-  background: linear-gradient(to right, #00000080, #00000080);
-
-  box-shadow: 0 5px 50px rgba(0, 0, 0, 0.25);
-
-  border-radius: 20px;
-
-  p {
-    margin-bottom: 1rem;
-
-    padding: 10px 20px;
-    border-radius: 5px;
-
-    transition: all .25s linear;
-
-    span {
-      font-size: 1.2rem;
-      color: white;
-    }
-  }
-}
-
-/**
-  * File <- Roulette Main
-  */
-.rouletteMainContainer {
-  background-color: #006600;
-}
-
-#rouletteBall {
-  position: absolute;
-  top: 87.5%;
-  left: 17.5%;
-
-  width: 1rem;
-}
-
-#rouletteBetsImg {
-  position: absolute;
-  top: 65%;
-  left: 59%;
-
-  transform: translate(-50%, -50%);
-  
-  width: 50vw;
-  height: auto;
-
-  cursor: url(/gold-coin.cur), auto;
-}
-
-#rouletteWheelImg {
-  position: absolute;
-  top: 60%;
-  left: 18%;
-
-  transition: all .5s ease-in-out;
-  
-  width: 450px;
-  height: auto;
-}
-
-.rouletteInfoText {
-  position: absolute;
-  top: 15%;
-  
-  width: 100vw;
-
-  text-align: center;
-
-  font-size: 1.1rem;
-}
-
-.roulettePlayersContainer {
-  position: absolute;
-  top: 15%;
-  right: 4%;
-  
-  width: 10vw;
-  height: 80vh;
-
-  box-shadow: 0 0 10px rgba(10, 148, 45, .25);
-
-  padding: 1rem;
-
-  display: grid;
-  grid-template-rows: repeat(2, minmax(0, 1fr));
-
-  overflow-x: hidden;
-  overflow-y: scroll;
-
-  p {
-    word-wrap: break-word;
-    margin-top: .5rem;
-  }
-}
-
-.rouletteTimer {
-  position: absolute;
-  top: calc((60% + 450px) / 2);
-  left: calc(18.5%);
-
-  transform: translate(-50%, -50%);
-
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  gap: 5px;
-  
-  font-size: 2.5rem;
-
-  color: black;
-}
-
-.rouletteBetModal {
-  z-index: 20;
-
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-
-  position: fixed;
-  left: 0;
-  top: 0;
-
-  width: 100vw;
-  height: 100vh;
-
-  background: #000000c0;
-
-  p {
-    margin-bottom: 1rem;
-
-    padding: 10px 20px;
-    border-radius: 5px;
-
-    transition: all .25s linear;
-
-    span {
-      font-size: 1.2rem;
-      color: #ead24d;
-    }
-  }
-}
-
-.pokerRaiseModal {
-  z-index: 20;
-
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-
-  position: fixed;
-  left: 0;
-  top: 0;
-
-  width: 100vw;
-  height: 100vh;
-
-  background: #000000c0;
-
-  p {
-    margin-bottom: 1rem;
-
-    padding: 10px 20px;
-    border-radius: 5px;
-
-    transition: all .25s linear;
-
-    span {
-      font-size: 1.2rem;
-      color: #ead24d;
-    }
-  }
-}
-
-/**
-  * Spin effect on the roulette wheel
-  */
-.spin {
-  animation: spinner 4s infinite;
-  animation-timing-function: ease-in-out;
-}
-
-@keyframes spinner {
-  0% {
-    transform: translate(-50%, -50%) rotateZ(0deg);
-  }
-  10% {
-    transform: translate(-50%, -50%) rotateZ(calc(20 * 360deg));
-  }
-  20% {
-    transform: translate(-50%, -50%) rotateZ(calc(38 * 360deg));
-  }
-  30% {
-    transform: translate(-50%, -50%) rotateZ(calc(54 * 360deg));
-  }
-  40% {
-    transform: translate(-50%, -50%) rotateZ(calc(78 * 360deg));
-  }
-  50% {
-    transform: translate(-50%, -50%) rotateZ(calc(90 * 360deg));
-  }
-  60% {
-    transform: translate(-50%, -50%) rotateZ(calc(100 * 360deg));
-  }
-  70% {
-    transform: translate(-50%, -50%) rotateZ(calc(108 * 360deg));
-  }
-  80% {
-    transform: translate(-50%, -50%) rotateZ(calc(116 * 360deg));
-  }
-  90% {
-    transform: translate(-50%, -50%) rotateZ(calc(120 * 360deg));
-  }
-  100% {
-    transform: translate(-50%, -50%) rotateZ(calc(122 * 360deg));
-  }
-}
-
-/**
-  * File <- Poker Main
-  */
-.pokerMainContainer {
-  .pokerPickATableContainer {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100vw;
-    height: 100vh;
-
-    background-color: #111;
-
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    gap: 5rem;
-
-    .createATable {
-      &>input {
-        margin-bottom: 2rem;
-  
-        padding-left: 4px;
-        padding-right: 4px;
-        
-        font-size: 1.5rem;
-
-        margin-right: 1rem;
-
-        border-radius: .5rem;
-      }
-    }
-
-    &>div:not(.createATable) {
-      &>h3 {
-        margin-bottom: 1rem;
-      }
-
-      &>div {
-        display: flex;
-        flex-direction: column;
-        align-items: center;
-        gap: 2rem;
-  
-        width: 100vw;
-        max-height: 45vh;
-        padding-block: 2rem;
-
-        overflow-x: hidden;
-        overflow-y: scroll;
-
-        &>div {
-          box-shadow: 0 5px 25px #4d99eaaa;
-
-          width: 60vw;
-
-          padding: 1rem 3rem;
-          border-radius: .5rem;
-
-          cursor: pointer;
-
-          display: grid;
-          grid-template-columns: repeat(4, minmax(0, 1fr));
-          place-items: center;
-
-          transition: all .2s ease-out;
-
-          &:hover {
-            transform: scale(1.05);
-            box-shadow: 0 10px 35px #4d99eaaa;
-          }
-        }
-      }
-    }
-  }
-
-  .pokerChairsContainer {
-    .pokerChair {
-      position: absolute;
-
-      transform: translate(-50%, -50%);
-
-      width: 110px;
-      aspect-ratio: 1;
-
-      border-radius: 50%;
-
-      border: 5px solid #ead24daa;
-      background-color: black;
-
-      display: grid;
-      place-items: center;
-
-      font-size: .8rem;
-
-      &.onTurn {
-        border: 5px dotted #ead24d;
-        background-color: #ead24d55;
-      }
-
-      &.folded {
-        border: 5px solid rgba(59, 59, 59, 0.667);
-        background-color: rgba(59, 59, 59, 0.667);
-      }
-
-      &>div {
-        p {
-          margin-block: 2px;
-        }
-      }
-
-      .pokerPlayerCardsContainer {
-        position: relative;
-
-        &>div {
-          position: absolute;
-          top: -2vh;
-
-          transform: translate(-50%, -50%);
-
-          display: flex;
-
-          .card {
-            height: 80px;
-
-            margin-inline: -1rem;
-
-            position: relative;
-
-            &:first-child {
-              transform: rotateZ(-5deg);
-            }
-            
-            &:last-child {
-              transform: rotateZ(5deg);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  .pokerPotContainer {
-    position: absolute;
-    top: 57vh;
-    left: 50vw;
-
-    transform: translate(-50%, -50%);
-  }
-
-  .pokerPlayButtonsContainer {
-    position: absolute;
-    top: 62vh;
-    left: 50vw;
-
-    transform: translate(-50%, -50%);
-
-    display: flex;
-    justify-content: center;
-    gap: 1rem;
-
-    button {
-      min-width: 110px;
-    }
-  }
-
-  .cardsInTheMiddleContainer {
-    position: absolute;
-    top: 45vh;
-    left: 50vw;
-
-    transform: translate(-50%, -50%);
-
-    display: flex;
-    justify-content: center;
-
-    .card {
-      height: 130px;
-
-      position: relative;
-      margin-inline: 2px;
-    }
-  }
-
-  .pokerMessagesContainer {
-    position: absolute;
-    top: 5vh;
-    left: 50vw;
-
-    transform: translateX(-50%);
-
-    &>p:first-child {
-      font-style: italic;
-      color: #c1fbaa;
-    }
-
-    &>p:not(:first-child):not(:last-child) {
-      font-size: 1.2rem;
-      margin-top: 1rem;
-    }
-
-    &>p:last-child {
-      margin-top: .5rem;
-      color: #ccc;
-    }
-  }
-}
Index: yarn.lock
===================================================================
--- yarn.lock	(revision 41d3f60370077ca99cfecfaf1b8e6b74ea364357)
+++ yarn.lock	(revision 6568bdeae3dbd082b040ec9b3d752c195313b7e5)
@@ -3,242 +3,165 @@
 
 
-"@arctext/react@^1.0.0":
-  "integrity" "sha512-K+dKaSOjjHs/6dw2gS0dWFOzGI28sqa3o1KOLMB48t8KRdulnh5QtPb33+C/ryWDV1eteIQM0Zi4ZDyEu7ES0g=="
-  "resolved" "https://registry.npmjs.org/@arctext/react/-/react-1.0.0.tgz"
-  "version" "1.0.0"
-
 "@babel/runtime-corejs3@^7.10.2":
-  "integrity" "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw=="
-  "resolved" "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz"
-  "version" "7.17.9"
-  dependencies:
-    "core-js-pure" "^3.20.2"
-    "regenerator-runtime" "^0.13.4"
-
-"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.16.3", "@babel/runtime@^7.9.2":
-  "integrity" "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg=="
-  "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz"
-  "version" "7.17.9"
-  dependencies:
-    "regenerator-runtime" "^0.13.4"
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz#3d02d0161f0fbf3ada8e88159375af97690f4055"
+  integrity sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==
+  dependencies:
+    core-js-pure "^3.20.2"
+    regenerator-runtime "^0.13.4"
+
+"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3":
+  version "7.17.9"
+  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
+  integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
+  dependencies:
+    regenerator-runtime "^0.13.4"
 
 "@eslint/eslintrc@^1.2.3":
-  "integrity" "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA=="
-  "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz"
-  "version" "1.2.3"
-  dependencies:
-    "ajv" "^6.12.4"
-    "debug" "^4.3.2"
-    "espree" "^9.3.2"
-    "globals" "^13.9.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"
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.3.tgz#fcaa2bcef39e13d6e9e7f6271f4cc7cae1174886"
+  integrity sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==
+  dependencies:
+    ajv "^6.12.4"
+    debug "^4.3.2"
+    espree "^9.3.2"
+    globals "^13.9.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"
 
 "@humanwhocodes/config-array@^0.9.2":
-  "integrity" "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw=="
-  "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz"
-  "version" "0.9.5"
+  version "0.9.5"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7"
+  integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==
   dependencies:
     "@humanwhocodes/object-schema" "^1.2.1"
-    "debug" "^4.1.1"
-    "minimatch" "^3.0.4"
+    debug "^4.1.1"
+    minimatch "^3.0.4"
 
 "@humanwhocodes/object-schema@^1.2.1":
-  "integrity" "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
-  "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
-  "version" "1.2.1"
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+  integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
 
 "@next/env@12.1.6":
-  "integrity" "sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA=="
-  "resolved" "https://registry.npmjs.org/@next/env/-/env-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.6.tgz#5f44823a78335355f00f1687cfc4f1dafa3eca08"
+  integrity sha512-Te/OBDXFSodPU6jlXYPAXpmZr/AkG6DCATAxttQxqOWaq6eDFX25Db3dK0120GZrSZmv4QCe9KsZmJKDbWs4OA==
 
 "@next/eslint-plugin-next@12.1.6":
-  "integrity" "sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw=="
-  "resolved" "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz"
-  "version" "12.1.6"
-  dependencies:
-    "glob" "7.1.7"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-12.1.6.tgz#dde3f98831f15923b25244588d924c716956292e"
+  integrity sha512-yNUtJ90NEiYFT6TJnNyofKMPYqirKDwpahcbxBgSIuABwYOdkGwzos1ZkYD51Qf0diYwpQZBeVqElTk7Q2WNqw==
+  dependencies:
+    glob "7.1.7"
 
 "@next/swc-android-arm-eabi@12.1.6":
-  "integrity" "sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ=="
-  "resolved" "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.1.6.tgz#79a35349b98f2f8c038ab6261aa9cd0d121c03f9"
+  integrity sha512-BxBr3QAAAXWgk/K7EedvzxJr2dE014mghBSA9iOEAv0bMgF+MRq4PoASjuHi15M2zfowpcRG8XQhMFtxftCleQ==
 
 "@next/swc-android-arm64@12.1.6":
-  "integrity" "sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew=="
-  "resolved" "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-android-arm64/-/swc-android-arm64-12.1.6.tgz#ec08ea61794f8752c8ebcacbed0aafc5b9407456"
+  integrity sha512-EboEk3ROYY7U6WA2RrMt/cXXMokUTXXfnxe2+CU+DOahvbrO8QSWhlBl9I9ZbFzJx28AGB9Yo3oQHCvph/4Lew==
 
 "@next/swc-darwin-arm64@12.1.6":
-  "integrity" "sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw=="
-  "resolved" "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.1.6.tgz#d1053805615fd0706e9b1667893a72271cd87119"
+  integrity sha512-P0EXU12BMSdNj1F7vdkP/VrYDuCNwBExtRPDYawgSUakzi6qP0iKJpya2BuLvNzXx+XPU49GFuDC5X+SvY0mOw==
 
 "@next/swc-darwin-x64@12.1.6":
-  "integrity" "sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg=="
-  "resolved" "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-12.1.6.tgz#2d1b926a22f4c5230d5b311f9c56cfdcc406afec"
+  integrity sha512-9FptMnbgHJK3dRDzfTpexs9S2hGpzOQxSQbe8omz6Pcl7rnEp9x4uSEKY51ho85JCjL4d0tDLBcXEJZKKLzxNg==
 
 "@next/swc-linux-arm-gnueabihf@12.1.6":
-  "integrity" "sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw=="
-  "resolved" "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.1.6.tgz#c021918d2a94a17f823106a5e069335b8a19724f"
+  integrity sha512-PvfEa1RR55dsik/IDkCKSFkk6ODNGJqPY3ysVUZqmnWMDSuqFtf7BPWHFa/53znpvVB5XaJ5Z1/6aR5CTIqxPw==
 
 "@next/swc-linux-arm64-gnu@12.1.6":
-  "integrity" "sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ=="
-  "resolved" "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.1.6.tgz#ac55c07bfabde378dfa0ce2b8fc1c3b2897e81ae"
+  integrity sha512-53QOvX1jBbC2ctnmWHyRhMajGq7QZfl974WYlwclXarVV418X7ed7o/EzGY+YVAEKzIVaAB9JFFWGXn8WWo0gQ==
 
 "@next/swc-linux-arm64-musl@12.1.6":
-  "integrity" "sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ=="
-  "resolved" "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.1.6.tgz#e429f826279894be9096be6bec13e75e3d6bd671"
+  integrity sha512-CMWAkYqfGdQCS+uuMA1A2UhOfcUYeoqnTW7msLr2RyYAys15pD960hlDfq7QAi8BCAKk0sQ2rjsl0iqMyziohQ==
 
 "@next/swc-linux-x64-gnu@12.1.6":
-  "integrity" "sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ=="
-  "resolved" "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.1.6.tgz#1f276c0784a5ca599bfa34b2fcc0b38f3a738e08"
+  integrity sha512-AC7jE4Fxpn0s3ujngClIDTiEM/CQiB2N2vkcyWWn6734AmGT03Duq6RYtPMymFobDdAtZGFZd5nR95WjPzbZAQ==
 
 "@next/swc-linux-x64-musl@12.1.6":
-  "integrity" "sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag=="
-  "resolved" "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.1.6.tgz#1d9933dd6ba303dcfd8a2acd6ac7c27ed41e2eea"
+  integrity sha512-c9Vjmi0EVk0Kou2qbrynskVarnFwfYIi+wKufR9Ad7/IKKuP6aEhOdZiIIdKsYWRtK2IWRF3h3YmdnEa2WLUag==
 
 "@next/swc-win32-arm64-msvc@12.1.6":
-  "integrity" "sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g=="
-  "resolved" "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.1.6.tgz#2ef9837f12ca652b1783d72ecb86208906042f02"
+  integrity sha512-3UTOL/5XZSKFelM7qN0it35o3Cegm6LsyuERR3/OoqEExyj3aCk7F025b54/707HTMAnjlvQK3DzLhPu/xxO4g==
 
 "@next/swc-win32-ia32-msvc@12.1.6":
-  "integrity" "sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA=="
-  "resolved" "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.1.6.tgz#74003d0aa1c59dfa56cb15481a5c607cbc0027b9"
+  integrity sha512-8ZWoj6nCq6fI1yCzKq6oK0jE6Mxlz4MrEsRyu0TwDztWQWe7rh4XXGLAa2YVPatYcHhMcUL+fQQbqd1MsgaSDA==
 
 "@next/swc-win32-x64-msvc@12.1.6":
-  "integrity" "sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA=="
-  "resolved" "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz"
-  "version" "12.1.6"
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.1.6.tgz#a350caf42975e7197b24b495b8d764eec7e6a36e"
+  integrity sha512-4ZEwiRuZEicXhXqmhw3+de8Z4EpOLQj/gp+D9fFWo6ii6W1kBkNNvvEx4A90ugppu+74pT1lIJnOuz3A9oQeJA==
 
 "@nodelib/fs.scandir@2.1.5":
-  "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="
-  "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
-  "version" "2.1.5"
+  version "2.1.5"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+  integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
   dependencies:
     "@nodelib/fs.stat" "2.0.5"
-    "run-parallel" "^1.1.9"
-
-"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
-  "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
-  "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
-  "version" "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.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+  integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
 
 "@nodelib/fs.walk@^1.2.3":
-  "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
-  "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
-  "version" "1.2.8"
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+  integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
   dependencies:
     "@nodelib/fs.scandir" "2.1.5"
-    "fastq" "^1.6.0"
-
-"@panva/hkdf@^1.0.1":
-  "integrity" "sha512-MSAs9t3Go7GUkMhpKC44T58DJ5KGk2vBo+h1cqQeqlMfdGkxaVB78ZWpv9gYi/g2fa4sopag9gJsNvS8XGgWJA=="
-  "resolved" "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.2.tgz"
-  "version" "1.0.2"
-
-"@reduxjs/toolkit@^1.8.1":
-  "integrity" "sha512-Q6mzbTpO9nOYRnkwpDlFOAbQnd3g7zj7CtHAZWz5SzE5lcV97Tf8f3SzOO8BoPOMYBFgfZaqTUZqgGu+a0+Fng=="
-  "resolved" "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.1.tgz"
-  "version" "1.8.1"
-  dependencies:
-    "immer" "^9.0.7"
-    "redux" "^4.1.2"
-    "redux-thunk" "^2.4.1"
-    "reselect" "^4.1.5"
+    fastq "^1.6.0"
 
 "@rushstack/eslint-patch@^1.1.3":
-  "integrity" "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw=="
-  "resolved" "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz"
-  "version" "1.1.3"
-
-"@socket.io/component-emitter@~3.1.0":
-  "integrity" "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
-  "resolved" "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz"
-  "version" "3.1.0"
-
-"@types/component-emitter@^1.2.10":
-  "integrity" "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
-  "resolved" "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz"
-  "version" "1.2.11"
-
-"@types/cookie@^0.4.1":
-  "integrity" "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q=="
-  "resolved" "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz"
-  "version" "0.4.1"
-
-"@types/cors@^2.8.12":
-  "integrity" "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
-  "resolved" "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz"
-  "version" "2.8.12"
-
-"@types/hoist-non-react-statics@^3.3.1":
-  "integrity" "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA=="
-  "resolved" "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz"
-  "version" "3.3.1"
-  dependencies:
-    "@types/react" "*"
-    "hoist-non-react-statics" "^3.3.0"
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz#6801033be7ff87a6b7cadaf5b337c9f366a3c4b0"
+  integrity sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==
 
 "@types/json5@^0.0.29":
-  "integrity" "sha1-7ihweulOEdK4J7y+UnC86n8+ce4="
-  "resolved" "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
-  "version" "0.0.29"
-
-"@types/node@>=10.0.0":
-  "integrity" "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA=="
-  "resolved" "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz"
-  "version" "18.0.0"
-
-"@types/prop-types@*":
-  "integrity" "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
-  "resolved" "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz"
-  "version" "15.7.5"
-
-"@types/react@*", "@types/react@^16.8 || ^17.0 || ^18.0":
-  "integrity" "sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw=="
-  "resolved" "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz"
-  "version" "18.0.9"
-  dependencies:
-    "@types/prop-types" "*"
-    "@types/scheduler" "*"
-    "csstype" "^3.0.2"
-
-"@types/scheduler@*":
-  "integrity" "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
-  "resolved" "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz"
-  "version" "0.16.2"
-
-"@types/use-sync-external-store@^0.0.3":
-  "integrity" "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
-  "resolved" "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz"
-  "version" "0.0.3"
+  version "0.0.29"
+  resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+  integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
 
 "@typescript-eslint/parser@^5.21.0":
-  "integrity" "sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ=="
-  "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.22.0.tgz"
-  "version" "5.22.0"
+  version "5.22.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.22.0.tgz#7bedf8784ef0d5d60567c5ba4ce162460e70c178"
+  integrity sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==
   dependencies:
     "@typescript-eslint/scope-manager" "5.22.0"
     "@typescript-eslint/types" "5.22.0"
     "@typescript-eslint/typescript-estree" "5.22.0"
-    "debug" "^4.3.2"
+    debug "^4.3.2"
 
 "@typescript-eslint/scope-manager@5.22.0":
-  "integrity" "sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA=="
-  "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz"
-  "version" "5.22.0"
+  version "5.22.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.22.0.tgz#590865f244ebe6e46dc3e9cab7976fc2afa8af24"
+  integrity sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==
   dependencies:
     "@typescript-eslint/types" "5.22.0"
@@ -246,1185 +169,1014 @@
 
 "@typescript-eslint/types@5.22.0":
-  "integrity" "sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw=="
-  "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.22.0.tgz"
-  "version" "5.22.0"
+  version "5.22.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.22.0.tgz#50a4266e457a5d4c4b87ac31903b28b06b2c3ed0"
+  integrity sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==
 
 "@typescript-eslint/typescript-estree@5.22.0":
-  "integrity" "sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw=="
-  "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz"
-  "version" "5.22.0"
+  version "5.22.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.22.0.tgz#e2116fd644c3e2fda7f4395158cddd38c0c6df97"
+  integrity sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==
   dependencies:
     "@typescript-eslint/types" "5.22.0"
     "@typescript-eslint/visitor-keys" "5.22.0"
-    "debug" "^4.3.2"
-    "globby" "^11.0.4"
-    "is-glob" "^4.0.3"
-    "semver" "^7.3.5"
-    "tsutils" "^3.21.0"
+    debug "^4.3.2"
+    globby "^11.0.4"
+    is-glob "^4.0.3"
+    semver "^7.3.5"
+    tsutils "^3.21.0"
 
 "@typescript-eslint/visitor-keys@5.22.0":
-  "integrity" "sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg=="
-  "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz"
-  "version" "5.22.0"
+  version "5.22.0"
+  resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.22.0.tgz#f49c0ce406944ffa331a1cfabeed451ea4d0909c"
+  integrity sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==
   dependencies:
     "@typescript-eslint/types" "5.22.0"
-    "eslint-visitor-keys" "^3.0.0"
-
-"accepts@~1.3.4":
-  "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw=="
-  "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
-  "version" "1.3.8"
-  dependencies:
-    "mime-types" "~2.1.34"
-    "negotiator" "0.6.3"
-
-"acorn-jsx@^5.3.2":
-  "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
-  "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
-  "version" "5.3.2"
-
-"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8.7.1":
-  "integrity" "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A=="
-  "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz"
-  "version" "8.7.1"
-
-"ajv@^6.10.0", "ajv@^6.12.4":
-  "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="
-  "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
-  "version" "6.12.6"
-  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":
-  "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
-  "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
-  "version" "5.0.1"
-
-"ansi-styles@^4.1.0":
-  "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
-  "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
-  "version" "4.3.0"
-  dependencies:
-    "color-convert" "^2.0.1"
-
-"argparse@^2.0.1":
-  "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
-  "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
-  "version" "2.0.1"
-
-"aria-query@^4.2.2":
-  "integrity" "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA=="
-  "resolved" "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz"
-  "version" "4.2.2"
+    eslint-visitor-keys "^3.0.0"
+
+acorn-jsx@^5.3.2:
+  version "5.3.2"
+  resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+  integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
+acorn@^8.7.1:
+  version "8.7.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30"
+  integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
+
+ajv@^6.10.0, ajv@^6.12.4:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  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.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+aria-query@^4.2.2:
+  version "4.2.2"
+  resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
+  integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
   dependencies:
     "@babel/runtime" "^7.10.2"
     "@babel/runtime-corejs3" "^7.10.2"
 
-"array-includes@^3.1.4":
-  "integrity" "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ=="
-  "resolved" "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz"
-  "version" "3.1.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.4"
-    "es-abstract" "^1.19.5"
-    "get-intrinsic" "^1.1.1"
-    "is-string" "^1.0.7"
-
-"array-union@^2.1.0":
-  "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
-  "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
-  "version" "2.1.0"
-
-"array.prototype.flat@^1.2.5":
-  "integrity" "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw=="
-  "resolved" "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz"
-  "version" "1.3.0"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.2"
-    "es-shim-unscopables" "^1.0.0"
-
-"array.prototype.flatmap@^1.2.5":
-  "integrity" "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg=="
-  "resolved" "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz"
-  "version" "1.3.0"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.2"
-    "es-shim-unscopables" "^1.0.0"
-
-"ast-types-flow@^0.0.7":
-  "integrity" "sha1-9wtzXGvKGlycItmCw+Oef+ujva0="
-  "resolved" "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz"
-  "version" "0.0.7"
-
-"asynckit@^0.4.0":
-  "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k="
-  "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
-  "version" "0.4.0"
-
-"axe-core@^4.3.5":
-  "integrity" "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw=="
-  "resolved" "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz"
-  "version" "4.4.1"
-
-"axios@^0.27.2":
-  "integrity" "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ=="
-  "resolved" "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz"
-  "version" "0.27.2"
-  dependencies:
-    "follow-redirects" "^1.14.9"
-    "form-data" "^4.0.0"
-
-"axobject-query@^2.2.0":
-  "integrity" "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA=="
-  "resolved" "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz"
-  "version" "2.2.0"
-
-"balanced-match@^1.0.0":
-  "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
-  "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
-  "version" "1.0.2"
-
-"base64id@~2.0.0", "base64id@2.0.0":
-  "integrity" "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
-  "resolved" "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz"
-  "version" "2.0.0"
-
-"brace-expansion@^1.1.7":
-  "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
-  "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
-  "version" "1.1.11"
-  dependencies:
-    "balanced-match" "^1.0.0"
-    "concat-map" "0.0.1"
-
-"braces@^3.0.2":
-  "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A=="
-  "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
-  "version" "3.0.2"
-  dependencies:
-    "fill-range" "^7.0.1"
-
-"buffer-writer@2.0.0":
-  "integrity" "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
-  "resolved" "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz"
-  "version" "2.0.0"
-
-"call-bind@^1.0.0", "call-bind@^1.0.2":
-  "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA=="
-  "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz"
-  "version" "1.0.2"
-  dependencies:
-    "function-bind" "^1.1.1"
-    "get-intrinsic" "^1.0.2"
-
-"callsites@^3.0.0":
-  "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
-  "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz"
-  "version" "3.1.0"
-
-"caniuse-lite@^1.0.30001332":
-  "integrity" "sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ=="
-  "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz"
-  "version" "1.0.30001338"
-
-"chalk@^4.0.0":
-  "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="
-  "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"
-  "version" "4.1.2"
-  dependencies:
-    "ansi-styles" "^4.1.0"
-    "supports-color" "^7.1.0"
-
-"color-convert@^2.0.1":
-  "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="
-  "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
-  "version" "2.0.1"
-  dependencies:
-    "color-name" "~1.1.4"
-
-"color-name@~1.1.4":
-  "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
-  "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
-  "version" "1.1.4"
-
-"combined-stream@^1.0.8":
-  "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
-  "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
-  "version" "1.0.8"
-  dependencies:
-    "delayed-stream" "~1.0.0"
-
-"component-emitter@~1.3.0":
-  "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
-  "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz"
-  "version" "1.3.0"
-
-"concat-map@0.0.1":
-  "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
-  "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
-  "version" "0.0.1"
-
-"cookie@^0.4.1", "cookie@~0.4.1":
-  "integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
-  "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz"
-  "version" "0.4.2"
-
-"core-js-pure@^3.20.2":
-  "integrity" "sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw=="
-  "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.4.tgz"
-  "version" "3.22.4"
-
-"cors@~2.8.5":
-  "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g=="
-  "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz"
-  "version" "2.8.5"
-  dependencies:
-    "object-assign" "^4"
-    "vary" "^1"
-
-"cross-spawn@^7.0.2":
-  "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w=="
-  "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
-  "version" "7.0.3"
-  dependencies:
-    "path-key" "^3.1.0"
-    "shebang-command" "^2.0.0"
-    "which" "^2.0.1"
-
-"crypto@^1.0.1":
-  "integrity" "sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig=="
-  "resolved" "https://registry.npmjs.org/crypto/-/crypto-1.0.1.tgz"
-  "version" "1.0.1"
-
-"csstype@^3.0.2":
-  "integrity" "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
-  "resolved" "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz"
-  "version" "3.0.11"
-
-"damerau-levenshtein@^1.0.7":
-  "integrity" "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="
-  "resolved" "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz"
-  "version" "1.0.8"
-
-"debug@^2.6.9":
-  "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
-  "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
-  "version" "2.6.9"
-  dependencies:
-    "ms" "2.0.0"
-
-"debug@^3.2.7":
-  "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="
-  "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
-  "version" "3.2.7"
-  dependencies:
-    "ms" "^2.1.1"
-
-"debug@^4.1.1", "debug@^4.3.2", "debug@^4.3.4", "debug@~4.3.1", "debug@~4.3.2":
-  "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ=="
-  "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
-  "version" "4.3.4"
-  dependencies:
-    "ms" "2.1.2"
-
-"deep-is@^0.1.3":
-  "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
-  "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
-  "version" "0.1.4"
-
-"define-properties@^1.1.3", "define-properties@^1.1.4":
-  "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA=="
-  "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz"
-  "version" "1.1.4"
-  dependencies:
-    "has-property-descriptors" "^1.0.0"
-    "object-keys" "^1.1.1"
-
-"delayed-stream@~1.0.0":
-  "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
-  "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
-  "version" "1.0.0"
-
-"dir-glob@^3.0.1":
-  "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="
-  "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
-  "version" "3.0.1"
-  dependencies:
-    "path-type" "^4.0.0"
-
-"doctrine@^2.1.0":
-  "integrity" "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="
-  "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz"
-  "version" "2.1.0"
-  dependencies:
-    "esutils" "^2.0.2"
-
-"doctrine@^3.0.0":
-  "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
-  "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
-  "version" "3.0.0"
-  dependencies:
-    "esutils" "^2.0.2"
-
-"dotenv@^16.0.0":
-  "integrity" "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q=="
-  "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz"
-  "version" "16.0.0"
-
-"emoji-regex@^9.2.2":
-  "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
-  "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz"
-  "version" "9.2.2"
-
-"engine.io-client@~6.2.1":
-  "integrity" "sha512-8ZQmx0LQGRTYkHuogVZuGSpDqYZtCM/nv8zQ68VZ+JkOpazJ7ICdsSpaO6iXwvaU30oFg5QJOJWj8zWqhbKjkQ=="
-  "resolved" "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.2.2.tgz"
-  "version" "6.2.2"
-  dependencies:
-    "@socket.io/component-emitter" "~3.1.0"
-    "debug" "~4.3.1"
-    "engine.io-parser" "~5.0.3"
-    "ws" "~8.2.3"
-    "xmlhttprequest-ssl" "~2.0.0"
-
-"engine.io-parser@~5.0.3":
-  "integrity" "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg=="
-  "resolved" "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz"
-  "version" "5.0.4"
-
-"engine.io@~6.2.0":
-  "integrity" "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg=="
-  "resolved" "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz"
-  "version" "6.2.0"
-  dependencies:
-    "@types/cookie" "^0.4.1"
-    "@types/cors" "^2.8.12"
-    "@types/node" ">=10.0.0"
-    "accepts" "~1.3.4"
-    "base64id" "2.0.0"
-    "cookie" "~0.4.1"
-    "cors" "~2.8.5"
-    "debug" "~4.3.1"
-    "engine.io-parser" "~5.0.3"
-    "ws" "~8.2.3"
-
-"es-abstract@^1.19.0", "es-abstract@^1.19.1", "es-abstract@^1.19.2", "es-abstract@^1.19.5":
-  "integrity" "sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA=="
-  "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.0.tgz"
-  "version" "1.20.0"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "es-to-primitive" "^1.2.1"
-    "function-bind" "^1.1.1"
-    "function.prototype.name" "^1.1.5"
-    "get-intrinsic" "^1.1.1"
-    "get-symbol-description" "^1.0.0"
-    "has" "^1.0.3"
-    "has-property-descriptors" "^1.0.0"
-    "has-symbols" "^1.0.3"
-    "internal-slot" "^1.0.3"
-    "is-callable" "^1.2.4"
-    "is-negative-zero" "^2.0.2"
-    "is-regex" "^1.1.4"
-    "is-shared-array-buffer" "^1.0.2"
-    "is-string" "^1.0.7"
-    "is-weakref" "^1.0.2"
-    "object-inspect" "^1.12.0"
-    "object-keys" "^1.1.1"
-    "object.assign" "^4.1.2"
-    "regexp.prototype.flags" "^1.4.1"
-    "string.prototype.trimend" "^1.0.5"
-    "string.prototype.trimstart" "^1.0.5"
-    "unbox-primitive" "^1.0.2"
-
-"es-shim-unscopables@^1.0.0":
-  "integrity" "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w=="
-  "resolved" "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz"
-  "version" "1.0.0"
-  dependencies:
-    "has" "^1.0.3"
-
-"es-to-primitive@^1.2.1":
-  "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA=="
-  "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz"
-  "version" "1.2.1"
-  dependencies:
-    "is-callable" "^1.1.4"
-    "is-date-object" "^1.0.1"
-    "is-symbol" "^1.0.2"
-
-"escape-string-regexp@^4.0.0":
-  "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
-  "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
-  "version" "4.0.0"
-
-"eslint-config-next@12.1.6":
-  "integrity" "sha512-qoiS3g/EPzfCTkGkaPBSX9W0NGE/B1wNO3oWrd76QszVGrdpLggNqcO8+LR6MB0CNqtp9Q8NoeVrxNVbzM9hqA=="
-  "resolved" "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.1.6.tgz"
-  "version" "12.1.6"
+array-includes@^3.1.4:
+  version "3.1.5"
+  resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
+  integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+    get-intrinsic "^1.1.1"
+    is-string "^1.0.7"
+
+array-union@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
+array.prototype.flat@^1.2.5:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
+  integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.2"
+    es-shim-unscopables "^1.0.0"
+
+array.prototype.flatmap@^1.2.5:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz#a7e8ed4225f4788a70cd910abcf0791e76a5534f"
+  integrity sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.2"
+    es-shim-unscopables "^1.0.0"
+
+ast-types-flow@^0.0.7:
+  version "0.0.7"
+  resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+  integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
+
+axe-core@^4.3.5:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413"
+  integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==
+
+axobject-query@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
+  integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+braces@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+  integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+  dependencies:
+    fill-range "^7.0.1"
+
+call-bind@^1.0.0, call-bind@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
+  integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
+  dependencies:
+    function-bind "^1.1.1"
+    get-intrinsic "^1.0.2"
+
+callsites@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+  integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
+caniuse-lite@^1.0.30001332:
+  version "1.0.30001338"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001338.tgz#b5dd7a7941a51a16480bdf6ff82bded1628eec0d"
+  integrity sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==
+
+chalk@^4.0.0:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+core-js-pure@^3.20.2:
+  version "3.22.4"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.4.tgz#a992210f4cad8b32786b8654563776c56b0e0d0a"
+  integrity sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==
+
+cross-spawn@^7.0.2:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+damerau-levenshtein@^1.0.7:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
+  integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
+
+debug@^2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@^3.2.7:
+  version "3.2.7"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+deep-is@^0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+define-properties@^1.1.3, define-properties@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
+  integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+dir-glob@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+  integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+  dependencies:
+    path-type "^4.0.0"
+
+doctrine@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+  integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+  dependencies:
+    esutils "^2.0.2"
+
+doctrine@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+  integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+  dependencies:
+    esutils "^2.0.2"
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
+  version "1.20.0"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.0.tgz#b2d526489cceca004588296334726329e0a6bfb6"
+  integrity sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==
+  dependencies:
+    call-bind "^1.0.2"
+    es-to-primitive "^1.2.1"
+    function-bind "^1.1.1"
+    function.prototype.name "^1.1.5"
+    get-intrinsic "^1.1.1"
+    get-symbol-description "^1.0.0"
+    has "^1.0.3"
+    has-property-descriptors "^1.0.0"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    is-callable "^1.2.4"
+    is-negative-zero "^2.0.2"
+    is-regex "^1.1.4"
+    is-shared-array-buffer "^1.0.2"
+    is-string "^1.0.7"
+    is-weakref "^1.0.2"
+    object-inspect "^1.12.0"
+    object-keys "^1.1.1"
+    object.assign "^4.1.2"
+    regexp.prototype.flags "^1.4.1"
+    string.prototype.trimend "^1.0.5"
+    string.prototype.trimstart "^1.0.5"
+    unbox-primitive "^1.0.2"
+
+es-shim-unscopables@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
+  integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
+  dependencies:
+    has "^1.0.3"
+
+es-to-primitive@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
+  integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
+  dependencies:
+    is-callable "^1.1.4"
+    is-date-object "^1.0.1"
+    is-symbol "^1.0.2"
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-config-next@12.1.6:
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-12.1.6.tgz#55097028982dce49159d8753000be3916ac55254"
+  integrity sha512-qoiS3g/EPzfCTkGkaPBSX9W0NGE/B1wNO3oWrd76QszVGrdpLggNqcO8+LR6MB0CNqtp9Q8NoeVrxNVbzM9hqA==
   dependencies:
     "@next/eslint-plugin-next" "12.1.6"
     "@rushstack/eslint-patch" "^1.1.3"
     "@typescript-eslint/parser" "^5.21.0"
-    "eslint-import-resolver-node" "^0.3.6"
-    "eslint-import-resolver-typescript" "^2.7.1"
-    "eslint-plugin-import" "^2.26.0"
-    "eslint-plugin-jsx-a11y" "^6.5.1"
-    "eslint-plugin-react" "^7.29.4"
-    "eslint-plugin-react-hooks" "^4.5.0"
-
-"eslint-import-resolver-node@^0.3.6":
-  "integrity" "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw=="
-  "resolved" "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz"
-  "version" "0.3.6"
-  dependencies:
-    "debug" "^3.2.7"
-    "resolve" "^1.20.0"
-
-"eslint-import-resolver-typescript@^2.7.1":
-  "integrity" "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ=="
-  "resolved" "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz"
-  "version" "2.7.1"
-  dependencies:
-    "debug" "^4.3.4"
-    "glob" "^7.2.0"
-    "is-glob" "^4.0.3"
-    "resolve" "^1.22.0"
-    "tsconfig-paths" "^3.14.1"
-
-"eslint-module-utils@^2.7.3":
-  "integrity" "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ=="
-  "resolved" "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz"
-  "version" "2.7.3"
-  dependencies:
-    "debug" "^3.2.7"
-    "find-up" "^2.1.0"
-
-"eslint-plugin-import@*", "eslint-plugin-import@^2.26.0":
-  "integrity" "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz"
-  "version" "2.26.0"
-  dependencies:
-    "array-includes" "^3.1.4"
-    "array.prototype.flat" "^1.2.5"
-    "debug" "^2.6.9"
-    "doctrine" "^2.1.0"
-    "eslint-import-resolver-node" "^0.3.6"
-    "eslint-module-utils" "^2.7.3"
-    "has" "^1.0.3"
-    "is-core-module" "^2.8.1"
-    "is-glob" "^4.0.3"
-    "minimatch" "^3.1.2"
-    "object.values" "^1.1.5"
-    "resolve" "^1.22.0"
-    "tsconfig-paths" "^3.14.1"
-
-"eslint-plugin-jsx-a11y@^6.5.1":
-  "integrity" "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz"
-  "version" "6.5.1"
+    eslint-import-resolver-node "^0.3.6"
+    eslint-import-resolver-typescript "^2.7.1"
+    eslint-plugin-import "^2.26.0"
+    eslint-plugin-jsx-a11y "^6.5.1"
+    eslint-plugin-react "^7.29.4"
+    eslint-plugin-react-hooks "^4.5.0"
+
+eslint-import-resolver-node@^0.3.6:
+  version "0.3.6"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
+  integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
+  dependencies:
+    debug "^3.2.7"
+    resolve "^1.20.0"
+
+eslint-import-resolver-typescript@^2.7.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz#a90a4a1c80da8d632df25994c4c5fdcdd02b8751"
+  integrity sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==
+  dependencies:
+    debug "^4.3.4"
+    glob "^7.2.0"
+    is-glob "^4.0.3"
+    resolve "^1.22.0"
+    tsconfig-paths "^3.14.1"
+
+eslint-module-utils@^2.7.3:
+  version "2.7.3"
+  resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
+  integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
+  dependencies:
+    debug "^3.2.7"
+    find-up "^2.1.0"
+
+eslint-plugin-import@^2.26.0:
+  version "2.26.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
+  integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
+  dependencies:
+    array-includes "^3.1.4"
+    array.prototype.flat "^1.2.5"
+    debug "^2.6.9"
+    doctrine "^2.1.0"
+    eslint-import-resolver-node "^0.3.6"
+    eslint-module-utils "^2.7.3"
+    has "^1.0.3"
+    is-core-module "^2.8.1"
+    is-glob "^4.0.3"
+    minimatch "^3.1.2"
+    object.values "^1.1.5"
+    resolve "^1.22.0"
+    tsconfig-paths "^3.14.1"
+
+eslint-plugin-jsx-a11y@^6.5.1:
+  version "6.5.1"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8"
+  integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==
   dependencies:
     "@babel/runtime" "^7.16.3"
-    "aria-query" "^4.2.2"
-    "array-includes" "^3.1.4"
-    "ast-types-flow" "^0.0.7"
-    "axe-core" "^4.3.5"
-    "axobject-query" "^2.2.0"
-    "damerau-levenshtein" "^1.0.7"
-    "emoji-regex" "^9.2.2"
-    "has" "^1.0.3"
-    "jsx-ast-utils" "^3.2.1"
-    "language-tags" "^1.0.5"
-    "minimatch" "^3.0.4"
-
-"eslint-plugin-react-hooks@^4.5.0":
-  "integrity" "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz"
-  "version" "4.5.0"
-
-"eslint-plugin-react@^7.29.4":
-  "integrity" "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ=="
-  "resolved" "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz"
-  "version" "7.29.4"
-  dependencies:
-    "array-includes" "^3.1.4"
-    "array.prototype.flatmap" "^1.2.5"
-    "doctrine" "^2.1.0"
-    "estraverse" "^5.3.0"
-    "jsx-ast-utils" "^2.4.1 || ^3.0.0"
-    "minimatch" "^3.1.2"
-    "object.entries" "^1.1.5"
-    "object.fromentries" "^2.0.5"
-    "object.hasown" "^1.1.0"
-    "object.values" "^1.1.5"
-    "prop-types" "^15.8.1"
-    "resolve" "^2.0.0-next.3"
-    "semver" "^6.3.0"
-    "string.prototype.matchall" "^4.0.6"
-
-"eslint-scope@^7.1.1":
-  "integrity" "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw=="
-  "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz"
-  "version" "7.1.1"
-  dependencies:
-    "esrecurse" "^4.3.0"
-    "estraverse" "^5.2.0"
-
-"eslint-utils@^3.0.0":
-  "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA=="
-  "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz"
-  "version" "3.0.0"
-  dependencies:
-    "eslint-visitor-keys" "^2.0.0"
-
-"eslint-visitor-keys@^2.0.0":
-  "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
-  "version" "2.1.0"
-
-"eslint-visitor-keys@^3.0.0", "eslint-visitor-keys@^3.3.0":
-  "integrity" "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA=="
-  "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz"
-  "version" "3.3.0"
-
-"eslint@*", "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^7.23.0 || ^8.0.0", "eslint@>=5", "eslint@8.15.0":
-  "integrity" "sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA=="
-  "resolved" "https://registry.npmjs.org/eslint/-/eslint-8.15.0.tgz"
-  "version" "8.15.0"
+    aria-query "^4.2.2"
+    array-includes "^3.1.4"
+    ast-types-flow "^0.0.7"
+    axe-core "^4.3.5"
+    axobject-query "^2.2.0"
+    damerau-levenshtein "^1.0.7"
+    emoji-regex "^9.2.2"
+    has "^1.0.3"
+    jsx-ast-utils "^3.2.1"
+    language-tags "^1.0.5"
+    minimatch "^3.0.4"
+
+eslint-plugin-react-hooks@^4.5.0:
+  version "4.5.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz#5f762dfedf8b2cf431c689f533c9d3fa5dcf25ad"
+  integrity sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==
+
+eslint-plugin-react@^7.29.4:
+  version "7.29.4"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz#4717de5227f55f3801a5fd51a16a4fa22b5914d2"
+  integrity sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==
+  dependencies:
+    array-includes "^3.1.4"
+    array.prototype.flatmap "^1.2.5"
+    doctrine "^2.1.0"
+    estraverse "^5.3.0"
+    jsx-ast-utils "^2.4.1 || ^3.0.0"
+    minimatch "^3.1.2"
+    object.entries "^1.1.5"
+    object.fromentries "^2.0.5"
+    object.hasown "^1.1.0"
+    object.values "^1.1.5"
+    prop-types "^15.8.1"
+    resolve "^2.0.0-next.3"
+    semver "^6.3.0"
+    string.prototype.matchall "^4.0.6"
+
+eslint-scope@^7.1.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+  integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+  dependencies:
+    esrecurse "^4.3.0"
+    estraverse "^5.2.0"
+
+eslint-utils@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+  integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+  dependencies:
+    eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+  integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+  integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
+eslint@8.15.0:
+  version "8.15.0"
+  resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.15.0.tgz#fea1d55a7062da48d82600d2e0974c55612a11e9"
+  integrity sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==
   dependencies:
     "@eslint/eslintrc" "^1.2.3"
     "@humanwhocodes/config-array" "^0.9.2"
-    "ajv" "^6.10.0"
-    "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.1.1"
-    "eslint-utils" "^3.0.0"
-    "eslint-visitor-keys" "^3.3.0"
-    "espree" "^9.3.2"
-    "esquery" "^1.4.0"
-    "esutils" "^2.0.2"
-    "fast-deep-equal" "^3.1.3"
-    "file-entry-cache" "^6.0.1"
-    "functional-red-black-tree" "^1.0.1"
-    "glob-parent" "^6.0.1"
-    "globals" "^13.6.0"
-    "ignore" "^5.2.0"
-    "import-fresh" "^3.0.0"
-    "imurmurhash" "^0.1.4"
-    "is-glob" "^4.0.0"
-    "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.1"
-    "regexpp" "^3.2.0"
-    "strip-ansi" "^6.0.1"
-    "strip-json-comments" "^3.1.0"
-    "text-table" "^0.2.0"
-    "v8-compile-cache" "^2.0.3"
-
-"espree@^9.3.2":
-  "integrity" "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA=="
-  "resolved" "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz"
-  "version" "9.3.2"
-  dependencies:
-    "acorn" "^8.7.1"
-    "acorn-jsx" "^5.3.2"
-    "eslint-visitor-keys" "^3.3.0"
-
-"esquery@^1.4.0":
-  "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w=="
-  "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz"
-  "version" "1.4.0"
-  dependencies:
-    "estraverse" "^5.1.0"
-
-"esrecurse@^4.3.0":
-  "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="
-  "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
-  "version" "4.3.0"
-  dependencies:
-    "estraverse" "^5.2.0"
-
-"estraverse@^5.1.0", "estraverse@^5.2.0", "estraverse@^5.3.0":
-  "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
-  "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
-  "version" "5.3.0"
-
-"esutils@^2.0.2":
-  "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
-  "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
-  "version" "2.0.3"
-
-"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3":
-  "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
-  "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
-  "version" "3.1.3"
-
-"fast-glob@^3.2.9":
-  "integrity" "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew=="
-  "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz"
-  "version" "3.2.11"
+    ajv "^6.10.0"
+    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.1.1"
+    eslint-utils "^3.0.0"
+    eslint-visitor-keys "^3.3.0"
+    espree "^9.3.2"
+    esquery "^1.4.0"
+    esutils "^2.0.2"
+    fast-deep-equal "^3.1.3"
+    file-entry-cache "^6.0.1"
+    functional-red-black-tree "^1.0.1"
+    glob-parent "^6.0.1"
+    globals "^13.6.0"
+    ignore "^5.2.0"
+    import-fresh "^3.0.0"
+    imurmurhash "^0.1.4"
+    is-glob "^4.0.0"
+    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.1"
+    regexpp "^3.2.0"
+    strip-ansi "^6.0.1"
+    strip-json-comments "^3.1.0"
+    text-table "^0.2.0"
+    v8-compile-cache "^2.0.3"
+
+espree@^9.3.2:
+  version "9.3.2"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596"
+  integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==
+  dependencies:
+    acorn "^8.7.1"
+    acorn-jsx "^5.3.2"
+    eslint-visitor-keys "^3.3.0"
+
+esquery@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
+  integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
+  dependencies:
+    estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+  integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+  dependencies:
+    estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
+  integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
+  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.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.9:
+  version "3.2.11"
+  resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
+  integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
   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":
-  "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
-  "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
-  "version" "2.1.0"
-
-"fast-levenshtein@^2.0.6":
-  "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
-  "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
-  "version" "2.0.6"
-
-"fastq@^1.6.0":
-  "integrity" "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw=="
-  "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz"
-  "version" "1.13.0"
-  dependencies:
-    "reusify" "^1.0.4"
-
-"file-entry-cache@^6.0.1":
-  "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="
-  "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
-  "version" "6.0.1"
-  dependencies:
-    "flat-cache" "^3.0.4"
-
-"fill-range@^7.0.1":
-  "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ=="
-  "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
-  "version" "7.0.1"
-  dependencies:
-    "to-regex-range" "^5.0.1"
-
-"find-up@^2.1.0":
-  "integrity" "sha1-RdG35QbHF93UgndaK3eSCjwMV6c="
-  "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz"
-  "version" "2.1.0"
-  dependencies:
-    "locate-path" "^2.0.0"
-
-"flat-cache@^3.0.4":
-  "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg=="
-  "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz"
-  "version" "3.0.4"
-  dependencies:
-    "flatted" "^3.1.0"
-    "rimraf" "^3.0.2"
-
-"flatted@^3.1.0":
-  "integrity" "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg=="
-  "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz"
-  "version" "3.2.5"
-
-"follow-redirects@^1.14.9":
-  "integrity" "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ=="
-  "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz"
-  "version" "1.15.0"
-
-"form-data@^4.0.0":
-  "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww=="
-  "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz"
-  "version" "4.0.0"
-  dependencies:
-    "asynckit" "^0.4.0"
-    "combined-stream" "^1.0.8"
-    "mime-types" "^2.1.12"
-
-"fs.realpath@^1.0.0":
-  "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
-  "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
-  "version" "1.0.0"
-
-"function-bind@^1.1.1":
-  "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
-  "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
-  "version" "1.1.1"
-
-"function.prototype.name@^1.1.5":
-  "integrity" "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA=="
-  "resolved" "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz"
-  "version" "1.1.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.0"
-    "functions-have-names" "^1.2.2"
-
-"functional-red-black-tree@^1.0.1":
-  "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
-  "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"
-  "version" "1.0.1"
-
-"functions-have-names@^1.2.2":
-  "integrity" "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
-  "resolved" "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
-  "version" "1.2.3"
-
-"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1":
-  "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q=="
-  "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz"
-  "version" "1.1.1"
-  dependencies:
-    "function-bind" "^1.1.1"
-    "has" "^1.0.3"
-    "has-symbols" "^1.0.1"
-
-"get-symbol-description@^1.0.0":
-  "integrity" "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw=="
-  "resolved" "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz"
-  "version" "1.0.0"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "get-intrinsic" "^1.1.1"
-
-"glob-parent@^5.1.2":
-  "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="
-  "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
-  "version" "5.1.2"
-  dependencies:
-    "is-glob" "^4.0.1"
-
-"glob-parent@^6.0.1":
-  "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="
-  "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
-  "version" "6.0.2"
-  dependencies:
-    "is-glob" "^4.0.3"
-
-"glob@^7.1.3", "glob@^7.2.0":
-  "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q=="
-  "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"
-  "version" "7.2.0"
-  dependencies:
-    "fs.realpath" "^1.0.0"
-    "inflight" "^1.0.4"
-    "inherits" "2"
-    "minimatch" "^3.0.4"
-    "once" "^1.3.0"
-    "path-is-absolute" "^1.0.0"
-
-"glob@7.1.7":
-  "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ=="
-  "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz"
-  "version" "7.1.7"
-  dependencies:
-    "fs.realpath" "^1.0.0"
-    "inflight" "^1.0.4"
-    "inherits" "2"
-    "minimatch" "^3.0.4"
-    "once" "^1.3.0"
-    "path-is-absolute" "^1.0.0"
-
-"globals@^13.6.0", "globals@^13.9.0":
-  "integrity" "sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg=="
-  "resolved" "https://registry.npmjs.org/globals/-/globals-13.14.0.tgz"
-  "version" "13.14.0"
-  dependencies:
-    "type-fest" "^0.20.2"
-
-"globby@^11.0.4":
-  "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="
-  "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
-  "version" "11.1.0"
-  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"
-
-"has-bigints@^1.0.1", "has-bigints@^1.0.2":
-  "integrity" "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
-  "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz"
-  "version" "1.0.2"
-
-"has-flag@^4.0.0":
-  "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
-  "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
-  "version" "4.0.0"
-
-"has-property-descriptors@^1.0.0":
-  "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ=="
-  "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz"
-  "version" "1.0.0"
-  dependencies:
-    "get-intrinsic" "^1.1.1"
-
-"has-symbols@^1.0.1", "has-symbols@^1.0.2", "has-symbols@^1.0.3":
-  "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
-  "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
-  "version" "1.0.3"
-
-"has-tostringtag@^1.0.0":
-  "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ=="
-  "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz"
-  "version" "1.0.0"
-  dependencies:
-    "has-symbols" "^1.0.2"
-
-"has@^1.0.3":
-  "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw=="
-  "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz"
-  "version" "1.0.3"
-  dependencies:
-    "function-bind" "^1.1.1"
-
-"hoist-non-react-statics@^3.3.0", "hoist-non-react-statics@^3.3.2":
-  "integrity" "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="
-  "resolved" "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz"
-  "version" "3.3.2"
-  dependencies:
-    "react-is" "^16.7.0"
-
-"ignore@^5.2.0":
-  "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
-  "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz"
-  "version" "5.2.0"
-
-"immer@^9.0.7":
-  "integrity" "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA=="
-  "resolved" "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz"
-  "version" "9.0.12"
-
-"import-fresh@^3.0.0", "import-fresh@^3.2.1":
-  "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw=="
-  "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
-  "version" "3.3.0"
-  dependencies:
-    "parent-module" "^1.0.0"
-    "resolve-from" "^4.0.0"
-
-"imurmurhash@^0.1.4":
-  "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o="
-  "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
-  "version" "0.1.4"
-
-"inflight@^1.0.4":
-  "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk="
-  "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
-  "version" "1.0.6"
-  dependencies:
-    "once" "^1.3.0"
-    "wrappy" "1"
-
-"inherits@2":
-  "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
-  "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
-  "version" "2.0.4"
-
-"internal-slot@^1.0.3":
-  "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA=="
-  "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz"
-  "version" "1.0.3"
-  dependencies:
-    "get-intrinsic" "^1.1.0"
-    "has" "^1.0.3"
-    "side-channel" "^1.0.4"
-
-"is-bigint@^1.0.1":
-  "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg=="
-  "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz"
-  "version" "1.0.4"
-  dependencies:
-    "has-bigints" "^1.0.1"
-
-"is-boolean-object@^1.1.0":
-  "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA=="
-  "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz"
-  "version" "1.1.2"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "has-tostringtag" "^1.0.0"
-
-"is-callable@^1.1.4", "is-callable@^1.2.4":
-  "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w=="
-  "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz"
-  "version" "1.2.4"
-
-"is-core-module@^2.2.0", "is-core-module@^2.8.1":
-  "integrity" "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A=="
-  "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz"
-  "version" "2.9.0"
-  dependencies:
-    "has" "^1.0.3"
-
-"is-date-object@^1.0.1":
-  "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ=="
-  "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz"
-  "version" "1.0.5"
-  dependencies:
-    "has-tostringtag" "^1.0.0"
-
-"is-extglob@^2.1.1":
-  "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
-  "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
-  "version" "2.1.1"
-
-"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@^4.0.3":
-  "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="
-  "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
-  "version" "4.0.3"
-  dependencies:
-    "is-extglob" "^2.1.1"
-
-"is-negative-zero@^2.0.2":
-  "integrity" "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
-  "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz"
-  "version" "2.0.2"
-
-"is-number-object@^1.0.4":
-  "integrity" "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ=="
-  "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz"
-  "version" "1.0.7"
-  dependencies:
-    "has-tostringtag" "^1.0.0"
-
-"is-number@^7.0.0":
-  "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
-  "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
-  "version" "7.0.0"
-
-"is-regex@^1.1.4":
-  "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg=="
-  "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"
-  "version" "1.1.4"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "has-tostringtag" "^1.0.0"
-
-"is-shared-array-buffer@^1.0.2":
-  "integrity" "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA=="
-  "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz"
-  "version" "1.0.2"
-  dependencies:
-    "call-bind" "^1.0.2"
-
-"is-string@^1.0.5", "is-string@^1.0.7":
-  "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg=="
-  "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz"
-  "version" "1.0.7"
-  dependencies:
-    "has-tostringtag" "^1.0.0"
-
-"is-symbol@^1.0.2", "is-symbol@^1.0.3":
-  "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg=="
-  "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz"
-  "version" "1.0.4"
-  dependencies:
-    "has-symbols" "^1.0.2"
-
-"is-weakref@^1.0.2":
-  "integrity" "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ=="
-  "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz"
-  "version" "1.0.2"
-  dependencies:
-    "call-bind" "^1.0.2"
-
-"isexe@^2.0.0":
-  "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
-  "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
-  "version" "2.0.0"
-
-"jose@^4.1.4", "jose@^4.3.7":
-  "integrity" "sha512-7rySkpW78d8LBp4YU70Wb7+OTgE3OwAALNVZxhoIhp4Kscp+p/fBkdpxGAMKxvCAMV4QfXBU9m6l9nX/vGwd2g=="
-  "resolved" "https://registry.npmjs.org/jose/-/jose-4.8.3.tgz"
-  "version" "4.8.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.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+  integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
+fast-levenshtein@^2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+  integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
+fastq@^1.6.0:
+  version "1.13.0"
+  resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c"
+  integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==
+  dependencies:
+    reusify "^1.0.4"
+
+file-entry-cache@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+  integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+  dependencies:
+    flat-cache "^3.0.4"
+
+fill-range@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+  integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+  dependencies:
+    to-regex-range "^5.0.1"
+
+find-up@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+  integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
+  dependencies:
+    locate-path "^2.0.0"
+
+flat-cache@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+  integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+  dependencies:
+    flatted "^3.1.0"
+    rimraf "^3.0.2"
+
+flatted@^3.1.0:
+  version "3.2.5"
+  resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3"
+  integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+function.prototype.name@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
+  integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.0"
+    functions-have-names "^1.2.2"
+
+functional-red-black-tree@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+  integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
+functions-have-names@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+  integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
+
+get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
+  integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
+  dependencies:
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-symbols "^1.0.1"
+
+get-symbol-description@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
+  integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+  dependencies:
+    call-bind "^1.0.2"
+    get-intrinsic "^1.1.1"
+
+glob-parent@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+  integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+  dependencies:
+    is-glob "^4.0.1"
+
+glob-parent@^6.0.1:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+  integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+  dependencies:
+    is-glob "^4.0.3"
+
+glob@7.1.7:
+  version "7.1.7"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
+  integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+glob@^7.1.3, glob@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+  integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+globals@^13.6.0, globals@^13.9.0:
+  version "13.14.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.14.0.tgz#daf3ff9b4336527cf56e98330b6f64bea9aff9df"
+  integrity sha512-ERO68sOYwm5UuLvSJTY7w7NP2c8S4UcXs3X1GBX8cwOr+ShOcDBbCY5mH4zxz0jsYCdJ8ve8Mv9n2YGJMB1aeg==
+  dependencies:
+    type-fest "^0.20.2"
+
+globby@^11.0.4:
+  version "11.1.0"
+  resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+  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"
+
+has-bigints@^1.0.1, has-bigints@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
+  integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-tostringtag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
+  integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+  dependencies:
+    has-symbols "^1.0.2"
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+ignore@^5.2.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
+  integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+  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.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+  integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+internal-slot@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
+  integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
+  dependencies:
+    get-intrinsic "^1.1.0"
+    has "^1.0.3"
+    side-channel "^1.0.4"
+
+is-bigint@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
+  integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
+  dependencies:
+    has-bigints "^1.0.1"
+
+is-boolean-object@^1.1.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
+  integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-callable@^1.1.4, is-callable@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
+  integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
+
+is-core-module@^2.2.0, is-core-module@^2.8.1:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
+  integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
+  dependencies:
+    has "^1.0.3"
+
+is-date-object@^1.0.1:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
+  integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-extglob@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+  integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
+
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3:
+  version "4.0.3"
+  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+  integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+  dependencies:
+    is-extglob "^2.1.1"
+
+is-negative-zero@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
+  integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+
+is-number-object@^1.0.4:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
+  integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-number@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+  integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-regex@^1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
+  integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
+  dependencies:
+    call-bind "^1.0.2"
+    has-tostringtag "^1.0.0"
+
+is-shared-array-buffer@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
+  integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+  dependencies:
+    call-bind "^1.0.2"
+
+is-string@^1.0.5, is-string@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
+  integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
+  dependencies:
+    has-tostringtag "^1.0.0"
+
+is-symbol@^1.0.2, is-symbol@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
+  integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
+  dependencies:
+    has-symbols "^1.0.2"
+
+is-weakref@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
+  integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
+  dependencies:
+    call-bind "^1.0.2"
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
 
 "js-tokens@^3.0.0 || ^4.0.0":
-  "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
-  "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz"
-  "version" "4.0.0"
-
-"js-yaml@^4.1.0":
-  "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA=="
-  "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
-  "version" "4.1.0"
-  dependencies:
-    "argparse" "^2.0.1"
-
-"json-schema-traverse@^0.4.1":
-  "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
-  "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
-  "version" "0.4.1"
-
-"json-stable-stringify-without-jsonify@^1.0.1":
-  "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
-  "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
-  "version" "1.0.1"
-
-"json5@^1.0.1":
-  "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow=="
-  "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz"
-  "version" "1.0.1"
-  dependencies:
-    "minimist" "^1.2.0"
-
-"jsx-ast-utils@^2.4.1 || ^3.0.0", "jsx-ast-utils@^3.2.1":
-  "integrity" "sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q=="
-  "resolved" "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz"
-  "version" "3.3.0"
-  dependencies:
-    "array-includes" "^3.1.4"
-    "object.assign" "^4.1.2"
-
-"language-subtag-registry@~0.3.2":
-  "integrity" "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg=="
-  "resolved" "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz"
-  "version" "0.3.21"
-
-"language-tags@^1.0.5":
-  "integrity" "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo="
-  "resolved" "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz"
-  "version" "1.0.5"
-  dependencies:
-    "language-subtag-registry" "~0.3.2"
-
-"levn@^0.4.1":
-  "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="
-  "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
-  "version" "0.4.1"
-  dependencies:
-    "prelude-ls" "^1.2.1"
-    "type-check" "~0.4.0"
-
-"locate-path@^2.0.0":
-  "integrity" "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4="
-  "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz"
-  "version" "2.0.0"
-  dependencies:
-    "p-locate" "^2.0.0"
-    "path-exists" "^3.0.0"
-
-"lodash.merge@^4.6.2":
-  "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
-  "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
-  "version" "4.6.2"
-
-"loose-envify@^1.1.0", "loose-envify@^1.4.0":
-  "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="
-  "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz"
-  "version" "1.4.0"
-  dependencies:
-    "js-tokens" "^3.0.0 || ^4.0.0"
-
-"lru-cache@^6.0.0":
-  "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="
-  "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
-  "version" "6.0.0"
-  dependencies:
-    "yallist" "^4.0.0"
-
-"merge2@^1.3.0", "merge2@^1.4.1":
-  "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
-  "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
-  "version" "1.4.1"
-
-"micromatch@^4.0.4":
-  "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA=="
-  "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
-  "version" "4.0.5"
-  dependencies:
-    "braces" "^3.0.2"
-    "picomatch" "^2.3.1"
-
-"mime-db@1.52.0":
-  "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
-  "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
-  "version" "1.52.0"
-
-"mime-types@^2.1.12", "mime-types@~2.1.34":
-  "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="
-  "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
-  "version" "2.1.35"
-  dependencies:
-    "mime-db" "1.52.0"
-
-"minimatch@^3.0.4", "minimatch@^3.1.2":
-  "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="
-  "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
-  "version" "3.1.2"
-  dependencies:
-    "brace-expansion" "^1.1.7"
-
-"minimist@^1.2.0", "minimist@^1.2.6":
-  "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
-  "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz"
-  "version" "1.2.6"
-
-"ms@^2.1.1":
-  "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-  "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
-  "version" "2.1.3"
-
-"ms@2.0.0":
-  "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
-  "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
-  "version" "2.0.0"
-
-"ms@2.1.2":
-  "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
-  "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
-  "version" "2.1.2"
-
-"nanoid@^3.1.30":
-  "integrity" "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
-  "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
-  "version" "3.3.4"
-
-"natural-compare@^1.4.0":
-  "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
-  "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
-  "version" "1.4.0"
-
-"negotiator@0.6.3":
-  "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="
-  "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
-  "version" "0.6.3"
-
-"next-auth@^4.10.0":
-  "integrity" "sha512-4CKZbv9VeCaqfDAXyqFThZy05ApbLd0bhXEB+DCq9aD43h6Rkvz0QgM7QOCJXESy0QKJUXHzopkBq+iaGxdc0g=="
-  "resolved" "https://registry.npmjs.org/next-auth/-/next-auth-4.10.0.tgz"
-  "version" "4.10.0"
-  dependencies:
-    "@babel/runtime" "^7.16.3"
-    "@panva/hkdf" "^1.0.1"
-    "cookie" "^0.4.1"
-    "jose" "^4.3.7"
-    "oauth" "^0.9.15"
-    "openid-client" "^5.1.0"
-    "preact" "^10.6.3"
-    "preact-render-to-string" "^5.1.19"
-    "uuid" "^8.3.2"
-
-"next@>=10.2.0", "next@12.1.6":
-  "integrity" "sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A=="
-  "resolved" "https://registry.npmjs.org/next/-/next-12.1.6.tgz"
-  "version" "12.1.6"
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+  integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
+
+js-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+json-schema-traverse@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+  integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+  integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
+json5@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+  integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+  dependencies:
+    minimist "^1.2.0"
+
+"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.0.tgz#e624f259143b9062c92b6413ff92a164c80d3ccb"
+  integrity sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==
+  dependencies:
+    array-includes "^3.1.4"
+    object.assign "^4.1.2"
+
+language-subtag-registry@~0.3.2:
+  version "0.3.21"
+  resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
+  integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
+
+language-tags@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
+  integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=
+  dependencies:
+    language-subtag-registry "~0.3.2"
+
+levn@^0.4.1:
+  version "0.4.1"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+  integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+  dependencies:
+    prelude-ls "^1.2.1"
+    type-check "~0.4.0"
+
+locate-path@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+  integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
+  dependencies:
+    p-locate "^2.0.0"
+    path-exists "^3.0.0"
+
+lodash.merge@^4.6.2:
+  version "4.6.2"
+  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+  integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+loose-envify@^1.1.0, loose-envify@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+  integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
+  dependencies:
+    js-tokens "^3.0.0 || ^4.0.0"
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  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.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+  integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
+micromatch@^4.0.4:
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
+  integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
+  dependencies:
+    braces "^3.0.2"
+    picomatch "^2.3.1"
+
+minimatch@^3.0.4, minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@^1.2.0, minimist@^1.2.6:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+  integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.1.1:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+nanoid@^3.1.30:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
+  integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+
+natural-compare@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+  integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
+next@12.1.6:
+  version "12.1.6"
+  resolved "https://registry.yarnpkg.com/next/-/next-12.1.6.tgz#eb205e64af1998651f96f9df44556d47d8bbc533"
+  integrity sha512-cebwKxL3/DhNKfg9tPZDQmbRKjueqykHHbgaoG4VBRH3AHQJ2HO0dbKFiS1hPhe1/qgc2d/hFeadsbPicmLD+A==
   dependencies:
     "@next/env" "12.1.6"
-    "caniuse-lite" "^1.0.30001332"
-    "postcss" "8.4.5"
-    "styled-jsx" "5.0.2"
+    caniuse-lite "^1.0.30001332"
+    postcss "8.4.5"
+    styled-jsx "5.0.2"
   optionalDependencies:
     "@next/swc-android-arm-eabi" "12.1.6"
@@ -1441,714 +1193,471 @@
     "@next/swc-win32-x64-msvc" "12.1.6"
 
-"nodemailer@^6.6.5", "nodemailer@^6.7.7":
-  "integrity" "sha512-pOLC/s+2I1EXuSqO5Wa34i3kXZG3gugDssH+ZNCevHad65tc8vQlCQpOLaUjopvkRQKm2Cki2aME7fEOPRy3bA=="
-  "resolved" "https://registry.npmjs.org/nodemailer/-/nodemailer-6.7.7.tgz"
-  "version" "6.7.7"
-
-"oauth@^0.9.15":
-  "integrity" "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA=="
-  "resolved" "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz"
-  "version" "0.9.15"
-
-"object-assign@^4", "object-assign@^4.1.1":
-  "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
-  "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
-  "version" "4.1.1"
-
-"object-hash@^2.0.1":
-  "integrity" "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
-  "resolved" "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz"
-  "version" "2.2.0"
-
-"object-inspect@^1.12.0", "object-inspect@^1.9.0":
-  "integrity" "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
-  "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz"
-  "version" "1.12.0"
-
-"object-keys@^1.1.1":
-  "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
-  "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz"
-  "version" "1.1.1"
-
-"object.assign@^4.1.2":
-  "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ=="
-  "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz"
-  "version" "4.1.2"
-  dependencies:
-    "call-bind" "^1.0.0"
-    "define-properties" "^1.1.3"
-    "has-symbols" "^1.0.1"
-    "object-keys" "^1.1.1"
-
-"object.entries@^1.1.5":
-  "integrity" "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g=="
-  "resolved" "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz"
-  "version" "1.1.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.1"
-
-"object.fromentries@^2.0.5":
-  "integrity" "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw=="
-  "resolved" "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz"
-  "version" "2.0.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.1"
-
-"object.hasown@^1.1.0":
-  "integrity" "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A=="
-  "resolved" "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz"
-  "version" "1.1.1"
-  dependencies:
-    "define-properties" "^1.1.4"
-    "es-abstract" "^1.19.5"
-
-"object.values@^1.1.5":
-  "integrity" "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg=="
-  "resolved" "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz"
-  "version" "1.1.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.1"
-
-"oidc-token-hash@^5.0.1":
-  "integrity" "sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ=="
-  "resolved" "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz"
-  "version" "5.0.1"
-
-"once@^1.3.0":
-  "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
-  "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
-  "version" "1.4.0"
-  dependencies:
-    "wrappy" "1"
-
-"openid-client@^5.1.0":
-  "integrity" "sha512-EPxJY6bT7YIYQEXSGxRC5flQ3GUhLy98ufdto6+BVBrFGPmwjUpy4xBcYuU/Wt9nPkO/3EgljBrr6Ezx4lp1RQ=="
-  "resolved" "https://registry.npmjs.org/openid-client/-/openid-client-5.1.8.tgz"
-  "version" "5.1.8"
-  dependencies:
-    "jose" "^4.1.4"
-    "lru-cache" "^6.0.0"
-    "object-hash" "^2.0.1"
-    "oidc-token-hash" "^5.0.1"
-
-"optionator@^0.9.1":
-  "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw=="
-  "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz"
-  "version" "0.9.1"
-  dependencies:
-    "deep-is" "^0.1.3"
-    "fast-levenshtein" "^2.0.6"
-    "levn" "^0.4.1"
-    "prelude-ls" "^1.2.1"
-    "type-check" "^0.4.0"
-    "word-wrap" "^1.2.3"
-
-"p-limit@^1.1.0":
-  "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q=="
-  "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz"
-  "version" "1.3.0"
-  dependencies:
-    "p-try" "^1.0.0"
-
-"p-locate@^2.0.0":
-  "integrity" "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM="
-  "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz"
-  "version" "2.0.0"
-  dependencies:
-    "p-limit" "^1.1.0"
-
-"p-try@^1.0.0":
-  "integrity" "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
-  "resolved" "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"
-  "version" "1.0.0"
-
-"packet-reader@1.0.0":
-  "integrity" "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
-  "resolved" "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz"
-  "version" "1.0.0"
-
-"parent-module@^1.0.0":
-  "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="
-  "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
-  "version" "1.0.1"
-  dependencies:
-    "callsites" "^3.0.0"
-
-"path-exists@^3.0.0":
-  "integrity" "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
-  "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz"
-  "version" "3.0.0"
-
-"path-is-absolute@^1.0.0":
-  "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
-  "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
-  "version" "1.0.1"
-
-"path-key@^3.1.0":
-  "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
-  "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
-  "version" "3.1.1"
-
-"path-parse@^1.0.6", "path-parse@^1.0.7":
-  "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
-  "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"
-  "version" "1.0.7"
-
-"path-type@^4.0.0":
-  "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
-  "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
-  "version" "4.0.0"
-
-"pg-connection-string@^2.5.0":
-  "integrity" "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
-  "resolved" "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz"
-  "version" "2.5.0"
-
-"pg-int8@1.0.1":
-  "integrity" "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
-  "resolved" "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz"
-  "version" "1.0.1"
-
-"pg-pool@^3.5.1":
-  "integrity" "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ=="
-  "resolved" "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz"
-  "version" "3.5.1"
-
-"pg-protocol@^1.5.0":
-  "integrity" "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
-  "resolved" "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz"
-  "version" "1.5.0"
-
-"pg-types@^2.1.0":
-  "integrity" "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="
-  "resolved" "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz"
-  "version" "2.2.0"
-  dependencies:
-    "pg-int8" "1.0.1"
-    "postgres-array" "~2.0.0"
-    "postgres-bytea" "~1.0.0"
-    "postgres-date" "~1.0.4"
-    "postgres-interval" "^1.1.0"
-
-"pg@^8.7.3", "pg@>=8.0":
-  "integrity" "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw=="
-  "resolved" "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz"
-  "version" "8.7.3"
-  dependencies:
-    "buffer-writer" "2.0.0"
-    "packet-reader" "1.0.0"
-    "pg-connection-string" "^2.5.0"
-    "pg-pool" "^3.5.1"
-    "pg-protocol" "^1.5.0"
-    "pg-types" "^2.1.0"
-    "pgpass" "1.x"
-
-"pgpass@1.x":
-  "integrity" "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="
-  "resolved" "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz"
-  "version" "1.0.5"
-  dependencies:
-    "split2" "^4.1.0"
-
-"picocolors@^1.0.0":
-  "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
-  "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
-  "version" "1.0.0"
-
-"picomatch@^2.3.1":
-  "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
-  "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
-  "version" "2.3.1"
-
-"postcss@8.4.5":
-  "integrity" "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg=="
-  "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz"
-  "version" "8.4.5"
-  dependencies:
-    "nanoid" "^3.1.30"
-    "picocolors" "^1.0.0"
-    "source-map-js" "^1.0.1"
-
-"postgres-array@~2.0.0":
-  "integrity" "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
-  "resolved" "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz"
-  "version" "2.0.0"
-
-"postgres-bytea@~1.0.0":
-  "integrity" "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
-  "resolved" "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz"
-  "version" "1.0.0"
-
-"postgres-date@~1.0.4":
-  "integrity" "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
-  "resolved" "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz"
-  "version" "1.0.7"
-
-"postgres-interval@^1.1.0":
-  "integrity" "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="
-  "resolved" "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz"
-  "version" "1.2.0"
-  dependencies:
-    "xtend" "^4.0.0"
-
-"preact-render-to-string@^5.1.19":
-  "integrity" "sha512-Wp3ner1aIVBpKg02C4AoLdBiw4kNaiFSYHr4wUF+fR7FWKAQzNri+iPfPp31sEhAtBfWoJrSxiEFzd5wp5zCgQ=="
-  "resolved" "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.1.tgz"
-  "version" "5.2.1"
-  dependencies:
-    "pretty-format" "^3.8.0"
-
-"preact@^10.6.3", "preact@>=10":
-  "integrity" "sha512-fszkg1iJJjq68I4lI8ZsmBiaoQiQHbxf1lNq+72EmC/mZOsFF5zn3k1yv9QGoFgIXzgsdSKtYymLJsrJPoamjQ=="
-  "resolved" "https://registry.npmjs.org/preact/-/preact-10.10.0.tgz"
-  "version" "10.10.0"
-
-"prelude-ls@^1.2.1":
-  "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
-  "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
-  "version" "1.2.1"
-
-"pretty-format@^3.8.0":
-  "integrity" "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew=="
-  "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz"
-  "version" "3.8.0"
-
-"prop-types@^15.8.1":
-  "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
-  "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
-  "version" "15.8.1"
-  dependencies:
-    "loose-envify" "^1.4.0"
-    "object-assign" "^4.1.1"
-    "react-is" "^16.13.1"
-
-"punycode@^2.1.0":
-  "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
-  "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
-  "version" "2.1.1"
-
-"queue-microtask@^1.2.2":
-  "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
-  "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
-  "version" "1.2.3"
-
-"react-dom@^16.8 || ^17.0 || ^18.0", "react-dom@^17.0.2 || ^18", "react-dom@^17.0.2 || ^18.0.0-0", "react-dom@18.1.0":
-  "integrity" "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w=="
-  "resolved" "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz"
-  "version" "18.1.0"
-  dependencies:
-    "loose-envify" "^1.1.0"
-    "scheduler" "^0.22.0"
-
-"react-icons@^4.3.1":
-  "integrity" "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ=="
-  "resolved" "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz"
-  "version" "4.3.1"
-
-"react-is@^16.13.1", "react-is@^16.7.0":
-  "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
-  "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
-  "version" "16.13.1"
-
-"react-is@^18.0.0":
-  "integrity" "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg=="
-  "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz"
-  "version" "18.1.0"
-
-"react-redux@^7.2.1 || ^8.0.0-beta", "react-redux@^8.0.1":
-  "integrity" "sha512-LMZMsPY4DYdZfLJgd7i79n5Kps5N9XVLCJJeWAaPYTV+Eah2zTuBjTxKtNEbjiyitbq80/eIkm55CYSLqAub3w=="
-  "resolved" "https://registry.npmjs.org/react-redux/-/react-redux-8.0.1.tgz"
-  "version" "8.0.1"
-  dependencies:
-    "@babel/runtime" "^7.12.1"
-    "@types/hoist-non-react-statics" "^3.3.1"
-    "@types/use-sync-external-store" "^0.0.3"
-    "hoist-non-react-statics" "^3.3.2"
-    "react-is" "^18.0.0"
-    "use-sync-external-store" "^1.0.0"
-
-"react@*", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", "react@^17.0.2", "react@^17.0.2 || ^18", "react@^17.0.2 || ^18.0.0-0", "react@^18.1.0", "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", "react@18.1.0":
-  "integrity" "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ=="
-  "resolved" "https://registry.npmjs.org/react/-/react-18.1.0.tgz"
-  "version" "18.1.0"
-  dependencies:
-    "loose-envify" "^1.1.0"
-
-"redux-thunk@^2.4.1":
-  "integrity" "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q=="
-  "resolved" "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz"
-  "version" "2.4.1"
-
-"redux@^4", "redux@^4.1.2":
-  "integrity" "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA=="
-  "resolved" "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz"
-  "version" "4.2.0"
-  dependencies:
-    "@babel/runtime" "^7.9.2"
-
-"regenerator-runtime@^0.13.4":
-  "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
-  "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
-  "version" "0.13.9"
-
-"regexp.prototype.flags@^1.4.1":
-  "integrity" "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA=="
-  "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz"
-  "version" "1.4.3"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "functions-have-names" "^1.2.2"
-
-"regexpp@^3.2.0":
-  "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
-  "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz"
-  "version" "3.2.0"
-
-"reselect@^4.1.5":
-  "integrity" "sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ=="
-  "resolved" "https://registry.npmjs.org/reselect/-/reselect-4.1.5.tgz"
-  "version" "4.1.5"
-
-"resolve-from@^4.0.0":
-  "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
-  "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
-  "version" "4.0.0"
-
-"resolve@^1.20.0", "resolve@^1.22.0":
-  "integrity" "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw=="
-  "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz"
-  "version" "1.22.0"
-  dependencies:
-    "is-core-module" "^2.8.1"
-    "path-parse" "^1.0.7"
-    "supports-preserve-symlinks-flag" "^1.0.0"
-
-"resolve@^2.0.0-next.3":
-  "integrity" "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q=="
-  "resolved" "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz"
-  "version" "2.0.0-next.3"
-  dependencies:
-    "is-core-module" "^2.2.0"
-    "path-parse" "^1.0.6"
-
-"reusify@^1.0.4":
-  "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
-  "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
-  "version" "1.0.4"
-
-"rimraf@^3.0.2":
-  "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="
-  "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
-  "version" "3.0.2"
-  dependencies:
-    "glob" "^7.1.3"
-
-"run-parallel@^1.1.9":
-  "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
-  "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
-  "version" "1.2.0"
-  dependencies:
-    "queue-microtask" "^1.2.2"
-
-"scheduler@^0.22.0":
-  "integrity" "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ=="
-  "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz"
-  "version" "0.22.0"
-  dependencies:
-    "loose-envify" "^1.1.0"
-
-"semver@^6.3.0":
-  "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-  "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
-  "version" "6.3.0"
-
-"semver@^7.3.5":
-  "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g=="
-  "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz"
-  "version" "7.3.7"
-  dependencies:
-    "lru-cache" "^6.0.0"
-
-"shebang-command@^2.0.0":
-  "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="
-  "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
-  "version" "2.0.0"
-  dependencies:
-    "shebang-regex" "^3.0.0"
-
-"shebang-regex@^3.0.0":
-  "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
-  "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
-  "version" "3.0.0"
-
-"side-channel@^1.0.4":
-  "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw=="
-  "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz"
-  "version" "1.0.4"
-  dependencies:
-    "call-bind" "^1.0.0"
-    "get-intrinsic" "^1.0.2"
-    "object-inspect" "^1.9.0"
-
-"slash@^3.0.0":
-  "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
-  "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz"
-  "version" "3.0.0"
-
-"socket.io-adapter@~2.4.0":
-  "integrity" "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg=="
-  "resolved" "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz"
-  "version" "2.4.0"
-
-"socket.io-client@^4.5.1":
-  "integrity" "sha512-e6nLVgiRYatS+AHXnOnGi4ocOpubvOUCGhyWw8v+/FxW8saHkinG6Dfhi9TU0Kt/8mwJIAASxvw6eujQmjdZVA=="
-  "resolved" "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.5.1.tgz"
-  "version" "4.5.1"
-  dependencies:
-    "@socket.io/component-emitter" "~3.1.0"
-    "debug" "~4.3.2"
-    "engine.io-client" "~6.2.1"
-    "socket.io-parser" "~4.2.0"
-
-"socket.io-parser@~4.0.4":
-  "integrity" "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig=="
-  "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz"
-  "version" "4.0.5"
-  dependencies:
-    "@types/component-emitter" "^1.2.10"
-    "component-emitter" "~1.3.0"
-    "debug" "~4.3.1"
-
-"socket.io-parser@~4.2.0":
-  "integrity" "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g=="
-  "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz"
-  "version" "4.2.1"
-  dependencies:
-    "@socket.io/component-emitter" "~3.1.0"
-    "debug" "~4.3.1"
-
-"socket.io@^4.5.1":
-  "integrity" "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ=="
-  "resolved" "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz"
-  "version" "4.5.1"
-  dependencies:
-    "accepts" "~1.3.4"
-    "base64id" "~2.0.0"
-    "debug" "~4.3.2"
-    "engine.io" "~6.2.0"
-    "socket.io-adapter" "~2.4.0"
-    "socket.io-parser" "~4.0.4"
-
-"source-map-js@^1.0.1":
-  "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
-  "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
-  "version" "1.0.2"
-
-"split2@^4.1.0":
-  "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ=="
-  "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz"
-  "version" "4.1.0"
-
-"string.prototype.matchall@^4.0.6":
-  "integrity" "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg=="
-  "resolved" "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz"
-  "version" "4.0.7"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.3"
-    "es-abstract" "^1.19.1"
-    "get-intrinsic" "^1.1.1"
-    "has-symbols" "^1.0.3"
-    "internal-slot" "^1.0.3"
-    "regexp.prototype.flags" "^1.4.1"
-    "side-channel" "^1.0.4"
-
-"string.prototype.trimend@^1.0.5":
-  "integrity" "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog=="
-  "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz"
-  "version" "1.0.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.4"
-    "es-abstract" "^1.19.5"
-
-"string.prototype.trimstart@^1.0.5":
-  "integrity" "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg=="
-  "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz"
-  "version" "1.0.5"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "define-properties" "^1.1.4"
-    "es-abstract" "^1.19.5"
-
-"strip-ansi@^6.0.1":
-  "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="
-  "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
-  "version" "6.0.1"
-  dependencies:
-    "ansi-regex" "^5.0.1"
-
-"strip-bom@^3.0.0":
-  "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
-  "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
-  "version" "3.0.0"
-
-"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1":
-  "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
-  "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
-  "version" "3.1.1"
-
-"styled-jsx@5.0.2":
-  "integrity" "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ=="
-  "resolved" "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz"
-  "version" "5.0.2"
-
-"supports-color@^7.1.0":
-  "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="
-  "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
-  "version" "7.2.0"
-  dependencies:
-    "has-flag" "^4.0.0"
-
-"supports-preserve-symlinks-flag@^1.0.0":
-  "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
-  "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"
-  "version" "1.0.0"
-
-"text-table@^0.2.0":
-  "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
-  "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
-  "version" "0.2.0"
-
-"to-regex-range@^5.0.1":
-  "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
-  "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
-  "version" "5.0.1"
-  dependencies:
-    "is-number" "^7.0.0"
-
-"tsconfig-paths@^3.14.1":
-  "integrity" "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ=="
-  "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz"
-  "version" "3.14.1"
+object-assign@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+  integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-inspect@^1.12.0, object-inspect@^1.9.0:
+  version "1.12.0"
+  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
+  integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==
+
+object-keys@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
+  integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
+
+object.assign@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940"
+  integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==
+  dependencies:
+    call-bind "^1.0.0"
+    define-properties "^1.1.3"
+    has-symbols "^1.0.1"
+    object-keys "^1.1.1"
+
+object.entries@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
+  integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+object.fromentries@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
+  integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+object.hasown@^1.1.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.1.tgz#ad1eecc60d03f49460600430d97f23882cf592a3"
+  integrity sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==
+  dependencies:
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+object.values@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
+  integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+optionator@^0.9.1:
+  version "0.9.1"
+  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+  integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+  dependencies:
+    deep-is "^0.1.3"
+    fast-levenshtein "^2.0.6"
+    levn "^0.4.1"
+    prelude-ls "^1.2.1"
+    type-check "^0.4.0"
+    word-wrap "^1.2.3"
+
+p-limit@^1.1.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+  integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+  dependencies:
+    p-try "^1.0.0"
+
+p-locate@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+  integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
+  dependencies:
+    p-limit "^1.1.0"
+
+p-try@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+  integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
+
+parent-module@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+  integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+  dependencies:
+    callsites "^3.0.0"
+
+path-exists@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+  integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-parse@^1.0.6, path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+picomatch@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+  integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+postcss@8.4.5:
+  version "8.4.5"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
+  integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
+  dependencies:
+    nanoid "^3.1.30"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.1"
+
+prelude-ls@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+  integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
+prop-types@^15.8.1:
+  version "15.8.1"
+  resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+  integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
+  dependencies:
+    loose-envify "^1.4.0"
+    object-assign "^4.1.1"
+    react-is "^16.13.1"
+
+punycode@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+queue-microtask@^1.2.2:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+  integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+react-dom@18.1.0:
+  version "18.1.0"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.1.0.tgz#7f6dd84b706408adde05e1df575b3a024d7e8a2f"
+  integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==
+  dependencies:
+    loose-envify "^1.1.0"
+    scheduler "^0.22.0"
+
+react-is@^16.13.1:
+  version "16.13.1"
+  resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+  integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
+react@18.1.0:
+  version "18.1.0"
+  resolved "https://registry.yarnpkg.com/react/-/react-18.1.0.tgz#6f8620382decb17fdc5cc223a115e2adbf104890"
+  integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
+  dependencies:
+    loose-envify "^1.1.0"
+
+regenerator-runtime@^0.13.4:
+  version "0.13.9"
+  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
+  integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
+
+regexp.prototype.flags@^1.4.1:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
+  integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    functions-have-names "^1.2.2"
+
+regexpp@^3.2.0:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+  integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
+resolve-from@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+  integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
+resolve@^1.20.0, resolve@^1.22.0:
+  version "1.22.0"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
+  integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
+  dependencies:
+    is-core-module "^2.8.1"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+resolve@^2.0.0-next.3:
+  version "2.0.0-next.3"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
+  integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
+  dependencies:
+    is-core-module "^2.2.0"
+    path-parse "^1.0.6"
+
+reusify@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
+  integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+run-parallel@^1.1.9:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+  integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+  dependencies:
+    queue-microtask "^1.2.2"
+
+scheduler@^0.22.0:
+  version "0.22.0"
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.22.0.tgz#83a5d63594edf074add9a7198b1bae76c3db01b8"
+  integrity sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==
+  dependencies:
+    loose-envify "^1.1.0"
+
+semver@^6.3.0:
+  version "6.3.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+  integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
+semver@^7.3.5:
+  version "7.3.7"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+  integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
+  dependencies:
+    lru-cache "^6.0.0"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.0.0"
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+side-channel@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
+  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+  dependencies:
+    call-bind "^1.0.0"
+    get-intrinsic "^1.0.2"
+    object-inspect "^1.9.0"
+
+slash@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
+source-map-js@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+string.prototype.matchall@^4.0.6:
+  version "4.0.7"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d"
+  integrity sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.3"
+    es-abstract "^1.19.1"
+    get-intrinsic "^1.1.1"
+    has-symbols "^1.0.3"
+    internal-slot "^1.0.3"
+    regexp.prototype.flags "^1.4.1"
+    side-channel "^1.0.4"
+
+string.prototype.trimend@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
+  integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+string.prototype.trimstart@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
+  integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
+  dependencies:
+    call-bind "^1.0.2"
+    define-properties "^1.1.4"
+    es-abstract "^1.19.5"
+
+strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-bom@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+  integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+
+strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+  integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+styled-jsx@5.0.2:
+  version "5.0.2"
+  resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.0.2.tgz#ff230fd593b737e9e68b630a694d460425478729"
+  integrity sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+text-table@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+  integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+  dependencies:
+    is-number "^7.0.0"
+
+tsconfig-paths@^3.14.1:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
+  integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
   dependencies:
     "@types/json5" "^0.0.29"
-    "json5" "^1.0.1"
-    "minimist" "^1.2.6"
-    "strip-bom" "^3.0.0"
-
-"tslib@^1.8.1":
-  "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
-  "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
-  "version" "1.14.1"
-
-"tsutils@^3.21.0":
-  "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA=="
-  "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
-  "version" "3.21.0"
-  dependencies:
-    "tslib" "^1.8.1"
-
-"type-check@^0.4.0", "type-check@~0.4.0":
-  "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="
-  "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
-  "version" "0.4.0"
-  dependencies:
-    "prelude-ls" "^1.2.1"
-
-"type-fest@^0.20.2":
-  "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
-  "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
-  "version" "0.20.2"
-
-"unbox-primitive@^1.0.2":
-  "integrity" "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw=="
-  "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz"
-  "version" "1.0.2"
-  dependencies:
-    "call-bind" "^1.0.2"
-    "has-bigints" "^1.0.2"
-    "has-symbols" "^1.0.3"
-    "which-boxed-primitive" "^1.0.2"
-
-"uri-js@^4.2.2":
-  "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="
-  "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
-  "version" "4.4.1"
-  dependencies:
-    "punycode" "^2.1.0"
-
-"use-sync-external-store@^1.0.0":
-  "integrity" "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ=="
-  "resolved" "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz"
-  "version" "1.1.0"
-
-"uuid@^8.3.2":
-  "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
-  "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
-  "version" "8.3.2"
-
-"v8-compile-cache@^2.0.3":
-  "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
-  "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz"
-  "version" "2.3.0"
-
-"vary@^1":
-  "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="
-  "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
-  "version" "1.1.2"
-
-"which-boxed-primitive@^1.0.2":
-  "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg=="
-  "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz"
-  "version" "1.0.2"
-  dependencies:
-    "is-bigint" "^1.0.1"
-    "is-boolean-object" "^1.1.0"
-    "is-number-object" "^1.0.4"
-    "is-string" "^1.0.5"
-    "is-symbol" "^1.0.3"
-
-"which@^2.0.1":
-  "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="
-  "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
-  "version" "2.0.2"
-  dependencies:
-    "isexe" "^2.0.0"
-
-"word-wrap@^1.2.3":
-  "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
-  "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz"
-  "version" "1.2.3"
-
-"wrappy@1":
-  "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
-  "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
-  "version" "1.0.2"
-
-"ws@~8.2.3":
-  "integrity" "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA=="
-  "resolved" "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz"
-  "version" "8.2.3"
-
-"xmlhttprequest-ssl@~2.0.0":
-  "integrity" "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
-  "resolved" "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz"
-  "version" "2.0.0"
-
-"xtend@^4.0.0":
-  "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
-  "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
-  "version" "4.0.2"
-
-"yallist@^4.0.0":
-  "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
-  "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
-  "version" "4.0.0"
+    json5 "^1.0.1"
+    minimist "^1.2.6"
+    strip-bom "^3.0.0"
+
+tslib@^1.8.1:
+  version "1.14.1"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+  integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tsutils@^3.21.0:
+  version "3.21.0"
+  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+  integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+  dependencies:
+    tslib "^1.8.1"
+
+type-check@^0.4.0, type-check@~0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+  integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+  dependencies:
+    prelude-ls "^1.2.1"
+
+type-fest@^0.20.2:
+  version "0.20.2"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+  integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
+unbox-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
+  integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
+  dependencies:
+    call-bind "^1.0.2"
+    has-bigints "^1.0.2"
+    has-symbols "^1.0.3"
+    which-boxed-primitive "^1.0.2"
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+v8-compile-cache@^2.0.3:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
+  integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
+
+which-boxed-primitive@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
+  integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
+  dependencies:
+    is-bigint "^1.0.1"
+    is-boolean-object "^1.1.0"
+    is-number-object "^1.0.4"
+    is-string "^1.0.5"
+    is-symbol "^1.0.3"
+
+which@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+word-wrap@^1.2.3:
+  version "1.2.3"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
+  integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
