From 10c4aa8831cbb5884b13bef42071e290a9dfc648 Mon Sep 17 00:00:00 2001 From: Ninjaws Date: Wed, 6 Nov 2024 22:13:00 +0100 Subject: [PATCH] Added Project --- LICENSE | 21 + README.md | 49 + Reflection.md | 63 + backend/.devcontainer/devcontainer.json | 32 + backend/.gitattributes | 2 + backend/.gitignore | 33 + backend/.mvn/wrapper/maven-wrapper.properties | 19 + backend/Dockerfile | 34 + backend/mvnw | 259 + backend/mvnw.cmd | 149 + backend/pom.xml | 91 + .../com/ninjaws/quiz/QuizApplication.java | 15 + .../quiz/components/StartupRunner.java | 40 + .../com/ninjaws/quiz/config/AppConfig.java | 14 + .../com/ninjaws/quiz/config/WebConfig.java | 20 + .../quiz/controllers/QuizController.java | 82 + .../quiz/entities/BaseQuestionEntity.java | 34 + .../com/ninjaws/quiz/entities/Category.java | 25 + .../entities/QuestionCollectingEntity.java | 10 + .../ninjaws/quiz/entities/QuestionEntity.java | 10 + .../exception/GlobalExceptionHandler.java | 20 + .../java/com/ninjaws/quiz/models/Answers.java | 19 + .../com/ninjaws/quiz/models/ApiResponse.java | 21 + .../ninjaws/quiz/models/CategoryResponse.java | 14 + .../com/ninjaws/quiz/models/QuestionDTO.java | 55 + .../com/ninjaws/quiz/models/QuizSettings.java | 62 + .../java/com/ninjaws/quiz/models/Request.java | 14 + .../java/com/ninjaws/quiz/models/Session.java | 19 + .../ninjaws/quiz/models/SessionTokenDTO.java | 15 + .../quiz/repositories/CategoryRepository.java | 11 + .../QuestionCollectingRepository.java | 14 + .../quiz/repositories/QuestionRepository.java | 39 + .../com/ninjaws/quiz/services/ApiService.java | 110 + .../ninjaws/quiz/services/CacheService.java | 38 + .../ninjaws/quiz/services/CleanerService.java | 123 + .../ninjaws/quiz/services/DataService.java | 70 + .../ninjaws/quiz/services/QueueService.java | 31 + .../ninjaws/quiz/services/QuizService.java | 123 + .../services/ResponseHandlingService.java | 110 + .../quiz/services/SchedulerService.java | 49 + .../quiz/services/StateManagementService.java | 29 + .../src/main/resources/application.properties | 35 + backend/src/main/resources/static/index.html | 1 + .../ninjaws/quiz/QuizApplicationTests.java | 12 + .../quiz/scala/QuestionStatusSimulation.scala | 22 + .../quiz/services/CacheServiceTest.java | 59 + .../quiz/services/QueueServiceTest.java | 63 + docker-compose.yml | 28 + frontend/.devcontainer/devcontainer.json | 35 + frontend/.dockerignore | 9 + frontend/.editorconfig | 17 + frontend/.gitignore | 42 + frontend/Dockerfile | 32 + frontend/angular.json | 111 + frontend/nginx.conf | 61 + frontend/package-lock.json | 14549 ++++++++++++++++ frontend/package.json | 41 + frontend/public/favicon.ico | Bin 0 -> 15086 bytes frontend/public/question.ico | Bin 0 -> 10462 bytes frontend/src/app/Quiz/models/answers.ts | 4 + frontend/src/app/Quiz/models/category.ts | 4 + frontend/src/app/Quiz/models/question.ts | 11 + frontend/src/app/Quiz/models/quiz-params.ts | 8 + frontend/src/app/Quiz/models/score.ts | 4 + frontend/src/app/Quiz/models/session.ts | 7 + frontend/src/app/Quiz/quiz-routing.module.ts | 18 + frontend/src/app/Quiz/quiz.module.ts | 15 + .../src/app/Quiz/quiz/quiz.component.html | 19 + .../src/app/Quiz/quiz/quiz.component.scss | 3 + frontend/src/app/Quiz/quiz/quiz.component.ts | 61 + .../src/app/Quiz/score/score.component.html | 11 + .../src/app/Quiz/score/score.component.scss | 0 .../src/app/Quiz/score/score.component.ts | 29 + .../src/app/Quiz/services/cleaner.service.ts | 33 + .../src/app/Quiz/services/quiz.service.ts | 100 + .../Quiz/services/response-handler.service.ts | 36 + .../src/app/Quiz/services/storage.service.ts | 17 + .../src/app/Quiz/setup/setup.component.html | 35 + .../src/app/Quiz/setup/setup.component.scss | 0 .../src/app/Quiz/setup/setup.component.ts | 66 + .../app/Spinner/services/spinner.service.ts | 25 + frontend/src/app/Spinner/spinner.module.ts | 11 + .../Spinner/spinner/spinner.component.html | 5 + .../Spinner/spinner/spinner.component.scss | 98 + .../app/Spinner/spinner/spinner.component.ts | 22 + frontend/src/app/app.component.html | 2 + frontend/src/app/app.component.scss | 0 frontend/src/app/app.component.spec.ts | 29 + frontend/src/app/app.component.ts | 14 + frontend/src/app/app.config.ts | 12 + frontend/src/app/app.routes.ts | 7 + frontend/src/environments/environment.prod.ts | 7 + frontend/src/environments/environment.ts | 4 + frontend/src/index.html | 13 + frontend/src/main.ts | 6 + frontend/src/styles.scss | 27 + frontend/tailwind.config.js | 11 + frontend/tsconfig.app.json | 15 + frontend/tsconfig.json | 33 + frontend/tsconfig.spec.json | 15 + scripts/LoadTestMultiple.sh | 16 + scripts/LoadTestOne-Silent.sh | 38 + scripts/LoadTestOne-WithParams.sh | 43 + scripts/LoadTestOne.sh | 43 + .../1. Queue - No params - 6 sessions.png | Bin 0 -> 63314 bytes ... DB and Queue - No Params - 6 sessions.png | Bin 0 -> 69550 bytes ...- All Params - 1000 and 10000 sessions.png | Bin 0 -> 25996 bytes 107 files changed, 18082 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 Reflection.md create mode 100644 backend/.devcontainer/devcontainer.json create mode 100644 backend/.gitattributes create mode 100644 backend/.gitignore create mode 100644 backend/.mvn/wrapper/maven-wrapper.properties create mode 100644 backend/Dockerfile create mode 100755 backend/mvnw create mode 100644 backend/mvnw.cmd create mode 100644 backend/pom.xml create mode 100644 backend/src/main/java/com/ninjaws/quiz/QuizApplication.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/components/StartupRunner.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/config/AppConfig.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/config/WebConfig.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/controllers/QuizController.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/entities/BaseQuestionEntity.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/entities/Category.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/entities/QuestionCollectingEntity.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/entities/QuestionEntity.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/exception/GlobalExceptionHandler.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/Answers.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/ApiResponse.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/CategoryResponse.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/QuestionDTO.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/QuizSettings.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/Request.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/Session.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/models/SessionTokenDTO.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/repositories/CategoryRepository.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/repositories/QuestionCollectingRepository.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/repositories/QuestionRepository.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/ApiService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/CacheService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/CleanerService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/DataService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/QueueService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/QuizService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/ResponseHandlingService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/SchedulerService.java create mode 100644 backend/src/main/java/com/ninjaws/quiz/services/StateManagementService.java create mode 100644 backend/src/main/resources/application.properties create mode 100644 backend/src/main/resources/static/index.html create mode 100644 backend/src/test/java/com/ninjaws/quiz/QuizApplicationTests.java create mode 100644 backend/src/test/java/com/ninjaws/quiz/scala/QuestionStatusSimulation.scala create mode 100644 backend/src/test/java/com/ninjaws/quiz/services/CacheServiceTest.java create mode 100644 backend/src/test/java/com/ninjaws/quiz/services/QueueServiceTest.java create mode 100644 docker-compose.yml create mode 100644 frontend/.devcontainer/devcontainer.json create mode 100644 frontend/.dockerignore create mode 100644 frontend/.editorconfig create mode 100644 frontend/.gitignore create mode 100644 frontend/Dockerfile create mode 100644 frontend/angular.json create mode 100644 frontend/nginx.conf create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/question.ico create mode 100644 frontend/src/app/Quiz/models/answers.ts create mode 100644 frontend/src/app/Quiz/models/category.ts create mode 100644 frontend/src/app/Quiz/models/question.ts create mode 100644 frontend/src/app/Quiz/models/quiz-params.ts create mode 100644 frontend/src/app/Quiz/models/score.ts create mode 100644 frontend/src/app/Quiz/models/session.ts create mode 100644 frontend/src/app/Quiz/quiz-routing.module.ts create mode 100644 frontend/src/app/Quiz/quiz.module.ts create mode 100644 frontend/src/app/Quiz/quiz/quiz.component.html create mode 100644 frontend/src/app/Quiz/quiz/quiz.component.scss create mode 100644 frontend/src/app/Quiz/quiz/quiz.component.ts create mode 100644 frontend/src/app/Quiz/score/score.component.html create mode 100644 frontend/src/app/Quiz/score/score.component.scss create mode 100644 frontend/src/app/Quiz/score/score.component.ts create mode 100644 frontend/src/app/Quiz/services/cleaner.service.ts create mode 100644 frontend/src/app/Quiz/services/quiz.service.ts create mode 100644 frontend/src/app/Quiz/services/response-handler.service.ts create mode 100644 frontend/src/app/Quiz/services/storage.service.ts create mode 100644 frontend/src/app/Quiz/setup/setup.component.html create mode 100644 frontend/src/app/Quiz/setup/setup.component.scss create mode 100644 frontend/src/app/Quiz/setup/setup.component.ts create mode 100644 frontend/src/app/Spinner/services/spinner.service.ts create mode 100644 frontend/src/app/Spinner/spinner.module.ts create mode 100644 frontend/src/app/Spinner/spinner/spinner.component.html create mode 100644 frontend/src/app/Spinner/spinner/spinner.component.scss create mode 100644 frontend/src/app/Spinner/spinner/spinner.component.ts create mode 100644 frontend/src/app/app.component.html create mode 100644 frontend/src/app/app.component.scss create mode 100644 frontend/src/app/app.component.spec.ts create mode 100644 frontend/src/app/app.component.ts create mode 100644 frontend/src/app/app.config.ts create mode 100644 frontend/src/app/app.routes.ts create mode 100644 frontend/src/environments/environment.prod.ts create mode 100644 frontend/src/environments/environment.ts create mode 100644 frontend/src/index.html create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/styles.scss create mode 100644 frontend/tailwind.config.js create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.spec.json create mode 100755 scripts/LoadTestMultiple.sh create mode 100755 scripts/LoadTestOne-Silent.sh create mode 100755 scripts/LoadTestOne-WithParams.sh create mode 100755 scripts/LoadTestOne.sh create mode 100644 scripts/benchmarks/1. Queue - No params - 6 sessions.png create mode 100644 scripts/benchmarks/2. DB and Queue - No Params - 6 sessions.png create mode 100644 scripts/benchmarks/3. DB and Queue - All Params - 1000 and 10000 sessions.png diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..861560e --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Ninjaws + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..c7d6be5 --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# Quiz +App that allows the user to set up a quiz, and answer the questions + +## Installation +### Install Docker +- On Windows and Mac +``` +Install Docker Desktop +Windows: https://docs.docker.com/desktop/install/windows-install/ +Mac: https://docs.docker.com/desktop/install/mac-install/ +``` +- On Linux +```bash +# For Debian-based systems +sudo apt install -y docker.io +sudo apt install docker-compose + +#For Arch-based systems +sudo pacman -S docker.io +sudo pacman -S docker-compose + +# Making Docker run now and on startup +sudo systemctl start docker +sudo systemctl enable docker + +# Using the CLI without sudo +sudo usermod -aG docker $USER +sudo reboot +``` + +## How to run +- Navigate to the root of the project +- Open a terminal +- Start the containers: +```bash +docker compose up +``` +- Visit localhost:4200 to play the quiz! + + +## Benchmarking +- Go to the /scripts folder and run the LoadTestMultiple.sh script +- Inside you can change how many sessions should be created (set to 6 by default) +- In the /scripts/benchmarks folder you can find some benchmarks I've done + +## Notes +- If the data is not present, it will try to query it from the external API, which takes significantly longer (only 1 request per 5 seconds) +- When running it locally, give the backend a few minutes to gather data in bulk (should be completely done in ~7 minutes) +- It refreshes this data every night in the background, so it stays up to date \ No newline at end of file diff --git a/Reflection.md b/Reflection.md new file mode 100644 index 0000000..c6374f1 --- /dev/null +++ b/Reflection.md @@ -0,0 +1,63 @@ +# Reflection + +## Issues during testing (October 30th) +### Scheduler +I don't know if it was the scheduler specifically, but whenever I try to test it, both the cache and the queue seem to become empty after the first function is completed. +I don't know how to solve this yet + + +## Caching solution (October 30th) +### Lack of data +Not being able to gather blocks of 50 is a big issue. The idea of reusing blocks becomes less viable if I can't just get a big chunk every time for others to use. +I can't force a big chunk, because it might just return a status 1, and then the user gets nothing. + +Perhaps I can separate the questions myself and make a collection, that i can build the requests from. However, for every quest tracking if someone has already seen is a huge pain. + + +## Possible solution (October 31st) +Cache all data, 50 at a time +Store it in a database +When its done, let the db make blocks for quick cache access + +Then randomize when someone asks for an item from the cache +Or return a failure if there are not enough items (a la the api itself) + +Every night, create a new db in the background and start filling it (should take ~34 minutes for all 20k items the external API has) +When it's full, replace the old database with the new one, and delete the old one. +Then start replacing the cache items one at a time. + +Users shouldn't feel this at all, because the active sessions are stored in their own cache items + +# Progress so far (November 3rd) +There only seem to be ~4100 items, making the collecting phase only last around 7 minutes. + +Swapping dbs is replaced with swapping tables, seems to work just as fine, yet much simpler to set up + +TODO: Add a caching state, and start filling up each unique combination with the items from the db +This should lead to performance gains + +## Possible future alternative +In the current state (when the cache is done), the backend might hold data 3 times (Cache, active DB table, and background DB table during the night) + +### Purely Cached solution +- Every night +- Check for each category+difficulty combination how many questions there are (API has an endpoint for this) +- Track which one you are on, and how many you have +- Take blocks of 50, until the remaining items are less than 50, then get that exact amount +- When they are gathered, either + 1. Divide them between 3 cache items: cat:dif:any/multiple/boolean + - (Manually filter on the type, since the API sends questions with either option together), or + 2. In one like cat:dif:any and then filter it by hand when a user asks for it + - (This will replace the collection put there the night before) +- Then move to the next one +- Stop when the last combination has been collected + +#### When a user requests data: +- Get the items from the cache +- Less items than requested: Inform the user to try a different combination +- More items than requested: Randomize and select a subset + +### Tradeoffs +- Advantage: Less total data held on the server + +- Downside: Slower gathering, since there are 25+3+4=300 unique combinations (each of which will end with a request of less than 50 items), it will require a decent number requests more than the bulk collecting that the DB does. \ No newline at end of file diff --git a/backend/.devcontainer/devcontainer.json b/backend/.devcontainer/devcontainer.json new file mode 100644 index 0000000..22891ae --- /dev/null +++ b/backend/.devcontainer/devcontainer.json @@ -0,0 +1,32 @@ +{ + "name": "Quiz Backend", + + "build": { + "context": "..", + "dockerfile": "../Dockerfile", + "args": { + "WORKDIR": "/app" + // "UID": "${localEnv:USER_UID}", + // "GID": "${localEnv:USER_GID}" + }, + "target": "development" + }, + "runArgs": [ + "--name=quiz-backend-dev-cont", + "--net=host" // Allows it to be opened on the host network + ], + "workspaceFolder": "/app", + "mounts": [ + "source=.,target=/app,type=bind" + ], + "customizations": { + "vscode": { + "settings": {}, + "extensions": [ + "vscjava.vscode-java-pack", + "Oracle.oracle-java", + "scala-lang.scala" + ] + } + } +} \ No newline at end of file diff --git a/backend/.gitattributes b/backend/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/backend/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/backend/.mvn/wrapper/maven-wrapper.properties b/backend/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..d58dfb7 --- /dev/null +++ b/backend/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..14463aa --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,34 @@ +FROM openjdk:17-jdk-slim AS base +WORKDIR /app +RUN apt-get update && apt install -y \ + maven \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +#---Development +FROM base AS development +# Switching user so it doesn't use root +# If root adds files, it takes ownership, making them unremovable on the host except by using sudo +# node tranfers ownership to the host user +ENV UID=1000 +ENV GID=1000 +ENV USER=dev +RUN groupadd -g ${GID} ${USER} \ + && useradd -m -u ${UID} -g ${USER} ${USER} +USER ${USER} +EXPOSE 9090 +CMD ["tail","-f","/dev/null"] + +#---Building +FROM base AS build +COPY . . +RUN mvn clean package +# Add -DskipTests for slightly faster build, but no testing + +#---Production +# Pulled again to get rid of maven, to decrease the size +FROM openjdk:17-jdk-slim AS production +WORKDIR /app +COPY --from=build /app/target/*.jar app.jar +EXPOSE 9090 +ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file diff --git a/backend/mvnw b/backend/mvnw new file mode 100755 index 0000000..19529dd --- /dev/null +++ b/backend/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/backend/mvnw.cmd b/backend/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/backend/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/backend/pom.xml b/backend/pom.xml new file mode 100644 index 0000000..2de204e --- /dev/null +++ b/backend/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.3.5 + + + com.ninjaws + quiz + 0.0.1-SNAPSHOT + quiz + Quiz App + + + + + + + + + + + + + + + 17 + 1.18.34 + 3.1.8 + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + com.h2database + h2 + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + com.github.ben-manes.caffeine + caffeine + ${caffeine.version} + + + org.projectlombok + lombok + ${lombok.version} + provided + + + org.springframework.boot + spring-boot-starter-validation + + + org.apache.commons + commons-text + 1.10.0 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/backend/src/main/java/com/ninjaws/quiz/QuizApplication.java b/backend/src/main/java/com/ninjaws/quiz/QuizApplication.java new file mode 100644 index 0000000..809b4e1 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/QuizApplication.java @@ -0,0 +1,15 @@ +package com.ninjaws.quiz; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +@EnableScheduling +public class QuizApplication { + + public static void main(String[] args) { + SpringApplication.run(QuizApplication.class, args); + } + +} diff --git a/backend/src/main/java/com/ninjaws/quiz/components/StartupRunner.java b/backend/src/main/java/com/ninjaws/quiz/components/StartupRunner.java new file mode 100644 index 0000000..129f975 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/components/StartupRunner.java @@ -0,0 +1,40 @@ +package com.ninjaws.quiz.components; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.stereotype.Component; + +import com.ninjaws.quiz.services.ApiService; +import com.ninjaws.quiz.services.StateManagementService; + + +@Component +public class StartupRunner implements CommandLineRunner { + + @Autowired + private StateManagementService stateManagementService; + @Autowired + private ApiService apiService; + + @Override + public void run(String... args) { + + /** + * On startup: + * - Set ProcessingState to Startup + * - Store the categories + * - Get a sessiontoken + * + * * Inside the SchedulerService + * - Start filling the question table + * + * * Inside the Response Handling Service + * - No more questions? Stop + * - Set ProcessingState to Normal + */ + + stateManagementService.setCurrentProcessingState(StateManagementService.ProcessingState.STARTUP); + apiService.getCategories(); + apiService.getSessionToken(); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/config/AppConfig.java b/backend/src/main/java/com/ninjaws/quiz/config/AppConfig.java new file mode 100644 index 0000000..eef023d --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/config/AppConfig.java @@ -0,0 +1,14 @@ +package com.ninjaws.quiz.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class AppConfig { + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/config/WebConfig.java b/backend/src/main/java/com/ninjaws/quiz/config/WebConfig.java new file mode 100644 index 0000000..8164632 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/config/WebConfig.java @@ -0,0 +1,20 @@ +package com.ninjaws.quiz.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +@EnableWebMvc +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") // Allow all endpoints + .allowedOrigins("http://localhost:4200", "https://quiz.ianvink.nl") // Allow specific origin + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // Allow specific methods + .allowedHeaders("*") // Allow all headers + .allowCredentials(true); // Allow credentials + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/controllers/QuizController.java b/backend/src/main/java/com/ninjaws/quiz/controllers/QuizController.java new file mode 100644 index 0000000..7d7d114 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/controllers/QuizController.java @@ -0,0 +1,82 @@ +package com.ninjaws.quiz.controllers; + +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.ninjaws.quiz.entities.Category; +import com.ninjaws.quiz.models.Answers; +import com.ninjaws.quiz.models.QuizSettings; +import com.ninjaws.quiz.models.Session; +import com.ninjaws.quiz.services.DataService; +import com.ninjaws.quiz.services.QuizService; + +@RestController +@RequestMapping("/quiz") +public class QuizController { + + @Autowired + private QuizService quizService; + @Autowired + private DataService dataService; + + + /** + * Start a session + * @param amount The amount of questsions + * @param category The desired category (or all) + * @param difficulty The desired difficulty (or all) + * @param type The desired type (or both) + * @return The sessionId, or statusCode 5 when the queue is full + */ + @GetMapping("/questions") + public String startSession( + @RequestParam(required = true) Integer amount, + @RequestParam(required = false) Integer category, + @RequestParam(required = false) String difficulty, + @RequestParam(required = false) String type + ) { + QuizSettings quizSettings = new QuizSettings(amount, category, difficulty, type); + Optional result = quizService.createSession(quizSettings); + if (result.isPresent()) { + String jsonString = String.format("{\"statusCode\":0,\"sessionId\":\"%s\"}", result.get()); + return jsonString; + } + String jsonString = String.format("{\"statusCode\":5}"); + return jsonString; + } + + /** + * Checks if the questions have been retrieved + * @param sessionId The session that holds the questions + * @return The Session, or nothing if they are not ready yet + */ + @GetMapping("/status/{sessionId}") + public Optional checkStatus(@PathVariable String sessionId) { + return quizService.checkSession(sessionId); + } + + /** + * Receive the chosen answers, calculate the score, and return it + * @param answers The chosen answers + * @return The score + */ + @PostMapping("/score") + public String checkAnswers(@RequestBody Answers answers) { + String jsonString = String.format("{\"score\":\"%s\"}", quizService.getScore(answers)); + return jsonString; + } + + @GetMapping("/categories") + public List getCategories(){ + return dataService.getCategories(); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/entities/BaseQuestionEntity.java b/backend/src/main/java/com/ninjaws/quiz/entities/BaseQuestionEntity.java new file mode 100644 index 0000000..bd4f7a7 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/entities/BaseQuestionEntity.java @@ -0,0 +1,34 @@ +package com.ninjaws.quiz.entities; + +import java.util.List; +import java.util.UUID; + +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.MappedSuperclass; +import lombok.Getter; +import lombok.Setter; + +@MappedSuperclass +@Getter +@Setter +public class BaseQuestionEntity { + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @ManyToOne + @JoinColumn(name = "category", nullable = false) + private Category category; + + private String difficulty; + private String type; + private String question; + + private String correctAnswer; + // @ElementCollection // This stores it in a separate table, it's just a set of strings so not required right now + private List incorrectAnswers; +} diff --git a/backend/src/main/java/com/ninjaws/quiz/entities/Category.java b/backend/src/main/java/com/ninjaws/quiz/entities/Category.java new file mode 100644 index 0000000..3e20685 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/entities/Category.java @@ -0,0 +1,25 @@ +package com.ninjaws.quiz.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Table(name = "category") +@Getter +@Setter +public class Category { + @Id + private Integer id; + private String name; + + public Category() {} + + public Category(int id, String name) { + this.id = id; + this.name = name; + } + +} diff --git a/backend/src/main/java/com/ninjaws/quiz/entities/QuestionCollectingEntity.java b/backend/src/main/java/com/ninjaws/quiz/entities/QuestionCollectingEntity.java new file mode 100644 index 0000000..bc5370e --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/entities/QuestionCollectingEntity.java @@ -0,0 +1,10 @@ +package com.ninjaws.quiz.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "question_collecting") +public class QuestionCollectingEntity extends BaseQuestionEntity{ + +} diff --git a/backend/src/main/java/com/ninjaws/quiz/entities/QuestionEntity.java b/backend/src/main/java/com/ninjaws/quiz/entities/QuestionEntity.java new file mode 100644 index 0000000..24aece9 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/entities/QuestionEntity.java @@ -0,0 +1,10 @@ +package com.ninjaws.quiz.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.Table; + +@Entity +@Table(name = "question") +public class QuestionEntity extends BaseQuestionEntity { + +} diff --git a/backend/src/main/java/com/ninjaws/quiz/exception/GlobalExceptionHandler.java b/backend/src/main/java/com/ninjaws/quiz/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000..c684ebc --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/exception/GlobalExceptionHandler.java @@ -0,0 +1,20 @@ +package com.ninjaws.quiz.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +/** + * Determines behaviour when certain types of Exceptions are encountered + */ +@ControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(IllegalArgumentException.class) + public ResponseEntity handleIllegalArgumentException(IllegalArgumentException e) { + return ResponseEntity + .status(HttpStatus.BAD_REQUEST) + .body(e.getMessage()); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/ninjaws/quiz/models/Answers.java b/backend/src/main/java/com/ninjaws/quiz/models/Answers.java new file mode 100644 index 0000000..781cfbd --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/Answers.java @@ -0,0 +1,19 @@ +package com.ninjaws.quiz.models; + +import java.util.List; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Answers { + private String sessionId; + private List answers; + + public Answers() {} + + public Answers(String sessionId) { + this.sessionId = sessionId; + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/models/ApiResponse.java b/backend/src/main/java/com/ninjaws/quiz/models/ApiResponse.java new file mode 100644 index 0000000..9715b25 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/ApiResponse.java @@ -0,0 +1,21 @@ +package com.ninjaws.quiz.models; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Getter; +import lombok.Setter; + + +/** + * The response sent by the external API + */ +@Getter +@Setter +public class ApiResponse { + @JsonProperty("response_code") + private int responseCode; + @JsonProperty("results") + private List results; +} diff --git a/backend/src/main/java/com/ninjaws/quiz/models/CategoryResponse.java b/backend/src/main/java/com/ninjaws/quiz/models/CategoryResponse.java new file mode 100644 index 0000000..2644a4b --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/CategoryResponse.java @@ -0,0 +1,14 @@ +package com.ninjaws.quiz.models; + +import java.util.List; + +import com.ninjaws.quiz.entities.Category; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class CategoryResponse { + List trivia_categories; +} diff --git a/backend/src/main/java/com/ninjaws/quiz/models/QuestionDTO.java b/backend/src/main/java/com/ninjaws/quiz/models/QuestionDTO.java new file mode 100644 index 0000000..4127152 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/QuestionDTO.java @@ -0,0 +1,55 @@ +package com.ninjaws.quiz.models; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class QuestionDTO { + + private String category; + private String difficulty; + private String type; + private String question; + + //* Hidden from the user */ + private String correctAnswer; + private List incorrectAnswers; + + @JsonProperty("answers") + public List getAnswers() { + List possibleAnswers = new ArrayList<>(incorrectAnswers); + possibleAnswers.add(correctAnswer); + Collections.shuffle(possibleAnswers); + return possibleAnswers; + } + + @JsonProperty("correct_answer") + public void setCorrectAnswer(String correctAnswer) { + this.correctAnswer = correctAnswer; + } + + @JsonProperty("incorrect_answers") + public void setIncorrectAnswer(List incorrectAnswers) { + this.incorrectAnswers = incorrectAnswers; + } + + @JsonProperty("correct_answer") + @JsonIgnore + public String getCorrectAnswer() { + return correctAnswer; + } + + @JsonProperty("incorrect_answers") + @JsonIgnore + public List getIncorrectAnswers() { + return incorrectAnswers; + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/models/QuizSettings.java b/backend/src/main/java/com/ninjaws/quiz/models/QuizSettings.java new file mode 100644 index 0000000..4693f8a --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/QuizSettings.java @@ -0,0 +1,62 @@ +package com.ninjaws.quiz.models; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class QuizSettings { + + @Min(1) + @Max(50) + private int amount = 10; + private Integer category; + private String difficulty; + private String type; + + public QuizSettings(){} + + /** Inverse of toApiQuery */ + public QuizSettings(int amount, Integer category, String difficulty, String type) { + this.amount = amount; + this.category = category; + this.difficulty = difficulty; + this.type = type; + // this.category = category == null ? Category.ANY : Category.values()[category]; + // this.difficulty = difficulty == null ? Difficulty.ANY : Difficulty.valueOf(difficulty.toUpperCase()); + // this.type = type == null ? Type.ANY : type.equals("boolean") ? Type.BOOLEAN : Type.MULTIPLE; + } + + /** + * Ensures the value is between 1 and 50 + * @Valid doesn't seem to be enforcing it, so this ensures the value is legal + */ + public void setAmount(@Valid int amount) { + this.amount = Math.max(1, Math.min(amount, 50)); + } + + /** + * Converts the class to a format that can be provided as arguments for the api request + * @return The resulting request arguments as String + */ + public String toApiQuery() { + StringBuilder query = new StringBuilder("?amount=" + amount); + + if (category != null) { + query.append("&category=").append(category); + } + + if (difficulty != null ) { + query.append("&difficulty=").append(difficulty); + } + + if (type != null ) { + query.append("&type=").append(type); + } + + return query.toString(); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/models/Request.java b/backend/src/main/java/com/ninjaws/quiz/models/Request.java new file mode 100644 index 0000000..d04c3bf --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/Request.java @@ -0,0 +1,14 @@ +package com.ninjaws.quiz.models; + +import lombok.Getter; + +@Getter +public class Request { + private final String sessionId; + private final QuizSettings quizSettings; + + public Request(String sessionId, QuizSettings quizSettings) { + this.sessionId = sessionId; + this.quizSettings = quizSettings; + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/models/Session.java b/backend/src/main/java/com/ninjaws/quiz/models/Session.java new file mode 100644 index 0000000..2916d6c --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/Session.java @@ -0,0 +1,19 @@ +package com.ninjaws.quiz.models; + +import java.util.List; +import java.util.UUID; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class Session { + private final String id; + private int statusCode = 0; + private List questions; + + public Session() { + this.id = UUID.randomUUID().toString(); + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/ninjaws/quiz/models/SessionTokenDTO.java b/backend/src/main/java/com/ninjaws/quiz/models/SessionTokenDTO.java new file mode 100644 index 0000000..193a48e --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/models/SessionTokenDTO.java @@ -0,0 +1,15 @@ +package com.ninjaws.quiz.models; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SessionTokenDTO { + @JsonProperty("response_code") + private int responseCode; + @JsonProperty("token") + private String token; +} diff --git a/backend/src/main/java/com/ninjaws/quiz/repositories/CategoryRepository.java b/backend/src/main/java/com/ninjaws/quiz/repositories/CategoryRepository.java new file mode 100644 index 0000000..e9bf67d --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/repositories/CategoryRepository.java @@ -0,0 +1,11 @@ +package com.ninjaws.quiz.repositories; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.ninjaws.quiz.entities.Category; + +public interface CategoryRepository extends JpaRepository{ + Optional findByName(String name); +} diff --git a/backend/src/main/java/com/ninjaws/quiz/repositories/QuestionCollectingRepository.java b/backend/src/main/java/com/ninjaws/quiz/repositories/QuestionCollectingRepository.java new file mode 100644 index 0000000..ae6214c --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/repositories/QuestionCollectingRepository.java @@ -0,0 +1,14 @@ +package com.ninjaws.quiz.repositories; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.ninjaws.quiz.entities.QuestionCollectingEntity; + +/** + * This table is used for collecting questions from the external API + * When it finishes, the data from this repository will replace the data in the QuestionRepository, to ensure it stays fresh + * This should be scheduled once every day + */ +public interface QuestionCollectingRepository extends JpaRepository{ + +} diff --git a/backend/src/main/java/com/ninjaws/quiz/repositories/QuestionRepository.java b/backend/src/main/java/com/ninjaws/quiz/repositories/QuestionRepository.java new file mode 100644 index 0000000..afcc321 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/repositories/QuestionRepository.java @@ -0,0 +1,39 @@ +package com.ninjaws.quiz.repositories; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import com.ninjaws.quiz.entities.QuestionEntity; + +import jakarta.transaction.Transactional; + +public interface QuestionRepository extends JpaRepository{//, JpaSpecificationExecutor { + + // @Query(value = "SELECT * FROM question AS q " + + // "WHERE (?1 IS NULL OR q.category = ?1) " + + // "AND (?2 IS NULL OR q.difficulty = ?2) " + + // "AND (?3 IS NULL OR q.type = ?3) " + + // "ORDER BY RAND() LIMIT ?4", nativeQuery = true) + @Query(value = "SELECT * FROM question AS q " + + "WHERE (:categoryId IS NULL OR q.category = :categoryId) " + + "AND (:difficulty IS NULL OR q.difficulty = :difficulty) " + + "AND (:type IS NULL OR q.type = :type) " + + "ORDER BY RAND() LIMIT :limit;", nativeQuery = true) + List lookupQuestions( + @Param("categoryId") Integer categoryId, + @Param("difficulty") String difficulty, + @Param("type") String type, + @Param("limit") int limit); + + /** + * Moves all data from one table to another + */ + @Modifying + @Transactional + @Query(value="INSERT INTO question SELECT * FROM question_collecting;", nativeQuery=true) + void moveCollection(); +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/ApiService.java b/backend/src/main/java/com/ninjaws/quiz/services/ApiService.java new file mode 100644 index 0000000..e4ce492 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/ApiService.java @@ -0,0 +1,110 @@ +package com.ninjaws.quiz.services; + +import java.io.IOException; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +import com.ninjaws.quiz.models.ApiResponse; +import com.ninjaws.quiz.models.CategoryResponse; +import com.ninjaws.quiz.models.QuizSettings; +import com.ninjaws.quiz.models.Request; +import com.ninjaws.quiz.models.SessionTokenDTO; + +import jakarta.validation.Valid; + +@Service +public class ApiService { + + @Autowired + private CleanerService cleanerService; + @Autowired + private ResponseHandlingService responseHandler; + @Autowired + private RestTemplate restTemplate; + + private static final System.Logger logger = System.getLogger(ApiService.class.getName()); + + private final String apiUrl = "https://opentdb.com"; + private String sessionToken; + + public ApiService() { + } + + private String buildRequestString(QuizSettings quizSettings) { + return apiUrl + "/api.php" + quizSettings.toApiQuery(); + } + + public void handleRequest(@Valid Request request) { + String url = buildRequestString(request.getQuizSettings()); + + try { + ResponseEntity response = restTemplate.getForEntity(url, String.class); + String json = response.getBody(); + ApiResponse apiResponse = cleanerService.extractApiResponse(json); + responseHandler.handleResponse(request.getSessionId(), apiResponse); + + } catch (RestClientException | IOException | IllegalStateException e) { + logger.log(System.Logger.Level.ERROR, "Critical failure", e); + } + } + + /** + * Collect a chuck of 50 items + * Store them in the DataService + */ + public void collectBulk() { + String tokenStr = sessionToken == null ? "" : "&token="+sessionToken; + String url = apiUrl + "/api.php?amount=50" + tokenStr; + try { + ResponseEntity response = restTemplate.getForEntity(url, String.class); + String json = response.getBody(); + ApiResponse apiResponse = cleanerService.extractApiResponse(json); + responseHandler.handleResponse(apiResponse); + + /** + * A bit dirty, but otherwise it causes circular dependencies + * Makes sure the categories are refreshed after finishing to replace the questions, to make sure the ids match + * And resets the sessionToken, it will be remade during the next REFRESH + */ + if(apiResponse.getResponseCode() == 4) { + getCategories(); + sessionToken = null; + } + + } catch (RestClientException | IOException e) { + logger.log(System.Logger.Level.ERROR, "Critical failure", e); + } + + } + + public void getSessionToken() { + String url = apiUrl + "/api_token.php?command=request"; + try { + ResponseEntity response = restTemplate.getForEntity(url, String.class); + String json = response.getBody(); + SessionTokenDTO tokenDto = cleanerService.extractSessionToken(json); + sessionToken = tokenDto.getToken(); + + } catch (RestClientException | IOException e) { + logger.log(System.Logger.Level.ERROR, "Critical failure", e); + } + } + + public void getCategories() { + String url = apiUrl + "/api_category.php"; + try { + ResponseEntity response = restTemplate.getForEntity(url, String.class); + String json = response.getBody(); + CategoryResponse categoryResponse = cleanerService.extractCategoryResponse(json); + responseHandler.handleCategoryResponse(categoryResponse); + + } catch (RestClientException | IOException e) { + logger.log(System.Logger.Level.ERROR, "Critical failure", e); + } + + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/CacheService.java b/backend/src/main/java/com/ninjaws/quiz/services/CacheService.java new file mode 100644 index 0000000..fdb754b --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/CacheService.java @@ -0,0 +1,38 @@ +package com.ninjaws.quiz.services; + +import java.util.concurrent.TimeUnit; + +import org.springframework.stereotype.Service; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import com.ninjaws.quiz.models.Session; + +@Service +public class CacheService { + + /** + * Stores all active sessions + * Gets added to when a user requests data + * Gets removed from when a user requests their score (by sending their answers) + */ + private final Cache sessions; + + public CacheService() { + sessions = (Caffeine.newBuilder() + .expireAfterWrite(1,TimeUnit.HOURS) + .build()); + } + + public void addToCache(String key, Session session) { + sessions.put(key, session); + } + + public Session getFromCache(String sessionId) { + return sessions.getIfPresent(sessionId); + } + + public void removeFromCache(String sessionId) { + sessions.invalidate(sessionId); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/CleanerService.java b/backend/src/main/java/com/ninjaws/quiz/services/CleanerService.java new file mode 100644 index 0000000..7b26710 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/CleanerService.java @@ -0,0 +1,123 @@ +package com.ninjaws.quiz.services; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.lang3.StringEscapeUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ninjaws.quiz.entities.Category; +import com.ninjaws.quiz.entities.QuestionCollectingEntity; +import com.ninjaws.quiz.entities.QuestionEntity; +import com.ninjaws.quiz.models.ApiResponse; +import com.ninjaws.quiz.models.CategoryResponse; +import com.ninjaws.quiz.models.QuestionDTO; +import com.ninjaws.quiz.models.SessionTokenDTO; +import com.ninjaws.quiz.repositories.CategoryRepository; + +/** + * Deals with conversions from one form of data to another + * Json to Object + * Entity to DTO + * etc + */ +@Service +public class CleanerService { + + @Autowired + private ObjectMapper objectMapper; + @Autowired + private CategoryRepository categoryRepository; + + public CleanerService() { + } + + public ApiResponse extractApiResponse(String json) throws IOException { + return objectMapper.readValue(json, ApiResponse.class); + } + + public CategoryResponse extractCategoryResponse(String json) throws IOException { + return objectMapper.readValue(json, CategoryResponse.class); + } + + public List questionListEntitytoDTO(List entities) { + List dtos = new ArrayList<>(); + for (int i = 0; i < entities.size(); i++) { + QuestionEntity entity = entities.get(i); + dtos.add(questionEntityToDTO(entity)); + } + return dtos; + } + + public SessionTokenDTO extractSessionToken(String json) throws IOException { + return objectMapper.readValue(json, SessionTokenDTO.class); + } + + public QuestionDTO questionEntityToDTO(QuestionEntity entity) { + QuestionDTO dto = new QuestionDTO(); + dto.setQuestion(entity.getQuestion()); + dto.setCorrectAnswer(entity.getCorrectAnswer()); + dto.setIncorrectAnswer(entity.getIncorrectAnswers()); + dto.setCategory(entity.getCategory().getName()); + dto.setType(entity.getType()); + dto.setDifficulty(entity.getDifficulty()); + return dto; + } + + public List questionListDTOtoEntity(List dtos) { + List entities = new ArrayList<>(); + for (int i = 0; i < dtos.size(); i++) { + QuestionDTO dto = dtos.get(i); + entities.add(questionDTOtoEntity(dto)); + } + return entities; + } + + public QuestionEntity questionDTOtoEntity(QuestionDTO dto) { + QuestionEntity entity = new QuestionEntity(); + Category category = categoryRepository.findByName(decodeString(dto.getCategory())).orElseThrow(() -> new IllegalStateException("Category not in DB!")); + entity.setCategory(category); + entity.setDifficulty(dto.getDifficulty()); + entity.setType(dto.getType()); + entity.setQuestion(dto.getQuestion()); + entity.setCorrectAnswer(dto.getCorrectAnswer()); + entity.setIncorrectAnswers(dto.getIncorrectAnswers()); + return entity; + } + + + // TODO: Find a simpler way to convert from one table to another if the data is identical so this nonsense isn't necessary + public List questionListDTOtoCollectingEntity(List dtos) { + List entities = new ArrayList<>(); + for (int i = 0; i < dtos.size(); i++) { + QuestionDTO dto = dtos.get(i); + entities.add(questionDTOtoCollectingEntity(dto)); + } + return entities; + } + + public QuestionCollectingEntity questionDTOtoCollectingEntity(QuestionDTO dto) { + QuestionCollectingEntity entity = new QuestionCollectingEntity(); + Category category = categoryRepository.findByName(decodeString(dto.getCategory())).orElseThrow(() -> new IllegalStateException("Category not in DB!")); + entity.setCategory(category); + entity.setDifficulty(dto.getDifficulty()); + entity.setType(dto.getType()); + entity.setQuestion(dto.getQuestion()); + entity.setCorrectAnswer(dto.getCorrectAnswer()); + entity.setIncorrectAnswers(dto.getIncorrectAnswers()); + return entity; + } + + + /** + * For some reason, the categories come with special characters, + * But the categories from the questions dont + * So this has to be manually fixed if they are to be stored in the db (otherwise namematching doesnt work) + */ + private String decodeString(String text){ + return StringEscapeUtils.unescapeHtml4(text); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/DataService.java b/backend/src/main/java/com/ninjaws/quiz/services/DataService.java new file mode 100644 index 0000000..717fdc8 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/DataService.java @@ -0,0 +1,70 @@ +package com.ninjaws.quiz.services; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.ninjaws.quiz.entities.Category; +import com.ninjaws.quiz.entities.QuestionCollectingEntity; +import com.ninjaws.quiz.entities.QuestionEntity; +import com.ninjaws.quiz.models.QuizSettings; +import com.ninjaws.quiz.repositories.CategoryRepository; +import com.ninjaws.quiz.repositories.QuestionCollectingRepository; +import com.ninjaws.quiz.repositories.QuestionRepository; + +import jakarta.transaction.Transactional; + +@Service +public class DataService { + + @Autowired + private QuestionRepository questionRepository; + @Autowired + private QuestionCollectingRepository collectingRepository; + @Autowired + private CategoryRepository categoryRepository; + + public List getAllQuestions() { + return questionRepository.findAll(); + } + + public QuestionEntity saveQuestion(QuestionEntity question) { + return questionRepository.save(question); + } + + public List saveQuestions(List questions) { + return questionRepository.saveAll(questions); + } + + /** + * Tries to get questions that match the specified QuizSettings + * + * @return The questions if the query was possible, and an empty array if not + */ + public List lookupQuestions(QuizSettings quizSettings) { + return questionRepository.lookupQuestions(quizSettings.getCategory(), quizSettings.getDifficulty(), quizSettings.getType(), quizSettings.getAmount()); + } + + public List saveCategories(List categories) { + return categoryRepository.saveAll(categories); + } + + public List getCategories(){ + return categoryRepository.findAll(); + } + /** + * Moving the collected questions to the questions list + * + */ + @Transactional + public void migrateQuestions() { + questionRepository.deleteAll(); + questionRepository.moveCollection(); + collectingRepository.deleteAll(); + } + + public List collectQuestions(List questions) { + return collectingRepository.saveAll(questions); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/QueueService.java b/backend/src/main/java/com/ninjaws/quiz/services/QueueService.java new file mode 100644 index 0000000..4568b69 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/QueueService.java @@ -0,0 +1,31 @@ +package com.ninjaws.quiz.services; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; + +import org.springframework.stereotype.Service; + +import com.ninjaws.quiz.models.Request; + +@Service +public class QueueService { + + /** + * Stores all user requests for data + * Executes them in order, one every 5 seconds (the limit of the external API) + * Removes them from the Queue when the request was succesful + */ + private final BlockingQueue requests = new LinkedBlockingQueue<>(5); + + /** + * Offer automatically doesn't add it to the queue if it is full, so no Exceptions thrown + * @return Whether it's possible to add the request to the queue + */ + public boolean addToQueue(Request request) { + return requests.offer(request); + } + + public Request popFromQueue() { + return requests.poll(); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/QuizService.java b/backend/src/main/java/com/ninjaws/quiz/services/QuizService.java new file mode 100644 index 0000000..4bb1484 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/QuizService.java @@ -0,0 +1,123 @@ +package com.ninjaws.quiz.services; + +import java.util.List; +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.ninjaws.quiz.entities.QuestionEntity; +import com.ninjaws.quiz.models.Answers; +import com.ninjaws.quiz.models.QuizSettings; +import com.ninjaws.quiz.models.Request; +import com.ninjaws.quiz.models.Session; + + +@Service +public class QuizService { + + @Autowired + private CacheService cacheService; + @Autowired + private QueueService queueService; + @Autowired + private DataService dataService; + @Autowired + private CleanerService cleanerService; + @Autowired + private StateManagementService stateManager; + + /** + * Actions: + * - Creates a session with sessionId + * - Adds session to the cache + * - Creates a request and adds it to the queue + * @param quizSettings The values set by the user, determining the kind of quiz they want + * @return The sessionId + */ + public Optional createSession(QuizSettings quizSettings) { + Session session = new Session(); + + /** First, we check if there are already enough items in our db */ + List questionsRetrieved = dataService.lookupQuestions(quizSettings); + /** If the items are not matching the required amount, and the db is not currently being filled up, then they simply don't exist */ + if (questionsRetrieved.size() < quizSettings.getAmount() && stateManager.getCurrentProcessingState() != StateManagementService.ProcessingState.STARTUP) { + session.setStatusCode(1); + cacheService.addToCache(session.getId(), session); + return Optional.of(session.getId()); + } + /** All items are collected in from the database, it doesn't need to be added to the queue */ + if(!questionsRetrieved.isEmpty() && questionsRetrieved.size() == quizSettings.getAmount()) { + session.setQuestions(cleanerService.questionListEntitytoDTO(questionsRetrieved)); + cacheService.addToCache(session.getId(), session); + return Optional.of(session.getId()); + } + + cacheService.addToCache(session.getId(), session); + boolean addedToQueue = queueService.addToQueue(new Request(session.getId(), quizSettings)); + /** In this order, because doing the queue before the cache could lead to race conditions (request completion immediately calls cache, but then the item doesn't exist) */ + if(!addedToQueue) { + cacheService.removeFromCache(session.getId()); + return Optional.empty(); + } + + return Optional.of(session.getId()); + } + + /** + * Actions: + * - Looks up the session in the cache + * - Checks if the data from the request is stored + * @param sessionId + * @return The data if it's available, Optional.empty() if not, and an Exception if the session is invalid + */ + public Optional checkSession(String sessionId) throws IllegalArgumentException { + Session session = cacheService.getFromCache(sessionId); + + if(session == null) { + throw new IllegalArgumentException("Invalid session ID: " + sessionId); + } + + /** Anything other than statuscode 0 doesn't result in active sessions, so remove them from the cache after reporting to the frontend */ + if(session.getStatusCode() != 0) { + cacheService.removeFromCache(session.getId()); + return Optional.of(session); + } + + /** Still waiting for a response */ + if (session.getQuestions() == null) { + return Optional.empty(); + } + + + return Optional.of(session); + } + + /** + * Receives: sessionId and answers + * + * Actions: + * - Retrieves session from cache + * - Deletes session from cache + * - Matches answers answers to correctAnswers + * - Calculates score + * Returns: calculated score + * */ + public int getScore(Answers answers) { + Session session = cacheService.getFromCache(answers.getSessionId()); + cacheService.removeFromCache(session.getId()); + return calculateScore(session, answers); + } + + private int calculateScore(Session session, Answers answers) { + int amountCorrect = 0; + for(int i = 0; i < session.getQuestions().size(); i++) { + String correctAnswer = session.getQuestions().get(i).getCorrectAnswer(); + String userAnswer = answers.getAnswers().get(i); + if (correctAnswer.equalsIgnoreCase(userAnswer)) { + amountCorrect++; + } + } + return amountCorrect; + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/ResponseHandlingService.java b/backend/src/main/java/com/ninjaws/quiz/services/ResponseHandlingService.java new file mode 100644 index 0000000..4d07c9f --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/ResponseHandlingService.java @@ -0,0 +1,110 @@ +package com.ninjaws.quiz.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.ninjaws.quiz.models.ApiResponse; +import com.ninjaws.quiz.models.CategoryResponse; +import com.ninjaws.quiz.models.Session; + +@Service +public class ResponseHandlingService { + + @Autowired + private StateManagementService stateManager; + @Autowired + private CacheService cacheService; + @Autowired + private DataService dataService; + @Autowired + private CleanerService cleanerService; + + /** + * If there is no sessionId, then this is a request from the scheduler + * purely to stock in the database No Cache call is required + */ + public void handleResponse(String sessionId, ApiResponse response) throws IllegalStateException { + + Session session = cacheService.getFromCache(sessionId); + if (session == null) { + // Critical system failure: Should never occur + throw new IllegalStateException("Session should be defined!"); + } + + switch (response.getResponseCode()) { + case 0: + // Success + updateSessionInCache(session, response); + /** Managing the token gets difficult since there is a timelimit, so simply dont add these, let the bulk collector do it */ + // dataService.saveQuestions(cleanerService.questionListDTOtoEntity(response.getResults())); + break; + case 1: + // Not enough questions to satisfy the request. + updateSessionInCache(session, response); + break; + case 2: + // Invalid parameters + updateSessionInCache(session, response); + break; + case 3: + // If it expired. Shouldn't happen since the backup database is full within 40 minutes, and the code lasts for 6 hours + // Return a statuscode 1 to signal an issue, just in case a user hits this situation (should not happen) + session.setStatusCode(1); + updateSessionInCache(session, response); + case 4: + // It returns nothing, the previous batch was the last one + // Return a statuscode 1 to the user + session.setStatusCode(1); + updateSessionInCache(session, response); + break; + case 5: + // Should be prevented by the scheduler + default: + break; + } + } + + /** + * If the request was made by the scheduler during queue-downtime, there is no session + */ + public void handleResponse(ApiResponse response) { + switch (response.getResponseCode()) { + case 0: + if(stateManager.getCurrentProcessingState() == StateManagementService.ProcessingState.STARTUP) { + /** Initial saving during the startup */ + dataService.saveQuestions(cleanerService.questionListDTOtoEntity(response.getResults())); + } else if (stateManager.getCurrentProcessingState() == StateManagementService.ProcessingState.REFRESH) { + /** Background collecting during the night */ + dataService.collectQuestions(cleanerService.questionListDTOtoCollectingEntity(response.getResults())); + } + break; + case 4: + // Signal DataService that we have extracted all the data. Stop gathering, + // TODO: Switch to caching-mode + + /** + * If it was in the REFRESH state, move the data from collecting to the used questions + * Otherwise simply switch to the NORMAL state + */ + if (stateManager.getCurrentProcessingState() == StateManagementService.ProcessingState.REFRESH) { + dataService.migrateQuestions(); + } + stateManager.setCurrentProcessingState(StateManagementService.ProcessingState.NORMAL); + break; + case 5: + // Should be prevented by the scheduler + default: + break; + } + } + + private void updateSessionInCache(Session session, ApiResponse response) { + session.setStatusCode(response.getResponseCode()); + session.setQuestions(response.getResults()); + cacheService.addToCache(session.getId(), session); + } + + public void handleCategoryResponse(CategoryResponse categoryResponse) { + dataService.saveCategories(categoryResponse.getTrivia_categories()); + } +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/SchedulerService.java b/backend/src/main/java/com/ninjaws/quiz/services/SchedulerService.java new file mode 100644 index 0000000..a8f474a --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/SchedulerService.java @@ -0,0 +1,49 @@ +package com.ninjaws.quiz.services; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Service; + +import com.ninjaws.quiz.models.Request; + +@Service +public class SchedulerService { + + @Autowired + private QueueService queueService; + @Autowired + private ApiService apiService; + @Autowired + private StateManagementService stateService; + + public SchedulerService() {} + + /** + * Every 5 seconds: + * - Check if there is a request in queue + * - Yes: Send it to the apiService + * - No: Have the apiService do bulk gathering for the DB + */ + @Scheduled(fixedDelay = 5000) + protected void processQueue() { + Request request = queueService.popFromQueue(); + + if (request != null) { + apiService.handleRequest(request); + } else { + if (stateService.getCurrentProcessingState() == StateManagementService.ProcessingState.STARTUP || stateService.getCurrentProcessingState() == StateManagementService.ProcessingState.REFRESH) { + apiService.collectBulk(); + } + } + } + + /** + * Starts the renewing of the questions, to ensure they stay fresh + */ + @Scheduled(cron = "0 0 1 * * ?") + protected void StartDbRefresh() { + apiService.getSessionToken(); + stateService.setCurrentProcessingState(StateManagementService.ProcessingState.REFRESH); + } + +} diff --git a/backend/src/main/java/com/ninjaws/quiz/services/StateManagementService.java b/backend/src/main/java/com/ninjaws/quiz/services/StateManagementService.java new file mode 100644 index 0000000..b1b8c49 --- /dev/null +++ b/backend/src/main/java/com/ninjaws/quiz/services/StateManagementService.java @@ -0,0 +1,29 @@ +package com.ninjaws.quiz.services; + +import org.springframework.stereotype.Service; + +@Service +public class StateManagementService { + + /** + * STARTUP: When starting the app + * REFRESH: Scheduled at night, so the database stays fresh + * NORMAL: No special activities + */ + public enum ProcessingState { + STARTUP, + REFRESH, + NORMAL + } + + private ProcessingState currentProcessingState; + + public ProcessingState getCurrentProcessingState() { + return currentProcessingState; + } + + public void setCurrentProcessingState(ProcessingState currentProcessingState) { + this.currentProcessingState = currentProcessingState; + } + +} diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties new file mode 100644 index 0000000..de62e37 --- /dev/null +++ b/backend/src/main/resources/application.properties @@ -0,0 +1,35 @@ +spring.application.name=quiz +server.address=0.0.0.0 +server.port=9090 + +# H2 Database configuration +spring.h2.console.enabled=true +# spring.h2.console.path=/console + + +spring.datasource.url=jdbc:h2:mem:testdb +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= + +spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect + + +# # Primary database configuration +# spring.datasource.primary.url=jdbc:h2:mem:testdb +# # ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +# spring.datasource.primary.driver-class-name=org.h2.Driver +# spring.datasource.primary.username=sa +# spring.datasource.primary.password= +# spring.jpa.primary.hibernate.ddl-auto=create-drop +# spring.jpa.primary.database-platform=org.hibernate.dialect.H2Dialect + +# # Secondary database configuration +# spring.datasource.secondary.url=jdbc:h2:mem:secondarydb +# # ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +# spring.datasource.secondary.driver-class-name=org.h2.Driver +# spring.datasource.secondary.username=sa +# spring.datasource.secondary.password= +# spring.jpa.secondary.hibernate.ddl-auto=create-drop +# spring.jpa.secondary.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file diff --git a/backend/src/main/resources/static/index.html b/backend/src/main/resources/static/index.html new file mode 100644 index 0000000..4b255a9 --- /dev/null +++ b/backend/src/main/resources/static/index.html @@ -0,0 +1 @@ +

