From 7233176ab95b06ae84f6ac46918e5abaa97f8ca7 Mon Sep 17 00:00:00 2001 From: tigermren Date: Sun, 20 Jul 2025 21:51:39 +0800 Subject: [PATCH] Initial commit --- .env.example | 19 - .gitignore | 76 + DOCKER_COMPOSE_README.md | 206 + DOCKER_MIGRATION_GUIDE.md | 399 + Dockerfile | 48 - MIGRATION_QUICK_REFERENCE.md | 178 + README.md | 12 +- app.log | 1 - backend/.env | 20 + backend/Dockerfile | 36 + backend/PDF_PROCESSOR_README.md | 202 + backend/README.md | 103 + backend/app/api/endpoints/files.py | 166 + backend/app/core/config.py | 65 + .../app/core}/config/logging_config.py | 3 +- backend/app/core/config/settings.py | 0 backend/app/core/database.py | 21 + .../app/core/document_handlers}/document.py | 0 .../document_handlers}/document_factory.py | 17 +- .../document_handlers/document_processor.py | 71 + .../core/document_handlers/ner_processor.py | 305 + .../document_handlers/processors/__init__.py | 7 + .../processors/docx_processor.py.backup | 77 + .../processors/md_processor.py | 39 + .../processors/pdf_processor.py | 204 + .../processors/txt_processor.py | 28 + .../document_handlers/regs/entity_regex.py | 18 + backend/app/core/prompts/masking_prompts.py | 225 + .../app/core}/services/document_service.py | 12 +- backend/app/core/services/ollama_client.py | 91 + {src => backend/app/core}/utils/file_utils.py | 0 backend/app/core/utils/json_extractor.py | 141 + backend/app/core/utils/llm_validator.py | 240 + backend/app/main.py | 33 + backend/app/models/file.py | 22 + backend/app/schemas/file.py | 21 + backend/app/services/file_service.py | 87 + backend/docker-compose.yml | 37 + backend/log | 127 + backend/package-lock.json | 6 + backend/requirements.txt | 32 + backend/tests/test.txt | 1 + backend/tests/test_ner_processor.py | 62 + docker-compose.yml | 105 + download_models.py | 67 + export-images.sh | 168 + frontend/.dockerignore | 11 + frontend/.env | 2 + frontend/Dockerfile | 33 + frontend/README.md | 55 + frontend/docker-compose.yml | 24 + frontend/nginx.conf | 25 + frontend/package-lock.json | 16946 ++++++++++++++++ frontend/package.json | 50 + frontend/public/index.html | 20 + frontend/public/manifest.json | 15 + frontend/src/App.tsx | 58 + frontend/src/components/FileList.tsx | 230 + frontend/src/components/FileUpload.tsx | 66 + frontend/src/env.d.ts | 8 + frontend/src/index.tsx | 29 + frontend/src/services/api.ts | 44 + frontend/src/types/file.ts | 23 + frontend/tsconfig.json | 26 + import-images.sh | 232 + mineru/Dockerfile | 46 + mineru/docker-compose.yml | 27 + requirements.txt | 10 - sample_doc/20220707_na_decision-2.docx | Bin 0 -> 36673 bytes sample_doc/20220707_na_decision-2.md | 101 + sample_doc/20220707_na_decision-2.pdf | Bin 0 -> 251768 bytes sample_doc/short_doc.md | 43 + setup-unified-docker.sh | 110 + .../logging_config.cpython-311.pyc | Bin 1213 -> 0 bytes .../logging_config.cpython-312.pyc | Bin 1201 -> 0 bytes .../__pycache__/settings.cpython-311.pyc | Bin 1599 -> 0 bytes .../__pycache__/settings.cpython-312.pyc | Bin 1440 -> 0 bytes src/config/settings.py | 31 - src/main.py | 17 - src/models/document_processor.py | 18 - src/models/processors/__init__.py | 5 - src/models/processors/docx_processor.py | 20 - src/models/processors/pdf_processor.py | 20 - src/models/processors/txt_processor.py | 18 - .../__pycache__/file_monitor.cpython-312.pyc | Bin 1462 -> 0 bytes src/services/file_monitor.py | 24 - src/services/ollama_client.py | 15 - src_folder/README.md | 58 - 88 files changed, 21937 insertions(+), 321 deletions(-) delete mode 100644 .env.example create mode 100644 .gitignore create mode 100644 DOCKER_COMPOSE_README.md create mode 100644 DOCKER_MIGRATION_GUIDE.md delete mode 100644 Dockerfile create mode 100644 MIGRATION_QUICK_REFERENCE.md delete mode 100644 app.log create mode 100644 backend/.env create mode 100644 backend/Dockerfile create mode 100644 backend/PDF_PROCESSOR_README.md create mode 100644 backend/README.md create mode 100644 backend/app/api/endpoints/files.py create mode 100644 backend/app/core/config.py rename {src => backend/app/core}/config/logging_config.py (89%) create mode 100644 backend/app/core/config/settings.py create mode 100644 backend/app/core/database.py rename {src/models => backend/app/core/document_handlers}/document.py (100%) rename {src/models => backend/app/core/document_handlers}/document_factory.py (55%) create mode 100644 backend/app/core/document_handlers/document_processor.py create mode 100644 backend/app/core/document_handlers/ner_processor.py create mode 100644 backend/app/core/document_handlers/processors/__init__.py create mode 100644 backend/app/core/document_handlers/processors/docx_processor.py.backup create mode 100644 backend/app/core/document_handlers/processors/md_processor.py create mode 100644 backend/app/core/document_handlers/processors/pdf_processor.py create mode 100644 backend/app/core/document_handlers/processors/txt_processor.py create mode 100644 backend/app/core/document_handlers/regs/entity_regex.py create mode 100644 backend/app/core/prompts/masking_prompts.py rename {src => backend/app/core}/services/document_service.py (65%) create mode 100644 backend/app/core/services/ollama_client.py rename {src => backend/app/core}/utils/file_utils.py (100%) create mode 100644 backend/app/core/utils/json_extractor.py create mode 100644 backend/app/core/utils/llm_validator.py create mode 100644 backend/app/main.py create mode 100644 backend/app/models/file.py create mode 100644 backend/app/schemas/file.py create mode 100644 backend/app/services/file_service.py create mode 100644 backend/docker-compose.yml create mode 100644 backend/log create mode 100644 backend/package-lock.json create mode 100644 backend/requirements.txt create mode 100644 backend/tests/test.txt create mode 100644 backend/tests/test_ner_processor.py create mode 100644 docker-compose.yml create mode 100644 download_models.py create mode 100644 export-images.sh create mode 100644 frontend/.dockerignore create mode 100644 frontend/.env create mode 100644 frontend/Dockerfile create mode 100644 frontend/README.md create mode 100644 frontend/docker-compose.yml create mode 100644 frontend/nginx.conf create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/index.html create mode 100644 frontend/public/manifest.json create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/components/FileList.tsx create mode 100644 frontend/src/components/FileUpload.tsx create mode 100644 frontend/src/env.d.ts create mode 100644 frontend/src/index.tsx create mode 100644 frontend/src/services/api.ts create mode 100644 frontend/src/types/file.ts create mode 100644 frontend/tsconfig.json create mode 100644 import-images.sh create mode 100644 mineru/Dockerfile create mode 100644 mineru/docker-compose.yml delete mode 100644 requirements.txt create mode 100644 sample_doc/20220707_na_decision-2.docx create mode 100644 sample_doc/20220707_na_decision-2.md create mode 100644 sample_doc/20220707_na_decision-2.pdf create mode 100644 sample_doc/short_doc.md create mode 100644 setup-unified-docker.sh delete mode 100644 src/config/__pycache__/logging_config.cpython-311.pyc delete mode 100644 src/config/__pycache__/logging_config.cpython-312.pyc delete mode 100644 src/config/__pycache__/settings.cpython-311.pyc delete mode 100644 src/config/__pycache__/settings.cpython-312.pyc delete mode 100644 src/config/settings.py delete mode 100644 src/main.py delete mode 100644 src/models/document_processor.py delete mode 100644 src/models/processors/__init__.py delete mode 100644 src/models/processors/docx_processor.py delete mode 100644 src/models/processors/pdf_processor.py delete mode 100644 src/models/processors/txt_processor.py delete mode 100644 src/services/__pycache__/file_monitor.cpython-312.pyc delete mode 100644 src/services/file_monitor.py delete mode 100644 src/services/ollama_client.py delete mode 100644 src_folder/README.md diff --git a/.env.example b/.env.example deleted file mode 100644 index 9d89af2..0000000 --- a/.env.example +++ /dev/null @@ -1,19 +0,0 @@ -# Storage paths -OBJECT_STORAGE_PATH=/path/to/mounted/object/storage -TARGET_DIRECTORY_PATH=/path/to/target/directory - -# Ollama API Configuration -OLLAMA_API_URL=https://api.ollama.com -OLLAMA_API_KEY=your_api_key_here -OLLAMA_MODEL=llama2 - -# Application Settings -MONITOR_INTERVAL=5 - -# Logging Configuration -LOG_LEVEL=INFO -LOG_FILE=app.log - -# Optional: Additional security settings -# MAX_FILE_SIZE=10485760 # 10MB in bytes -# ALLOWED_FILE_TYPES=.txt,.doc,.docx,.pdf \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c30120d --- /dev/null +++ b/.gitignore @@ -0,0 +1,76 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual Environment +venv/ +env/ +ENV/ +.env + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +.DS_Store + +# Logs +*.log +logs/ + +# Testing +.coverage +.pytest_cache/ +htmlcov/ +.tox/ + +# Project specific +target_folder/ +output/ +temp/ + +# Jupyter Notebook +.ipynb_checkpoints + +# mypy +.mypy_cache/ + +# Distribution / packaging +.Python +*.pyc + +# Local development settings +.env.local +.env.development.local +.env.test.local +.env.production.local + +src_folder +target_folder +app.log +__pycache__ +data/doc_dest +data/doc_src +data/doc_intermediate + +node_modules +backend/storage/ \ No newline at end of file diff --git a/DOCKER_COMPOSE_README.md b/DOCKER_COMPOSE_README.md new file mode 100644 index 0000000..710b762 --- /dev/null +++ b/DOCKER_COMPOSE_README.md @@ -0,0 +1,206 @@ +# Unified Docker Compose Setup + +This project now includes a unified Docker Compose configuration that allows all services (mineru, backend, frontend) to run together and communicate using service names. + +## Architecture + +The unified setup includes the following services: + +- **mineru-api**: Document processing service (port 8001) +- **backend-api**: Main API service (port 8000) +- **celery-worker**: Background task processor +- **redis**: Message broker for Celery +- **frontend**: React frontend application (port 3000) + +## Network Configuration + +All services are connected through a custom bridge network called `app-network`, allowing them to communicate using service names: + +- Backend → Mineru: `http://mineru-api:8000` +- Frontend → Backend: `http://localhost:8000/api/v1` (external access) +- Backend → Redis: `redis://redis:6379/0` + +## Usage + +### Starting all services + +```bash +# From the root directory +docker-compose up -d +``` + +### Starting specific services + +```bash +# Start only backend and mineru +docker-compose up -d backend-api mineru-api redis + +# Start only frontend and backend +docker-compose up -d frontend backend-api redis +``` + +### Stopping services + +```bash +# Stop all services +docker-compose down + +# Stop and remove volumes +docker-compose down -v +``` + +### Viewing logs + +```bash +# View all logs +docker-compose logs -f + +# View specific service logs +docker-compose logs -f backend-api +docker-compose logs -f mineru-api +docker-compose logs -f frontend +``` + +## Building Services + +### Building all services + +```bash +# Build all services +docker-compose build + +# Build and start all services +docker-compose up -d --build +``` + +### Building individual services + +```bash +# Build only backend +docker-compose build backend-api + +# Build only frontend +docker-compose build frontend + +# Build only mineru +docker-compose build mineru-api + +# Build multiple specific services +docker-compose build backend-api frontend +``` + +### Building and restarting specific services + +```bash +# Build and restart only backend +docker-compose build backend-api +docker-compose up -d backend-api + +# Or combine in one command +docker-compose up -d --build backend-api + +# Build and restart backend and celery worker +docker-compose up -d --build backend-api celery-worker +``` + +### Force rebuild (no cache) + +```bash +# Force rebuild all services +docker-compose build --no-cache + +# Force rebuild specific service +docker-compose build --no-cache backend-api +``` + +## Environment Variables + +The unified setup uses environment variables from the individual service `.env` files: + +- `./backend/.env` - Backend configuration +- `./frontend/.env` - Frontend configuration +- `./mineru/.env` - Mineru configuration (if exists) + +### Key Configuration Changes + +1. **Backend Configuration** (`backend/app/core/config.py`): + ```python + MINERU_API_URL: str = "http://mineru-api:8000" + ``` + +2. **Frontend Configuration**: + ```javascript + REACT_APP_API_BASE_URL=http://localhost:8000/api/v1 + ``` + +## Service Dependencies + +- `backend-api` depends on `redis` and `mineru-api` +- `celery-worker` depends on `redis` and `backend-api` +- `frontend` depends on `backend-api` + +## Port Mapping + +- **Frontend**: `http://localhost:3000` +- **Backend API**: `http://localhost:8000` +- **Mineru API**: `http://localhost:8001` +- **Redis**: `localhost:6379` + +## Health Checks + +The mineru-api service includes a health check that verifies the service is running properly. + +## Development vs Production + +For development, you can still use the individual docker-compose files in each service directory. The unified setup is ideal for: + +- Production deployments +- End-to-end testing +- Simplified development environment + +## Troubleshooting + +### Service Communication Issues + +If services can't communicate: + +1. Check if all services are running: `docker-compose ps` +2. Verify network connectivity: `docker network ls` +3. Check service logs: `docker-compose logs [service-name]` + +### Port Conflicts + +If you get port conflicts, you can modify the port mappings in the `docker-compose.yml` file: + +```yaml +ports: + - "8002:8000" # Change external port +``` + +### Volume Issues + +Make sure the storage directories exist: + +```bash +mkdir -p backend/storage +mkdir -p mineru/storage/uploads +mkdir -p mineru/storage/processed +``` + +## Migration from Individual Compose Files + +If you were previously using individual docker-compose files: + +1. Stop all individual services: + ```bash + cd backend && docker-compose down + cd ../frontend && docker-compose down + cd ../mineru && docker-compose down + ``` + +2. Start the unified setup: + ```bash + cd .. && docker-compose up -d + ``` + +The unified setup maintains the same functionality while providing better service discovery and networking. \ No newline at end of file diff --git a/DOCKER_MIGRATION_GUIDE.md b/DOCKER_MIGRATION_GUIDE.md new file mode 100644 index 0000000..9d7d2de --- /dev/null +++ b/DOCKER_MIGRATION_GUIDE.md @@ -0,0 +1,399 @@ +# Docker Image Migration Guide + +This guide explains how to export your built Docker images, transfer them to another environment, and run them without rebuilding. + +## Overview + +The migration process involves: +1. **Export**: Save built images to tar files +2. **Transfer**: Copy tar files to target environment +3. **Import**: Load images on target environment +4. **Run**: Start services with imported images + +## Prerequisites + +### Source Environment (where images are built) +- Docker installed and running +- All services built and working +- Sufficient disk space for image export + +### Target Environment (where images will run) +- Docker installed and running +- Sufficient disk space for image import +- Network access to source environment (or USB drive) + +## Step 1: Export Docker Images + +### 1.1 List Current Images + +First, check what images you have: + +```bash +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}" +``` + +You should see images like: +- `legal-doc-masker-backend-api` +- `legal-doc-masker-frontend` +- `legal-doc-masker-mineru-api` +- `redis:alpine` + +### 1.2 Export Individual Images + +Create a directory for exports: + +```bash +mkdir -p docker-images-export +cd docker-images-export +``` + +Export each image: + +```bash +# Export backend image +docker save legal-doc-masker-backend-api:latest -o backend-api.tar + +# Export frontend image +docker save legal-doc-masker-frontend:latest -o frontend.tar + +# Export mineru image +docker save legal-doc-masker-mineru-api:latest -o mineru-api.tar + +# Export redis image (if not using official) +docker save redis:alpine -o redis.tar +``` + +### 1.3 Export All Images at Once (Alternative) + +If you want to export all images in one command: + +```bash +# Export all project images +docker save \ + legal-doc-masker-backend-api:latest \ + legal-doc-masker-frontend:latest \ + legal-doc-masker-mineru-api:latest \ + redis:alpine \ + -o legal-doc-masker-all.tar +``` + +### 1.4 Verify Export Files + +Check the exported files: + +```bash +ls -lh *.tar +``` + +You should see files like: +- `backend-api.tar` (~200-500MB) +- `frontend.tar` (~100-300MB) +- `mineru-api.tar` (~1-3GB) +- `redis.tar` (~30-50MB) + +## Step 2: Transfer Images + +### 2.1 Transfer via Network (SCP/RSYNC) + +```bash +# Transfer to remote server +scp *.tar user@remote-server:/path/to/destination/ + +# Or using rsync (more efficient for large files) +rsync -avz --progress *.tar user@remote-server:/path/to/destination/ +``` + +### 2.2 Transfer via USB Drive + +```bash +# Copy to USB drive +cp *.tar /Volumes/USB_DRIVE/docker-images/ + +# Or create a compressed archive +tar -czf legal-doc-masker-images.tar.gz *.tar +cp legal-doc-masker-images.tar.gz /Volumes/USB_DRIVE/ +``` + +### 2.3 Transfer via Cloud Storage + +```bash +# Upload to cloud storage (example with AWS S3) +aws s3 cp *.tar s3://your-bucket/docker-images/ + +# Or using Google Cloud Storage +gsutil cp *.tar gs://your-bucket/docker-images/ +``` + +## Step 3: Import Images on Target Environment + +### 3.1 Prepare Target Environment + +```bash +# Create directory for images +mkdir -p docker-images-import +cd docker-images-import + +# Copy images from transfer method +# (SCP, USB, or download from cloud storage) +``` + +### 3.2 Import Individual Images + +```bash +# Import backend image +docker load -i backend-api.tar + +# Import frontend image +docker load -i frontend.tar + +# Import mineru image +docker load -i mineru-api.tar + +# Import redis image +docker load -i redis.tar +``` + +### 3.3 Import All Images at Once (if exported together) + +```bash +docker load -i legal-doc-masker-all.tar +``` + +### 3.4 Verify Imported Images + +```bash +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}" +``` + +## Step 4: Prepare Target Environment + +### 4.1 Copy Project Files + +Transfer the following files to target environment: + +```bash +# Essential files to copy +docker-compose.yml +DOCKER_COMPOSE_README.md +setup-unified-docker.sh + +# Environment files (if they exist) +backend/.env +frontend/.env +mineru/.env + +# Storage directories (if you want to preserve data) +backend/storage/ +mineru/storage/ +backend/legal_doc_masker.db +``` + +### 4.2 Create Directory Structure + +```bash +# Create necessary directories +mkdir -p backend/storage +mkdir -p mineru/storage/uploads +mkdir -p mineru/storage/processed +``` + +## Step 5: Run Services + +### 5.1 Start All Services + +```bash +# Start all services using imported images +docker-compose up -d +``` + +### 5.2 Verify Services + +```bash +# Check service status +docker-compose ps + +# Check service logs +docker-compose logs -f +``` + +### 5.3 Test Endpoints + +```bash +# Test frontend +curl -I http://localhost:3000 + +# Test backend API +curl -I http://localhost:8000/api/v1 + +# Test mineru API +curl -I http://localhost:8001/health +``` + +## Automation Scripts + +### Export Script + +Create `export-images.sh`: + +```bash +#!/bin/bash + +set -e + +echo "🚀 Exporting Docker Images" + +# Create export directory +mkdir -p docker-images-export +cd docker-images-export + +# Export images +echo "📦 Exporting backend-api image..." +docker save legal-doc-masker-backend-api:latest -o backend-api.tar + +echo "📦 Exporting frontend image..." +docker save legal-doc-masker-frontend:latest -o frontend.tar + +echo "📦 Exporting mineru-api image..." +docker save legal-doc-masker-mineru-api:latest -o mineru-api.tar + +echo "📦 Exporting redis image..." +docker save redis:alpine -o redis.tar + +# Show file sizes +echo "📊 Export complete. File sizes:" +ls -lh *.tar + +echo "✅ Images exported successfully!" +``` + +### Import Script + +Create `import-images.sh`: + +```bash +#!/bin/bash + +set -e + +echo "🚀 Importing Docker Images" + +# Check if tar files exist +if [ ! -f "backend-api.tar" ]; then + echo "❌ backend-api.tar not found" + exit 1 +fi + +# Import images +echo "📦 Importing backend-api image..." +docker load -i backend-api.tar + +echo "📦 Importing frontend image..." +docker load -i frontend.tar + +echo "📦 Importing mineru-api image..." +docker load -i mineru-api.tar + +echo "📦 Importing redis image..." +docker load -i redis.tar + +# Verify imports +echo "📊 Imported images:" +docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep legal-doc-masker + +echo "✅ Images imported successfully!" +``` + +## Troubleshooting + +### Common Issues + +1. **Image not found during import** + ```bash + # Check if image exists + docker images | grep image-name + + # Re-export if needed + docker save image-name:tag -o image-name.tar + ``` + +2. **Port conflicts on target environment** + ```bash + # Check what's using the ports + lsof -i :8000 + lsof -i :8001 + lsof -i :3000 + + # Modify docker-compose.yml if needed + ports: + - "8002:8000" # Change external port + ``` + +3. **Permission issues** + ```bash + # Fix file permissions + chmod +x setup-unified-docker.sh + chmod +x export-images.sh + chmod +x import-images.sh + ``` + +4. **Storage directory issues** + ```bash + # Create directories with proper permissions + sudo mkdir -p backend/storage + sudo mkdir -p mineru/storage/uploads + sudo mkdir -p mineru/storage/processed + sudo chown -R $USER:$USER backend/storage mineru/storage + ``` + +### Performance Optimization + +1. **Compress images for transfer** + ```bash + # Compress before transfer + gzip *.tar + + # Decompress on target + gunzip *.tar.gz + ``` + +2. **Use parallel transfer** + ```bash + # Transfer multiple files in parallel + parallel scp {} user@server:/path/ ::: *.tar + ``` + +3. **Use Docker registry (alternative)** + ```bash + # Push to registry + docker tag legal-doc-masker-backend-api:latest your-registry/backend-api:latest + docker push your-registry/backend-api:latest + + # Pull on target + docker pull your-registry/backend-api:latest + ``` + +## Complete Migration Checklist + +- [ ] Export all Docker images +- [ ] Transfer image files to target environment +- [ ] Transfer project configuration files +- [ ] Import images on target environment +- [ ] Create necessary directories +- [ ] Start services +- [ ] Verify all services are running +- [ ] Test all endpoints +- [ ] Update any environment-specific configurations + +## Security Considerations + +1. **Secure transfer**: Use encrypted transfer methods (SCP, SFTP) +2. **Image verification**: Verify image integrity after transfer +3. **Environment isolation**: Ensure target environment is properly secured +4. **Access control**: Limit access to Docker daemon on target environment + +## Cost Optimization + +1. **Image size**: Remove unnecessary layers before export +2. **Compression**: Use compression for large images +3. **Selective transfer**: Only transfer images you need +4. **Cleanup**: Remove old images after successful migration \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ecc62ad..0000000 --- a/Dockerfile +++ /dev/null @@ -1,48 +0,0 @@ -# Build stage -FROM python:3.12-slim AS builder - -WORKDIR /app - -# Install build dependencies -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ - && rm -rf /var/lib/apt/lists/* - -# Copy requirements first to leverage Docker cache -COPY requirements.txt . -RUN pip wheel --no-cache-dir --no-deps --wheel-dir /app/wheels -r requirements.txt - -# Final stage -FROM python:3.12-slim - -WORKDIR /app - -# Create non-root user -RUN useradd -m -r appuser && \ - chown appuser:appuser /app - -# Copy wheels from builder -COPY --from=builder /app/wheels /wheels -COPY --from=builder /app/requirements.txt . - -# Install dependencies -RUN pip install --no-cache /wheels/* - -# Copy application code -COPY src/ ./src/ - -# Create directories for mounted volumes -RUN mkdir -p /data/input /data/output && \ - chown -R appuser:appuser /data - -# Switch to non-root user -USER appuser - -# Environment variables -ENV PYTHONPATH=/app \ - OBJECT_STORAGE_PATH=/data/input \ - TARGET_DIRECTORY_PATH=/data/output - -# Run the application -CMD ["python", "src/main.py"] \ No newline at end of file diff --git a/MIGRATION_QUICK_REFERENCE.md b/MIGRATION_QUICK_REFERENCE.md new file mode 100644 index 0000000..cd5c70d --- /dev/null +++ b/MIGRATION_QUICK_REFERENCE.md @@ -0,0 +1,178 @@ +# Docker Migration Quick Reference + +## 🚀 Quick Migration Process + +### Source Environment (Export) + +```bash +# 1. Build images first (if not already built) +docker-compose build + +# 2. Export all images +./export-images.sh + +# 3. Transfer files to target environment +# Option A: SCP +scp -r docker-images-export-*/ user@target-server:/path/to/destination/ + +# Option B: USB Drive +cp -r docker-images-export-*/ /Volumes/USB_DRIVE/ + +# Option C: Compressed archive +scp legal-doc-masker-images-*.tar.gz user@target-server:/path/to/destination/ +``` + +### Target Environment (Import) + +```bash +# 1. Copy project files +scp docker-compose.yml user@target-server:/path/to/destination/ +scp DOCKER_COMPOSE_README.md user@target-server:/path/to/destination/ + +# 2. Import images +./import-images.sh + +# 3. Start services +docker-compose up -d + +# 4. Verify +docker-compose ps +``` + +## 📋 Essential Files to Transfer + +### Required Files +- `docker-compose.yml` - Unified compose configuration +- `DOCKER_COMPOSE_README.md` - Documentation +- `backend/.env` - Backend environment variables +- `frontend/.env` - Frontend environment variables +- `mineru/.env` - Mineru environment variables (if exists) + +### Optional Files (for data preservation) +- `backend/storage/` - Backend storage directory +- `mineru/storage/` - Mineru storage directory +- `backend/legal_doc_masker.db` - Database file + +## 🔧 Common Commands + +### Export Commands +```bash +# Manual export +docker save legal-doc-masker-backend-api:latest -o backend-api.tar +docker save legal-doc-masker-frontend:latest -o frontend.tar +docker save legal-doc-masker-mineru-api:latest -o mineru-api.tar +docker save redis:alpine -o redis.tar + +# Compress for transfer +tar -czf legal-doc-masker-images.tar.gz *.tar +``` + +### Import Commands +```bash +# Manual import +docker load -i backend-api.tar +docker load -i frontend.tar +docker load -i mineru-api.tar +docker load -i redis.tar + +# Extract compressed archive +tar -xzf legal-doc-masker-images.tar.gz +``` + +### Service Management +```bash +# Start all services +docker-compose up -d + +# Stop all services +docker-compose down + +# View logs +docker-compose logs -f [service-name] + +# Check status +docker-compose ps +``` + +### Building Individual Services +```bash +# Build specific service only +docker-compose build backend-api +docker-compose build frontend +docker-compose build mineru-api + +# Build and restart specific service +docker-compose up -d --build backend-api + +# Force rebuild (no cache) +docker-compose build --no-cache backend-api + +# Using the build script +./build-service.sh backend-api --restart +./build-service.sh frontend --no-cache +./build-service.sh backend-api celery-worker +``` + +## 🌐 Service URLs + +After successful migration: +- **Frontend**: http://localhost:3000 +- **Backend API**: http://localhost:8000 +- **Mineru API**: http://localhost:8001 + +## ⚠️ Troubleshooting + +### Port Conflicts +```bash +# Check what's using ports +lsof -i :8000 +lsof -i :8001 +lsof -i :3000 + +# Modify docker-compose.yml if needed +ports: + - "8002:8000" # Change external port +``` + +### Permission Issues +```bash +# Fix script permissions +chmod +x export-images.sh +chmod +x import-images.sh +chmod +x setup-unified-docker.sh + +# Fix directory permissions +sudo chown -R $USER:$USER backend/storage mineru/storage +``` + +### Disk Space Issues +```bash +# Check available space +df -h + +# Clean up Docker +docker system prune -a +``` + +## 📊 Expected File Sizes + +- `backend-api.tar`: ~200-500MB +- `frontend.tar`: ~100-300MB +- `mineru-api.tar`: ~1-3GB +- `redis.tar`: ~30-50MB +- `legal-doc-masker-images.tar.gz`: ~1-2GB (compressed) + +## 🔒 Security Notes + +1. Use encrypted transfer (SCP, SFTP) for sensitive environments +2. Verify image integrity after transfer +3. Update environment variables for target environment +4. Ensure proper network security on target environment + +## 📞 Support + +If you encounter issues: +1. Check the full `DOCKER_MIGRATION_GUIDE.md` +2. Verify all required files are present +3. Check Docker logs: `docker-compose logs -f` +4. Ensure sufficient disk space and permissions \ No newline at end of file diff --git a/README.md b/README.md index dc3df6e..79dcf98 100644 --- a/README.md +++ b/README.md @@ -35,14 +35,20 @@ doc-processing-app cd doc-processing-app ``` -2. Install the required dependencies: +2. Install LibreOffice (required for document processing): + ``` + brew install libreoffice + ``` + +3. Install the required dependencies: ``` pip install -r requirements.txt + pip install -U magic-pdf[full] ``` -3. Configure the application by editing the `src/config/settings.py` file to set the paths for the object storage and target directory. +4. Configure the application by editing the `src/config/settings.py` file to set the paths for the object storage and target directory. -4. Create a `.env` file based on the `.env.example` file to set up necessary environment variables. +5. Create a `.env` file based on the `.env.example` file to set up necessary environment variables. ## Usage diff --git a/app.log b/app.log deleted file mode 100644 index c40399a..0000000 --- a/app.log +++ /dev/null @@ -1 +0,0 @@ -2025-04-20 20:14:00 - services.file_monitor - INFO - monitor: new file found: README.md diff --git a/backend/.env b/backend/.env new file mode 100644 index 0000000..5f3d24e --- /dev/null +++ b/backend/.env @@ -0,0 +1,20 @@ +# Storage paths +OBJECT_STORAGE_PATH=/Users/tigeren/Dev/digisky/legal-doc-masker/data/doc_src +TARGET_DIRECTORY_PATH=/Users/tigeren/Dev/digisky/legal-doc-masker/data/doc_dest +INTERMEDIATE_DIR_PATH=/Users/tigeren/Dev/digisky/legal-doc-masker/data/doc_intermediate + +# Ollama API Configuration +OLLAMA_API_URL=http://192.168.2.245:11434 +# OLLAMA_API_KEY=your_api_key_here +OLLAMA_MODEL=qwen3:8b + +# Application Settings +MONITOR_INTERVAL=5 + +# Logging Configuration +LOG_LEVEL=INFO +LOG_FILE=app.log + +# Optional: Additional security settings +# MAX_FILE_SIZE=10485760 # 10MB in bytes +# ALLOWED_FILE_TYPES=.txt,.doc,.docx,.pdf \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..27b0bfc --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,36 @@ +FROM python:3.11-slim + +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + libreoffice \ + wget \ + && rm -rf /var/lib/apt/lists/* + + +# Copy requirements first to leverage Docker cache +COPY requirements.txt . +# RUN pip install huggingface_hub +# RUN wget https://github.com/opendatalab/MinerU/raw/master/scripts/download_models_hf.py -O download_models_hf.py +# RUN wget https://raw.githubusercontent.com/opendatalab/MinerU/refs/heads/release-1.3.1/scripts/download_models_hf.py -O download_models_hf.py + +# RUN python download_models_hf.py + + +RUN pip install --no-cache-dir -r requirements.txt +# RUN pip install -U magic-pdf[full] + + +# Copy the rest of the application +COPY . . + +# Create storage directories +RUN mkdir -p storage/uploads storage/processed + +# Expose the port the app runs on +EXPOSE 8000 + +# Command to run the application +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/backend/PDF_PROCESSOR_README.md b/backend/PDF_PROCESSOR_README.md new file mode 100644 index 0000000..cf8f2f6 --- /dev/null +++ b/backend/PDF_PROCESSOR_README.md @@ -0,0 +1,202 @@ +# PDF Processor with Mineru API + +## Overview + +The PDF processor has been rewritten to use Mineru's REST API instead of the magic_pdf library. This provides better separation of concerns and allows for more flexible deployment options. + +## Changes Made + +### 1. Removed Dependencies +- Removed all `magic_pdf` imports and dependencies +- Removed `PyPDF2` direct usage (though kept in requirements for potential other uses) + +### 2. New Implementation +- **REST API Integration**: Uses HTTP requests to call Mineru's API +- **Configurable Settings**: Mineru API URL and timeout are configurable +- **Error Handling**: Comprehensive error handling for network issues, timeouts, and API errors +- **Flexible Response Parsing**: Handles multiple possible response formats from Mineru API + +### 3. Configuration + +Add the following settings to your environment or `.env` file: + +```bash +# Mineru API Configuration +MINERU_API_URL=http://mineru-api:8000 +MINERU_TIMEOUT=300 +MINERU_LANG_LIST=["ch"] +MINERU_BACKEND=pipeline +MINERU_PARSE_METHOD=auto +MINERU_FORMULA_ENABLE=true +MINERU_TABLE_ENABLE=true +``` + +### 4. API Endpoint + +The processor expects Mineru to provide a REST API endpoint at `/file_parse` that accepts PDF files via multipart form data and returns JSON with markdown content. + +#### Expected Request Format: +``` +POST /file_parse +Content-Type: multipart/form-data + +files: [PDF file] +output_dir: ./output +lang_list: ["ch"] +backend: pipeline +parse_method: auto +formula_enable: true +table_enable: true +return_md: true +return_middle_json: false +return_model_output: false +return_content_list: false +return_images: false +start_page_id: 0 +end_page_id: 99999 +``` + +#### Expected Response Format: +The processor can handle multiple response formats: + +```json +{ + "markdown": "# Document Title\n\nContent here..." +} +``` + +OR + +```json +{ + "md": "# Document Title\n\nContent here..." +} +``` + +OR + +```json +{ + "content": "# Document Title\n\nContent here..." +} +``` + +OR + +```json +{ + "result": { + "markdown": "# Document Title\n\nContent here..." + } +} +``` + +## Usage + +### Basic Usage + +```python +from app.core.document_handlers.processors.pdf_processor import PdfDocumentProcessor + +# Create processor instance +processor = PdfDocumentProcessor("input.pdf", "output.md") + +# Read and convert PDF to markdown +content = processor.read_content() + +# Process content (apply masking) +processed_content = processor.process_content(content) + +# Save processed content +processor.save_content(processed_content) +``` + +### Through Document Service + +```python +from app.core.services.document_service import DocumentService + +service = DocumentService() +success = service.process_document("input.pdf", "output.md") +``` + +## Testing + +Run the test script to verify the implementation: + +```bash +cd backend +python test_pdf_processor.py +``` + +Make sure you have: +1. A sample PDF file in the `sample_doc/` directory +2. Mineru API service running and accessible +3. Proper network connectivity between services + +## Error Handling + +The processor handles various error scenarios: + +- **Network Timeouts**: Configurable timeout (default: 5 minutes) +- **API Errors**: HTTP status code errors are logged and handled +- **Response Parsing**: Multiple fallback strategies for extracting markdown content +- **File Operations**: Proper error handling for file reading/writing + +## Logging + +The processor provides detailed logging for debugging: + +- API call attempts and responses +- Content extraction results +- Error conditions and stack traces +- Processing statistics + +## Deployment + +### Docker Compose + +Ensure your Mineru service is running and accessible. The default configuration expects it at `http://mineru-api:8000`. + +### Environment Variables + +Set the following environment variables in your deployment: + +```bash +MINERU_API_URL=http://your-mineru-service:8000 +MINERU_TIMEOUT=300 +``` + +## Troubleshooting + +### Common Issues + +1. **Connection Refused**: Check if Mineru service is running and accessible +2. **Timeout Errors**: Increase `MINERU_TIMEOUT` for large PDF files +3. **Empty Content**: Check Mineru API response format and logs +4. **Network Issues**: Verify network connectivity between services + +### Debug Mode + +Enable debug logging to see detailed API interactions: + +```python +import logging +logging.getLogger('app.core.document_handlers.processors.pdf_processor').setLevel(logging.DEBUG) +``` + +## Migration from magic_pdf + +If you were previously using magic_pdf: + +1. **No Code Changes Required**: The interface remains the same +2. **Configuration Update**: Add Mineru API settings +3. **Service Dependencies**: Ensure Mineru service is running +4. **Testing**: Run the test script to verify functionality + +## Performance Considerations + +- **Timeout**: Large PDFs may require longer timeouts +- **Memory**: The processor loads the entire PDF into memory for API calls +- **Network**: API calls add network latency to processing time +- **Caching**: Consider implementing caching for frequently processed documents \ No newline at end of file diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..36cae2a --- /dev/null +++ b/backend/README.md @@ -0,0 +1,103 @@ +# Legal Document Masker API + +This is the backend API for the Legal Document Masking system. It provides endpoints for file upload, processing status tracking, and file download. + +## Prerequisites + +- Python 3.8+ +- Redis (for Celery) + +## File Storage + +Files are stored in the following structure: +``` +backend/ +├── storage/ +│ ├── uploads/ # Original uploaded files +│ └── processed/ # Masked/processed files +``` + +## Setup + +### Option 1: Local Development + +1. Create a virtual environment: +```bash +python -m venv venv +source venv/bin/activate # On Windows: venv\Scripts\activate +``` + +2. Install dependencies: +```bash +pip install -r requirements.txt +``` + +3. Set up environment variables: +Create a `.env` file in the backend directory with the following variables: +```env +SECRET_KEY=your-secret-key-here +``` + +The database (SQLite) will be automatically created when you first run the application. + +4. Start Redis (required for Celery): +```bash +redis-server +``` + +5. Start Celery worker: +```bash +celery -A app.services.file_service worker --loglevel=info +``` + +6. Start the FastAPI server: +```bash +uvicorn app.main:app --reload +``` + +### Option 2: Docker Deployment + +1. Build and start the services: +```bash +docker-compose up --build +``` + +This will start: +- FastAPI server on port 8000 +- Celery worker for background processing +- Redis for task queue + +## API Documentation + +Once the server is running, you can access: +- Swagger UI: `http://localhost:8000/docs` +- ReDoc: `http://localhost:8000/redoc` + +## API Endpoints + +- `POST /api/v1/files/upload` - Upload a new file +- `GET /api/v1/files` - List all files +- `GET /api/v1/files/{file_id}` - Get file details +- `GET /api/v1/files/{file_id}/download` - Download processed file +- `WS /api/v1/files/ws/status/{file_id}` - WebSocket for real-time status updates + +## Development + +### Running Tests +```bash +pytest +``` + +### Code Style +The project uses Black for code formatting: +```bash +black . +``` + +### Docker Commands + +- Start services: `docker-compose up` +- Start in background: `docker-compose up -d` +- Stop services: `docker-compose down` +- View logs: `docker-compose logs -f` +- Rebuild: `docker-compose up --build` \ No newline at end of file diff --git a/backend/app/api/endpoints/files.py b/backend/app/api/endpoints/files.py new file mode 100644 index 0000000..62ad31b --- /dev/null +++ b/backend/app/api/endpoints/files.py @@ -0,0 +1,166 @@ +from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, WebSocket, Response +from fastapi.responses import FileResponse +from sqlalchemy.orm import Session +from typing import List +import os +from ...core.config import settings +from ...core.database import get_db +from ...models.file import File as FileModel, FileStatus +from ...services.file_service import process_file, delete_file +from ...schemas.file import FileResponse as FileResponseSchema, FileList +import asyncio +from fastapi import WebSocketDisconnect +import uuid + +router = APIRouter() + +@router.post("/upload", response_model=FileResponseSchema) +async def upload_file( + file: UploadFile = File(...), + db: Session = Depends(get_db) +): + if not file.filename: + raise HTTPException(status_code=400, detail="No file provided") + + if not any(file.filename.lower().endswith(ext) for ext in settings.ALLOWED_EXTENSIONS): + raise HTTPException( + status_code=400, + detail=f"File type not allowed. Allowed types: {', '.join(settings.ALLOWED_EXTENSIONS)}" + ) + + # Generate unique file ID + file_id = str(uuid.uuid4()) + file_extension = os.path.splitext(file.filename)[1] + unique_filename = f"{file_id}{file_extension}" + + # Save file with unique name + file_path = settings.UPLOAD_FOLDER / unique_filename + with open(file_path, "wb") as buffer: + content = await file.read() + buffer.write(content) + + # Create database entry + db_file = FileModel( + id=file_id, + filename=file.filename, + original_path=str(file_path), + status=FileStatus.NOT_STARTED + ) + db.add(db_file) + db.commit() + db.refresh(db_file) + + # Start processing + process_file.delay(str(db_file.id)) + + return db_file + +@router.get("/files", response_model=List[FileResponseSchema]) +def list_files( + skip: int = 0, + limit: int = 100, + db: Session = Depends(get_db) +): + files = db.query(FileModel).offset(skip).limit(limit).all() + return files + +@router.get("/files/{file_id}", response_model=FileResponseSchema) +def get_file( + file_id: str, + db: Session = Depends(get_db) +): + file = db.query(FileModel).filter(FileModel.id == file_id).first() + if not file: + raise HTTPException(status_code=404, detail="File not found") + return file + +@router.get("/files/{file_id}/download") +async def download_file( + file_id: str, + db: Session = Depends(get_db) +): + print(f"=== DOWNLOAD REQUEST ===") + print(f"File ID: {file_id}") + + file = db.query(FileModel).filter(FileModel.id == file_id).first() + if not file: + print(f"❌ File not found for ID: {file_id}") + raise HTTPException(status_code=404, detail="File not found") + + print(f"✅ File found: {file.filename}") + print(f"File status: {file.status}") + print(f"Original path: {file.original_path}") + print(f"Processed path: {file.processed_path}") + + if file.status != FileStatus.SUCCESS: + print(f"❌ File not ready for download. Status: {file.status}") + raise HTTPException(status_code=400, detail="File is not ready for download") + + if not os.path.exists(file.processed_path): + print(f"❌ Processed file not found at: {file.processed_path}") + raise HTTPException(status_code=404, detail="Processed file not found") + + print(f"✅ Processed file exists at: {file.processed_path}") + + # Get the original filename without extension and add .md extension + original_filename = file.filename + filename_without_ext = os.path.splitext(original_filename)[0] + download_filename = f"{filename_without_ext}.md" + + print(f"Original filename: {original_filename}") + print(f"Filename without extension: {filename_without_ext}") + print(f"Download filename: {download_filename}") + + + response = FileResponse( + path=file.processed_path, + filename=download_filename, + media_type="text/markdown" + ) + + print(f"Response headers: {dict(response.headers)}") + print(f"=== END DOWNLOAD REQUEST ===") + + return response + +@router.websocket("/ws/status/{file_id}") +async def websocket_endpoint(websocket: WebSocket, file_id: str, db: Session = Depends(get_db)): + await websocket.accept() + try: + while True: + file = db.query(FileModel).filter(FileModel.id == file_id).first() + if not file: + await websocket.send_json({"error": "File not found"}) + break + + await websocket.send_json({ + "status": file.status, + "error": file.error_message + }) + + if file.status in [FileStatus.SUCCESS, FileStatus.FAILED]: + break + + await asyncio.sleep(1) + except WebSocketDisconnect: + pass + +@router.delete("/files/{file_id}") +async def delete_file_endpoint( + file_id: str, + db: Session = Depends(get_db) +): + """ + Delete a file and its associated records. + This will remove: + 1. The database record + 2. The original uploaded file + 3. The processed markdown file (if it exists) + """ + try: + delete_file(file_id) + return {"message": "File deleted successfully"} + except HTTPException as e: + raise e + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) \ No newline at end of file diff --git a/backend/app/core/config.py b/backend/app/core/config.py new file mode 100644 index 0000000..4f9e1c0 --- /dev/null +++ b/backend/app/core/config.py @@ -0,0 +1,65 @@ +from pydantic_settings import BaseSettings +from typing import Optional +import os +from pathlib import Path + +class Settings(BaseSettings): + # API Settings + API_V1_STR: str = "/api/v1" + PROJECT_NAME: str = "Legal Document Masker API" + + # Security + SECRET_KEY: str = "your-secret-key-here" # Change in production + ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 8 # 8 days + + # Database + BASE_DIR: Path = Path(__file__).parent.parent.parent + DATABASE_URL: str = f"sqlite:///{BASE_DIR}/storage/legal_doc_masker.db" + + # File Storage + UPLOAD_FOLDER: Path = BASE_DIR / "storage" / "uploads" + PROCESSED_FOLDER: Path = BASE_DIR / "storage" / "processed" + MAX_FILE_SIZE: int = 50 * 1024 * 1024 # 50MB + ALLOWED_EXTENSIONS: set = {"pdf", "docx", "doc", "md"} + + # Celery + CELERY_BROKER_URL: str = "redis://redis:6379/0" + CELERY_RESULT_BACKEND: str = "redis://redis:6379/0" + + # Ollama API settings + OLLAMA_API_URL: str = "https://api.ollama.com" + OLLAMA_API_KEY: str = "" + OLLAMA_MODEL: str = "llama2" + + # Mineru API settings + MINERU_API_URL: str = "http://mineru-api:8000" + # MINERU_API_URL: str = "http://host.docker.internal:8001" + + MINERU_TIMEOUT: int = 300 # 5 minutes timeout + MINERU_LANG_LIST: list = ["ch"] # Language list for parsing + MINERU_BACKEND: str = "pipeline" # Backend to use + MINERU_PARSE_METHOD: str = "auto" # Parse method + MINERU_FORMULA_ENABLE: bool = True # Enable formula parsing + MINERU_TABLE_ENABLE: bool = True # Enable table parsing + + # Logging settings + LOG_LEVEL: str = "INFO" + LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + LOG_DATE_FORMAT: str = "%Y-%m-%d %H:%M:%S" + LOG_FILE: str = "app.log" + + class Config: + case_sensitive = True + env_file = ".env" + env_file_encoding = "utf-8" + extra = "allow" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + # Create storage directories if they don't exist + self.UPLOAD_FOLDER.mkdir(parents=True, exist_ok=True) + self.PROCESSED_FOLDER.mkdir(parents=True, exist_ok=True) + # Create storage directory for database + (self.BASE_DIR / "storage").mkdir(parents=True, exist_ok=True) + +settings = Settings() \ No newline at end of file diff --git a/src/config/logging_config.py b/backend/app/core/config/logging_config.py similarity index 89% rename from src/config/logging_config.py rename to backend/app/core/config/logging_config.py index e30f704..3e3c7a3 100644 --- a/src/config/logging_config.py +++ b/backend/app/core/config/logging_config.py @@ -1,5 +1,6 @@ import logging.config -from config.settings import settings +# from config.settings import settings +from .settings import settings LOGGING_CONFIG = { "version": 1, diff --git a/backend/app/core/config/settings.py b/backend/app/core/config/settings.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/core/database.py b/backend/app/core/database.py new file mode 100644 index 0000000..e1dca40 --- /dev/null +++ b/backend/app/core/database.py @@ -0,0 +1,21 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +from .config import settings + +# Create SQLite engine with check_same_thread=False for FastAPI +engine = create_engine( + settings.DATABASE_URL, + connect_args={"check_same_thread": False} +) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +Base = declarative_base() + +# Dependency +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() \ No newline at end of file diff --git a/src/models/document.py b/backend/app/core/document_handlers/document.py similarity index 100% rename from src/models/document.py rename to backend/app/core/document_handlers/document.py diff --git a/src/models/document_factory.py b/backend/app/core/document_handlers/document_factory.py similarity index 55% rename from src/models/document_factory.py rename to backend/app/core/document_handlers/document_factory.py index 4b3803e..530f536 100644 --- a/src/models/document_factory.py +++ b/backend/app/core/document_handlers/document_factory.py @@ -1,10 +1,11 @@ import os from typing import Optional -from models.document_processor import DocumentProcessor -from models.processors import ( +from .document_processor import DocumentProcessor +from .processors import ( TxtDocumentProcessor, - DocxDocumentProcessor, - PdfDocumentProcessor + # DocxDocumentProcessor, + PdfDocumentProcessor, + MarkdownDocumentProcessor ) class DocumentProcessorFactory: @@ -14,9 +15,11 @@ class DocumentProcessorFactory: processors = { '.txt': TxtDocumentProcessor, - '.docx': DocxDocumentProcessor, - '.doc': DocxDocumentProcessor, - '.pdf': PdfDocumentProcessor + # '.docx': DocxDocumentProcessor, + # '.doc': DocxDocumentProcessor, + '.pdf': PdfDocumentProcessor, + '.md': MarkdownDocumentProcessor, + '.markdown': MarkdownDocumentProcessor } processor_class = processors.get(file_extension) diff --git a/backend/app/core/document_handlers/document_processor.py b/backend/app/core/document_handlers/document_processor.py new file mode 100644 index 0000000..4c61ba5 --- /dev/null +++ b/backend/app/core/document_handlers/document_processor.py @@ -0,0 +1,71 @@ +from abc import ABC, abstractmethod +from typing import Any, Dict +import logging +from .ner_processor import NerProcessor + +logger = logging.getLogger(__name__) + +class DocumentProcessor(ABC): + + def __init__(self): + self.max_chunk_size = 1000 # Maximum number of characters per chunk + self.ner_processor = NerProcessor() + + @abstractmethod + def read_content(self) -> str: + """Read document content""" + pass + + def _split_into_chunks(self, sentences: list[str]) -> list[str]: + """Split sentences into chunks that don't exceed max_chunk_size""" + chunks = [] + current_chunk = "" + + for sentence in sentences: + if not sentence.strip(): + continue + + if len(current_chunk) + len(sentence) > self.max_chunk_size and current_chunk: + chunks.append(current_chunk) + current_chunk = sentence + else: + if current_chunk: + current_chunk += "。" + sentence + else: + current_chunk = sentence + + if current_chunk: + chunks.append(current_chunk) + logger.info(f"Split content into {len(chunks)} chunks") + + return chunks + + def _apply_mapping(self, text: str, mapping: Dict[str, str]) -> str: + """Apply the mapping to replace sensitive information""" + masked_text = text + for original, masked in mapping.items(): + if isinstance(masked, dict): + masked = next(iter(masked.values()), "某") + elif not isinstance(masked, str): + masked = str(masked) if masked is not None else "某" + masked_text = masked_text.replace(original, masked) + return masked_text + + def process_content(self, content: str) -> str: + """Process document content by masking sensitive information""" + sentences = content.split("。") + + chunks = self._split_into_chunks(sentences) + logger.info(f"Split content into {len(chunks)} chunks") + + final_mapping = self.ner_processor.process(chunks) + + masked_content = self._apply_mapping(content, final_mapping) + logger.info("Successfully masked content") + + return masked_content + + @abstractmethod + def save_content(self, content: str) -> None: + """Save processed content""" + pass diff --git a/backend/app/core/document_handlers/ner_processor.py b/backend/app/core/document_handlers/ner_processor.py new file mode 100644 index 0000000..eb9f365 --- /dev/null +++ b/backend/app/core/document_handlers/ner_processor.py @@ -0,0 +1,305 @@ +from typing import Any, Dict +from ..prompts.masking_prompts import get_ner_name_prompt, get_ner_company_prompt, get_ner_address_prompt, get_ner_project_prompt, get_ner_case_number_prompt, get_entity_linkage_prompt +import logging +import json +from ..services.ollama_client import OllamaClient +from ...core.config import settings +from ..utils.json_extractor import LLMJsonExtractor +from ..utils.llm_validator import LLMResponseValidator +import re +from .regs.entity_regex import extract_id_number_entities, extract_social_credit_code_entities + +logger = logging.getLogger(__name__) + +class NerProcessor: + def __init__(self): + self.ollama_client = OllamaClient(model_name=settings.OLLAMA_MODEL, base_url=settings.OLLAMA_API_URL) + self.max_retries = 3 + + def _validate_mapping_format(self, mapping: Dict[str, Any]) -> bool: + return LLMResponseValidator.validate_entity_extraction(mapping) + + def _process_entity_type(self, chunk: str, prompt_func, entity_type: str) -> Dict[str, str]: + for attempt in range(self.max_retries): + try: + formatted_prompt = prompt_func(chunk) + logger.info(f"Calling ollama to generate {entity_type} mapping for chunk (attempt {attempt + 1}/{self.max_retries}): {formatted_prompt}") + response = self.ollama_client.generate(formatted_prompt) + logger.info(f"Raw response from LLM: {response}") + + mapping = LLMJsonExtractor.parse_raw_json_str(response) + logger.info(f"Parsed mapping: {mapping}") + + if mapping and self._validate_mapping_format(mapping): + return mapping + else: + logger.warning(f"Invalid mapping format received on attempt {attempt + 1}, retrying...") + except Exception as e: + logger.error(f"Error generating {entity_type} mapping on attempt {attempt + 1}: {e}") + if attempt < self.max_retries - 1: + logger.info("Retrying...") + else: + logger.error(f"Max retries reached for {entity_type}, returning empty mapping") + + return {} + + def build_mapping(self, chunk: str) -> list[Dict[str, str]]: + mapping_pipeline = [] + + entity_configs = [ + (get_ner_name_prompt, "people names"), + (get_ner_company_prompt, "company names"), + (get_ner_address_prompt, "addresses"), + (get_ner_project_prompt, "project names"), + (get_ner_case_number_prompt, "case numbers") + ] + for prompt_func, entity_type in entity_configs: + mapping = self._process_entity_type(chunk, prompt_func, entity_type) + if mapping: + mapping_pipeline.append(mapping) + + regex_entity_extractors = [ + extract_id_number_entities, + extract_social_credit_code_entities + ] + for extractor in regex_entity_extractors: + mapping = extractor(chunk) + if mapping and LLMResponseValidator.validate_regex_entity(mapping): + mapping_pipeline.append(mapping) + elif mapping: + logger.warning(f"Invalid regex entity mapping format: {mapping}") + + return mapping_pipeline + + def _merge_entity_mappings(self, chunk_mappings: list[Dict[str, Any]]) -> list[Dict[str, str]]: + all_entities = [] + for mapping in chunk_mappings: + if isinstance(mapping, dict) and 'entities' in mapping: + entities = mapping['entities'] + if isinstance(entities, list): + all_entities.extend(entities) + + unique_entities = [] + seen_texts = set() + + for entity in all_entities: + if isinstance(entity, dict) and 'text' in entity: + text = entity['text'].strip() + if text and text not in seen_texts: + seen_texts.add(text) + unique_entities.append(entity) + elif text and text in seen_texts: + # 暂时记录下可能存在冲突的entity + logger.info(f"Duplicate entity found: {entity}") + continue + + logger.info(f"Merged {len(unique_entities)} unique entities") + return unique_entities + + def _generate_masked_mapping(self, unique_entities: list[Dict[str, str]], linkage: Dict[str, Any]) -> Dict[str, str]: + """ + 结合 linkage 信息,按实体分组映射同一脱敏名,并实现如下规则: + 1. 人名/简称:保留姓,名变为某,同姓编号; + 2. 公司名:同组公司名映射为大写字母公司(A公司、B公司...); + 3. 英文人名:每个单词首字母+***; + 4. 英文公司名:替换为所属行业名称,英文大写(如无行业信息,默认 COMPANY); + 5. 项目名:项目名称变为小写英文字母(如 a项目、b项目...); + 6. 案号:只替换案号中的数字部分为***,保留前后结构和“号”字,支持中间有空格; + 7. 身份证号:6位X; + 8. 社会信用代码:8位X; + 9. 地址:保留区级及以上行政区划,去除详细位置; + 10. 其他类型按原有逻辑。 + """ + import re + entity_mapping = {} + used_masked_names = set() + group_mask_map = {} + surname_counter = {} + company_letter = ord('A') + project_letter = ord('a') + # 优先区县级单位,后市、省等 + admin_keywords = [ + '市辖区', '自治县', '自治旗', '林区', '区', '县', '旗', '州', '盟', '地区', '自治州', + '市', '省', '自治区', '特别行政区' + ] + admin_pattern = r"^(.*?(?:" + '|'.join(admin_keywords) + r"))" + for group in linkage.get('entity_groups', []): + group_type = group.get('group_type', '') + entities = group.get('entities', []) + if '公司' in group_type or 'Company' in group_type: + masked = chr(company_letter) + '公司' + company_letter += 1 + for entity in entities: + group_mask_map[entity['text']] = masked + elif '人名' in group_type: + surname_local_counter = {} + for entity in entities: + name = entity['text'] + if not name: + continue + surname = name[0] + surname_local_counter.setdefault(surname, 0) + surname_local_counter[surname] += 1 + if surname_local_counter[surname] == 1: + masked = f"{surname}某" + else: + masked = f"{surname}某{surname_local_counter[surname]}" + group_mask_map[name] = masked + elif '英文人名' in group_type: + for entity in entities: + name = entity['text'] + if not name: + continue + masked = ' '.join([n[0] + '***' if n else '' for n in name.split()]) + group_mask_map[name] = masked + for entity in unique_entities: + text = entity['text'] + entity_type = entity.get('type', '') + if text in group_mask_map: + entity_mapping[text] = group_mask_map[text] + used_masked_names.add(group_mask_map[text]) + elif '英文公司名' in entity_type or 'English Company' in entity_type: + industry = entity.get('industry', 'COMPANY') + masked = industry.upper() + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '项目名' in entity_type: + masked = chr(project_letter) + '项目' + project_letter += 1 + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '案号' in entity_type: + masked = re.sub(r'(\d[\d\s]*)(号)', r'***\2', text) + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '身份证号' in entity_type: + masked = 'X' * 6 + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '社会信用代码' in entity_type: + masked = 'X' * 8 + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '地址' in entity_type: + # 保留区级及以上行政区划,去除详细位置 + match = re.match(admin_pattern, text) + if match: + masked = match.group(1) + else: + masked = text # fallback + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '人名' in entity_type: + name = text + if not name: + masked = '某' + else: + surname = name[0] + surname_counter.setdefault(surname, 0) + surname_counter[surname] += 1 + if surname_counter[surname] == 1: + masked = f"{surname}某" + else: + masked = f"{surname}某{surname_counter[surname]}" + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '公司' in entity_type or 'Company' in entity_type: + masked = chr(company_letter) + '公司' + company_letter += 1 + entity_mapping[text] = masked + used_masked_names.add(masked) + elif '英文人名' in entity_type: + name = text + masked = ' '.join([n[0] + '***' if n else '' for n in name.split()]) + entity_mapping[text] = masked + used_masked_names.add(masked) + else: + base_name = '某' + masked = base_name + counter = 1 + while masked in used_masked_names: + if counter <= 10: + suffixes = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'] + masked = base_name + suffixes[counter - 1] + else: + masked = f"{base_name}{counter}" + counter += 1 + entity_mapping[text] = masked + used_masked_names.add(masked) + return entity_mapping + + def _validate_linkage_format(self, linkage: Dict[str, Any]) -> bool: + return LLMResponseValidator.validate_entity_linkage(linkage) + + def _create_entity_linkage(self, unique_entities: list[Dict[str, str]]) -> Dict[str, Any]: + linkable_entities = [] + for entity in unique_entities: + entity_type = entity.get('type', '') + if any(keyword in entity_type for keyword in ['公司', 'Company', '人名', '英文人名']): + linkable_entities.append(entity) + + if not linkable_entities: + logger.info("No linkable entities found") + return {"entity_groups": []} + + entities_text = "\n".join([ + f"- {entity['text']} (类型: {entity['type']})" + for entity in linkable_entities + ]) + + for attempt in range(self.max_retries): + try: + formatted_prompt = get_entity_linkage_prompt(entities_text) + logger.info(f"Calling ollama to generate entity linkage (attempt {attempt + 1}/{self.max_retries})") + response = self.ollama_client.generate(formatted_prompt) + logger.info(f"Raw entity linkage response from LLM: {response}") + + linkage = LLMJsonExtractor.parse_raw_json_str(response) + logger.info(f"Parsed entity linkage: {linkage}") + + if linkage and self._validate_linkage_format(linkage): + logger.info(f"Successfully created entity linkage with {len(linkage.get('entity_groups', []))} groups") + return linkage + else: + logger.warning(f"Invalid entity linkage format received on attempt {attempt + 1}, retrying...") + except Exception as e: + logger.error(f"Error generating entity linkage on attempt {attempt + 1}: {e}") + if attempt < self.max_retries - 1: + logger.info("Retrying...") + else: + logger.error("Max retries reached for entity linkage, returning empty linkage") + + return {"entity_groups": []} + + def _apply_entity_linkage_to_mapping(self, entity_mapping: Dict[str, str], entity_linkage: Dict[str, Any]) -> Dict[str, str]: + """ + linkage 已在 _generate_masked_mapping 中处理,此处直接返回 entity_mapping。 + """ + return entity_mapping + + def process(self, chunks: list[str]) -> Dict[str, str]: + chunk_mappings = [] + for i, chunk in enumerate(chunks): + logger.info(f"Processing chunk {i+1}/{len(chunks)}") + chunk_mapping = self.build_mapping(chunk) + logger.info(f"Chunk mapping: {chunk_mapping}") + chunk_mappings.extend(chunk_mapping) + + logger.info(f"Final chunk mappings: {chunk_mappings}") + + unique_entities = self._merge_entity_mappings(chunk_mappings) + logger.info(f"Unique entities: {unique_entities}") + + entity_linkage = self._create_entity_linkage(unique_entities) + logger.info(f"Entity linkage: {entity_linkage}") + + # for quick test + # unique_entities = [{'text': '郭东军', 'type': '人名'}, {'text': '王欢子', 'type': '人名'}, {'text': '北京丰复久信营销科技有限公司', 'type': '公司名称'}, {'text': '丰复久信公司', 'type': '公司名称简称'}, {'text': '中研智创区块链技术有限公司', 'type': '公司名称'}, {'text': '中研智才公司', 'type': '公司名称简称'}, {'text': '北京市海淀区北小马厂6 号1 号楼华天大厦1306 室', 'type': '地址'}, {'text': '天津市津南区双港镇工业园区优谷产业园5 号楼-1505', 'type': '地址'}, {'text': '服务合同', 'type': '项目名'}, {'text': '(2022)京 03 民终 3852 号', 'type': '案号'}, {'text': '(2020)京0105 民初69754 号', 'type': '案号'}, {'text': '李圣艳', 'type': '人名'}, {'text': '闫向东', 'type': '人名'}, {'text': '李敏', 'type': '人名'}, {'text': '布兰登·斯密特', 'type': '英文人名'}, {'text': '中研智创公司', 'type': '公司名称'}, {'text': '丰复久信', 'type': '公司名称简称'}, {'text': '中研智创', 'type': '公司名称简称'}, {'text': '上海市', 'type': '地址'}, {'text': '北京', 'type': '地址'}, {'text': '《计算机设备采购合同》', 'type': '项目名'}, {'text': '《服务合同书》', 'type': '项目名'}] + # entity_linkage = {'entity_groups': [{'group_id': 'group_1', 'group_type': '公司名称', 'entities': [{'text': '北京丰复久信营销科技有限公司', 'type': '公司名称', 'is_primary': True}, {'text': '丰复久信公司', 'type': '公司名称简称', 'is_primary': False}, {'text': '丰复久信', 'type': '公司名称简称', 'is_primary': False}]}, {'group_id': 'group_2', 'group_type': '公司名称', 'entities': [{'text': '中研智创区块链技术有限公司', 'type': '公司名称', 'is_primary': True}, {'text': '中研智创公司', 'type': '公司名称简称', 'is_primary': False}, {'text': '中研智创', 'type': '公司名称简称', 'is_primary': False}]}]} + combined_mapping = self._generate_masked_mapping(unique_entities, entity_linkage) + logger.info(f"Combined mapping: {combined_mapping}") + + final_mapping = self._apply_entity_linkage_to_mapping(combined_mapping, entity_linkage) + logger.info(f"Final mapping: {final_mapping}") + + return final_mapping diff --git a/backend/app/core/document_handlers/processors/__init__.py b/backend/app/core/document_handlers/processors/__init__.py new file mode 100644 index 0000000..fd143d5 --- /dev/null +++ b/backend/app/core/document_handlers/processors/__init__.py @@ -0,0 +1,7 @@ +from .txt_processor import TxtDocumentProcessor +# from .docx_processor import DocxDocumentProcessor +from .pdf_processor import PdfDocumentProcessor +from .md_processor import MarkdownDocumentProcessor + +# __all__ = ['TxtDocumentProcessor', 'DocxDocumentProcessor', 'PdfDocumentProcessor', 'MarkdownDocumentProcessor'] +__all__ = ['TxtDocumentProcessor', 'PdfDocumentProcessor', 'MarkdownDocumentProcessor'] \ No newline at end of file diff --git a/backend/app/core/document_handlers/processors/docx_processor.py.backup b/backend/app/core/document_handlers/processors/docx_processor.py.backup new file mode 100644 index 0000000..598ba09 --- /dev/null +++ b/backend/app/core/document_handlers/processors/docx_processor.py.backup @@ -0,0 +1,77 @@ +import os +import docx +from ...document_handlers.document_processor import DocumentProcessor +from magic_pdf.data.data_reader_writer import FileBasedDataWriter +from magic_pdf.model.doc_analyze_by_custom_model import doc_analyze +from magic_pdf.data.read_api import read_local_office +import logging +from ...services.ollama_client import OllamaClient +from ...config import settings +from ...prompts.masking_prompts import get_masking_mapping_prompt + +logger = logging.getLogger(__name__) + +class DocxDocumentProcessor(DocumentProcessor): + def __init__(self, input_path: str, output_path: str): + super().__init__() # Call parent class's __init__ + self.input_path = input_path + self.output_path = output_path + self.output_dir = os.path.dirname(output_path) + self.name_without_suff = os.path.splitext(os.path.basename(input_path))[0] + + # Setup output directories + self.local_image_dir = os.path.join(self.output_dir, "images") + self.image_dir = os.path.basename(self.local_image_dir) + os.makedirs(self.local_image_dir, exist_ok=True) + + self.ollama_client = OllamaClient(model_name=settings.OLLAMA_MODEL, base_url=settings.OLLAMA_API_URL) + + def read_content(self) -> str: + try: + # Initialize writers + image_writer = FileBasedDataWriter(self.local_image_dir) + md_writer = FileBasedDataWriter(self.output_dir) + + # Create Dataset Instance and process + ds = read_local_office(self.input_path)[0] + pipe_result = ds.apply(doc_analyze, ocr=True).pipe_txt_mode(image_writer) + + # Generate markdown + md_content = pipe_result.get_markdown(self.image_dir) + pipe_result.dump_md(md_writer, f"{self.name_without_suff}.md", self.image_dir) + + return md_content + except Exception as e: + logger.error(f"Error converting DOCX to MD: {e}") + raise + + # def process_content(self, content: str) -> str: + # logger.info("Processing DOCX content") + + # # Split content into sentences and apply masking + # sentences = content.split("。") + # final_md = "" + # for sentence in sentences: + # if sentence.strip(): # Only process non-empty sentences + # formatted_prompt = get_masking_mapping_prompt(sentence) + # logger.info("Calling ollama to generate response, prompt: %s", formatted_prompt) + # response = self.ollama_client.generate(formatted_prompt) + # logger.info(f"Response generated: {response}") + # final_md += response + "。" + + # return final_md + + def save_content(self, content: str) -> None: + # Ensure output path has .md extension + output_dir = os.path.dirname(self.output_path) + base_name = os.path.splitext(os.path.basename(self.output_path))[0] + md_output_path = os.path.join(output_dir, f"{base_name}.md") + + logger.info(f"Saving masked content to: {md_output_path}") + try: + with open(md_output_path, 'w', encoding='utf-8') as file: + file.write(content) + logger.info(f"Successfully saved content to {md_output_path}") + except Exception as e: + logger.error(f"Error saving content: {e}") + raise \ No newline at end of file diff --git a/backend/app/core/document_handlers/processors/md_processor.py b/backend/app/core/document_handlers/processors/md_processor.py new file mode 100644 index 0000000..4d48fc5 --- /dev/null +++ b/backend/app/core/document_handlers/processors/md_processor.py @@ -0,0 +1,39 @@ +import os +from ...document_handlers.document_processor import DocumentProcessor +from ...services.ollama_client import OllamaClient +import logging +from ...config import settings + +logger = logging.getLogger(__name__) + +class MarkdownDocumentProcessor(DocumentProcessor): + def __init__(self, input_path: str, output_path: str): + super().__init__() # Call parent class's __init__ + self.input_path = input_path + self.output_path = output_path + self.ollama_client = OllamaClient(model_name=settings.OLLAMA_MODEL, base_url=settings.OLLAMA_API_URL) + + def read_content(self) -> str: + """Read markdown content from file""" + try: + with open(self.input_path, 'r', encoding='utf-8') as file: + content = file.read() + logger.info(f"Successfully read markdown content from {self.input_path}") + return content + except Exception as e: + logger.error(f"Error reading markdown file {self.input_path}: {e}") + raise + + def save_content(self, content: str) -> None: + """Save processed markdown content""" + try: + # Ensure output directory exists + output_dir = os.path.dirname(self.output_path) + os.makedirs(output_dir, exist_ok=True) + + with open(self.output_path, 'w', encoding='utf-8') as file: + file.write(content) + logger.info(f"Successfully saved masked content to {self.output_path}") + except Exception as e: + logger.error(f"Error saving content to {self.output_path}: {e}") + raise diff --git a/backend/app/core/document_handlers/processors/pdf_processor.py b/backend/app/core/document_handlers/processors/pdf_processor.py new file mode 100644 index 0000000..99737a1 --- /dev/null +++ b/backend/app/core/document_handlers/processors/pdf_processor.py @@ -0,0 +1,204 @@ +import os +import requests +import logging +from typing import Dict, Any, Optional +from ...document_handlers.document_processor import DocumentProcessor +from ...services.ollama_client import OllamaClient +from ...config import settings + +logger = logging.getLogger(__name__) + +class PdfDocumentProcessor(DocumentProcessor): + def __init__(self, input_path: str, output_path: str): + super().__init__() # Call parent class's __init__ + self.input_path = input_path + self.output_path = output_path + self.output_dir = os.path.dirname(output_path) + self.name_without_suff = os.path.splitext(os.path.basename(input_path))[0] + + # Setup work directory for temporary files + self.work_dir = os.path.join( + os.path.dirname(output_path), + ".work", + os.path.splitext(os.path.basename(input_path))[0] + ) + os.makedirs(self.work_dir, exist_ok=True) + + self.ollama_client = OllamaClient(model_name=settings.OLLAMA_MODEL, base_url=settings.OLLAMA_API_URL) + + # Mineru API configuration + self.mineru_base_url = getattr(settings, 'MINERU_API_URL', 'http://mineru-api:8000') + self.mineru_timeout = getattr(settings, 'MINERU_TIMEOUT', 300) # 5 minutes timeout + self.mineru_lang_list = getattr(settings, 'MINERU_LANG_LIST', ['ch']) + self.mineru_backend = getattr(settings, 'MINERU_BACKEND', 'pipeline') + self.mineru_parse_method = getattr(settings, 'MINERU_PARSE_METHOD', 'auto') + self.mineru_formula_enable = getattr(settings, 'MINERU_FORMULA_ENABLE', True) + self.mineru_table_enable = getattr(settings, 'MINERU_TABLE_ENABLE', True) + + def _call_mineru_api(self, file_path: str) -> Optional[Dict[str, Any]]: + """ + Call Mineru API to convert PDF to markdown + + Args: + file_path: Path to the PDF file + + Returns: + API response as dictionary or None if failed + """ + try: + url = f"{self.mineru_base_url}/file_parse" + + with open(file_path, 'rb') as file: + files = {'files': (os.path.basename(file_path), file, 'application/pdf')} + + # Prepare form data according to Mineru API specification + data = { + 'output_dir': './output', + 'lang_list': self.mineru_lang_list, + 'backend': self.mineru_backend, + 'parse_method': self.mineru_parse_method, + 'formula_enable': self.mineru_formula_enable, + 'table_enable': self.mineru_table_enable, + 'return_md': True, + 'return_middle_json': False, + 'return_model_output': False, + 'return_content_list': False, + 'return_images': False, + 'start_page_id': 0, + 'end_page_id': 99999 + } + + logger.info(f"Calling Mineru API at {url}") + response = requests.post( + url, + files=files, + data=data, + timeout=self.mineru_timeout + ) + + if response.status_code == 200: + result = response.json() + logger.info("Successfully received response from Mineru API") + return result + else: + logger.error(f"Mineru API returned status code {response.status_code}: {response.text}") + return None + + except requests.exceptions.Timeout: + logger.error(f"Mineru API request timed out after {self.mineru_timeout} seconds") + return None + except requests.exceptions.RequestException as e: + logger.error(f"Error calling Mineru API: {str(e)}") + return None + except Exception as e: + logger.error(f"Unexpected error calling Mineru API: {str(e)}") + return None + + def _extract_markdown_from_response(self, response: Dict[str, Any]) -> str: + """ + Extract markdown content from Mineru API response + + Args: + response: Mineru API response dictionary + + Returns: + Extracted markdown content as string + """ + try: + logger.debug(f"Mineru API response structure: {response}") + + # Try different possible response formats based on Mineru API + if 'markdown' in response: + return response['markdown'] + elif 'md' in response: + return response['md'] + elif 'content' in response: + return response['content'] + elif 'text' in response: + return response['text'] + elif 'result' in response and isinstance(response['result'], dict): + result = response['result'] + if 'markdown' in result: + return result['markdown'] + elif 'md' in result: + return result['md'] + elif 'content' in result: + return result['content'] + elif 'text' in result: + return result['text'] + elif 'data' in response and isinstance(response['data'], dict): + data = response['data'] + if 'markdown' in data: + return data['markdown'] + elif 'md' in data: + return data['md'] + elif 'content' in data: + return data['content'] + elif 'text' in data: + return data['text'] + elif isinstance(response, list) and len(response) > 0: + # If response is a list, try to extract from first item + first_item = response[0] + if isinstance(first_item, dict): + return self._extract_markdown_from_response(first_item) + elif isinstance(first_item, str): + return first_item + else: + # If no standard format found, try to extract from the response structure + logger.warning("Could not find standard markdown field in Mineru response") + + # Return the response as string if it's simple, or empty string + if isinstance(response, str): + return response + elif isinstance(response, dict): + # Try to find any text-like content + for key, value in response.items(): + if isinstance(value, str) and len(value) > 100: # Likely content + return value + elif isinstance(value, dict): + # Recursively search in nested dictionaries + nested_content = self._extract_markdown_from_response(value) + if nested_content: + return nested_content + + return "" + + except Exception as e: + logger.error(f"Error extracting markdown from Mineru response: {str(e)}") + return "" + + def read_content(self) -> str: + logger.info("Starting PDF content processing with Mineru API") + + # Call Mineru API to convert PDF to markdown + mineru_response = self._call_mineru_api(self.input_path) + + if not mineru_response: + raise Exception("Failed to get response from Mineru API") + + # Extract markdown content from the response + markdown_content = self._extract_markdown_from_response(mineru_response) + + if not markdown_content: + raise Exception("No markdown content found in Mineru API response") + + logger.info(f"Successfully extracted {len(markdown_content)} characters of markdown content") + + # Save the raw markdown content to work directory for reference + md_output_path = os.path.join(self.work_dir, f"{self.name_without_suff}.md") + with open(md_output_path, 'w', encoding='utf-8') as file: + file.write(markdown_content) + + logger.info(f"Saved raw markdown content to {md_output_path}") + + return markdown_content + + def save_content(self, content: str) -> None: + # Ensure output path has .md extension + output_dir = os.path.dirname(self.output_path) + base_name = os.path.splitext(os.path.basename(self.output_path))[0] + md_output_path = os.path.join(output_dir, f"{base_name}.md") + + logger.info(f"Saving masked content to: {md_output_path}") + with open(md_output_path, 'w', encoding='utf-8') as file: + file.write(content) \ No newline at end of file diff --git a/backend/app/core/document_handlers/processors/txt_processor.py b/backend/app/core/document_handlers/processors/txt_processor.py new file mode 100644 index 0000000..416def7 --- /dev/null +++ b/backend/app/core/document_handlers/processors/txt_processor.py @@ -0,0 +1,28 @@ +from ...document_handlers.document_processor import DocumentProcessor +from ...services.ollama_client import OllamaClient +import logging +# from ...prompts.masking_prompts import get_masking_prompt +from ...config import settings + +logger = logging.getLogger(__name__) +class TxtDocumentProcessor(DocumentProcessor): + def __init__(self, input_path: str, output_path: str): + super().__init__() + self.input_path = input_path + self.output_path = output_path + self.ollama_client = OllamaClient(model_name=settings.OLLAMA_MODEL, base_url=settings.OLLAMA_API_URL) + + def read_content(self) -> str: + with open(self.input_path, 'r', encoding='utf-8') as file: + return file.read() + + # def process_content(self, content: str) -> str: + + # formatted_prompt = get_masking_prompt(content) + # response = self.ollama_client.generate(formatted_prompt) + # logger.debug(f"Processed content: {response}") + # return response + + def save_content(self, content: str) -> None: + with open(self.output_path, 'w', encoding='utf-8') as file: + file.write(content) \ No newline at end of file diff --git a/backend/app/core/document_handlers/regs/entity_regex.py b/backend/app/core/document_handlers/regs/entity_regex.py new file mode 100644 index 0000000..e53eb2a --- /dev/null +++ b/backend/app/core/document_handlers/regs/entity_regex.py @@ -0,0 +1,18 @@ +import re + +def extract_id_number_entities(chunk: str) -> dict: + """Extract Chinese ID numbers and return in entity mapping format.""" + id_pattern = r'\b\d{17}[\dXx]\b' + entities = [] + for match in re.findall(id_pattern, chunk): + entities.append({"text": match, "type": "身份证号"}) + return {"entities": entities} if entities else {} + + +def extract_social_credit_code_entities(chunk: str) -> dict: + """Extract social credit codes and return in entity mapping format.""" + credit_pattern = r'\b[0-9A-Z]{18}\b' + entities = [] + for match in re.findall(credit_pattern, chunk): + entities.append({"text": match, "type": "统一社会信用代码"}) + return {"entities": entities} if entities else {} \ No newline at end of file diff --git a/backend/app/core/prompts/masking_prompts.py b/backend/app/core/prompts/masking_prompts.py new file mode 100644 index 0000000..13d072a --- /dev/null +++ b/backend/app/core/prompts/masking_prompts.py @@ -0,0 +1,225 @@ +import textwrap + + +def get_ner_name_prompt(text: str) -> str: + """ + Returns a prompt that generates a mapping of original names/companies to their masked versions. + + Args: + text (str): The input text to be analyzed for masking + + Returns: + str: The formatted prompt that will generate a mapping dictionary + """ + prompt = textwrap.dedent(""" +你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息,并按照指定的类别进行分类。请严格按照JSON格式输出结果。 + +实体类别包括: +- 人名 (不包括律师、法官、书记员、检察官等公职人员) +- 英文人名 + + +待处理文本: +{text} + +输出格式: +{{ +"entities": [ + {{"text": "原始文本内容", "type": "人名"}}, + {{"text": "原始文本内容", "type": "英文人名"}}, + ... + ] +}} + + + +请严格按照JSON格式输出结果。 + + """) + return prompt.format(text=text) + + +def get_ner_company_prompt(text: str) -> str: + """ + Returns a prompt that generates a mapping of original companies to their masked versions. + + Args: + text (str): The input text to be analyzed for masking + + Returns: + str: The formatted prompt that will generate a mapping dictionary + """ + prompt = textwrap.dedent(""" +你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息,并按照指定的类别进行分类。请严格按照JSON格式输出结果。 + +实体类别包括: +- 公司名称 +- 英文公司名称 +- Company with English name +- 公司名称简称 +- 公司英文名称简称 + + +待处理文本: +{text} + +输出格式: +{{ +"entities": [ + {{"text": "原始文本内容", "type": "公司名称"}}, + {{"text": "原始文本内容", "type": "英文公司名称"}}, + {{"text": "原始文本内容", "type": "公司名称简称"}}, + {{"text": "原始文本内容", "type": "公司英文名称简称"}}, + ... + ] +}} + +请严格按照JSON格式输出结果。 + """) + return prompt.format(text=text) + + +def get_ner_address_prompt(text: str) -> str: + """ + Returns a prompt that generates a mapping of original addresses to their masked versions. + + Args: + text (str): The input text to be analyzed for masking + + Returns: + str: The formatted prompt that will generate a mapping dictionary + """ + prompt = textwrap.dedent(""" +你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息,并按照指定的类别进行分类。请严格按照JSON格式输出结果。 + +实体类别包括: +- 地址 + + +待处理文本: +{text} + +输出格式: +{{ +"entities": [ + {{"text": "原始文本内容", "type": "地址"}}, + ... + ] +}} + +请严格按照JSON格式输出结果。 + """) + return prompt.format(text=text) + + +def get_ner_project_prompt(text: str) -> str: + """ + Returns a prompt that generates a mapping of original project names to their masked versions. + """ + prompt = textwrap.dedent(""" +你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息,并按照指定的类别进行分类。请严格按照JSON格式输出结果。 + +实体类别包括: +- 项目名(此处项目特指商业、工程、合同等项目) + +待处理文本: +{text} + +输出格式: +{{ +"entities": [ + {{"text": "原始文本内容", "type": "项目名"}}, + ... + ] +}} + +请严格按照JSON格式输出结果。 + """) + return prompt.format(text=text) + + +def get_ner_case_number_prompt(text: str) -> str: + """ + Returns a prompt that generates a mapping of original case numbers to their masked versions. + """ + prompt = textwrap.dedent(""" +你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息,并按照指定的类别进行分类。请严格按照JSON格式输出结果。 + +实体类别包括: +- 案号 + +待处理文本: +{text} + +输出格式: +{{ +"entities": [ + {{"text": "原始文本内容", "type": "案号"}}, + ... + ] +}} + +请严格按照JSON格式输出结果。 + """) + return prompt.format(text=text) + + +def get_entity_linkage_prompt(entities_text: str) -> str: + """ + Returns a prompt that identifies related entities and groups them together. + + Args: + entities_text (str): The list of entities to be analyzed for linkage + + Returns: + str: The formatted prompt that will generate entity linkage information + """ + prompt = textwrap.dedent(""" +你是一个专业的法律文本实体关联分析助手。请分析以下实体列表,识别出相互关联的实体(如全称与简称、中文名与英文名等),并将它们分组。 + +关联规则: +1. 公司名称关联: + - 全称与简称(如:"阿里巴巴集团控股有限公司" 与 "阿里巴巴") + - 中文名与英文名(如:"腾讯科技有限公司" 与 "Tencent Technology Ltd.") + - 母公司与子公司(如:"腾讯" 与 "腾讯音乐") + + +2. 每个组中应指定一个主要实体(is_primary: true),通常是: + - 对于公司:选择最正式的全称 + - 对于人名:选择最常用的称呼 + +待分析实体列表: +{entities_text} + +输出格式: +{{ +"entity_groups": [ + {{ + "group_id": "group_1", + "group_type": "公司名称", + "entities": [ + {{ + "text": "阿里巴巴集团控股有限公司", + "type": "公司名称", + "is_primary": true + }}, + {{ + "text": "阿里巴巴", + "type": "公司名称简称", + "is_primary": false + }} + ] + }} +] +}} + +注意事项: +1. 只对确实有关联的实体进行分组 +2. 每个实体只能属于一个组 +3. 每个组必须有且仅有一个主要实体(is_primary: true) +4. 如果实体之间没有明显关联,不要强制分组 +5. group_type 应该是 "公司名称" + +请严格按照JSON格式输出结果。 + """) + return prompt.format(entities_text=entities_text) \ No newline at end of file diff --git a/src/services/document_service.py b/backend/app/core/services/document_service.py similarity index 65% rename from src/services/document_service.py rename to backend/app/core/services/document_service.py index 6af2377..c169bfa 100644 --- a/src/services/document_service.py +++ b/backend/app/core/services/document_service.py @@ -1,12 +1,12 @@ import logging -from models.document_factory import DocumentProcessorFactory -from services.ollama_client import OllamaClient +from ..document_handlers.document_factory import DocumentProcessorFactory +from ..services.ollama_client import OllamaClient logger = logging.getLogger(__name__) class DocumentService: - def __init__(self, ollama_client: OllamaClient): - self.ollama_client = ollama_client + def __init__(self): + pass def process_document(self, input_path: str, output_path: str) -> bool: try: @@ -19,10 +19,10 @@ class DocumentService: content = processor.read_content() # Process with Ollama - processed_content = self.ollama_client.process_document(content) + masked_content = processor.process_content(content) # Save processed content - processor.save_content(processed_content) + processor.save_content(masked_content) return True except Exception as e: diff --git a/backend/app/core/services/ollama_client.py b/backend/app/core/services/ollama_client.py new file mode 100644 index 0000000..b1dfa96 --- /dev/null +++ b/backend/app/core/services/ollama_client.py @@ -0,0 +1,91 @@ +import requests +import logging +from typing import Dict, Any + +logger = logging.getLogger(__name__) + +class OllamaClient: + def __init__(self, model_name: str, base_url: str = "http://localhost:11434"): + """Initialize Ollama client. + + Args: + model_name (str): Name of the Ollama model to use + host (str): Ollama server host address + port (int): Ollama server port + """ + self.model_name = model_name + self.base_url = base_url + self.headers = {"Content-Type": "application/json"} + + def generate(self, prompt: str, strip_think: bool = True) -> str: + """Process a document using the Ollama API. + + Args: + document_text (str): The text content to process + + Returns: + str: Processed text response from the model + + Raises: + RequestException: If the API call fails + """ + try: + url = f"{self.base_url}/api/generate" + payload = { + "model": self.model_name, + "prompt": prompt, + "stream": False + } + + logger.debug(f"Sending request to Ollama API: {url}") + response = requests.post(url, json=payload, headers=self.headers) + response.raise_for_status() + + result = response.json() + logger.debug(f"Received response from Ollama API: {result}") + if strip_think: + # Remove the "thinking" part from the response + # the response is expected to be ...response_text + # Check if the response contains tag + if "" in result.get("response", ""): + # Split the response and take the part after + response_parts = result["response"].split("") + if len(response_parts) > 1: + # Return the part after + return response_parts[1].strip() + else: + # If no closing tag, return the full response + return result.get("response", "").strip() + else: + # If no tag, return the full response + return result.get("response", "").strip() + else: + # If strip_think is False, return the full response + return result.get("response", "") + + + except requests.exceptions.RequestException as e: + logger.error(f"Error calling Ollama API: {str(e)}") + raise + + def get_model_info(self) -> Dict[str, Any]: + """Get information about the current model. + + Returns: + Dict[str, Any]: Model information + + Raises: + RequestException: If the API call fails + """ + try: + url = f"{self.base_url}/api/show" + payload = {"name": self.model_name} + + response = requests.post(url, json=payload, headers=self.headers) + response.raise_for_status() + + return response.json() + + except requests.exceptions.RequestException as e: + logger.error(f"Error getting model info: {str(e)}") + raise \ No newline at end of file diff --git a/src/utils/file_utils.py b/backend/app/core/utils/file_utils.py similarity index 100% rename from src/utils/file_utils.py rename to backend/app/core/utils/file_utils.py diff --git a/backend/app/core/utils/json_extractor.py b/backend/app/core/utils/json_extractor.py new file mode 100644 index 0000000..3b30318 --- /dev/null +++ b/backend/app/core/utils/json_extractor.py @@ -0,0 +1,141 @@ +import json +import re +from typing import Any, Optional, Dict, TypeVar, Type + + +T = TypeVar('T') + +class LLMJsonExtractor: + """Utility class for extracting and parsing JSON from LLM outputs""" + + @staticmethod + def extract_json(text: str) -> Optional[str]: + """ + Extracts JSON string from text using regex pattern matching. + Handles both single and multiple JSON objects in text. + + Args: + text (str): Raw text containing JSON + + Returns: + Optional[str]: Extracted JSON string or None if no valid JSON found + """ + # Pattern to match JSON objects with balanced braces + pattern = r'{[^{}]*(?:{[^{}]*}[^{}]*)*}' + matches = re.findall(pattern, text) + + if not matches: + return None + + # Return the first valid JSON match + for match in matches: + try: + # Verify it's valid JSON + json.loads(match) + return match + except json.JSONDecodeError: + continue + + return None + + @staticmethod + def parse_json(text: str) -> Optional[Dict[str, Any]]: + """ + Extracts and parses JSON from text into a Python dictionary. + + Args: + text (str): Raw text containing JSON + + Returns: + Optional[Dict[str, Any]]: Parsed JSON as dictionary or None if parsing fails + """ + try: + json_str = LLMJsonExtractor.extract_json(text) + if json_str: + return json.loads(json_str) + return None + except json.JSONDecodeError: + return None + + @staticmethod + def parse_to_dataclass(text: str, dataclass_type: Type[T]) -> Optional[T]: + """ + Extracts JSON and converts it to a specified dataclass type. + + Args: + text (str): Raw text containing JSON + dataclass_type (Type[T]): Target dataclass type + + Returns: + Optional[T]: Instance of specified dataclass or None if conversion fails + """ + try: + data = LLMJsonExtractor.parse_json(text) + if data: + return dataclass_type(**data) + return None + except (json.JSONDecodeError, TypeError): + return None + + @staticmethod + def parse_raw_json_str(text: str) -> Optional[Dict[str, Any]]: + """ + Extracts and parses JSON from text into a Python dictionary. + + Args: + text (str): Raw text containing JSON + + Returns: + Optional[Dict[str, Any]]: Parsed JSON as dictionary or None if parsing fails + """ + try: + json_str = LLMJsonExtractor.extract_json_max(text) + if json_str: + return json.loads(json_str) + return None + except json.JSONDecodeError: + return None + + @staticmethod + def extract_json_max(text: str) -> Optional[str]: + """ + Extracts the maximum valid JSON object from text using stack-based brace matching. + + Args: + text (str): Raw text containing JSON + + Returns: + Optional[str]: Maximum valid JSON object as string or None if no valid JSON found + """ + max_json = None + max_length = 0 + + # Iterate through each character as a potential start of JSON + for start in range(len(text)): + if text[start] != '{': + continue + + stack = [] + for end in range(start, len(text)): + if text[end] == '{': + stack.append(end) + elif text[end] == '}': + if not stack: # Unmatched closing brace + break + + opening_pos = stack.pop() + + # If stack is empty, we have a complete JSON object + if not stack: + json_candidate = text[opening_pos:end + 1] + try: + # Verify it's valid JSON + json.loads(json_candidate) + if len(json_candidate) > max_length: + max_length = len(json_candidate) + max_json = json_candidate + except json.JSONDecodeError: + continue + + return max_json + diff --git a/backend/app/core/utils/llm_validator.py b/backend/app/core/utils/llm_validator.py new file mode 100644 index 0000000..168df91 --- /dev/null +++ b/backend/app/core/utils/llm_validator.py @@ -0,0 +1,240 @@ +import logging +from typing import Any, Dict, Optional +from jsonschema import validate, ValidationError + +logger = logging.getLogger(__name__) + + +class LLMResponseValidator: + """Validator for LLM JSON responses with different schemas for different entity types""" + + # Schema for basic entity extraction responses + ENTITY_EXTRACTION_SCHEMA = { + "type": "object", + "properties": { + "entities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": {"type": "string"}, + "type": {"type": "string"} + }, + "required": ["text", "type"] + } + } + }, + "required": ["entities"] + } + + # Schema for entity linkage responses + ENTITY_LINKAGE_SCHEMA = { + "type": "object", + "properties": { + "entity_groups": { + "type": "array", + "items": { + "type": "object", + "properties": { + "group_id": {"type": "string"}, + "group_type": {"type": "string"}, + "entities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": {"type": "string"}, + "type": {"type": "string"}, + "is_primary": {"type": "boolean"} + }, + "required": ["text", "type", "is_primary"] + } + } + }, + "required": ["group_id", "group_type", "entities"] + } + } + }, + "required": ["entity_groups"] + } + + # Schema for regex-based entity extraction (from entity_regex.py) + REGEX_ENTITY_SCHEMA = { + "type": "object", + "properties": { + "entities": { + "type": "array", + "items": { + "type": "object", + "properties": { + "text": {"type": "string"}, + "type": {"type": "string"} + }, + "required": ["text", "type"] + } + } + }, + "required": ["entities"] + } + + @classmethod + def validate_entity_extraction(cls, response: Dict[str, Any]) -> bool: + """ + Validate entity extraction response from LLM. + + Args: + response: The parsed JSON response from LLM + + Returns: + bool: True if valid, False otherwise + """ + try: + validate(instance=response, schema=cls.ENTITY_EXTRACTION_SCHEMA) + logger.debug(f"Entity extraction validation passed for response: {response}") + return True + except ValidationError as e: + logger.warning(f"Entity extraction validation failed: {e}") + logger.warning(f"Response that failed validation: {response}") + return False + + @classmethod + def validate_entity_linkage(cls, response: Dict[str, Any]) -> bool: + """ + Validate entity linkage response from LLM. + + Args: + response: The parsed JSON response from LLM + + Returns: + bool: True if valid, False otherwise + """ + try: + validate(instance=response, schema=cls.ENTITY_LINKAGE_SCHEMA) + content_valid = cls._validate_linkage_content(response) + if content_valid: + logger.debug(f"Entity linkage validation passed for response: {response}") + return True + else: + logger.warning(f"Entity linkage content validation failed for response: {response}") + return False + except ValidationError as e: + logger.warning(f"Entity linkage validation failed: {e}") + logger.warning(f"Response that failed validation: {response}") + return False + + @classmethod + def validate_regex_entity(cls, response: Dict[str, Any]) -> bool: + """ + Validate regex-based entity extraction response. + + Args: + response: The parsed JSON response from regex extractors + + Returns: + bool: True if valid, False otherwise + """ + try: + validate(instance=response, schema=cls.REGEX_ENTITY_SCHEMA) + logger.debug(f"Regex entity validation passed for response: {response}") + return True + except ValidationError as e: + logger.warning(f"Regex entity validation failed: {e}") + logger.warning(f"Response that failed validation: {response}") + return False + + @classmethod + def _validate_linkage_content(cls, response: Dict[str, Any]) -> bool: + """ + Additional content validation for entity linkage responses. + + Args: + response: The parsed JSON response from LLM + + Returns: + bool: True if content is valid, False otherwise + """ + entity_groups = response.get('entity_groups', []) + + for group in entity_groups: + # Validate group type + group_type = group.get('group_type', '') + if group_type not in ['公司名称', '人名']: + logger.warning(f"Invalid group_type: {group_type}") + return False + + # Validate entities in group + entities = group.get('entities', []) + if not entities: + logger.warning("Empty entity group found") + return False + + # Check that exactly one entity is marked as primary + primary_count = sum(1 for entity in entities if entity.get('is_primary', False)) + if primary_count != 1: + logger.warning(f"Group must have exactly one primary entity, found {primary_count}") + return False + + # Validate entity types within group + for entity in entities: + entity_type = entity.get('type', '') + if group_type == '公司名称' and not any(keyword in entity_type for keyword in ['公司', 'Company']): + logger.warning(f"Company group contains non-company entity: {entity_type}") + return False + elif group_type == '人名' and not any(keyword in entity_type for keyword in ['人名', '英文人名']): + logger.warning(f"Person group contains non-person entity: {entity_type}") + return False + + return True + + @classmethod + def validate_response_by_type(cls, response: Dict[str, Any], response_type: str) -> bool: + """ + Generic validator that routes to appropriate validation method based on response type. + + Args: + response: The parsed JSON response from LLM + response_type: Type of response ('entity_extraction', 'entity_linkage', 'regex_entity') + + Returns: + bool: True if valid, False otherwise + """ + validators = { + 'entity_extraction': cls.validate_entity_extraction, + 'entity_linkage': cls.validate_entity_linkage, + 'regex_entity': cls.validate_regex_entity + } + + validator = validators.get(response_type) + if not validator: + logger.error(f"Unknown response type: {response_type}") + return False + + return validator(response) + + @classmethod + def get_validation_errors(cls, response: Dict[str, Any], response_type: str) -> Optional[str]: + """ + Get detailed validation errors for debugging. + + Args: + response: The parsed JSON response from LLM + response_type: Type of response + + Returns: + Optional[str]: Error message or None if valid + """ + try: + if response_type == 'entity_extraction': + validate(instance=response, schema=cls.ENTITY_EXTRACTION_SCHEMA) + elif response_type == 'entity_linkage': + validate(instance=response, schema=cls.ENTITY_LINKAGE_SCHEMA) + if not cls._validate_linkage_content(response): + return "Content validation failed for entity linkage" + elif response_type == 'regex_entity': + validate(instance=response, schema=cls.REGEX_ENTITY_SCHEMA) + else: + return f"Unknown response type: {response_type}" + + return None + except ValidationError as e: + return f"Schema validation error: {e}" \ No newline at end of file diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..fc59812 --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,33 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +from .core.config import settings +from .api.endpoints import files +from .core.database import engine, Base + +# Create database tables +Base.metadata.create_all(bind=engine) + +app = FastAPI( + title=settings.PROJECT_NAME, + openapi_url=f"{settings.API_V1_STR}/openapi.json" +) + +# Set up CORS +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], # In production, replace with specific origins + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Include routers +app.include_router( + files.router, + prefix=f"{settings.API_V1_STR}/files", + tags=["files"] +) + +@app.get("/") +async def root(): + return {"message": "Welcome to Legal Document Masker API"} \ No newline at end of file diff --git a/backend/app/models/file.py b/backend/app/models/file.py new file mode 100644 index 0000000..2d01fa2 --- /dev/null +++ b/backend/app/models/file.py @@ -0,0 +1,22 @@ +from sqlalchemy import Column, String, DateTime, Text +from datetime import datetime +import uuid +from ..core.database import Base + +class FileStatus(str): + NOT_STARTED = "not_started" + PROCESSING = "processing" + SUCCESS = "success" + FAILED = "failed" + +class File(Base): + __tablename__ = "files" + + id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) + filename = Column(String(255), nullable=False) + original_path = Column(String(255), nullable=False) + processed_path = Column(String(255)) + status = Column(String(20), nullable=False, default=FileStatus.NOT_STARTED) + error_message = Column(Text) + created_at = Column(DateTime, nullable=False, default=datetime.utcnow) + updated_at = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow) \ No newline at end of file diff --git a/backend/app/schemas/file.py b/backend/app/schemas/file.py new file mode 100644 index 0000000..61a84ed --- /dev/null +++ b/backend/app/schemas/file.py @@ -0,0 +1,21 @@ +from pydantic import BaseModel +from datetime import datetime +from typing import Optional +from uuid import UUID + +class FileBase(BaseModel): + filename: str + status: str + error_message: Optional[str] = None + +class FileResponse(FileBase): + id: UUID + created_at: datetime + updated_at: datetime + + class Config: + from_attributes = True + +class FileList(BaseModel): + files: list[FileResponse] + total: int \ No newline at end of file diff --git a/backend/app/services/file_service.py b/backend/app/services/file_service.py new file mode 100644 index 0000000..a08c7b2 --- /dev/null +++ b/backend/app/services/file_service.py @@ -0,0 +1,87 @@ +from celery import Celery +from ..core.config import settings +from ..models.file import File, FileStatus +from sqlalchemy.orm import Session +from ..core.database import SessionLocal +import sys +import os +from ..core.services.document_service import DocumentService +from pathlib import Path +from fastapi import HTTPException + + +celery = Celery( + 'file_service', + broker=settings.CELERY_BROKER_URL, + backend=settings.CELERY_RESULT_BACKEND +) + +def delete_file(file_id: str): + """ + Delete a file and its associated records. + This will: + 1. Delete the database record + 2. Delete the original uploaded file + 3. Delete the processed markdown file (if it exists) + """ + db = SessionLocal() + try: + # Get the file record + file = db.query(File).filter(File.id == file_id).first() + if not file: + raise HTTPException(status_code=404, detail="File not found") + + # Delete the original file if it exists + if file.original_path and os.path.exists(file.original_path): + os.remove(file.original_path) + + # Delete the processed file if it exists + if file.processed_path and os.path.exists(file.processed_path): + os.remove(file.processed_path) + + # Delete the database record + db.delete(file) + db.commit() + + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=f"Error deleting file: {str(e)}") + finally: + db.close() + +@celery.task +def process_file(file_id: str): + db = SessionLocal() + try: + file = db.query(File).filter(File.id == file_id).first() + if not file: + return + + # Update status to processing + file.status = FileStatus.PROCESSING + db.commit() + + try: + # Process the file using your existing masking system + process_service = DocumentService() + + # Determine output path using file_id with .md extension + output_filename = f"{file_id}.md" + output_path = str(settings.PROCESSED_FOLDER / output_filename) + + # Process document with both input and output paths + process_service.process_document(file.original_path, output_path) + + # Update file record with processed path + file.processed_path = output_path + file.status = FileStatus.SUCCESS + db.commit() + + except Exception as e: + file.status = FileStatus.FAILED + file.error_message = str(e) + db.commit() + raise + + finally: + db.close() \ No newline at end of file diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..e6f878d --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,37 @@ +version: '3.8' + +services: + api: + build: . + ports: + - "8000:8000" + volumes: + - ./storage:/app/storage + - ./legal_doc_masker.db:/app/legal_doc_masker.db + env_file: + - .env + environment: + - CELERY_BROKER_URL=redis://redis:6379/0 + - CELERY_RESULT_BACKEND=redis://redis:6379/0 + depends_on: + - redis + + celery_worker: + build: . + command: celery -A app.services.file_service worker --loglevel=info + volumes: + - ./storage:/app/storage + - ./legal_doc_masker.db:/app/legal_doc_masker.db + env_file: + - .env + environment: + - CELERY_BROKER_URL=redis://redis:6379/0 + - CELERY_RESULT_BACKEND=redis://redis:6379/0 + depends_on: + - redis + - api + + redis: + image: redis:alpine + ports: + - "6379:6379" \ No newline at end of file diff --git a/backend/log b/backend/log new file mode 100644 index 0000000..103a34f --- /dev/null +++ b/backend/log @@ -0,0 +1,127 @@ + [2025-07-14 14:20:19,015: INFO/ForkPoolWorker-4] Raw response from LLM: { +celery_worker-1 | "entities": [] +celery_worker-1 | } +celery_worker-1 | [2025-07-14 14:20:19,016: INFO/ForkPoolWorker-4] Parsed mapping: {'entities': []} +celery_worker-1 | [2025-07-14 14:20:19,020: INFO/ForkPoolWorker-4] Calling ollama to generate case numbers mapping for chunk (attempt 1/3): +celery_worker-1 | 你是一个专业的法律文本实体识别助手。请从以下文本中抽取出所有需要脱敏的敏感信息,并按照指定的类别进行分类。请严格按照JSON格式输出结果。 +celery_worker-1 | +celery_worker-1 | 实体类别包括: +celery_worker-1 | - 案号 +celery_worker-1 | +celery_worker-1 | 待处理文本: +celery_worker-1 | +celery_worker-1 | +celery_worker-1 | 二审案件受理费450892 元,由北京丰复久信营销科技有限公司负担(已交纳)。 +celery_worker-1 | +celery_worker-1 | 29. 本判决为终审判决。 +celery_worker-1 | +celery_worker-1 | 审 判 长 史晓霞审 判 员 邓青菁审 判 员 李 淼二〇二二年七月七日法 官 助 理 黎 铧书 记 员 郑海兴 +celery_worker-1 | +celery_worker-1 | 输出格式: +celery_worker-1 | { +celery_worker-1 | "entities": [ +celery_worker-1 | {"text": "原始文本内容", "type": "案号"}, +celery_worker-1 | ... +celery_worker-1 | ] +celery_worker-1 | } +celery_worker-1 | +celery_worker-1 | 请严格按照JSON格式输出结果。 +celery_worker-1 | +api-1 | INFO: 192.168.65.1:60045 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:34054 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:34054 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:22084 - "GET /api/v1/files/files HTTP/1.1" 200 OK +celery_worker-1 | [2025-07-14 14:20:31,279: INFO/ForkPoolWorker-4] Raw response from LLM: { +celery_worker-1 | "entities": [] +celery_worker-1 | } +celery_worker-1 | [2025-07-14 14:20:31,281: INFO/ForkPoolWorker-4] Parsed mapping: {'entities': []} +celery_worker-1 | [2025-07-14 14:20:31,287: INFO/ForkPoolWorker-4] Chunk mapping: [{'entities': []}, {'entities': [{'text': '北京丰复久信营销科技有限公司', 'type': '公司名称'}]}, {'entities': []}, {'entities': []}, {'entities': []}] +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Final chunk mappings: [{'entities': [{'text': '郭东军', 'type': '人名'}, {'text': '王欢子', 'type': '人名'}]}, {'entities': [{'text': '北京丰复久信营销科技有限公司', 'type': '公司名称'}, {'text': '丰复久信公司', 'type': '公司名称简称'}, {'text': '中研智创区块链技术有限公司', 'type': '公司名称'}, {'text': '中研智才公司', 'type': '公司名称简称'}]}, {'entities': [{'text': '北京市海淀区北小马厂6 号1 号楼华天大厦1306 室', 'type': '地址'}, {'text': '天津市津南区双港镇工业园区优谷产业园5 号楼-1505', 'type': '地址'}]}, {'entities': [{'text': '服务合同', 'type': '项目名'}]}, {'entities': [{'text': '(2022)京 03 民终 3852 号', 'type': '案号'}, {'text': '(2020)京0105 民初69754 号', 'type': '案号'}]}, {'entities': [{'text': '李圣艳', 'type': '人名'}, {'text': '闫向东', 'type': '人名'}, {'text': '李敏', 'type': '人名'}, {'text': '布兰登·斯密特', 'type': '英文人名'}]}, {'entities': [{'text': '丰复久信公司', 'type': '公司名称'}, {'text': '中研智创公司', 'type': '公司名称'}, {'text': '丰复久信', 'type': '公司名称简称'}, {'text': '中研智创', 'type': '公司名称简称'}]}, {'entities': [{'text': '上海市', 'type': '地址'}, {'text': '北京', 'type': '地址'}]}, {'entities': [{'text': '《计算机设备采购合同》', 'type': '项目名'}]}, {'entities': []}, {'entities': []}, {'entities': [{'text': '丰复久信公司', 'type': '公司名称'}, {'text': '中研智创公司', 'type': '公司名称'}]}, {'entities': []}, {'entities': [{'text': '《服务合同书》', 'type': '项目名'}]}, {'entities': []}, {'entities': []}, {'entities': [{'text': '北京丰复久信营销科技有限公司', 'type': '公司名称'}]}, {'entities': []}, {'entities': []}, {'entities': []}] +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Duplicate entity found: {'text': '丰复久信公司', 'type': '公司名称'} +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Duplicate entity found: {'text': '丰复久信公司', 'type': '公司名称'} +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Duplicate entity found: {'text': '中研智创公司', 'type': '公司名称'} +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Duplicate entity found: {'text': '北京丰复久信营销科技有限公司', 'type': '公司名称'} +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Merged 22 unique entities +celery_worker-1 | [2025-07-14 14:20:31,288: INFO/ForkPoolWorker-4] Unique entities: [{'text': '郭东军', 'type': '人名'}, {'text': '王欢子', 'type': '人名'}, {'text': '北京丰复久信营销科技有限公司', 'type': '公司名称'}, {'text': '丰复久信公司', 'type': '公司名称简称'}, {'text': '中研智创区块链技术有限公司', 'type': '公司名称'}, {'text': '中研智才公司', 'type': '公司名称简称'}, {'text': '北京市海淀区北小马厂6 号1 号楼华天大厦1306 室', 'type': '地址'}, {'text': '天津市津南区双港镇工业园区优谷产业园5 号楼-1505', 'type': '地址'}, {'text': '服务合同', 'type': '项目名'}, {'text': '(2022)京 03 民终 3852 号', 'type': '案号'}, {'text': '(2020)京0105 民初69754 号', 'type': '案号'}, {'text': '李圣艳', 'type': '人名'}, {'text': '闫向东', 'type': '人名'}, {'text': '李敏', 'type': '人名'}, {'text': '布兰登·斯密特', 'type': '英文人名'}, {'text': '中研智创公司', 'type': '公司名称'}, {'text': '丰复久信', 'type': '公司名称简称'}, {'text': '中研智创', 'type': '公司名称简称'}, {'text': '上海市', 'type': '地址'}, {'text': '北京', 'type': '地址'}, {'text': '《计算机设备采购合同》', 'type': '项目名'}, {'text': '《服务合同书》', 'type': '项目名'}] +celery_worker-1 | [2025-07-14 14:20:31,289: INFO/ForkPoolWorker-4] Calling ollama to generate entity linkage (attempt 1/3) +api-1 | INFO: 192.168.65.1:52168 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:61426 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:30702 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:48159 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:16860 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:21262 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:45564 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:32142 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:27769 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:21196 - "GET /api/v1/files/files HTTP/1.1" 200 OK +celery_worker-1 | [2025-07-14 14:21:21,436: INFO/ForkPoolWorker-4] Raw entity linkage response from LLM: { +celery_worker-1 | "entity_groups": [ +celery_worker-1 | { +celery_worker-1 | "group_id": "group_1", +celery_worker-1 | "group_type": "公司名称", +celery_worker-1 | "entities": [ +celery_worker-1 | { +celery_worker-1 | "text": "北京丰复久信营销科技有限公司", +celery_worker-1 | "type": "公司名称", +celery_worker-1 | "is_primary": true +celery_worker-1 | }, +celery_worker-1 | { +celery_worker-1 | "text": "丰复久信公司", +celery_worker-1 | "type": "公司名称简称", +celery_worker-1 | "is_primary": false +celery_worker-1 | }, +celery_worker-1 | { +celery_worker-1 | "text": "丰复久信", +celery_worker-1 | "type": "公司名称简称", +celery_worker-1 | "is_primary": false +celery_worker-1 | } +celery_worker-1 | ] +celery_worker-1 | }, +celery_worker-1 | { +celery_worker-1 | "group_id": "group_2", +celery_worker-1 | "group_type": "公司名称", +celery_worker-1 | "entities": [ +celery_worker-1 | { +celery_worker-1 | "text": "中研智创区块链技术有限公司", +celery_worker-1 | "type": "公司名称", +celery_worker-1 | "is_primary": true +celery_worker-1 | }, +celery_worker-1 | { +celery_worker-1 | "text": "中研智创公司", +celery_worker-1 | "type": "公司名称简称", +celery_worker-1 | "is_primary": false +celery_worker-1 | }, +celery_worker-1 | { +celery_worker-1 | "text": "中研智创", +celery_worker-1 | "type": "公司名称简称", +celery_worker-1 | "is_primary": false +celery_worker-1 | } +celery_worker-1 | ] +celery_worker-1 | } +celery_worker-1 | ] +celery_worker-1 | } +celery_worker-1 | [2025-07-14 14:21:21,437: INFO/ForkPoolWorker-4] Parsed entity linkage: {'entity_groups': [{'group_id': 'group_1', 'group_type': '公司名称', 'entities': [{'text': '北京丰复久信营销科技有限公司', 'type': '公司名称', 'is_primary': True}, {'text': '丰复久信公司', 'type': '公司名称简称', 'is_primary': False}, {'text': '丰复久信', 'type': '公司名称简称', 'is_primary': False}]}, {'group_id': 'group_2', 'group_type': '公司名称', 'entities': [{'text': '中研智创区块链技术有限公司', 'type': '公司名称', 'is_primary': True}, {'text': '中研智创公司', 'type': '公司名称简称', 'is_primary': False}, {'text': '中研智创', 'type': '公司名称简称', 'is_primary': False}]}]} +celery_worker-1 | [2025-07-14 14:21:21,445: INFO/ForkPoolWorker-4] Successfully created entity linkage with 2 groups +celery_worker-1 | [2025-07-14 14:21:21,445: INFO/ForkPoolWorker-4] Entity linkage: {'entity_groups': [{'group_id': 'group_1', 'group_type': '公司名称', 'entities': [{'text': '北京丰复久信营销科技有限公司', 'type': '公司名称', 'is_primary': True}, {'text': '丰复久信公司', 'type': '公司名称简称', 'is_primary': False}, {'text': '丰复久信', 'type': '公司名称简称', 'is_primary': False}]}, {'group_id': 'group_2', 'group_type': '公司名称', 'entities': [{'text': '中研智创区块链技术有限公司', 'type': '公司名称', 'is_primary': True}, {'text': '中研智创公司', 'type': '公司名称简称', 'is_primary': False}, {'text': '中研智创', 'type': '公司名称简称', 'is_primary': False}]}]} +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Generated masked mapping for 22 entities +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Combined mapping: {'郭东军': '某', '王欢子': '某甲', '北京丰复久信营销科技有限公司': '某公司', '丰复久信公司': '某公司甲', '中研智创区块链技术有限公司': '某公司乙', '中研智才公司': '某公司丙', '北京市海淀区北小马厂6 号1 号楼华天大厦1306 室': '某乙', '天津市津南区双港镇工业园区优谷产业园5 号楼-1505': '某丙', '服务合同': '某丁', '(2022)京 03 民终 3852 号': '某戊', '(2020)京0105 民初69754 号': '某己', '李圣艳': '某庚', '闫向东': '某辛', '李敏': '某壬', '布兰登·斯密特': '某癸', '中研智创公司': '某公司丁', '丰复久信': '某公司戊', '中研智创': '某公司己', '上海市': '某11', '北京': '某12', '《计算机设备采购合同》': '某13', '《服务合同书》': '某14'} +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Linked entity '北京丰复久信营销科技有限公司' to '北京丰复久信营销科技有限公司' with masked name '某公司' +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Linked entity '丰复久信公司' to '北京丰复久信营销科技有限公司' with masked name '某公司' +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Linked entity '丰复久信' to '北京丰复久信营销科技有限公司' with masked name '某公司' +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Linked entity '中研智创区块链技术有限公司' to '中研智创区块链技术有限公司' with masked name '某公司乙' +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Linked entity '中研智创公司' to '中研智创区块链技术有限公司' with masked name '某公司乙' +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Linked entity '中研智创' to '中研智创区块链技术有限公司' with masked name '某公司乙' +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Final mapping: {'郭东军': '某', '王欢子': '某甲', '北京丰复久信营销科技有限公司': '某公司', '丰复久信公司': '某公司', '中研智创区块链技术有限公司': '某公司乙', '中研智才公司': '某公司丙', '北京市海淀区北小马厂6 号1 号楼华天大厦1306 室': '某乙', '天津市津南区双港镇工业园区优谷产业园5 号楼-1505': '某丙', '服务合同': '某丁', '(2022)京 03 民终 3852 号': '某戊', '(2020)京0105 民初69754 号': '某己', '李圣艳': '某庚', '闫向东': '某辛', '李敏': '某壬', '布兰登·斯密特': '某癸', '中研智创公司': '某公司乙', '丰复久信': '某公司', '中研智创': '某公司乙', '上海市': '某11', '北京': '某12', '《计算机设备采购合同》': '某13', '《服务合同书》': '某14'} +celery_worker-1 | [2025-07-14 14:21:21,446: INFO/ForkPoolWorker-4] Successfully masked content +celery_worker-1 | [2025-07-14 14:21:21,449: INFO/ForkPoolWorker-4] Successfully saved masked content to /app/storage/processed/47522ea9-c259-4304-bfe4-1d3ed6902ede.md +celery_worker-1 | [2025-07-14 14:21:21,470: INFO/ForkPoolWorker-4] Task app.services.file_service.process_file[5cfbca4c-0f6f-4c71-a66b-b22ee2d28139] succeeded in 311.847165101s: None +api-1 | INFO: 192.168.65.1:33432 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:40073 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:29550 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:61350 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:61755 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:63726 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:43446 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:45624 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:25256 - "GET /api/v1/files/files HTTP/1.1" 200 OK +api-1 | INFO: 192.168.65.1:43464 - "GET /api/v1/files/files HTTP/1.1" 200 OK \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 0000000..dfb18f1 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "backend", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..515d6be --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,32 @@ +# FastAPI and server +fastapi>=0.104.0 +uvicorn>=0.24.0 +python-multipart>=0.0.6 +websockets>=12.0 + +# Database +sqlalchemy>=2.0.0 +alembic>=1.12.0 + +# Background tasks +celery>=5.3.0 +redis>=5.0.0 + +# Security +python-jose[cryptography]>=3.3.0 +passlib[bcrypt]>=1.7.4 +python-dotenv>=1.0.0 + +# Testing +pytest>=7.4.0 +httpx>=0.25.0 + +# Existing project dependencies +pydantic-settings>=2.0.0 +watchdog==2.1.6 +requests==2.28.1 +python-docx>=0.8.11 +PyPDF2>=3.0.0 +pandas>=2.0.0 +# magic-pdf[full] +jsonschema>=4.20.0 \ No newline at end of file diff --git a/backend/tests/test.txt b/backend/tests/test.txt new file mode 100644 index 0000000..c67c623 --- /dev/null +++ b/backend/tests/test.txt @@ -0,0 +1 @@ +关于张三天和北京易见天树有限公司的劳动纠纷 \ No newline at end of file diff --git a/backend/tests/test_ner_processor.py b/backend/tests/test_ner_processor.py new file mode 100644 index 0000000..74cbeb5 --- /dev/null +++ b/backend/tests/test_ner_processor.py @@ -0,0 +1,62 @@ +import pytest +from app.core.document_handlers.ner_processor import NerProcessor + +def test_generate_masked_mapping(): + processor = NerProcessor() + unique_entities = [ + {'text': '李雷', 'type': '人名'}, + {'text': '李明', 'type': '人名'}, + {'text': '王强', 'type': '人名'}, + {'text': 'Acme Manufacturing Inc.', 'type': '英文公司名', 'industry': 'manufacturing'}, + {'text': 'Google LLC', 'type': '英文公司名'}, + {'text': 'A公司', 'type': '公司名称'}, + {'text': 'B公司', 'type': '公司名称'}, + {'text': 'John Smith', 'type': '英文人名'}, + {'text': 'Elizabeth Windsor', 'type': '英文人名'}, + {'text': '华梦龙光伏项目', 'type': '项目名'}, + {'text': '案号12345', 'type': '案号'}, + {'text': '310101198802080000', 'type': '身份证号'}, + {'text': '9133021276453538XT', 'type': '社会信用代码'}, + ] + linkage = { + 'entity_groups': [ + { + 'group_id': 'g1', + 'group_type': '公司名称', + 'entities': [ + {'text': 'A公司', 'type': '公司名称', 'is_primary': True}, + {'text': 'B公司', 'type': '公司名称', 'is_primary': False}, + ] + }, + { + 'group_id': 'g2', + 'group_type': '人名', + 'entities': [ + {'text': '李雷', 'type': '人名', 'is_primary': True}, + {'text': '李明', 'type': '人名', 'is_primary': False}, + ] + } + ] + } + mapping = processor._generate_masked_mapping(unique_entities, linkage) + # 人名 + assert mapping['李雷'].startswith('李某') + assert mapping['李明'].startswith('李某') + assert mapping['王强'].startswith('王某') + # 英文公司名 + assert mapping['Acme Manufacturing Inc.'] == 'MANUFACTURING' + assert mapping['Google LLC'] == 'COMPANY' + # 公司名同组 + assert mapping['A公司'] == mapping['B公司'] + assert mapping['A公司'].endswith('公司') + # 英文人名 + assert mapping['John Smith'] == 'J*** S***' + assert mapping['Elizabeth Windsor'] == 'E*** W***' + # 项目名 + assert mapping['华梦龙光伏项目'].endswith('项目') + # 案号 + assert mapping['案号12345'] == '***' + # 身份证号 + assert mapping['310101198802080000'] == 'XXXXXX' + # 社会信用代码 + assert mapping['9133021276453538XT'] == 'XXXXXXXX' \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..260af55 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,105 @@ +version: '3.8' + +services: + # Mineru API Service + mineru-api: + build: + context: ./mineru + dockerfile: Dockerfile + platform: linux/arm64 + ports: + - "8001:8000" + volumes: + - ./mineru/storage/uploads:/app/storage/uploads + - ./mineru/storage/processed:/app/storage/processed + environment: + - PYTHONUNBUFFERED=1 + - MINERU_MODEL_SOURCE=local + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + networks: + - app-network + + # Backend API Service + backend-api: + build: + context: ./backend + dockerfile: Dockerfile + ports: + - "8000:8000" + volumes: + - ./backend/storage:/app/storage + - ./backend/legal_doc_masker.db:/app/legal_doc_masker.db + env_file: + - ./backend/.env + environment: + - CELERY_BROKER_URL=redis://redis:6379/0 + - CELERY_RESULT_BACKEND=redis://redis:6379/0 + - MINERU_API_URL=http://mineru-api:8000 + depends_on: + - redis + - mineru-api + networks: + - app-network + + # Celery Worker + celery-worker: + build: + context: ./backend + dockerfile: Dockerfile + command: celery -A app.services.file_service worker --loglevel=info + volumes: + - ./backend/storage:/app/storage + - ./backend/legal_doc_masker.db:/app/legal_doc_masker.db + env_file: + - ./backend/.env + environment: + - CELERY_BROKER_URL=redis://redis:6379/0 + - CELERY_RESULT_BACKEND=redis://redis:6379/0 + - MINERU_API_URL=http://mineru-api:8000 + depends_on: + - redis + - backend-api + networks: + - app-network + + # Redis Service + redis: + image: redis:alpine + ports: + - "6379:6379" + networks: + - app-network + + # Frontend Service + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + args: + - REACT_APP_API_BASE_URL=http://localhost:8000/api/v1 + ports: + - "3000:80" + env_file: + - ./frontend/.env + environment: + - NODE_ENV=production + - REACT_APP_API_BASE_URL=http://localhost:8000/api/v1 + restart: unless-stopped + depends_on: + - backend-api + networks: + - app-network + +networks: + app-network: + driver: bridge + +volumes: + uploads: + processed: \ No newline at end of file diff --git a/download_models.py b/download_models.py new file mode 100644 index 0000000..626473d --- /dev/null +++ b/download_models.py @@ -0,0 +1,67 @@ +import json +import shutil +import os + +import requests +from modelscope import snapshot_download + + +def download_json(url): + # 下载JSON文件 + response = requests.get(url) + response.raise_for_status() # 检查请求是否成功 + return response.json() + + +def download_and_modify_json(url, local_filename, modifications): + if os.path.exists(local_filename): + data = json.load(open(local_filename)) + config_version = data.get('config_version', '0.0.0') + if config_version < '1.2.0': + data = download_json(url) + else: + data = download_json(url) + + # 修改内容 + for key, value in modifications.items(): + data[key] = value + + # 保存修改后的内容 + with open(local_filename, 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=4) + + +if __name__ == '__main__': + mineru_patterns = [ + # "models/Layout/LayoutLMv3/*", + "models/Layout/YOLO/*", + "models/MFD/YOLO/*", + "models/MFR/unimernet_hf_small_2503/*", + "models/OCR/paddleocr_torch/*", + # "models/TabRec/TableMaster/*", + # "models/TabRec/StructEqTable/*", + ] + model_dir = snapshot_download('opendatalab/PDF-Extract-Kit-1.0', allow_patterns=mineru_patterns) + layoutreader_model_dir = snapshot_download('ppaanngggg/layoutreader') + model_dir = model_dir + '/models' + print(f'model_dir is: {model_dir}') + print(f'layoutreader_model_dir is: {layoutreader_model_dir}') + + # paddleocr_model_dir = model_dir + '/OCR/paddleocr' + # user_paddleocr_dir = os.path.expanduser('~/.paddleocr') + # if os.path.exists(user_paddleocr_dir): + # shutil.rmtree(user_paddleocr_dir) + # shutil.copytree(paddleocr_model_dir, user_paddleocr_dir) + + json_url = 'https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/magic-pdf.template.json' + config_file_name = 'magic-pdf.json' + home_dir = os.path.expanduser('~') + config_file = os.path.join(home_dir, config_file_name) + + json_mods = { + 'models-dir': model_dir, + 'layoutreader-model-dir': layoutreader_model_dir, + } + + download_and_modify_json(json_url, config_file, json_mods) + print(f'The configuration file has been configured successfully, the path is: {config_file}') diff --git a/export-images.sh b/export-images.sh new file mode 100644 index 0000000..221cb66 --- /dev/null +++ b/export-images.sh @@ -0,0 +1,168 @@ +#!/bin/bash + +# Docker Image Export Script +# Exports all project Docker images for migration to another environment + +set -e + +echo "🚀 Legal Document Masker - Docker Image Export" +echo "==============================================" + +# Function to check if Docker is running +check_docker() { + if ! docker info > /dev/null 2>&1; then + echo "❌ Docker is not running. Please start Docker and try again." + exit 1 + fi + echo "✅ Docker is running" +} + +# Function to check if images exist +check_images() { + echo "🔍 Checking for required images..." + + local missing_images=() + + if ! docker images | grep -q "legal-doc-masker-backend-api"; then + missing_images+=("legal-doc-masker-backend-api") + fi + + if ! docker images | grep -q "legal-doc-masker-frontend"; then + missing_images+=("legal-doc-masker-frontend") + fi + + if ! docker images | grep -q "legal-doc-masker-mineru-api"; then + missing_images+=("legal-doc-masker-mineru-api") + fi + + if ! docker images | grep -q "redis:alpine"; then + missing_images+=("redis:alpine") + fi + + if [ ${#missing_images[@]} -ne 0 ]; then + echo "❌ Missing images: ${missing_images[*]}" + echo "Please build the images first using: docker-compose build" + exit 1 + fi + + echo "✅ All required images found" +} + +# Function to create export directory +create_export_dir() { + local export_dir="docker-images-export-$(date +%Y%m%d-%H%M%S)" + mkdir -p "$export_dir" + cd "$export_dir" + echo "📁 Created export directory: $export_dir" + echo "$export_dir" +} + +# Function to export images +export_images() { + local export_dir="$1" + + echo "📦 Exporting Docker images..." + + # Export backend image + echo " 📦 Exporting backend-api image..." + docker save legal-doc-masker-backend-api:latest -o backend-api.tar + + # Export frontend image + echo " 📦 Exporting frontend image..." + docker save legal-doc-masker-frontend:latest -o frontend.tar + + # Export mineru image + echo " 📦 Exporting mineru-api image..." + docker save legal-doc-masker-mineru-api:latest -o mineru-api.tar + + # Export redis image + echo " 📦 Exporting redis image..." + docker save redis:alpine -o redis.tar + + echo "✅ All images exported successfully!" +} + +# Function to show export summary +show_summary() { + echo "" + echo "📊 Export Summary:" + echo "==================" + ls -lh *.tar + + echo "" + echo "📋 Files to transfer:" + echo "====================" + for file in *.tar; do + echo " - $file" + done + + echo "" + echo "💾 Total size: $(du -sh . | cut -f1)" +} + +# Function to create compressed archive +create_archive() { + echo "" + echo "🗜️ Creating compressed archive..." + + local archive_name="legal-doc-masker-images-$(date +%Y%m%d-%H%M%S).tar.gz" + tar -czf "$archive_name" *.tar + + echo "✅ Created archive: $archive_name" + echo "📊 Archive size: $(du -sh "$archive_name" | cut -f1)" + + echo "" + echo "📋 Transfer options:" + echo "===================" + echo "1. Transfer individual .tar files" + echo "2. Transfer compressed archive: $archive_name" +} + +# Function to show transfer instructions +show_transfer_instructions() { + echo "" + echo "📤 Transfer Instructions:" + echo "========================" + echo "" + echo "Option 1: Transfer individual files" + echo "-----------------------------------" + echo "scp *.tar user@target-server:/path/to/destination/" + echo "" + echo "Option 2: Transfer compressed archive" + echo "-------------------------------------" + echo "scp legal-doc-masker-images-*.tar.gz user@target-server:/path/to/destination/" + echo "" + echo "Option 3: USB Drive" + echo "-------------------" + echo "cp *.tar /Volumes/USB_DRIVE/docker-images/" + echo "cp legal-doc-masker-images-*.tar.gz /Volumes/USB_DRIVE/" + echo "" + echo "Option 4: Cloud Storage" + echo "----------------------" + echo "aws s3 cp *.tar s3://your-bucket/docker-images/" + echo "aws s3 cp legal-doc-masker-images-*.tar.gz s3://your-bucket/docker-images/" +} + +# Main execution +main() { + check_docker + check_images + + local export_dir=$(create_export_dir) + export_images "$export_dir" + show_summary + create_archive + show_transfer_instructions + + echo "" + echo "🎉 Export completed successfully!" + echo "📁 Export location: $(pwd)" + echo "" + echo "Next steps:" + echo "1. Transfer the files to your target environment" + echo "2. Use import-images.sh on the target environment" + echo "3. Copy docker-compose.yml and other config files" +} + +# Run main function +main "$@" \ No newline at end of file diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..f353a64 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,11 @@ +node_modules +npm-debug.log +build +.git +.gitignore +README.md +.env +.env.local +.env.development.local +.env.test.local +.env.production.local \ No newline at end of file diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 0000000..e6fae2c --- /dev/null +++ b/frontend/.env @@ -0,0 +1,2 @@ +# REACT_APP_API_BASE_URL=http://192.168.2.203:8000/api/v1 +REACT_APP_API_BASE_URL=http://localhost:8000/api/v1 \ No newline at end of file diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..5872ebf --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,33 @@ +# Build stage +FROM node:18-alpine as build + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm ci + +# Copy source code +COPY . . + +# Build the app with environment variables +ARG REACT_APP_API_BASE_URL +ENV REACT_APP_API_BASE_URL=$REACT_APP_API_BASE_URL +RUN npm run build + +# Production stage +FROM nginx:alpine + +# Copy built assets from build stage +COPY --from=build /app/build /usr/share/nginx/html + +# Copy nginx configuration +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Expose port 80 +EXPOSE 80 + +# Start nginx +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..ffe5fe7 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,55 @@ +# Legal Document Masker Frontend + +This is the frontend application for the Legal Document Masker service. It provides a user interface for uploading legal documents, monitoring their processing status, and downloading the masked versions. + +## Features + +- Drag and drop file upload +- Real-time status updates +- File list with processing status +- Multi-file selection and download +- Modern Material-UI interface + +## Prerequisites + +- Node.js (v14 or higher) +- npm (v6 or higher) + +## Installation + +1. Install dependencies: +```bash +npm install +``` + +2. Start the development server: +```bash +npm start +``` + +The application will be available at http://localhost:3000 + +## Development + +The frontend is built with: +- React 18 +- TypeScript +- Material-UI +- React Query for data fetching +- React Dropzone for file uploads + +## Building for Production + +To create a production build: + +```bash +npm run build +``` + +The build artifacts will be stored in the `build/` directory. + +## Environment Variables + +The following environment variables can be configured: + +- `REACT_APP_API_URL`: The URL of the backend API (default: http://localhost:8000/api/v1) \ No newline at end of file diff --git a/frontend/docker-compose.yml b/frontend/docker-compose.yml new file mode 100644 index 0000000..3ddd4ab --- /dev/null +++ b/frontend/docker-compose.yml @@ -0,0 +1,24 @@ +version: '3.8' + +services: + frontend: + build: + context: . + dockerfile: Dockerfile + args: + - REACT_APP_API_BASE_URL=${REACT_APP_API_BASE_URL} + ports: + - "3000:80" + env_file: + - .env + environment: + - NODE_ENV=production + - REACT_APP_API_BASE_URL=${REACT_APP_API_BASE_URL} + restart: unless-stopped + networks: + - app-network + + +networks: + app-network: + driver: bridge \ No newline at end of file diff --git a/frontend/nginx.conf b/frontend/nginx.conf new file mode 100644 index 0000000..b6a7d58 --- /dev/null +++ b/frontend/nginx.conf @@ -0,0 +1,25 @@ +server { + listen 80; + server_name localhost; + + location / { + root /usr/share/nginx/html; + index index.html; + try_files $uri $uri/ /index.html; + } + + # Cache static assets + location /static/ { + root /usr/share/nginx/html; + expires 1y; + add_header Cache-Control "public, no-transform"; + } + + # Enable gzip compression + gzip on; + gzip_vary on; + gzip_min_length 10240; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/javascript; + gzip_disable "MSIE [1-6]\."; +} \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..c6f4233 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,16946 @@ +{ + "name": "legal-doc-masker-frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "legal-doc-masker-frontend", + "version": "0.1.0", + "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.15.10", + "@mui/material": "^5.15.10", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.80", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "axios": "^1.6.7", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-query": "^3.39.3", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", + "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==" + }, + "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==", + "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==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", + "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", + "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helpers": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1", + "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==" + }, + "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==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.27.1.tgz", + "integrity": "sha512-q8rjOuadH0V6Zo4XLMkJ3RMQ9MSBqwaDByyYB0izsYdaIWGNLmEblbCOf1vyFHICcg16CD7Fsi51vcQnYxmt6Q==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", + "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", + "dependencies": { + "@babel/parser": "^7.27.1", + "@babel/types": "^7.27.1", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", + "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "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==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "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/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", + "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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.27.1", + "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.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz", + "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "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==", + "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==", + "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-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", + "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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==", + "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==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "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==", + "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.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz", + "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", + "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz", + "integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz", + "integrity": "sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", + "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", + "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", + "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz", + "integrity": "sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "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==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", + "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "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==", + "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==", + "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/preset-react": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", + "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.1", + "@babel/parser": "^7.27.1", + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==" + }, + "node_modules/@emotion/styled": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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==" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead" + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "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==", + "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==", + "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/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "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==", + "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==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "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==" + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.17.1.tgz", + "integrity": "sha512-OcZj+cs6EfUD39IoPBOgN61zf1XFVY+imsGoBDwXeSq2UHJZE3N59zzBOVjclck91Ne3e9gudONOeILvHCIhUA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.17.1.tgz", + "integrity": "sha512-CN86LocjkunFGG0yPlO4bgqHkNGgaEOEc3X/jG5Bzm401qYw79/SaLrofA7yAKCCXAGdIGnLoMHohc3+ubs95A==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.17.1.tgz", + "integrity": "sha512-2B33kQf+GmPnrvXXweWAx+crbiUEsxCdCN979QDYnlH9ox4pd+0/IBriWLV+l6ORoBF60w39cWjFnJYGFdzXcw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.17.1", + "@mui/system": "^5.17.1", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.0.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.17.1.tgz", + "integrity": "sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.17.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.16.14", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.14.tgz", + "integrity": "sha512-UAiMPZABZ7p8mUW4akDV6O7N3+4DatStpXMZwPlt+H/dA0lt67qawN021MNND+4QTpjaiMYxbhKZeQcyWCbuKw==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.13.5", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.17.1.tgz", + "integrity": "sha512-aJrmGfQpyF0U4D4xYwA6ueVtQcEMebET43CUmKMP7e7iFh3sMIF3sBR0l8Urb4pqx1CBjHAaWgB0ojpND4Q3Jg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.17.1", + "@mui/styled-engine": "^5.16.14", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.24", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.24.tgz", + "integrity": "sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.17.1.tgz", + "integrity": "sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/types": "~7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.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==", + "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==", + "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==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.16.tgz", + "integrity": "sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + }, + "node_modules/@types/express": { + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.22.tgz", + "integrity": "sha512-eZUmSnhRX9YRSkplpz0N+k6NljUUn5l3EWZIKZvYzhvMphEuNiyyy1viH/ejgt66JWgALwC/gtSUAeQKtSwW/w==", + "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.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "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==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "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==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "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==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "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==" + }, + "node_modules/@types/node": { + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==" + }, + "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==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==" + }, + "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==" + }, + "node_modules/@types/react": { + "version": "18.3.22", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.22.tgz", + "integrity": "sha512-vUhG0YmQZ7kL/tmKLrD3g5zXbXXreZXB3pmROW8bg3CnLnpjkRVwUlLne7Ufa2r9yJ8+/6B73RzhAek5TBKh2Q==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "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==", + "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==", + "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==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dependencies": { + "@webassemblyjs/ast": "1.14.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==" + }, + "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==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "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==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/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==", + "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/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==" + }, + "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==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "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==", + "engines": [ + "node >= 0.8.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==", + "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==", + "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==" + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "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" + } + ], + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "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==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@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" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.1.0.tgz", + "integrity": "sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==" + }, + "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==" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "engines": { + "node": ">=0.6" + } + }, + "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==", + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "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==", + "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==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.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==" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "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==" + }, + "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==", + "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==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/broadcast-channel": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", + "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "detect-node": "^2.1.0", + "js-sha3": "0.8.0", + "microseconds": "0.2.0", + "nano-time": "1.0.0", + "oblivious-set": "1.0.0", + "rimraf": "3.0.2", + "unload": "2.2.0" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001716", + "electron-to-chromium": "^1.5.149", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "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==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", + "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" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "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==", + "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==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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==", + "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==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "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==", + "engines": { + "node": ">=0.8" + } + }, + "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==", + "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==", + "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==" + }, + "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==", + "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==" + }, + "node_modules/core-js": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", + "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", + "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", + "hasInstallScript": true, + "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==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "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": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "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==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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==", + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "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==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "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==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "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==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.157", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz", + "integrity": "sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.10", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.10.tgz", + "integrity": "sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "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==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "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==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "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/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/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==" + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "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==", + "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==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "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==", + "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/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "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.12", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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==", + "dependencies": { + "ms": "2.0.0" + } + }, + "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==" + }, + "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==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "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.8" + }, + "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==", + "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==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "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==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/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==", + "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/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "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/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" + }, + "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==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "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==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" + }, + "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==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "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==", + "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==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "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==", + "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==" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "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==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "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==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "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==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "engines": { + "node": ">= 6.0.0" + } + }, + "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==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "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==", + "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==" + }, + "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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "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==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "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==" + }, + "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==", + "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-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==" + }, + "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==", + "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": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "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/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">=10.17.0" + } + }, + "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "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==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "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==", + "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==", + "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.", + "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==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "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/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/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==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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==", + "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==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "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==", + "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==", + "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.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", + "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "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==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "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==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "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==" + }, + "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==", + "engines": { + "node": ">=6.11.5" + } + }, + "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==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "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==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/match-sorter": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.4.tgz", + "integrity": "sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==", + "dependencies": { + "@babel/runtime": "^7.23.8", + "remove-accents": "0.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "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==", + "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==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "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==", + "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==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/microseconds": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", + "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "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==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "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==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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==" + }, + "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==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nano-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", + "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "dependencies": { + "big-integer": "^1.6.16" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "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==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "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==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + }, + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==" + }, + "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==", + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/oblivious-set": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", + "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "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==", + "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==", + "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==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "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==" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "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==", + "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/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "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==" + }, + "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==", + "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==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "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==", + "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-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "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==", + "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-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "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==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "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==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "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==" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/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==", + "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==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "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==", + "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==", + "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/raw-body/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/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==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-dropzone": { + "version": "14.3.8", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.3.8.tgz", + "integrity": "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" + } + }, + "node_modules/react-error-overlay": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", + "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==" + }, + "node_modules/react-is": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.0.tgz", + "integrity": "sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==" + }, + "node_modules/react-query": { + "version": "3.39.3", + "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz", + "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "broadcast-channel": "^3.4.1", + "match-sorter": "^6.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "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==", + "dependencies": { + "pify": "^2.3.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==", + "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==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "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==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.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==" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "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==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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==", + "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==", + "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==" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/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==", + "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/schema-utils/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==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/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==" + }, + "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==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "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==", + "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==", + "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==" + }, + "node_modules/send/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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "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==" + }, + "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==" + }, + "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==" + }, + "node_modules/serve-index/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==", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "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/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==", + "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/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "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==" + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "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==", + "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.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "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==", + "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": { + "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==", + "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==" + }, + "node_modules/string-width/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==" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "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==", + "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==", + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.39.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.2.tgz", + "integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "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.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "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/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==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "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==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "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==", + "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==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "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==" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "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==", + "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==", + "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==", + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unload": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", + "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", + "dependencies": { + "@babel/runtime": "^7.6.2", + "detect-node": "^2.0.4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "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" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "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==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "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==" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "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==", + "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==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "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==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "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": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "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": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "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.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "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/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.0.tgz", + "integrity": "sha512-77R0RDmJfj9dyv5p3bM5pOHa+X8/ZkO9c7kpDstigkC4nIDobadsfSGCwB4bKhMVxqAok8tajaoR8rirM7+VFQ==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/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==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "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==", + "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==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/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==", + "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/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/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==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "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==", + "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": { + "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==", + "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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "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==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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/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==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..97cb753 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,50 @@ +{ + "name": "legal-doc-masker-frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "@emotion/react": "^11.11.3", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.15.10", + "@mui/material": "^5.15.10", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.80", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "axios": "^1.6.7", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-dropzone": "^14.2.3", + "react-query": "^3.39.3", + "react-scripts": "5.0.1", + "typescript": "^4.9.5", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} \ No newline at end of file diff --git a/frontend/public/index.html b/frontend/public/index.html new file mode 100644 index 0000000..2ec85ae --- /dev/null +++ b/frontend/public/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + + Legal Document Masker + + + +
+ + \ No newline at end of file diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 0000000..40817a9 --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,15 @@ +{ + "short_name": "Legal Doc Masker", + "name": "Legal Document Masker", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..f02db40 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,58 @@ +import React, { useEffect, useState } from 'react'; +import { Container, Typography, Box } from '@mui/material'; +import { useQuery, useQueryClient } from 'react-query'; +import FileUpload from './components/FileUpload'; +import FileList from './components/FileList'; +import { File } from './types/file'; +import { api } from './services/api'; + +function App() { + const queryClient = useQueryClient(); + const [files, setFiles] = useState([]); + + const { data, isLoading, error } = useQuery('files', api.listFiles, { + refetchInterval: 5000, // Poll every 5 seconds + }); + + useEffect(() => { + if (data) { + setFiles(data); + } + }, [data]); + + const handleUploadComplete = () => { + queryClient.invalidateQueries('files'); + }; + + if (isLoading) { + return ( + + Loading... + + ); + } + + if (error) { + return ( + + Error loading files + + ); + } + + return ( + + + + Legal Document Masker + + + + + + + + ); +} + +export default App; \ No newline at end of file diff --git a/frontend/src/components/FileList.tsx b/frontend/src/components/FileList.tsx new file mode 100644 index 0000000..ffc35a7 --- /dev/null +++ b/frontend/src/components/FileList.tsx @@ -0,0 +1,230 @@ +import React, { useState } from 'react'; +import { + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, + IconButton, + Checkbox, + Button, + Chip, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Typography, +} from '@mui/material'; +import { Download as DownloadIcon, Delete as DeleteIcon } from '@mui/icons-material'; +import { File, FileStatus } from '../types/file'; +import { api } from '../services/api'; + +interface FileListProps { + files: File[]; + onFileStatusChange: () => void; +} + +const FileList: React.FC = ({ files, onFileStatusChange }) => { + const [selectedFiles, setSelectedFiles] = useState([]); + const [deleteDialogOpen, setDeleteDialogOpen] = useState(false); + const [fileToDelete, setFileToDelete] = useState(null); + + const handleSelectFile = (fileId: string) => { + setSelectedFiles((prev) => + prev.includes(fileId) + ? prev.filter((id) => id !== fileId) + : [...prev, fileId] + ); + }; + + const handleSelectAll = () => { + setSelectedFiles((prev) => + prev.length === files.length ? [] : files.map((file) => file.id) + ); + }; + + const handleDownload = async (fileId: string) => { + try { + console.log('=== FRONTEND DOWNLOAD START ==='); + console.log('File ID:', fileId); + + const file = files.find((f) => f.id === fileId); + console.log('File object:', file); + + const blob = await api.downloadFile(fileId); + console.log('Blob received:', blob); + console.log('Blob type:', blob.type); + console.log('Blob size:', blob.size); + + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + + // Match backend behavior: change extension to .md + const originalFilename = file?.filename || 'downloaded-file'; + const filenameWithoutExt = originalFilename.replace(/\.[^/.]+$/, ''); // Remove extension + const downloadFilename = `${filenameWithoutExt}.md`; + + console.log('Original filename:', originalFilename); + console.log('Filename without extension:', filenameWithoutExt); + console.log('Download filename:', downloadFilename); + + a.download = downloadFilename; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + + console.log('=== FRONTEND DOWNLOAD END ==='); + } catch (error) { + console.error('Error downloading file:', error); + } + }; + + const handleDownloadSelected = async () => { + for (const fileId of selectedFiles) { + await handleDownload(fileId); + } + }; + + const handleDeleteClick = (fileId: string) => { + setFileToDelete(fileId); + setDeleteDialogOpen(true); + }; + + const handleDeleteConfirm = async () => { + if (fileToDelete) { + try { + await api.deleteFile(fileToDelete); + onFileStatusChange(); + } catch (error) { + console.error('Error deleting file:', error); + } + } + setDeleteDialogOpen(false); + setFileToDelete(null); + }; + + const handleDeleteCancel = () => { + setDeleteDialogOpen(false); + setFileToDelete(null); + }; + + const getStatusColor = (status: FileStatus) => { + switch (status) { + case FileStatus.SUCCESS: + return 'success'; + case FileStatus.FAILED: + return 'error'; + case FileStatus.PROCESSING: + return 'warning'; + default: + return 'default'; + } + }; + + return ( +
+
+ +
+ + + + + + 0 && selectedFiles.length < files.length} + onChange={handleSelectAll} + /> + + Filename + Status + Created At + Finished At + Actions + + + + {files.map((file) => ( + + + handleSelectFile(file.id)} + /> + + {file.filename} + + + + + {new Date(file.created_at).toLocaleString()} + + + {(file.status === FileStatus.SUCCESS || file.status === FileStatus.FAILED) + ? new Date(file.updated_at).toLocaleString() + : '—'} + + + handleDeleteClick(file.id)} + size="small" + color="error" + sx={{ mr: 1 }} + > + + + {file.status === FileStatus.SUCCESS && ( + handleDownload(file.id)} + size="small" + color="primary" + > + + + )} + + + ))} + +
+
+ + + Confirm Delete + + + Are you sure you want to delete this file? This action cannot be undone. + + + + + + + +
+ ); +}; + +export default FileList; \ No newline at end of file diff --git a/frontend/src/components/FileUpload.tsx b/frontend/src/components/FileUpload.tsx new file mode 100644 index 0000000..b2f2701 --- /dev/null +++ b/frontend/src/components/FileUpload.tsx @@ -0,0 +1,66 @@ +import React, { useCallback } from 'react'; +import { useDropzone } from 'react-dropzone'; +import { Box, Typography, CircularProgress } from '@mui/material'; +import { api } from '../services/api'; + +interface FileUploadProps { + onUploadComplete: () => void; +} + +const FileUpload: React.FC = ({ onUploadComplete }) => { + const [isUploading, setIsUploading] = React.useState(false); + + const onDrop = useCallback(async (acceptedFiles: File[]) => { + setIsUploading(true); + try { + for (const file of acceptedFiles) { + await api.uploadFile(file); + } + onUploadComplete(); + } catch (error) { + console.error('Error uploading files:', error); + } finally { + setIsUploading(false); + } + }, [onUploadComplete]); + + const { getRootProps, getInputProps, isDragActive } = useDropzone({ + onDrop, + accept: { + 'application/pdf': ['.pdf'], + 'application/msword': ['.doc'], + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': ['.docx'], + 'text/markdown': ['.md'], + }, + }); + + return ( + + + {isUploading ? ( + + ) : ( + + {isDragActive + ? 'Drop the files here...' + : 'Drag and drop files here, or click to select files'} + + )} + + ); +}; + +export default FileUpload; \ No newline at end of file diff --git a/frontend/src/env.d.ts b/frontend/src/env.d.ts new file mode 100644 index 0000000..b5188c4 --- /dev/null +++ b/frontend/src/env.d.ts @@ -0,0 +1,8 @@ +/// + +declare namespace NodeJS { + interface ProcessEnv { + readonly REACT_APP_API_BASE_URL: string; + // Add other environment variables here + } +} \ No newline at end of file diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx new file mode 100644 index 0000000..75a21d0 --- /dev/null +++ b/frontend/src/index.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { QueryClient, QueryClientProvider } from 'react-query'; +import { ThemeProvider, createTheme } from '@mui/material'; +import CssBaseline from '@mui/material/CssBaseline'; +import App from './App'; + +const queryClient = new QueryClient(); + +const theme = createTheme({ + palette: { + mode: 'light', + }, +}); + +const root = ReactDOM.createRoot( + document.getElementById('root') as HTMLElement +); + +root.render( + + + + + + + + +); \ No newline at end of file diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts new file mode 100644 index 0000000..a78653c --- /dev/null +++ b/frontend/src/services/api.ts @@ -0,0 +1,44 @@ +import axios from 'axios'; +import { File, FileUploadResponse } from '../types/file'; + +const API_BASE_URL = process.env.REACT_APP_API_BASE_URL || 'http://localhost:8000/api/v1'; + +// Create axios instance with default config +const axiosInstance = axios.create({ + baseURL: API_BASE_URL, + timeout: 30000, // 30 seconds timeout +}); + +export const api = { + uploadFile: async (file: globalThis.File): Promise => { + const formData = new FormData(); + formData.append('file', file); + const response = await axiosInstance.post('/files/upload', formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + return response.data; + }, + + listFiles: async (): Promise => { + const response = await axiosInstance.get('/files/files'); + return response.data; + }, + + getFile: async (fileId: string): Promise => { + const response = await axiosInstance.get(`/files/files/${fileId}`); + return response.data; + }, + + downloadFile: async (fileId: string): Promise => { + const response = await axiosInstance.get(`/files/files/${fileId}/download`, { + responseType: 'blob', + }); + return response.data; + }, + + deleteFile: async (fileId: string): Promise => { + await axiosInstance.delete(`/files/files/${fileId}`); + }, +}; \ No newline at end of file diff --git a/frontend/src/types/file.ts b/frontend/src/types/file.ts new file mode 100644 index 0000000..a754d3e --- /dev/null +++ b/frontend/src/types/file.ts @@ -0,0 +1,23 @@ +export enum FileStatus { + NOT_STARTED = "not_started", + PROCESSING = "processing", + SUCCESS = "success", + FAILED = "failed" +} + +export interface File { + id: string; + filename: string; + status: FileStatus; + error_message?: string; + created_at: string; + updated_at: string; +} + +export interface FileUploadResponse { + id: string; + filename: string; + status: FileStatus; + created_at: string; + updated_at: string; +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..dae9e0d --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx" + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/import-images.sh b/import-images.sh new file mode 100644 index 0000000..d3f445d --- /dev/null +++ b/import-images.sh @@ -0,0 +1,232 @@ +#!/bin/bash + +# Docker Image Import Script +# Imports Docker images on target environment for migration + +set -e + +echo "🚀 Legal Document Masker - Docker Image Import" +echo "==============================================" + +# Function to check if Docker is running +check_docker() { + if ! docker info > /dev/null 2>&1; then + echo "❌ Docker is not running. Please start Docker and try again." + exit 1 + fi + echo "✅ Docker is running" +} + +# Function to check for tar files +check_tar_files() { + echo "🔍 Checking for Docker image files..." + + local missing_files=() + + if [ ! -f "backend-api.tar" ]; then + missing_files+=("backend-api.tar") + fi + + if [ ! -f "frontend.tar" ]; then + missing_files+=("frontend.tar") + fi + + if [ ! -f "mineru-api.tar" ]; then + missing_files+=("mineru-api.tar") + fi + + if [ ! -f "redis.tar" ]; then + missing_files+=("redis.tar") + fi + + if [ ${#missing_files[@]} -ne 0 ]; then + echo "❌ Missing files: ${missing_files[*]}" + echo "" + echo "Please ensure all .tar files are in the current directory." + echo "If you have a compressed archive, extract it first:" + echo " tar -xzf legal-doc-masker-images-*.tar.gz" + exit 1 + fi + + echo "✅ All required files found" +} + +# Function to check available disk space +check_disk_space() { + echo "💾 Checking available disk space..." + + local required_space=0 + for file in *.tar; do + local file_size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null || echo 0) + required_space=$((required_space + file_size)) + done + + local available_space=$(df . | awk 'NR==2 {print $4}') + available_space=$((available_space * 1024)) # Convert to bytes + + if [ $required_space -gt $available_space ]; then + echo "❌ Insufficient disk space" + echo "Required: $(numfmt --to=iec $required_space)" + echo "Available: $(numfmt --to=iec $available_space)" + exit 1 + fi + + echo "✅ Sufficient disk space available" +} + +# Function to import images +import_images() { + echo "📦 Importing Docker images..." + + # Import backend image + echo " 📦 Importing backend-api image..." + docker load -i backend-api.tar + + # Import frontend image + echo " 📦 Importing frontend image..." + docker load -i frontend.tar + + # Import mineru image + echo " 📦 Importing mineru-api image..." + docker load -i mineru-api.tar + + # Import redis image + echo " 📦 Importing redis image..." + docker load -i redis.tar + + echo "✅ All images imported successfully!" +} + +# Function to verify imported images +verify_images() { + echo "🔍 Verifying imported images..." + + local missing_images=() + + if ! docker images | grep -q "legal-doc-masker-backend-api"; then + missing_images+=("legal-doc-masker-backend-api") + fi + + if ! docker images | grep -q "legal-doc-masker-frontend"; then + missing_images+=("legal-doc-masker-frontend") + fi + + if ! docker images | grep -q "legal-doc-masker-mineru-api"; then + missing_images+=("legal-doc-masker-mineru-api") + fi + + if ! docker images | grep -q "redis:alpine"; then + missing_images+=("redis:alpine") + fi + + if [ ${#missing_images[@]} -ne 0 ]; then + echo "❌ Missing imported images: ${missing_images[*]}" + exit 1 + fi + + echo "✅ All images verified successfully!" +} + +# Function to show imported images +show_imported_images() { + echo "" + echo "📊 Imported Images:" + echo "===================" + docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep legal-doc-masker + docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | grep redis +} + +# Function to create necessary directories +create_directories() { + echo "" + echo "📁 Creating necessary directories..." + + mkdir -p backend/storage + mkdir -p mineru/storage/uploads + mkdir -p mineru/storage/processed + + echo "✅ Directories created" +} + +# Function to check for required files +check_required_files() { + echo "" + echo "🔍 Checking for required configuration files..." + + local missing_files=() + + if [ ! -f "docker-compose.yml" ]; then + missing_files+=("docker-compose.yml") + fi + + if [ ! -f "DOCKER_COMPOSE_README.md" ]; then + missing_files+=("DOCKER_COMPOSE_README.md") + fi + + if [ ${#missing_files[@]} -ne 0 ]; then + echo "⚠️ Missing files: ${missing_files[*]}" + echo "Please copy these files from the source environment:" + echo " - docker-compose.yml" + echo " - DOCKER_COMPOSE_README.md" + echo " - backend/.env (if exists)" + echo " - frontend/.env (if exists)" + echo " - mineru/.env (if exists)" + else + echo "✅ All required configuration files found" + fi +} + +# Function to show next steps +show_next_steps() { + echo "" + echo "🎉 Import completed successfully!" + echo "" + echo "📋 Next Steps:" + echo "==============" + echo "" + echo "1. Copy configuration files (if not already present):" + echo " - docker-compose.yml" + echo " - backend/.env" + echo " - frontend/.env" + echo " - mineru/.env" + echo "" + echo "2. Start the services:" + echo " docker-compose up -d" + echo "" + echo "3. Verify services are running:" + echo " docker-compose ps" + echo "" + echo "4. Test the endpoints:" + echo " - Frontend: http://localhost:3000" + echo " - Backend API: http://localhost:8000" + echo " - Mineru API: http://localhost:8001" + echo "" + echo "5. View logs if needed:" + echo " docker-compose logs -f [service-name]" +} + +# Function to handle compressed archive +handle_compressed_archive() { + if ls legal-doc-masker-images-*.tar.gz 1> /dev/null 2>&1; then + echo "🗜️ Found compressed archive, extracting..." + tar -xzf legal-doc-masker-images-*.tar.gz + echo "✅ Archive extracted" + fi +} + +# Main execution +main() { + check_docker + handle_compressed_archive + check_tar_files + check_disk_space + import_images + verify_images + show_imported_images + create_directories + check_required_files + show_next_steps +} + +# Run main function +main "$@" \ No newline at end of file diff --git a/mineru/Dockerfile b/mineru/Dockerfile new file mode 100644 index 0000000..9f385c2 --- /dev/null +++ b/mineru/Dockerfile @@ -0,0 +1,46 @@ +FROM python:3.12-slim + +WORKDIR /app + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + libreoffice \ + wget \ + && rm -rf /var/lib/apt/lists/* +RUN pip install --upgrade pip +RUN pip install uv + +# Configure uv and install mineru +ENV UV_SYSTEM_PYTHON=1 +RUN uv pip install --system -U "mineru[core]" + + + +# Copy requirements first to leverage Docker cache +# COPY requirements.txt . +# RUN pip install huggingface_hub +# RUN wget https://github.com/opendatalab/MinerU/raw/master/scripts/download_models_hf.py -O download_models_hf.py +# RUN wget https://raw.githubusercontent.com/opendatalab/MinerU/refs/heads/release-1.3.1/scripts/download_models_hf.py -O download_models_hf.py + +# RUN python download_models_hf.py +RUN mineru-models-download -s modelscope -m pipeline + + + + +# RUN pip install --no-cache-dir -r requirements.txt +# RUN pip install -U magic-pdf[full] + + +# Copy the rest of the application +# COPY . . + +# Create storage directories +# RUN mkdir -p storage/uploads storage/processed + +# Expose the port the app runs on +EXPOSE 8000 + +# Command to run the application +CMD ["mineru-api", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/mineru/docker-compose.yml b/mineru/docker-compose.yml new file mode 100644 index 0000000..a757f34 --- /dev/null +++ b/mineru/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3.8' + +services: + mineru-api: + build: + context: . + dockerfile: Dockerfile + platform: linux/arm64 + ports: + - "8001:8000" + volumes: + - ./storage/uploads:/app/storage/uploads + - ./storage/processed:/app/storage/processed + environment: + - PYTHONUNBUFFERED=1 + - MINERU_MODEL_SOURCE=local + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + +volumes: + uploads: + processed: diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c5280ad..0000000 --- a/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -# Base dependencies -pydantic-settings>=2.0.0 -python-dotenv==1.0.0 -watchdog==2.1.6 -requests==2.26.0 - -# Document processing -python-docx>=0.8.11 -PyPDF2>=3.0.0 -pandas>=2.0.0 diff --git a/sample_doc/20220707_na_decision-2.docx b/sample_doc/20220707_na_decision-2.docx new file mode 100644 index 0000000000000000000000000000000000000000..83b304cde4b369cf07ac4ae917c3d34171e9600c GIT binary patch literal 36673 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 literal 0 HcmV?d00001 diff --git a/sample_doc/20220707_na_decision-2.md b/sample_doc/20220707_na_decision-2.md new file mode 100644 index 0000000..0ec76d4 --- /dev/null +++ b/sample_doc/20220707_na_decision-2.md @@ -0,0 +1,101 @@ +# 北京市第三中级人民法院民事判决书 + +(2022)京 03 民终 3852 号 + +上诉人(原审原告):北京丰复久信营销科技有限公司,住所地北京市海淀区北小马厂6 号1 号楼华天大厦1306 室。 + +法定代表人:郭东军,执行董事、经理。委托诉讼代理人:周大海,北京市康达律师事务所律师。委托诉讼代理人:王乃哲,北京市康达律师事务所律师。 + +被上诉人(原审被告):中研智创区块链技术有限公司,住所地天津市津南区双港镇工业园区优谷产业园5 号楼-1505。 + +法定代表人:王欢子,总经理。 + +委托诉讼代理人:魏鑫,北京市昊衡律师事务所律师。 + +1.上诉人北京丰复久信营销科技有限公司(以下简称丰复久信公司)因与被上诉人中研智创区块链技术有限公司(以下简称中研智创公司)服务合同纠纷一案,不服北京市朝阳区人民法院(2020)京0105 民初69754 号民事判决,向本院提起上诉。本院立案后,依法组成合议庭开庭进行了审理。上诉人丰复久信公司之委托诉讼代理人周大海、王乃哲,被上诉人中研智创公司之委托诉讼代理人魏鑫到庭参加诉讼。本案现已审理终结。 + +2.丰复久信公司上诉请求:1.撤销一审判决,发回重审或依法改判支持丰复久信公司一审全部诉讼请求;2.或在维持原判的同时判令中研智创公司向丰复久信公司返还 1000 万元款项,并赔偿丰复久信公司因此支付的律师费 220 万元;3.判令中研智创公司承担本案一审、二审全部诉讼费用。事实与理由:一、根据2019 年的政策导向,丰复久信公司的投资行为并无任何法律或政策瑕疵。丰复久信公司仅投资挖矿,没有购买比特币,故在当时国家、政府层面有相关政策支持甚至鼓励的前提下,一审法院仅凭“挖矿”行为就得出丰复久信公司扰乱金融秩序的结论,是错误的。二、一审法院没有全面、深入审查相关事实,且遗漏了最核心的数据调查工作。三、本案一审判决适用法律错误。涉案合同成立及履行期间并无合同无效的情形,当属有效。一审法院以挖矿活动耗能巨大、不利于我国产业结构调整为依据之一,作出合同无效的判决,实属牵强。最高人民法院发布的全国法院系统2020 年度优秀案例分析评选活动获奖名单中,由上海市第一中级人民法院刘江法官编写的“李圣艳、布兰登·斯密特诉闫向东、李敏等财产损害赔偿纠纷案— —比特币的法律属性及其司法救济”一案入选,该案同样发生在丰复久信公司与中研智创公司合同履行过程中,一审法院认定同时期同类型的涉案合同无效,与上述最高人民法院的优秀案例相悖。四、一审法院径行认定合同无效,未向丰复久信公司进行释明构成程序违法。 + +3.中研智创公司辩称,同意一审判决,不同意丰复久信公司的上诉请求。首先,一审法院曾在庭审中询问丰复久信公司关于机器返还的问题,一审法院进行了释明。其次,如二审法院对其该项上诉请求进行判决,会剥夺中研智创公司针对该部分请求再行上诉的权利。 + +4.丰复久信公司向一审法院起诉请求:1.中研智创公司交付278.1654976 个比特币,或者按照 2021 年 1 月 25 日比特币的价格交付9550812.36 美元;2.中研智创公司赔偿丰复久信公司服务期到期后占用微型存储空间服务器的损失(自2020 年7 月1日起至实际返还服务器时止,按照bitinfocharts 网站公布的相关日产比特币数据,计算应赔偿比特币数量或按照2021 年1 月25 日比特币的价格交付美元)。 + +5.一审法院查明事实:2019 年5 月6 日,丰复久信公司作为甲方(买方)与乙方(卖方)中研智创公司签订《计算机设备采购合 + +同》,约定:货物名称为计算机设备,型号规格及数量为T2T-30T 规格型号的微型存储空间服务器1542 台,单价5040/ 台合同金额为 7 771 680 元;交货期 2019 年 8 月 31 日前;交货方式为乙方自行送货到甲方所在地,并提供安装服务,运输工具及运费由乙方负责;交货地点北京;签订购货合同,设备安装完毕后一次性支付项目总货款;乙方提供货物的质量保证期为自交货验收结束之日起不少于十二个月(具体按清单要求);乙方交货前应对产品作出全面检查和对验收文件进行整理,并列出清单,作为甲方收货验收和使用的技术条件依据,检验的结果应随货物交甲方,甲方对乙方提供的货物在使用前进行调试时,乙方协助甲方一起调试,直到符合技术要求,甲方才做最终验收,验收时乙方必须在现场,验收完毕后作出验收结果报告,并经双方签字生效。 + +6.同日,丰复久信公司作为甲方(客户方)与乙方中研智创公司(服务方)签订《服务合同书》,约定:乙方同意就采购合同中的微型存储空间服务器向甲方提供特定服务;服务的内容包括质保、维修、服务器设备代为运行管理、代为缴纳服务器相关用度花费如电费等,详细内容见附件一;如果乙方在工作中因自身过错而发生任何错误或遗漏,应无条件更正,不另外收费,并对因此而对甲方造成的损失承担赔偿责任,赔偿额以本合同约定的服务费为限;若因甲方原因造成工作延误,将由甲方承担相应的损失;服务费总金额为2 228 320 元,甲乙双方一致同意项目服务费以人民币形式,于本合同签订后3 日内一次性支付;甲方可以提前10 个工作日以书面形式要求变更或增加所提供的服务,该等变更最终应由双方商定认可,其中包括与该等变更有关的任何费用调整等。合同后附附件一以表格形式列明,1.1542 台T2T-30T 微型存储空间服务器的质保、维修,时限12 个月,完成标准为完成甲方指定的运行量;2.服务器的日常运行管理,时限12 个月;3.代扣代缴电费;4.其他(空白)。 + +7.2019 年5 月,双方签订《增值服务协议》,约定:甲方将自有的T2T-30 规格的微型存储空间服务器1542 台委托乙方管理,由甲方向乙方支付一定管理费用;由乙方向甲方提供相关数据增值服务,对于增值服务产生的收益,扣除运行成本后,甲乙双方按照一定比例进行分配(备注:增值服务收益与微型存储空间服务的单位TH/s 相关,分配收益方式不限于人民币支付);甲方最多可将托管的云数据服务器的单位(TH/s)的 $50 \%$ 进行拆分,委托乙方代为出售,用户购买后的单位(TH/s)所产生的收益归购买用户所有,结算价格按照当天实际的市场价格进行结算,扣除市场销售成本后,实时转入甲方提供的收益地址;相关费用及支付,数据增值服务的电费成本,由甲方自行承担,按日计算,具体价格根据实际上架的数据中心的价格进行计算,由后续的《数据增值服务电费计价协议作为补充》;云数据服务器上架后2 天内,甲方应当向乙方预付498 196 元,用于预付部分云数据服务器的电费,后续每日的电费支出按当天24 时云数据服务器的增值部分的价值扣除,扣除完成后的增值服务收益部分当日划入甲方提供的收益地址;单台云数据服务器的放置建设成本为300 元,由甲方承担;数据增值服务产生的收益,按照 $7 \%$ 的比例分配给乙方,作为云数据服务器托管过程中乙方的管理和运营收益;数据增值服务产生的收益,当天进行结算,转入甲方提供的接收地址;乙方保证将按照厂家提供的环境标准(包括但不限于:电压、用电环境、温度、湿度、网络带宽、机房密度)使用、维护本合同项下云数据服务器;在正常使用过程中因不可归责于乙方的原因导致服务器损坏的,乙方不承担责任,乙方应协助甲方维修或更换服务器设备,相关费用由甲方承担;甲方云数据服务器根据机型按实测功耗计算电费,各服务器机型到现场进行测量功耗后,乙方告知甲方;经双方认可后,固定每月耗电量;未经甲方同意,乙方不得将托管的云数据服务器挪作他用,且不得将同类设备进行调换;如云数据服务器出现宕机或TH/s 为零的情况下,乙方必须 30分钟内对云数据服务器设备进行充气或其他处理,以保障甲方的利益;若检查发现系硬件原因无法解决,乙方负责将故障设备进行打包、返场维修,产生的费用由甲方承担;如因突发情况,如供电公司线路检修、机组维护、网络运营商意外断网等,导致数据服务器中断运行,乙方负责协调处理故障;在乙方可控范围内,甲方云数据服务器中断运行时间原则上每月不超过48 小时,如停电超出约定时间,乙方将在合同约定的管理时间基础上延长服务时间,并承担服务器的机器放置费用;乙方因自身原因导致托管的甲方服务器损害或者灭失的,应当向甲方承担赔偿责任;合同期限为 2019 年 6 月 30 日至 2020 年 6 月 30日。 + +8.上述合同签订后,中研智创公司购买并委托第三方矿场实际运营“矿机”。 + +019 年7 月15 日,甲方中研智创公司与乙方成都毛球华数科技合伙企业(有限合伙)签订两份《矿机托管服务合同(包运维)》,约定:甲方将其所拥有的“矿机”置于乙方算力服务中心,乙方对甲方矿机提供运维管理服务,“矿机”名称为芯动T2T,数量分别为1350 台、502 台,全新,算力26T、30T,功耗2200W;托管期限以甲方矿机到达乙方算力服务中心并开始运行之日起算,分别暂定自2019 年7 月15 日至2019 年10月 25 日止、自 2019 年 6 月 28 日至 2019 年 10 月 25 日止,乙方算力服务中心地址分别为四川省凉山州木里县水洛乡、沙湾乡;托管服务费计量方式均为,按照乙方上架运行机型实测功耗进行核算耗电量 $+ 3 \%$ 电损,电费单价按0.239 元/度计算;甲方应在本合同签订之日起两个工作日内,向乙方支付半个月托管服务费作为本合同履约保证金,分别为人民币251 242 元、 + +94000 元,履约保证金可用于抵扣协议最后一个结算周期的托管服务费,托管服务费支付周期为每半月支付。 + +10. 合同实际履行过程中,2019 年5 月20 日,丰复久信公司向中研智创公司支付1000 万元,用途备注为货款。中研智创公司曾于2019 年向丰复久信公司交付了18.3463 个比特币。此后未再进行比特币交付,双方故此产生争议,并产生大量微信沟通记录。 + +微信聊天记录中,关于核实设备及比特币产量情况。2019年11 月8 日,丰复久信公司称,“我们是应该自己有个矿池账号了吧!这样是不是我们也可远程监控管理”“现在可以登不?”,中研智创公司称“可以的”“之前走的是另外的体系,我们看看怎样把矿池的账号直接对接给你这边吧”“现在不行,因为所有机器都是统一管理,放在同一个大的账号里面,需要切割出来”“两天吧,周一可以给你搞好”。11 月12 日,中研智创公司微信称“郭总,请你升级一下注册一下普惠矿场 App,挖矿收益以后都在这里查看和提取,原来的APP 不再更新了”,丰复久信公司回复称“我不清楚你们要干什么,现在不能你们让我干嘛我干嘛,基本信任已经不存在了。所以,任何一个动作,我现在都需要做尽调”。11 月25 日,双方微信群聊天记录显示,中研智创公司员工介绍,“这是我们在四川木里那边的现场管理人员”,此后双方互相交换了联系电话,并沟通丰复久信公司应以何种交通方式前往四川木里。11 月27 日,丰复久信公司称“我到了矿场,我要看下后台,需要个链接”,中研智创公司给出网页链接称“这是矿场的链接”。该链接地址网站名称为“币印”,现点击链接显示“该观察者链接已失效,请重新创建”。12 月7 日,丰复久信公司称“什么时候可以提供你的原始资料?抓紧核实!”。12 月19 日,双方沟通矿机搬动情况,中研智创公司称“在昭通这边,等通知进场”,2020 年3 月20 日称矿机在“乐山这边”,丰复久信公司称“这几个月挖了多少币了?郭总的软件登不上去没有信息!什么时间通个电话”。中研智创公司未在微信聊天中明确答复。 + +12. 关于丰复久信公司向中研智创公司催要比特币情况。微信聊天记录显示,2020 年4 月9 日,丰复久信公司询问中研智创公司,“我想知道一下我的机器到底挖了几个币,就这么难吗?”,中研智创公司回复“放心吧,我已经打电话给唐宇了,他会安排老潘落实,我今天没有联系到潘,我答应你的事情算数的”。 + +4 月 10 日、4 月 17 日、4 月 30 日、6 月 22 日、6 月 23 日、6 月27 日,丰复久信公司分别再次询问称“还是这情况呀,APP 还是 $0 ^ { \mathfrak { s } }$ “咱们这事,您准备怎么收场啊,币也不给,钱也不还,算力也不卖,各种理由,您是逼我报官了吧”等,中研智创公司未回复,6 月28 日回复称“稍晚一会给你打电话”。 + +13. 关于比特币等虚拟货币及“挖矿”活动的风险防范、整治,国家相关部门曾多次发布《通知》《公告》《风险提示》等政策文件: + +1.2013 年12 月,中国人民银行等五部委发布《关于防范比特币风险的通知》指出,比特币不是由货币当局发行,不具有法偿性与强制性等货币属性,并不是真正意义的货币。从性质上看,比特币应当是一种特定的虚拟商品,不具有与货币等同的法律地位,不能且不应作为货币在市场上流通使用。各金融机构和支付机构不得以比特币为产品或服务定价,不得买卖或作为中央对手买卖比特币,不得承保与比特币相关的保险业务或将比特币纳入保险责任范围,不得直接或间接为客户提供其他与比特币相关的服务。 + +2.2017 年9 月,《中国人民银行、中央网信办、工业和信息化部、工商总局、银监会、证监会、保监会、关于防范代币发行融资风险的公告》,再次强调比特币不具有法偿性与强制性等货币属性,不具有与货币等同的法律地位,不能也不应作为货币在市场上流通使用,并提示,代币发行融资与交易存在多重风险,包括虚假资产风险、经营失败风险、投资炒作风险等,投资者须自行承担投资风险,希望广大投资者谨防上当受骗。 + +3.2018 年8 月《中国银行保险监督管理委员会、中央网络安全和信息化领导小组办公室、公安部、中国人民银行、国家市场监督管理总局关于防范以“虚拟货币”“区块链”名义进行非法集资的风险提示》也再次明确作出风险提示。 + +4.2021 年5 月18 日,中国互联网金融协会、中国银行业协会、中国支付清算协会联合发布《关于防范虚拟货币交易炒作风险的公告》,再次强调正确认识虚拟货币及相关业务活动的本质属性,有关机构不得开展与虚拟货币相关的业务,并特别指出,消费者要提高风险防范意识,“从我国现有司法实践看,虚拟货币交易合同不受法律保护,投资交易造成的后果和引发的损失由相关方自行承担”。 + +5.2021 年9 月3 日,国家发展和改革委员会等部门发布《关于整治虚拟货币“挖矿”活动的通知》(发改运行〔2021〕1283号)指出,“虚拟货币‘挖矿’活动指通过专用‘矿机’计算生产虚拟货币的过程,能源消耗和碳排放量大,对国民经济贡献度低,对产业发展、科技进步等带动作用有限,加之虚拟货币生产、交易环节衍生的风险越发突出,其盲目无序发展对推动经济社会高质量发展和节能减排带来不利影响。整治虚拟货币‘挖矿’活动对促进我国产业结构优化、推动节能减排、如期实现碳达峰、碳中和目标具有重要意义。”“严禁投资建设增量项目,禁止以任何名义发展虚拟货币‘挖矿’项目;加快有序退出存量项目。” + +“严格执行有关法律法规和规章制度,严肃查处整治各地违规虚拟货币‘挖矿’活动”。 + +6.2021 年9 月15 日,中国人民银行、中央网信办、最高人民法院等部门联合发布《关于进一步防范和处置虚拟货币交易炒作风险的通知》指出,虚拟货币相关业务活动属于非法金融活动,境外虚拟货币交易所通过互联网向我国境内居民提供服务同样属于非法金融活动,并再次提示,参与虚拟货币投资交易活动存在法律风险,任何法人、非法人组织和自然人投资虚拟货币及相关衍生品,违背公序良俗的,相关民事法律行为无效,由此引发的损失由其自行承担。 + +14. 上述事实,有丰复久信公司提交的《计算机设备采购合同》《服务合同书》《增值服务协议》、银行转账记录、网页截图、微信聊天记录,有中研智创公司提交的《矿机托管服务合同(包运维)》、微信聊天记录等证据及当事人陈述等在案佐证。 + +一审法院认为,本案事实发生于民法典实施前,根据《最高人民法院关于适用<中华人民共和国民法典>时间效力的若干规定》,民法典施行前的法律事实引起的民事纠纷案件,适用当时的法律、司法解释的规定,因此本案应适用《中华人民共和国合同法》的相关规定。 + +15. 根据2021 年9 月3 日国家发展和改革委员会等部门《关于整治虚拟货币“挖矿”活动的通知》,虚拟货币“挖矿”活动指通过专用“矿机”计算生产虚拟货币的过程。本案中,丰复久信公司与中研智创公司签订《计算机设备采购合同》《服务合同书》《增值服务协议》,约定丰复久信公司委托中研智创公司采购微型存储空间服务器,并由中研智创公司对计算机服务器进行管理,丰复久信公司向中研智创公司支付管理费用,中研智创公司提供相关数据增值服务,支付增值服务收益。诉讼中,中研智创公司陈述,其按照三份合同约定代丰复久信公司购买了“矿机”,并与第三方公司即“矿场”签订委托合同,将“矿机”在“矿场”运行,并曾向丰复久信公司交付过18.3463 个比特币。根据上述履约过程及三份合同约定的主要内容,双方的交易模式实际上即为丰复久信公司委托中研智创公司购买并管理专用“矿机”计算生产比特币的“挖矿”行为。三份合同系有机整体,合同目的均系双方为了最终进行“挖矿”活动而签订,双方成立合同关系。该比特币“挖矿”的交易模式,属于国家相关行政机关管控范围,需要严格遵守相关法律法规和规章制度。 + +《中华人民共和国合同法》第七条规定,“当事人订立、履行合同,应当遵守法律、行政法规,尊重社会公德,不得扰乱社会经济秩序,损害社会公共利益”;第五十二条规定,“有下列情形之一的,合同无效:(一)一方以欺诈、胁迫的手段订立合同,损害国家利益;(二)恶意串通,损害国家、集体或者第三人利益;(三)以合法形式掩盖非法目的;(四)损害社会公共利益;(五)违反法律、行政法规的强制性规定。” 社会公共利益一般指关系到全体社会成员或者社会不特定多数人的利益,主要包括社会公共秩序以及社会善良风俗等,是明确国家和个人权利的行使边界、判断民事法律行为正当性和合法性的重要标准之一。能源安全、金融安全、经济安全等都是国家安全的重要组成部分,防范化解相关风险、深化整治相关市场乱象,均关系到我国的产业结构优化、金融秩序稳定、社会经济平稳运行和高质量发展,故社会经济秩序、金融秩序等均涉及社会公共利益。 + +17. 根据上述虚拟货币相关《通知》《公告》《风险提示》等文件,本案涉及的比特币为网络虚拟货币,并非国家有权机关发行的法定货币,不具有与法定货币等同的法律地位,不具有法偿性,不应且不能作为货币在市场上流通使用,相关部门多次发布《风险公告》《通知》等文件,提示消费者提高风险防范意识,投资交易虚拟货币造成的后果和引发的损失由相关方自行承担。且本案的交易模式系“挖矿”活动,随着虚拟货币交易的发展,“挖矿”行为的危害日渐凸显。 + +“挖矿”活动能源消耗和碳排放量大,不利于我国产业结构优化、节能减排,不利于我国实现碳达峰、碳中和目标。加之虚拟货币相关交易活动无真实价值支撑,价格极易被操纵,“挖矿”行为也进一步衍生虚假资产风险、经营失败风险、投资炒作风险等相关金融风险,危害外汇管理秩序、金融秩序,甚至容易引发违法犯罪活动、影响社会稳定。正因“挖矿”行为危害大、风险高,其盲目无序发展对推动经济社会高质量发展和节能减排带来不利影响,相关政策明确拟将虚拟货币“挖矿”活动增补列入《产业结构调整指导目录(2019 年本)》“淘汰类”目录,要求采取有效措施,全面整治虚拟货币“挖矿”活动。本案中,丰复久信公司和中研智创公司在明知“挖矿”及比特币交易存在风险,且相关部门明确禁止比特币相关交易的情况下,仍然签订协议形成委托“挖矿”关系。“挖矿”活动及虚拟货币的相关交易行为存在上文论述的诸多风险和危害,干扰了正常的金融秩序、经济发展秩序,故该“挖矿”合同损害社会公共利益,应属无效。 + +18. 《中华人民共和国合同法》第五十八条规定,“合同无效或者被撤销后,因该合同取得的财产,应当予以返还;不能返还或者没有必要返还的,应当折价补偿。有过错的一方应当赔偿对方因此所受到的损失,双方都有过错的,应当各自承担相应的责任。”本案中,丰复久信公司第一项诉讼请求系基于合同项下权利义务要求中研智创公司支付比特币收益,因“挖矿” 合同自始无效,丰复久信公司通过履行无效合同主张获得的利益不应受到法律保护,对其相应诉讼请求,一审法院不予支持。丰复久信公司第二项诉讼请求主张占用“矿机”设备期间的比特币损失,该损失系丰复久信公司基于持续利用“矿机”从事 “挖矿”活动产生比特币的损失,不应受到法律保护,对其相应诉讼请求,一审法院亦不予支持。 + +19. 关于本案中“矿机”的处理,因现相关计算机设备仍由中研智创公司保管,但诉讼中,丰复久信公司明确表示其将另行主张,不在本案中要求处理“矿机”返还问题。故一审法院在本案中不再予以处理。但同时需要提醒双方当事人,均应遵守国家相关法律规定和产业政策,案涉计算机等设备不得继续用于比特币等虚拟货币“挖矿”活动,当事人应防范虚拟货币交易风险,自觉维护市场秩序和社会公共利益。 + +20. 综上,一审法院判决驳回北京丰复久信营销科技有限公司的全部诉讼请求。 + +21. 二审中,各方均未提交新的证据。本院对一审查明的事实予以确认。 + +22. 本院认为,比特币及相关经济活动是新型、复杂的,我国监管机构对比特币生产、交易等方面的监管措施建立在对其客观认识的基础上,并不断完善。本案双方挖矿合同从签订至履行后发生争议,纠纷延续至今,亦处于这一过程中。对合同效力的认定,应建立在当下对挖矿活动的客观认识基础上。 + +, ('、一·、( √D)T4D H上23. 2013 年,中国人民银行等五部委发布通知,禁止金融机构对比特币进行定价,不得买卖或作为中央对手买卖比特币,不得直接或间接为客户提供其他与比特币相关的服务。2017 年,中国人民银行等七部门联合发布《关于防范代币发行融资风险的公告》进一步提出任何所谓的代币融资交易平台不得从事法定货币与代币、“虚拟货币”相互之间的兑换业务,不得买卖或作为中央对手方买卖代币或“虚拟货币”,不得为代币或“虚拟货币”提供定价、信息中介等服务。上述两个文件实质上禁止了比特币在我国相关平台的兑付、交易。2021 年,中国人民银行等部门《关于进一步防范和处置虚拟货币交易炒作风险的通知》显示,虚拟货币交易炒作活动扰乱经济金融秩序,滋生赌博、非法集资、诈骗、传销、洗钱等违法犯罪活动,严重危害人民群众财产安全和国家金融安全。 + +24. 2021 年9 月3 日国家发展和改革委员会等部门《关于整治虚拟货币“挖矿”活动的通知》显示,虚拟货币挖矿活动能源消耗和碳排放量大,对国民经济贡献度低,对产业发展、科技进步等带动作用有限,加之虚拟货币生产、交易环节衍生的风险越发突出,其盲目无序发展对推动经济社会高质量发展和节能减排带来不利影响。故以电力资源、碳排放量为代价的“挖矿”行为,与经济社会高质量发展和碳达峰、碳中和目标相悖,与公共利益相悖。 + +5. 丰复久信公司主张双方合同签订时并无明确的法律规范禁止比特币“挖矿”活动,故应保障当事人的信赖利益,认定涉案合同有效一节,本院认为,当事人之间基于投资目的进行“挖矿”,并通过电子方式转让、储存以及交易的行为,实际经济追求是为了通过比特币与法定货币的兑换直接获取法定货币体系下的利益。丰复久信公司作为营利法人,在庭审中表示投资比特币仅系持有,本院难以采信。在监管机构禁止了比特币在我国相关平台的兑付、交易,且数次提示比特币投资风险的情况下,双方为获取高额利润,仍从事“挖矿”行为,现丰复久信公司以保障其信赖利益主张合同有效依据不足,本院不予采纳。 + +26. 综上,相关部门整治虚拟货币“挖矿”活动、认定虚拟货币相关业务活动属于非法金融活动,有利于保障我国发展利益和金融安全。从“挖矿”行为的高能耗以及比特币交易活动对国家金融秩序和社会秩序的影响来看,一审法院认定涉案合同无效是正确的。双方作为社会主义市场经济主体,既应遵守市场经济规则,亦应承担起相应的社会责任,推动经济社会高质量发展、可持续发展。 + +27. 关于合同无效后的返还问题,一审法院未予处理,双方可另行解决。 + +28. 综上所述,丰复久信公司的上诉请求不能成立,应予驳回;一审判决并无不当,应予维持。依照《中华人民共和国民事诉讼法》第一百七十七条第一款第一项规定,判决如下: + +驳回上诉,维持原判。 + +二审案件受理费450892 元,由北京丰复久信营销科技有限公司负担(已交纳)。 + +29. 本判决为终审判决。 + +审 判 长 史晓霞审 判 员 邓青菁审 判 员 李 淼二〇二二年七月七日法 官 助 理 黎 铧书 记 员 郑海兴 \ No newline at end of file diff --git a/sample_doc/20220707_na_decision-2.pdf b/sample_doc/20220707_na_decision-2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7dd9f293c08675f090dffa24dea39eda5c08822b GIT binary patch literal 251768 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

    W?``hTMw+K&yp21>u1wfzAlYsa8dc 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 wpEo9?

    2TKX@X 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%0DP?~Ub5_j{0tdn`)B#NYWK`(DVrs!HIW|NqG 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 /dev/null 2>&1; then + echo "❌ Docker is not running. Please start Docker and try again." + exit 1 + fi + echo "✅ Docker is running" +} + +# Function to stop existing individual services +stop_individual_services() { + echo "🛑 Stopping individual Docker Compose services..." + + if [ -f "backend/docker-compose.yml" ]; then + echo "Stopping backend services..." + cd backend && docker-compose down 2>/dev/null || true && cd .. + fi + + if [ -f "frontend/docker-compose.yml" ]; then + echo "Stopping frontend services..." + cd frontend && docker-compose down 2>/dev/null || true && cd .. + fi + + if [ -f "mineru/docker-compose.yml" ]; then + echo "Stopping mineru services..." + cd mineru && docker-compose down 2>/dev/null || true && cd .. + fi + + echo "✅ Individual services stopped" +} + +# Function to create necessary directories +create_directories() { + echo "📁 Creating necessary directories..." + + mkdir -p backend/storage + mkdir -p mineru/storage/uploads + mkdir -p mineru/storage/processed + + echo "✅ Directories created" +} + +# Function to check if unified docker-compose.yml exists +check_unified_compose() { + if [ ! -f "docker-compose.yml" ]; then + echo "❌ Unified docker-compose.yml not found in current directory" + echo "Please run this script from the project root directory" + exit 1 + fi + echo "✅ Unified docker-compose.yml found" +} + +# Function to build and start services +start_unified_services() { + echo "🔨 Building and starting unified services..." + + # Build all services + docker-compose build + + # Start services + docker-compose up -d + + echo "✅ Unified services started" +} + +# Function to check service status +check_service_status() { + echo "📊 Checking service status..." + + docker-compose ps + + echo "" + echo "🌐 Service URLs:" + echo "Frontend: http://localhost:3000" + echo "Backend API: http://localhost:8000" + echo "Mineru API: http://localhost:8001" + echo "" + echo "📝 To view logs: docker-compose logs -f [service-name]" + echo "📝 To stop services: docker-compose down" +} + +# Main execution +main() { + echo "==========================================" + echo "Unified Docker Compose Setup" + echo "==========================================" + + check_docker + check_unified_compose + stop_individual_services + create_directories + start_unified_services + check_service_status + + echo "" + echo "🎉 Setup complete! Your unified Docker environment is ready." + echo "Check the DOCKER_COMPOSE_README.md for more information." +} + +# Run main function +main "$@" \ No newline at end of file diff --git a/src/config/__pycache__/logging_config.cpython-311.pyc b/src/config/__pycache__/logging_config.cpython-311.pyc deleted file mode 100644 index 06116baa3a9b6dc6d2f892349e200b1f691f70f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1213 zcmZWn&1(}u6rcUfCN&@ZNZNw2K`nKWWbrB@)Y{ZSO+l-NUc#E0rrU0^WoBAzP9FRp zdWldxDB?d;CE_x85X3`o3q9${H=AsLnlRLn5PUJIxDI?i17 zLSAajn7~*12F~_XoWprsXsZzYn?H%C`Wn=o?ifOcFiQrP8Wr^9hUw`88XUN7=)g8a>WEP01zjtm#)=u8lHX5_A}uh+3oZbX&qV{^1o3eIp*=asc%7=r>EAaW{~m#48!+Km7bq9zFeEbAYw?wsCUP5_ zYisL`wdTrZqrSfO0bNK5zaKfz7&Pf{4|*kC=OHWlEOYXGm%PkrKbZfMk(cL(%Ui37BP|^ptItK%!HYnNQ?80Eyi43iniI4=%m^PyVDpkYz8)30LC@zJiTT$AWfw+VmD&77YnyU=v z>~Ll_nlLAUAR(WdG$SOTg3=S={PolN+1%|>srho0(zC#npqT|Ty0b8)MhM_lE_$G- LN-aYFL)`lx3UwfF-+RCJe)D@T^D&XI5uDR6+U_q6q3<#n zod|*8>9$u#OF)?OCIy^Dksa4ChIN&6esbI2LtX`U@Dk z*uwFaj_v>9z?!_EYXV7SbVXX$m#V4E+ul@ik145f= za?EeJE<0gG#&LMa9bFjJz++6r2Nax8VFcue1j1xdZ*zLYRq_KeWD<(!7*wv7#-)+# z6xI$DG`uKDaEk_g9?m!kBw8sx==sBSM)U zHbf5l%zGY?3OV+foWCOF04VISVn(Or{jniZg9lK*^<O7 zhnpk!gIqiu1;HPqHVf+wpZi|mH%Vc*q5{mji3%XN?K z6Y4TrbqCb$P()=A77tED0^ZEwL9{W@KnuXW06#VZ<^}qpPrNR_EO+#LThF%|r}{Fz z0)S(SomD1+pM|ZbGO8P5zw^m1qxJ+!UK3m-oR#dmX zu}UvPTO@_%r6;eX^ODNC4bSEo$l;>XVz`cx_v{-*gegdHhXE5UGC0Z>t^zu%wjvU*v;PP$Bh}gmqgj6e}G(} zlXKcRr#my-pD-uwekwU>_6jII(Ve^cw)82tbWSpt@5l56Tw$io{>}L*^+odRo}wzn GXof!_!ZmRK diff --git a/src/config/__pycache__/settings.cpython-311.pyc b/src/config/__pycache__/settings.cpython-311.pyc deleted file mode 100644 index addb530c967e658ea9ed4cd82c40a405694dc929..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1599 zcmZux&rjP(6dotzU?31uXn+z*swxs`l~{s3R1sPcAcb^IT!l~xUo3AtglruWzw?IQ7kh@I&31H=o}(GjIIfn`i$qF)@aq zt^S3N@?nJjWn|dIYvr;G$~$BtQ?O7|&;)_$AuH4jYheL}&^9u|zakS8;T+ER0AtWJ z96|)21NktVLYiobdngn6$YwGEjcyno*(1K+u@d%)SW7UOJ&F`kHrkch;22ttN2XxfxH3n9-@X&7gFNp2bbk?cEi z(>b<%V#?0jp?CdqiIY%0BM8#k&&PKb4fH;Ly#$Qh50u>)SJmEA(M9Zw%*)6Hz!Or>}7>D_#K zkH*;YR-sxP?in#!t(@i5sl*LSO7ULN2-o?)d<4pE(Xf&+LmGx+5lsviBVNUZ7n9p` z?88RAjdR34X^Y4HVfFq(@->4Ip*zy)Rfh(;yytk*aMe2r?HJw_v zX?SmmD|>EDu5s^V@A`AewN7bd;IW&41Lt9Qj{!P2y+1wQmHNr2fi&Nrn(d0LyGyXe zeF9L<#N9bYn5E0oum@9v$P)I+4s`{hUa<@ulJv<1$h4bYJlOn*28NT z5wx({DW7cycmS6 zlFeoh9(0hg7r(Xt!U*hf|HNJbelZ7w!Jhh3x}~Ggr{10IZh7p1zWROi`{{ST)BR4r z$6^t{#;f1p&5Y;30+!@}wq!^Ww?j^-EgP}~LSP42@-tvTES<3& zd>AkUFgzOrFqE#655MG;muPg;^zl9p0^4o*j8(l8*q&=T%}Kbp!3kXa%8cg#14FWa z5jtQ+7&3-fu|jv4$C8b(ASg&NW(0)=%^0d6RnV+4D<~pp&WPYSmL)1EW<-T=UQpbK z30e@8Fy;ka5tKCIf>NBs(yy|mr_Vy;dX0tdVm?FF>H2z~mkxYP{8C`IFu`tV8=sUc zyJh=Nx+MpYMi}TMe||(Cg)$3c6oz?DoF=m}G%T zS~!^IyV@w%cPb6EU9GdUdi`*mG5t6QI{rqfWOnSL=Qw8DEH=G1o!2$3yjMo$`&D#M z*C@F3Dv|UCGQ!!u&39mYz|bdH7fN7WsSmW?XFH|HGKzZl?N5A z_gQYu^qYa*#(6(m$mZ5u^MmQ&6YTtt+t~Nb77L^ip5U%t-zztIiQHi!*DmC&Y;JcW zx3`hor*ZDyE;lOEm>ILvDLP(@s^Z0}R=Lz;(s<9nMTQyw^%(CkD`Y^{TS^z^m3Q&! zZWgyZ_sDMbU=h0~J>@t!Dtti|({a3SYxyu$5#nVdL?Z~bJ?q%vb`+tf$EH{iBbB|0 zj%)|h#MDCAZF&|v4OGG31;qRXT=2r)ZGOydv(_m!MRg^Aa<+<{E)9<>CTW&%iCz8` zCeOeqxpbR~JtjAq)ba_!KL_E_~QaO}{DO zKR6l=x*fJ(g#V;O^;G>3aCvQ1y)$lvugDq;<{jsM!sN9qNz%VzAbt7=SbhW3Qs(sg SH-O##UI)?C&l^9eqLTLy!GN~_ diff --git a/src/config/settings.py b/src/config/settings.py deleted file mode 100644 index 4476db6..0000000 --- a/src/config/settings.py +++ /dev/null @@ -1,31 +0,0 @@ -# settings.py - -from pydantic_settings import BaseSettings -from typing import Optional - -class Settings(BaseSettings): - # Storage paths - OBJECT_STORAGE_PATH: str = "/Users/tigeren/Dev/digisky/legal-doc-masker/src_folder" - TARGET_DIRECTORY_PATH: str = "/Users/tigeren/Dev/digisky/legal-doc-masker/target_folder" - - # Ollama API settings - OLLAMA_API_URL: str = "https://api.ollama.com" - OLLAMA_API_KEY: str = "" - OLLAMA_MODEL: str = "llama2" - - # File monitoring settings - MONITOR_INTERVAL: int = 5 - - # Logging settings - LOG_LEVEL: str = "INFO" - LOG_FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" - LOG_DATE_FORMAT: str = "%Y-%m-%d %H:%M:%S" - LOG_FILE: str = "app.log" - - class Config: - env_file = ".env" - env_file_encoding = "utf-8" - extra = "allow" - -# Create settings instance -settings = Settings() diff --git a/src/main.py b/src/main.py deleted file mode 100644 index c292bd0..0000000 --- a/src/main.py +++ /dev/null @@ -1,17 +0,0 @@ -from config.logging_config import setup_logging - -def main(): - # Setup logging first - setup_logging() - - from services.file_monitor import FileMonitor - from config.settings import settings - - # Initialize the file monitor - file_monitor = FileMonitor(settings.OBJECT_STORAGE_PATH, settings.TARGET_DIRECTORY_PATH) - - # Start monitoring the directory for new files - file_monitor.start_monitoring() - -if __name__ == "__main__": - main() \ No newline at end of file diff --git a/src/models/document_processor.py b/src/models/document_processor.py deleted file mode 100644 index a23336e..0000000 --- a/src/models/document_processor.py +++ /dev/null @@ -1,18 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Any - -class DocumentProcessor(ABC): - @abstractmethod - def read_content(self) -> str: - """Read document content""" - pass - - @abstractmethod - def process_content(self, content: str) -> str: - """Process document content""" - pass - - @abstractmethod - def save_content(self, content: str) -> None: - """Save processed content""" - pass \ No newline at end of file diff --git a/src/models/processors/__init__.py b/src/models/processors/__init__.py deleted file mode 100644 index 76b85c6..0000000 --- a/src/models/processors/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from models.processors.txt_processor import TxtDocumentProcessor -from models.processors.docx_processor import DocxDocumentProcessor -from models.processors.pdf_processor import PdfDocumentProcessor - -__all__ = ['TxtDocumentProcessor', 'DocxDocumentProcessor', 'PdfDocumentProcessor'] \ No newline at end of file diff --git a/src/models/processors/docx_processor.py b/src/models/processors/docx_processor.py deleted file mode 100644 index bfbfba2..0000000 --- a/src/models/processors/docx_processor.py +++ /dev/null @@ -1,20 +0,0 @@ -import docx -from models.document_processor import DocumentProcessor - -class DocxDocumentProcessor(DocumentProcessor): - def __init__(self, input_path: str, output_path: str): - self.input_path = input_path - self.output_path = output_path - - def read_content(self) -> str: - doc = docx.Document(self.input_path) - return '\n'.join([paragraph.text for paragraph in doc.paragraphs]) - - def process_content(self, content: str) -> str: - # Implementation for processing docx content - return content - - def save_content(self, content: str) -> None: - doc = docx.Document() - doc.add_paragraph(content) - doc.save(self.output_path) \ No newline at end of file diff --git a/src/models/processors/pdf_processor.py b/src/models/processors/pdf_processor.py deleted file mode 100644 index 4d73d54..0000000 --- a/src/models/processors/pdf_processor.py +++ /dev/null @@ -1,20 +0,0 @@ -import PyPDF2 -from models.document_processor import DocumentProcessor - -class PdfDocumentProcessor(DocumentProcessor): - def __init__(self, input_path: str, output_path: str): - self.input_path = input_path - self.output_path = output_path - - def read_content(self) -> str: - with open(self.input_path, 'rb') as file: - pdf_reader = PyPDF2.PdfReader(file) - return ' '.join([page.extract_text() for page in pdf_reader.pages]) - - def process_content(self, content: str) -> str: - # Implementation for processing PDF content - return content - - def save_content(self, content: str) -> None: - # Implementation for saving as PDF - pass \ No newline at end of file diff --git a/src/models/processors/txt_processor.py b/src/models/processors/txt_processor.py deleted file mode 100644 index 61e920e..0000000 --- a/src/models/processors/txt_processor.py +++ /dev/null @@ -1,18 +0,0 @@ -from models.document_processor import DocumentProcessor - -class TxtDocumentProcessor(DocumentProcessor): - def __init__(self, input_path: str, output_path: str): - self.input_path = input_path - self.output_path = output_path - - def read_content(self) -> str: - with open(self.input_path, 'r', encoding='utf-8') as file: - return file.read() - - def process_content(self, content: str) -> str: - # Implementation for processing text content - return content - - def save_content(self, content: str) -> None: - with open(self.output_path, 'w', encoding='utf-8') as file: - file.write(content) \ No newline at end of file diff --git a/src/services/__pycache__/file_monitor.cpython-312.pyc b/src/services/__pycache__/file_monitor.cpython-312.pyc deleted file mode 100644 index cb48db24c3a91ec2b2af5200b71c04d6310f7911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1462 zcmb_c&2JM&6o30+XE*-9VA_P>!h)dE9>7vXTjW+bwCNWjse0(e5?U?06SK}{9cDIE zw$@b+Ik-})l9LlvRp11OLwn?Z=mq4Wx)TnS;F4Q}50!fAo3%Hw(jNN`Z{ECp-|sj3 zYc4klNPDl;TYty^FU2JxbtDYtQ0RgSuH-`%WFSyS+oMF}$I?(&Rb==KTzMT_wr(fW?(5LRBqnyuww z(U(^+n`L>}fn~K$jSv1zIcRDf_#?5A~VwC;)#kZ%kD0AsPS8n_k1%y2dImI;>|j4OxF7URzuTL7uaoWPPxP~eAFh3O?e6W3`4^?L_v8nY_a`4-`FZxy zY|p6lN*{FQ`_mU6W}i)8>3s3Bbn&kCqVQ%nvzd8%=KUwyFRiDgkA5qB+%KH$<~DO% zH+O2=wH<%kA4Yg`wRdLjdEt}&6ukBJz6K?;bA7)E$BI+{cEL=E=N8z@#IpFLh26QU z_!=#qwXEB#wm8Lyz diff --git a/src/services/file_monitor.py b/src/services/file_monitor.py deleted file mode 100644 index d6b8f8d..0000000 --- a/src/services/file_monitor.py +++ /dev/null @@ -1,24 +0,0 @@ -import logging - -logger = logging.getLogger(__name__) - -class FileMonitor: - def __init__(self, directory, callback): - self.directory = directory - self.callback = callback - - def start_monitoring(self): - import time - import os - - already_seen = set(os.listdir(self.directory)) - while True: - time.sleep(1) # Check every second - current_files = set(os.listdir(self.directory)) - new_files = current_files - already_seen - - for new_file in new_files: - logger.info(f"monitor: new file found: {new_file}") - self.callback(os.path.join(self.directory, new_file)) - - already_seen = current_files \ No newline at end of file diff --git a/src/services/ollama_client.py b/src/services/ollama_client.py deleted file mode 100644 index e8c64ad..0000000 --- a/src/services/ollama_client.py +++ /dev/null @@ -1,15 +0,0 @@ -class OllamaClient: - def __init__(self, model_name): - self.model_name = model_name - - def process_document(self, document_text): - # Here you would implement the logic to interact with the Ollama API - # and process the document text using the specified model. - # This is a placeholder for the actual API call. - processed_text = self._mock_api_call(document_text) - return processed_text - - def _mock_api_call(self, document_text): - # Mock processing: In a real implementation, this would call the Ollama API. - # For now, it just returns the input text with a note indicating it was processed. - return f"Processed with {self.model_name}: {document_text}" \ No newline at end of file diff --git a/src_folder/README.md b/src_folder/README.md deleted file mode 100644 index dc3df6e..0000000 --- a/src_folder/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# README.md - -# Document Processing App - -This project is designed to process legal documents by hiding sensitive information such as names and company names. It utilizes the Ollama API with selected models for text processing. The application monitors a specified directory for new files, processes them automatically, and saves the results to a target path. - -## Project Structure - -``` -doc-processing-app -├── src -│ ├── main.py # Entry point of the application -│ ├── config -│ │ └── settings.py # Configuration settings for paths -│ ├── services -│ │ ├── file_monitor.py # Monitors directory for new files -│ │ ├── document_processor.py # Handles document processing logic -│ │ └── ollama_client.py # Interacts with the Ollama API -│ ├── utils -│ │ └── file_utils.py # Utility functions for file operations -│ └── models -│ └── document.py # Represents the structure of a document -├── tests -│ └── test_document_processor.py # Unit tests for DocumentProcessor -├── requirements.txt # Project dependencies -├── .env.example # Example environment variables -└── README.md # Project documentation -``` - -## Setup Instructions - -1. Clone the repository: - ``` - git clone - cd doc-processing-app - ``` - -2. Install the required dependencies: - ``` - pip install -r requirements.txt - ``` - -3. Configure the application by editing the `src/config/settings.py` file to set the paths for the object storage and target directory. - -4. Create a `.env` file based on the `.env.example` file to set up necessary environment variables. - -## Usage - -To run the application, execute the following command: -``` -python src/main.py -``` - -The application will start monitoring the specified directory for new documents. Once a new document is added, it will be processed automatically. - -## Contributing - -Contributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes. \ No newline at end of file