Quiz backend

\ No newline at end of file diff --git a/backend/src/test/java/com/ninjaws/quiz/QuizApplicationTests.java b/backend/src/test/java/com/ninjaws/quiz/QuizApplicationTests.java new file mode 100644 index 0000000..bac272a --- /dev/null +++ b/backend/src/test/java/com/ninjaws/quiz/QuizApplicationTests.java @@ -0,0 +1,12 @@ +package com.ninjaws.quiz; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class QuizApplicationTests { + + // @Test + // void contextLoads() { + // } + +} diff --git a/backend/src/test/java/com/ninjaws/quiz/scala/QuestionStatusSimulation.scala b/backend/src/test/java/com/ninjaws/quiz/scala/QuestionStatusSimulation.scala new file mode 100644 index 0000000..13900dc --- /dev/null +++ b/backend/src/test/java/com/ninjaws/quiz/scala/QuestionStatusSimulation.scala @@ -0,0 +1,22 @@ +package com.ninjaws.quiz.scala; +import io.gatling.core.Predef._ +import io.gatling.http.Predef._ +import scala.concurrent.duration._ + +/** Does not work, use the LoadTestMultiple.sh in the /scripts folder in the root instead */ +class QuestionStatusSimulation extends Simulation { + val httpProtocol = http.baseUrl("http://localhost:9090").acceptHeader("application/json") + + val requestQuestions = exec(http("Request Questions").get("/questions/bla").check(status.is(200)).check(jsonPath("$.id").saveAs("sessionId"))) + + val checkStatus = exec(http("Check Status").get("/status/${sessionId}").check(status.is(200),jsonPath("$.status").notNull)) + + val scn = scenario("Check Questions Status Completion").exec(requestQuestions).pause(1).asLongAsDuring(session => session("completed").asOption[Boolean].getOrElse(false) == false, 30.seconds) { + exec(checkStatus).pause(1).exec{ session => val status = session("status").asOption[String] + session.set("completed", status.isDefined && status.get != "null") + } + } + setUp( + scn.inject(atOnceUsers(10)) + ).protocols(httpProtocol); +} \ No newline at end of file diff --git a/backend/src/test/java/com/ninjaws/quiz/services/CacheServiceTest.java b/backend/src/test/java/com/ninjaws/quiz/services/CacheServiceTest.java new file mode 100644 index 0000000..63570e8 --- /dev/null +++ b/backend/src/test/java/com/ninjaws/quiz/services/CacheServiceTest.java @@ -0,0 +1,59 @@ +package com.ninjaws.quiz.services; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.ninjaws.quiz.models.Session; + +public class CacheServiceTest { + + private CacheService cacheService; + + @BeforeEach + public void setUp() { + cacheService = new CacheService(); + } + + @Test + public void testAddToCache() { + String key = "session1"; + Session session = new Session(); + + cacheService.addToCache(key, session); + + assertNotNull(cacheService.getFromCache(key)); + assertEquals(session, cacheService.getFromCache(key)); + } + + @Test + public void testGetFromCache() { + String key = "session1"; + Session session = new Session(); + + cacheService.addToCache(key, session); + + Session retrievedSession = cacheService.getFromCache(key); + assertNotNull(retrievedSession); + assertEquals(session, retrievedSession); + } + + @Test + public void testRemoveFromCache() { + String key = "session1"; + Session session = new Session(); + + cacheService.addToCache(key, session); + cacheService.removeFromCache(key); + + assertNull(cacheService.getFromCache(key)); + } + + @Test + public void testGetFromCacheWithNonExistentKey() { + assertNull(cacheService.getFromCache("nonExistentKey")); + } +} diff --git a/backend/src/test/java/com/ninjaws/quiz/services/QueueServiceTest.java b/backend/src/test/java/com/ninjaws/quiz/services/QueueServiceTest.java new file mode 100644 index 0000000..e921c04 --- /dev/null +++ b/backend/src/test/java/com/ninjaws/quiz/services/QueueServiceTest.java @@ -0,0 +1,63 @@ +package com.ninjaws.quiz.services; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import com.ninjaws.quiz.models.QuizSettings; +import com.ninjaws.quiz.models.Request; + +public class QueueServiceTest { + + private QueueService queueService; + + @BeforeEach + public void setUp() { + queueService = new QueueService(); + } + + @Test + public void testAddToQueue() { + QuizSettings quizSettings = new QuizSettings(); + Request request = new Request("session1", quizSettings); + + boolean added = queueService.addToQueue(request); + assertTrue(added); + + for (int i = 0; i < 4; i++) { + added = queueService.addToQueue(new Request("session" + (i + 2), new QuizSettings())); + assertTrue(added); + } + + added = queueService.addToQueue(new Request("session6", new QuizSettings())); + assertFalse(added); + } + + @Test + public void testPopFromQueue() { + QuizSettings quizSettings1 = new QuizSettings(); + QuizSettings quizSettings2 = new QuizSettings(); + + Request request1 = new Request("session1", quizSettings1); + Request request2 = new Request("session2", quizSettings2); + + queueService.addToQueue(request1); + queueService.addToQueue(request2); + + Request poppedRequest = queueService.popFromQueue(); + assertEquals(request1, poppedRequest); + + poppedRequest = queueService.popFromQueue(); + assertEquals(request2, poppedRequest); + + assertNull(queueService.popFromQueue()); + } + + @Test + public void testPopFromEmptyQueue() { + assertNull(queueService.popFromQueue()); + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..cc88a8f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +services: + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + target: production + image: quiz-frontend-prod + container_name: quiz-frontend-prod-cont + ports: + - "4200:80" + networks: + - quiz-network + restart: always + backend: + build: + context: ./backend + dockerfile: Dockerfile + target: production + image: quiz-backend-prod + container_name: quiz-backend-prod-cont + ports: + - "9090:9090" + networks: + - quiz-network + restart: always + +networks: + quiz-network: # Define the network \ No newline at end of file diff --git a/frontend/.devcontainer/devcontainer.json b/frontend/.devcontainer/devcontainer.json new file mode 100644 index 0000000..2d77981 --- /dev/null +++ b/frontend/.devcontainer/devcontainer.json @@ -0,0 +1,35 @@ +{ + "name": "Quiz Frontend", + + "build": { + "context": "..", + "dockerfile": "../Dockerfile", + "args": { + // "WORKDIR": "/app" + }, + "target": "development" + }, + "runArgs": [ + "--name=quiz-frontend-dev-cont", + "--net=host" // Allows it to be opened on the host network + ], + "workspaceFolder": "/app", + "mounts": [ + "source=.,target=/app,type=bind" + ], + "customizations": { + "vscode": { + "settings": {}, + "extensions": [ + "christian-kohler.npm-intellisense", + "Angular.ng-template", + "dbaeumer.vscode-eslint", + "Zignd.html-css-class-completion", + "esbenp.prettier-vscode", + "bradlc.vscode-tailwindcss", + "ecmel.vscode-html-css", + "pranaygp.vscode-css-peek" + ] + } + } +} \ No newline at end of file diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..e8a6b1c --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,9 @@ +node_modules/ +.git/ +.gitignore +README.md +LICENSE +.vscode/ +Dockerfile* +docker-compose* +npm-debug.log \ No newline at end of file diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..f166060 --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,17 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single +ij_typescript_use_double_quotes = false + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..cc7b141 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,42 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..fcb9e96 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,32 @@ +FROM node:22-bookworm-slim AS base +WORKDIR /app +ENV NG_CLI_ANALYTICS=ci +RUN npm install -g @angular/cli + +#--- Development +FROM base AS development +RUN apt-get update && \ + apt-get install -y git && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* +# Switching user so it doesn't use root +# If root adds files, it takes ownership, making them unremovable on the host except by using sudo +# node tranfers ownership to the host user +USER node +EXPOSE 4200 +CMD ["tail","-f","/dev/null"] + +#--- Building +FROM base AS build +COPY package*.json ./ +RUN npm install +# Copied here, since the the Development setup uses a bind volume instead +COPY . . +RUN ng build --configuration production + +#--- Production +FROM nginx:alpine AS production +COPY --from=build /app/dist/quiz/browser /usr/share/nginx/html +COPY nginx.conf /etc/nginx/conf.d/default.conf +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/frontend/angular.json b/frontend/angular.json new file mode 100644 index 0000000..c9654d3 --- /dev/null +++ b/frontend/angular.json @@ -0,0 +1,111 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "quiz": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/quiz", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kB", + "maximumError": "4kB" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "quiz:build:production" + }, + "development": { + "buildTarget": "quiz:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 0000000..dd7e5f2 --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,61 @@ +server { + listen 80; + server_name quiz.ianvink.nl; + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + location /api/ { + proxy_set_header Connection ''; + proxy_http_version 1.1; + proxy_read_timeout 360s; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + # add_header 'Access-Control-Allow-Origin' '*'; # Adjust this to your frontend domain + # add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # Include POST + # add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization'; # Include any other headers + + proxy_pass http://backend:9090/; + } +} + +# server { +# listen 80; +# server_name quiz.ianvink.nl; + +# location /.well-known/acme-challenge/ { +# root /usr/share/nginx/html; # Adjust this if needed +# } + +# location / { +# return 301 https://$host$request_uri; +# } +# } + +# server { +# listen 443 ssl; +# server_name quiz.example.com; + +# ssl_certificate /etc/letsencrypt/live/quiz.example.com/fullchain.pem; +# ssl_certificate_key /etc/letsencrypt/live/quiz.example.com/privkey.pem; + +# location / { +# root /usr/share/nginx/html; +# index index.html; +# try_files $uri $uri/ /index.html; +# } + +# location /api/ { +# proxy_pass http://backend:9090/; # Adjust this if needed +# proxy_set_header Host $host; +# proxy_set_header X-Real-IP $remote_addr; +# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; +# proxy_set_header X-Forwarded-Proto $scheme; +# } +# } \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..4cd7d76 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,14549 @@ +{ + "name": "quiz", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "quiz", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^18.2.0", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.0", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.10", + "@angular/cli": "^18.2.10", + "@angular/compiler-cli": "^18.2.0", + "@types/jasmine": "~5.1.0", + "autoprefixer": "^10.4.20", + "jasmine-core": "~5.2.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", + "typescript": "~5.5.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1802.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.10.tgz", + "integrity": "sha512-/xudcHK2s4J/GcL6qyobmGaWMHQcYLSMqCaWMT+nK6I6tu9VEAj/p3R83Tzx8B/eKi31Pz499uHw9pmqdtbafg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.10", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.10.tgz", + "integrity": "sha512-47XgJ5fdIqlZUFWAo/XtNsh3y597DtLZWvfsnwShw6/TgyiV0rbL1Z24Rn2TCV1D/b3VhLutAIIZ/i5O5BirxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.10", + "@angular-devkit/build-webpack": "0.1802.10", + "@angular-devkit/core": "18.2.10", + "@angular/build": "18.2.10", + "@babel/core": "7.25.2", + "@babel/generator": "7.25.0", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.25.0", + "@babel/plugin-transform-async-to-generator": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.25.3", + "@babel/runtime": "7.25.0", + "@discoveryjs/json-ext": "0.6.1", + "@ngtools/webpack": "18.2.10", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.20", + "babel-loader": "9.1.3", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "critters": "0.0.24", + "css-loader": "7.1.2", + "esbuild-wasm": "0.23.0", + "fast-glob": "3.3.2", + "http-proxy-middleware": "3.0.3", + "https-proxy-agent": "7.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "magic-string": "0.30.11", + "mini-css-extract-plugin": "2.9.0", + "mrmime": "2.0.0", + "open": "10.1.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "postcss": "8.4.41", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.77.6", + "sass-loader": "16.0.0", + "semver": "7.6.3", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.31.6", + "tree-kill": "1.2.2", + "tslib": "2.6.3", + "vite": "5.4.6", + "watchpack": "2.4.1", + "webpack": "5.94.0", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.0.4", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.23.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^18.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1802.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.10.tgz", + "integrity": "sha512-WRftK/RJ9rBDDmkx5IAtIpyNo0DJiMfgGUTuZNpNUaJfSfGeaSZYgC7o1++axMchID8pncmI3Hr8L8gaP94WQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1802.10", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/core": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.10.tgz", + "integrity": "sha512-LFqiNdraBujg8e1lhuB0bkFVAoIbVbeXXwfoeROKH60OPbP8tHdgV6sFTqU7UGBKA+b+bYye70KFTG2Ys8QzKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.10.tgz", + "integrity": "sha512-EIm/yCYg3ZYPsPYJxXRX5F6PofJCbNQ5rZEuQEY09vy+ZRTqGezH0qoUP5WxlYeJrjiRLYqADI9WtVNzDyaD4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.10", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.11", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.9.tgz", + "integrity": "sha512-GAsTKENoTRVKgXX4ACBMMTp8SW4rW8u637uLag+ttJV2XBzC3YJlw5m6b/W4cdrmqZjztoEwUjR6CUTjBqMujQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.9" + } + }, + "node_modules/@angular/build": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.10.tgz", + "integrity": "sha512-YFBKvAyC5sH17yRYcx7VHCtJ4KUg7xCjCQ4Pe16kiTvW6vuYsgU6Btyti0Qgewd7XaWpTM8hk8N6hE4Z0hpflw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.10", + "@babel/core": "7.25.2", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.22", + "@vitejs/plugin-basic-ssl": "1.1.0", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.23.0", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "listr2": "8.2.4", + "lmdb": "3.0.13", + "magic-string": "0.30.11", + "mrmime": "2.0.0", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.22.4", + "sass": "1.77.6", + "semver": "7.6.3", + "vite": "5.4.6", + "watchpack": "2.4.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/cli": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.10.tgz", + "integrity": "sha512-qW/F3XVZMzzenFzbn+7FGpw8GOt9qW8UxBtYya7gUNdWlcsgGUk+ZaGC2OLbfI5gX6pchW4TOPMsDSMeaCEI2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1802.10", + "@angular-devkit/core": "18.2.10", + "@angular-devkit/schematics": "18.2.10", + "@inquirer/prompts": "5.3.8", + "@listr2/prompt-adapter-inquirer": "2.0.15", + "@schematics/angular": "18.2.10", + "@yarnpkg/lockfile": "1.1.0", + "ini": "4.1.3", + "jsonc-parser": "3.3.1", + "listr2": "8.2.4", + "npm-package-arg": "11.0.3", + "npm-pick-manifest": "9.1.0", + "pacote": "18.0.6", + "resolve": "1.22.8", + "semver": "7.6.3", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.9.tgz", + "integrity": "sha512-Opi6DVaU0aGyJqLk5jPmeYx559fp3afj4wuxM5aDzV4KEVGDVbNCpO0hMuwHZ6rtCjHhv1fQthgS48qoiQ6LKw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.9", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.9.tgz", + "integrity": "sha512-fchbcbsyTOd/qHGy+yPEmE1p10OTNEjGrWHQzUbf3xdlm23EvxHTitHh8i6EBdwYnM5zz0IIBhltP8tt89oeYw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.9" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.9.tgz", + "integrity": "sha512-4iMoRvyMmq/fdI/4Gob9HKjL/jvTlCjbS4kouAYHuGO9w9dmUhi1pY1z+mALtCEl9/Q8CzU2W8e5cU2xtV4nVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.25.2", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^4.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "18.2.9", + "typescript": ">=5.4 <5.6" + } + }, + "node_modules/@angular/compiler-cli/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/core": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.9.tgz", + "integrity": "sha512-h9/Bzo/7LTPzzh9I/1Gk8TWOXPGeHt3jLlnYrCh2KbrWbTErNtW0V3ad5I3Zv+K2Z7RSl9Z3D3Y6ILH796N4ZA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.10" + } + }, + "node_modules/@angular/forms": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.9.tgz", + "integrity": "sha512-yyN5dG60CXH6MRte8rv4aGUTeNOMz/pUV7rVxittpjN7tPHfGEL9Xz89Or90Aa1QiHuBmHFk+9A39s03aO1rDQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.9.tgz", + "integrity": "sha512-UNu6XjK0SV35FFe55yd1yefZI8tzflVKzev/RzC31XngrczhlH0+WCbae4rG1XJULzJwJ1R1p7gqq4+ktEczRQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "18.2.9", + "@angular/common": "18.2.9", + "@angular/core": "18.2.9" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.9.tgz", + "integrity": "sha512-cUTB8Jc3I/fu2UKv/PJmNGQGvKyyTo8ln4GUX3EJ4wUHzgkrU0s4x7DNok0Ql8FZKs5dLR8C0xVbG7Dv/ViPdw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.9", + "@angular/compiler": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9" + } + }, + "node_modules/@angular/router": { + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.9.tgz", + "integrity": "sha512-D0rSrMf/sbhr5yQgz+LNBxdv1BR3S4pYDj1Exq6yVRKX8HSbjc5hxe/44VaOEKBh8StJ6GRiNOMoIcDt73Jang==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", + "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", + "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", + "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", + "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", + "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", + "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", + "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", + "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", + "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", + "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", + "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-simple-access": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", + "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", + "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", + "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", + "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", + "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.0", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz", + "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", + "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", + "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.10", + "@inquirer/type": "^1.5.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz", + "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz", + "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.7.tgz", + "integrity": "sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", + "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz", + "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz", + "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz", + "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^2.4.7", + "@inquirer/confirm": "^3.1.22", + "@inquirer/editor": "^2.1.22", + "@inquirer/expand": "^2.1.22", + "@inquirer/input": "^2.2.9", + "@inquirer/number": "^1.0.10", + "@inquirer/password": "^2.1.22", + "@inquirer/rawlist": "^2.2.4", + "@inquirer/search": "^1.0.7", + "@inquirer/select": "^2.4.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz", + "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz", + "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", + "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/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, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz", + "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^1.5.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 6" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz", + "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz", + "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz", + "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz", + "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz", + "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz", + "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ngtools/webpack": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.10.tgz", + "integrity": "sha512-CGYr8rdM5ntdb4kLUAhrLBPrhJQ4KBPo3KMT6qJE/S+jJJn5zHzedpuGFOCVhC1Siw+n1pOBSI8leTRJIW/eCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "typescript": ">=5.4 <5.6", + "webpack": "^5.54.0" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz", + "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.10.tgz", + "integrity": "sha512-2pDHT4aSzfs8Up4RQmHHuFd5FeuUebS1ZJwyt46MfXzRMFtzUZV/JKsIvDqyMwnkvFfLvgJyTCkl8JGw5jQObg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.10", + "@angular-devkit/schematics": "18.2.10", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", + "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.8.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.1.tgz", + "integrity": "sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "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, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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" + } + ], + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001673", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001673.tgz", + "integrity": "sha512-WTrjUCSMp3LYX0nE12ECkV0a+e6LC85E0Auz75555/qr78Oc8YWhEPNfDd6SHdtlCMSzqtuXY0uyEMNRcsKpKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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, + "license": "MIT", + "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/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/critters": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "deprecated": "Ownership of Critters has moved to the Nuxt team, who will be maintaining the project going forward. If you'd like to keep using Critters, please switch to the actively-maintained fork at https://github.com/danielroe/beasties", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "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, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/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, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.47", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.47.tgz", + "integrity": "sha512-zS5Yer0MOYw4rtK2iq43cJagHZ8sXN0jDHDKzB+86gSBSAI4v07S97mcq+Gs2vclAxSh1j7vOAHxSVgduiiuVQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "dev": true, + "license": "MIT", + "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.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", + "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/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, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "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, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "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, + "license": "ISC", + "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, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", + "integrity": "sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "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": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "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, + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.2.0.tgz", + "integrity": "sha512-tSAtdrvWybZkQmmaIoDgnvHG8ORUNw5kEVlO5CvrXj02Jjr9TZrmjFq7FUiOUzJiOP2wLGYT6PgrQgQF4R1xiw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz", + "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.10.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.0.13", + "@lmdb/lmdb-darwin-x64": "3.0.13", + "@lmdb/lmdb-linux-arm": "3.0.13", + "@lmdb/lmdb-linux-arm64": "3.0.13", + "@lmdb/lmdb-linux-x64": "3.0.13", + "@lmdb/lmdb-win32-x64": "3.0.13" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/nice-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ordered-binary": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.2.tgz", + "integrity": "sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/piscina": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", + "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-cache/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", + "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", + "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/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, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/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, + "license": "MIT", + "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/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/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, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "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, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.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==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", + "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/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, + "license": "MIT", + "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/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/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, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "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/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "license": "MIT" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..975ced5 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,41 @@ +{ + "name": "quiz", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^18.2.0", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.0", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.10", + "@angular/cli": "^18.2.10", + "@angular/compiler-cli": "^18.2.0", + "@types/jasmine": "~5.1.0", + "autoprefixer": "^10.4.20", + "jasmine-core": "~5.2.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "postcss": "^8.4.47", + "tailwindcss": "^3.4.14", + "typescript": "~5.5.2" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/frontend/public/question.ico b/frontend/public/question.ico new file mode 100644 index 0000000000000000000000000000000000000000..a27a1978a9c14373712b03787ac656357c601168 GIT binary patch literal 10462 zcmdU#O^6&t6vyAV>iB`Khmecth>D7!VnB?dY%YRV6+DUu4I00q7a-*%u6NK6_YrL;A_zhiy@bN`{JG^`qPreUN?cLkB@E`D3>(f@VZ;6- zDb51d6=>49>agLy0){q<>MHH1VZUnJU;zrlzz%X%^0vRU85(Um4tZ$tGYn=F^!29{>z1O`7%?#WDn4Z0{1mz3!A1W7em8YP)b#_?xa+G1}xuClO-pELM&g<8RQ=O z#kX>BaBhv|Wu*DwJG;eqUA7wTyE!>xmT~uEdGnz8_@g?0{A!(HZLNNN=(|f=o6B=) z>%O@A*~obrgF$@wE)1M!TFdss*sDJu`p!=yGKjw1EF+Dj;V~6|#*vx#$t7kG{-G=e z#*)}#`47sew451pOzC?0zV8?_%%DQweop4OQr1;D*N$$#dwt)+lD>D+n4u^R&iOpgah+xTm%}$kzVn4) zmJ4Z4a*X>eXKTay9_rqs@Lo9GYnl0N37l^t-a_Nwp8Ai6nE(3vMM^|ht?-5gh};rC$OK03sw zU&WS4w6}-!(OHHvh~Atm2c;iNo^u0z!h49`p6~H);tuR{Iaiq(#6}JlTl%n6iyvMC zpZtD)MS=aE-k$H#cClZ3tv)w{*vZIpv3uQ)mh1P!em4t`)z4N}Kec7ycg{b9?Wf1Kwz+N=)npLG<*ApT@z(PR4;{Nke54Z1I!L0B**c5}>f_%_II z{TXz+Z;G8s$O2d<&LD9z$TBqsgDg{LFu+n8hA~)5$1nm*X&G{`l%7FY()Y?$ z+eEW0H;Jk&H;86fHu3-PSb7z{kg{f)bO4ed=RE2V>T4dMI}~_??oi+nxSoN*BroO?PT`g~NL*AJr~l#xU5bmuRpKmhPxA0Dcu%Bx literal 0 HcmV?d00001 diff --git a/frontend/src/app/Quiz/models/answers.ts b/frontend/src/app/Quiz/models/answers.ts new file mode 100644 index 0000000..ab90e14 --- /dev/null +++ b/frontend/src/app/Quiz/models/answers.ts @@ -0,0 +1,4 @@ +export interface Answers { + sessionId: string; + answers: string[]; +} \ No newline at end of file diff --git a/frontend/src/app/Quiz/models/category.ts b/frontend/src/app/Quiz/models/category.ts new file mode 100644 index 0000000..dae9760 --- /dev/null +++ b/frontend/src/app/Quiz/models/category.ts @@ -0,0 +1,4 @@ +export interface Category { + id: number; + name: string; +} \ No newline at end of file diff --git a/frontend/src/app/Quiz/models/question.ts b/frontend/src/app/Quiz/models/question.ts new file mode 100644 index 0000000..fc74e84 --- /dev/null +++ b/frontend/src/app/Quiz/models/question.ts @@ -0,0 +1,11 @@ +export interface Question { + question: string; + answers: string[]; + category: string; + type: string; + difficulty: string; + + /** To make special characters visible */ + question_decoded?: string; + answers_decoded?: string[]; +} diff --git a/frontend/src/app/Quiz/models/quiz-params.ts b/frontend/src/app/Quiz/models/quiz-params.ts new file mode 100644 index 0000000..7b8fff8 --- /dev/null +++ b/frontend/src/app/Quiz/models/quiz-params.ts @@ -0,0 +1,8 @@ +import { Category } from "./category"; + +export interface QuizParams { + category: number; + type: string; + amount: number; + difficulty: string; + } \ No newline at end of file diff --git a/frontend/src/app/Quiz/models/score.ts b/frontend/src/app/Quiz/models/score.ts new file mode 100644 index 0000000..9230a22 --- /dev/null +++ b/frontend/src/app/Quiz/models/score.ts @@ -0,0 +1,4 @@ +export interface Score { + amount_questions: number; + amount_correct: number; + } \ No newline at end of file diff --git a/frontend/src/app/Quiz/models/session.ts b/frontend/src/app/Quiz/models/session.ts new file mode 100644 index 0000000..64801c1 --- /dev/null +++ b/frontend/src/app/Quiz/models/session.ts @@ -0,0 +1,7 @@ +import { Question } from "./question"; + +export interface Session { + id: string; + statusCode: number; + questions: Question[]; +} \ No newline at end of file diff --git a/frontend/src/app/Quiz/quiz-routing.module.ts b/frontend/src/app/Quiz/quiz-routing.module.ts new file mode 100644 index 0000000..16851f2 --- /dev/null +++ b/frontend/src/app/Quiz/quiz-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { SetupComponent } from './setup/setup.component'; +import { QuizComponent } from './quiz/quiz.component'; +import { ScoreComponent } from './score/score.component'; + +const routes: Routes = [ + { path: '', component: SetupComponent }, + { path: 'quiz', component: QuizComponent }, + { path: 'score', component: ScoreComponent }, + { path: '**', redirectTo: '' } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class QuizRoutingModule { } diff --git a/frontend/src/app/Quiz/quiz.module.ts b/frontend/src/app/Quiz/quiz.module.ts new file mode 100644 index 0000000..9605ca3 --- /dev/null +++ b/frontend/src/app/Quiz/quiz.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { QuizRoutingModule } from './quiz-routing.module'; + + +@NgModule({ + declarations: [], + imports: [ + CommonModule, + QuizRoutingModule + ], + providers: [] +}) +export class QuizModule { } diff --git a/frontend/src/app/Quiz/quiz/quiz.component.html b/frontend/src/app/Quiz/quiz/quiz.component.html new file mode 100644 index 0000000..64d6bfe --- /dev/null +++ b/frontend/src/app/Quiz/quiz/quiz.component.html @@ -0,0 +1,19 @@ +
+
+
+

{{ question.question_decoded }}

+
+ +
+
+ + +
+
\ No newline at end of file diff --git a/frontend/src/app/Quiz/quiz/quiz.component.scss b/frontend/src/app/Quiz/quiz/quiz.component.scss new file mode 100644 index 0000000..ddfa0aa --- /dev/null +++ b/frontend/src/app/Quiz/quiz/quiz.component.scss @@ -0,0 +1,3 @@ +.no-scrollbar { + scrollbar-width: none; + } \ No newline at end of file diff --git a/frontend/src/app/Quiz/quiz/quiz.component.ts b/frontend/src/app/Quiz/quiz/quiz.component.ts new file mode 100644 index 0000000..06029a9 --- /dev/null +++ b/frontend/src/app/Quiz/quiz/quiz.component.ts @@ -0,0 +1,61 @@ +import { CommonModule } from '@angular/common'; +import { Component } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { Router } from '@angular/router'; +import { Score } from '../models/score'; +import { Question } from '../models/question'; +import { QuizService } from '../services/quiz.service'; + +@Component({ + selector: 'app-quiz', + standalone: true, + imports: [CommonModule], + templateUrl: './quiz.component.html', + styleUrl: './quiz.component.scss' +}) +export class QuizComponent { + questions: Question[] = []; + selectedAnswers: { [key: number]: string } = {}; + + constructor(private router: Router, private quizService: QuizService) { + const navigation = this.router.getCurrentNavigation(); + if (navigation?.extras?.state) { + this.questions = navigation.extras.state['questions']; + }else { + // You didn't come here through the proper channels, byebye + this.router.navigate(['']); + } + } + + selectAnswer(questionIndex: number, answer: string) { + this.selectedAnswers[questionIndex] = answer; + } + + allQuestionsAnswered(): boolean { + return Object.keys(this.selectedAnswers).length === this.questions.length; + } + + getScore() { + const answers: string[] = [] + for(let i = 0; i < Object.keys(this.selectedAnswers).length; i++) { + answers.push(this.selectedAnswers[i]); + } + this.quizService.getScore(answers) + .then((result:number) => { + const score: Score = { + amount_correct:result, + amount_questions: Object.keys(this.selectedAnswers).length + } + this.router.navigate(['/score'], { state: { score: score },skipLocationChange:true }); + }) + .catch((e) => { + alert("Something went wrong"); + }); + + // const sampleScore: Score = { + // amount_questions: 10, + // amount_correct: 7 + // } + + } +} \ No newline at end of file diff --git a/frontend/src/app/Quiz/score/score.component.html b/frontend/src/app/Quiz/score/score.component.html new file mode 100644 index 0000000..751e3d0 --- /dev/null +++ b/frontend/src/app/Quiz/score/score.component.html @@ -0,0 +1,11 @@ +
+

Your Score

+

+ {{ score.amount_correct }} / {{ score.amount_questions }} +

+ +
\ No newline at end of file diff --git a/frontend/src/app/Quiz/score/score.component.scss b/frontend/src/app/Quiz/score/score.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/Quiz/score/score.component.ts b/frontend/src/app/Quiz/score/score.component.ts new file mode 100644 index 0000000..bfe4e1b --- /dev/null +++ b/frontend/src/app/Quiz/score/score.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; +import { Score } from '../models/score'; + +@Component({ + selector: 'app-score', + standalone: true, + imports: [], + templateUrl: './score.component.html', + styleUrl: './score.component.scss' +}) +export class ScoreComponent { + + score !: Score; + + constructor(private router: Router) { + const navigation = this.router.getCurrentNavigation(); + if (navigation?.extras?.state) { + this.score = navigation.extras.state['score']; + }else { + // You didn't come here through the proper channels, byebye + this.router.navigate(['']); + } + } + + playAgain() { + this.router.navigate(['']); + } +} diff --git a/frontend/src/app/Quiz/services/cleaner.service.ts b/frontend/src/app/Quiz/services/cleaner.service.ts new file mode 100644 index 0000000..8dbf81b --- /dev/null +++ b/frontend/src/app/Quiz/services/cleaner.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from '@angular/core'; +import { Question } from '../models/question'; + +@Injectable({ + providedIn: 'root' +}) +export class CleanerService { + + constructor() { } + + /** + * Sets decoded strings for the questions and the answers, so the special characters will be shown instead of their codes + */ + public cleanQuestionStrings(questions: Question[]): Question[] { + for(let i = 0; i < questions.length; i++) { + questions[i].question_decoded = this.decodeString(questions[i].question); + questions[i].answers_decoded = []; + for(let j = 0; j < questions[i].answers.length; j++){ + questions[i].answers_decoded!.push(this.decodeString(questions[i].answers[j])); + } + } + return questions; + } + + /** Puts special characters back into the string, like ' and " */ + private decodeString(text: string) { + const txt = document.createElement("textarea"); + txt.innerHTML = text; + const decodedValue = txt.value; + txt.remove(); // Clean up the temporary element + return decodedValue; + } +} diff --git a/frontend/src/app/Quiz/services/quiz.service.ts b/frontend/src/app/Quiz/services/quiz.service.ts new file mode 100644 index 0000000..e9c141a --- /dev/null +++ b/frontend/src/app/Quiz/services/quiz.service.ts @@ -0,0 +1,100 @@ +import { Injectable } from '@angular/core'; +import { QuizParams } from '../models/quiz-params'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { + catchError, + filter, + firstValueFrom, + interval, + lastValueFrom, + of, + startWith, + switchMap, + take, + takeWhile, +} from 'rxjs'; +import { Question } from '../models/question'; +import { Answers } from '../models/answers'; +import { StorageService } from './storage.service'; +import { CleanerService } from './cleaner.service'; +import { ResponseHandlerService } from './response-handler.service'; +import { environment } from '../../../environments/environment'; +import { Category } from '../models/category'; + +@Injectable({ + providedIn: 'root', +}) +export class QuizService { + private apiUrl = environment.apiUrl + '/quiz'; + + constructor( + private http: HttpClient, + private storageService: StorageService, + private cleanerService: CleanerService, + private reponseHandler: ResponseHandlerService) {} + + public async startSession(quizParams: QuizParams): Promise { + const sessionIdObj = await firstValueFrom(this.http.get(this.apiUrl + '/questions' + this.convertParamsToUrl(quizParams))); + /** No need to poll if the session is not created. Likely means the queue is full */ + if(sessionIdObj.statusCode !== 0) { + return this.reponseHandler.handleResponse(sessionIdObj.statusCode); + } + this.storageService.setSession(sessionIdObj.sessionId); + const sessionObj = await lastValueFrom(this.pollQuestions(sessionIdObj.sessionId)); + return this.reponseHandler.handleResponse(sessionObj.statusCode, sessionObj); + } + + public pollQuestions(sessionId: string) { + return interval(2000).pipe( + startWith(0), + switchMap(() => this.http.get(this.apiUrl + `/status/${sessionId}`)), + // takeWhile((response) => response === null), + filter((response) => response !== null), + take(1) + ); + } + + public async getScore(answers: string[]) { + const answersJson: Answers = { + sessionId: this.storageService.getSession()!, + answers: answers + } + + const headers = new HttpHeaders({'Content-Type': 'application/json'}); + const scoreObj = await firstValueFrom(this.http.post(this.apiUrl+'/score', answersJson, { headers })); + return scoreObj.score; + } + + private convertParamsToUrl(quizParams: QuizParams) { + let url = `?amount=${quizParams.amount}`; + const catIndex = quizParams.category; + url += catIndex !== 0 ? `&category=${catIndex}` : ''; + + const diff = quizParams.difficulty.toLowerCase(); + url += diff !== 'any difficulty' ? `&difficulty=${diff}` : ''; + + const typeIndex = this.getTypes().indexOf(quizParams.type); + url += + typeIndex !== 0 + ? typeIndex === 1 + ? '&type=multiple' + : '&type=boolean' + : ''; + return url; + } + + public async getCategories(): Promise { + let categories: Category[] = await firstValueFrom(this.http.get(this.apiUrl + '/categories')); + categories.push({id:0,name:"Any Category"}); + categories.sort((a,b) => a.id - b.id); + return categories; + } + + public getDifficulties(): string[] { + return ['Any Difficulty', 'Easy', 'Medium', 'Hard']; + } + + public getTypes(): string[] { + return ['Any Type', 'Multiple choice', 'True/False']; + } +} diff --git a/frontend/src/app/Quiz/services/response-handler.service.ts b/frontend/src/app/Quiz/services/response-handler.service.ts new file mode 100644 index 0000000..2c5493b --- /dev/null +++ b/frontend/src/app/Quiz/services/response-handler.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@angular/core'; +import { Session } from '../models/session'; +import { CleanerService } from './cleaner.service'; +import { Question } from '../models/question'; + +@Injectable({ + providedIn: 'root', +}) +export class ResponseHandlerService { + constructor(private cleanerService: CleanerService) {} + + /** + * Session is optional, except for the success state (0) + */ + public handleResponse(statusCode: number, session?: Session): Question[] | null { + switch (statusCode) { + case 0: + // Success + session!.questions = this.cleanerService.cleanQuestionStrings(session!.questions); + return session!.questions; + case 1: + // No Results (requests too much data for this combination of parameters) + alert('Not enough data for this request, please try a different combination'); + return null; + case 2: + // Invalid parameter (should be handled by the backend) + alert('Invalid input'); + return null; + case 5: + // Queue is full, try again later + alert('The server is experiencing a lot of traffic, please try again later'); + return null; + } + return null; + } +} \ No newline at end of file diff --git a/frontend/src/app/Quiz/services/storage.service.ts b/frontend/src/app/Quiz/services/storage.service.ts new file mode 100644 index 0000000..61186b2 --- /dev/null +++ b/frontend/src/app/Quiz/services/storage.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from "@angular/core"; + +@Injectable({ + providedIn: 'root', + }) + export class StorageService { + constructor() { + } + + public setSession(sessionId: string): void { + localStorage.setItem("sessionId", sessionId); + } + + public getSession(): string | null { + return localStorage.getItem("sessionId"); + } +} \ No newline at end of file diff --git a/frontend/src/app/Quiz/setup/setup.component.html b/frontend/src/app/Quiz/setup/setup.component.html new file mode 100644 index 0000000..26d99e3 --- /dev/null +++ b/frontend/src/app/Quiz/setup/setup.component.html @@ -0,0 +1,35 @@ +
+
+

Quiz App

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
\ No newline at end of file diff --git a/frontend/src/app/Quiz/setup/setup.component.scss b/frontend/src/app/Quiz/setup/setup.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/Quiz/setup/setup.component.ts b/frontend/src/app/Quiz/setup/setup.component.ts new file mode 100644 index 0000000..bf28d90 --- /dev/null +++ b/frontend/src/app/Quiz/setup/setup.component.ts @@ -0,0 +1,66 @@ +import { HttpClient } from '@angular/common/http'; +import { Component } from '@angular/core'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { Router } from '@angular/router'; +import { QuizService } from '../services/quiz.service'; +import { QuizParams } from '../models/quiz-params'; +import { SpinnerService } from '../../Spinner/services/spinner.service'; +import { CommonModule } from '@angular/common'; +import { Question } from '../models/question'; +import { Category } from '../models/category'; + +@Component({ + selector: 'app-setup', + standalone: true, + imports: [CommonModule, FormsModule], + templateUrl: './setup.component.html', + styleUrl: './setup.component.scss', +}) +export class SetupComponent { + + categories!: Category[]; + category!: number; + difficulty: string = ""; + type: string = ""; + amount: number = 10; + + constructor( + private router: Router, + public quizService: QuizService, + private spinnerService: SpinnerService + ) { + quizService.getCategories().then((categories: Category[]) => { + /** Setting default values */ + this.categories = categories; + this.category = this.categories.find(item => item.id == 0)!.id; + this.difficulty = this.quizService.getDifficulties()[0]; + this.type = this.quizService.getTypes()[0]; + }); + } + + startQuiz() { + const params: QuizParams = { + category: this.category, + type: this.type, + amount: this.amount, + difficulty: this.difficulty, + }; + + this.spinnerService.setActive(true); + this.quizService.startSession(params).then((questions: Question[] | null) => { + if(questions !== null) { + this.gotoQuiz(questions); + } + }) + .catch((e) => {alert("Something went wrong, please try again");}) + .finally(() => {this.spinnerService.setActive(false);}); + + } + + gotoQuiz(questions: Question[]) { + this.router.navigate(['/quiz'], { + state: { questions: questions }, + skipLocationChange: true, + }); + } +} diff --git a/frontend/src/app/Spinner/services/spinner.service.ts b/frontend/src/app/Spinner/services/spinner.service.ts new file mode 100644 index 0000000..477a7ff --- /dev/null +++ b/frontend/src/app/Spinner/services/spinner.service.ts @@ -0,0 +1,25 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class SpinnerService { + + private isActive = false; + constructor() { } + + toggleSpinner() { + this.isActive = !this.isActive; + } + + setActive(active: boolean) { + new Promise( + (resolve) => setTimeout(resolve, 0)).then( + _ =>this.isActive = active + ) + } + + isSpinnerActive() { + return this.isActive; + } +} diff --git a/frontend/src/app/Spinner/spinner.module.ts b/frontend/src/app/Spinner/spinner.module.ts new file mode 100644 index 0000000..2a26e39 --- /dev/null +++ b/frontend/src/app/Spinner/spinner.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + + + +@NgModule({ + declarations: [], + imports: [] +}) +export class SpinnerModule { } diff --git a/frontend/src/app/Spinner/spinner/spinner.component.html b/frontend/src/app/Spinner/spinner/spinner.component.html new file mode 100644 index 0000000..944a7cd --- /dev/null +++ b/frontend/src/app/Spinner/spinner/spinner.component.html @@ -0,0 +1,5 @@ +
+
+
+
+
diff --git a/frontend/src/app/Spinner/spinner/spinner.component.scss b/frontend/src/app/Spinner/spinner/spinner.component.scss new file mode 100644 index 0000000..7fdd1bf --- /dev/null +++ b/frontend/src/app/Spinner/spinner/spinner.component.scss @@ -0,0 +1,98 @@ +.lds-spinner { + color: green; + display: inline-block; + position: relative; + width: 80px; + height: 80px; + } + .lds-spinner div { + transform-origin: 40px 40px; + animation: lds-spinner 1.2s linear infinite; + } + .lds-spinner div:after { + content: " "; + display: block; + position: absolute; + top: 3px; + left: 37px; + width: 6px; + height: 18px; + border-radius: 20%; + background: #fff; + } + .lds-spinner div:nth-child(1) { + transform: rotate(0deg); + animation-delay: -1.1s; + } + .lds-spinner div:nth-child(2) { + transform: rotate(30deg); + animation-delay: -1s; + } + .lds-spinner div:nth-child(3) { + transform: rotate(60deg); + animation-delay: -0.9s; + } + .lds-spinner div:nth-child(4) { + transform: rotate(90deg); + animation-delay: -0.8s; + } + .lds-spinner div:nth-child(5) { + transform: rotate(120deg); + animation-delay: -0.7s; + } + .lds-spinner div:nth-child(6) { + transform: rotate(150deg); + animation-delay: -0.6s; + } + .lds-spinner div:nth-child(7) { + transform: rotate(180deg); + animation-delay: -0.5s; + } + .lds-spinner div:nth-child(8) { + transform: rotate(210deg); + animation-delay: -0.4s; + } + .lds-spinner div:nth-child(9) { + transform: rotate(240deg); + animation-delay: -0.3s; + } + .lds-spinner div:nth-child(10) { + transform: rotate(270deg); + animation-delay: -0.2s; + } + .lds-spinner div:nth-child(11) { + transform: rotate(300deg); + animation-delay: -0.1s; + } + .lds-spinner div:nth-child(12) { + transform: rotate(330deg); + animation-delay: 0s; + } + @keyframes lds-spinner { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } + } + + .spinner { + position: fixed; /* Stay in place */ + z-index: var(--z-spinner); + left: 0; + top: 0; + width: 100%; /* Full width */ + height: 100%; /* Full height */ + overflow: auto; /* Enable scroll if needed */ + background-color: rgb(0,0,0); /* Fallback color */ + background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ +} + +.spinner-content { + width:100%; + height:100%; + display:flex; + align-items: center; + justify-content: center; +} \ No newline at end of file diff --git a/frontend/src/app/Spinner/spinner/spinner.component.ts b/frontend/src/app/Spinner/spinner/spinner.component.ts new file mode 100644 index 0000000..0962b59 --- /dev/null +++ b/frontend/src/app/Spinner/spinner/spinner.component.ts @@ -0,0 +1,22 @@ +import { animate, style, transition, trigger } from '@angular/animations'; +import { Component } from '@angular/core'; +import { SpinnerService } from '../services/spinner.service'; +import { CommonModule } from '@angular/common'; +import { BrowserAnimationsModule, NoopAnimationsModule } from '@angular/platform-browser/animations'; + +@Component({ + selector: 'app-spinner', + standalone: true, + imports: [CommonModule], + templateUrl: './spinner.component.html', + styleUrl: './spinner.component.scss', + styles: [], + animations: [ + trigger('fadeInOut', [ + transition(':enter', [style({ opacity:0}), animate("300ms ease-in-out")]), + transition(':leave', [animate("300ms ease-in-out", style({ opacity: 0}))]), + ])] +}) +export class SpinnerComponent { + constructor(public spinnerService: SpinnerService) { } +} diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html new file mode 100644 index 0000000..363b1a0 --- /dev/null +++ b/frontend/src/app/app.component.html @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/frontend/src/app/app.component.scss b/frontend/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/app/app.component.spec.ts b/frontend/src/app/app.component.spec.ts new file mode 100644 index 0000000..624c369 --- /dev/null +++ b/frontend/src/app/app.component.spec.ts @@ -0,0 +1,29 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have the 'quiz' title`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('quiz'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, quiz'); + }); +}); diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts new file mode 100644 index 0000000..57d5d9b --- /dev/null +++ b/frontend/src/app/app.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; +import { SpinnerComponent } from './Spinner/spinner/spinner.component'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [RouterOutlet, SpinnerComponent], + templateUrl: './app.component.html', + styleUrl: './app.component.scss' +}) +export class AppComponent { + title = 'quiz'; +} diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts new file mode 100644 index 0000000..746ac02 --- /dev/null +++ b/frontend/src/app/app.config.ts @@ -0,0 +1,12 @@ +import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; +import { provideHttpClient } from '@angular/common/http'; + +export const appConfig: ApplicationConfig = { + providers: [ + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes), + provideHttpClient()] +}; diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts new file mode 100644 index 0000000..e9f8430 --- /dev/null +++ b/frontend/src/app/app.routes.ts @@ -0,0 +1,7 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = [ + { path: '', loadChildren: () => import('./Quiz/quiz.module').then(m => m.QuizModule) }, // Lazy load QuizModule + // { path: '**', redirectTo: '/quiz' } // Handle unmatched routes + +]; diff --git a/frontend/src/environments/environment.prod.ts b/frontend/src/environments/environment.prod.ts new file mode 100644 index 0000000..b8df7ce --- /dev/null +++ b/frontend/src/environments/environment.prod.ts @@ -0,0 +1,7 @@ +export const environment = { + production: true, + /** Connecting through the docker compose network is not working for now, so I'll have to use the localhost */ + // apiUrl: 'http://backend:9090', + apiUrl: '/api' //'https://api.nosotros.ianvink.nl', + // apiUrl: 'http://localhost:9090', + }; \ No newline at end of file diff --git a/frontend/src/environments/environment.ts b/frontend/src/environments/environment.ts new file mode 100644 index 0000000..53a7aba --- /dev/null +++ b/frontend/src/environments/environment.ts @@ -0,0 +1,4 @@ +export const environment = { + production: false, + apiUrl: 'http://localhost:9090' + }; \ No newline at end of file diff --git a/frontend/src/index.html b/frontend/src/index.html new file mode 100644 index 0000000..195d95b --- /dev/null +++ b/frontend/src/index.html @@ -0,0 +1,13 @@ + + + + + Quiz + + + + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000..35b00f3 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss new file mode 100644 index 0000000..7b1e05d --- /dev/null +++ b/frontend/src/styles.scss @@ -0,0 +1,27 @@ +/* You can add global styles to this file, and also import other style files */ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +html, body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; + display: flex; + } + + app-root { + flex: 1; /* Makes the AppComponent fill the available space */ + // display:flex; + // justify-content: center; + // align-items: center; + } + + :root { + // --z-base: 0; + // --z-dropdown: 100; + // --z-modal: 200; + // --z-tooltip: 300; + --z-spinner: 1800; +} \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js new file mode 100644 index 0000000..8314e1b --- /dev/null +++ b/frontend/tailwind.config.js @@ -0,0 +1,11 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./src/**/*.{html,ts}" + ], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..3775b37 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..a8bb65b --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/frontend/tsconfig.spec.json b/frontend/tsconfig.spec.json new file mode 100644 index 0000000..5fb748d --- /dev/null +++ b/frontend/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/scripts/LoadTestMultiple.sh b/scripts/LoadTestMultiple.sh new file mode 100755 index 0000000..0692369 --- /dev/null +++ b/scripts/LoadTestMultiple.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +start_time=$(date +%s) + +for i in {1..6}; do + ./LoadTestOne-Silent.sh & +# sleep 0.1 +done + +wait + +end_time=$(date +%s) + +elapsed_time=$((end_time - start_time)) +echo "Done!" +echo "Total time taken: $elapsed_time seconds" diff --git a/scripts/LoadTestOne-Silent.sh b/scripts/LoadTestOne-Silent.sh new file mode 100755 index 0000000..a76f8b3 --- /dev/null +++ b/scripts/LoadTestOne-Silent.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# Step 1: Get the sessionId from the questions endpoint +sessionIdJson=$(curl -s "http://localhost:9090/quiz/questions?amount=10&category=23&difficulty=medium&type=multiple") + +# Extract the status code +statusCode=$(echo "$sessionIdJson" | grep -o '"statusCode":[0-9]*' | sed 's/"statusCode"://') + +if [ "$statusCode" -ne 0 ]; then + exit 1 +fi + +# Extract the session ID +sessionId=$(echo "$sessionIdJson" | grep -o '"sessionId":"[^"]*"' | sed 's/"sessionId":"//;s/"//') + +if [ -z "$sessionId" ]; then + exit 1 +fi + +# Step 2: Poll the status endpoint every 2 seconds +while true; do + status_response=$(curl -s "http://localhost:9090/quiz/status/$sessionId") + + if [ "$status_response" != "null" ]; then + # Extract the status code from the response + statusCode=$(echo "$status_response" | grep -o '"statusCode":[0-9]*' | sed 's/"statusCode"://') + + if [ "$statusCode" -ne 0 ]; then + exit 1 + fi + + # Check if the response is JSON (starts with '{') + if [[ $status_response == \{* ]]; then + break + fi + fi + + sleep 2 +done diff --git a/scripts/LoadTestOne-WithParams.sh b/scripts/LoadTestOne-WithParams.sh new file mode 100755 index 0000000..42d65f4 --- /dev/null +++ b/scripts/LoadTestOne-WithParams.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Step 1: Get the sessionId from the questions endpoint +sessionIdJson=$(curl -s "http://localhost:9090/quiz/questions?amount=20&category=27&difficulty=medium&type=multiple") + +statusCode=$(echo "$sessionIdJson" | grep -o '"statusCode":[0-9]*' | sed 's/"statusCode"://') + +if [ "$statusCode" -ne 0 ]; then + echo "Exiting: statusCode is not 0." + exit 1 +fi + +sessionId=$(echo "$sessionIdJson" | grep -o '"sessionId":"[^"]*"' | sed 's/"sessionId":"//;s/"//') + +if [ -z "$sessionId" ]; then + echo "Failed to get sessionId" + exit 1 +fi + +echo "Received sessionId: $sessionId" + +# Step 2: Poll the status endpoint every 2 seconds +while true; do + status_response=$(curl -s http://localhost:9090/quiz/status/"$sessionId") + if [ "$status_response" != "null" ] && [ $? -eq 0 ]; then + + statusCode=$(echo "$status_response" | grep -o '"statusCode":[0-9]*' | sed 's/"statusCode"://') + + if [ "$statusCode" -ne 0 ]; then + echo "Exiting: statusCode is $statusCode" + exit 1 + fi + + # Check if the response is JSON (starts with '{') + if [[ $status_response == \{* ]]; then + echo "$sessionId: done! status: $statusCode" + break + fi + else + echo "Status check failed, retrying..." + fi + + sleep 2 +done diff --git a/scripts/LoadTestOne.sh b/scripts/LoadTestOne.sh new file mode 100755 index 0000000..a85eab8 --- /dev/null +++ b/scripts/LoadTestOne.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# Step 1: Get the sessionId from the questions endpoint +sessionIdJson=$(curl -s http://localhost:9090/quiz/questions?amount=5) + +statusCode=$(echo "$sessionIdJson" | grep -o '"statusCode":[0-9]*' | sed 's/"statusCode"://') + +if [ "$statusCode" -ne 0 ]; then + echo "Exiting: statusCode is not 0." + exit 1 +fi + +sessionId=$(echo "$sessionIdJson" | grep -o '"sessionId":"[^"]*"' | sed 's/"sessionId":"//;s/"//') + +if [ -z "$sessionId" ]; then + echo "Failed to get sessionId" + exit 1 +fi + +echo "Received sessionId: $sessionId" + +# Step 2: Poll the status endpoint every 2 seconds +while true; do + status_response=$(curl -s http://localhost:9090/quiz/status/"$sessionId") + if [ "$status_response" != "null" ] && [ $? -eq 0 ]; then + + statusCode=$(echo "$status_response" | grep -o '"statusCode":[0-9]*' | sed 's/"statusCode"://') + + if [ "$statusCode" -ne 0 ]; then + echo "Exiting: statusCode is $statusCode" + exit 1 + fi + + # Check if the response is JSON (starts with '{') + if [[ $status_response == \{* ]]; then + echo "$sessionId: done! status: $statusCode" + break + fi + else + echo "Status check failed, retrying..." + fi + + sleep 2 +done diff --git a/scripts/benchmarks/1. Queue - No params - 6 sessions.png b/scripts/benchmarks/1. Queue - No params - 6 sessions.png new file mode 100644 index 0000000000000000000000000000000000000000..8d600d1f989a42d398cb50857a3e2c981c2559f6 GIT binary patch literal 63314 zcmb5VbC763kf+GH0%KXr+sty?6)QO020Ci%5J)sU9L{pBgv&dDz0+;(-`;y^nQBNC?eq~ zBnpiQG-D}&jTiWyM=je0PwO2QI-Xz8rna>!9hQ7Gj!6wU)?)7)!v-PtkPT=7 zgp`tw+Z~@ZpaWQ3%8u!BT4Hy!AbaU_^FJ1rla15Uq=x+r$lA7$G_WNWw}UOKqC1*n zTQHN0+Ji)z47>0Vt+Y7exm>FYtG}R?2mon_#-|~QOsFv0IN8M8&0Z{G9@!R;+r?z` z)rF3&d6p+OxcO~$FWmWkaz)SVD!U8$&!J%s`oqhTaDLq1TEC9@k5!$Of!>@;B^9Kb zt!En_rj?N!+LwdaE}YQHw-$%z>R_0qC40r#F6dpOqx>fBlp}px+u32&Ug3K)W!g^v zo1O0H8f(pw5wsNfa#zRNk(nS7*KkRi>a=F@yzkRQClauGAWEr>=}<0Z_)C4P(} z7p>Eic2b0=|Aqe;pQt~s1RrJdfLsra8J(!Rc@7^}(n=fmeNh~uNO7adPy^(}xtoGH zHk0l>gWWwwy^Rq=%-hTqdTABnI`(;P>+R>+IJoC4pcU2cX3+{I<2Wcg);6{r~TpzpV*_~u#o|h!NT1WhA^MgkVb~`^3wOX@-37ish z-*pfE^Fu63sko-w<_DWfr)R4BPdt0mo$cYUStJP}(Wghi!vxaTenRIE-FJ76bB7rm z2vi0DLb-#;1)DVCZJmkhNm2W4lZP&p`YgJOWx`C`j%RcW!UZ-fpZoclMHmw<#{xYV^@k${9{Pq5wmokK_gFc-}=42Lq z^iXRGs)gF>2$@2DC39qDI>~@UXTPF|RM6tGVj`EKC}-r)D}|CujL!IpCAcJ{b=Tww zQ!x{v`1ncly%Jz-rg+JlX3U<3ETa^0HqX0rmJ`{4uUFV`!`=^?25p3m69PM z@qi-N`%c2vhc*k^E*#IrLbFZvwzy#L6Zc9-lYk5X_>zD+HPdmB`!MQnuP300;IT4f z-^1$yZ{^CiP_$*V+i4aRudZ))Q?d&jWTbrS+?+@Px~m0U*^Dqqqi)(sm#%71%v90L zI<~T~E^nGRSs(Y>Oj{4)l-v8G4b8P{kg}5dU^OYXrG%ga&(|I;Pj$T$iG9voP9bX7 zVcjlXh$TJ!<{V?STq>4=(41|9gg@@Nt7(Szb>47vPHha5UF<>Az*rY2Qv*$>u>4N=2B#t7N4_XU>rO#&{)3KbS~xI^FwG~FMmAPXcI#1hqtv3+r#BOn(#?aGj&LO^Ky6p zj96!+j(gsCZb=7*79%Q%iol%}mjfY19nbg!OX$^1mGR|9kLC_t zzTeg`kE?b@Jsq)~8r2@wR$^}R)$)(5^>(}~%CI$LG6q_BKkd6g(Y?vm?hX-UHCL-s zy_L^(ZuV^QYAsJepiL4)f`&s3x=$}oHl%>ufCHpkBsOsv&JI6whmJu5AD4^evHY%N zYXfL$PX)G{*axLfbhMlG1U4rL#ghY1#@#*@p{5i~mo{a;ozqPZxy|+P18bIy>Uw4* zGT=BU09j`)_7_mUORY77BctEE&b%I_QMuJ6n|-TKui(SoZC{J z<_m;&5);*5k&ihHp+^)eT?V8EP?9pG;}aVjTYn1o5{)pna$j-i{UhcWEk|&J2Z5B? zI0l^tl{l<%NJxT8Sur|IimhIsL#2$rB6e+xO!7jVLUbwjIstZC5w>=R6u2Kpxlb`; zR|)^=#QTB4QlWB8>{%9ZNCEOewrz@?UI055-y&qJaoU#!4@i&~i@W{;^b+VjDm(>bt91HP4f#{!vn(`_x3|{czd}BieZb$9o5(FjvWnhIX%}TBL1sIiOH3v{zy$ax z{#LfZNHOoF?ZIGVi#ij+jnsQq_?m~JsM5=L>M<|$cM{iiTqYfbUlA9qcsJubicvRJ|Xn1>W}7hN&41Fclccu0keaZnKH*i0>-tzxt0hr2~XU2jlYE>9$YXa2?p(M)8$x zty;gtjJlXEQOwnpNlz2S81~LoitA19deHm||B1NUkv*s2+NWCuad}5r-Jf{-zQ1#R zw(){FqOh=$rjyZy`Jo(_#a^{t0xrbNCat@!!dN0{^Ky{;q@<}&FzbNS){!!TS6s`R zosUFE?8 zNYd6(P{=Qa2u!s-G1IvWB^~$QOo*6A{6+Dr3E40Pp0&&$;tJwqOZH5D1c);yo`XCw zh0)anL5Gag=XJX<@-r+?xGAe;$ZD6kOrWwiQXw&tv5NwvNidhAIp_AAyV=x}e7Au^ z)#@aY_#3$S2MYkE0g>%@6e!?8X0;7AMlO$Lq0MG=(gBg{P5iEp&^Qg+`(?7kjq(K# z`$iU%?G?g8n)c+KB#+gTI(fy2u?sII)-f3QG%a^h zj0C@PLOD=7M=2jhU-Vn)-A3u4;e_%kFJB>!BT=*-?pMqoZMHD-wsa*|y5f&Pyj7P< zQzukOs>1orCL{5o1^-hmn$YmVL zy&k;w46y{m8({TIo>$@v!o9P_#^BFeoej5CqQN~T7VPLNro>SgSyfb{z5d-~@18yH zC0*$~JzaZ_2QkXLdiNns8%O8>?68`NgrhrrvKf~J6A>uF4DahoBxMGra=xzcawvaIoe;+J5ylU(Mkq6`f~70 z{BU{%GfjPIR0Om(l;u_A#@v*S%zq_yuy7^uI_|9K-{-?76A>$?3Tu}LwQFd3c4`ZN zKzgL%BMAc>nzkxpZZ>LcIy!PC)-GJktzT00z<| zFy}d>G{^bhs5Y61BXiO^LW;b^-%G!D0#4Zrb-x;TZTMng-LTqldGWtTgLBBc_ZR-R z77`Wy*UIS~gW(;+a=kz#T0{EhPB{>JEPybb&I*B%NkQ!}^2&B20y*#-KSBcUrms1cO_rmj#QykyA%>9M7H8}!wvj&7r3ltic{m#>J^e(#T5E=jZ zTZQ2(Cw6}Ua{J^i^)swUxWtFFmc}kVMc^`USN(YzMzR!7g!D<)5(*_?KC z&Dgwu)Y#{}6{quMR|zC*@ykcg>DQ@GxjAaOe-diSj4m)Dv1a(&W)CPed&e2+_PER? z!RUIILxEugHO7(SJ9(JR=F0G5UgdSIIC-8VZtR|t_&p6b4WCK@&asUnd@M$msY9A< zD%l@%snVy=Yudas*`Y|BYWepdUTN!KJ0w%vBJTx(a=*q${2^6RKKA73Os>K8Nd%6CBw%G( zmkxrCtPKMbN|kUndYPz%N~OwE6p^k)dTDbFGGD&?)SRa_ut2($+ej%2FSjX#>e5CR zdXM@y)zBd!wx)aj^VjxeGxel(gU=BOm++b!DbptJcsQW(W{4 zKLi6*6}0|-8cu`Ng!9~{1&Z(d%ZTWtF_D9n*&T8kF=fM zYrrAEEw?zbWrATuVb{?bP6dvtM7Lbq^0LJ7`Z8esX{_-hkS>?xdW&89qOPZkQ^tVs zXEMG_ub>jJKSQwu3uaA$2woVOTB|jk73sh>sJ1R)kD56t6a&$S=V;S`eLB2bAyXR5 z+?ni|fwaAt2Ag-VYb9~_>giDol6*&keV9iOIv9q+J1eMI>1XWgB24Z)ycLchm5);&kOKr@Oqg-93)-1?u@yJn3rX`#3Ev0t!tVfT zybj(pwt>1)l#c_s_-yP!%v4B&>tYzyOBdO#2VJ<%Tk(&>X6hf06VA^yi`s(Ag!!G| z0Sit50yb;I#8wq&U(HsUHBfZ*tV99QXO|EW4%ec zqyE*|>7SrmVGs}N&J9uqAEKZIQHZ$*5vMr7W{g&&<8K{xt?&cwm(foEfaz?B2vYW0E_DorPk}-k(ZStLOd9&hWO$uC|8BMA zlI-m_`iL<3E_1V>*$}`yPeZeD(jf>F`3GE^;MSyL?5sldqt0;2POhCoSo}qEoa%Bv zH7_eY&=)@J#rvZQ_;>pG{vduQ7%|@W;8HBjh@AjM`Ho(S&ae#k`+-&~lo8`9*+KL` zNKzlXXBEhiG~HCj7A%J+K}gL9t4IBugom{cCcZc^Yvkni%_OvHB=Ia4rEPSS5n~mL zKI8-!d|-%}8r@XhZg zE%X{v6*me|DL&}@vvK*YFE6feRI zy^jf%V&&m}hMdCfSI)g!G^w8b**F}EXzt8KYr!tK&Al+IggcuzgbB+YIIqLEHL&-^J(PFJC^6t zeZSA^@-{qyB4>g?O(X?-b?t$%CKT8gsGFVn;W=BYeL8En-!4i-eCo(MkV2fV2X|g@1a5EA zyx`SNONg~032u&qTxxC=Bhks&diI41)R1t-iyZNN%DR`TamD?@b@(bWreB@7+wqjY z1?2&$U7iN9RP?sIm9dQK30N*$7MdZc8Wk&Y28`43-KnMHt7a&xY>awgcE3OG=rn{P zI@Lc|WN9o1cCCvlm z#TL+5tC$rvB=e_xBON)rHMFZd+VG6(DSj2%;NizJF?v_3~ALy0pI{is7fM@3C^!Bp{~`lx*t>_ zcQXE%G@H^K{qT0i!SxVRt%cXPz{@SYtUDbO{f^uCR=z))eWcIcW<13M67>Lb6Yege zU038n-kC3wHc~T3H#Z-Sxc9*ju-QjKGu6VL`GzIxE`6dL0|@WHe_OVci}9Q zHP7a0Z#bXzW+7CB^Fw(yV_d3E3y!RT1-gCF=}eWQ5E7raZn$NUorP|UZ|BCzM^a$w zlmLi&O4UO@)ij5p)4ZysaJp4fMZ;x8FeIOX5q`}f2H$05gE0XB51X^|*;6;6FfNC| z!)M|$5B1Z@Qwt~c8eOwu%@&H;sD!}ebT`L3Peq?6{sx~az|^jg>+MW#vd{O?lt0Yi zioX-D)$E*9WQ!48r|PX2A{(Mz+$$xho_5hgD-neS-(b zM&glui3E%-WJ(5Lrl!4UmPpGKJfF*lg8o0^cAElU5=V7qC-h1i zc~{M~eZ&^gfr|Yl*Y0HSnm}S6w9t>#DQ_eZRG}o-NPkq(#YvK%km-t~BNjW}`mV`d zFCvAMTx;!57oC}v&^+JD^XkeR5F_8GA6Aq=@L-=Zj}O2zKUdCKK65t@4HnG5OSXr4 zj?xeKD2y8Kcfh9=+wD2{HtWEqIwwbbKR9QijA|a{%ZNVThnGI5QmzUsX1S5XCbPM9 zo<7`WDg?S4Jpi$oHrf4uS1P{qJYM5Ehwj*3?w&TQK5GQo`urcfzAJYlTWAeGxzI_$ zV|s>Dl~^C{>ZKhP=EveO-4P=(UBXbs7>^WO^vWdSB}QT<6Qoir-gG1}upAl5WtZtc zy)UiVr_f@WW3VCV!7X1$7YKM8d`RGvj1q6=%`a?r%R;*EJYpsmpMdz^-R^hog^xV8 z6QNNDIg5X~*S#m_?-akfl`@W+mN!UHULJO*cW$8tR^&$dj*IX0#2(I4Ixj0X-rGKe?i@3< znmSX#l0mtBs$+yu^)9mtZbBQ|RjpSV_&L)>b1Bcy9{Re&))ePTnwpbCUZC|4rRc-$B_TbtB!QY1 zJ-?79yd3Cfb>O96FGlL1<6~_jbRNBD}Jy z45G*XB{MYzm&~}OtW_J~Hqd8UOiPi`ol22hf%qE}PbUw>VI&C)uVP8;t}bZ)zqJ4l z&^8V$trVro^3>4Yy@Rd{%t$-q=WGm=nTJ-Y@;G|1m~PMTb6c1d(BUsZvHlr}quop4 z{%M zppU_3U9SL}v9(ilYvE5KSohrShZ_-h1Ux#G9d4crHc)$&bU9^W?WC3@jKpLUwMpxT zE|^EYhK2IJhHdunA(`R}>Rg>M`2LlV?$=sSyxH&Q$lkT34F$g>uBDbNj)N9z3iBjzr4a=BywNW{{Ggv*~fE))!qIP`>t&F?Z3*b7>Y9L z-i85plEK*j=u$1(@~a>)j*8j~iTsO~KG4%*sb&i! z=b-q>&xnng`!t_3SQ@XFBHl)kxX;Y@;mOvQ42B=< z{B`xlsQ`se5k@~4O_vle6p-n{i~X^*jc(H=F69>6zj`LE7|*f0oW zHSfw6Vq%_b_uXUS=T}Y`GAm6X=orc8QAiOAM<3JTl%tsL(O)gYX>M(@0G^W9iBy^E ziRIe)hB50b3F#`36=(vjH>w%AS9ovoy&#fSA9NcZpVp`vZEG@Wfq);ewrj1#oVTl% zH;)3kIe%p0G}6DgpRTx4?D~+^On=u};&Plxe%l9WG9E-_fExK*;k1`04eS1g>O;F* z3S%d_EA3bR0Rs75D9$ZS_Mc*qUsZ@U8L2j+5Y5o*rOV`=9=Qp^++4{0IzwZF8q&kZ zc)aBezEe)f^U{g@N6nlB)!y*u><4{_Zr_uU(&ZK(M|C$G>S4?Wq&3dRKD+o}x2YX3 z8&aGlwVKup21(kDdUP8(_!&JS&Qz(~rN~t$CTEyIxkuXr{mo94MtZmt#9$r|yK565 zP}@0J6jo$B2ZeZO@TrxU`xpAU*1+5m_9*HE1KZ>frMM6$tgs{UxzvdK1sQ~@>k{Iq z^$l?&59yzfxv1wOG4M7sqtn>x0Sk_xhdazc@#M?Z zRp#`@N(iNM_mKOjh8%Lzi@)pIk258P_#(a?5 zveK7ffcS`HF9kT50Irx02bfVWH-0%+!X4~ir_v3pgHODlQ7?2nW& z7O)Yi2Af(zt6z*3k-@jp47s{8n?vZan=xf8c~{*2=!&_O2xXA{a#$ENF}=}deO!GO=i&thr2`74RCxgiK^?_V9i-D9AsURa)*=~jb%QH;LJryl z4*xx&!&?X5aEGq52(%#+#188|aW+ zMI*xf#9}gdO?*nYku{Ik7rn{nbwG&q-hM{xXH%6LmY!?2`Mp!(^wYyuNHx?Q9x=v*?)z&qQSYe%P5IboZBY*H^#WE2%nc-R+*lc5>R+pMc)uc? z-G2rsd!lV<2j8U;$AsFRCp6Bca z;sUDF{r_@!Io&qK$QA>h1Gh%!jnQ4Bz0$3dzD1Lkozqm_nnP=~o#^|ft= z?B}lmv(HX7@X=-jNZaBgANEdr4}lki$uUN`5t^Wm18)YkQ=(yD^Ram%o)s5Hdx;yE za$gwFwZ0%?0fSM|xvu%yT=v;m@+UO)~uJ2x`86JTt=-R;5EQX;>S|^V-C$i_T+VFAi)O=F9RaHY3OfSqJr10bIf%szk(+wb zvrhHRYYyOuObwMwi)Na^oLH7nr-wJyv3E9h^e|+)c0@e2u*ubK^0L&^gPS+zcX?6F z+i%EkM@Z_4;Vy{su1X=Rg%V;oDuLFYvBzvR?YUIr`Q?Mtv#R3HD92XMb9gBH*b#m@ zd5#6PKW?R=a@frur^GPg@Mw{b%;X=U5yUh~&p-mpYm2u8Y_u#l zDxBMSm4YfMI++SFG@mo02DwN{b{Ahd`t(xBERz0OC&Hy3V~#Oww&2`AEL#AB56>#e z7@P!IqYytv)H+g@vi03CO?qeHZXy9jSDew0}4FaS1lVbO7b0(*xC)pH3~ z&<|l$9(X#7W$$X?owl(bd~SudcOA|CIZH#mrDjN7HEhx@22S&-dNi>R)-&6tYd^0g z*Zao2kP4&C3iMcKgB~nfgbS~OkvNWu&9HJ#{@V`0S)Es3$OL_EPMugB<5}10hzPMH zMhun`hy026u*9aXGY|c#%;Yy2iiaOe#elV((5!q`Vy8Wea;h~mnPSbqeMd}ztCIn_ zGiK#dnD$^$s~P70;IxPwTyF(r8i6VaH!iQgM4B1iAF~4Q@CYe8`pv2qL z1N7;xT};*pjN>IfwZ0~}cSz2(iO|elty2&|UJ=tdOoqQ1hTjp!9xBL0u=5VwBPi~o z+H*mpCt`c=x(Ao&y4{fV>Vwsa6c}Pv-)-9FY`C~D+xt~=DVl8b)^vIU*jKkA`zv7# zTLJvuY8-}tr*VKCqI#H`>z-E~xaXU+Uk_@Lh5?ERL9)r9^b>MMtg+DXrAXR^z?(5q z{}D*iZCFX^D6#44^luEL#z6!+bLizK%csC866;5Toy-%*Yb0PI9hdT)bFk@qUHzbs zo3#hLvSS-A=WorC;4+p8q_CchnPjakIN7^U8e>xWNQW{-R87XR@6^9%BOsGv(z=Jh zVr89Fey_7y{p}T;-(K-6!7D1l(rlLp+X~|ChBGube65tH2T2LP@5gO~u3NU`uK^L< zO^y4}3{kuo!Ah;NTK{yqBpNTC*Ip+}tAHnLb-Qk^< zf*%lF#{Urw|Z0xb=34(AA1j5;bEbinCzkCE*A4A zB1|v(9)L1dk@GwPDW=?>KO$sSu|V_%lKgQ$f`4tnR43bJEHR;lK|O1L8gz(?3c&LQi_Q6%J}7;1JBG#UxUZMcg8k6 zfd}Bu;tXB_0yb@^1+|b@;f~~2$JFZ~;0k;oR8qCtPkV7lF+i2>aKbW+Sc!K=xP1Zs z-?!yr#>V;ELKjBwvwyjDgT!v_N|ZRbU34w#XFaj02;bB0&Fh3 z6pl{@#~a!C%NiYT6R1WP0{o6DC$>!az^x6sFv~0d@YF)=j%H-N8O8E1I67cbN}s~P zWoOiU1JK3v(B9YQX^de-C16s4HM*-Uzb$g9HPn5viaJBZz#Zb~6Pw}WUGAa_K?pys zW=!&dSXm@HQuAS5d~8;Ie!6lfZ<5ecSg4x*W>rD<6Jdp_{`7)^j~ZW>Y-W6Pa^PH0gmaC?LgPH~Z`y|Jx~K^}IssK)PH%A^9 z76%A-&{)om5s1G}lZId;(!rgbckMTo3wC&=9)E{Le|gEnfd$uKNo=2m+wdC2EH)z; z_JS^&;=0cdIO7XFc&%kKYM>?ot)PSt0#2vopX$?8jj8nt`zISzt8eHMu9jjfG~;50 zi}lQelQ2$?#(`kVEUmj!HosbD%9X}yHJRd5tN&Zh+mueIReuW_8Xn$W&`WYIPoa)3 zYc5I+kk$JG!c%KTaIgh=qCx=Vo_BSyBo}N>!-1!c_;}lOE7i^l$2ha{S^piaeDA+tmxWu=!lz0#D00rjy@_g!4$y7} zlCl=$TEhDNNa32>X#ldc{{sQ5(FS4pMMzx%`DD;4b9tdb_zA^`m&7)m>m>Jr0JD1~ zXpTCnBE`T)H%ys8ZrkbKTtl_5he;0WO>YXgETfW!Iu_Ofcfek4P$eaX-4%q?pTe_I zlgdx48<9Nk??FgvM+^idRhvTByQv)9)DCm@nA_P2KeD%Nhs1()5kqO@!MQvh=0o%| z*-5a-)^YVBz%@7_W;Po9P^U^WxG5jr#E$lkIqTyK&}7}1+4^3WKJ$n;T5hbK&Qlt? zA&N(BGQs-ELq5frITH;XXMwh^^dX-iSU|W+K!W$M%#y}N)2Er_Z&ohqc`uW+N6)NR zLoJ3eOxCPlof#>O9QQA<$qRQGiERAaBglMU_!8-NtHpJf)31Rn{(JA0K!66} zUKq*$0&z$&>i_+&&-wr3mBBu{fd$2|X^SCgq+KT|Q`o7Qkoy(-y2i&IRyCNz6;9Cg z!ff~Z=4x(&8uI@uv6~8OqecA4?t9ZVoqU2&Q<~|Ic3u#j#F8Aio8s;w7mF$A+UDeC zjpKrU_?}8jP8Sd5$6gO~RKvoL+aP`2jQlU|X6;L+fv>jZXK%>BNCtXVi;#6iUV|s( zNp-KI3_yZmc_A7FTQsWde`+D%{fvJ;1SyyRV<;BtG9NV%GYNMXag_EOS5ONHvcU4& zAfJj1OP?6V$H@D=!1g|oXev0sPx7ac9crjE;ODWnoPd(7`zT!MXl(3JC65)i&{;%J+Dqu zN;xiTP9YN`L&W0x=rvhnH2=&Vpo3}3N-xt^ng7Ito5c&W`rPjOF$xRhRDC%p$Xo^h z;)7#fW}#rcSs|OPUow?Dj9UNA0&|!DHx>xV1^+*x;;re^c|m~W1b#jT>8|k^b`%QV_?fxza;(W7 z<>V#U;y?z7f(_VIl=DL>|OOg`(be>H@0O zgR8pXD!T!Bzd>DWRyP&{g;9#(MmxHV9;+-pY?*ZN1ioMyoDkCL@E|+(yRAwcQ_m&W z`$}W+^oH1kM&xG^YLG66zal!KTc<93Hq=p}rw*%0%b0q_>WWnOxz*kxmamJsq{d4s{0 zT!2zH33+7pnK|eqRYyyPrkCbdbOgE;H0Sk=nqN*!a+P^Qcezk*$Tr6DnYVD_XS3UkkK{H`y?kts?3}LjozRt?*Yb@q7g$^LhBzeuw_Bpj##5ABiXZU04PRmUySHP ze?A=w2l$zFM7{UOErgP6E>}P4|99{wY^5gLOl`ndY%MV=9qF|*8w2;_`@GHE8gs$9 z`1O2!9T*NE?gt=%l*u2D4>=7&7QTXv5@-U)WTy_;VHJfx&k zc@JfI&~U$|Wlh)fY)8inYrI5anU}1n4Wb8JSVbNBxR(=R7-sm-`O4kOpWKm;cr;qQ zo}Dx=y@p5y)CL3<=g~$vcBIpB$t1PlhcyTf_x+nbaZ;5m%q2BU>dM|18@-`+OY1I zX+DIchr+?OTS5Q0Lb$h4WT4^$dup(^Jc38_F6x3hBS$kQUZ;~w9ns>t`E9qtauy=K zhRedy1}^^9R<3Sk#^drw6aEuLj7P*DBNl`wv~}9M(vGUv%ExJDK~u?&Zrw!C;-RlC zGA(GP3*$9l-$GdOUJ?8nT98P2E)h#b$?y7edC*h`ScvLQgRi$AYnuzsl%B+Zvi8a~ zF&mv~7qcvU(N+zA+!NK(1@on`d!%22bj{72;ng-P*655MS1JIy78o}C{K3_GOfJF!g zF==2%mO#(1F6EBfX)K4?q9~Qa9y2Arub}~q%?bA^KO0}4BFf2Bb ze%C$ACF)HBPsdQ`TC2;U0lxyc!wNhzFx!VG^;V8Lvr0d-7&RPWMrQEe{$d$+8S%kB z>*ai8b?NNSGFT)G=ic_?7xdCy+6;Gdq2(0o?pVWgZU%3B=v$u?jYfIN~aSK*daQEOY z!KHxUkf6cc9fG?R4k2i82qCxx*FXg-5Zqk@72I8J?cTjl?{h}?x#!;bk3WnWYudY> z`FwME?{nnDm6{+qK&F*LpDXxE>Qx^;`r)xuG}0&U}}WkGQ!h3C8VIPi%L` zw=2Dm4==6{pyaaG9|hM}g=3~GH5Z%LiCM>ZI+=L*Q$k@qBmpm}5GWf7+50^u)MW~U z#3GyL2@#ud|NFVb;B+0>;>7Sf@DBb*VrXnFj>NC!{ za#97tzj4a4&li}i8y{Rt&{#+k*eT?9m7In6x(K(cckWw+Oz zYLVIz-N7t|{?t2`j^C>bk=u_AT1IsWs&jm6xlRz|-zKY))mY-b6{P(tJu)zE0Zy-j z`Dm>sLj6&_gI~@JS77|2UzH3sY9T&SSp6m|yQsSFk?TWlQG=cd83Un(u6(pKz!EQ@RyHUDm^YEl>t;d29y$M+&V~!>%@7($9wm94O8qUY@)iH+8II)##ayzfjF?fk{(k1>nsGOL-(*@- zS0!euc)Pu+9-CAOAZb|!?wSNo$i+9it!3H>HVyyF&0qZ@M5#;1)~}e%$F6W&!ER%u zxaW=ZWM|1nWHWPXcxs2bpA!m0B}>K?RBhODADOr6%(7!hxX0og4FbY+=2^y=l?>odM_2BCU#um0$cuiP8(r4L z$0Lj?OVOP_XJ~+d|J5fLHV;-Kq`o&wlE)a*1 zlvPIHF{H_OOX0u zkMm*-oiVS7lR6FDey^!JJsTSlF7n5|XmpVtIDj3g!q>-ec|$Sj5++4&ZhZfe%y>%) zZWhG|1x5QAo(q zd5e_?t{A=dPqw-kuN?xk#%WH6dqkO;nzV%KW!Jbk!k*!bJIsGCGe^WbjvW;5M@!z3 zls(i78;omY1qKr+mNKVk@xJ-4aY1v)>ZyDqW4l12C9M#@DaYx5X=q%z!gm*Pv zA{0wP2rCMpd2A+Xvn6V&0-qGPW?K#`WMF}`y(=gApuU-6P$V$+d6+);T+Y}xHrQUm z%ELChbkz^3JjcWZ-k8D|>>epDI$<=1KFChxjZe)H$jgYy9k%`Ove*xB(N`NlwO}9r zup*zaE$f2A+cHQ)SLXEzHnJNd4h<_gZT-cUlfNpz`VsHd`Jv6R5?LKyU}DE!xL}H= zwHKC(fl2bhj&S6eMl0Rrt66yt&XAS19^DDP2*upe(|Lx02=KxwGG@w~*zTz?W42q- zf2?Ls6IZx2yJ%*8GFtLRo_AO_RQ6fnWw-%6S*%e^j~IOttZ5uhb59XsI(mD8j<+T_ zICY=Kgn98UJW1O=p;ZX3oQiLm;@Zz*wfF<)dE)nnAi-wz_UTE-PM(^8a&yARL@`S* zbeV7%Noc~}$?P_Llo9lYg3CgLu3&_=5OzHI@794#kZ!d+p&vMCtbrXOWlG<^?sndG zQ8w){)^{;?gf1ctG_c2}-CjRpm2H>B_>6GTYkePvZQGq-WObXPRnUCczo?JUg!9t3 z%;}>>1;c5ddWtv}eel;9Dqt1@ykpzJbz)Q1?w*$J!oiALxr~usAdr!#+A(jgh8`UFd=b;ZfVWi+p$i=gc{f6ilc}qri3zMr7 zUp8jqygA3%;^?a}jIc(LCh}V*>M-&EWQkqjUZPzIUYa=ef^SP1Rrd3H0dUl}zQ_u@=< z%_#?24b5+z;NHctPgh`0VYeu^RS{d&Qic0O-*Pkfj^?pLZQnwO_I>zB(j)yF+9)w8 zdOuXZS-*Q3VjlbAS?B)6m*l>?>@&GN%EI%?C&q?o86#$^YMZ}Kgja-%TrkGTpMTLXc)i_=1)i1%=&rL~%k#zxq~J|D&l&ugPm9pJIo@|kp?SiO z2piQP7yamN2LXEzqEoF0$Z`yo>{i-(O?G5U0Af3nnE%IZ#%@b zXhcO9lioxqh1a1^ zTUc5v_%rRyZq<+>Ctg4*tP|a>yOFBV9v6e$sEeS{i&06yd^vU|#y3a698?r19du7x z&)4E;9wsv-Kx>6q?vC>aPxii8zK851{;HU48k5-0z4A4Bi3=@A!3Hnwrww6W1|El* z^{P&4NVuWCh>XuP_wssHTge*j03y60VnJ9thNkbc-o!usw7xfT&|o_QBxuidKRzd2 zO+;xR$%dBn_t;b*T-@7x8dKTJR(4rD-4{t$s*4t%Q0z)IVVw74-GA08+;-R+pti`* z4w(Ej>-4SSxGu?9j!FMol{(b8lSrWb*`DFv^CYLzWJUeYB-6U~<~KseENYWt9pU6B z84Afeqo%=A>1${FtypX9y>|_P*W~F19;iQAK~)A(Z-LTz)w0*{G4g7c;wy!IM% zs(Sj`Y98#cG?oO z67N^5_wblSxY2m@pph>T$aLcO>YoitFVAF*f%(sNV~)XWPW#VhLa+{EXZW*iDbwYE zBP0H70g4g8y5xU0u9z+Iwzr>rf^R5-nhNV_Yr$!ZoA#!j^#X8@qYS*1}QF+ zByU%Na^WzTZNJDnv^{G_e>{K8L-l+)MhaF0sada_ZdEa4p8h}yQP{=aaWjYX@Q|E> z80ZcC%pGyvZt2`JhZVH`C&y=PJFF@BM%jJ?hj;j}1kvL>!w}A&(xO=7LBzhNbeD~D zH{}R)z(xnr$HdoKc{s?+(6fwM^`@V-RivE$k23efg6lQxAW?~;D$Knx%*yK&tKYn7 zRUb}L%3K1-o3F`Igpklz)#a=Kk3#vqT=@y_P&W2?=oH=pKb6W`7hgIKEb7GOF&4Gn z&X86bC^i+vc$iSh4CVxDiMi$=f2izxNLA80)2Dkf6bGE4JAJ+~ORkV_Lh&p?qg6}8dB%EdoRcK%M^T|qi-rV@;CdgX?Nj3dnl*&@wo`Zd zvaLAWtsSlQ?`o{Aeh=Ej5bQ+!PX7JG5MDiN|n**U9a?K`2Z|O4)*bLu8i)(kJ)K>pUNv+ykG8<0@z)yR$%R-mI^gLX_b><>b|fwM z4(Y(v2K!-WblrvRdzW^`i<|E}OG!QuA=k+@$-aq?9CddxTvIzvgvm3={@P%~*3Hf;WP0^g{x|rjjI_r=T z?gk(Bt-g-;;+LL{O}IwA(3`fpK4X4j6~J=ag>1vd0N*g?S)8Ge!I-1Pz$R>ZKu;cI;y;U`ZlQpxKAPP5J5o|%I)@!y#f z!Fj54?qUuC|e+;ib#{#19CGU)v6&!5(q?g>$C7Ztwpn|FHPR&WMIM1|)4{M8~k zA6}2xjdSO+(uKKZf<~9nVXZI>fEYWYFcKk}rhna7}P>NNv`VQmBx#w0KYsf6wbiWgpPoE~GGz zn3?P*a)4e<#no(Vo6x@2j%e=2PCKBJ>9)F!3(4ZAQWd#@A>r>JMd$eE zLYb(86*1p7$$1E9Q)O@8-xK+)RPoIBk@xZ@QO{pJJPUkQ>01^ltM?Ry zcJgzm%*S5!$MXYztJVqVw7-fO8(}H@qKUu*wykcqZ6Hrd%m|{NJTsZ?yw1|>(0V^% zjzz9U?enLeAh9cq5$3vYy#9cdq`dFc-3brdjF19QMiq!-^kXJC3r6bF|9GS6`TK20 zjip=->Tf5hCasMc&ZzA4Ik}j(Z(^M*q~8tXsM#t15jvMMq64l_E{$S>?4PZ?#+=>k z$JTE_y!yop`RySr(3dQV-q?hn%R&>huc#D^eUS+*iKUgg!ClJ8pcyggY2}G9ZUj7i z+Ho7e-896@5pVXPukMI^SiGv+uIl$UV_wN6%3&+zqAda1gc>)Jyw*<_ViaGV8Cg~?yFxBHaq?2?Pa677K?})9KjyUD zRf1fa3-6vaQPCNaLXg8g6*YYQOg<&r+({~lZgf??<85MhJ?h=%3%}ofQxlq7A93EO z!%8h!4Sx6}*AM+$qUsZDq^gW%@Ec-dhT7$gd?)EFHICIm{B9HHay}3%Zz2qc zS$SYz$uSV_u0XGv^ygjyxl`tV_$(uZnR zG~RghHQih7WG#`xlGUd5}P~mnWZIX~2c>?s?s&1llr_9#ah2D-2amve# zlUz2<9dj;T=l=;+bBq5YRK@w89mhH+XwY0F24$qE52U9Yy)EnZxqY-c zeGYps^K~{XutRXh)gWaS35n_P8qJS8RgqLSC84_kd)Wtb$5!=g-rlY0nIV%jaSTNXCm@QjJ`o`$**W&M;7Y-RDKl zWf_Mvxz+04#|()V90UH&)Q8sqI_e9C$L~`m^>QL7b_2J=R+jlu29$Ghj4f&E1!^Wz zxA2sK916l=g;Ig|n?6g9{};dAA2Rf;!vQdhn19?VG#iN{hi5FvBV1R7K{$=V+RITm zr~4Z}Su<^l@#317Ykxs`-}r{A!0^p4`(zf!@#P4wO7eLTZ2icxW%83CZvPD5bQ-c$5^xB?2F{Z zDu}82yCIZg@*2Ujk@hHXZG)D)t*{;;7d2BtM)g<2YGMaZM7JIAF(FlNn5;37Jg6{s zQ0mrK*l0vyyWrC0n}I>tNRq3|YmE$m(UU2&Nxhf_jrgt=@=npwp9n0P=q6_S zroH*MxyhK=AR1+5wQ5R5z5&ZPJ0n-JjWjntmTw!%eL5Ph~ZG#0KO3ylz6$LFd)4p9ToD8#od$uO=9!k zW8BEhtwP0-IP589bk}^6p4&D4(?k4T!ZPu@6Zg%8<({3a#0Hi(jc%&v(%sG1qR5Q+(l+OI`7+)N#y;o zH3OmL#vM3u<43+_)4t$cQDBUX`B1D^6KUv~92;$^czo zGiq>GA&4k5M9NQs_-|nJNAAIXfM>tsRFbi>51uv0q55D-_pMOQ+sUO@Qc1LL(ad~< z&c$iih;#8gaZnq+%i zAlmT=hKN0px(^U&8CTBooG_=KMMsz>DzO;$Ml5X&w~tpWDuE-}NmsXOTC-Mk z(atN>&FQ1AK|$n!E=wO^%cE;){N~iR6uz@UqX}ye1S!h`;-6vPwryL_UzlqZ#GQuv zEU|lzv%4AqHtUp;JHcxtS@Bv;rq+Yi|AMW*YsWv`j2VQ-bD?}Xork2`kWh#8`j#02 z{5`FTiHN0KjMj#%kYC>f;GqU~j;E#MFqR3BLQ{vw1?}EPGre?)v(3E?RT^aZZelN8 zBcQqZB_Qv&@JDVVQNpNSN@*2tr44EEl{c{0p=G;jdI6cGYTqgY8F@cdAu#dMny|vt zs(9FiBF7_jRlkXLf{_6H{Nm`OyP16U?s-KUdL_H(53#BHpnX|wj86b!iSG-y>?>FA z`l5x3$@w^q61gf|6TL$O$AQPio1E@Gl=dd5yISNv#nA1?7!>F3@cp+*A}y@9Vv=+4 zdp<8{xxQ`$dXYO<^w_7tjL0<=b-sR9C}@^QX!b$SpA02I>2#+ocSZ3PodJ;ESQHFE zbdp&tgyY2wqJ0ACS9Fak$z@^FaM;rdeX3Nh0qhWiyhk}lkZ8xh%e~O0Me_r6a+VPO zqhpJbcbsXOo%`;r@h&4_+v!0%=$EY#ifS`-_i4Bro40qOlE8d9!N;MyI3 zfJfX3TJdl#+O+vjf1E3gxT<&YePoNPhxzMNtf8Kn_%tKhQEgfwm;Q%s?#o|PdM#Kk zRgnQ)#+=CUj-P<}boaV~^lD9@?(C)ap#e{&t&*ibO+uRuX$_(eI~@;_0unt~1j%`S z$fo98i2}T+9uIS`>GSFPJv99V3lySh`3M4I0a`B!`ABWD!rvO9^h%Esm=YGvaLSdL zfxJvjDt|A0QEXLl7Z~wus*Lmr*22~HPIi(_<{@u%;Om-93}mXE)hibfurpz5Qh^6n z(Vxub2p7|O!@qpmb##XuzOAkV z=bnhAF@L#=*)g<0pfmAD(?$8Gp!IjX97D;HtI@Oi}wP~=}_ZcKS6|$2rtr5#@_($yy$&Ad^6xd0Mz)%J+;z8GITjFU_s4pDADE}obK z;)>5Dhy{~bPquvNb9=nlY@GyqAa zUJc+oRY8+D%~!d_U0~w{&0?e1%7T|B-QvFCa|$s~$kU_uF`6XJ=4?Vt_e1#R_<%+c zUO?(e&n2N|*rG1Oy5_*kVA{uLACGm3iYTeaXCk~{C_48Tl^1Sp3qZJozm;z0me_MB2l#&bt@}MtxN0f-g9A0tQk@>#V}Ujk|G!7YU|1 z3_T&T`~v2k!GH?RmWP=CqNW5FJ9DI!ANdZ{k}+)fSSc8Sa86__7_EN?cdNIR9u_?mn;V8hp#ny1oWPXsh15ciP9E0a1B% zlbwz+@x`3K=Y4bLx!eOAR0x`pEdhdha)SqfVDj1x?2E9>pFzfWNnW%xFd zkT3OS(x@wOX8?sH3jqZo&xhAg!;q`KhwDS9{l1K1@@HJE(u*;R`oRE<^VB=nD=XTh z{C?-taRb&9<5l$FCn6n%?8oyZ$m8g$I(Cj9wwuf77t$sHN?!8DO-xT+oS6Y93?X2r z2iwZkRo~N1O^nfxXFBVhT>$uj)Xo7+zW6U3>H{k7hJKT*C99&=cp^@hMCx?HI}CjZ z#T#9lO6;u{@EMhe+j+#@*^I!+{>+~7$MG2#{^UI(^lix1@-X}&Q^53TkS zT_{`f_|4^YiB}&*%3b`lg+#S$77H%GmcSRJ+W`#Y;Yq06w$IdfpDZcr&J z{83?BTDvD^VHMvaZn59H9QG%Dr86LAc!@My(xqaF?LJ)=$O8ESOhsS3mDaoU>cBax ztJp1`eVwM9M4K&=$uGzDCtsyH%zldgc@C_japo#gmVK=3K`bFK>Owqfb)V|MCfS$H z6Hf{}J={VQ`=3OT)9)v0lpk-#=A)&$=YZ9}2a>8?|2vSxQTn$)QvH7clFJNA{}xET z+dW%&Z$<&n12(F$f6+o*Z`Rk_tTg|V73LdW{yrD}lMA9_{EG{!s+5;bTF8hrz2*r< zUE%vxCU*mamt^kBoL!hLX zc-m5{e9jT38)R+=D*JW(neKdPu`}Mm>}x_(9TO&ArqNkz)D8-a{$ejKk{kn2AY1bgvJeT8r;O=Z9KG{C7B z-S$*6K36No%eRzLS{gnD*h?hqO_4>t#66B9 zmwmzmg_+G23Q8vE&66awWN1G`&9?$=?mtZcKbsOBs?Qcu;*I;D?=3&myQo|JxWFq# zyd`@@S?SOTM#NJZJjNAE+JpZn{tqvx7@IM~(IL}w^mZxalr8q?rXxsG?@__ML(oH7 zy;LE$RGSITc=!_WHKg z|4rUxCv7k*Lf0q;muiA6QC{)JjDH7WHEkOmI*?eb8eoEOWonJa# zH&@g?eZo^3I>}p%77dDkDu{zbYoE9JCB3U$HI%=!Yncu;(h4)ULD~IkHqtH&rVV8s zL^dBv<0Uq7l!e4xETQ=!w0*2i^rAP2KB8pWe=xm-hziIz{lpi7XAkfbO+g{B-4pY$ zoS;QZR8f#MHPp|VW6+_$i{hi0B042vzZmo8L}!J0QE;qSqXtX=zg3sk3faNJ*@ip@Sc6o1D!tMU(khrAK|lq zu{uMC^wzkyE5Yb-Zna?yJB#cu9NHRh6+`6;_{B$tnbvenW9{AjbBA+D^ptwhD|y2A z^DOcl@1dJG7z~gd?crRo%}$XA3N}bX`B}lbqvsgb#=t}`NIkgTnF)|k<}4+qo5(7j zRH>^`kCC<-txehfk+)93I3&9QV1xWad@0d!){eRU|3VTU$NxnVSAD(Ssfe9U(Ss2a zMh3w~+%)g4bM|UB?)#=871kJtG6e&BF%;E_5;B#0J)FLT-b28$H^j+w()=g{1@l3_Vyl!<+im68q9|z^Jo0J&oQcilm9myZ6e|xPtoZ*APYgb~0p@apo+NXL0UO?Ne1ILT7sTs! zw$6AR1HWjq?@Wz?&PU$;gm+eaf;#6NOc*Q%#pkvx8c^s8MrwEET7etU(NRqw=XOL+ z1QYu`Kf)AyUp=c=+)Vo^J;W5jTgN!&pXwMMDih!n0rfYc;nm=x>tDWQ)l{ZC&BYKmxYtKlCadqI73$g}_Pn+n45zi^`H_P@u8iq3GHh*M9hc1{-J zS`_ZM;4}VXtT8S*C2rv>>QRO0F>Kf^q>@>+YH^#lFLt`ipX4&?dD6Prcw_7{mz zYK0l^zLig9_t`%_Mk^sIg{R~pSZqpJpPxViaab;W+*b+i1tiLC@o%j6QSG@KKDDJ# zA_dz43~j;2L!9!2&oC-4ONZwWPVa4?l*$^uSv|>Fk}(XEsjpbGzL=N!;d>LdRibdT znJ2w=*RX0>Kdd_M0;|BkC6n{LFHqpizgS*c-=E^-1nO7m>VB4-=t07|0Y*W4H^lQ9 zIqK=sV)Q>4p6J$J46ja_l~NqBe!Ey1wWwUwtoGvw5#0U7NF0d40OSVThB83^iS>AR zhX0Ns^ZD!%G=(t8iHdl4iwuy2&oqW8KwkTCij(hB26z5MlpGtx41QO9K8y)-(Gm(P z7t$3|Zh}9k?MU*qB>aoPnxUM7=o`Myg>lxQi?JjFm4-}yA40K9F6SA9KA1^-9;61U z><+!^r_nu1DGL0)Cz%M9;>tt~AO5Z03qonEe!i?P?&~7(s^O14s&>X{?!23f%zS9V z&5~;OH?OBMj*ip491Y&f%8KaP}|y0CFR(h;qHiZhAcZ<3lY0Fva?8WDr-_ysuh9u; zp9TuLW~o;&+e#7~x1a->mXp{M^Q1>FXeW+P$+l#b<%%B9ibB0d%^Q6+4So@pE#X!w zAB-oW$G~d^tOU$W4iXojTvCKPMao14gJ%V;IJEWBZD37Qkz8Tr^TW@_#5Tphd%K7l z%;M$GvCgY6t|K|kr{rsv-p=V7buyPX_0Ag4G@!rLS?uT8Sn+qSL1 zOX+*x+_?c~83y!R>Ia2V8EoGWc~6J)5w9|HJf8P43(b_l(!p?l{ap&ol%T^6w2EIO z^yoq|I8)?qP`BFYb(9h~DEx6NNijerV1_=q8N1sZkPSf5hj|$szZ;e_lt?lXx7FbU z!WUR3l5}yaoJhq-1YYz;YuYv+T)$uDp4%_XU&&~qv_;`B6m+TVPQB1oT<)qQ=%AK} z$!09#x*>jE`0k)*H8b)a#;zl~Pg(cjS8Qxb=kufQR<6G(E)OCy9wv8nWvPfKGQo&} z$hGxI!9Rp&e!T;EKdVPPzn#8TulZK$-Pil6%!u%soVc(d zs+MzE{t`l_^Y5ihqsaf8lv&A7pbv7_bQshy(A{(~iW(u6>GB|GXT^U54914X_$7;M zlGqUnZwA&m8FCdg|6s@K25Ps1ti>GTkO9Hl@_{Nr?{DSgs zhZx5^aDj9ME?zj=jnlUAK8Q79tsC>mV283ApRe zxVx!XIThRFnx6}PxZF}jq-LZ8KHaT;Bfk%cHxXibyu?d{`+_kN$Ey8TTg-;D;5Scl zTL+gBdpuoWVH=|L;4_x{(|KD3nh`2`_Ywh3RsqI6*QXMK>40>oq%QM5fN^YSc9YUD zfi;mvB)cv#_gh<*C0mN!1xjXf=!xWF*kP;EmQBWc7mj2t`J%29r=<-C&X#ir3cmysT&|_`QRkE*-Y%ewwC#=)^99_!-KSXe9Fm~?H=ZUWfCv_-m`Hh= zUHi0aR2fnADP+s4Ib-edTwkkKnhe3yXyC?RvTu6we1Ku+^Ds{8r4=3W78l&P2R;tU zeBGp9$gaiB?TMw1%K$4W@^b|eV=#;Pw2Zu0EVCsGaA>wrVAdoHYK#?lr~@<{qb zJhA7G=+UTq@+;xkemQFtq4cacPGn>bJ1M% zXpHP|+!_YMf>^|AV#_`z!{6}G&aY_5MMK}Uz+J+#o#W;-^VM?Y5BD1+hYAe(dKik~ zTy#-^%TS3PPUI^514?K=Iw^_`0YF@+`ancydKtYv?!&)y!{n`N)tCk2P_mluzGw31 zdLQJeJNJF>DbH#*yf0WTQ2rZSw8(`1#Nfl1HQhcZIn_AP1ixWs@=m`9uRY)MA>X#p zokkBnbN!n*X=`|RZl2Z|+iXpHo7&YQ|FsX=e>uhG|0d1oPmq|C!P!4VDs9|N-eE7# z8XWHt)V9P8KVafTGHNB2tU%n!SEJpG#+YJsbbf3xqv%VPWPoc@sBZoMBeGK)R9u!c z*eQAvrNDrSPsJC?_9s@H5-V@*l6b`ZZE3LT?;TXdj!){t9pJ-QWg z5c%b5M~VbUypkS|6%Q*DLMyjp)SH}Rg0LY)Zw-5>?A-z~??4c$E~YQci+&b-vFgJNynm@Bj+jspaw- za3)~f{jTeFR)hbAwRh1ZYVci3zHyJlYlk39+!DZ_u+i{d(ihc5@jeZD5dU;^5F($0 zDRIhO7N>uv@hrOb@d0}yD??Lf-;W|I&RFo-AwT^Cd_UxrdEB$I%#G`Ilz7`eQl|Wg zIZ>SW=td5Vmq?S5!ANmR(Fc;ZEXb9VLi%ZL80+G;hF*fPvvGgb?cgG4YPSlp2LW%ANkd35~DdxnOg6PEsm?0|SLxm)Dzxth22tOTw3#uiw!di`{VqImsp`BMk6=hu^!^os(vzrg2)+Fg)OzeyBjgX4E@Jh9dwsq)~)M?w%O%=!I6jVwB5b$AMdm7S|D>t;~ zVOw{m>1dg)AGljW?z%ap=7A_&j8=v_9zaNfVQNTieHi=#+sPI^zl^Lm$ekU2eY>tf>yOt#;K-lM=?b40QR&v%Vw{*Wl5!Dhw{n*38by6SR(lJ^jU~j6KGpG#MarpsiBvD4+Ugf_ z=(BE;RY?Ny%iS6j!a?~S__G-J7j9>umUB_2VyK-=(fcqdJQK)WH&j1;r0o4lH2dr0#1 zn(r$rf^0F3J1{6GhOr9df|o9tB3CtAWb#6TVXuJ41&?T`M$6xREE=eWxk=nv2< z$zIWn`}LISLpVK`GQ1}^Dt5Yd>F5VPiwK7XQg7xeXR41ahc(oY&kJJsek$Xrzz7l} zd_0^LcB*53@n$(S%OH}KOe$|rr7M*b=t~nmN`4(RerENa2|br>oLmUsxT^1A$2e14 z_1F;S5oS!+{hP<3SY?9bMvq7$UoBeRit!10TBbNzj(MKGYPQ7{^b`7Y5_q3&xOIp( zKt@$VAz(l^DntuLb$m_p)`c#XN|qP{A28KHU~3;Qs1g&wBP8%+03)GgE+UhcT!2ld zDt5kX!#F3du7)MGo{q6>fWL^RkcVtvO6_Yb6HZYv`uYgN_2uiS4)d=WTEswKl~W#- zRKQC@aap=*CQq|HM9T+`OwCxeeYEcRmx5bgqVWUCax+qsX^`i4TTif8R`>fJZV^?T z`M%2OU}MvMz?=76TlyyFq#tK58U99ce1jyFpQp{4=7@a+BUyD>!!RsyU{eONn{%z+ zBd#TCp`XQVC)6Wljr?F~;oVJm<+9p$7p?Bff8Lm8G68#KcS1<0D1!s%(7AeBYQ-@Ig3TR@ z5*k=i6sOKCP3_}UUQqL3i426V;DS5=^~!w&#Jxct1|QfN4Dn7)vhiO6q~!B;eixk4 zX_6C?m&61=B*rH;&mO-3(?J1aczy=42k08$(My7x7PjAhXcOsH<|g6qkW=)nft1!3 z-r`{`5(Ej7WTNTa+xD6&0~xjz3jUjIBvFI z=zZ3pyE%@XS})0acsJP1pp2Ws_A#L>pekeK;|->;Qk@P9Wb0GNqok8Wza4J@G6bWn zqa-2nRP6Xpk;mHS2x6j_TC}6sGe<-^76^7Os_5!PTWS_TK-YeaAYMo74lE@q_9!h1 zI`x|{Ot!iXHckk*%kb$#v)eUy-vJeI#rp`j({CD+Y(S*xGG6ne2VQZ1W{}m-;;|JP z%d!$2H+v9YFiN7SzUm9xi1@B-SqYy2%QBukW78R~Z)ipC%$xus#F;R+nUIM_`&-7rj(7} z*&%yg!Wl#WN27?YV?y(){34Z}3Oh!WT+mjrZS(dm_fIcK69c;+Ml5~bDyex<(J5xBcgA}HZq&Z6&=&ZU+r2x_xvMF>irjX2M zQ)9}4kKa*Cv-5zglGaFDiU`!naW#)hCy()l*!3C45_S>_{9?ml z%5ws)uFpFIQ0-6n&rRtMnX53ngh7~>|SU;LYSzZ26n4Z~QuK)PB*<#7cUXfj*j=YT#ePeH$Q z7>7Dw3vnr=p@RzzwT9(;2NzrXyJT=7IXrJ99$yrBBe=0Wy5N_m7h)~CUYW$;)}Wx- zZFuErf~!3Nfdv)107n)%Dv2-;4&PH1ritI&AL}Q6{So6#OQ@0Chp@tg@2|1o%tjh(-Ae_@0C!GM!3U=XX!4eLllU-5KH@<_Hb) zLpA%7MDlKYXa?UgFILQx-<~T~aF8J(CW*9@jc2Uzk5I??(;tFB#0d2k# z?&#W#uNuWXnb6@2u05FKCvY_DG`sHJVmQPCqHC7L^Zy^ZzB(?dHvOB1AqNKO9zq2v zK^g|>29Xj0>29Puhc4*`1q?tyq`L(PK}tG@ZiePPy3g)D?{9biBZlEK=f2Nz9hq0qRh(c_!) zOg`qKM<^b`OUPOoogviE35!Uwrz3DAId-8K*__cz3oYaMgv&L(3|K(l86fIPpo|Pp z`Yn0u-AHQfS=)(H3%XH`5F2$y;`uo{Y(*T&?xt0JW*%aJP31U~<(&(Ocudl6?hFgR zBJ{JKS6r3*1YTQ7%pb(k zmI>KEUKEc*4cFuN^NlEz9fQU1zXM(jPk(iV8|i%r%plH8@p z>d$8|4Tf>_z@U4-HYjV0yahuC{XbH5br(rH;MBP?IFOj&F0F@^9xpI2P|E%7|7RqG zg)Rgnz8bR6R+Er(4_6n8cRIuu96!@<*7+VFc$a~nmCC{7X?pMS2dIh2v1sxWn`bkY z{~4p|hM4H!@9UAl2Y{L-?!tQL_I$+~{CQdB9_(|oHPd#%Q%uOY`LNGKeT3gZH^)GLH$Df=;Mpo=2K9!H=*~1aBxn1 z5ibAovQFLZ@qx})$iyob&d9ycd`^3ZN@3E!O`+5cheTJlmb03#o#jxSz zmdSqSl-;nA)*(MSe=xg}GuqaBKQG)AWYW?zicf3s&0w=rpaz$v5wuU%ldkp8_T0z^Z+?!mb5Z&9LRQ#3e&Wy_H zL0Nt0yIa4LPv#g4-<109_sF}Rv}lHU?^-{kiw^#;++4*L2A=6H4P3;sJ1;O96zm~vk6oRN^e zvyl%N1gt)wI9iW}RpUJOT7k#Ss8h%XZ>_j}U`{X~y9EvxJv;*PQ~Y+b#2!D8dU zQg}jI<%5z+TEMcoYXxk{RBXjd*e5IE+q-(J>l&qq$m{E8UjzzoME8QGWBhH=w`9?` zy1kqbQnM4GmCF1vR+O^R;en)FZRdWJ`Mw0TJ_+9+5WXIIqefFfy^*8Y=bzs~WV!h< zRO_8n1E!NY^@mXda`?`T@QlbPH_CB~(jxQPW6%cmR@5^$CtBp#<&<9fAJC4!&B>YF z)(pOrf{m%n>bV}0Yqj-zulOqW-LLKoLJOi$7PJzhOjN6@$DQ*f*}qAz;5+Gv(ZPA5 zT`)Y!*!6t8N3p9O-7_Mqu+`Q>J>U}GG$#o&l>aB<>zK5AUNk2DE_}9^Vy+4N`qPB( z)NES-?}QljkBfpxf7XHGA5wCGi6}0vu=V_7(*O~=8T4l~ayGxOPK4AY%r2i8Np9Jz zHblRtL_zWl&PBAsdHLj){(E@2t2E)fvivnp9RN#X-u?rYLT>cQ3fZA>TY;W%_;ap8 zFN*cca08JE)cjgh@9v$tfv%ND6N*L z;H>6+*OuN^={oBj!9;VgBDbY<*;lbeKZwUn9qiorKfMFsi9w*$-m)G;F43zsK z_zs&o$hd17;_1T~OE72gbT!{_Ci2dcekiE3?+i7ROI_asOe!8|zsTGFN$!<;(Xpwd z%)`)#Ayl4hz6d)2L6Q)ZG8yva(mI$|a||j#MZlv#ZmGlxEts3A>EOG7nxnDb6)|`v->|db19rx6+f2 zzS2b(0-2h2gk)oQ{Tl%W5MYdmP5Y-7>?MZ*+Y4_l0)b_~i}^Qvrt*H*^3U$-x$*NE zco4c^5WgiJf}B8|r5*zreUL5r_S%fJFP4z)owS_KJd=mY1eIEk?~nXT@TA;`EBnZy zi5ZW#!(N@428Q?MSj_GILg#{dw(nyf*~^69VQ3>p!~OauzSrbTRH9*^Ao+HV4llww z)n~6#Sn2sptVpAZW2Sq3@cE%Bl_qbK^x~O@zA`9#(KBvIwy`Wa%SgZO~!_EKCU z@Ixl8!T5aX-a738%V#Exy<48`&flV~4B$Ycl_uHGBPS|16ZG z*@5Q+A8Zy&tXuMghL;zEUzgL5ERzmjjD~+=0}k;-ggLvq>f^l( z2N?9yRb7osQiWC~W;H+erJA4wxva2r9NQi)*QkCjQ+9HEF&@(HE970#N3@XdEQ<~5 z>Y+2Asell$#1-yzvU-Kv>q&8McmAax??=5=KQdpRQGI~~`cQlAcz1{v@m;{&g0G7) z5q%6#?-k}6ggqRH_@%;glitta;NH0-6Pjhwj=)(ZD@f&Fojs#CdMWbse}NkmZw$s_ zh`2%688+Auv=zo5$|5x4e6M!z33t^0fN9gi@k$#KSg(g;BI&6RY^qpU7P8O=e(z(K z=U#yn-(-H;F@I``ZQNjAg%zS1oZyMz8AWS@qC#47{2Dy)VMR+_;s}Y z?1n>h62g>l{P&%^g4CS3dQw-3+!^KALAiMm=MDb8Q2H~*85ZwdmyQzhqKQ>TB7Roi zM0V*bl;@8ad~F`sbUuA!)n1>?$INFe&dLQ_bjPj|A#e7lTnZOL%vU&P78gb}IH}Ic zdsfAz^SFFaRx2@cy@k?;joYY+~F7P4FzxzC6H$& zCc1Q}4B!YnFDMbw$PzeVL~%YAKGGJq*?rc*mIu2>u()$avwt%6mUDC>{LNZvNh)zU zM@WUO^QA@MDSvi@ZbR;NAL|G^8AQA~)X5sNfdS?}2e+f7SYWj32)#80s^9eA50yf* z&+kD}27P3)hBa>v`g=!J+4dSEoHCQwOA8pE1!wLvw2DT%LVfaTfigzP{olp=>76K? zW_-Unyn-37)< zyBH>iZ-S#NApVv@!a5Az!ihc-?akSu%BFw4;??h0yywg|+FPTW%>S$MSEjN)T>K;T7J@Ev=g+s#kbU^e#AcbHacjKVXCd3kMOKI~_vM9n5bOX2mUn_&p~ zKr8E>i&YF&DLcHlh$z^kZ^Y<^Vy_Y53#U65i6LpGxp#R!gKUs79p1}c+fgw~`1NW3 zVOD@@lq1eb@I8!1vZ8N5I!rs;PtJ+cvf2QH;aEdofW$66ESIV9!q*97L(xQB?~PU^ z%^lHX!Ham3i;`%NerEc)ZmP1bcFY&=7CEoIqdW{&@0Qv6bBVb)#hFg>z;aj50Ig_J zEbAm9`9PoKUL2_#ii=@%CWAS8s>3r=s^ub&NSZHKy?Pu($&u)lvx>n29^gwIXJq!% z6Qy*6Aa~3d5$SznrjhL@B%GC#DFA-&-v(odFC%ytc(T&OEqX0`vNJ8A~1YR1i@Ui#^`& z5z1~jdpnOFCg|qm8%A|yJnw;{J=9iai}5qw_sSqUC^YtA*1fG^8=T41m8J!8_Z#D7 zBBm^nJz)n{TUK`ZKsIgSRKDexpO~@}Jx!~8r3#;L%EV5rH2a_mq47l^E`}ivnQ^8w z+l)$}$rQ#R+BT6X(q?yij2pH_90A}h1JGBhR!KY3YQeHI3HB)u;(YlIfX2$H<^W~- z23!8hcavCJiEZU+kDe#9c+pt4)D79nB!5N?C>RoA7BYR zV{Tv9v+@Az`Cw&CWkx^kknl};<>0IMOIG%-R~811drSFY1ob=+Vg#jR!b%b!xIyhg zDSe=@0kTM%e$(H_mh8_;jpPa5u!Ius$Z(dLWcL88ZN}(*OIkM(h0l&NpB;PM{lF|l zO)voK#k?P(iDHw98whS{U^*F`)t8#!~7h2D;##H^$)(`~Bp1H69n~ zj2Yi}f4cI%U+rI&K%V$2j7NDPT5S7lA+KMnBv@1dKQ?_YKM@~!H+v`*WOzw>%bo&{ z7w-`9CzA5a*dh#!Hf)Z|FUIBnDFu{dM0A~E)3hJcr2Ve=ub0Q9x4z-HKQB1)Th*zl z^Vxr5 z!G_UBQiFqn7;&n9U>lWiMYQ}?=|s~Ow5}jXo-9YiguJHWVj9)|3Q=whMjAq`a=c5Q zDjpoEvrmGx385Y()1PWSZkX$z=x#{>n1;e0yDa$AzF-E!zM0Bhc zo>Nt>RcCe7=X?TWnUr9yNtw13UL53VCPh<&n!QL0J;GE9eV1@cEl+`>97HT2Of3Jr zHTc?J+O>Di=rzh8=~Jp6HWKf92W@hN3~G}Lm0G411Z&S~9)|bBETH(un-1;Mld*Qx zp-s=mQ?)Q8a)qB*ewUZPx=4S<9pPllc(lO9^gIeVXm%0)moS@c)pAkUN=vkh3Ta-1 z9Abmf(X_NNx>$7vp1RfJ5p!LV-P3!+&xgzO-h(d#SPa@tU@;yi7}7!S`j;=F9@pY( z@db)bX82mhJhx`m$c+&vW6SYZzTP1Gw?-Tl0YzthO@0xY^>O4o+u?jGX_>1O*Pv(E zD}Y(@olB={0!Rr}86V~CE2q>JMO`i25`7pcc;b1{FIC92A17H|E!2hH)b04`c;(wL zNbM!q2E+N+YC*LwN3y~eOc@7^CN?8)Hr#Ec;~~Z7&~1BeOD{(oCDxT_T}o>UO4Z7b zhMLA|OR4TC@djt=psC0uHY=2AQ`ma{QCXL*o|=kH1?`MHSpQD3Si5|?>x0PlJ*m1E z3h0`M8x&;LDwkN0;RR_s75T*wadw?=2h5_bsOZpYM0f^9y;ekQsme;RgjHn>zFGK6 z?C_z>tF~Jmxacs83}+4fiNcxT#h+IRHXg|e$FUe#;oxr(W)Mk>j84MUFw~BpA3R`~JjFZWwrvpd``A;`S}YPB^Vy%y{+%or#WpZb!O@+kN*P@TU4Bh$h zxhw25{ZdFquGA_UwzE<#@%8EzhE<(2C2~q7SgUiiO)l$A3Z}K+ptJ?L@(E3Au4=B& zX`Y+3MLyXElj;-ICK8uIzGRko?t@Cf&66VhYs)I`_l*Z5LehCP(&2swOe?Li!A?!S zRC~&T1K&{}Xfzs{o9R5I3Orz4MXQCBpCTD$v55VW^^Ac>V+Tgi6iOl6cl7tDdf_k9 zL#|K!W{VDCtij+&y||8q@CRNit?Cd;%GmX^WNvY0(Y{Fj`^XSF$(Q>PnB6NIG%2D% zcb6`8*O>Ei_6o6OL4#IZks;EY@6?TqeBoovd7u%e66C7?NpgC8OZSwtfLO`ob*4hq}+G$TGq<$rMtUn&zN37B4!!$Kv(1j$pTpl_Tk> zSny@eLfFv9QC~nnNA?+rTikbLRnBdH&OG2Mar>B94R}mBK!-~}57`tS>m31w;lrfU zqP`u8P~*MStMDQRCQ^>eZPC3@zEjREq=|EB5N~P|EA$N1O9#fw9*4OwYw`Zo@33JKc*CC6fqTWJ!Vos^fbWgy{DP6p zf)|(kNvb92VWuBKHx^_jXV3 zr$@g?3b}6Lf8k-Tn+jqTx8QK4Qa-`YSkpivBp{4TrEAqA0$i%1NN$5npVJMq(4cs0 z-t7%SYv7RlBcqNR{99;Ui$;6?^SM>4i-!+CaZyg6wu<0SnJ-j!?UkdN!mFyT5%PzKiiQ`jb7>(;3}AtIawYQKD0j zBumb_{2Y9Ji(BV*Z~6x|6H&7p<&sIzH8*Q@ADi#H@Xw{_$QAdKlOqxPFBF?nZumiw zgR&H>D}&7EH#Vh>;Y~a!z^+uQU_23aitjoz;2n)u5NE|lGM1mp7|Ei@kJ}Kip!eAx z-t+?{8|l#$=ISK@1{ZR1LRLVJ;8@r>p0Y`hB;ydH9WBg`x~^KCk>-+W-%ON>mjlQr zkfjA3jA&vAzAH692HSw0E72M8eFxttn?FDo%Q_dux=kkVss@pJ!?~!~${ic{Sa0o~ zS}mH&UbeRdEYEIyP)Kgr24pm>F6xgsh9}OP`1#}&OxgR;yR!BsO9SK*&3X7ig#JND zg%jslU~)uxdR(S6wTFj6uszLqCQGRhv916*@|l#0Dp~Xz>SIX;EVq|!H}8}_yJFtP zyBdGSzQ{taGwMo>-)7845*8ZG%b(Ay3c$6`p|&mozc-YnMfU4stbhQfeiJ6B5KWC|(A{|1c*dsJke>XKWR zz5@CU#oFUYYd&_(@$!vIprS-b9=wZt8BZ6MYFSlchSXX3BdY35swM{_F# zSrt_@Ag; zndAu=C<=c6!b^GzHuw)!Z;jX(o#*#!fwzzgCFuIcAL`N(LmZ75T{P4jnP>U%v{s)Q z2^^g(%nny9Gz+LZP%aIq5o@c-_@Ftv(I+YO`vH6O&8>#PAU@^TM(FfdHw#l8evjZ7cWft2dT-9>Dx zm&x^hf{_&C|dI?%=Yr`(j)ot;;XpDmvO)N@MtZP*i5NYWc1>r zt}3tI5<8ZZFp7Jp^|f;de5ldoKz3sUrNbPjqFP<4j;f)ar=8pZp!Ty}j9VX1BcK}? zTC)SReFZAmh-7q(fZx8AE#KhXYxR44mNWr{H=ZFBA_6;bmcPkltNFAcN0fBH{*G*t zpRsElFu?x{i)W?vo4sPF9+b29rkQ&U+K8scksxpO5^IllZ(F$Ww$nNK8^aLgfG^UB zw%hZSfaniOR~5CI$&ft{`Hr~UMv{d_{(~1#F*8rHcuE)6jPJ`|k+g_yt6mRkXbK5Z zp?{L$Ysx#8u3iOSjMYLYu^ouVIAl}*MHy%sf9i}mO8=q}ZVoU*15oDI46H61N)Pil zG4_H!j?x9$);fJKgzEA_Zp`=34TF;&IIYmA8u)C{fdatOGz%FwhU#!B>|VTIQ$)ut zQlDM091Ng+&pKY4!(Fit2%pG|y`+}B>*wrTCWUYc3yuc4s;ZGR-o2PUmAwO1pt z%MEkKPOPy^=+B{NwcZOe%K#ChE6i!#qL`qJznMiWFwxhPl4^K(?}WV}j(ovGH0MF! zwM*B~Iopeqn-?qinY=##;c46ktM!lR@o~dqxafGb2#&ya=>gQ$_mH|Psv^tdjLWUR z1OL*xj33TvDg-=-m6U2=QT^CVgP5V8@N&-8L(RHg5!0NfSS>ty)+h=8fz?eV%l?-R z3mQ6Ao+wBZ#j=0?Flitvc}QoUVQ>GF0(Z3tr}wFFaOT7D=R~8wfFO5n7heOTHlA`xns z;7cF#!>sCkVsq82^=BQ6XnS`JDCTP5rq5ydt>pW!h^(ZHnhoNS5?RK&#e^J?{+?nF z<8{;jPJf_V{8_3G6DzG61mvnKyNw{0V;qk?h6CiX-!xt!H`U9@|KKBfuC}Fx`4W3e zV-;T&Rxwmp%uCKL=p~1{mv}>N*%yWZeHKQ8W$gtgS1CqTN z4KkckcG?x5-<-Psp?ua5B6~s@oQvfL@jZV5h{&?QEdwTR?Ygp}zNN0r8a9QZ} z+*nR_km`z6#US}v!O%)SI_vC#KJ}M#*>eLnx7e!*S%-m6F1122?du$AJL>NZqA*C$xaMmD0|dzL60f z)NonJE^jCs6LnT`$4GBi7^IGTIRMA1AyUMa^R^IIP|tClIypu5?|@&u=3jvS#oPa2 zDh`Q4+<-O0PJZ%GwxLSd_mmI`G}efmlM!E9f9Q6s(1hfY@%!>OBfDhOA0xX}h4H_P z>~7H+%_OZ)98MX>ahBaDj2wV6PCVl`TbnYxxStt*zKY_o!aew&bqa7V_hEaoIk4Tm zLgQN=><@kFz(9>PdS_3)RIHfop%0T*KUU1&v^rtQluswUJTI#YxS|tgqi?puT&lIf z@s?=2v7qSqPptoNq|z7q+vN@L4}rYD`3F;i0tG5~3k8I&7d^kooJAX&Gq?gqq^J>p za!%Z*X^-4y(vG9EXRg{XahobAfYdJYU)RJJ5wcXk-89(O^BsRe^^;E0G%Uz#%pZNY z!8dFsdf*|zBX4S=3GoRE8vJeUzFHr&T@%BJ^4u=zd2 zGLA>^Sa`Nod_kn6vNl!8Zx6eK{Zoehbb~MR(slv(1`G^5WV94d@6#vEiK+_IX7)iW zMrGeU8fepjSc`@r1uT;)GL20<{@BuOAmK!(C{?#)qMA|eurAYgSvh^4gMS&*AveDs zf1cb8y`0~Y3q^-_*#aw2kRS|p{f6T)7*d_L=r>Q&JTV@rf7y8cE3HtKzP>ia6Gdt= z@lj^J3Dt|Q3~m@l7;Z%G_6p>s0Sj)t^nzS0Exb_Y(Bt{aOYsnO#-rqrx_7^D{Ez(5 z_-5;3e0EsdKP*k*aZil#CUFZHUU4U>e^#LS%|F-+{eyoHG@jRdkuJOyP54a?gX)C{$+|xVe8N!IkY?9h{)>zmmW?y#vYBa8EWR11o_rnMYAYY33sYc> zH{5N+i@59HJ}LEE4b~_8pVJ}-on>Wvu`N1_7@`>DV0WQUXQ{32Z5XN}<0EOtl|&Bd z_dA80D5k{&4=`=E34=SP^nZ2<1S=>)`v1u>h^oZ=<`~e$O-SA1u$yV&>r7^8;Vhh? zH}KG{;>m&_Q8Qo>*x9qrHvD<28Y6}nFKJkKcS6W1@8%$(D}IKZIUvh=tTV;y+`WCN z7<{HZ-@)GnwagZ5@R2k*x`7{v{9a)-{RCNoYfwGzvqO1EmSl`3oRxp%6SEPL)W3P^ z=U2(t{rqhbW&SGYdNQqZjq5<%hI*k6XiTa`^^SSLyAU_UgW5}+Q64qMEcZpsP)5{c z|F(kb+tj5yFaD!lqh$i>xAj(5W6Ec|i9)KXpL*{bYCEj%rOk#ca%NHW*)5w^;nx5m z#?7lbxs@O<3`UY8{=?XQ#mBt352g1OB7B4{*f|0n2pWh+Rou*NrUI|Du^00daq~;8 zuOsA`JT^yQxjyzqNdve9ey@4CD;o*H(EOvMCzylBZTr2R{-Kf0Jq9*^V=z4RQQEmp zbn^$Ig3j@V|6xH+JgH2*=k<7`8l$jWWC9WUFH?4<5Eb~QAzE!+)wdrFPUE&lif~l1 zS-f{LALV~THYoF`U($b`>e0ZytUGRpm$^E%t=n(w0NQd9CaX0Hz*mqgpuXo$6mrCB zr_RzaD1q;^WRIYOrRJXU5q1P`T9pX7FUSl(4A)Ofh-}7Z3VtDu=Xbn3MQ0XimUMCH z)zsP=)pBf@@c;X-6^aJ!aNpLDo23e=Zn`}$fD>#slnSvpeKfX1SX6OWTC--T_$tG# z^o)b0NC%m+H`*Stc@K99u(HSQ0fvT-_nd{V3(I8wMvM4`{f!ohU_HX=eDY9JZ|3t2 zDr|P)g94=SBb{{PQyr~*8J!a$FlOn8_apvmduPT>vMM_%ZNdEK!zqk}G+oVnqn=d& zasvbOV+VEL<64k_eb>HAA$x=c7n5#QL}|0=?OGn8C2Knnh@RtLjYaLti1PL(D3}cL zVQy(n`9I8tz`vM{lHf(8PTRYWeW~JLFT}e69CEzX2%R3PbD+fIQ1AO1B!Y+DQBZNH z+A|;Zfn4vG?7=eD^^>46)={;Jr!4NsthYSv(iVwo=ZXZz8rXZl+_%j&k9kUyw?v~r zK5w;Bcr_CsHHnsUw}LXFaZ-i);vrjv2?AM81rg_k&dc)=ZvWssLYPpPZEC`kP*-ct z#hqBK@$GOkc2n+|hgOtJ`udAC*tpme9wiSYbAEJs9U$&c+9W5#%-`7W4r;Zd;xag zLgZlYCN;@j0YU0=P;h&3#;o#K6~%nxJ<&qxx+%-#t8Ao`rn84NRYon!&~E@PyTgYa zfM;@nYS3rrOJwtMB<+7PAj!gDD9ry0y`vj?dw9t~ZR5yftmp~lo~7OnQ8700%|)ob z0EEnQk%%#q%IR*CR8_7+-}W;llAfroTr0FfG=fZgS(bX}b}Au;3TCJiYCE~K--k)e zBn%jucRR~eru<<-h!oockM&L~iK8r6&#NK1*1;gFqW>^OL&B$lkk%`v|KLRqg=xv1 z0yar@UIyK*yaZbP-L9kTk+0N(Mx)n@n&@Va#a7BCNO-47@pn=%(^QwgerG;!=lwzf zqr0I&4sgU*I+sBF1N7Zq)1u&k{2duFVm$+#QI@Eu#&OW;$D{=JX{B465)W!NMsDW% zRw53|hkFD3W~P`hAPecA_)dEd{l(?${2sJlK0r88jCw)58jLv@HgBnryEyH&sVjH) zgX^ZFt_Gl{!;Sr}s8~l7Uo?u%GtM8PAc1y}U3-Cbo*4T%fvcWO7iMC8@QsRE~M(zfA$v0F@R?-VIN z*OtAJANOdDF!E3B(+5S6s!9J}Do4*Q8E7K^F9Sr&Wjk>;yS2M(^8gWJ(Xhn*J-uPj zbB^A-&ex?AMW(-U+nOaxJd77V%9?}RRHC5y!DO?ov+)p*tC%PJUM)c6N#PhpVKag# ztBw#zz5Sge=?c>AX9^b3F5t>(yW(!(F+K1mxZaVd?H+0*wKjf|ic`O7>o_t}|k zX3^olaT}L=w97K6OGDjOIoGVbk}zWo=QXCG60t=e#5;DJ*4ku-sSteuG@O(0vU8CV zMhTH%9SQv7G_c)*>SAjIGRzuku0CNlAy%8T_?>!HChf%;8f?Ls%D{8V|XUcv3Ba3_1Ap(_P1vC62=Z;3Zd?k&X}*76pCBM9Rv z+)O0~uL#?}QP#bVW%wHzlN_Yl5{P-P zw7E*A|1umg9V#%iG+twQp$|(XDQB0;776s=cDEa>AwJ35VVc#AJ8o$|#^n?7v)#QY+pZ~a^WUx8x!&*v}yB>30o2a4O|FvNxC;tO`( zPYj+w&m8iS1OoA;Yf7sOCx_Xocy;#mf~#`I3KrkXsF&kk*+5T*pEic{%{=aNe)Jkn zA%Dq%1O(dr;?=m;J#pECYrC$X<~~fV2ks4N|KKC;?sl7PowRzJ7q7MrZS9+3BuOk? z)S;413u@G++~<-mNrLX#W;+iyn3IL+htl4^e{8h(epdh3xcF#uJ~LAoDf)OLcQAW3 z7sB>+K#;J9A|m3u6iy7PaY$GwoxJ>0qPJy}FFs!RPx%zR`=09V*p@K6X>`xrwrqax z<__7~c=s`{G{cK~3TVSYg+!3jHW9XA)3BYQkS?-ut;L2P?vV%!>?v-e_H*KD416O# z-RQ~rd}aLMi_2*IePF(Hn$s_uFEP;J+;*{%H+5WU%52xwX&|zj$br?Gt^ei1Oo`N-Br z3ayVSMh+NL_UFm$x-3x-3!Vw<% z)ZfTR#9Pza7UGc#FNz+pcw&~;P~%v}Gc434dX~#2lvFSpzGr;tjgFkb@m``D?;u{) z|L!61id8vPn{`jdT`#yC#aV`=0a%iYZ08+5^xM$64(7%w)S@IOe>tk|T5|4b4-Zt#f8lnhJG_b*SB`EwDjAA$6^dtSUR;d<*JZB|LBmz{7L{ z$t>cQbDCSkFHdqNugq3LBmc;&b;j(B0f2{5b-KZtuV3wWvT~*ly^Mej2L`!iJR%#= zQL&Iy_C`=}Q^EY{`b6D~j~siYd|=+44f#}BG;)UUmr3kO8v2%O#T0RDB^1Im<3^&d zk)(>ai4oow_a0hxicwp00BJLEG1`l)fk;BAFU&IsdpRYVxEZIc%moo}RBj zxHgJIF-~jc&P-=nwfzTQA?$93J*ELB7%F;zIv?hv`z42^3^e<3 zhnFY^u-Ddt4L|nYl=!FXOC9VuTvy(7`R8@cB~SlgBENB4zFz03GU`k-sJo|io&_Z3 zD`dhMmo3QABB`FM3&O272j@mlSKxIpEmHLUlQlQDcX&Kpqo!E^W$-;($;-S z=dm(m5ZL+&cZ=#-rTK>BmX{}fms!y>YqJj}vmq~&r)}OS{3tBBw*e!n@<#xeOK{mwM0DbJE<>WB zEK5kyA_2M}yAkUr&Is4C`kDw7KXe@asJfi_&-xsx6`6x^x^K?8pI&gUMI=SPcuYSx z8E6;F_p*|A+?2|h_Xn8hHIv9Gb6h$Q_D*^g67748p&Ia^+gU?Ipip>dh5tNZbDW@p zgkOzG!cLZ9AA{I_4lWj75REab+Otu+bh|5pXnK0`fj`vfm&(W;-5xoV`RIW3wuKTd z72%vE`^ul7ectj=ZlP1eRfMuq{yHlVtBmc*h-UGtoAZ@JzC6g6ZNmE0Ux3bA%!$dEJdz7E4wJVp4C|i8gU{z9r z4o%8X4VU*{&PWBeNJ>-4N$2SSsQ)Q&16;s)M!e`w zJeXcYCD!tNa$=;BmY&!~180T3$c-p9z zUQa*k_|9-wPnk%LZpO6nLz27;3^nc7z>l0k@)lk71mMD^2rghB_J0(?sf!|8ir+&t zu6b|gsj@$A5ElkJ?LR%=0nd+`L1$;f^lxde#ee}}s?1*(_rHB!0|xI{NmQmQ7pwi# z3qZtVt6!|hJ|i&~zw?`knGuF=OQA{YOMK!~h*?ixoo0Tde3BgF?Z&a`$xKO!u7U4` zhQ(GH1fp2Y0MH(e!v$wBeLy@4fj|WS&{%Z^lH?b<2vzJ1R|^b%>Fy3uvpaheX`O*I zhT1+$dag?`{?T>*sogiT({cH7oZt6B|Br872LxsxSxYm6Qp<46)r%h}Z|g)g{!k;MiLZd5IQuk$&F7~Rj zTpCI(7E=&up)L3cSuQvzjP6?Bi1lpiZM-)_BVMnxih6JmxLhFPuo z(-CYJf?PsXN#9=h@9f1{D&imEbN`4uJ~mo;Lt50#BRzb7ORWXnV3I`mNu?AdEA3wC zJFh;Xg>JD77nlhS@%KE*T>3A$DjA=0srpmQ9_q*P>b*!VFz&E&`O5pf%j}dr=j02o zF$t?q%nmm!CitPeNK9E9dO*UUR2?P7_ewGROy__Z(Zh`2HY77EYgGO~AhTWLs_qpV zS#~|IJkCVqEM(vN7G9t|EaPF+ay82i^t)%lA=if4S0#~a7e2(4PKyO-3r~BItqDC7 z$Ct4&Tg>&&#QXad1^ZugNSco+gFleX3W&?OhjLGZ*^Pz1<1Dm~g5nj%p$7Iz4d-Ho z*n{d%a7?80*%bqyTkhwx7Y8lG$@`TOo-h{rnXy*A!z7Y*{~2LL72N%JR8@(WkX)=5 zSz=ho(hugJX1VdKcR zDnY6m#jmtme`N5L;UtF>BWrDc^bz_H)8ZN!gpt)IY0k-%ZaqVsySU_(n9k4@>o%d@ zP2+YgLF;sQzxV$>aH9s}0N2PCiOVrrup@GLf|alqAFshl?VZ+Euve&(SXZx#hk*YF zdc9w&2d9tDchO1=3Ozna$wW-bFfJ)If}%y7B@nRTPfcTAqefAsH@IW)8On*6smuUw zqdB}v@W^{>Cl9!(jKD1|5Q%fr4Hqs!OvHzbQoUN|g;F{A!(jUIAoj_GGIR#q5q2G7 zPV&A5zl@j-)}w3t4txDWMoQ?oa0uR_Zv(7evbLVWL{`v!7A#eo56? z`WO%K25S)>g}ix*Me!~r+W#Sr(R`qwH?-2$#gy)7MCKYOeH^hE!LJ@b>-CrrXevWXjnk|;3rVc*sY-dTaKo!G zz&uFXb+ZeQC{kjfqSJ6sd)oF%zicJvlcU$6(Y~t{RBRq}W20EROF31}>eSl#>%FhW zIA+;nN7Di1t~1CSM=^3Nw8v$FVWb~>7eZ0kNPtXZa}s9z`pJ8m>CI%c56{?;Xl$ui zxWJ7rJM4DOS(*Dk<`)%D_rDU(nA`<4-Pq~LgE z=8C5P*;1=8v{nU2j|UKHlMj3vNgA6uQE`&~b^yN(pQ$md4M0ffrPVCZ)vcX@sY*&O~WQNm%wL-|$upTr3r)&%jt3?{mA z|2CM={@Y;k`rihVWO^f1b>4`Bu+vbbf#1oH>8Rr#;%wD1zh5M$W&6uI{<1rki32wK zn0jz;Z}#@odW1FF=+E%uc~CZ&s}Sw;d=JYye^#sRn@!2=@x24=q*M@{_jj9)M|kRw zONvZU3u`bpMkup;5ZbSU44cAVEx0^4=Sa*$XLBkSM_j+4>wYtrdOVBe)$A1e2(w4)8!d>RhQSWAt8O4W4xGG-{0)OELBLu2{a^iaw0f zjAz=*7CH?a%f!`#&zuQfPTb3mcVxQu1*XPeNKD}cAb%Zd_79{IH+?1aTf?8@bHxf|I526c(X-d*Fb%CQ|#$-WxJ4Homkx%M~^SKWTj znlivlm&{E>ta*icKV9YEhM@FXAugN$0ar4&p8e0a{-AU^DPJ$jjZVV@u@j)x*n%IB zgP^XxRW;9fQT`bnX?Zm|iZ_)*8M?3#=TMh84FWb%Y6Nhz11_2wnC?gnlBhS~z0^Z$ zeYQ|oe63U6Cq3_wa38m2U&gF+pWiKe@sL-OWr^#`$pYS`|LKlR5ZlF6%u3hQt-t zM1weIW-l;gI{WZ8OV$B0a-fK@8p`@l^iMt8e?Ld5&QWYBiT4XNlf#$ArhtdeEK0Z< zf!-EeOJ9YoDCKg+LVWVAmz%9MyH`^32VmJzFBxdup!!lBm|9j|uCwnmAJRcw6xgY& zQ^BH|A(=YCLz8g*+Jutf<=j0*LWWSd=Zs}NyogG zD;!m$Y%lrn9%*_6D7t-r5o~Fz{`mOSXJFbp-`;54Y!3SGaLGC&;l3PaxoTs&aQ}1f zCpCGWE_ozF(5_cmzM%-C&>#H3wNb2BUgiOr!r$*`ZccakqZEIa{vNq;-F>nHYc+UFyf}|_39~n9thD)LNI=96wWc4?RuGoqdoy6 zJtmnciq{G!9hs&KVjrG@Z*uyeB~IJkNnaT?7CbRqS7|CQaf6$GmOiDwuzs|68!q3N zDV3E^LL`0E3Y=z3iPOZ%EC^gMFjR_tf%&CYI9+4xr?PIbao%}#vLWdCAzeqMZJpy! zMl2Q}0&3%YDBWv0q}Z`Yve#;;I4gACp&H!o-vsSvSFh@ZCTY@d#)bkg-|srE)$Z`^ zef{ve<9G-uOCZrlJCU#J$T`d?z9(aPmK7E?#ULgw!5xEpN6%lq+Dv zD9+;bWU|U?ZZ8SYxlNzgwA)Ev=$Wa}Xp~PQdV`ZT{BJZ!Nh@1pF2U|b?n!bS zon&rHxaYfYr%i%cTPPyTRvk|+!I581IGe+TvfGrT2Om0Jy(t9QJVSSCMBT4=@k-jl z{llMa8(FsgqV+9C1xk%O`qB>ZDz!k*f_XAKZ7oTS3sqqYu~%;z8REOhp$9pXh^~D% z0l_9f!tut5@p8p%>Z;!M2VYsH{W;eoSax}LBdHvhzTEk;>v@smiUIu1)%EN1Bc)jZ zqNTx?ss|nJ!P^1{LoAcnRJ9kUwN-rVIgKZ@;Ixy&!51^eM$TIlA|}x>n1Wvs;-q@V&|X__py@jy#Ipx(=OCq z=p$oMuKC#0;%*zfON(ksy_4e<@65yN+^~?(wun%_&(*n-FLHehZU_e%LyV8qhd(_9 z>?M}T1n*8pcwX@ZUN`-}&d$Ou%C!skbVwiAPCYSp>+3o(e2**JD=ZmuIum*4D-wzYu)R2-wQTQ&U)!C{vH=0kEnk< zxW0^RbY@yzab?_LFtge>0h1Ntv9~p;V!IWUkTY z#@wXPL3`0lyejQ%E(JjeF9~7CG}R~#LBiQ0-&bXIwEdOA-S1RaXr%KsQS05-r9T@E zcN7ARY0z91HQkf~S#$W&R_u)(u&|JCUa3eScjtDtz?!=VTE$TOxIT%p zg4@oooF*C5%E-KKs@3>Q%)QALwx_OiyJlL8k$M)*jl_)>HlYNcu$DXHoin(D9bQN8 zY8UG1JHg>(LlN8s5C5$Sq^g)3&wmJz6~y*lPr#xvTzt*u^vMzpNdiqIS!F0TzG0gN z^Zybh{Y*3w_TCM8ARfj^>SRE(I4-|FiChzo9h-f^mc`EME%+`S#CLAdR{_W-1OYRI zsLb{nRVa6J*u%|=qwLMO)Y|BHLxt@mL@VQf#Y;L&3H6p1f7bS#29-A0Ldr*N)$f#n zGhwIIn;E+VLxrOte|sUBOP?B(9Jp=p-zv=tmv)%93RF!Yr6N#~;p&nQgv62WshtAkDhTKtd60FnZBogQm#Y zt{JFwdtYHqULF2uG|Pfu1RG|%P+W0xhAobM6?3AJK1L%)I}d~%1wW1ObGinjU+Y-j zW?*O$@ueLH!;dib_l$#Asc3_aX|_yKuCYnBobs3B!T+F<97&tfEB=Sh(PAGW{_@U^ zNy44<*I+LmY1Z2?(Uo9`nFV2DP@3uw_^XvJ#sM|#x#`fYai)gs;)t<6qnf3e)|m=Y zw+*avlr$$H@ZKP!UL5ZhB;2F5kF)$5=(AzcC5ANrXKR^2XUO=dD>#`i@IMQU^NN}(s;vBNtB|Wg=>Wc65 zm~rPGQyq?}IgcmnQ+h0;kH!C{iQt{(%;G#yt7AZpn33bAI*FXsN0}xFBj>c?|l;StjIzmVl{z5Du zNF=9l0@O3fbHYY!AYDRLuFR8l!bZs-y?&+k#-IoGDyBE#_y}hG^{l%kQKhCqC>=dl z9*1L<5!d(>PG`;C4;iIAJVj~B;_NG%%DzmLcchEE<>>8|-S5?+$TEMo_HOQ4Z?Fjg zk>T7~RF)-Wfcq2P^}ZX1E7IwF8%fvyrD&wqB#=uJF;e52uG8K(HlJ5Sb7ZxR53fm? zgZ&46eA>I z;J0<;qD}lSlP0vem%%|uW7^?a-kjf+IW3Vp7+3iOtv=9FfWUrlep`5Wl0zAxVw|DE_=Q7vNT z%UxZUYlrLV@!J+39OJaL-^Zru$kmjS^KcXJ0f_2j9xB9BHG7m@K?i@^pM?0TjCnoDY^yNwgW(n2=_i61Nnb2Ls@x3hYs*WMuST4 zNVj&6adQeFy+{Nlvyw)heYm9|Rs}BMkiNKJQG4=9v-_3~Gb9wq+j)n#rZ#7+Z1AHL z4mM+*i?Myr0Qa=arxXOeSdv*5m^@iIONDLvK6CPCN;arT--k_8JxqKN3%R4Po-acg z1GHWv2lj}^;)|^b!a|tR8IQHIay{lo+*nieSiC<|Ck_YuG=)!2VBuCCQngv~4LS&I zgc4R$0^Lw)loBlu<8){P)8Kb)Qps9E0cEJv1>{gS2jjFl{-w{ue%XZL8qs$MNpXJ4@e~|f}FYtMm~|klqEJwrR0g_ zy}#RS<54zR@Yqg~w%rlPw~Uo>B-;SCM%btq2MVZgaG;kLP=1q&nRu5{RtMT1zu6#) zTUh|n{2EC3L1W+!oDxXx;FPzgzogVAocEnbwYCU%WHNBex}D}pyY4#In+ar3*0`EcA4W>R@>v-@3ngCq-+$_PLJsDbJuftf5B}*{Pj# zTh3lz20%k>b7j*+BMxQ0vt+ZqTI7xBVu`{JE4Lc1Fb6X7#Dk?~RBPPPz3T#PmhwMG zYH*l!FDNauJ@%ps1Nw@heP!v-v?FU>_|;tS;`HzsB1S3kFppdFXGz`I_*Pz)$kPp= zuh7zj`H0=q&Pp?suc^Y2EbX953K<=9W)(K0=D9ueoKdO?`9sbB)ncHMe%2{Yc`2yU z`NkZXvPOq*oo%FfjbJfVf`Cte)lt4V*;&)%zfPyjm4r!&B>?vtme=N=3ZHwyRJQ{WxI zXcTL&l#}7uP$!wsp}T`^@nXs-@G?On|GnG*dW{?UW^=M}Nt(I8ik<)6uiOPDtfqm_ zL=ap>Y=-(V2ePO>?G&MyS=UFs2|}m2z|3yIpVRVzU*GsGG28bO3ClDRWw`MGdF~#s_@G~e5*IjDrQ&T56u-% zyvCETmg}4y^$toFU1$Tk?w{~*{r2QZ?#k;^xy5Yl`!c&!lkH=q-nG-=TIU3bStJJ;(nQ0=%M1gLf@? z`(h5l>lPtx9@d_58OJ@Ed1Xzb1_nN6qI2nuDrJn72s;k*OG^%bjLp)bCpD^gF*{B@ z@=+Y}Lq1JB+K2xWmCEagWU{W~mt;sQV_A`&<(rGHds#M4jYL%1;4^Fboq!a1!4pK} zqfE=4m^z>VcVd8gI?&H=`7h3|y;n|4NJ41iQx4VV_`i927;2wG5`9Dg3B&0Vfy1rw=)nv$DHlH3TX#0; z>!ymz;qmzb*M>01;>Yrcz0@r#yvVM8MhIdkG~aRwdGcgIO_%lmQZ7!U6O|xZG#?)A zj=SPP@UBXU3krzwQwrm$Q-7+mTwY++pFd z1K1`?qdvwY(aScS8#E-rHYeq{7nB=3lBK^#XwiRuy=_t$q`bUE>?$`d+qQg2dUU!i zsU&!>nr7?bEw+NiH#JpY4i;n$38bpfy!Hs%JHYHSUzP>Aqajw+uN0->A*Yv!6z*d2RVczIGC;HadLr{!SyI&zO5Btz( zWzERQC$1>MJ@b1TH~&LWU~Njj>rS?Zx3edJ;t)V6JI)%@$Z#2k=nDt?7J8Y5YgG|m zvH^8(pmlA`ld|i1H{a4=j%U~W#zT+{)+$wJzmI%^MFqbO14W^9)GLIq^E|W5;cC$U zNo7=N$JYk301uv>S@0xrgue^4RTiJ}-YY@;kXO;KzW53Ps|WPa@b=1qcqky!;BNl9 zx~M`fq}RBD=<*FVa=6m-<@}1}cRUkc;($H-hHK!{q(4#=%yQ9F3X!N2p z)fC$ph?(2FVIo*HFD&8^)t8%Y*ejtOeVJgyPKk#Tzu6S)!Q^-28E3@K!jcVet6{ zs~GEX&}~7-hcpWNA6QiAMNP7*9he%lV^7u3xvRrw$ES|WPb1EoC@pTeb&$RI{=?9sdPGr5sPNRIhm1Cm9%IFtM(U}1;fEW~ zVS0l9(k!Yx|68;8#!fjX6bP)d{d%|~Z~9JmBb?S}74N4kU<~jNWKf2Cj1zU>4uF8z zpmrQk^Mz#k*5t+VQdT~JzFiPkYqxm0os3X&`OfOX_<0^102kPA%2Bc~;KwJ5oB%QZ z$W(!1J0!%`l!{;I25mCCX^z%FvK8j};=K)jnvI#J5P+F;dK^9o&=eX8qfCzyBp#;$ zQiayh=_5vBy3W(Dhg;K*@J+w#0b0(yQ3@%g?dLh*aZfTmli1T;^*Hk-#Meh`?T~Is zbjr#{l69r{XF3%)+^gKITt8mJw`@Y~Fx0!VIwH?xc=*?kX8;H3E zV}_OIGq4a^yu<*j=*Ksc`|R_b)@_&8YcTTWsOD;%<+bBQN>M!vp}`6*nHmo!Uw6Ds zYnM6CCzKAy9$SY+uvD>lFAMu4obm@`_xq$jXu}GEehhj3)(3310iBI(^|+_?WfEz^ z$s3}!SttgPeQLabB6?OagZ4`ng+4RmwsG3%`}*tc)+1m(Jm55eOk_u(0%ToJ!e=eN zMv@9|o6d?ln(av1TBSvheUAwfyVmdW{IL@nk0_#MSJMK3-mV{RAfsb~2;y-`W{p)h zS20$2iUxn;4r4n1!W}BS!tejx;8!yK-QY(<5C!Vr#JFBq^J|$ccCqp&&wm7)>G0+| z&eC7sdZff5_EV!k*XLI1%Bff$hlLXz>TX<#BcSUqqe@Rhips6}D#YlFFea&y4fl~H zGGBC~`f=yubu{@i+~%8E%g5l;w+j>~CKZfTJcb^h} zG(7>8_cgiBx;XpfvJv_BQz`+EW2mJ8gT{nNenTf})a&o=+@>u$63E0S^2<|ASVB?V%dXO_j~jt$pnmM_a3*%_i=?Zb#4~~21&x+Z#FZOzj;n15oWg*WOPmQ zhEC_$2kH51B9&yf4AN9xt@SrFmkFd7Gp*D^TB{-~lT{DwyoeP*Pz)nYj2v1zTq7Q$ zGk4fTOB)@*qs(Ojn4fwUnNYk$=wARuT1^^62Q@6b#qTDkDW-YaB<|sGal>`o`#Oa_VHWiP_qBVEIg_B{jsoZmpMbud6}6^_10u z&Pf)!gP}gRJ_TAtT3Mhu`#tofA||agmeZs4l5o>bP)Z`FKyW!q(>BI`>8s`;@mhIX zYo0`Q`1%Fl6M0(UMbi3RY%aSnqFs=ZlQnVQlYyF(RcOR?)P)krO)|vPDPc0el_t;7 zDPcC`jB7sKXW9L&u(*+h59}2Sf_&U zqnaM^bWN2V%yIi^cKd`AOX^(uT2su6>TsulgSHe)tU}sF+ydTp_-GZGuirKQ`WBm) zD|FvAhF1A4L7n;bJnxT-MER9Cp1(Vt6tH1A1?^Zs=PTW?Ob(r|D9AA|=T3aHEx*U7 zXxAiy9~pv0(tWY5xq3A^)Y&`$@l~1xoHrV^+QPXn(rMssaNqFY99~u-jaP|tLy(IV zslTI+*)lDfGX6#1Jv<<(Zg&oalpk2GX-0y5?FBAK%#a&`lO|~`t5JLWtlQ#>B_nfH z158I3x85V6>hvAwiyWdo7cw~lBf+OLB<)RZ2rh|8z|ZkWtiQE@*sl&={=EK=yg`rK zO!3HT?8xHQmJ^sVHj))OlA0nf*slqaC>Sdq<38xX#+bw+(A)fb*=ytqlS;Gc4f>kpg+EZ0Z1EpDo_<>NQt_IY-_ z<$NQVKhelgGU)J;blGFF3vH5fSMi)Raknd z$ROpNNt>@eD)V8ag1rX27bpr0eA15d&m1e!B_jL_Uv%lC!Cf7tjxDHxg^7z zZ%Lgf1C?jMXYT&j;aid`Fvm%?vfPJfe*2Hk#g3VVgA0HcDkZ#p{(NfEy1pAl;e?TJOpnU1$hjC^cTkb zh*&mDSHk;9aZj{ETUTOIKx^j@=dkWPx7kHm{r+Z%Br!9-x0;bG^SV#W=w7bKyRy5w zQRq+JRZ)M+eBbS+t1s0!_*LjTPK(#9x81<@Lc=rDegEjUW|TjExs8q&EN$UMIfRvE zc#ry7eQmMdZt_mENkn*f<9U^XwMSfBnIAP^Z{gx0;4@Zm|==A&n%mQ@x4>z-^r+6GbQ6AvIg4I~vX#Hlh z;)FHyIa+*7*x8l*0&R@YZ zx*ONN|FaaL2>SO@h_aY}Hb{v6y+Hy=*rg+!zu6qt%-UW^z7Ov{T@KsJOMsfK^wHqE zNjTUCoETt=k2L#H1jz4Td^o5;U2LjDmm`;urv7`K%MhQTj&rGi@L?-&?g<@)X;GO*!(c&iQaeM~&xC?|Xe z-wH;!yn=_cK>$W@YPkQr7*%9(;Dj}wqZ^)|1-t{j zmvwb#GT3m#Tk{`6Zg66eHr@_AbwjC8)kPnfIB6`A;0PekIt+xJ1J3j!WzV~&5HuXl z)9Yw@YBdEI&U4(;@r!ghWALF%e}=hHz_L$N(s#8rBXS805E6Wy@})DdvU=(VYfL9% z@o=@d(R~&*6qj!BWwS)+-8a0u@(PD&)~K#c@Tq-yLP{lK_7yd-#LcxyVX`h%-0%9K ztIkBv$zg$1-s(XKGUddl6_IvFE~UoG!>3 zs_*HD|M$a_c$XtXW!INW^mdB;R(4~4t7wDC2-LSb&FYWN6E-eHbBJ`QFX`o*apd7l zmssk8;w>iTGAPh#e-p9tDNW|=2RZE6#{!=LkANWvDna|?wX)8W(3-4&~B zN~?x#e&6w5CT31uB@Zp1YY9ge6y7W!q0^Fx^c^W-170BV^>W=4yNdC?9=K$+SLVVU z_8KX8(f@E|C_H?ReYiOzFV>N-fWS|-8h^}9L)YzB z(p;}&IlJLpg@}oZo>W<_T%8Q7K;iU6BRuJlyOFv!?5Q!=onD&oQau@+Z@wQb>`$=S z3sOlB(g!xHQ*tLp&A_BWck%oi!kvClZy2~CWg<$9pXwWmZy+rT#ct+~RQ$>5v!Ds- zxq2DDfVVY@nPtT}`3Tg#A>N$gh!_g&^iSF+Z5_4U>+nWU%e;?avfRSA9yv*5RqK)k)Vn@&&X6nCzh$O;H5H?%8US2}A`kc{&oVnjO!j4X6 z!w18NHKR1{UoSe#f4}JL%h;e{Uj0hp(}Zn~n>Ua~9j5`3@-eLGk<7c|K36(~JTb<< zd>lP!Xass5_!-0gf5;N~1L35Fgv_dM>^CEpz=C$DsKH`71xbkVPB zmpSjyg5jc9^!_@mPT;W0$t9GTZJ}DcqA_+WA$h$+#K?zjT&!$@n3W#T*0;A@mFyaJ z?LI0;Sx-9RUOdR~L$POcNgpG@M52K$=<0zw5y@=v41&-&4`PCU93%dL!LQad$TN-o zuUC4KFFOt}W`|fRc&UZ0Z&0U?e)@!23Y4GP%bg>I2@m2VAl!iLs~F_0d~U=cE-Y#xQ+doIbYr0`XkDgbhtj zH>+C`UArTKjTf*9o9Qk6-0uTjn5N^I%iNWYic2qk+MJ zx+hzjO~La${bc~ZbISRHf?5-op-etZfo!62t-ITrAq<{P#xKJ+H#Y||;QazsknFNre(eTvg?dykA-6-)#*-Nz3G|96) z6i1g19NfW2KM1G4>X2$xvz|~Pe=-|AQj9JIVp^*r0`o%D;~z8pAgap3uMMxB@m>~_ z_0U{Q6nlQ~7t}H~{ZWX@5lcFOUXXrr_}P}xWI_S4U>N8ytx^h4q3gHHVL%3FkWY`x zk7O~cz3kdyfPWyLJ)gPMq)J&PT`A`=O}2PIX#c21;+@t2Hvz+Q$maP$eQII6T1xsQ zbzTl+J(|f|K{H^7Zl&%;yR2Uz<6MTXJI+pS_NXJv(TQO2H^BxiXSwsJ*0L}g?1b2F zlKFLfqAv#J({NeB2NAeltCorKoL7~HIPZpEx6(edD0y8SL8|Sc{LhiL!<+TA;fQAQ z9!$M#y!e%`?cF3#zmamfwzz#d@gp)vCtr-s^HNudPiN0Im-aX7y{U7h8c-XpvF4Vr zo_*&_uWD>3_v)7q_a?`o;7{w25P0fsDrRcK+k!a&fIO3}UoJ0<&hFe;e0kGLsy889ah_BZklyS0lR(FpN?rGi|aMekurFfP!G- zomLc&=L>k18uSmyKt^>aCp&}|&j-(V2A{!5p75@2O_Ijwg5Q_t22-yHKF1c>vmKpWKXVTn<{T0m&1Cg8 zrt1FnR0^x`UO%}UnWUXseWB1p+ZJt!+w6DXJI;!4NontplN60<+h9N?I(e zvmhO4w-$OFo9%v^t%wum>rPPGFJpg8VMLHITiNEM9=ygg0t9tee+Eg8#y+{w#(|sP z%I#H0IH3(O4bkY3ZRo~KXatInB9a8do#g0ubfIlG;S!ob!n@cm*3@e~wny`3^RUBd zn(jw~k6(~URt7s+Qq-|a`%fe6qNQ5IY1W*+F}G2WdWqNiaMHruDL|4H1QK5m!-9|E ztb$7PB9f;=wZ>j0%4F#j%ZS{mS_y(fPal`AF~_#G!Owa_e>j%T{6sui29*m;-?9a{*d`nBjL6|l0p!(^ zE?=~@&(SXI7nkUhDnOOyH|FZRR)U4qrUWb;&2)Kurg(-ctR3OKcSjNm@y4`UmMeuZ zpA4Res`)Wg^ KU?s8-gZ~fduNdh7 literal 0 HcmV?d00001 diff --git a/scripts/benchmarks/2. DB and Queue - No Params - 6 sessions.png b/scripts/benchmarks/2. DB and Queue - No Params - 6 sessions.png new file mode 100644 index 0000000000000000000000000000000000000000..d2a3811bde77f04a2c0bbdc9d512b61410a48c53 GIT binary patch literal 69550 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

Uv61U}PcArwG_YUI|l9C+;I_ame*qX7o|Bynv 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�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