From 3cd5bd4167b7d4fb1bac9f6fa39691b822acd4c7 Mon Sep 17 00:00:00 2001 From: igor_nadein Date: Thu, 19 Feb 2026 13:51:19 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=9F=D0=BE=D0=BB=D0=BD=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?Next.js=20frontend=20=D1=81=20Docker=20orchestration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создан Next.js 16 frontend приложение с TypeScript и Tailwind - Настроена Docker инфраструктура (docker-compose с 7 сервисами) - Добавлен nginx reverse proxy для маршрутизации frontend/backend - Реализован полный API client с JWT авторизацией - Интегрированы страницы: login, register, feed, employees - Переименована папка corp.front → frontend - Исправлены проблемы с trailing slash в Django APPEND_SLASH - Добавлена документация: DOCKER_ORCHESTRATION.md, INTEGRATION_GUIDE.md Архитектура: - nginx:80 → frontend:3000 (Next.js) + web:8000 (Django API) - PostgreSQL 16 + Redis 7 для backend - Celery worker + beat для фоновых задач - JWT authentication через SimpleJWT --- .env.example | 7 +- DOCKER_ORCHESTRATION.md | 289 + frontend/.dockerignore | 35 + frontend/.github/copilot-instructions.md | 110 + frontend/.gitignore | 41 + frontend/Dockerfile | 48 + frontend/INTEGRATION_GUIDE.md | 410 ++ frontend/README.md | 36 + frontend/eslint.config.mjs | 18 + frontend/next.config.ts | 14 + frontend/package-lock.json | 6158 +++++++++++++++++ frontend/package.json | 27 + frontend/postcss.config.mjs | 7 + frontend/public/file.svg | 1 + frontend/public/globe.svg | 1 + frontend/public/logo.png | Bin 0 -> 5958 bytes frontend/public/logo.webp | Bin 0 -> 106068 bytes frontend/public/logo1.svg | 195 + frontend/public/next.svg | 1 + frontend/public/vercel.svg | 1 + frontend/public/window.svg | 1 + frontend/src/app/departments/page.tsx | 10 + frontend/src/app/documents/page.tsx | 10 + frontend/src/app/employees/page.tsx | 222 + frontend/src/app/favicon.ico | Bin 0 -> 15086 bytes frontend/src/app/finances/page.tsx | 10 + frontend/src/app/globals.css | 26 + frontend/src/app/layout.tsx | 34 + frontend/src/app/login/page.tsx | 111 + frontend/src/app/messages/page.tsx | 10 + frontend/src/app/page.tsx | 259 + frontend/src/app/register/page.tsx | 262 + frontend/src/app/requests/page.tsx | 10 + frontend/src/components/feed/CommentsList.tsx | 182 - frontend/src/hooks/useApi.ts | 218 + frontend/src/types/api.ts | 164 + frontend/tsconfig.json | 34 + nginx.conf | 83 + 38 files changed, 8862 insertions(+), 183 deletions(-) create mode 100644 DOCKER_ORCHESTRATION.md create mode 100644 frontend/.dockerignore create mode 100644 frontend/.github/copilot-instructions.md create mode 100644 frontend/.gitignore create mode 100644 frontend/Dockerfile create mode 100644 frontend/INTEGRATION_GUIDE.md create mode 100644 frontend/README.md create mode 100644 frontend/eslint.config.mjs create mode 100644 frontend/next.config.ts create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.mjs create mode 100644 frontend/public/file.svg create mode 100644 frontend/public/globe.svg create mode 100644 frontend/public/logo.png create mode 100644 frontend/public/logo.webp create mode 100644 frontend/public/logo1.svg create mode 100644 frontend/public/next.svg create mode 100644 frontend/public/vercel.svg create mode 100644 frontend/public/window.svg create mode 100644 frontend/src/app/departments/page.tsx create mode 100644 frontend/src/app/documents/page.tsx create mode 100644 frontend/src/app/employees/page.tsx create mode 100644 frontend/src/app/favicon.ico create mode 100644 frontend/src/app/finances/page.tsx create mode 100644 frontend/src/app/globals.css create mode 100644 frontend/src/app/layout.tsx create mode 100644 frontend/src/app/login/page.tsx create mode 100644 frontend/src/app/messages/page.tsx create mode 100644 frontend/src/app/page.tsx create mode 100644 frontend/src/app/register/page.tsx create mode 100644 frontend/src/app/requests/page.tsx delete mode 100644 frontend/src/components/feed/CommentsList.tsx create mode 100644 frontend/src/hooks/useApi.ts create mode 100644 frontend/src/types/api.ts create mode 100644 frontend/tsconfig.json create mode 100644 nginx.conf diff --git a/.env.example b/.env.example index 71b5802b..7c23ead0 100644 --- a/.env.example +++ b/.env.example @@ -1,7 +1,7 @@ # Django Settings DEBUG=False SECRET_KEY=change-me-django-secret-key -ALLOWED_HOSTS=localhost,127.0.0.1,web +ALLOWED_HOSTS=localhost,127.0.0.1,web,nginx # Database Settings USE_SQLITE=False @@ -21,6 +21,11 @@ CELERY_RESULT_BACKEND=redis://redis:6379/1 # Ports (for development) WEB_PORT=8000 +FRONTEND_PORT=3000 +NGINX_PORT=80 + +# Frontend Settings +NODE_ENV=production # LDAP Settings (if used) # LDAP_SERVER_URI=ldap://your-ldap-server diff --git a/DOCKER_ORCHESTRATION.md b/DOCKER_ORCHESTRATION.md new file mode 100644 index 00000000..4f7a5693 --- /dev/null +++ b/DOCKER_ORCHESTRATION.md @@ -0,0 +1,289 @@ +# EUSRR Docker Orchestration Guide + +## Обзор архитектуры + +Проект EUSRR теперь имеет полную оркестрацию с использованием Docker Compose: + +``` +┌─────────────┐ +│ Nginx │ :80 - Reverse Proxy +│ (Gateway) │ +└──────┬──────┘ + │ + ├──────────┐ + │ │ +┌──────▼──────┐ ┌─▼────────────┐ +│ Frontend │ │ Backend │ +│ (Next.js) │ │ (Django) │ +│ :3000 │ │ :8000 │ +└──────┬──────┘ └──┬─────┬─────┘ + │ │ │ + └───────┬───┘ │ + │ │ + ┌──────▼───┐ ┌──▼────┐ + │ Redis │ │ DB │ + │ :6379 │ │ :5432 │ + └──────────┘ └────────┘ +``` + +## Сервисы + +### 1. **db** (PostgreSQL 16) +- Порт: `5432` +- База данных Django +- Persistent volume: `postgres_data` + +### 2. **redis** (Redis 7) +- Порт: `6379` +- Кэш и Channels backend +- Persistent volume: `redis_data` + +### 3. **web** (Django Backend) +- Порт: `8000` +- ASGI сервер (Daphne) +- REST API + WebSocket +- Подключается к `db` и `redis` + +### 4. **celery** (Celery Worker) +- Фоновые задачи +- Подключается к `redis` и `db` + +### 5. **celery-beat** (Celery Scheduler) +- Планировщик задач +- Django Celery Beat + +### 6. **frontend** (Next.js) +- Порт: `3000` +- Корпоративный фронтенд +- Использует `web` backend через proxy + +### 7. **nginx** (Reverse Proxy) +- Порт: `80` (основной вход) +- Маршрутизация: + - `/` → Frontend (Next.js) + - `/api/` → Backend API + - `/admin/` → Django Admin + - `/ws/` → WebSocket + - `/static/`, `/media/` → Статика + +## Быстрый старт + +### Запуск всех сервисов + +```bash +# Создайте .env файл из примера +cp .env.example .env + +# Запустите все сервисы +docker-compose up -d + +# Просмотр логов +docker-compose logs -f +``` + +### Доступ к приложению + +- **Основной вход (через Nginx)**: http://localhost +- **Frontend напрямую**: http://localhost:3000 +- **Backend API**: http://localhost:8000/api/ +- **Django Admin**: http://localhost/admin/ + +### Остановка + +```bash +# Остановка всех сервисов +docker-compose down + +# Остановка с удалением volumes +docker-compose down -v +``` + +## Конфигурация + +### Environment Variables + +Основные переменные в `.env`: + +```env +# Database +POSTGRES_DB=eusrr +POSTGRES_USER=eusrr_user +POSTGRES_PASSWORD=change-me-postgres-password + +# Django +DEBUG=True +SECRET_KEY=dev-secret-key +ALLOWED_HOSTS=localhost,127.0.0.1,web,nginx + +# Ports +WEB_PORT=8000 +FRONTEND_PORT=3000 +NGINX_PORT=80 +``` + +### Frontend Environment + +Файл `corp.front/.env.local`: + +```env +NEXT_PUBLIC_API_URL=http://web:8000 +NEXT_PUBLIC_WS_URL=ws://web:8000 +``` + +## Разработка + +### Режим разработки + +```bash +# Backend отдельно (с hot-reload) +cd backend +../.venv/Scripts/python manage.py runserver + +# Frontend отдельно (с hot-reload) +cd corp.front +npm run dev +``` + +### Режим Production + +```bash +# Полная оркестрация через Docker +docker-compose up -d +``` + +## Миграции и первичная настройка + +```bash +# Выполнить миграции +docker-compose exec web python manage.py migrate + +# Создать суперпользователя +docker-compose exec web python manage.py createsuperuser + +# Собрать статику +docker-compose exec web python manage.py collectstatic --noinput +``` + +## Мониторинг + +```bash +# Статус сервисов +docker-compose ps + +# Логи конкретного сервиса +docker-compose logs -f web +docker-compose logs -f frontend +docker-compose logs -f nginx + +# Использование ресурсов +docker stats +``` + +## Отладка + +### Проверка сети + +```bash +# Проверить связь frontend → backend +docker-compose exec frontend ping web + +# Проверить связь backend → db +docker-compose exec web pg_isready -h db -U eusrr_user +``` + +### Доступ к контейнерам + +```bash +# Backend shell +docker-compose exec web bash +docker-compose exec web python manage.py shell + +# Frontend shell +docker-compose exec frontend sh + +# Database +docker-compose exec db psql -U eusrr_user -d eusrr +``` + +## Volumes + +Persistent данные сохраняются в volumes: + +- `postgres_data` - база данных +- `redis_data` - Redis данные +- `static_volume` - статические файлы Django +- `media_volume` - загруженные медиафайлы + +## Сеть + +Все сервисы находятся в сети `eusrr_network` и могут обращаться друг к другу по именам сервисов: + +- `web` - Django backend +- `frontend` - Next.js frontend +- `db` - PostgreSQL +- `redis` - Redis +- `nginx` - Nginx + +## Nginx маршрутизация + +- `location /` - Next.js фронтенд +- `location /api/` - Django REST API +- `location /admin/` - Django Admin +- `location /ws/` - WebSocket (Django Channels) +- `location /static/` - Статические файлы +- `location /media/` - Медиа файлы +- `location /health` - Health check endpoint + +## Production Deployment + +Для production окружения: + +1. Обновите `.env`: + - Установите `DEBUG=False` + - Смените `SECRET_KEY` + - Обновите `ALLOWED_HOSTS` + - Используйте надежные пароли БД + +2. Настройте HTTPS (добавьте SSL в nginx) + +3. Используйте внешние managed сервисы для БД и Redis (опционально) + +4. Настройте backup для volumes + +## Troubleshooting + +### Frontend не может подключиться к backend + +Проверьте переменные окружения в `corp.front/.env.local` и убедитесь, что используется правильный URL для Docker сети. + +### Backend не запускается + +```bash +# Проверьте логи +docker-compose logs web + +# Проверьте подключение к БД +docker-compose exec web python manage.py check --database default +``` + +### Nginx 502 Bad Gateway + +Убедитесь, что `web` и `frontend` сервисы запущены: + +```bash +docker-compose ps +``` + +## Файлы конфигурации + +- `docker-compose.yml` - Оркестрация сервисов +- `nginx.conf` - Конфигурация Nginx +- `backend/Dockerfile` - Django image +- `corp.front/Dockerfile` - Next.js image +- `.env.example` - Шаблон переменных окружения +- `corp.front/.env.example` - Шаблон для frontend + +--- + +**Дата создания**: 19 февраля 2025 +**Версия**: 1.0 diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 00000000..13e59b48 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,35 @@ +# Dependencies +node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Next.js +.next/ +out/ +build +dist + +# Environment +.env*.local +.env + +# Testing +coverage + +# Misc +.DS_Store +*.pem + +# Debug +*.log + +# IDE +.vscode +.idea +*.swp +*.swo +*~ + +# Vercel +.vercel diff --git a/frontend/.github/copilot-instructions.md b/frontend/.github/copilot-instructions.md new file mode 100644 index 00000000..b6b9e950 --- /dev/null +++ b/frontend/.github/copilot-instructions.md @@ -0,0 +1,110 @@ + + - [x] Verify that the copilot-instructions.md file in the .github directory is created. + +- [x] Clarify Project Requirements + + +- [x] Scaffold the Project + + +- [ ] Customize the Project + + +- [ ] Install Required Extensions + + + - [x] Compile the Project + + + - [x] Create and Run Task + + + - [x] Launch the Project + + +- [ ] Ensure Documentation is Complete + + + +- Work through each checklist item systematically. +- Keep communication concise and focused. +- Follow development best practices. diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 00000000..5ef6a520 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 00000000..75ed2dd4 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,48 @@ +# Build stage +FROM node:20-alpine AS builder + +WORKDIR /app + +# Copy package files +COPY package.json package-lock.json* ./ +RUN npm ci + +# Copy source files +COPY . . + +# Set environment variables for build +ENV NEXT_TELEMETRY_DISABLED=1 +ENV NODE_ENV=production + +# Build the application +RUN npm run build + +# Production stage +FROM node:20-alpine AS runner + +WORKDIR /app + +ENV NODE_ENV=production +ENV NEXT_TELEMETRY_DISABLED=1 + +RUN addgroup --system --gid 1001 nodejs +RUN adduser --system --uid 1001 nextjs + +# Copy necessary files from builder +COPY --from=builder /app/public ./public +COPY --from=builder /app/.next ./.next +COPY --from=builder /app/node_modules ./node_modules +COPY --from=builder /app/package.json ./package.json + +# Set correct permissions +RUN chown -R nextjs:nodejs /app + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 +ENV HOSTNAME="0.0.0.0" + +# Start Next.js server +CMD ["npm", "start"] diff --git a/frontend/INTEGRATION_GUIDE.md b/frontend/INTEGRATION_GUIDE.md new file mode 100644 index 00000000..c6f45af9 --- /dev/null +++ b/frontend/INTEGRATION_GUIDE.md @@ -0,0 +1,410 @@ +# Frontend Integration Guide + +## Обзор + +Фронтенд corp.front полностью интегрирован с Django Backend через REST API. Используется Next.js 16 с TypeScript и Tailwind CSS. + +## Структура проекта + +``` +corp.front/ +├── src/ +│ ├── app/ # Next.js страницы +│ │ ├── page.tsx # Главная (Лента) ✅ Интегрирован +│ │ ├── employees/ # Сотрудники ✅ Интегрирован +│ │ ├── departments/ # Отделы +│ │ ├── documents/ # Документы +│ │ ├── messages/ # Сообщения +│ │ ├── requests/ # Заявки +│ │ ├── finances/ # Финансы +│ │ └── login/ # Вход +│ ├── lib/ +│ │ └── api.ts # API клиент ✅ +│ ├── types/ +│ │ └── api.ts # TypeScript типы ✅ +│ └── hooks/ +│ └── useApi.ts # React хуки для API ✅ +``` + +## API клиент + +### Базовая конфигурация + +API клиент автоматически: +- Добавляет JWT токен к запросам +- Обрабатывает ошибки авторизации +- Сохраняет токены в localStorage +- Перенаправляет на /login при 401 + +### Использование + +```typescript +import apiClient from '@/lib/api'; + +// Авторизация +const { access, refresh, user } = await apiClient.login({ + username: 'user@example.com', + password: 'password' +}); + +// Получение данных +const employees = await apiClient.getEmployees(); +const posts = await apiClient.getPosts(); +``` + +## React хуки + +Используйте готовые хуки из `@/hooks/useApi`: + +```tsx +import { useCurrentUser, useEmployees, usePosts } from '@/hooks/useApi'; + +function MyComponent() { + const { user, loading, error } = useCurrentUser(); + const { employees } = useEmployees({ search: 'John' }); + const { posts } = usePosts({ page: 1 }); + + if (loading) return
Загрузка...
; + if (error) return
Ошибка: {error.message}
; + + return
{/* UI */}
; +} +``` + +### Доступные хуки + +- `useCurrentUser()` - текущий пользователь +- `useEmployees(params?)` - список сотрудников +- `useDepartments()` - список отделов +- `usePosts(params?)` - посты ленты +- `useDocuments(params?)` - документы +- `useRequests(params?)` - заявки +- `useChats()` - чаты +- `useNotifications()` - уведомления + +## TypeScript типы + +Все типы данных определены в `@/types/api.ts`: + +```typescript +import type { User, Post, Department, Document } from '@/types/api'; +``` + +## Интегрированные страницы + +### ✅ Главная страница (Лента) + +**Файл**: `src/app/page.tsx` + +**Функции**: +- Загрузка постов из API +- Отображение автора, времени, контента +- Лайки и комментарии +- Теги постов + +**Используемые хуки**: +- `usePosts()` - получение постов +- `useCurrentUser()` - текущий пользователь + +### ✅ Сотрудники + +**Файл**: `src/app/employees/page.tsx` + +**Функции**: +- Список всех сотрудников +- Поиск по имени +- Статус (онлайн/оффлайн) +- Должность и отдел + +**Используемые хуки**: +- `useEmployees({ search })` - поиск сотрудников +- `useCurrentUser()` - текущий пользователь + +## Переменные окружения + +### Для локальной разработки + +`.env.local`: +```env +NEXT_PUBLIC_API_URL=http://localhost:8000 +NEXT_PUBLIC_WS_URL=ws://localhost:8000 +``` + +### Для Docker + +`.env.local` (автоматически используется в docker-compose): +```env +NEXT_PUBLIC_API_URL=http://web:8000 +NEXT_PUBLIC_WS_URL=ws://web:8000 +``` + +## Запуск + +### Локальная разработка + +```bash +cd corp.front +npm install +npm run dev +``` + +Доступно на: http://localhost:3000 + +### Docker + +```bash +# Из корня проекта +docker-compose up -d frontend +``` + +Доступно через nginx: http://localhost + +## Интеграция новых страниц + +### Шаг 1: Создать страницу + +```tsx +// src/app/mypage/page.tsx +"use client"; + +import { useMyData } from '@/hooks/useApi'; + +export default function MyPage() { + const { data, loading, error } = useMyData(); + + if (loading) return
Загрузка...
; + if (error) return
Ошибка: {error.message}
; + + return ( +
+ {data.map(item => ( +
{item.name}
+ ))} +
+ ); +} +``` + +### Шаг 2: Добавить метод в API клиент + +```typescript +// src/lib/api.ts +class ApiClient { + // ... existing methods + + async getMyData() { + return this.request('/mydata/'); + } +} +``` + +### Шаг 3: Создать хук (опционально) + +```typescript +// src/hooks/useApi.ts +export function useMyData() { + const [data, setData] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + async function fetchData() { + try { + const result = await apiClient.getMyData(); + setData(result); + } catch (err) { + setError(err); + } finally { + setLoading(false); + } + } + fetchData(); + }, []); + + return { data, loading, error }; +} +``` + +## API Endpoints + +Полный список доступных эндпоинтов: + +### Auth +- `POST /api/auth/token/` - Login +- `POST /api/auth/token/refresh/` - Refresh token +- `POST /api/v1/auth/register/` - Регистрация + +### Employees +- `GET /api/v1/employees/` - Список сотрудников +- `GET /api/v1/employees/{id}/` - Детали сотрудника +- `GET /api/v1/employees/me/` - Текущий пользователь + +### Departments +- `GET /api/v1/departments/` - Список отделов +- `GET /api/v1/departments/{id}/` - Детали отдела + +### Feed +- `GET /api/v1/posts/` - Посты ленты +- `POST /api/v1/posts/` - Создать пост +- `POST /api/v1/posts/{id}/like/` - Лайк поста +- `GET /api/v1/comments/` - Комментарии +- `POST /api/v1/comments/` - Создать комментарий + +### Documents +- `GET /api/v1/documents/` - Документы +- `GET /api/v1/documents/{id}/` - Детали документа + +### Requests +- `GET /api/v1/requests/` - Заявки +- `POST /api/v1/requests/` - Создать заявку +- `GET /api/v1/requests/{id}/` - Детали заявки + +### Communications +- `GET /api/v1/communications/chats/` - Чаты +- `GET /api/v1/communications/messages/` - Сообщения +- `POST /api/v1/communications/messages/` - Отправить сообщение + +### Calendar +- `GET /api/v1/calendar/events/` - События календаря +- `GET /api/v1/calendar/calendars/` - Календари + +### Notifications +- `GET /api/v1/notifications/` - Уведомления +- `POST /api/v1/notifications/{id}/mark_read/` - Отметить прочитанным +- `POST /api/v1/notifications/mark_all_read/` - Отметить все прочитанными + +## Аутентификация + +### Вход + +```typescript +import apiClient from '@/lib/api'; + +async function handleLogin(username: string, password: string) { + try { + const { access, refresh, user } = await apiClient.login({ + username, + password + }); + + // Токен автоматически сохранён + // Перенаправить пользователя + router.push('/'); + } catch (error) { + console.error('Login failed:', error); + } +} +``` + +### Выход + +```typescript +import apiClient from '@/lib/api'; + +function handleLogout() { + apiClient.clearToken(); + router.push('/login'); +} +``` + +### Защищённые страницы + +```tsx +"use client"; + +import { useEffect } from 'react'; +import { useRouter } from 'next/navigation'; +import apiClient from '@/lib/api'; + +export default function ProtectedPage() { + const router = useRouter(); + + useEffect(() => { + const token = apiClient.getToken(); + if (!token) { + router.push('/login'); + } + }, []); + + return
Protected content
; +} +``` + +## Обработка ошибок + +API клиент автоматически обрабатывает: + +- **401 Unauthorized**: Очищает токены и перенаправляет на `/login` +- **Network errors**: Выбрасывает исключение с сообщением + +Пример обработки в компонентах: + +```tsx +const { data, loading, error } = useMyData(); + +if (loading) return ; + +if (error) { + return ( +
+

Ошибка загрузки данных

+

{error.message}

+ +
+ ); +} +``` + +## WebSocket (для будущей реализации) + +Для real-time обновлений можно добавить WebSocket соединение: + +```typescript +const WS_URL = process.env.NEXT_PUBLIC_WS_URL || 'ws://localhost:8000'; + +const socket = new WebSocket(`${WS_URL}/ws/notifications/`); + +socket.onmessage = (event) => { + const data = JSON.parse(event.data); + // Обработать уведомление +}; +``` + +## Рекомендации + +1. **Всегда используйте хуки** для получения данных из API +2. **Обрабатывайте loading и error** состояния в UI +3. **Используйte TypeScript типы** для type-safety +4. **Не сохраняйте чувствительные данные** в localStorage кроме токенов +5. **Валидируйте данные** перед отправкой на сервер + +## Troubleshooting + +###CORS ошибки + +Убедитесь, что backend настроен с правильными CORS заголовками: + +```python +# backend/eusrr_backend/settings.py +CORS_ALLOWED_ORIGINS = [ + "http://localhost:3000", + "http://localhost", +] +``` + +### 401 Unauthorized + +- Проверьте, что токен действителен +- Убедитесь, что backend запущен +- Проверьте переменные окружения + +### Ошибка сети + +- Проверьте, что backend доступен +- Проверьте URL в `NEXT_PUBLIC_API_URL` +- Проверьте docker network, если используете docker-compose + +--- + +**Дата создания**: 19 февраля 2026 +**Версия**: 1.0 diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 00000000..e215bc4c --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs new file mode 100644 index 00000000..05e726d1 --- /dev/null +++ b/frontend/eslint.config.mjs @@ -0,0 +1,18 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import nextVitals from "eslint-config-next/core-web-vitals"; +import nextTs from "eslint-config-next/typescript"; + +const eslintConfig = defineConfig([ + ...nextVitals, + ...nextTs, + // Override default ignores of eslint-config-next. + globalIgnores([ + // Default ignores of eslint-config-next: + ".next/**", + "out/**", + "build/**", + "next-env.d.ts", + ]), +]); + +export default eslintConfig; diff --git a/frontend/next.config.ts b/frontend/next.config.ts new file mode 100644 index 00000000..e67cd57f --- /dev/null +++ b/frontend/next.config.ts @@ -0,0 +1,14 @@ +import type { NextConfig } from "next"; + +const nextConfig: NextConfig = { + // Rewrites не нужны - в production используйте nginx (http://localhost) + // Для dev можно запустить backend локально на localhost:8000 + + // Environment variables + env: { + NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL, + NEXT_PUBLIC_WS_URL: process.env.NEXT_PUBLIC_WS_URL, + }, +}; + +export default nextConfig; diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..ce159998 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,6158 @@ +{ + "name": "corp.front", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "corp.front", + "version": "0.1.0", + "dependencies": { + "lucide-react": "^0.574.0", + "next": "16.1.6", + "react": "19.2.3", + "react-dom": "19.2.3" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.1.6", + "tailwindcss": "^4", + "typescript": "^5" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "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/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@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-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", + "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", + "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "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/eslint-utils/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==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.1", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.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==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/colour": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz", + "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@next/env": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.6.tgz", + "integrity": "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-16.1.6.tgz", + "integrity": "sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==", + "dev": true, + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz", + "integrity": "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz", + "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz", + "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz", + "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz", + "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz", + "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz", + "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz", + "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.18.tgz", + "integrity": "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==", + "dev": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.6.1", + "lightningcss": "1.30.2", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.18.tgz", + "integrity": "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-arm64": "4.1.18", + "@tailwindcss/oxide-darwin-x64": "4.1.18", + "@tailwindcss/oxide-freebsd-x64": "4.1.18", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", + "@tailwindcss/oxide-linux-x64-musl": "4.1.18", + "@tailwindcss/oxide-wasm32-wasi": "4.1.18", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz", + "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.18.tgz", + "integrity": "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz", + "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz", + "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz", + "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz", + "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz", + "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz", + "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz", + "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz", + "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.0", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz", + "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz", + "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.18.tgz", + "integrity": "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.18", + "@tailwindcss/oxide": "4.1.18", + "postcss": "^8.4.41", + "tailwindcss": "4.1.18" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "dev": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "dev": true, + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz", + "integrity": "sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/type-utils": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.0.tgz", + "integrity": "sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.0.tgz", + "integrity": "sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.56.0", + "@typescript-eslint/types": "^8.56.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz", + "integrity": "sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz", + "integrity": "sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz", + "integrity": "sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.0.tgz", + "integrity": "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz", + "integrity": "sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.56.0", + "@typescript-eslint/tsconfig-utils": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/visitor-keys": "8.56.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.0.tgz", + "integrity": "sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.56.0", + "@typescript-eslint/types": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz", + "integrity": "sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.56.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", + "dev": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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.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==", + "dev": true, + "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==", + "dev": true, + "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/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==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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.11.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz", + "integrity": "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001770", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001770.tgz", + "integrity": "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==", + "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/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "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-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "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/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "dev": true, + "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-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "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", + "stop-iteration-iterator": "^1.1.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-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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz", + "integrity": "sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.1", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.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", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-16.1.6.tgz", + "integrity": "sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "16.1.6", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^7.0.0", + "globals": "16.4.0", + "typescript-eslint": "^8.46.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-next/node_modules/globals": { + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.4.0.tgz", + "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", + "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "dev": true, + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^2.0.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.13", + "unrs-resolver": "^1.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "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==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "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==", + "dev": true, + "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-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==", + "dev": true, + "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": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", + "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/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "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==", + "dev": 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==", + "dev": true, + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "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-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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/get-tsconfig": { + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", + "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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-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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-bun-module/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "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-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "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-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==", + "dev": true, + "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-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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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==", + "dev": true, + "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/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "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==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.574.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.574.0.tgz", + "integrity": "sha512-dJ8xb5juiZVIbdSn3HTyHsjjIwUwZ4FNwV0RtYDScOyySOeie1oXZTymST6YPJ4Qwt3Po8g4quhYl4OxtACiuQ==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/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/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next": { + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz", + "integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==", + "dependencies": { + "@next/env": "16.1.6", + "@swc/helpers": "0.5.15", + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=20.9.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "16.1.6", + "@next/swc-darwin-x64": "16.1.6", + "@next/swc-linux-arm64-gnu": "16.1.6", + "@next/swc-linux-arm64-musl": "16.1.6", + "@next/swc-linux-x64-gnu": "16.1.6", + "@next/swc-linux-x64-musl": "16.1.6", + "@next/swc-win32-arm64-msvc": "16.1.6", + "@next/swc-win32-x64-msvc": "16.1.6", + "sharp": "^0.34.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.51.1", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "dependencies": { + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "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==", + "dev": true, + "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/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.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==", + "dev": true, + "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": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/react": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.3" + } + }, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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/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==", + "dev": true, + "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/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.1", + "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-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/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==", + "dev": true, + "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-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==", + "dev": true, + "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==", + "dev": true, + "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/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, + "node_modules/sharp/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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/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/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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/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==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.18.tgz", + "integrity": "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "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/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.0.tgz", + "integrity": "sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.56.0", + "@typescript-eslint/parser": "8.56.0", + "@typescript-eslint/typescript-estree": "8.56.0", + "@typescript-eslint/utils": "8.56.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.0.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==", + "dev": true, + "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/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "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==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 00000000..13ed780f --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,27 @@ +{ + "name": "corp.front", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "eslint" + }, + "dependencies": { + "lucide-react": "^0.574.0", + "next": "16.1.6", + "react": "19.2.3", + "react-dom": "19.2.3" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4", + "@types/node": "^20", + "@types/react": "^19", + "@types/react-dom": "^19", + "eslint": "^9", + "eslint-config-next": "16.1.6", + "tailwindcss": "^4", + "typescript": "^5" + } +} diff --git a/frontend/postcss.config.mjs b/frontend/postcss.config.mjs new file mode 100644 index 00000000..61e36849 --- /dev/null +++ b/frontend/postcss.config.mjs @@ -0,0 +1,7 @@ +const config = { + plugins: { + "@tailwindcss/postcss": {}, + }, +}; + +export default config; diff --git a/frontend/public/file.svg b/frontend/public/file.svg new file mode 100644 index 00000000..004145cd --- /dev/null +++ b/frontend/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/globe.svg b/frontend/public/globe.svg new file mode 100644 index 00000000..567f17b0 --- /dev/null +++ b/frontend/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..52d84ec008f2e365716e57fd991b5d5058667862 GIT binary patch literal 5958 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 literal 0 HcmV?d00001 diff --git a/frontend/public/logo.webp b/frontend/public/logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..09dd9eb9c9124c43530eae77543fa7752da01038 GIT binary patch literal 106068 zcmb^XWmFtb&FZ@)z#J0RW;o+=Zr2)Sy>|w1Q;pFYa42d8DjzfAolNi2K`rH3JThM z;D0Ot=95#DR|4Y$fSbFox2}pj#Ms0Xg7yVK1(5#h2LNkZA5S@LZH@o1yNA2|f9?O1 z?v?@2f0706|7`s~`~F`!Oj}QH-+x+9|1JSLdmmc>0P+39E&;xt|Ky;Yf0)?D<$rMf zf7n}JSK*(0_#ei7^}l%WKWy{A_~1Y6{cjQfbZ-9BfAv2YjQ$_C`Cm-^ANI8m{BK@B z!NW7i+v$~~FN9xQTpS{2=V4~3Gt?6ICmPdpXs+7lJ=?mW%cIERp*iO z)op_cZq=KWBW3L!?qX$_n3aTHKBwMr*Lr(=BX}__rs0sk6!JD)j9z@y7@O{F+tekB z36EG7l*VY^K~?_CmFl6f|O#! z2_q1}hUl&{3$*db{7tc`-qwDp^csoox8?^_{%p}#|FO~u+&FD}?!1jI2 zVGcpAYkK0kI`TmJ=&I(&z@VAstP)L^KQvD$iG?JlnuL%FDLoX$U>CO;ar&0On9t}Y zH4dmW`$6~13Qz6f>}p2cEw@W*eY43zs+61$)n7I*(|VlriEGKaMMw} z5}}oN*7a+pp>-JlxOo6mBf|PywR#^jjB6q$1NaP^-x8c=@<#Xu*sbHk)ChO-1lI{P zR95_?l|L{^bcJxSQ2tNNGJcT4!Q_;DkP(l$t1V2{n_+@+P78uLutavDK{7MB?YAq_ zr^Hn`273eq&6uJl%uL~S9YYM2=&Ayf9iYo_8w6q#23AH;?S1&2%><}M5fcE(BRK>h zz^NY$3TVxX(c z7tMPWQF4Hil96kh202oEx3t$xT_m{-3wlT7DJdhqF=IgeNWu&db>Rno7FFp}OzhK@ z!r;uzbMxr6B1u31&lLfqaZgO$EdR6gnW?;$U@qi>WQ?!tBMM@CnJJsd{*Y*F zky$`T85yEUSbeT|ox;zQ^Q!3JSW_Tdj}VAmJk(KRC`386=L)9@*%kT+hODO~uH^0!J3N znwGoh7qwx>J%ZOC(A(*(6x8N%{w2dvS?g^AX~UGbB&>`HG!Ij354k`AojRJSav%

F2*DEz_zwB=%U8Y16zj!cov39HDqgx z=SxV-x8E=47e^}^?)BWCVWc{g4aEk^VRd+2^t_z6?It~(hdFbz=?)f>0_Y#F2Gs;O z8w28aNs0S!+f=b&IgY~C3Fx&1SC~Yeh{Xp(7D!wUt0@x=42leo{ihF%N2IFG`hbcp@p!%0XmTe+t|aZ0?L z7!;6C6{H9;gxDa~Sti7FRMP8GC{5o^z4v5gzq$(}CV03-4|w%W=2e(+m~lFPwZgU( zy0C@x;8xG|eJX~1d)so>{dVUwPE}`S&7#&0Hg`xD8AK0$m70Jdn&(NL0(J&=tG=w)T&N z(VsUjlI>Xf4fJH)RL`9ik(U8jO7q-97w!b{tdUc|AK!PWssj80ohVkt=>N_llM~f- z3nOMN&J zR_3}_n2%y@7O)v??+tjURjn(Fdd~YlVcpV5u2X;%GV5nd5BT40OQ*{4KuclHWLam@c1x4|L z09EUoA5;+WT)|^$2T5jeQ$)1Mgh6&m-;-2<`DXJZuo+^J!Y8GBYzjwXl8r5{*AT!A zNJD}%<(e={%h7&B(|{>;m9sk`4!~RlOKNJS?F$zZr+=yRJ2un^`CeV*GFgvCy^qDo zPZbcP8=%UBFNR!nvlG6S2CITI^zckR;8~Ht&3&WY@+(6&?HsZ$R8u=yah=9Xnm?%4 z$YN+CR!q)6Pf^*eU=~<`;G95gr;@!i?wcN4=1d@2q3idViTLlx<S6kU{=%Cv+60cTX5Z%b_}nf^O@ z>B|C>%BKrI5{whQW|a7Y!enWX$S(r{Ki8QI^|7#Dwf}`P9n%ew9m+;|Og+>7r5Ssb z^@knCaH17jk$FNdb9DZfUnHjFRp8l5*Qa0lf=&FoUtRC?6sBL*6@A6N+wU5fxSJ!d}e5rfLhRY5-6LJD*D=LM28=6co z#DVFD;`RN%Xd}ihb6XeERt|V=ADC2he|gw{Win(-4Sa#jieSP}<016Je4X|DHsM@G z|KCg5^Z57p?-_UC?FVVpen5>MQ118gEYu~>8UjIM24gv)zVR&DzOl!m>|K#%*oP(s z{f*t8?5qlEKsQ!nzY?>lH8fG3$U$#Z|ZYG5g_E{Q7A~8LYM0r z{r7GO0t8JvFkv_6#BblseDf3Isr#+JIGo5cy{iKrGE8ypDn@g-%IAOnTuF)nqJkm5 zz8J~(`CYFVq=nVGDIo}%BA?>JUXUt!MGKwYV{kvxLskrpW zH=xzQBT&)<&BtNq*8Lg|Iy(X(wRUaSqt!2LY@^=67e*YY43~U%7`H|IgZeenBYx$0dqi;Rhe@R?BvzCTJPrqvrnbS`RUJ87cr;9oci?VmX9Bd_q9~4)jwx?$cv>r4da{;5DS$WW|_c|<6RU=mlmg9)`iJ-^K`6$)>4`}$t? z;OrxH|3AMYP}4J4-u?OXoW^&(ecNmUzBzd2-AMcBM)~agSk^vGZkxz|UwMRhqkxUi zP2$)O4UyLs+Du&@yW@9KynK?E!lrvZsA3~A0$Hj~0<_xv^VNGQ#Wu>!;hL;r$K-_= zI&eS=4$ObEeKh7cX333imHVntnLp+ zZ*hc<-E69tmO{#db|6jKM%LEw$ z9Roq1*h~1ZO`Y@k_WdP_qxh?=A5$m}l1=vJ{DP!L%t{W5fnph%Rk3I=g#N!6sB@c9 zy-w^95nS%GoDvFpKNm82S?jj3uG;D*z4MGUjc@%qR`qZyd~|B6c`f)NHnyZcE40m~Nkx&U%o_>ybDZOO%}naA^jny>aMOYqIza znfB*i-f?PGY4C=<(T|Q&OIkmj=a}XZ^mh(6EYesISXSFhn~88L{cC1=_(wYS&7sZ- zIqA&2uyP2UU%5NE^Yr%&(-TVXeUr={@+yG@)s z#I*bJ%{d#+sX(%MZWSC=VyuAD8MMhRC)^f!S>Dzs$F`EhsAeHG8o|-5Vqwdvo+Ruw z#Dc%soPTDc@AP+p=<}b;k(s$p71ieMei=HzC0+BIZuzk)h-GG0#eaUj+W!0Y&&KDi zKYwS*MjT-dsyTrI*=yKeQvXG6L(u(2$mm;W$nY=Q=y`#QXmKw)vot%bK1A=YuzTdo zAJ1=Fn9RQTzF5(?znQWRHpX6)9r&Cw5*p~x`KmKy-PlDTfbKV)5&shk#xALy9Jhei zd%_X=>Jg#48CwcwRVdk;WzBsLYG&xh?{9N9(O#y+Xla5r9ro;r+@2JFi`d?bHjHrC znsBRHo7r^F&P3`)XVgyEVKD^mda#3-JsD=t3}*bb@V~gk`E6p^QlF&{x3uzuKA%b< ztEU3B8l$Au35}8T)MoOhcaD+DE#%%^024RyPH|r?-vYlpAZ; zXQoI6BVG`&y*2ZymkPpr-Vp?eCe!EJo!}Tn%eY3rsF#InnoN`mqzB-R4GByQjRSAg z(02{b3QR8vJtIF|h9`PT-B@S1lY8o1vs=@uEP+0++lqnd?!gj6C)z_oQ;crP`P5Cu z4znBjRF}kJgXL~teDjqTzCRy7B0qiYw?1i{U<*(kf58jlg&l#-^_`?68AIo>f;BuV z3h{R0K8 zgA{OtZ>%Np{Ug@)Sp)sChh_~}A&RD0kX?e%EJvf+Ta!(G&X;zLK9g{G#DleO)+%6P z_dzGiiDiwF=a}JZWvZ_Th^auu6PyRom5LB#0+BL+HFep5=NMlz53P0PepnD-f+aS9 zo6NC9)DHF#b#zpqS{~3@{ZiS%OWP&BU!d8593>WqLyF)3?$W{eI#P+pm!+0>@6hpT z3T#~U=^h-dH9kCc$$z(;K1MI!+WfXd9gehk5VhL01J58SAc55CgYb53C8Y5oPK3_J z61%|6ua>42i0DXk#CG3KC^lEc|V%I}gUJ z;2mmz+-T=+K?Acvr<`$-k0nVYrC!J0^|XB0a8Mf>X#{{{Z2(P~jfU(?{d`rU6ymr$cd>i$sV?<8mlJ4-kX1R?@~81&Pahb=Eq zf_1t5QI&#A7cGa*ZYaf8`$>8m*hT7b3Nkfs-+YxgW1)5!1qe_sbnD?N^0~PwCn~d) zi=wX~*1({)$u*^IS^QqK>8i$kB7n&LFjB-sEZk3+Q-CXyIq0yA3K{?fV$)g6yMgWI zVzK})^5_b88>HpX)p(p2YiM@sTg6zZA;aD!_&NnJDP<`HZB+WAy?9bm5#y>BK0enj z7?fX}_BS;JG{}d0McHX$Z_Q_8Pdr_LO|7k)8gp45v+_8CLAZMt%fjr|d7Z^+kMQ(U z5+H$A!B-)WCG}Y~Tg+7$Ft81TwqGON{7t=iL$R%ILf6kWheb6*Q*G&MR1|o&% z1d}15|8eCtx!p6VhF7^S5gn&Tq{mVnXup~eTC<;Ut+*2icwY%bx~vY1lwT@;Oa-T4 zL8XvDVuQGwfYGm#!UTLHl&)phzYNr-?5$K$inrqhmk9|2D?Swa9C+Fx@`(j?*nB@b zkX(s0Qb)atGZZkyiO#ZYMBxBFK5{Y#WEXe)D~gL90Yt;)1;{uO_obq+8N8^7By5`* z*R*X%@k2UxhB}lxGO0Y%m2lAVaM%O0cHEmASsgr8%ZA>;E)uR(U!t#O^c~*_j-qZ3 z*(Fjeenau8aW7Qd#IK?jvJ?Cka~HjF-dWNU;Tx-x^agi%@?JPka`Vx1E{HQ}+6}^n4ja$f}quU_#NFI&54k!O?yY__vJy zs@Dugg-gULC%VW0W1|utrEPdxikUSfq=Ms))ZjlK?xO7SbI18n!8#=HwL@1!*(+*= zD2Zm@lP;i|8wBAN14`}S2TcxRczEeOXA5B(9A;}$5@MQiqVY^IWyH6;Ivk5C$5-q` zv#K31mVm)wgVzAX@5c}uY9r{+1w69(eoXs2ahoP&m+LPn(|hJ(@)0AQ&$u3wqdEZ$ z9srq8q7N9~1j*O6N4pvmLOyWwvsJy3Bq7|HJGAmNyV`aAhnCa=_e*;Ah5EN?3e-9q zm)}?_*qp8meZ;C(^??C}bnH(kNy+5QU?i<=Ar$oY3H050X;K=Le5j7q?QxePqg-q} zW+#p%;waNP2HN;=4TKWBTLnH_PJ~|oiRKI3ZEGK^#;IJdz;5HuCg{+C7~ZPYQs}1m zIM{3-*!RZ}`7OzZXh*ZfK?jsvxgE%3Pc@@hZ#3DHh2nNIQ|fTaEp{vYhBnL6(PLO% zd!Ed4TE??EcU)d-D z1UO)@$X#n=q0NvGMg0UAy*^9>J-Ka-?E9?!#8;soQR>ypkKa(W-FSL1_1nJPWpUJ$ zY+$8Qc?!Mv;x{1vT5^DCzB>(J9}11A;i;Y1v$a@tm$C}igc*yziMc`=ZS%Ma z=U|JZY97=t&gjur$hgbvfW-3UwcVcb2gSff6e~EG9188E6ZrHvV8qCc#w-@{+h0pG zAUT=ZI)m+5>g$%=Z(^48{`L+1B#^wQzmA;_$b3WFrljO~;I7ce;ZQy3kkZp=%%Af2 z)RH`_7}8l#0)`$OmQOFc`cLxTzFk|q9Emk3{k)Xy zbSiS&{jhsE9NgT)~I3224ruB^VMDqzoQ1jAq~@} ziC6UYw53utZgbR&it=nKech*cCN7%?Oas-A>pM7+_-@EpF~i71=9VXBeWkALJv(?L zO*AxZ<0XfD!D;B3%J}0S7^=#&XR?c;Wpa~KFEzSY>ED&8tAau=bDVz|%sP6MOcYzF zSI!esjP%>1Z{mz>o)S46irv1W+L7{8dHE3?z z=m@{8EZyt{1iYS96$Zbw?$oPNaPg3EC#0N(!pc5ksYMQ~%!oGh4o0n$G+uZ~VwWbo=9}UY!&W+4`+e0LQ#}!$n%|NnZSgBMVsHiPB_S;DemjAIQ&?v z$`3W(dbOMJm0Su9x#nM)QP{Xl?CNpjBxh0%6H5F$DurBACXgCWYV!3y6O^W_E{N0? zVOK;4rh?=?A^$O%1rMWtgj3Ga%(_6ii4%4i5-6F+w)xOR>N@H3ZW}U%0 zt4SvJ3FyHg-&6BI&P7v#6Iw+><3FQi+I5((B&DfHLU?u3E*Y}2a}4lnOSGrg@P$E6 zDP^eWft=L1Zskb}o-O)a1E%F62Jf6Rn?v%&$SkIfYu8?PZZNZ7_d}HMzDi4gXYrtY z;jfenG7@P`L5`G*NSYwNDX->{SGV7+u{Qi+0hIH&yqZ~HJ7z4bs(5jiLxHpSn7i71 zB}11TX39XV9aRyFM#pj9B)C+X4ZgRZg;%RJ&v|IzJ{4UwM_@BnFzL+>Gzmi9Ft5rx zAWvy6g@PP*^fJ^_x?_q=HcMb4V)mkOlpN1i=u?*Vb=lnaXgD9K@j3%u*h|R23epvXsCLkGR1>u2c0*`szb|U9#Q|c;Q#od_FF{~0rlR*x zNLqcbdlq3oI)44iE6iyNL}fCNgh9b2Oz7L@?b(N+R?K)2-OYCkY+Z=+$ z?wwwuv!Sl|7aqO(Lo&zwx6NTi=%Vd=#e3AO2m73lzp%z0$Id3-wOP|`>svck6t(Uy z!8rho^mPTtND-4{VqZ`B1Vcrt(w~|aadGd$mf9zUkMh2af|vo$6Z%=|$S~H>J<0m= zEcfxKKUd@aZQIWmL;hdT8uT4Ba>0C1$0lz(UOt6nGEjshTgsXp6c~V$LX1NDkPf%q z>-sK#p7D}fT5ibgzDqr>%y0jrfbPLi)Bn2{`{kcWJTAZcnXB8$t-#d-E=pTq(QuDp zLd=8-nk6?T?#PHlY%9W~&%(qrF)1?!YtYftiBMi2lFAAb{qzwR*b#D1EF#>cT^Pu| zm-SzB*?Gd;M@0|I@s>5N;E&hl^*m$?iXUoEnVRo#U(9m?6G(I zn2vemovc29zL*LFMmZnozsErqdBM|l<+ZuFx$8;cQMJ}O z>h+6%3fN#=B3e^Ft5>PqBw-&_h2dR9w4;Oo_Z2Z0F;L3&U57fAT4OTc)7G_=Nn{La z5%JJV_~rGl>(F}uV}P1gM35_QpR!&v_OM`(Z!bbqjZ;qtUN1s6MM0f_j`M;hj4fib z-Rrj;32~}!MkJ3A$Pru!5)JwE6btJlD)(QkdPjrb@g2TnisAN0$M zYDUop3V<#uV!*hc9))cGAt1gs$&_HRgzV?z&Niw%ei2MB%u|~dGCin;0mgu-b#@zj zz%d=K)2d7_$17)|u;agcL^~SkB;;9(W!Bu`C3g0n?JmD-#u+i;L*zIv)Gsr<;W|N6 za@s}Ul$j#2&~XBK))JNgTU)o}Tt`0`llwDLGPQFNsl5!cE*~pUg<9@e<)!*|@=@z+ zf;;iZCq{CJ(0gE$^|b6ZO9YO)5ZkmD#*03|Mn%YEbBGYRQaHu6TDKm^zdq|Cgui_p`n1G|2jERxLcVPDZS0M*J3;#{{!U}TT< zYs2H*kz>p8c@`aJZ8ED!bUS%(PD8$FvNa{s2oK5|Du)bx3UU9ezpXU1vw<#kARl3h z5#KIMn20}(Wy&dGWAxH7B?qg^WS8+f`szo!bg%fPlCMLOEqHb`o;==ji6%Ar{((3a7&T$WdC5+}(v_ zFk;CHt@UsEEPSt}Mi`B88MSS;RySCdB{>t#U10TvL8tnK*(5z7s%ju|gz^MiVg+A< zrP}7&iwK2vr2b<3OT2V~m0K|kG+d(16#y4S}<03H~}NAMnil2U$SEtRqH>u@j97|S&TZ~E(X^}<%laiEk5vO zNE9*%Lu7y_2>Hb(!AldWF+b-tzmWoCSpWTr+^mNjp0Wm}!duLn0G*rY8FKL!tb}zC zw2+6U0J}Xw=P9SC9y!~}5dMIBGVab{l*eKxU)M0!nr zlkVvg2xNd1OBGRu4MZpitlhE;3ecBfYb1oKV&}yOFmcGM22O7`6RZ&XMIpyBKX@yg zAn{B&V6dP}$s&7=5@Ds~U)@+SK7*5g`+YPA?d@5nJ*?zp~G`bh9#IqHbfxJ>d2WS(7r zxwu?gHTZ6 zMNNmjE%V&vsK=8@K5&Qr>!FQ87M~^WN45Z}^yI=}HPG9&&`wo?-H4j#MP_UpKqW;( z4_*}mw2-wV8&G59EnW{(mV;RHqSvoKqu(*@24G?SWYS)KL)b5BZS{H!0Igp~NcZ9Y zDr3(7{2AqP>#pZwzW2;nIZ%c5yp6W^O~+8nNz9PI+WvO3lmdff4PJIu7pkOd?mY+U zBwN1G`>Q1BkMpt)1mBfybn(K1M)B~mX8WOG6#}09S0K;WU57)aPjD0ftG~$KEL&3% zq#gSSsG!u9Q(P2)hlkgd78De~p*CmzfLP_KMC>0mS4Mmxos6wGSDV+oyv0}XVDf}j z%NWg)fmbOeA2~}V^-wiB?GznYs#)-V(Pxjt3X?M@c*kwkQRPu^Cs3LCA0wxcr+mYt zeaafdKV_XpLGM z8b%{3$J~^d=wL5 zLy?Vwkp^IVAfi8ZE5aZH-}p^^*HvX*^J2bVa^2UoNsFzDl^OJRsJ{M4NXyBWBqF8y zVOaMZ!kF=nibd_>Vq)zbV(pnkIQ4L)Y5!_2=hM5uAG67ZqnvUKy&Rx_ha#k@a4-v# zEuO&{kx~T32Vvs4@$n%=$+gPaoKWp{Pk@hS584|lR~4AinRvsxQS0O6aQwL;5XLy{ zZ8;(X)?`QYJAD%RICjik_*b#SIb)JAA;6K(kI*SWidZl}NDrtNiyfjT&WRE7L1m?E z&t=3d%{37V0WBAj|w{wPn>u^A#x&K?Uy`UDEvR zylVB^dE@U^)2SDC6P$}3Qp(ctRqQ-RS0Dlx^Ft-~EM#erAPp4)8cVdB&0M7^s5Bt% zABHqogANBEXg)|G3&>28tu5i+x<9OIwLA*gw9H54rG{paWU$f6RPDPu7VkAGiZI7; zJo^VMJjbHbE8N{`P-gI{_)caV ze5b>Qv&l^A?T_`zEZ_w<%4s)u6m9333x9>ZdGasRKZHMqqhMFjGg{Z(_yHnTaE%VX zwm1A0Y6eO!`X7axqrbX{@Ci539@`BdeQ~A!;p(ebTer;C?5rZ3R$H4$NvvD7Sep@? z7nhz*?nJQl_O!#{jK1b#iKS*HjO9Ikgm`3Rn)O(j6F-FH0IInY!%w@9i{*4ChW!m0 ziWKaa!DH~fHDRkD`8>o~=z#KrAdB{&oc57-pF#-#?)`Dx3}AgNYH>cimFL@aoQff- z{6fnm_-FlcEY^NIo)}I!@jOGtZ1U(Vi*h*h<{b(cqaLrP!k^4{F{9zoBowEjBkl^I zm8XSA7V^hQEGdge4Vu%@x+Qz2(=HQtjaq7$7cj~xy;Jc)lM43}Fe9hp>e5$KQTte0 zG)HjdEh07V*W^;?-~2=VCcFZTJ^16Fq2BrSK&VA~yEPDGPZp|o7?LQqpB(N5@FT@IofXoOP3gk0C(>jvSZ@OXg`7-S6 zNWRF7B@B73fTuiO8{ovkct%>IEW*6REf`1WIphe(fk0O7les)E#U|Xx~9Y$ao@e=S?P2qA~D+5ouc9b(&-qFJ@UNjg6=>a~|LWyQnZ0u)RVd!Xmb$Vq9z zS=o`BnUkUX^|OE8F&ne&8y+7|NGQ-R zB3`OBuYifu-Yo)lQQiN^i0(AGHmSjPgz@R(=b>7fnxVY6HwQDktIiv({v_S+wkOy+ zGo$^BEq$a0YqS9=UA>MOhqFp_@bf|4vc-IB=h|&z2X%?E)oFfVSIEy~@$G@o%US&f(^_Gr80Mhum@DjJBT9iCiC5qAXRu956r2})CB^$@27Pzr%PK8sWAHjTTT@i- zi`D%a&EnWWkx|J;0glko(@gL$zENmD^2+9nm(yxQP$#*apq09X+PT-DPbi`KH=32N zQfa5xRdYX^gU!D%81QCDwAcOmY!^@Ilo=y0!Wkt{dflnUx@@rgAR{5Ws9cl?H#b0M z>O4C>n{Hx67zOG{7skd4#D0@Fyc}LW4SDCT)c49FbjKcQXnBKdqJ~nL>@KT5ow{dp z@Ve{KJSby@`u6O7H>tW`X|Q>WEFA;;Ky4Bf64LVWDZ3Zjo}qzIN)28F-Lw}xraqQg zT=1%K#~(Rth{EN!pZ;9hbn@8V(Z?6n&T@IEyroqUu21;sz~Y&^HMA93^Rttf z(Bqa*QpCToQ1CcRk3;mQ_#D6f{eFN#+Sx|)S)GY8$nY?J6=&J!F0Z?$~_cewlhU~zOm%i>Lwi*(ubJd}g<%TZ?6@kSw# z-_z@H=gI8#=!mc>tJZhgCdZLL%nUKN&>=2UMMekr47;9hbcc{*OOs zHt5}soIauhrI7Yi*8+u@vBxQFy_($b1lmh@fE|rXdYdKb4^EQ@m3XB~|b+ zLCAveEc1I;T9~M(;#k&inf>4as{y?Yvqqn!#hvE31Wls0HZK3{manN)kDGqviPw_Z z)XzV3+Nm>J4V_fSYXvKrv$vLj8Q+{E;y=b!BCnm!)1$-18qCe9(R2$yQd9g}p!@TP z!cf!U*K~S(YJ>Kxz;Usi@g^_UZ_|>~zWia)ygC2L{N=y7*LZkEUVA}uyP#3dX414d zY4R?c(W-Omr$gaabn<<}S%*v45@u%7Os8@_1C&4Kt;hK;Q`7H|<`a^`EvomuWWg2qly3t+;py1(7dMT=unu;}Gr}#tqScoLBUSKx$kH=t z0d4!yB7Nr;607wN2=G3!CL2bK{|TdxL3sPImPbZYD?upy?*oVX!E-CI!~vl+E^n8| zM!0JUUU6S>A1?XW1a7P4og~s4mGZ9$az=Tp*ll>+qm>@WL+7n zlv~E#PQjO>-)2be3J4E4sJ7ds+UG^mgSt0;y`O*YmRgOyzB-}X@#^!RwKZl`##S9E z(`5X-yYg>0L;p(QVKeaWclI}wxyZHqmkrfr)AC+}S!X*>zcy&Q-3##mmUcfD1Nw!g z?O^9?8L-fwnI_ega=C~p4#DycjGoBE`jU-gl5rKFxkT%C|{$a){ z^o6urVeC?jrS-~(GfFHXJma;mh5n!nnu)zeFLF}13ayPXr%C4~KXGiLklo50&ttV( z{-7@Sw-xK=gc!&5`@4zbnq((G-_{6?Yb|mV0%FI|K>OsJU$5GmkPcA~W<@7E#?Yul zr{4zll##CzAE{!og1{JGG8xicw@Gs|JQ$!9keboh2125C~^Nmi?3>3PUKy9_g-cFyJ*=xFXZSn z0?QktrYI(!o2;Mhbl=dlT*1r1AY_cr$Ks1GA^^y8K*r9lB9AQ2#ajv12} z4Ubu$X8m<(5YLUZ#$w|bRybheyt6JG;}ra;zQP|9oulCns~bQ1>qpe?D~z?uh=a=C@2L-Q&l% zW&|gEvws~ZP6X!}JFmg+TjiZE(qb_hzoAnVij!pvkUpw<7uEp6g^?P@jmkh_tH(^=o+fXUhFm~?A zla$=h;dH>si;F(Ll}BXtdTc7^0){Q|kGCd18+tAG9=B2T!JSH+KFS1g?j&1D*_xXk zu5;y)L1PKM92P2GG9=JYBwn=~@99&B0%p*+a@n!8wEK}t3OPaCI&}S3`;N1Qv#dO? zl}eW@fwZqe%ZvZM<0KzD-i)~?uCuABR3Mkzg$d|->2TU1M?C90*;1eXdc@eQ(YYi#8QDGFTgLl`{|P-&J(e&$Qi*&I z2@FgrO1xiq^k^+W8=*a4C+W{9^VGu ztyQWdPwg1CfG;8)9<@sk=#EL&sW-x(L&#ezm&M!96GYSWn$lB3%Tqt7xS{ZW(~`?G zu)MWLi@%p{Xffv}mZJmp5S_&XTm2soY2OalBnJ3yV8gSj?8qZ z?m`qBf`nkX8NHT~zq3@hm`DqpqLH(^i6Q7C;0uB9HGXZX{5{RJwF8|ksAQLYaVu-vo$rVuGLg<$z9gSLBGkiJbKh{quO(> z;rENF4AJ_`tkM(8S(fLsD5{Wke}OsoKs=O;qwS`#DgF+t{#e~h0D1q5gu{q{>1eOy z9O1D&@JA(=d&E5P8sA}lv&GFBPueISV=8MQp{n`vh!A|*3f!$D_p6|P*8zCrC0B)n@9kwZPYw}`wgr4^a{v+mVLEHu-G z70X$*PNcD4k$SqCS_~r5U$sF^9ZFs!MFEuP(Bn~Je<0r{`SO==hy93EKPfyQ?W!9| zG3Lo1$?Bw1|0X2iel+LR6EEyXsP1QI!Mo7c-_lQDrK1N9VkaRsZ46Ok|7c#1|4}1+ zJ?nRPEMZKb1_V6~r9>azs!d7?xJouFOVSd=tD=(#Vx85RE^HW8zj{IF~suW!q$ ze^6bRd|x*8;z(u#{ACFYkD9LQ`)>b>w%_OvJ1L|EYyRAt=%py`E!8A%Wx-_75yV6|%x;PX8qC?;5 z+g$m?x)y1T6(TuPcSCV*g+kui2JLWjDb>3Yb+)%Xzpu#`!@>kFK&{qlVmlrwkV7%3 zAm(Io`G6>`ty>~-8nKC0Ra_7Q8^HFgcKMi-NSKbz^&4M1{+TQSozh1wu8mxR3&IiAK+{n@I~@-wkiPTZ!RR_vZ$ z4B31*M;G>h0w67}>{2XjEr0?iQRV@Q608KIIcC`xsgA~=#A*d{D~;ooI%-+~3f5{3 z3v?*}?P%8yiCw@RS3}p;;6k3nDyNv)fJ3iau~eRL=!7XHiQ8{u@ivN{y zq4sLx0S;S*G3k4YLM44NY{?NP{U>kz{=Mx+)&BA*+LRmIwan=Lx1|7R0A0{P6M>35 z&toaxts1tU>(kL(q@q>nxX@|7SsMWTMkPw`+0{FL@%sPWUvvZ^@`~z?Fvv&%dNVbE z!vGDX0E9^FQtFy}9JU9#WR2Q2xm_Z;p{=AeY&E%YYK<xG-+9XIPeBF9V^R}Wi_u07Dzd&BMkf>H(qM8zH9g`{e~u)%$SVlH*3s>{HrcG;8% znIf68KJEQm(G=eswtqN`r5JwnCL~SHjDs<`j{0=<+xt#)bI?%bg--EiLimVh!8!dq ztLh>P3RocBn+78xtyOz_jk%6GfJ`-Z`HSpf9TIlwf`TIn6A_zAlhj0_R<1(jh_wn> zi;QBV(d`!P0B{)aBwbg71$OCD3MdZ57;Q48tQDop6?aL*Wniv}3w6$U`uXdzy8VV> z`=<~cwSns~y%mzaI=RN&88Kyrsb6e!^~3vzbt&wEn1$WpOI=QR;vkMJQHp)exTwO!MB&2u1u%&em>?1O z8O!B>TU_lyu32mskG|Y2 z@AU0(F;_ma3aM9qqaktUeYqZIv0RRS^P@>UBQUPqKMvefD;(DK&qGZ`9o*Z>548*) zbR`mU;lT^%JNx?^TfOl3TIJv{eX;5090(gi1_~ULQ(zJhxZz-=EwH;Ry88}m`x6p* z%3Yr-bnQaDxlj$)EPEsA7Xo-l(gcY`{W0*Ockgf!qd>MjJ#_Q_WebD)-_!-`k4Rxq zmtOF6QEgzoUsda8`YFpTZzHzoQW6-sGf)orVgrhPZztyQy7T5uKF+iBOu{&q-YTj`?ULyUTA;! zLJ)!gb?KRbQVhYKZYDW(Q~AHRD`Jm5C_J%k1cvPUajR#16#Qbio0J<`k}9dQLLplf z>kt1kfnhb1>qZd)3Oxo82^cZQ1H^rC+8T$S41?9<94N+M37}eosv4(Of2c@%wEIl; zwf@uFH^N2!>Tr>d9Q7?O^zp*|U0MdgMwD|g^{2Q%rQ(tnws)9nFWxK;@e^{7^M5M0 z__TU>_^-p(AAe>3V{$`zz?9_|?n9w~pw$B)YBQh?3MfF|W86z}ebsN~c57xjT~MlaFo1Do z4kf8U+C^7Ja>SWceO`tpG;k3iwF{Edvi&ddQGA`zqm)hzSOpgTaIY2V<)%WHk7wjY#L<5%;n8?MC! zB#N)!a*S{xz;EMazxQ)g2oiX#DX;Dyc^R? zFs1_{0T1*^>`Ms+|CCqowjW{(3%MQxO*$=M;Bv7A81fX7|6%(~d zwBk}>K|(=NkR+@HIH=1f*ZB>OzWffiso!CUHAa#by?mR<2cv^nu`AGc3^B_Zr zEi>*v%iH34Tw&O9H9e|R^@vsA*JBeVOE=v?n{o!}TM^R(jb`3&dO#)c~(ccI~& z3JOwerI&zS4|FsNf!Yn|cj3KE3yRoMcKs}aquxjp23?PJyP&r>!xzHNi$on1s zQt-m&G@ZRen7Ou3oJ+2A_VQPMzy&Ff?!`Y4bQ@=P6i`#Z06FS`PJ@0MeqvBjQA+O| zS8vbXaM4PPgb*YlKm@>ny1n1x+s69y*WX*#?Z5Y_Tgjd+A3R5XRDb|LQyA}?RTGPA zI=tdK8UirJyA0)X|Kz*0(79FUoGWDFW0zmrv2BwzQ9QN+bz^y}u0-^Kue;KzzI@`E zJmnni=Zp`YyL?da1z>0nbBbnG1J$5?q>!860XUAnkaKCcOFERX_coK#;~s}@E{~Uo zV%!HDkDwd)GR`d+Kv0z8k@R9v3-jm_`~nj6O<`F;KSj~oj>GHMpEx1!the~KXw!I# zsuVUqCm)>I#IY3=l+-!Vo%2fbEaVf@==ol2_X@fnV|}w?R_cg) zFV{17QHm-jFh0LIv_l2N4EM-7Q9y5bc$CBs5auIf5JJukG=4avVWFvi0 zXbe(8L-(nNuj~lM&8eT?f%?YgB8sNqKsJT^+3$l9iB#RBzs;b7h}LZI+GT_!6>`ur z#)1AX=*OS|0vHib6a)GKx*US*lTM^b zq%n!LK#B{hE;RM0^8VaBs7@fhlCPZ#FM%Ae7rhxbEUd{j6oFX>G@x+B8&9jJYY-4# z73EcX#L_0+5vZh78XcI+>4QlJZ< z*WmO{U?e?;&f?jtgJr9T7(0FJq8YPR9x-q9)K0{aSbWZ&-og+TdAVHiSRg z+R5tw%D~7M>eG??wMF4W5qKhc1x{ZF?0Sgbam0j%Wv$*Z2TVU;R=2k}Cp@A&EqC~= zzI;hbpVQKtHv@pXUn>AQ>XAwSKr`ZN9F{i9KqQ9vig;0|&bIZNDs`9N6pw!T_c)uhXBg)3hV#DqajcWIp(9`6S3#Yg=_?O%pj&hB8F%A>(Vj z6ob6Y2#e^|ICB=JKF%3OP=+r67-1S$H)G|#!Qvy1fXTkXy!hx|7J}{OLU$Z9Hr!Q1 z2(RFEG+uj{$!{-4L09%h1GM<5{X!%B8XTsy1%)<2C;2({?8t}qDAiyN$p+kTX}ZCt zbsWGL57lB1CYx7pzeaLO4(h`+6Y>|$hZF|J#QScqp_5Snn?B`=S3M7sGH5kSCDgwHv8)ab##UzJpjRYvWTGIlgH4?9o>2JqfXVrE5a&=vHo!~xqn!Z(j z`yHn*Qa);}q;12rtxv;XmrJ0O;4TMi@ji-UOSP4;|1YY;_p{veBa9IKkt;EQ{tFf# zuqrU9-ShoiYJx|nFehB%!+au)o^rWu-o@pke2cQJdGGjC05Pg1p@h~&DGbcw%KU!v zY6}EeTpWeE35y%_TQLuG9rT|-+gR3JF9d4!C`06C(+>7My+F&Dm@~KZ1&_$Xd)+)2 z{nlIkX3?v8%*+knz&0*}Ao0inh|9Ws!e}a=RMqW02Km}UA-BWDcxy9T6_MzP83eO% z1GLI}`Zed~rOB+^`zUn~g&Ev`BT3j85Z+B9qqsA1RIyKI-sMouNJ^%`)|dopCCVnO zo&k=A(9VhKPCzl9X^rBJ`Gd~7(~rhqwFgiB3L9<-Fbgwqg{35p@ZKl>@~ zrVKcbqK`p9|r&OOpDPO`b> zBBQW;NBund@3{SusCnznu&JU|a{9)8>RmPx*%W~p1pMZC$LvLOXzgglXjBHC8=_Tj z_WtEh=BZ=Qx}B<61Q_HQM4UgO2tdF<;J3#;rmn}!veK(eoO6%bQ6fRJAxubEr%?qq zyOIC}oY&G+(qyWBKyRrb1N4p%bW?{{Cr~-6&SyrT#h{5J!I)Ye;R4b;54jU{dw)eF zstkGwfB*A#?zi-on%?A{3f`)@*bvYP%YmI8pcC3ah~d!6C;NMJxtbJH*Ep(cH51m<2AW>O*2FBS^~ zD5EeIs9y+lBi_U5rr$h1IeOG@(O@)wSF8;vhQ*#+fqn`S5vcV}%ej?FxNyOQ7WWu^ zOD%Uw3_yY0F<%R70r?;u#lNJQQJDX&)AufA+qidwP9uTa5|+Da?p(R1k?R^kBCZeu zpWsm8s2G3@!WaYWVkg-+E~qv*bol`b{`y7qrb^8Os}EcXe{u&3g{WAirdM|6r`grX zIpnVQ%PTXI2*Gqi9o#SG@XTJd_A3Fn{slM(Q1X)xgifHB_i=SK>9F z)|9}QyB>4r<4;J?Id`UvDhPClUS{MzqaREn(0W}@{5kEDLIIdRabi7fpd)BCcgd4W z6>}q0&b1-ir^8ITH?7fyT73_2AgNi3-0<^H|yu!RNjd-Wv}mw+y7dn^Boff z$#zVoo1F_dD5P_r!QET$GjKdua@=zL_2L+s!DRXcrW6BHCDViA8l57?tjOY<={*`i zUahzE@=C?l-L>kv#KFZNa-cOF(n>3!nLA%Kh{7BWi+9x-`qyh~a5(*Mv8*4DHTuj= zoPRB3l-$)235?Dd$(%TsLvh}5#19?K-}f}PWBvJTd?jQ;22%)5rzxzX8_4DO|SBppq)FbYMjyMdku(o7TZ7`?0Sy}-KIgpQF?{G(i>PIh~j>et{ zYy(&TGGYdNh@8({2Pl9CAXqp7CjA!HBEFCASwS3=!pc_45CSzV0QH0$EWN!N5xsU- zbrFL#qDaqRiucPF@Plp3?xNM|vh6tI#uu@s{^!br<&za_c^yOXp zhD$4SeDb>&7p;5*d^n=C048H9tP2ua5_>>p~)KX2ASgug}D7v#i~J z7}EUhO#G`ht9I3D@F;=q#Tay)v1{W#6-<{1Gl_J@w5+>#wFQul=bP4s*|S8A=5gH+ z033%s$bwT)2R7&=Bk3Sg4oiSHqdjau6cg)5ksE1a+o0qj5QZ)r*pA7-Vs~>!6tf4g zOkm@94WO5U{tyC~8XcfFqrvk~(^|lu^@N)oe)|Ja)ADmn?;IM;qpzT2%#)4>ptlJV zcU}^7Ry}N=Z*%plr^vRg<*bhBRo82B+4nzc1_%sLDYBfL#-a{IPY^Gpq|XG;Xo8=O>R3h~ z)|8-Rc7F*b;q5Spfxr1E5H{EbG~^^RvqM=0CT0NvgDHn=iGkJ$moj#NO_x77#x6*5YmPnj=D9*uF1@%_N;Da*u{ZR#d z3;Tm8#h8RQcdRx4ZARsTH#KaRc}OLJG?3{{>y3_m*?bBD?M+g3Cl6v=qgUT4HnHZV z)$fZ?$VcVf{Vr1{H56BATC@k8|4{WXR-0V2#3yPE+UjjIAMWK{_V5gcc~d^bjb}`u$KiSBl6ypQC;0VHHJ7c0vQC^i z36lrv_238q?EBXOeGd~oqLi7Oe>lR`iCW#@2&({Oeu2&c8ogQ{t0PsD|@cGvS-mvgz}V7uXbw{ldk(*MIi93ahjvC@KyCao_dT=7)srt8(_x_4Q0_BO^9OtAZ+8rg}rAXH)R%L&A-@6YTV-F)E zi%`_j?|m1Wtj53~6cmAqk(7f*8x+=k*E6Vu5vbKK%wH%_ZL$T1zmuC|WMRA7`*ixc zBNPJ=1cE1O?RfkZMhuP98#wh;bJqu*D+%+>!Y}dN5+68Lwpf0N2;L|nG zGN!kt8vL+@rf;69`;1B~07tV;pt^_IYc?PiNKOA}J1wSlpzz^_iQMN@)cJ6sxwHl( z+7LILNsmgWzyC<9{~9L#{tLbJiK~W={im(+7xswtrLs=Un`NE8qG1so*C~@c9lf1H zz<(I}dk{fwzQOgI1M#zxYeH0IVJ(_J$N*9@uw;WkT7`YUSWFt@CVz-oF!BX>0iLHW zhhyh(xIchFSmK43Y?~E1m<$Wc^pfF53%ZLBfn)>Ye?#{t7j7zFR_rbZu=bHj2xaYl zli*?#EPw(X2By#zAn@;H`UQ6$$C~(`{v#SzsVjNX!`PE>Bc6ZiN5kV!0}&h7!Sy}=wwT1TNJR$J zKvn^1jr6E=Z^oW;<)?2r;vYW4e(gsPu0a{==8S8+eyb>x04APyVs-(bdQ@l8aedBR zmlvhDl%lyUk~AK;%SF1vp@AcIkU|{}CFVK+^P)-;dW6>vI;CbG?F=OCz`;43&2sw! z`mNx%LU;WDQi4nx%*1FYZwLtTw$GQl>I3x-_~H=$daPx5xNN{$fT?pwbCHo^15}1GrUiKH z!(pmp8XP8a4TkNU#@rP18u@Gq9rkPbfexu&}5pkp`5^B05+qH^-CFTNi@|Q=ftWc2nOL zxu6ENz4`IqRE?JZm3v&iUA6N88xUb4iECCVF4>Z+yC}yl%HW9so7{)MkeykW8FW4# z0egMynfXb6n$ZvSHT!)NKU;J?0z`EPz40!G;dL_wN3WFu{_ zm_}T4?(+gmFeS{Yzc$6h9S)5-$Ua~4H4lrFQ_zJ(yXFpaYz?_*;P*i4B5eVynK%&1 zo5~o3SZVx`V09)AY5-DNH^m7#PhR(lFLhNg07m!%8r%th z1+3lv=7+uN(em!-`zQLq`VbBS!4iuq2C3Zdg#Ar9bj7G}yB4LAn-io&g(4X{*lTaH z9FO^TmfNp9%cJxRJqw2&gvKyH#`vfhgQeFm!s}h^X1(o&D60@=zgMybM7G$#F=W={ zP*lG*5EO+Yx#_4^o*oYArd-?!U6`8y@MUa5oR47Q{yA5F{dJLcZ(G#tIt)M$QuRGJ zWl)$1OujcriG*D+%;QyetsZbDT>ei2jDY|Ea%wWBh->2r6BuN+58%$>;Egy$P3?kE zi?kXw)qjw?zP#x$nSj7RAVF)_JN&d2sm5!J?%cV{V4#A?bR`y587er>C_LIP;ge)^ zrck$Ikd-o<=p76gp74*2oaO#A%wjg{x|Afw7)_8{$eH3s_vqx!XOOG(5_|;y=9s!9 z7_m_mRG?Eg!pPm&lCMD;D8L$nY#X!HDX^kYclmMWvu0{a@HM?p7i<$g-IbwE~2u}}1gvKacNc_rjsL0E|=W`6l{;OS3 z5Xe!Naqt-swy~r_4Q6lKBara6S={jy`xM9P?9jGx_ADMQcF-F`3`K64xtYaqk-iW< zpIPi(rc3ZRb%-R)0AYdx1mF%492V^r+xMv=(aV6<8d?Jf z%nXZ8^}x%$*-h@;v5!2--)JbNSMIhJSip&*B3KWkUy8+$4{ zYwFPJu4_O}v??hHNQ4nchGN`^;908z;5v7%^JKnB7B!O6;hR6pVSJU=gII~*VsSlt z0lom=d=;({v}*(b!2lT<2nw%Ph`_|LPkc}na-l5^vIYSa0BFldk87?-bg>p18Ve}a zCcM;aKQ~xp5cY(?8A0c>DRc$i@OP6 z30=k3IYB~Zb-ln-+PD9U>oJ8zvH}|iXLnSo43gus{Oz!b+WmmO5i$wT0Yp`DrB_ z=MT;?%Ymux}AxOL4W|M_14 z7Xf8g7GguuOF%Hi3kd4go@W&5OCU$AA@*)26Kp`rWE4SKIB6JZq=7$<-VJ&!b{3+x zjs|)J(@5a&(#HcMIiphml7pr?#UXdfzn?&Hc5&9>fiS zpi7{iBY4-RL*(ve{>g=>@_=XkWOUTdc`8k|BxSawpmiERM#B!d@o?_CKE15OvrEXT zT#Eqo9Nr5aC)I(dm?GEo9}6fr;)Id5Eu#S5NBd~P7bXr&L3}8x;3MM2LlK;4XjL~T z0o&_W!?6W6yTRW3^K&Q>Er^K4X!-T$;dz{GTdP5C6>HnC`VxGet^nl%BoM*|B1BMk z1(6M4L==z|8{&0#E>4i>7*9 zk3ae#8DKi*(zEFKXmkq2Lh-fMS)#MjOKQ{K-2|^4l)0;W^T65^M zx~@Mx=;phVyjHTLA+-jqJ{C4JZ2S0QuIcCBp#N0I2uFhOMho1$m1>v@pTJ#5u~aUk zf-)9eKo8AAP#^RSOr0nUgsI<&9>SQ31}M+Pq^1_7V3V1nnGFOYUf1T5wY^!j3vn)Mnf)0?bao`W9*|Mg`s0Hr`iV2}YrBqD%17BqA! zz;jR=7{_=(CqS{QObHuEt&>qLE$wk&8m~(K2&53GNn;rLO`zX~r9uF}X#nuG4Bb0E zacP6YU?4sYeHkS9SI|pD-}B!WX+2!}!!0IhWzU0r=9w>fg1 zepL@(SB|4KHSu9-ANxNxQrNoOUER&`%dt^C$TQI7W&Ufa9m7etBIhYNrw{CJ{Gekt&7l6a*N1Pmio5b= zB+;gPRB`us2q=ZPK@aw)Z(w8rHS5p(P-g}JLJ(_Fms0MKIl=6$>JkWWL|Wwy+dzo8 zl|SN?qNA|M0A_iXQ#$>s-^iECwH0n|Yvps{M~5F57+)sYl>rjb#85|4zK5XO7-LWs z<7yD>&n1&xNhGh((t@}?=sM`fK<)HLKz|-11>!5%vnqz|DwfKp_ciUwrMnv#x(fOt z7Sb|))r%m^_Q3hlH794pglypP-&W_&b)j&zJpiP&MtfOz&%@>HU;S25q)JJ}BIth5 zMSwmFA21Kpxglp59k%~mxpUrcYm<2f5;v7<@cR8va@Vu_>s}d{CFQ&tu@m97B9WN^S1|)*8DDk>Qa6KpuY2P{8*mx1{c$7y6^Y0 zLfe;B2g`@i!7^%73X14h1HL!qV9;Ga00OD~#tH!#K&cj$l#;oFGTEODEwI^Z8>pwu zzOqhcOqwLcpohQ4e|@s(PC~r791;0E_+yfzV+cSJf-py<9x6o;p*w%_7!Ds@UoT2k z@nzRDAksjY0vmlsvYqKf&x6uHJ*po0%~nhDmg#`LMQEuObsKQ=LnbN9T0Kz zA5$#{mrYugrX~DC)flqEHBbQ+DN#3 z0emoCFP-%czkM&<8o!2#Z#JQt z27%^7=o%XTJkt<}2W{PO*FmhV|9@F`>nPQNlD7FilWT`TtpSZgl^Za>zID-=^K%CN z*2V5N|9(bik=9s`w0b${&f|fU0A>z6`Mgs;(SOL4drbKr6JEVu48|2XT$R=^yNCW0 z&V&({tTr5+58k~0&z1X!3m}`#=2aZP0ENp%3yVes0X)>IxGR#=DAc7Slcd0g%5#h& z0F9xj`heQBZO#~|s)V8{s-!|4E3hOISiAr!zDzH|C5ShV?46!0W=yQOptUTiM~rm1 zI7jp2@QI}aJNO`W%fXe3P}IFNOsR`T3eZfV2)l%S<^*6MVx_zR8r=8M*dc__+M^^qmXJ9cJRAKu=;J=ol6TUh%K}_6}W3p5xQO{ks<> z3$(Q%K>-sb-Y(KTBN+o@YO!elT2x(t!bYpupE02(f;oVcP;K|UGx34~W|Aq28nvW^ zAxY#aJA5&wWssZ0T6XAU!4zzzFo{WBp5;skVcA9u4hb@XG9)7#4CK0I0HI82B;7(z zqpnrD762Fn0L4oQ?hp2M+%|J?NFpkq%`2cS>x3LKGIwELvYuZH{=`RShVl z?q=o*H$C|Vq-p__a^RS+MF1iOc_)T@HxsB`t8Yu$ChkO)lms%_S+#Fyo876@!#tiA zA1qZgM&>fWA$0-Hn7*>Rbycv=7s89sKH~W(m*(b;`EvuPyOyt<8;fBfQAEL@5d6gSD)=;yF)0Z2 zOW~t1$=3&-{PmkljzStpBP}y!)7QE3iS;{-tiHJC-i7iUycEXM3{t7?hS`)M5bQQs zhRYVitH1Y`r~q}>__Jzl{yjYgCLn5#_1>@l*k2d#&{YZsMCvnm&_$C7B8UL65i2IyApow| zsT7PMNi8>yi?ZMI&H`5yoF9froYhg>FZXg9KYc%_HyY$!=oDrF{fd5P&mAvuAmcu=c>K; z-GFO+O20TC0M0yo4%Xzx34CjAwrAXLsiS^4aPj30hmLK~7Fj5n*!Or+A`IbE`$(?4 zcAXJ-YD;id?MP@YgJYW-#8Z?4J0)!5?GR(oW>wd!JU@RAhj5LSSE!AUBq0TrK7mL= zC__X3Y>aIzQ<%L1p94P#S4=tM($V#K4O1>=l20kMfq)G$AT#Q$#v&mJlj{jWA;}QL zGP3xyaCn1}HU~9nZeMV;FsQu?pKB6O$U*}+D=b<4J3qC4sX$Q_JE@Q33l09N6;xvl z1ZqE%F5*$WdVD4Gi|_?=(Jf4KGu+!2vmwyr_mluK$7XGwg-k;2{nn%Ovm%OQQYg-* zb*!N_x|_#S5A+z;A;H!sy5UZ=f*H;9Jm%#f5V5f7xFPXQD9rUfoxOeX$$;){Q+Xu* zxppNoFc%DTLdru1ZnhA~9q|gI+8bp_2w(s}XkFDU)>T>|);=Ut5SQ@@hsedEhO2M| zuF>7l>Zwtbl)zF35}<&RyRZ5j$UzFrqFI31=R?P|rSA3l`*;b$%d)i8DPi44pxw*_ zj>ln?#gRg(JSh-lA_nN=;ZgOf@Kk^7$GRr~?jq6_K<#ikhdDL!rQ)>clFb?(iT0BgpsRoS>*|J|9mA00_Id zuqrVKfD3+V5*XBd9vV^td!E$dgzP%v)<=HL;VyQ;L&t4f$E|3fSxlQT%>&@&R?#ZD zi$3juz76^%ni~;lu6UCtUgD#CWJjDj&ix43ybb_JWFRH9J%iDaoQ9DWfht7#y#)Ym zg1!r}-}pJp=rG2P2@HVLj3XzA;#B$(=qFeO1UekUTU)+F2DccTg*5Z(t@Bx41HgiO z9>eiQ)j$lUuM53PnTrGQ3#c_OrA&zk@|-=4W@dKTtAIfmDJbtmliA5>m+vkuB7)4s zK$2M!#;y+~WNGRAY2hW7m}lgt@KIVA z5mIwpb$doD0C_1-s|$h738+WH%`m10@(QQZkfeC=&>3RnF|%jc?itb;Sn^hiQ+rDM zRudE?Y1ln^hFKgtZJW9sszFjhP#;U%*;mcl%P9RZ;RQ&-`09ZAPH_@na=+W2WpdsX z#~1Lox`vw(5MUGnBwL4puv!12p9Yx`Gmui~N{0*rXlOJfFi6}0rU-O(C9}s8i!304 zlk;bgss8nGi*qv5%V-PbmB@iZ5y4jnLKAJw3g80Go9B`AT zEC>lWeCu#VKr}2?4EqKNl+Qm}b;^tx4cR5V03g<_p7BBG6QGZRel0{C17TLv8Qd6a zQZO#$GfCn~P+6(-$ZCW@bNS0JVB*>&=+^e_YfVPIyVX0_T@z8fqPxlYOT!mZ1P?y#M;<XYbH$ z0}{>(sO{KGppbF~p?JFJL_#!6V&uu->tmHVjrWK~cF*m@rh_t$vHEvPCf zz}L98L%E($l1t2W;$q9))hTH8WqRlT*!JiT{hta0!WQrU;x_9XeT4Hb{8%6fsB}ZW z*4L3UBt$4QDlCvBgv2Z_rd6aa|B2r9#j>B{t0l{^;LQYrEv_E{K>|V>-iC|zDfcA4 zkUvNR%D?}q(XZ>RA5S&sr*cZlwbxIh)PQ8jH7WJWy9b+(mQD)me2`l2_=0@Su1@I? zK^7z7V$e9x;KkrWs2iY^_>`})_`-fKz4Nyo++Kg@QGai7{rgWM^#&?YTvbW@2Gy__ zA+Z0G=g2T6XOQ4%`>9X;INqA=o^1ZgrT6mW-MfR7U2~oGdWLlpJE+1Lm;k;J1a`Mm zYPoLi$397tIxO{o0(8%i9fkT(j8nWs0vLcVkCMb`I5(x@KonF&QBcrzrayt11`9^| zn2%sR?(Vp|Ukd}~x}GF~W+SV(gQe~f7OhvE$Unv&1O8`6gELZ#DH3sPQajaL}ohOaSf9$7XI z^@IDhMeu?3hjj41mYess+Pqf3`N+!F-(T;1zux-y_SsRAa;|pIL4rQHTWiW>>H}Qw zE@qE5ElZULD=nnWS3KP7ui0N*Wq4RUIND;w`mcX)>*4(^Ht%~egy^uW{<*B4=FY6x zKUHhQAYoNqrwJl1g90`$aA z8J26C?B-R9{RLDMM0=QrZ7%Yu5k2#qbPs@YElQawt!Zb@R&tHKfa|q&+CM)1d5QJw z^=||RAMkq-egpp-M(YCp&Cj`y>M0t++woRDZ|j%jI&b@75{d_mGv+$jE?FAsk7b25 z>vWPri>|Qqk%#xU9NzK8?WlB50uDp7 z+duT5*ROt`c{uEzV^2>P&rzl)ed(<6eEILpQ!axoU3~DX{kt_SPNYQ=mErU;cAmY# zaOCghRP9)M1P_}IzMhx0C>hpzv%mbK3f`z2US}BI#pbpbqP;SD9-6oNJOA6iYgAO_ zM{{qkr7??xh>PeSG{OIUvl92+1q3+gwpr5xm3x zc)G=b4Z6^>=~0b1g<-Zw>$jn#wiRrA#zUjHyV?u8<3WnUVLtuDb>{fletR zJ)q;^5YGVanVI51b}(jIUBJZMePgpEbu{wy;yTk5xa(Eh_meBG-~UPQ9)D@y`;R_4 zKe%}AFCKmm&tSy5x1R&g`TyL556=SaQ%by8PL!^MzCC2G5*o#}kTg#rlK#G|6sKkM zIN)hvRf1^$dkVxsGP;)Qon=@Byb7&J9sGk;KGZe#HHoo ze!G*e{6dq&B}eNiAG{eiaaT}BH!?Lc!8=jqw=*9QK)lRU01QC&yw@FxUo!6KQz8{Kj`-d9>F5x%CbH z*MSu)lQ2qSFi}db72jB}J4M2jj4}=p3!PXx&re z)W<2#cQ0VRebhLFmcMshx$g(3?>|Pws+2>d!OOyOnxUu#DFj38Srp_$wJZ;&-?T7u zOQ>~VliYKIX^+Vk2}YF7Mn02Rl~%FLrxnBepWMvbceT%UUk?LNd;vGm$rQw@;+JI{ zdXFsIPyRdldw<1PPA!8h1{n9;H367R+&2V95@Xuk_OfIqtciWk2b6tpS?FxM{;-Sp zxOs^mX)j?R!^Yn2*`p|TcBVRrcNc8gOkW!C@gbARZANfLEFmyYvoWo`px$!W2e7?Q_} z!x2c?5cyiCS3u`NzR5#*XpWl6mPRnpw zdXGwPQhIq&7ab45xIXJ}Z=xVYxz2G1P;?^@6gp)tqs3)Al`sf3D1f6VlbZvq-&&}S z&?(5?%dj^*ix^15&J)94?&UjJds%&5T( zOYUN#;C{y0s8YKCK3cV$pHE@Xid=JiI$IjT8(~G#0|R@9X8sLnG>cv&cQa{m#;sa@ zzyIj@WJ3}b^SR91swyF@nR8k!k_r;{Qx$D!(l(k|j3|>bDh%E0SDQb3`LRCjy>Qes z0wW@$TPXnfI0^`ie)wNd={+vJrz^*&|G(<$dsD_~o+{~F_;Bw;%PQe2d@^&uG2cJ| z7<&%6omTaA_5-=of^w7JX8Oj*KY|~|OZYkPS#*g$2+OB2S+xG2&*}K&OCLRnTSJo8 zB$qXpiZWTh=%Y1Hzv5I6dKD<%e3wtoE*z9=Q39~pO|9Z^?9xabrJ3yB@8V1I$Z&6U zY*#%-?kY*R3vh=rGEKjgpPbIciT!O+dBD^{BiWdwhDrU}7oIjoz296{8Az*$fJD>e zFeia`i+kHhsVWqEOFH%YFJi31h9;;*B|?_QGgaNBB$!KzZHQDWudrHl0y#XZ5oC5bDp;An}0j&eNpL3p53`w;#V@L_oJbze;X{dd2Q zxd3%Qiocz9=Q)eWynDE~i&c(RV(0mKRc8Vfx_= zOu}1@$=3AzBfbD1qizfFD2=zf-FyXwFkZ??bSZh9m_~Y@%{zq4iUSUHu+fDA^jysbE&n)w) zmRvVSdBK0@pB(<`Jo~#p51xGcTfg@wv(%qFO>Vn0Ia+S-(j$>v-BKlCDCxyN^cPj| zn5s&=Wx4$|9nw9xgW}4DgK`DJ>qpu9y#?88Dxw{>(K&RNwsOaD+;L}*v`&iLmQCXP zQ7YEk7Mt^U-QKO!X;q~(R&z2$Fp>FD$jt|YZwGZ()X|b6f&wj{OerVrLJWY zu74W%3Gl5qp2x5Hy2H!(B89`mf6AwQ-q$_tE8K1?Z;&}Dxg2ZLIw`3#opIu3FcK~O z_F68w+)*4QNNlJJK@FCX+#g6Q#jM_KTaRt)YgQKBaok-r;12rMpegZI0S`e(d6;|X4=~wR#+Qq z)^{x6NRo-9%qyj!)X7pQ1(k1Gn5qcw$tpL?(}()bZ*%j?Oz!SlznCf<2b`I2pf#u) z2<+ZJenLO~@C)Qq-lZbHSI)K?zI`hK0ysCN!UXPx%k(nre<8fyE*8UOHh!`vy`B1R z*3)0UAw;}4()^%13kp$MuGdxEzhqs;WTX~u-^B5nsxEL;UGLhEn~8-svVVLOVwJ2y zKrk>sX~a<0*`-u+QYm?{lF!eXTQj@yYVfZ35ejIN14SK20pi>b`n2~|uiL-Ayi1F}vE}HCW(XuFBaSGKbUpu(z<+7GT5Ed!Okg!L6}z*fbB)L7c#`~S|x zrPkHF@6tCdm-g`CJrxl^%alGI0iECjaPPJa_3Y98k1zc+d%yYS)hB-gw-r_IFqi%~ ziK#3h&0GqgM5acn7_<@pn#wzE7fw<(D9n;;J zf6?`^H>rq#VUkP+28A^M)96Y{Wa+G-{IxF&9RLS69}X*9!&=k<)XPRIPz1XL6gUo! znfVQjZy?RHppH6&(w)R;!+{teQb+Nn1mGzFM#6?NKDhPe#c8eL&`;Oe7K2K6;UyeB zM$qD8$>oQ2KH3*~5iFnu*&|}JgZi;O;9vjO`LR7zm2nxgp}JH>|H&^P`*i5FQtJ;k zF??brtI9+YiZZSQuUq~kaIZNX4!$aV{1wLkm-)O`^-4qsxbNcgG*6Va%((~^NKo^( zLckAe-nLXF9UN=u<~4ZWxl4iU$k7gh60_cU*LuPpacp4svSGu5Zqd*I6B^y#jb-h=qL^fD5$fxzcbe% zq>L$_p>D0UH4sOVI2K6^t3}gnhmJFstwRC>K9p(+czW2kC&8qb(VGtq-`5}+AOyYm zpDaY>l|BvDT{l#e34(Sh`lW!z;_91M&G2^L&F!0(ch=iB&}HH6vCfYtVY^5R`&)lU zOsd5N!JK=?_2Fc8ftk9GlK>9ZdOar~lM@zBZGei@$-GUMlAr>3n@Dd*A7`$`hzThG zs9!}$NL?Y>#Kk0*N$U)5R!KU*cCYh!N>FJ?4JnbA)>@0+Ub_nuhjiM)!osFwPyq1# zbtR?(XXR3BW)CAmSU(~0xHw60JMg+R%fosNU+G~C2E$k zQUiM~)I`jLlrW60EG#Q+$pxU9&Q2-PB2&H~^NJi(?&=Y*JqnkMD*5{jEt6;s=- zhm-v!_;IVlVHFoQ+-~=7yFNNAvB_q3z-Rv5T&U37|BG;tSL;6$XacI~EZ`wz#gm>r^X z5G)}P_q5+sXZJr@AOfKeeM%4_#3MieG8qdJ397I|DcaC@641nc7{_(xkU1!Im{Nz? zwbxYb)>>FVmf`@{0kocHVQAPAWUd&4A$2J0?ybk|O95aEd;oJZUngq+hkUO4fE)rM z4o8G07Yee3yh~*WRz=&rlxZwa=33n_jCts_rJIkM&~!7HEl|wB9W6}T5(P`~Rr;o` zj=SE}V;a9i`jh2YJECqRjS?M_NQp~KwA5%cipiEb>SWI-RhqfBHlJ#M1Q2sYZA@Sw zAZoiE&}FgQRKvYJNb~(hYn#<_rp?MdEtEd1&&;LYf9AIJWifF(6mugKbDN3hA2$sE zCjwT(x*q3Y&6}K>d%?WuN(hptebOcsAP{PBH4bApAk>@y=@nR{5D+ZOAB0LM28%>r z+vxPKi(e<0m^!VCyUI`9H8l*BvAT{bcMliUgEmt$kKF~37JvlOkkH5Gxo80qnKs&> zY~{Ig9dQVkqw{3_2>>1`um+$EBz*+!0aPLY_A$0;QdTMDZW>)`i7>6|Ry|qTiDuJS zO{;h?*j0GXe26)3W{8;qc)`bV)hk`M^w5}UO@rd zCaY(kjjhHNkX60Me%uAAN#O&a1W-hct`ko@>@aI>%?e8?iCKd@bSW=&zCGO8 zi}e;?*2}x=dUpI0u+jUw)mTU&rrZplebEqRCEE+X;u7v>L7qL^TfJw%mHU_=` zaJ3UB9aT~&O`}-lXp@bmYHO&`Muf`DZn(iJR?F5Z`zGVb6~s%tiWMve37?-U~mgaU_jFear@~Oipy6rfJe# zNVvLTbyJz|T*$64xK$51|NpAv{ z79m6w*5c-zpsa)ewQ6NzNI3;2Hv8#nB;YJa2*uoW z8JQc`Q~jc~kix+GT>t*xSPU|^3ti}{f(^s;6IWV#t^Ql1T5QXA%3T-SIpVID1P;0B zX}{U)x}$j--9L^?Qfr+CN(zS1=Eek5@3JmJtghuvD+mB|9rO)c|5Vg1eFv-QCd{{2 zSzx*A8Xq+Yb0vs~)G=!1DAJ(OR9tE^>gfeFi`-Xfn5!%f&%x_yDD&~$g2(^$139`) zQ51K?o%+co${tF6z~)=0BNOyJE;+T+jQMdG+5yCOi=h<8uG0Fv@Voq4% zxMH}y^(w@jNrOTMv-)vp4gR~P55b5e0JPFCLH`>Q3~sbNChoeb8Z5JPI^8RXxOrQf zCk~u6TE3-?PyY5=-^ukGl;ituin}5478B2rkl*#Subh8)@FVoeMJPj{Zhc_2Z(x9t zJM(6KOXI7cW~0H5P;J8bP9SW`vQfyp)gsqt0IZ59QuSy?lDob47}5=^#CG7Y4W}() z_ZAMnROC##>ynALM~7mTQQRAO3dOMn$na4>;n+Vtgch?@hq7;PSo&33{3 zfVMzi1O0Q*%Rsa6j7Y}IE$yH~pj~+WyPOtYx8bnC>FL8YmF!%JR4!$H|KI%Tf8p}lpnLNiuy zFeXRe1pQOcf5#X1=MhPn#>o#u{|C(`bJy?xE`C*Rii7C5)M*!lw2j_0c)N?Gj0^3V z{_}4uj^?#kU4Ly@c=M0-Y&H*`)%K&Ob@%KU?cDQx0EW8gX`~jYg7K39$Z=#~JU}i- zTzF{*em*`pn{-!wz^sO0ERaLW+IO0WuE}8f;)|9E6N>j2ny$(bWn0vLuIFwY44sW{_pS*p_5CBEG ziqCO6^$;Lw&rlnU0JaWzJBLoqu!GaV_S=u25y+Y(VDZK(X=;ZWtP*k2IIHSr;UaZq zG*zv)w@Ta0I$1pV?>`lT0o~#4 zY|Z1RKlxWLEIiXiqmNhMY-j9@cft8XMnj%?}+FjAmG=h(fdwV)u2Q zdOY;p@b!t!bB@uBI$9iGn0{T~qJ#eZ7e4dQ3txToRkM?oD`jNcd3>}_eQ?JW>_QQ_ zVt`sjLPCHN@PN2t!ZL?mRM+KlExK&lFmn?~U^eYLAF28>BU_B_|BLVX*^i#})+1g3 zMFE_-FI~W1B2`aA04O8{1EdVl^$nX8k~wV&^LfP+15i+WmdunvUrV^IyEa4sm<2im z+5nBvT8lx)Qo03Gq)pHrbRKvdtz-TX06bT1sHUyLaJO@poLuE^(@_`Y6I-`8z4rbO zK6Q_se!JF9d!x`j`0xr(2e>-|a)L$7;=&1e^AeWcNSfZRr7Z~)_@Yic&urep-S(hd z*R0RPb^Tl?e)#@BkdbBygB=`g%1OViv(j6??M@J`V4TiMUs=DdWq&@FC$8Tg|0e@% zp1j22a1!q@{18PzJ*vdIP7K#*yA7*@6RX?+_cA^4?sIszdzhPO?#*Npee!XY@CEuW z*ZcYd7Zq>fR-e63FFqSDo_I(->DI+3HQIjM+l}1houu&v>e#r^Hs|W?;8$-9FDFd6 z7`lCYQa!E>2cZV;t{9C$8>=8v23iah&-2zPyR+d@qbb7BB4`!#YS0p>Kr<#Ry#Cn> z*W|pUjOl=Pw(u~#^JU9Wv4)f$kFxL{<=x@kAVln1xK&XH;2&~TdK}#WOgxyNyGImA zAc_n3U%dF{*WY#5A`p}zTxeLsy-(i?B6EjEI@@yph1a!n-1qaZUg{p7D0FWBFbmN+ zqpbhLhbGWDcX@8sW7t73gfInBH^yK{uwen#5qJ7k+gsls(W!#D7SCna^A>$%g-~Ut zlp!mlMer7@^YLu8brLB1eTBBN-t2T`G+CV{Up>m>nMn!j;&B>%$F)**iT|f058ENO z>+QoM3rQ64lB4m%@Md?oLm6vum|XDaOQ_usw~nk7k4$EtoB!JM>^p)kMkAgelE4Fu zfr%rcu+4n+F4GqT4f;-PYXc5l*ZVJAmm{swKJ2iyX&0g^t_FvbGI9k9BHg}L49Hc{ zh+rprIq1cB*K`h@xvBIh_P@dr9lj7IDWJ#D5$sgkK z7V>|;rHNwKI_K-<{2%>&3;6U6&_4qGJrt10oHOY#igTtd>t59=iqyyTuSySt9>?O@ zFkf_;Nxzh73lp#PomhYKhKHa3Ss`=zbMWH1{z~(WhfF7P+W@K|WyI^2bMt~i^>iil zBOp-MyA90p4EN;aJbT3vss&L&!~~F0$W{d&ogRF(?tfF(48aHT-^Ac$9Tk_11kxbm zgIX1~=0$1|)U3#bg)S*H(`$@WKyv};m?gbtIe5?n_7x$Q- z-LvMUYx>B|@v)oZtLlUH{?LuP!$-y*G=7*(aH+JTnG-i1J$=I5sw8SZs2G3eIpxc>XW`NVF8}}|YAMX34t$E3xN0KZgPjkcv)F58$8A>~aa_)L=0@*w z`pH{4e7X2!8NL0*`0rnEO&Ol?9InNO$ezL}pDQEk?3B6Rn&X06y}$k{gA8n6sTWt; zrYCrGzH^mszWi@~fZKl{rCXJ>{&THXPgW-H_2zl;m{%TLvz_UmYz{<`N>vq7jMN@u zBk>y9x8IJ-gB!vXxCGl1329R|npAQ%`KAOk9)N4FaHe%lTFtNcqc=t$jNj_d^hfgj z8Erqlh+VjoBxhZSa6tEL<7A7^Z@n)JqP+cu0NxjrqLK+_)@^zX>eu# z^pUcxAj~p*L6w)m61W|3Al@Wg?3qYWM-Jy6B=J<_Q-cdltbd)vcb}z-=OcL!Ch&q; z6IblCGp*vI(*2-W80urqVgzQWO!qqR>dhW~jj!d&KZQTyx$`{E&y}dtr#z+9!Ky#i zmFePB5z1owjuJ>D4Th7cU3^2-?CLZ|OXL z|EXv1efFBEYdRnR<0=Nrunne*+3L;Vr6PKs2?=x47Jf zr3m3+Jas|$Vf^0oInXmGPz54TGp2SK?6$L^Leh6z7mUDMQ~(!cxO<$w4AM!N*J7#i zsrElEE6~W}_@hASepnZ~T&Ht?H?gIcH?E0`1M9o2Pw7jE!2sMz$LWfo=nn}&P!uFN$U;iTf1cavu|Amj{+~Z4u z+L+Z-^jjMWqOk|L`i^GWz*Kq)K(4rYc0J&EgE`$5T5_+v^@#2>0;Ie-xwGj}&<(T#K&7Vl9;N-YUuE-ieJ&g(SLaTt>Yxis zopyC{p0OPNZRy~Dj_l3%H>kO|Zr>NJt-<&)j2 zNg>fMhtv5hkgwA)5ux-$5r*s|pP&pOOaWkaTD@qe8Po^;1at|hg7Llc;Q~LOKj5$b z{COTfjn_#};0OL3_-LNWPv%ehsl4!o=RaWBw^(pHTG!^2YWk!&l){CoC+pYQA6!_@aa$9w=&f5_ zEL@4!u%-jXGlPoZK6-B+u(P^6;r*@O`O-b^w;q)4sMp&68WoHT2nxt&fSRY$to8pt z6HaIQ`{3OFef_-4kE`<&K$iwHmDe%@dk7SeE)%P`>cN~iJL;?5Q4P|#R9AvD_}BhC zF$h5hl<#I?w*O&)34;`T2JY_h18Xcr{9C?TpYi>{XL5IPye&KcBk5TjvRbTOObtZf znSfr4_cD7T9{i4O=LVGV5n00J%&B`$69s`X5{sa!;xx*KcC z$FUqwhwUGaf1EokX^|3{nE0kH2>77rtuU6N;gL=VR*GX4T|o0U>qJLiV;cqe+XllLKi z{bTU*iSW!<3nPro>O%n@QB;+D0T-{pV7>~ow<^(V=Dp?7>F1iIi2qZ5S1cpJgs21& zc9MRf+CQU!s8GE^HO~~Vh14u`E`7%C?whYLE$+AX#sEUho-#f~o0tM0Vhr7f`m-N< zUE=tt#MHl{2~OzgOiO0 z6KNi+mL0z6hCAiDX&GZ^5~6$cIv`jN_WW@vT0Tmo-M1s{z2idZX99YdMRSKQ(gZh97N%G=e$_Gwv7dt=j;omuZ-EelZ=f|$u^ zl1BR9QktjbFZx>^{3HL>uk+^#&%6f~2AN#|3iQvyMTo7X8*gok%H4F+jk{)5-L{w; zePKGiFcjhMDJawJr&;7GXMzYjNqecx^=@*r5WTyZ*-sz1y}D?7RWQiS8&k|p@q84= zjR!pr`iG!3G?)h`&-tx}N9akx^myKieHYDY^;S(cGrZB%2mKiIBkX5D?{%1x`Cs<7y*LZz%e+GFFIs$qkRy+v0)4?;|lXvtXOu;^wnS7 z;>iZbwVyi+P%vmM2G&9>q^z&P+Vx#LT8~033!hD+Fkv#)qJ2Z#3s)$y#vFff>kF0igska%+@h*3c-r>SJ z+%|T@GzGxKl@p67f*e5+d;b9r!Gqsz5(vOE=$SKaMS~f8!K3iOzkgKy&GDFNpMhWh ztJaK_1O@%@kJ>f zaAp_&Qk^K6?PX{pP`O!$m3xP0L+(5t@Nuc6Qc<6|q?9w3k_eg*=wG8eH(c(Mk0gM} zR9gp+K@xY7xoh2MoSFcbVcO7|G~UFYTl)`n;%q`O!$UcmuUx9w{fh!`%3?}r2#`au zh{icE5D#8XZ2$u_j_X-=CY{2~Zg}HmIhwsJ4-S+5{P;H zAYu^OCooVb3aG0b@Mqs$$OK*6^&o^3o1BpI4&A$zBW{s6`%+1>b?18uANE({h%DH^ zs$b2w20)~WvnO<{UPiO`9maCm-JDCTPYqx*Cx2cb~jp1qEn0_T+FTen%qa*#~~GnBhFq)%Mc3<00Zy{ z7dA+T9dxQ99#85WTTh0|+TvmJjo&CVq`uJy5~#JYVGb=|r@d$ebP+3P2?xxejI)mb zf@-xtI~Zv@VQz5Hjisotwxsepuhi5~V|yvZSx;~kLWmaa45SG*nYlA#{ofctWi-X} zZTokhk`WmlKmQL-q`^a5!I2h)%kJsMFY8c zQ)mn0j~vr+=nOzy@xS?uea*PVi~ftR*GYYO-`-+a#1tD&O&zg60`Wkdi#NCYcIv3t z7)aB|=ksmZwOKS7$ub{kQtqq*Nz$KT=Zo~rt3)6G?F1Y^RRJZxb5?AALnTlTO)#OV zFkGcUcJFAT zh+qVX^N#VO=c&JeAZ%a+3V?mi8>g^w)AY^qU+&u!vVSf%YMMStP}8iM)ri ze%-vK@X*h~i+(5gWeUt8@v%ohh2co449o@VVxb*L1y}=KgM(Ju1&yMRxucn}kZl%b`;Kc# z+;v?;CQiv?F6?TDL-v@u?WiLcXU~v_1R=;1027*5(Q%wvSTUyoMhvFhi=0NG&i>nC z!M%6kEs_h0(`f~uhj9#W>wBJf#a+9OWQzeBvaPMn^H`gOM4fNW6QZf>vXLYUDJ6#c zEQ+bt!yAAzlu}i2>L2%U=zKn`D$?+VRwE><>WD@W9?K4NReb5r6Lh(-UO%V`33T8os9i8eg-vST^eI!S{ z$l&~_Pfz}3Nl0Jb)ep(W^`guXag;$$0sy)Rx{h_UjB(?7s1N!S=rUG&rYwhz>WZA` zT3ouW%Re$KO43x(xiVNA(gjGH3;{DUzm6t-kGs3pxU4Va(!}V%T_xJ>lC0cH3^zrJ zq7b5CrsfU|(6FWh)@qbENpzELPjlE`E!^JcoH!SqIOm;^%i-YlNRijeJNxZT*?XH~ zx1m&<$|CE*%%&%?uBT_ehGrO7fC@08bm`gi22Njx65 za~d2qX>B@PRl}f~%xqXKo~O<6LvwZqF_@aC-W_n1jkmNwG7zn@84hYwp3107wN)di zrO;I(YZ)}9l|4$QZCa<(YcpJ&xZ;$lGcH*;G1vM}?5~G})-W&i7Uk%Ke55Cxiwhs3 zqoH|zp*{!rrwo(~_mF!2%+)9eFm6o8@dXg=GR5xVJzcpuo~KLcw3a%bBqiA2%7R(G zElDKt45r$i!n=1uXdDD+VPtOxgvq^0%aD)%>_-tr>hH*P6=vA9tq?I0H`1{9{`yVd zwqq4vf15`x(G_6ACti2Jk)9B7uK37qj&W?%t{gf&Yaig9#G@+9_IvP19-*hDB8pwJ zyOc2~V1PgjIvBJDEYXRhnKN_hr1P~(EO-s1S%6$)?2!UZbJ;(I}o}#KAw&Su^Ul=_pZJo+R>be%<{K50kUFHn9 zCmPB;VO-m4w3M(eXtI**SkS4^BkWSOtzHFHMic_j2ns|4SY_8{($cO?uU&hz&1Ceb zn7DAsMP-T;CwRRqxV3pP!+BBiz7p1B1^BdwvyGP%fZ0TGo)Esd0?XiLaOfujEd6@iXAh-<$)hND*k!H1%d~+!ST23P@n$YnU)-(-{rhYuB#ropiJdQV!D0Oa|4}<9hB| z48CkfSS>4Z<^GG!(@rg^^3(`SZtXFc>=n!f6{ZoO9>z^r4bOF4ti9o;-RNNXys5Vr z=+$kKl5C#cOyjA^Jeu9LXmN!*MOT3)Vv{}6zT!A&I=JNpUC8PEM3oS#y_+hL1kr$A zTlz^DxnSb8ZME~nl%?Jc8*3p5h>i@@ZTWOwsUpbXC?qKJid|DL4RgRu0W+mB3uH84 z)39sPdTp9R(WRPjXX}=Aw`DiigIluT)}#w-%byXyv+z2AKm<|9@Y=-Y|6S_#+ zgL|;N_f?#Alm+)jC1FFqvKim{$`~=E0ucs<3fTz3Q4&*|t3)X}%1dAA@Yx-z$31>QD`*T)|NsF*V!Kqo|fS z<0@o`X4PvYpVl$YcthfJzY|wc9Iu>WZda!=_;Enx_g!!i)6GNs6F)h#%PAUkonRn> zaV@HoF|(yfs`Qu(4ryLqZoW~v`IbgbvugkXh$xC|vkJBs0M5#kl+Em6byLRTYR8sE z-|E|%D7l|2Sjt(NBVbrgzOI59gv z-WEk!c~HYIKnT$qtipkF1KiqGyzQl{2-ygiqgmVH3cWzRu{vk_H*eiNM;WtO0*qwW z%2#w_D4?wrjR(2N_42m2YMW@i2;fZs0wMz0l0q$QZ5lP@p3r9@W0i$Y>o4cav5#4q zVp?A1T}lx+9r~jv^I-gmi^kxw=og?qObyfkq;%*+H(4o>&)R&xIYhzNn%L1~YYv2J zq3G+w6$gCxqgaB(J*%ubX-_GEsA)!I@J5e4H>ViTWzaQr(;}!qZFvT&l2XW9%eK6( z`7Y%V3Gh?wJA6=~hAdy8TEh?p0hx9kN9$gtVV{IUjYFC}U>OPABE(WHIaPDSWuzK& zuEqHv!7vC90@Tw4X625fEfgESwfpN_ghIAL#k>*Aab^E3zmBy~lQxaX#t!rDRYsTr zIfH<(ruqhyQWDwH5^s-*-ZDO?j%_aS1TF`O0=j7k1d<5ZRI$9s<`uM5Qs$L}O6xAn zwCOaO?zonNG6uS_tSTIHj!1d|9>Bw@osOZ)pzneH7rZ#}uR$a@Gz}};?MWw&4V6t_uh2C}JTMJ+hsx`uOVcYodsWO(~3WVdPqBr@-pJLd$d7z|jmCYVJ5#aiT& ztVBzb$8t-i7Y)E%E|-gs*ig_4%m55sYi4^!0f5x$ne7(pE84?ay9bB3kbiu1+-4lA zVof={%}*SH>;nXJ8Y?>KE1*6+hyhJzVfAWQJ-#E5-0Lc3TsCx9_m5rWM)F=TB)ZWM zmE+c$Nqf7V+{U7I2p$pX?fX8~W*2A;XebLS0W(w_bIszWB8v>DSc+2xtQMoe`$&$Y z+DDV~ov!?|ef4Gp%+%v(7PJ7s7bXFa82EJki;lO7S)<9e?BXo?aC(;88Hh}m(jsfW}7C`1G<6inqgivBvG^QOdCF5}%43_Mp+A_NvAa1PrTdU?$XtphBZit50+$ zZii&;&$)8S-F+-xw?2#8g8>9Q^Mn83jr2corVqa_<-uZ&4ry^j*+cPNKJ#2r+QmV( zyuWoD=g}tdGDOS_IL`^7vxeK?TAQ!Wj$G0&KdqUE-fX+n=>>adY!+7KwKl+TJmX|B zBP|l*s+Pt(wKc0yugTJQby&h#KXe|tT*H1+xet94bqmC5Z&vF=_D}*6{=vKD4X)R9 zJ$>sXV2}`yA_R~RI}-uY2`Nz^WuI3vw-&I*lP{pFoYmVivA-5v$4q=v;nQ5tt2&zx+egxqT)q9mF6)U#+~a-qJXI##+9itr8S zmpBL$Jh5;*Er33Wi6WtI>SX6RlZOgn_RY~;zze1MAk!ylHMG=g5#OWyuCJXv8dKuo zJuHQM@nyIQW!F_`%|RsMRsjOFg63M&f#gh_Y95Q!wN7vw(3-9>-MnfYt$xrzN@J0L ztI+!adIxs$anjRZ4@|Qi8!vm`>uT~`&sv+zP3Ozd>N1>1OJ$R11RJ3iujgnU>k|13 zl!spQ!+i%?(!K4Y_ADvDA`Jx~7?TLzSk8?-pOiGE1(p-8rh=Hwr4ReP{yMCn@u1Fj zIMwnMz4HgvG!g`~ft~lIw_!R&B82KR(JAvD27v%igxn}MCcb)VPAt8wPlSN9+O~t! z2vSR;u@8cI=Vl(R&+>J5+uGi4AA0FG7R8{7GMBMcLt{+^)%3JQ%2pkCMi&W58mADe zm{D{6UmqFTWa|0nZr5}}0>zaNNoVk`>FuC|l=VT%b7b;^F#05vN z?9|jqQqhG<%6{+M<&sJQ^@zl3cF(x5lIZ@jA3`*j#?BY1<0sPsjzlUUF=oKb(<=Zm zZ^WI$)F%tB^f7&ope33XX+JE;r}x%r#1(-5vcxThxKX41@ci(ZUc27(3)H)L*j6;u zCKI$8Rt_krfG!$E%}6N;SxD(a-Czs3WS30Doo+5>>bNcD{P}525X}22X$|{*5Fp?p z+ft&U?185~-$y=i$(M{p(tPjc){D#sao&#@TaZl_0TIQhVWi%U>p5DcU;4To4&CBL zS@iCC64LEJ+U6CkF%--Y&9T;Ip*p3JjPBo@s8zJFXnuz`#)Ups*SPhtyT>PFOfH(Q ze1KlS;#stUaefj4mMxDT$EJp%Gv(N`^eNY-nbIN+39WTJ65y%y{_T~{xA#q%zu?r~ zO5NM#?jOHUd2F6v-6LjL-A*k=1{E?h4!o&p1Rc-s^-7cEIeS@>))0HJhkhnhWHU6h zSSg4Rp4k7P{2Pyf2n#l$T{4#5W&PZF$>Cw1)w*-<{2Ubk}EUz)B7R z%sxOPXpG#ao(jMCYWLU$*Qax89iR2S-QQnsxFfoHlUo_rRSVz|P(i8L*=Y=s22>;| zGfnd`DhpAtR)lC>FSy0!gKC){AbzFX5cmmb4-`T)k%2h8N&JRCLAa@O}sMTDH^IUk(fyNr9)RH7`h8OD$e zyows3+p%!uTK>tt&X+>0l_#{2GvzT;*4=N1Bo{;KH3r%(&?hz_!HgC{N^erm$6;vA zHAHz~1?AMD>-jAAkQU?l>Dh&QPp7otV1K?P^F(BF7>aHUnCy30aPqXV1QE~{j>iEj z6WdLZel4>`OZN_dgO@1|5I_I~dj$mIdz9xaEi#bpX@#1r1sv%ZLQbo8mI%VB` z`|H{Y0yCAK1Ly))K$wlhx;b;dwHrYgJG{dkui8e2H)?FpqfY}mG2@1Y2D7L9Va>Vy z2=uO6Hx2onvoNo*IKSzPYKwA={{{rcIg2Efuf^Ma<4SM&?fS?%MZf5EyG!+8mE~bA zkSrn#+gwOWbKgqi`9d^CFA+SSkunUe^er6LgHw27Vdt0?5J^a6?+F&erwi2qcS@bB z2nav`slJbN5@qIuEY#1F=reLntJF+zAdaLJe9w;+xW)My(0_k^I-D>1;g3IJa(K(7 z&&|i`HtEB?dFX|~vgdPpw(T57Y@mjng0w%Lt5Na~fEzRbayl)9oc5(M`;Ao*L%>2N z;c9do_1s0>d~`1D96Js$PerUq(>Ol3i65GKj8)~$Dr87#51FQ9ZbGSp-1~a-?|l04 zrN|f}(4oN+BPs5Lh3#i}=jg5u&Ndw`%5xDDL-L)76S{e1zVpWAK_~E4eE3BRts7Lo zNVS8Ku$rWw3;KsO1p*X17|%q+L^5P`_W=8Kb)lweT)P9iy$M#3r=|e1jIh+cpZ`mpfgDG6jLJm+!<{b26$5_VLHv@AMYMYfy7l?tsLv{ zeYcN0u7gRl2%0T7+MShQC+l^lqD~_((nW_U%lkebRSu>#5X3%DM`P?1{~^#BOEhJ(9rHjxb8Q-}0T^>~>} zg$nSA`^4_3xNygBthq*$cuAAb;aF0mBCv6B{8l@ZT1@?XG9|Qoe9lbGhrY{$PdtOV z-9E>v4xf$dzcnxBidwQpol7D**1F){#OEI!&FXJB zyWWiGSTaEKLPK4cgueYfz?SIr7%l<BFV-%i>mdY!GTi$K?fzmu6m+Gwc5! z1#jN>W`$Jr#iG=vr8*0?^nX%D{#WLW+tkw5LTV+AD?2mX1LH6<#p=QFqP(-+c^C2A zR7C*}e)2|I!OlK5GW1kq45&pjmOsUT?sT)Cz*Mj$<*j?KTur>x*@Hu@FUs zV3&dj|HKye(HmbRVMY~6r#nnq(#FRDdsZ-_AGIb~7%XLnrQTe6IUS_WAk$i_gmS z6aV9-Iy{pNZZqO3tBO?{db&BOcvQxh>YbB7z9U*eS1U-a$jfz4k46vWhnl9vq5~fz zs3h9GS`SaJ|lvH&yi=-a2(N`QOnivYP@RlKC5lPw|QTaKqOKUw$OK_)55b zfgllV@yN9Ks@;3R!?CAD5_I9so%z;nUdvpnnPF5P(?5^E$jvdmWFQXWq%rT16t&Tc z4Il`%q0>?7{60MY>G*g5^rbYe0vr_*!t z%u^de!lN|8g#su#hp9&E2xdLFsXaD)dPy0yL?MT+#nTS*s`_XuB z2d3fqo`~Hzmwa4TggqZ()Aivoi#}vb;>JoJbQ-h*s(?EDRDSoP5BTKp4}T~86d+5EW{CNhb4xeJ1%t}%(Qz13 zvwb1zAg{YxJQg4joc&kv1Nc7p03&I4-Y3y!ZMgUTMYz9czIeg^|MK5|_a9$H5CkLw zf{#%xOM*n)JnHg1#lSwuhr7PjSW=%$p-CuOohkE~-abJnC&7ns`F+CT#w`~|>l(35 znDD~Ta4}2|!hA8}NGu-G7C-ctpB}c8+w4di<Cbt{4^06SpXkj28>#@$%5X z?ei~lC0UmO1QUz&b?hyI#6)4-PKz1}$1Iyim(bB;T){h?e+wkuaD_1)98Qo1d^p^@ z9M@sX<5lS~UDGUNsw!w2UXO{ly$(SkbJb8F!W?hfG2+6sDW>@9d79tNwPYMQyaFWbke?JfuUomI!# z=Ec~+-;4ylp%3GuP3iXhB*fH(^Uhv++*ClgZs*6rTa^pSQMsn8Po2B!?;P!svt8~F z^*%n2b!$Qc6{9x(R)%SEX#pm8v`&Y>#}*_ypK@pyF z)7aJ2pFm9*)%mKlE!Et_&6VGn* zKHSB=@>`O4avhC5)!N-Wv569FP35%)U<_&stXCSXOd5uEoH6wua|ghF2`8u3o+p*0 zgaiPsq0&mHXF`vv_J$^T|NC_m`n-K{92{p&Ww4-Sj^0cGRGzN~Sh$JU)%AP0r8?j0 zr^7O%ZsBScTs?1pYJtKJK5m8wFOizLP8x&m;FD$xy_^7(B zrB>~TMr%*WaxK9oXeqdBT1C@9s@_Zlfcnp$#xWB!v$2E*^~oe93;+R>hGD9p-}hrY zyaxxp(pG%HP-%f&$%v!Gnb^3EC90t_4F_%bc;j;8oGNL#x&IL|1hW10swyqhx?GL*umkm zm}bqv^ebzca;vIlt!a;`kq0?Z1Aq?_05E28g0rSobK9k-r@zUwx;NbYM9ty(ys{p>Y1v>jfxA9`; zytB1=)qAWO*TSPZ=UC)C%n6m_iVxchK3s-0u2ZT@#dAarXsz>UovC414TpdJ*3#y6 zd&I_Ra9lwF6hJ`%{ALSaTpy%Hu@zwKx#6WBuEXv1qq|PR9ZCa&3<3QL^#8DT0g3vC zdY}$kXZ_$$dX@bQoxzGVfr*K|!gv1^AI$6EFB}`U!|P$F1<<=vMregS50U_k0T~eA zA<_uIJcc+Gy>}HLW!hGiG{SABUd?K=Kd3p!q_uMi0syA95xkHnY)g~vV4TR-a^>|! z&O`Y?!V{QH2|Z&TlI8&X)VJd5#kFgX?M?TVisjZxtJ{()lTg9?Xf6Vkk{C1&1{)dh zjB|sXqEi}Pp<5sZ;w|h+Qh^%W%o z=QfjSkq`fLeVadr+d$gW5S$Mnf!N=hLvO?ZK*;cPc1j>|zo}%KM1*;lJOb<3r7{$A z0w@eH=^`%3{;tihj)=fhEC!D&{EY90wy7|gn{%-=%wob2KUiaOOrZ~ zW?EZ|5a5tYyAgOs;AaSYLZDNNBG4nSNv^wL=N73~U#Z^`c&ld!dI@$0`~j&Ty2D$& z&qnh4pGC1(fTkJ&9WEDUGWAE;NVy2yD!1sa_`u5?+IBj zP0sSutC5ZSAF{e$zToE{J(Yu#{!P(8hmc9N*pQG0$LSKS)tg>^smOK3oe{bAxakv~ zV~;oS#I5TKKCb63UH?ncN9VSxu}EdpI2~4d!wS;=5pc^csnG#Y1yBHW4fTv_BLUu; zP@jD0)#%k|B3DXK5(fwh=y73}m2N1(MF>*cKH^K?2og2`pcmoHiSy{60KRwUJPMby z7w+z_{z$#^wa|QuZ~i1#o^0Y~H0m-jC~1On={mqh1+@_oN${lv;2r0(}D8EXP{|#DDu)+ht+>apeg*i3u~tL!b=dR=m|0IGr4O0&1Xed0F2U zsHT6O3&$@SfPwJ<k;d;f2?&&|vv4 z8@1*oKm7rz7;>OyFf>eC#%}X!w^_A&C-b)vcbyYBA=4hu@t75vG0lq94OgdSSHNEB>QC{Ox3RTh5`pYiuiU!|n0< z^7Q9p>U7HDh;q0=0*KLWR2PB_q>SJ`30Khpkq#`ikYuF}Kk;Go3#uKMo0v;^=>L7w zEo-xuz>gF8x8?D^?j{au!3+87&J%VGYO2O-l12RW5i;{Sb!GT)< z4YN8Z!vHX>*M^nMlVvmOl=@UAptu|D$1gE2(KYtT^O$QsMJux<0#&HHeajiwoi}ju zDOPGSK;Y#7XijqlZoo@D_ped4wET?R^@L0ZJjZ8lT|N%AlhqgNQMqj?-p01VJi1#| zRZNF_w^q~f=_4@9(3@|WpQ;0nJK#)ZG?{wlSz`?&m{ND>;3hdH^XQC5d;xI7%RKj; zTN3y$1m3=0ZPz34AAZ{eK5MxIZcHPNryZD&Mn?e#ITsoha;dBuI~)|6n@x2b`gi%| zZkaFlY(s`SP*WtMO3q30BBxrJSP~$~);R&mRg!=z40IC{DAZXAK`lqZ4^3c~Ojko7 z0Fa8Kai~sfv`qE;(iqi7zQv>Ld(J%!Z8f`L+#*3+K++;p@w2Tu%0iE?FJds&tBbY^%!5>&n_2hLu!%!#er?;>jB` zaoinniegqXz2|l#m`(QAx*qR0U4&IpXe7LwV$KzT|BJx?-BjBo0{@)Azaa2`d{wWJ zzfGesfG&X^gGc8;hX4$e;EIb#%sCD^=_o|E(l2MK-bw}%m0=_eyErZYIRXF%f{Q9y zjMV5X?RJaA6vrTyV2ajz1j+=1ESV(dVsv5zmbm(UlynEujDes42mt$7E>1Mo0%cqI z>J|{~4(Nu&<46hw@vxE(1GIrgF9~CRvl*7b*kCO1g2ipL5E(3Da5v8A7-Cq)K%VW; z!%UiQq?GMXQ9gb7I@>$Nr?hkLP9*Rq)0=>x;ke@;n;ymf)W?(#0EmXPeVl$D7i+J+ zst;BfqH!4xgL_fr8lh9~tR^k`2|`JFbLFShmXH|Rn#QcErtNTA*|4&l@(yinp4@TV zL4YQp0kpHWq=U|%;x0K2Z4&{Wg23}%91{E^68N0J7X)?)9BqRMn7XSO*A2*YNJu%z zZMYG1iB~3k4M?ULn7G~7#DNGjv|=8Bz~HkWd1ZzOi$v7a<*6ViAle&1lFnx#nT;uq zNkk|FdOs0?*(6&-HGLFCV3ok{CfA>@3|@cA1POq~Ih0Tjz<^whg*NSClBs$GuP-wW zE2H}^co|8xZGdj-L99b!il?o4b^FI*n3$<89)DN9f!hTBD1oo87pG+sffl}H0%Ha)E0pFLLmH_8R)_=Vz@Qq5oEaO{ zOK#C*dQX(q>cn?Gm*`I+Oeg)SacyXdgG~lUfd?uvXF>{z8}n4P&zFxY>^nAi^4j&@ zojdOtb;SmYR2}F7E|v{OxPtk#H%pR}AT}@aIwElW9g8|%fwo4nGAuoTMl3m zz&EBb02swGA*9oN3ui8{*s2j}#Yu>ieV)yf{C>OYsEF z;Q-Ljun6#ms*!8PM{Ou<`j&93m?H8U|*^B!POD zR}>h)wx05#^qp&~s02>S)sA6byA|>$+S5mTy4YUCBCHZKlJSavXYjC=oU%4$VEj@ zilwAi%gUPb=-#$f+-+@YRCl3mBQ4#-i*S)T(8LG?NVVyMBKCpC80$rVxXz<{A9?6R z_OX))T>F+E-qujCPxdGT)(N~y;5WXX^}T2mGYSv@BqO3uz#h1@%=8p*FW1XaS#p|w zlj|#?klS}LH~?1dY-k532pDTAypKuvlxKne6MtN_gRVfu2osR6X$j#z42 zhE}xN2w6(^!?5j1y+g@U=GB<_4>e!ViOwgpbARUQ)`W z-f9uIfB-+6vh=E<+xw9ci27e=mdfUV|>sW8jJv7j@j>kLppnU z8fYHJEc(HRfBFaE@BT*kpa1eN33qRVu$C^$h6Y zJc*T7@lczu!IBDzdiqyJ;5QK%Bfheaa?R)5tl>Pc^TMi%)JTS&E25LW54r}k+ZODY z#Z~pF9x*aS$(($^dXo>XVHvHwx35GGTK-HnYqr6-0q6uCws;(E02mTd$GO#J)th;l zX_gwnvoN~>#Y_&)Q-BI)o~Ry==)5tnE6jMrJVJ}9=Uh5G9suL7L0!(F8SH!GeLH7= zyk#gjCg&cOl!6y{cU#W4r!!oz#^}RqGs%d5TpgLDtkqYm$4j}13xFdVbGIFfgatPP zYpeS01z_)Ib_KAv-=Cu$5KDm6HlvYAYXH57s{v?0Yn=x2TBh4%Rzu1z4&hJ?h0L5{ zUS~q*{3@i#jqgTov}pvHQ8wV4dxS^$=IGSd=-yB0_(!yJLrtRY0ZpHQMmX+DBhR3p zgPsL#0RUW@D~JYr>F@a*TNHtcdz_N7%dPB@>(Fh=6FxkA9^JU#<%7cn912%+A-x)D zjm#)$y$do?N44XVwOu_5^YQ<8-hO|k^6VS%1YHQge zfss_=|8vP|_3H2WwNbSI_Vuj&CA>FgU>UmsbP)!V=_+Oi9JX1xb5jheNA>YPDC>2M zg74K`7@3Y!)o?`9LgZvKS!SEM2;i6_Q@c_ho`1=Jn^NMzW?I0lA8MV&RK)p)ShmxRC!?AECz^YL+_^{1 zps+5Jx)md(%F9v@>K4Hp@4!dT18)@Pl)%ROdp-6{@(wY|OR^s((3 z^y>Cw_eR^{CyUQFF9RRNenJPpSyNe4aYkAZG-m@O0TF?0o#`hWZp#xK^EC`|sUv{Q zjjnvTcys0BNz|l=@UCaq)0aVu5XMPziE8CGMfIqC_HZR>8V8wF(=DkZ;-*@~ns)94 z7Y`Jdwjn5S@K23stKc*Cunl-C2C{Q1_r|+VOg6E&JuC{B>Efz9$M{NQ~>lJl$ z@f@|$A4$+@zk|iwogrSPm3v1QgcSVXRM3ynjUGUVQ>oBj_&Uxv;v%$g<- zxhL8!pws9DfDBmG3l=j2Ac1ro01OV~icXxF6S9R;JNC>vPUKJ|ID~?;P{=$)uY}@! zKy-IK7XdnjLh(bK4&WV6uio;JHes$ACv&gh8HEjMDNoiHMOkA24LaJm_$uk<3z`F+ z0KEv0x@=7Ap&9^CA=pZ=Ey8AQZyk3tGQH#;M^4NwR?eHOoE?fe zb9!5!%9;I}+#F3Bx>qBUQFi8!Z87goZ*OaupFR8EdHa2F9LGTilnD!f25m^$D3O(U zk9gZdpb612kN83B=l}uYb1o>+ z-E`be#~Q2a)Xj0`gj~40(6S2x#vgk#@2aEW;o^|qY<9)2cYX?K#zM2(IDtq$4>q-X zDM{z(dHDbY=B=JEL|ws!XUvHjSaa~a(*qjdv=2!20E*LFepT+wzh}(kOx}HZ;>$KvRGL1n%2j7wsyvirQAg@6~V_ zdfQm?g{*F?xBk?u>K&(;y+52p2t+hNpIGDCj?NB?xyUqo;7+UoXn;ttIFYFM5y_%U zrhZ;Y``#F24{~D^a$023a+^8}#eBf2_Lm?)4}iv)M~`AU%=T(8cV$jo<2^U)Nl19a zB(4$MCMucq>aUb^{V~D@2LjN+4kXz5X0!tNuyh8~TQQr~Fqa<3l@6vm=uD*qPM>%qft>L;Bh;d*Xii%gZ=E4)|yXuR`Kt`Z3eTj1SQKSzZBw z7p1+-^WR}jxu{C?5eb4R1VwK82BhE3z%a z%0y4>JS&1~&Zc-2JFC-~ zz1oWZGsQ#-xqv>5)Kw2I3Im|ehS>2i=jm7F0?aW>tI`pQK$~J4F z1K@T5cLEFqY|B^5$o%`X3JF@kk}DED$H*c8)dU4b0>Q0G2i@^Ce*W*_Urr7182*8W zcqZn!Xe)8oVXV>rGjxX^>(k{?DDub=-TFu5iJD)3Jd!dGzsWBe0KCq^vNLZ+FUEd5 z?>oInTR3#rGoE}j-NX?9IOLm)1w6#((z3keKTf7Ex#_W6m-l&H_xZS+&)^w-n4nwqw-D+3Y3qrZF5tkEpYHM2pzytyh zOMeWL8x~&i45QrdWPRe}ddUS<*9LNmVqMy*qdpy}5GyH$QufF? zTN<<8{?va^=?ZQWiQ`fs=2O6~^eLqxlu%`LsJ9v-hz2OeiBT9rPgf#b2(+6r`ulWLM=rqTfL`W_C6Z9^_a6%QkLSFpi3m#L~!<_Bl$@$>ACj-kB0>z4@T=S z?UDPy7DOQZ6u!VRG>=4MG~od|#*GiF2Ku>eZ)msQ6uq(zi{VmB;lL(A`%4&=JV3AH zcRx!S$|J2(i6AgR*aQM-T(xY)PIMM@9;ebNtOBiL>F&qVWzZ#Df2sg*<*%*+X{e-& z`{qs9^OQqFat{6^+;qrI&z$bQ#JXESu4!ys%Z%>jAhd0ZSzEWctt+ecs@>uD>c-u? zRY1UT$8m}d5JI$t?N-(*G}d;A>xcDIWI3QQj83cs%$oYubQ%JQ8o*g|Q(rK{aSnhB`a^rcaSFIi%e&HQxF&FTz-!S&nDI&PV z{fG?p^Tl%C^**MP3)(z?B3>^;sC_@LBF?QVv5u)*p$Y{*tg5W%m4m|-nP%^*b0I|M zLe#Z(6+>kj7Sc9l_qtC19`Am3T#)IUEQX&Wv|S*Pj;KtGWLm(7w1c9pz23Z{ull2J zdPTaR27#DNuLVBDt^&pY%kXi$5bP5R(JD+w22cURJ*oD_3u3c?Z%L5)L3{oG_M)GA z@0{aBS%#=ZLPMh5ivg+ld5Wa=33-r6ntBMZbQVn1uvwMd%;$qQ^yE59J)t7w&Jn2Bpqe{UtE4{4)R7C_zB zQLVCDZ@v9$a00S7Y==>jI~%aDjvc_XSEiNP7S{a78$lQ}Vbhek#)>;&{0~e28S5q* zk<5fO6LN;ypaOuwV4Vi!;Lr(c^$mwEn5%p^jQ|gAYnq~s1v;9!|NTC48Jzd;7UCCt z(=&Y)guoD&dtgBa%acB(C6)!m$9Xq_EkUGiPS0Co+D5C@WaGR@dP{07rPqJA+mufS z?;qX^4_p1Fj=t0n*4cbkl_6DW+K0KwWVGZ0S1cwL6TGa|?~xM;ip#k(=2`o^DPOwd zdg#_=q*O)&C}q7gYp7K_I^mLz@96e@n%kr8L2wxCPgfB%(`V5WpysMLeZlK4`4F9j z-EAHL3}JX(bwP+q>S%PfO>&UZ&&M}opYir14|Qph0t{e`fq;pN?i*eqb#v+gel_KR zyEXo+s`oX5%tM|O8);UtqoYWrQ`h){iOva($+;ltl!4-YCf4lkX0MuF-Q_=K>!lF3 z5K3@d0ASgfi|D0zqMeVNMFDH}r#0N1u7ECK|K^Td5il{urLoxp-KJ#jL8Y%UVV35c61T>MljGd+&Ew6+br07d%=pctc5@>BLpysz8728gySAXv>k&E+C zm@6T;F6}9;-BIG6%`b>=jkROU@s0ES$EHL-vnf ztj?x=SOP@dA&JRY_u1zbjuRtQ;t)fNM3l*<-O@JqbPE_!)559(vrk%GPk4+h2q3_g+blz}ho_x_?k>#}uL zPG^VKnti5u%Td41#19y~N#YyN zqQ4{;93Cy$&?=$;@H&EJbQELuqx1N|Z#F}$KA4`sfydD$&{H@L0Pb{(8|>?Sh41;X zZXr-{*9n4p~=N}iJ`rR|*0|Ip@1YpenZ1cFgaPR7V zdKV8;mH`9faCcv4ByF-l6WCBXFw_=FWy|%dRljxeZZ6(0A4uSn0P{!AxXSgtR{yzM zcUZXUJLT=(`KArK^rQts4ma89hVm%&*IAP* z^Q0D*?S$&ypX-V|6g~t#ErC|h?fdYI7kI*lCk*wlXjR}RU;xi}CTMKzo*|k=>#B)! zS_^3H#I6f{kGs6m_x<~ZoHK5mst{Up0B}~_ZeK+>2WfK)phMCxP=1Y#AertB~HCRs9_CM-#{QPE?eer)85fa22Up&?f6j14S z?;arVoNa(0BP;+c&4(4-nmr?JC)p{ylP~%wd==VYXa(<@7SL#n5de%3!UHCb4IpZZ zZ(v|dK?s;aU_{X`(hf!*Ji|A`C|BpMFL~nS8J7o?RW$&c(d{$KW-oJ*iFMtHbJNkh zMr7QwS!>+k6Afe`>OZS2lZM6bq?%cjpM9!$^R_}kxn zH0@&bYyf6EnYQ!cO542Ja`-AeXc?kuiL($Lm(8Pc>i@%1RQ7_8vPbk=KDN8Nen)$2 zTkS?;c;j9b>x0vL2HkOoS7Glc_Gd7kfmL!vBF-;9c^`5-NXc9^(I?!QBiHmb-t${? zZ_{u3nWQ)@xl`opKla7v(Q;$T5xJ>!a}2BNvKy`IyR0rBS8bg?azG{J5~-9{U=r&| zwxyx^@r|vHhyz@y2TOz?1L!LDqeaj(76&AtgbG20k1P_r9v!v4XsYqAVLnk3lY2eR z=W=$*t!ykE^H+SdoqW^p+xZWB7&`lJWnk{uqu2JrayoTMD$*9(Dg}wG0|n-kd)@(O zw44zF`7b)Jdyy^KnMd1f9$JMULy>m6yn4O1ym-6N%~$<1bllOWfB%k$%{Ms5efS<` zQwa}T1Q&sAB`^Rm0+>u>&^*=Em>zU5&HaXXiC{@<6w&hituFWrfO1@%F&4gmDd09d>z89A9bLXnDnKeoXy{&T z)9Fk`JJlGF_ys|G|6_v2L^1~D_c(J+CQW+XpZiA$IUJXhB!E_0#q`s!vKPGq(|i2I zbQ$S`uRxE2){#r40D{KDJG^fH;7vNbUcY%~XKPhPj|wv=a^0d#qv)jHlu~J_>_^fM z{O;VV5?BeTsjL#QcAjSk(&PC0W&BhdE`77zOo)io2^hcjU3xz8K1et@>d4Od;F}|h zLrUc_PjUQ@At#YFG;9J2WGZ=zp$lf*HE?r0b(``zr8tW1A0E5A$J1})4p|4(Z3`}c z#u5Ncv{*>|XqFf1-NA)W8x%}@G#0l6U6^3@;xkk0s1Hy?@xFp=QPfCb?nKA!gb^PT z6K?M>Qz^FuoxtfP;XIO-_d^sP>sNv?*R#+IP5r2pDAoU($VPz#(%*+|23z9N9SXA+9+!0YJD);k6kO1`CKp9i$dzeoLDE73HK=^?t zd{J0^Fx^2S5J1uQA#%Cq)usm>xsK*kF6W#2&RlR;ju-5gd8e3vBGTrT6G@PPluF7h z6nZmO0#GPXoGA;LQk*%9Gj}vk2^=$U#YjW+CKEQE9@gbei5(#83;K!xfaet^o=F!# zFUA!Y9a+dVUx9uGdK8E3O4rZ{u)ln1i&cv+?04^aX9zA}RYpf4diBjHXS?OpUU_K0 zKerBZWdU)CF;-wEBIz7-wdX~G@a>j&VDY?RaI4)~KI%^(D8~9?jq9VbOG2(#8L}0H zD((zi(+m5ZXDoLmNSD$8bi5_%K<=7em$D*nO5ZVUGtHHV_<9&Daxi&Jc@$>0U2w|2}t)wW*0!1OQDI`#IFviU6XD8XtD8ZEJ>1YjYvd99U|`I1Hk5)#?; zOod51T`an*x54uA?b{s;gQj1E|Nj}EjaNV5K1O`PzozfceJC{eIh?c&!dnU95`YU! zMgU=L12MnH1-uV69+Ri+eudGKO-~RQ2$4BMv`R{3nlio7x|VK^tG^<5y$qG}Rw(3croQE6|h~of&VAirD={}r##nX?O<4;}qSodEgh;>G|Fh`Y!7U@^&>^648BN0XeHZdf zII-4P3=8v><7JPLY?6wCfXhN?=Cz~vtpvG>^V?ca^a^Yf_ssv^@bA^(#W?vAV6jnltfx*vp`ls9-HoM zN;6l8j$1Ws?|2z%_pI;CWjWH`S3~@MJ+5OVJRs)_J2~&m2C+LpfwRvCjxDjv_mF+`ck;FezF^k_4$hh z3%rvnKvE5oG|R!YXfjAE3tej0kWi3HDf_M7>Zp<;P~{=pd!>~cTHBQHVx@ibfsZbk z>jic`3oq}r&(*Vo&(YP5iy=VhPHqu21*}{Kh$yTd0vD39s?WR7m_y?`5=b?pV=7OO z<|(ZJZe4rF8tcq)x1GiT1%~U zR;K@ag~Z2y7@VWZP( z&U3QV-(!qok`bA&fh3IDXT8=mG$&v3_tRC04+i=UW}o_dyb4{wRVGq{{pk|uDNM~# zMoPdGJQxUkx0Reu`N0@W0CQjFx$mNVJ&*r|1Q6BqvQ~eHukP|6LfA#eL|*B8K1Tvk z!72r)mam&g#xy%_DiK;sWTno_ld}?;-UU+I1rjoSttbdqr_(kD1r7zvp*U>+v>$Gb z5rHG_@q|dp=!}W-d-j$PNhZD8&;32!2)J&@;XnXj%mHW8MLa64;(&=Jym}#g^NH~F zCw}YUZ~jX7=YJ4B`#<6Og|~T|TOeqxrp4=*2cM~}9<)8ro{8cB?Gf zr35tcNb zCiG8q*3T%_DB)aOJBW_oZmvcrsO$0Io5j97Bp62<}MEzFD55rImNNl#n zdQcf_74sNiM;ag{stVbcs6!d&B$aukQXSTlKFXHDT%z9kgK(VXg$73=2o^mNoyW@A z6X+XwtkyG91yL<>4;nU|Epg)$wJ9G&301>lR9JD47jx)!l8v+vK5s3;&C?VE^JFLqQ}^Bb#e{AZrgO5KcB*F$aUc6_{dFV80zdr zhB2Tb%_0JZxmJ}(1?~;FlqjWHF>)tl77m&Bow{w8mHk#Y&byBKCWA(gMx@^_IoZY$ z3bKAE?)2dR5_tp)fqDmY&qs9Z9Xj(hI{yti`^lMeKsBZ>n^SBkP7r|ja1Rj`y!7|| zm)O!mpd#mrTYOFyU-48v$%LL4Pz15szy=Sv61x!vi zk*91&<`GQ9D)&u~ssNf9o2Pl@Gi#FGLk~pLBt}&=ztYm;c@R`?Lny0DJfV!1j3BAPm}4Tjjd8b+RUw@QRX^75!To&!AKkP8 zx{mpsw1WvW1)2aY;TSrH)8~vQ#e^J0(TDe+-3E54j7z$0ZrBpCz1tv@Nb7Oz=JE-* zIN~0cqX}*?p>@ZrbC1EtzN1?H30>D2H(fCj@OA&w6r&@#F5MId)uVb`J#3ZLt}w?C zk_l8G0;I~#z>(Hk>w?e=-KV#8%Ub(fxR~?Y^_+uqA`|ACJP0(oA17m&twFGjS)5bC zKuE-_3wQ)-H8godOAl!ElPm5#=4LBaOrs+>ebI_pUM>exr7rUO=uIqGhUG1i-@6ZQ7+*5W zjSgioFJPt!11uIwBT`4p4ZdR*n;M_MIw6bDJOzGpbQ!T zff)*W6P(II&Z4f>Dl1J4$|flw3Pl4+QKKC;45R}}V9bZ^(qT&z5dfcA>AKhGL zjyS-zGIKOjrcUvH<4zrG$}pPB)S=_A-EB%4tLrrHh(!;U$%3fKv1zD-80c6@P=Jm_jp!Smt&&Nep{|-mxC)tnu}YMj;KXcpOM}#`?dW48vb=*2LMnk zmd#p5tMEKCZW%3OKROCp#JGu#d(Te+z)-~&ZkGZ!1Kt_xhzVA(Xy--)r&V_iA{+&_piOG)Y|>1(d8h7SUMyKGW%$3@u2^ zGZI*5TV!G0d#AHcD8m$1(J{~i_`%PdxbOaS87Y{+A57c}u-@F|8=Q<{P#S{@t57p2 zAnB18))c-6W*&R44oV#aP>BF;V;?rGS(_v=LjbXw=CrLs$a5doe~m6yVbe?ZU^#YD zOdhy(b9?yoH0Xyou5;C1^j6S^aMqNwM|a+7J;+NKuP#2C;T<~8h3VQN5x^vwGEb5i zx`J4kw@IZ@f!TD#w1NR8hbLmjRv{Ge5uN{05xs52mpZq)yP%pe>eeJPJqoFL8_+Nm9}idI8ws5ZVM0 z0Tg#fcCQ9kLn^$Y&EsShuEL-KJ2_P`%a%-c1u}+%{HdLC^vP-7^3pF--s~x`_%Hup(^J1ba$>ezs!&MSh@M{&unTVD1L!?w=h}l#i6e>E zA`ww9;bY@#;b|F)kZLASf3ng&|IjAr3u2jV=6ttj7ZIVFh#2$EoKB6*mopuMB)M1Qs-?2~wvK^YhK zTpQtUUG8B$D+J*Ag~9=JKj!U?iDP%(cg6ULjbgF@1RR%F^#0Frc?*FVca6EnGdGvd z++3c-nz~;;u@&565*@c$9GNdknU#=8R1D#OThTGK1Jur-W#Xj&%w@&VY<+saHw%Ko ziD`Ubw8t{FYc%9)n39G{cl%CoE7IbXP~?sic*K;Ahkuq>lRhE*&mvm&*YG7Uf=oaG zjZ|O-t>T8K(n%acr_oIfXbbch=$9CM=)t4s0l4-luHwge8SnWoaT25&h4=1iU;N)? zxNu~itxdyP3}1^Pr~>!j#`_+8a|Buqn|X~re=Mv3nzdlINUaGrUR1**B37{wCGVIj z$}#=)G+_Lx^dr!xK{dK(jh?dZK#{^JTf1FSPtD)V&1K5K#5Ms1?G4~gw#&OT*SUwb zp<^b*fd#K=SUXAbWLT$(tD^uS$mx_bjpQw8uml;)1!5NzQSe%y`M2Nd_O_L6I$4}+ z9I6RMte+|;1DLQkJq>yS2L>xwEQ1KnU$BMF= zxoXVfs)a$bi+20;ekQk8xn)*GJ7u63z5pVQ^g`;R2;j<}v*#n9rJFJD z^kUgS^WLI%F_o8)T{~zL*92&tfPw$=sjgvMXSx`hAtnZbnQ&^s0D);t^8&tVWh=W# z9(=HzJ=8WuhZNS)PcU)f@#e@`tYxOH`!nhnH-A!5v^GKmEnVU@-wZagDO@8P|5_GH?Id9?Kv+FTy+0Ki`%~(0z z%jEJliS!o3={g-yHI{jVnCE| zVWXmyfrbGlf$@t)0RW5WUeGXg+vS&qeu;kCQFl-9=T zdf76P3bK=vLn2Xw)JrPGq}M1WJn0P$BAAhIJw@dS%a|buMiS9RS`-^BLtdAkzmJ(5 z+~@S0r?h|4---!SfvJACp`)0d>O7zaDG?*iXYbno~TE9Nn$UU1jtADNN<{r9%wZfCC%3}mnAi9dybsSu3Pg?V%n z3l|@^&Tp7FZl^J)cN;9FJ*0{PCb)p$&M}jI9CMe{y2XT5M|0It&xMQG4p%dC#4oEy zbnT+AsI>t3(OY|iX6Y3M!+Xm?z+zCN6+cbIlbWMV7(m5vJiw| zwWZJn4vRsmfp1Lqq4X7;^qH)uRevBX;!>WJGe`j#KopArFzs+!#bX>v=WuufR$pN$ zJ&8kZPrm@c7QA7HNA_p0G%Q^^$q^N#QEg=+0^ZZh3d}IW9eDdb|L3}KWL(!{gsP5n z5p@Tpj+IDu%#`F-%`=0Jc1A~c@uJoAD;Z0Pi1ga&9J^AObEbqQoxF<{Ib_f=w7+(m_;jBkRVrI55Q-{Mv4n4Uh$b9 zYXa46xa*9Z12@Mzu@s-Wsk|(!dQq`^JSB?;3l=PpIn57bf1YHK#3G_wMlAudsFGK! z`_@O6h8^`$;zo{6-C(|_6Y5SA^P7BnA0Kfv!j ztey#VbN#3Pun1DC)Xo>kV-GTnV~jeZA#2zh0iYTf^F37d5c?Pna6s*-#g;*pyD+LH z%(SxolyNf~*^lG3PS$rWkT#x#4q&x-NjdY{@e+-b$oU{#VfO$!5f zl(6)+sUkI)>ia=V<@IP2R-2gpQhaUIuVX&jhb}JiuZL}|^E*2WGse*}_8T*9 z96CCH8$}#ZwLx*%wivc3yElIHx#Z3nLFeS0hhlCznss@*H=$xS;bJE4sLircQaWhn zP$f4=$kcT_m+6?gqofQ6g=iL1|8wyqTL3{Ar0$02teuz9DjuCqW9P%g6~cSJWE6b( zAAe?V?h?>mDNIijtD?mQq}G6BPD8F~ONAH=sE^Lm?-rhTx#)2PxR)u_UPao{cD(Qp zRml>}qG_!*g+yvpMWLBa1);I2E!~LuKPvfSrdFkZ-dt1`qGJjW{ zi+?iUPdILAXO1?o+V{kkOf0$;D(0m;7z8&$M$Km74_Q|^3 zJ|Vf~FDs<7vr-GCN;g;UXb~SSdmxD+hyX!S0wdIuA4b1bhNdh!m0*IWezVk?4CMKY zG?tVsve_6&CvlK}H!)X;rE*y@YG+~f^=MPdP>Rvr%Ftw9l6fViL`hzkkJ==I-AJOc2z|*#qk~m(4*6LlZcXDtN;| zBw=cZVzF4?K_ylkNvE)g-UPY;gvURDQP9Qx+oDABGn`UY#yWY9nx{A+FxoQiguxNC zgK$L$;E5l}!Y|BqhiELJgQlGq!B3ukvWk41QwjU#06>k=om=fKY`2z`Da`? zYM<~?<3I_g!-gpYK0JCeXdaKVpDD)KJ{6>Cb6T7=u+z7ltz=AI$~IYoMpl-3M;$wg zzyZa1O5}tiM*p|J=zX#!@6ubecYHmc|A$Bh?u3r12Tr9s7&*Cn)p%OM&SO_}iz4-r z%K3l^HXT=+)XKu{l`X5e#)O-Wdf5qH2*ug$_M$?q-@H&#l9mn;%q?0ijPqD4l0Y{L z0zG-3tLCfu;Cd0z%RnE*#Db~2Ixp6DG>h(l9s*rNF3cA|$q<4m0D?e$zhMDG04<>b zYD($W^@LnkTZWwvG|vW471Oa0D!gRllsRv_wM`B-J3jT6A3N%KgJttf?bX*Rdu(ah+3g>S3C$831R}8F=&< zmQJPuxjqu^U!!q?=eSUQ!2dTlH?ZS}C-@7neE8cKyDtudZNN0|7vrus{sKMxyJtNC z=b5`-vHd8^YF3y^pBEQjgg?7`Wk<1S3`l_w2>37D2O#Y$>-5dx zr}-VZA+0mL658fVfYegDLduKGSTPIM>PwNS+t-{px1E>|SjZbhx=i!>v*OyiGXY1~ zC_(_h>;o6hqixU@I#-Q5hK_>{Vdb*!3G)Epl&GdEwU>47`-VVs_1kdQix8faZnvy` z&>wpcXx+bSC5YRuwY#mw3&h!-Ix7LP>zu(@&)u-Dewf%~u)3wNeh*y8FNWm4Elfn$#^XXLtYp zM-jmm_t2IvWbcQ|^>%o(jwNs3_N8X;h7Gmt4ys?E|Go3D@!$ayzG1d8=`;L#uE=qD z+I%_Q+(n>8FdKzc53~%?xb4FnHd>pBAkZb5&RbYCrH}3{5A$Xy%y6G!Nk%ykcyt3} z7R}kU!;oXfjNJbrRIp75MTl}75kVMKK(#rrrW&R*y(mdwft1K1n~gys>Jo!o+v#py zry3oq#+p;it#F*{p=x}?iFune7w;QQxy*K@n=3+;ati!h^91VS_}x1KpDL_4;LMw? zY#dG3K{v4)fUbzs4k2w{3|myYufS_oKj@Ndpjqaebbh499k07~n$`31Vs|W(P zXp%Az5W0-8;_zAcU`uE1=nMeirH-f1A#A?m;w`*MK|$l?D(^a#BsHc;K;{(`3;<)W zbP@;P=ELBw;Fs`KXt-^Q`AVnKJ9ln*QGa<7m0G)GqCnKoHjg0^a0LiLeaA~TEoU$L zv(r#WKPt+aUXZM20w88BTtKTd(&@P$CfbzBZAuv%*MqPB{cem92+$np0uGopx!K1y zg1MDD=b!o+`%eD5bt7Wd6EItEFFy=E7Rw>`x7+#I;R&VPoP^%P$3MEPq;u<_8xLqD5gQ1_i#8$r_|Z%a0xS2iu%@A&?oA_iJz zAy>k#)`uw48znYefs*t7K|cttaw z-i2iWU4sZJ1ouFrQ9Jxuhps>1@3S{I({pR4`}L212>VDVLhZzM!B(C2Fxz39>W3## z>nF#yEZaM5oZQa)o$FbD#UJ1DM-Gb*c72feVAqc}Hu{Kf8I5>wUA)r##1(0HZztj+ z>4mKM3!kx@7I~49%<7hsgti(-rDY6c5oBm5o?TKLqpsxZCey{H_yjFSe)xH0&ENXwYyz`#{(fsu3(`kP{iOfp{DN&cU!C)~A6>iI= z*f;M$iXn?u&)hhE=)z~_=^LN5>nC1rJa}M@d1Y)+tV3L-!y9yXjbV7LlhrGxLn$FT1x<`wW)Yhz17X%{IC4T-@u?& zxVx`!OwtSB2%x7xYbenD*cs^X&D{VDCe<)TkoA95x$9+x#T4U44$^A~)HxwFa=p6u zqkh!W3$F`p9Na;W${E>(e#>m{Y1mDu|c&zR%6_+x+^t$76DR;HL7CJ8qvx4-SXJZofa`sWiZ~uf`!) zb4Z+v+s#E6AOsp4@!%H9YWMNk!D=-+6#oI9?);{Fj7tl{f`33y{ zU(u1Hlv~Vpr0PEm@3-gog@qIr!EfxOaLDNc=x!i_3(OM-@5`r7JCF$VN?tZZ25QHH-hiv9@8R{KX4C(&|4jzdG+ z-)^tq6ZH!MOlo85Bfz!~qsD(Vr_FQFXFq$Y)gx9deaC$0WTLc`1=so^nRfOl#k`{UT*TI-u8YJZR|2`Sd`T<8F_uOapx1 zeDVn~XKvs67eLnHsgv#*nx*y{#o=knSrjAHN$MmLhY(B3dXs}brUhk1Yjok^{psG< z$>H9`dC|*{W9X%WBeM9U2yFmX(kza-*@vW;V!!FZl>LvRpW;0pM;oAZ_yDf_g$|-z zTIBWHx%zEz#4$O~xW$J&m)%%XpG61DVRY|!RW|3*=n5b^U^aQronakRA~^NA%7t>|ZE% zjdrN=+J+493iM+fLq{=Z4TR&eKEqK{Kf0K66U^qWCVR+KUWOO3Vwx9c@}{|s-JR7B z<1rD?#$#sXU=$)3*WFEE%tNB1Q4Xxer{rso@zC-h2 z@OJ;`-MzJ&RYp{CYu+0nvGU&vk@-QnSrO+<8)p^Mz!s!8N?}<%^kgJQRIpoD*w6n!L7LzHX@)KIP%6T z=@KAtJ}j1t;P`58|8-iAi>9p)_TY|u3I66V72J(vgJ>>cQ}<7xt~ti~CdYQE$IK(3 zVRZW_38bijPyZ9thws&90D!s}({aG`Rr~H+K%>~M=pL+7E?KKzCs+M}W!mPmYmO}7 zOZJI!2l2$JGgY`At!Q9sfkvdX6RJ%(a|t~ z(3Hp4t2Z5%^Lk#SPJ&qltb)rrQ5mH8ou6mEI`=T?^{o9xB+Ct0776t1L@Rh$dH^>& za)sA<`%irPL$9!~K34=xG~hu@E{kv}$~z0kntSY$bHqIk++4nhj@o%J|VRh#G(5JHNXLqkrz)_;6eR1WEvv z;C37AtXzkCUDNF^!jh^iFK0V!be*OQ91>6rKK`TEdqyNtoW1*1kE16*n@D*m^RQhp zTzF#le)+f!-+v6$Hs2;wF|-P(pn*DzDWk`|Z+qj59Gw82h4;yO!aQZ36{dQ$b0aVk zCziwndQkW2Wqbv0Ps4tFG5D<`z|F9I>EaSmWu{>Jyf{eLY6uNhr23UReM4ACaZIS>aAw;GQ4mdWf7biQEvzX)=t0W>)M?+d0%lH=_I#E%IJDtYT zU@JsN0gFP)zb_2xK8yY#8z$3x``d*e0x0xMJo3mJKL(x0nd5Ub09^+C4D=MPPmkkx z0N^ezB_`Nb<(0qlb48$9{wL!eAIDPtg;-M_R~{UnM8|cEmWPNF)EJ`XT70?9^$-6O zqiaU$M|z6+I2iq1LwucqVxN|k2;d~X{>XU!DDcbyIUFR3g3Rdw;{| zZB~r6=(wIME7Q=-$8a7IrV!&XVkB@=?dEb7Y4>|upaU?HZlHD14BvZ7IQdB*$+m(r zaWd&aB2iStrm_2ccouy!`Wr~{#%+uQR>h%{vv2uo>N`&v+a1@qZ4>~LqdriFyI=K3 zJjCxlVjTj?xOn@9=vA7!eJj>mm(#sgf>k|KeJk0_*;0{p9yO_^0hqni8`CO8E!kin zH`b;@3l8pdvvV{%c@`Fn*#jYOa*CBj74sx$YgH+vA8XR{M*Y@th?Wd087ME&9@G1o z+TG3ErM2-`Ax1JV^{Fe}?5CAxZoKe-@;izSKTif_C>knfnMqZ&amYf0&^B~59 z{+#Pa%nR6nq=ZP!$)cIL4Tt*6zm&9w4~P5AenD-FsU=^MO8|jcSWI65ZK5F|c&lg* z`yD=gx*17V&>V;pn7Tz|zH;yQ<)cHU736sp$C!i7ae_m|SY0Q5rnbBH7<(KV60qy- z3;V7B23XM-!4cIcEW;#PREc70wfRLnVH&Srv(PlQ0Xp=HR&AGMH1S`qc4}stkP|r# zfCyGi7J;s0x;DWifNKEy24RFq5){uqg2pJ!KJ?HYf7`MnlCY|O)9vmXQ6L7AqfyfO zV6y19t%=voA&m>JVy1o!c1>UktwD_I_K~0@o9kFm12~{10Mb1Ri^bwR9d_Lg)hTJj z;uJ(kt+nk>p+AMEqi$q{d>#RjLrq^K6iq-TJT&cMy*EeTyTz#gVQplpEr1FkjH9!gR z6b82G+bf^k7F^Tu1IQJybgrRem=4HNl4U7bE|XO5lS9!;0lSYJPGer)phno4ITdXT z8`1A{9&Q4P+uxZ>M?(+*FrE-RVyL8-x$+(6M1}a4LE&<{xxos6ICU2N2=t%OT0Dh7 zMw&Ym=KM`Y-6VaT(>N=M8}|)#fsuxhDK{k-4fbm>m_Iky-HoI~*@jS^0#2#q9s2JV zvwJf^Fq8ULjD1Eg{xbc{YG>OH#9=g;o`Tz-n`-j|*rMpz=M;PRCpnw{%c?UH0 zC%2&FbQ^{V<$^ntw64eiT99*!|gtR-f71^S;Y-_te9(@Oqs>Z0qIkyIORHSx1sJP#_RUXZcfZP zmdf4(;s#i^yEt+z(Dm7Seo^RzOGPvK35tyHa_5w`9y&G`1fCwU@!ergWWxT$8 z-ePRk>W!Pe^L7A2KtQ-|TgDwXO)1CKw?K4|!X9Mvdori^9HW|@e>fVkj=qYKbQ<(3 zG!{S5CvoXh@=KwR{dDiBTl{G6Kgap9)V}`*F}aT;dRqnZzPT z2^@-f8K>Z*NB9W|0Q2a3pdTWbKJR!T1~kRp%v}NtxfDHE_G069)zq#m-NI|Bd>NBd zI&C>UAW{H-I%b*G;y5=bRx0bMl=jOZ3=C7ah=Cb zm1sh(2EZ1@5Y2HsbocoFu>Hd`N1PCiT#04kFo`=Mt- z*ZDzr-T5I~fdRQ7(k9L2Sjbjy=7gI(g5~t$OmoBqT(U7Rj-_ZK>TGLt8Z^e)_4}Tl z1U6DmKs&$zoT7t+NS^J`>>M86J6xO=oo~)HE>e<%MnvYNOzTlpjEqAU91OU{F|!!_ z+!<9qV0VxAHhoRQ9QmlQAgn0M0su31UPLR9bOCZkS=|^hT<;48~ zEu)aZTpT(AfDtf&`CjjDr z`OlL~L&sGzD!GW%aL;V>S~`28&~QaE%224qzsowN{%G8qq7Q67@_NGC(3avf)hpRBvW)=}v5WVg8r zgxhd*1DHdXYCCt=Y{Acg!42XH1D@rjp8FPansW>frPIWS=n#*bNF=3@?N@v6FU`w5 z|DCFscmXr-xEVXQ9t;c%>7J*zNGYzWUFScj&CfWZ%uF9HkZ~*riT=RknpDy<2DxU; zg20hj6oQUa{covLIT*Q#7T%jpy2H-ri$NdzP|% zxQwfIkH=Me$6cowCtMhC(d2_WP($KXqWhf6?Cbf$-$PlFg6IM;=En3A&;!_)Rxq6e zbQ0r(hO?J0ogXyM2PQ&@fjKbHD{Jp9txI{wl8?~p)08qtu47O>uNVPiU01e}^7@pj zp)=^(9D~U1eif3VNyI_^{%~gTw$Kq|9tjG`J!V6P?ek%E`N9E(Y*$h%<%si0IX0{6 z`q<4e+;}XmqsyN_D_Az=u^WveayN6A=s+Axz2)z+UuU$Kd zoVpt3(tzR=^gx*79^Ms=LWH%)=&^|;i4ymA&3&TV<%>y2{d| ztP^I!s@bA2yW#G(8R_f~oS3&l#eAJKZ!=-(nef(q%CtKd*@Os*05GlHG>KE6^q2jl zdyTK3y#FEe2p)?1pl7gm2gU}JAo``^eU?w(Hd!$&lLk4!!;uPw@Uo9twJ*{gZ$i)4&W z4C*^>)~&tCYD20FC3uoc@rHekv`a z8*~#_*pdZG;0k*N*Owu^M>_&&w7g5(D0phd-0P$z|)2e)FpLPWcU9opO=423Ud-Fo01qqO& zHB8;_2k*uWG!u8j>V+7PZfb91CR>Q1YDEh&j0B!F+>)9M@dWr2&=>$BAq39_cW|qX zc-O>^rl8k9Xzr^IhYJ`>d>Qj+d~g+qK&mjQ3MAZg-lvJ#TRVL52*4Gt&~r?K$ew51 zFwIpK=jyRHId&9iMRkb!;Vc`paB=eY`V_kWV<3=p#Cm{J>V={MY4hyON1S+VC7SjDupBua>ND8nkfKU16JQ5q#4V~xp=SB zYaA2@h$}5#N%x`=09O}fnhP#yWqLt_I`))M@8J+yTke|ve12j8K8yigDmx=46M(9+ zmJpJKDV+VQ*K;@6hJHZP+fmn(Zj(^$%TdExn=iFjxrSwRJ&L$u1ru=K(#937Ajq$W zkuFnrtsYekg3md!`lY>{d2(}?Wx)w|e2-ZGJ_YnZBoJ|)n037jFTnx4#DQjh_U5yj z2lJC;eu0M8dE0iKlaZI7E{DRWd$s?>wXc2cTmL7@7hku^CU38BkA039PI816(Tg9m zsp<87=^w&wj>|p(Cf@9ZPjtnduhOvVk3~NQJa15#2wd`w`xot6E9LTVc^`f{KIic# zpCAXt@}O8j5e4Dk3b;BPY+biuhgNa-O25|q{nRETI3zJFk!WvEO9eEoUGjy7G=oFB zTNE9{!PEz64gr9T$C*aN3!L;^P-iCAaJN>$<-%dg&TJx*EC4_P2muI+gIhFfV>F8? z+E|gHU&eYzCdcn=N$r|C5Z?z z##*@V^8a0ru4jw8*Q>|RZ2J7nqHl%S?wE6hHV9Jpb9}YKlQKM@Eq;XnAs>YPi63FO z{{#N(;d}UJ{KCE$|Be@)`vQLRD?Vep`O2{${^i%bZKIf3_uvAa?%%FJ9qs595D2mp z-o^@fvSRNhu74W-MD}HM$K5QCg5g{3%Gw2V5@ze()LDsg7?Lr2PsXYMU9bO(f3@J@ zIo*9vnL^M**mbyPwp-P!tOQICavd;7V(~xen5aQO~g(ycn(M*0HO1Eb$_u~9G<+>rS4QVDM?bpasoNsoQaC<_WZ@iqSWZv^p|s& zmx`P6>dV8w`?HlkY}{tWqNj^)#F7Kx_y5oM2=6~U0q4$rR&T#gA@k|w@BIC{LRAUm zM_(FSbx`NV3dqt48XE3)GtoPuFJ~RxFK5gX=+vrQa$Sovy;|Ozn}*;%mO*nTCVIe~ zwopYf)iGCWY6|E_C7AMssUgAW&?EuTfu087!F3TtwA8h|l+|hs2QzotSIDklJB`72 zUl3s0_ipI-2SYzt73y6{r*!8`6?I&BZtRJmFEl|&c+O}vV(`#_{sDFM1mxCWB`8BA03q&c2ZU;b(F9JL+3cOe3pAS@?&i}}OCD4#B_ZYHgT-*e zZV%?NM=qAqX`sA=_%HijPnLV<=ee)mJ?1mMV_tqfxNO3a7F{0@;Fok|-n?4>l_1j& zwr>;4f{~aPULYV(E$|D8`PSc z1OX5Sif9xrslpw~5C8f9{P<(yDQ;Sb1T{^Kw6#cY7RnaJ zs6}5;azWhF%`y6;?hqy*M}5#3-4lU618?SrxkodL?a;)pQR_YtgV(POvJK$FuA(_Y z%jdmsLrZPLDf6YvvhE;6%rkO|(HdB5rn>bt+o6qI)e-EHqa^?s6mcfaV!~g13b>1s zo?`&mTrX_^ykO=XddcT-arn-I9f`v zyOUh*SldCSTG;e{Um>hYZxo`JA$q&BfBL`f{+6pGDIu03fGVis3OLTPo@9+_->ITS z_m~y=V&%1Os=3!FlIw_CBQ|@|-+`_;1%sMR=?oQ`jt*+WU0G-l6u+<-0T|B+fw)!? zqnleaTRCB^Omn_|Z5AFu^_!a;`kRWPlZlR@th#j&^CVk<9uO%@pm8k>oNjele^B^y{uU09a=296vKlqb*HD2 zyOeSgohM22$}ZUr)$+M^ch#`aopkawENrU5n-y)1I`eUG^x5}cEFYizJmvYqEJeW` z6jUj$fIyZ78*7^G>X(husABWk4cuL$o?|U|MxPrZ7lJ3gK~0+;m3f5KsoRe1n|kZj zLgxt%3?vdTtt2SsY6!6faC4|I+ADxgW=6jlq+G++>J6>6{@Qvof4E|m2Sw)%_XDOV z3XV0p0fNpPR@Z@m!q?6Mul4q$-gY!j7RWzU0nl+tH2QPU0&6H#-?cOfY!6~ZZ+_WnTJWq|C z1~%+P_Fl#NOw+w1;5Y*K;Mq0rH1|~bI~NLqHWtZ7`iE0nN)%OBSDX!b%!eG;%i;Uu zI!8HJW#m5*2c3%8XuzjUpu07d0`NKgy!y~r(}&Jmp?gQ|k^_Kc>Ny#laY|LX#jKk> zk(4t{pV9(x)2LA!Z)nsdUb>XG8YNe^Q|jQ(t!OZ*Tkxt$X}cB_FYj_ja3N>NmbEr*ZvenEz8?qNV~mKk+)8djYhy)D>P83~ ziH7Y45qHO?tg*R9&W#ba&rK*Y=qgax8#!!QR4&n8>NMD1DJExSUDKFMosg-1rDuPl zk=nImB`p9c@00L`;4XFFef1H506cTt#nd1$Ud9N=C3W560v#T{ak4`>&lf3KEl~|z za10h8$w4rn(-oF|*7z)Q33g^ml6I2i z4aaT9E4$z3vT&Acmra&I00`9TF!5+iypFp{fBO#8bvLOyO{*D-%NELS#I0cL`<}hiue`=G1X6uRq(i8j=9ZK>h1;o7!`aZ8Dq3w~UePCN#Ghb8AL}&)>E{h@iJ3fa0|{8@6VMyB$xT`ro6nxD z_DqR&oEhd#uH9wP>@RL*{mw_-c1OfK-5$2juUoW;@d?M-8wj!X=U?&$^6z#7Hf@`_ zRnhYBmegb;W3Q8UbIiDFvV9otgyQ6mmD3C)NCXCV$6|~|99rKPdoRJAQCgBl|6&*c z*uquSE^`#GHoE6}B+8j#SI+}g6sWBc)l+S+ao1sUgDo$kS3)sz@+Y-6tyvdHMEx11%TUl*k0s$kw8Zqso|~OmSont zS@rk7eVC#&h#X}!tOBahoB3qoW_SaFliz#%Ay|(ZsnnOwiggpcxDjvIZkwiZ+p@>v zo|A&&D6XtyO+Tc$qmFXlrcU5`UGt=|T%)D{d{GNX7$hF4hW>&BI4FS2d~@@b{j`Ww zm1%1tAd=X-sYOv#8PliWIrqvUwQ1_lG|kIKwCWopUp*XWwixe51vN>W1P<0D_LHZZ z)}jk>{A?^q9ew*MpD!uyia-BqCKmt#5_HZ3pbo(U9*v2p3M5{_pBnaaZKaMnpnx)U)9jG|hp>rVE!wPZkDIVMQ}x;&n%lYm z`7hR>U{(>4Ai>iUQdqmT$t^B*T8^9Dl#(iG#psOaqMwBu0lD1D1ArqQeIX%D+)?RE zd`%=Lf#&38_z*mv$V60=Si_p8Id9~4ms@+3(iu6^8v%(=i;|?yV3UENiq2-Ws$ve{ zd8WGnXyE<3AdP{vfe2KP$3Ba>*OUsox1Q4C|-Nzu80EkTw624JQFbpN^ip|g+ zvswU}vv(9E>egDF(WMfXw-;qV+xSFp1>{8%s_1kwQ+4d(8SMgKkQ1nBzw_@rXcWku zA+@-JZfR$9!APrLuATs?brT9l0)^sL_E9Q(_3iUJ0TD5}Pa>L3#j3l@gISr5fP^6i zA_&%cvk`DtvKD&+8DI?=4A>E;CMdaFGQyfxU&73JCLk!IK+9N#u6`7v+a&IO=l`Sk z9|JjL2Uk<`ENXik#z^zEFpHW|@fIl39nf9SJm@S6IkT1-Nd)2X*UJcyCI}&00s?kn zY`Q~sm71xtb(KCU1AA0U-)`Q%qHmDP*uefU)DbsnvNrU3N!;zC)46LNur{44t(ePxFV4%DVi0ocLXn^un7C^Tw=ledDPc!dLx zq1R)-#^PFFDJ7|%kkt~#83@SuA&h`L8CmGMIPvJbwHn7leD=0DCAM`2bHW}iNew!9 z?8C3N@|Dr?$2AlQzy#178i5dT!K~l}x15mu%-U)*>GWzp`^2qV*sS2AB_;!9)lq*i}-hTg}akn~-q3Eh%lQn^MNIM&vZZ zWDv&8!wNbC!?9R=W^cdG{o~Pi;K|GP9(?}w4I@S|6A@|rGW9!j6}s`%b~~Z2MOG_Q z)tu{TwE@Opzo4>mbUzW349mYFl~)BnlqLi_d2XMAAIs#1vg$CMxho_O;kYD{S9K56 zJF^)%!<(AHa-b3vV)Fb4j|5r#tFH&-HpfpvvTin;O3ZwG-K8~zsGqD z^n*E^oC#zP`yt>^!bn!>nov`As)ozSQ(OiJ{AT(l=;zq^W)#q|1|nG{rv+P47!z(HLR|jS`|(4`eh>w z=2IUtc196T87EH6)v8hbta?=U$Tef?M6<&0mLCU>``7gFF+gg%fkBPkUTX zyC8j~iHoP?Hf)3-q1+syVz3;4|63IU(0tXA`_YH-%ig~4{HhEgUFp&CxZXwL5F@y& zg}CV>Rv7ama2ax!1$t_Lna*@Q1}5b4#Nn9N`**kBU~FC^Q3r=-hd>e%7f~UU830oo zQj$|lp1cyRu4qk{TJ8~f17Pw}bCo$oTnI;wdhQdsrqQ*S5ZGV@7Ub0A%40%tZjq?K zG#)|!8}v_cJc6|fp>rYa?{Ci6dgRT3aMD4Zuy=i)MMe{T=nH86`1CvQ z0iSx`=yUz#o#~{VE}Beu*~vI){pi65ktYXJdORFv5|41fi%<#U3C? z4G*~-41f?MMu$i-mdhsAWhUAE>k|o<+@b!ug7Q#2CI7wPoz%fiHIwX>SL5c7ei9%I zCe%?@NWqJgcqNG`%-tXjLt8=j%Ju4 zb_Mc0m`o6VTKFKuE{UobX$KuM)!C`2LH$%fa~SIW8WNy{S`>#&?^L*lLF=Pj!R%^j z^6$z|!T>x5h!1jQOB++#Cv;aN?Z+Befj(rgnQOpl8 zMrD*lW)dW7ij@KaV30m0?_}zWcd)Qezm*>y$OHH$d%p+JREg0Aqw@`#%D@XS-v@B5 zr!_7fjX|FTNtVm9+!$^zlK|ZTT?I~E28es}XKzSeW7IV0D&X5ZGlv4uGRcwbG;x|| z@Hq4jaR$CYj7G~Xf-oHng^pm3$kvklpVM>#k6wGoVwT{{{?C(`tkf5EF}-cn*YLc#vT+ z7Z%IVvj-}twI28a%4SZ9;HaA57Nf!-Xvi3-RE!3LR4$+ofOdiI0Q>aM#kMkR8>UL8 z5CnCq<*#R>R1HW4gaCZhRCA9NgX)JtmUc|RJuWYXl`xa(20CVqgTP>$KGngP?!=eX zg@s)DX6fhQ|87v2Kx-I{55tH=7hy9S5Rt184lzR}c@B7NX)~k&O4AZ=CP2{V%5Xfc_Hp>+vzXjp(80K)=EapxUunA#RS- z=%}4fvq1x(-{nak(HjX34_IFfX-sYRL>he0;aR^2wY@)R0gn1nzKmO z=dT=1y%{KD%0+k(mZ`gjAOa|p586e18FpSJO>>D>uQt4J{=QFy=0NWNy#hN!3@>=~ zA8%}HkgEVL(F$&=N0o!)Ne{XJ2XUN959=P<$2!4Kt<8gR1+Q@q_3<9}tE-FNEP5s8 z9KU~1F9L{SJ-~fDqTC56!gRh^n$B_|+?GE6`5GP?ab`ecMS`Q;#PJLT#Q32X=opB- z97HS0;)_eQHMsEPg+K~%CwN8wqkhyCjX~WBLB#ASw1KezR0!TClg7Z5!Qhm;&UTPg z9n4_l=e(Fcfe$hV!&wN=JA3uIa0Rwm(V+;gk0QV;i-8_Auwh=OD2#vd+3?Pba0TjW z5WsP?3;W3|VdMVu5%+AecXaQSE9_!>TVSV^0>j@w7>z+SZ1C|EUxs`K9YC&Q~4r(_pe+b7xy8B9jWm-!{7M3?W{J-+4v6i4eO~ zd-#%l_)kSk?|=G-r{67hw`o4zR!NfTK*$+sh%AgN+qs2X1jTOcfZF$z?R&PTwfoH1 z@A10+-(-6BYVZA}B#^}SKpkwZ~Oc;Hgr4}#?$vO z{-fvFY-d(Ydb0b?M$J zM}OG=)_-+&vXsOs18@h&eVioC)n0b1Dh_C&%3U3$+(E$sG4;9hpj-pf-)NT3mEOG| zZWN;SpA1r@#E<^8vs)L#l?GB&VI=(rOcA2a;O*Rv0%dFkBUh|CIPFE9q(9hMi!|B+ zs2X;4YE`K6>T+HF^dCaPjEwBDH`#2WdRgn{Pg7mkx+{Q`d?Hlwa2p>GAAhXQkdNs_*;s2;b|;HlK+d z`CwOP^due!exp|yzM`+uCzsJ#ul9e-gMP0nr?pK(TC32cEL!kyb;0qlx?Bx8XvKPw z`Vw(Z-dN-e&CDz(dA1w?oIu7IeA{BI)z9|O#;TjJ^!DE$!`CJ4~tv#&~mec4XfK*r`$_% zCkRO{b4L43r;Mp10B_(-t~h2O2V(XYUV)t4TK4AlL$cFHzmPV%rgII~G-JhF50&Ew z7x&HQN)C|0t3MbR4gk1H%rQuDPY&);57|FHDGRyMFV2;isd97F8jw&55Umwq^utb?33&7Z z{nxW~0Cy2J)fsh(Oji+KBgI8;h<=@#w>(^XmUZw zB*a?*Pyj5sQZQ3Rrs+4JzHA~1#6hp`@BF*+mHxlK8QR$hZW#@f46_oWtH=K2^*-%i zA9A6)oF&VK(3+gQa!`!?5y&!pS_m+_{de^p0e5#C3J%UKol-BsZ>Hc`m7?Cn8SUdZ z&TywD?I*AkFyE2g)s{aAe`9Bp_S!*G)5~-|K zW%Z);CS|0h#v=w?m1B9{{3#zdwpY{e=z=f$C-K^=XW#Euwa^B~QbXy%8468PLN+NS zOBc~zfl0dm`qy}lnyV<%JE~c-PVj)FkD|osiue3#w;R&(1&R=5{aCaAlt5fZfp#`P zWYB;8@3Ld9OLwq3_TuE;$fr|`YWcF7)=5(h6--TZ+!FOPDmL!!WyZs8tr@I1i+;Pg?-AS4No^eW@q62t| zgWkBkiWWct?7%CWq8COx#p=#mzPN1}ijl5?S%JCZH#Yi>{l->d)~5R}z3pst^64M% zHVPmINZ>)ZYD0Y50x}pN2u|qw63SozLqNR0bNh*`FES7)6G?~?D5ILP191_UV(N6j z%-gRDYi`CYW+W~dU9C5B{gHl?>jsGv4JhQZQttFy?!@gnEWM{5;J-xgZ}&z2=)o80 z3mmV}Q#?-e7#<@RMes$dSaC%sH3=$y@_#Za**)zSFr*}Nc^WUnC9nw|U7#IGZAj9) zs9$Ir_gT*Fl*pIMRJyrJVWOA#U5)!X;7_04_m08X=}2n#zU&t?E?Z?eDf_iDIHyTL zTWclG`Z@KRxUKf-^atc@^Hf@nc#h!IfbinEsiaU93p zok;_F&H)^JgzHU(78Fnbn=2i_DRsaB92k~+Asq#qqR8AZB#k-Dk`r;G%OS21AM3(+ z^Co#eWnlb&v+v7ts!f``{`nd$enM(NmwoYrOXt+*OlP zhl}x`tm+TL<(OlVO}hos?GhH_k;NnrxWDf%_dXRc?3!W6RPIp$e=I5XbMM#YCl8)K z=FWd!x%Y2pJ}#e#G!7y_zu?c;g-q~up9_*VwV5v#A|ef{Xa^#4;LmL*?h|(|tV1aZ z2NC4O4mnT0%gxIKRRw^R>9hJxY+GT?Z&e;FlW0?B&*S=ojp}A#6S5kJ(FhWzEO>&~ z#9t#4RiB{?2Cnn667g{?$FuEo?8T@$M$T9+lj|Z;55fSbW+BtCFcBNtmPm5kaU3tn z;<$qY_$V&`W_BZ-2oYa`mf{bj8zZ4y{^Uo&M)M=#ExB5-qz8xy&=3Ow8^SJzuxC=G#6Eol5E_1IerLG9+ z|M8Nqy(^yn-Lmiz9La8|m@So8$S5V)WT}ifdaBz=YDJn}A$ld%OBYPQBTS4@K~JHm zY9XV)!k#zpHHRmU9$tB4w~Opv$0aY6#*$PVT%^OFjArM72^atHS?p%>cnvHq7Rj@S zs_yJG7rF?}L?#~n5LpkUEQlDuVn^f7tQHZ}aS3bl2+^%R#eA(QmH3>Vd+fK}lx2|k;JIvkO<2(PWxBFYat@=vju^b-`hR*wnQ=%7kyKW*pRclm$5~z7>4657r zZe@@@^^Ut!3|BiPKFYDmVi-bf+h{gDl<0iQb53U{DGEx7cku!a4rUB-`S@jgJk)u1 z?(OGP`}>t5Nz714atEeZE{`vL^W*=r{rcniCw0dQt$hDOl1%V|g@m#IFbUNzfOCzS zr#e0hxiHWQ7qb^jWvms{St=);OiH+~!$15(?b3&h(c@%7H%17##y|l@XHTBp`~6HE z1WSmwv^Lcl$>>7wH~;B_lfw_fNghw(3*hi%GuWz;G+%;>804H6<3`T7Pw;q1BjA7v ztOPkSAnQy}AUSXWuv)rJ9hVn#J1ky%zE6D+)ddMW)P3OJ$D9ABxBol-`CbGZ?O^da zL1Tr)3r5{45iC}M8)DV4y7eY+x9LeQ;sA~}$+-Xy?%?3=Ff#Bnyv zhzRA0`^3@htC=;O`uS|cO2Z6<=!Ry#I|vF3KvHqdgH&h;IYpZKlaIokWqs+N+CI>)V05U4hH0FD1%+!;^1o4SUllo!tSHF*1 zn=HL4emqZB-@Cc*MkedRkcI59WB8=OoFq_t7+8vdEJOsD3whB9fc=q}xV>K0e|1?o z(r3SZ44?wyaC#%g%pifOgN2VZmRj(4YYKx${lVrn>cXSA*%-08NE%m_RY&XPQMIb@ zW5IF8VLv$Fj)QxA1z&`{Ac$x`Z%B!vTL=(J9GzgcSBZ4V!EqZeaKIf0_x9btdU=J6 zzPF7nw-$Oyi8{Stfk7h%s!4TOqJwG)mveKY(QY8_6vQ}s5buTdF+~7L7|esDP2AI(SHU_kEDM zDSQa@gCZngCkc!ZPc>cm?8tQb=M>TG4XDPO zWpFVt6{c8tFAtdmB{Yh}3`DV!9!Kju8p6EJxBS1*cdv9KWTg-2v?NiI;Iu7ff=6pW zBo3=#Xv4N0wt@5b3?!#$BdxPg9QVThTkqb9`Se(lh(!8qlR2XuhGv-ASbO)*x=P(F z3(m-Eyv*Cb`rSM0z~Z-DAF<>($EIz zVZaz9NezmRO0U7xR0mTGtP3VtIGSsj4A9czEL83UM9hi1FncH6J21=ut*6E~X-k9W zW@s`|#iS9-yZp_U;kQd^5(S&jZHIQ#Smyg%DgrxMa8+4kw=wRfcmufz0hS1%39BHQ zHUJK*RftZ@HCrx8`XWHAycv$5uV86IQpE`$pDu##g8nb&7p^gI`^*8oa#vR+K~+Vo zpdn&0xtP%ow{8}GXO`+;vUhW*o$v_6Zu$?K!#JsadjM=2rD> z+DK|}O3fG*)*L;nOcf=Nac>5qZ_Am{`F0O6+k z^d1dK21X*dT2x=SRTW?@G(oVYieiU<_kLT}CY^4KIfOe8cY8M9ED5b@k{7^BZ~_T} z9Lm#!OH-{dLW~tRx*6$jy$H*Lds!-yK;gA%Qgl~Pr-$z-n$t17n61{@pg7_b^Z5R2lqVAyyb)e&j&c9!Mc z_vRWaXCANs=tKQcg1}bZi<260nez)+Gm;8hJt;El%-hvCg6aD{r7P zfFJ|r?M^p98AzTsfI6O)u5ch)?PwHf)nbKUt60HZu>9a<<}wThLF8=X?tsOx{Z!7{ z`$oL35D`YnfT>K-I4MtxH)c&(?#H$*hzOpF;(#6f&FkacgJd!n0ZRfR$s5dkH;=O! zNl;4`+!Pf-l4#)`H51}o0D=-g0*GX421p5Dw|!0o0Ewg}yo+d!shFAbeBh}t9vD|< zGs6Y*nftgljcKgzBx!A7O&Sh7O^fB7#mvXtRPCR=Woy2eZ!H?hfYqJ^BMPDkSb43? zRe9n9t+uhY#!RvRZFL$FfbV0@3^c-Za~)l^F#!|lD*Ds|CI|qxR>|Bo@t_%SjJho) zZA79y%P?ZUvi`NqYtddG^>l=scHh2s0A-mJM*&bEHg;sGe{Eu}tvq~c=Hc1m{@K)= z38tq5X+tu`u0k+`z8-%1*Nkf^u8(f6H^-;G=XmbjWxrxS2*pc6xf~6%nPBN`F_Q46 zuY1K4iu^dR7M=-?1TxqqMyn+R=`Yfs zD0As(pb`)QHLV4KsG#ba8;z>t9l_$X4al~PA1kx0CT=K}q%~ip=;~=)BL|lRKYk7u z!sLoWj61~lYCgw?r;mbj2mABIVw__wVpZMDQ$uAm8bD2gTtCSd@-f3R>K1$OE;$Pd zuxZpP42-#~@3!@!lK7j&$wX)ypxQ{AJ`xNB>U2bq!ftNk_=)CHR(*=T)VA9gM?Fac z1IFDi-K%5&TB_@&U88^Wdg7IEeX8?EJg^ut~sd__&;9E0)TPp!xvB6@b{*!z+2~=g6R%oJLsy%GzJxtNq45g>z*|3BR_I z)_UelZR#ZIx!GSd&<7RX5Vrea_s7E!0Z@~P)RjzhJY|v(8f>0kFt6`+2N&^mP@Mz_ z{KEhF$37K?!Q{!KM~g131h5Keg2{0wjhit!ftX32rH$PO=|!`HvTe+B!Asz)dG?j} zarV8UaH}BMfjIgyye<3Uf3$hyycxlWpmA-;mvG@<8t$CCIX-Z6JpI%@qC$`qGAMwc zaGHE1K(>(U!mY+itQrNQFZ&-HMt{s|5UN1(r`xC00Uw15gn$o@cYjwh&t{!D*UxHY z@u~2rEi%&u1LGeL@o$&dv(~yhfk#4uEssmibEhf)7rA1%DfLMU!ZwH(R4U1X}Ft~Ua!x7>8cf|8dSR4QoCXqs5 zE3>Q&>#KDDMk8Ppe0aS_7lq4DMu)xTI7H=-2MDBvFdeJfr{!zCalzozQ}VvevFk=d z4!w&WRGR?{2GQc(zzUNpszQUHb#JXoUz-SX%Xs%+&z9lyKjWk5BLGZffG_|1`H4U#4E5R5-~Nvr{8&p%J;m!_>8?c_a6Of zeb7-sApvDDJyG;q&6QW{Q8#jrESnKT-xLY)}E}p-I>x z@eL9O=6d$Nzw7_u`}?bh{wZ*0+M#Xi))SC}{e!yw76%Fgv-$joH|K=(g*cSC@piOQ z#Kg7_!~OLx?qz0v$Xr9Yz{5=W1^laN=w12vc{dBN(%-|C#eM66x6hwEdiPF>x~4@~ z6DXQc*Tt;;@tT;p`?M$_5x~TmJ6A&l-{D!sIv=w}KU!ao4<23T-rw&}2G~oFsmh8v zebm`vEz&=p0`To)gmqfRywya<5Vnm)i(y4$h{vV|Kf{Vhyc<)W>u=UxM5TI~nLP_9 z%j&EC_%dm81G)>?RWh529DdacwD5LiCXGcGi>sr&crwdOC_tQlQG#vvuW(z1c#W~w zm?ky~V7zR!l1{>S-G99&>kkknwt}p{h1KWl?XL5yGO%Wl7_cSDuVD;?02y$~H#TaY zTCUCA28H2#gVG<6a&5ED>@kb?szTP4;^f%O<2V<}bt)Oyq}|;-0zH?Hf7XNGPA9K0 zpA_-nb6Any!s5@!8L_53Td#k2{*&pGWcyQ?dO->xgaAn#m*3L!Qp(-qQ`wo0vmiR% z;}f5wZ=dR~ zsJ|F~ba?qK)(k-YSx&kxEz&!m124d7Y-5j^sU`l;ZIFY-N6&x7A_++!Jr}Yg_P6}y zTRzFqtYQ-r-l;g|v67_6ks@Mo1?vJk$5kZ%mbKQjPt^fK0)v!63d4OsF3vwVcmt=O zBDubDH3u^<&W^a@4zQzy}!}_=Q66tC|z|~qd-^K4$@DiTZi=pc-~%@YY_AG z9Q6WkM6(9m?qU?B2I5tA*{(EKW^&rQNj`Y6`SzcL_}71I_;KI};3h{Fgmdt9f6xy* zk6-m`d^UbA94{}?{`v~jt}KMgwrxbDU-8q?N5AM-oY#q#k+uH4kG6|^y3r&e0NZq5 z2FyUlRJLubyAWl6((fLf2gqRz3`77i91INbSwHE^d*-V^@M5$a4=dYy?|T~zf=JHl zfKLHJfVg#b4lZ)yLc2usbN=)p$xwrx4(|*CvEwnm-`VY>kA?DjBwSdm)J(rOD6PNr ztC^bK1_J2?B8#S#lW+ca>wZsuIQWcT-T2tP1x3Pr214u@e83n1<3RdD3Mnd7q{{jQ zX1L-6N!Z}rP#^*txApoxayoysmPCsprbN4Kq6pTkm&@?BAhFr>X>KX+(Cqm8!^wx~ zjUStS0MyL3ot5rzn7{d1ls}94y6$%P%iCZU+Yp8r&D`es{QUXz^Ywz_7544R_Cd-* z4|M_NS)+=fTgC=QKjglv6s-h;1gMV*pz}B!)B%R8-%8Jbo`49>Qy&m%arM3GVs^i` z-&IGxmzi>??o~?3A(y4FH?;k8KN^dRzMxm)g9JS!z>bJU$StJ>PzGFDUkjXWSI3!G zfp7vA=)Zf44Je8*-xpj>I*a?IrQ_Ltzsu1eF?w-$3$zNFK`Pi0m=x`SHUPQ>svry_ z{xg9IJCw_7JgX=~B(SdE8XK;ObAAj=VeNYUp3DbsZm11mTXy03gpr>7z=~I$A z_i3*0zM=QN1U?TK+2IK|x+8DCxo0Pj=G<2tECd$=n!8z2*AJrLxWCHocS%I%33`|y z)ns8>#XNUepIlh=R%Po%PA~)s&?XM00q7O@kTi|@;UY)?x`M|~A?$KTPA^62{C&Ug zEVIRvX|)bFE<+EbK{P1SSIv*EA$AOu(Ruco+ny=#5ZeKNzg}xK%WNhU=K!&T+inhFUSxg6!Zi;5efTDEi$2DP>;o?=lx9iT5J?JSS1338`!-^B?m1eshHgPt3CZ z(NPiU$JT|ao^MBJwqXn#{@&mN4E$zS># zy7RR}pra>8Uj{vkh8>OQq<4WGP^j@ZyjBIHzU;_@&M#D>+s8#xq{*(kSxi`^s^Jqd81 zqL=IzG((BQtF+gj&QI(A6iap0)6i6rl~w?!%B^ zBz+ciKV}3)QFo@Jf&M%E?i8S*zQW#H1g{SE4ICWRi305XFzaT3H#I-x^&x$?T#8($ckaDxvJb5X z#!R56F{jlC498Rh{eMgjQUK7dN8Mx)lQlQg_x|x|yof4Jy9SUtcvtLrcb$S-GdGc# znYs6$_Yi@hPxZYbB@w&v>B>Os!SqASFM7idrT}dIe~5RNLXZ6sPFT@5HB6%fK>;TR<&gi0m0_e%iFmD9BZs=+G zBt;z-L!vzK}NQQ zKrjQ1_&PNhF}&t>ed|)7yB3@7)zJF(tDi#Xire>+B%E7WbK6Yl6xfk+l}y(=ug=ZG zm$&!(SKfLkvzcxnE1)i7WlYxRV@sbvfJLL}Uj4UXi z*yCugzVTJRA_B&bu0a(AXQP2+DJQG7#ns!Mlxq4KtAaOl{EG+bTx}D(VR0(+K#;oo zhzkZsLRa$~nngh%uFj;PI@pgRe7xSNZWJ-y0=Rns5CF`!F5AJPl*+feZL z6cDxOuTX0s{gltYhdpu7up&h=RrCQwYeTN1pkrpK;nwxX+`%zK#KH-=%%YlW8X=jlq#T;ph{7vC6@KfXa^k31uFJEqeYW> zN}#xd{Rdxh*Y=8n(E&%%4ahwwc1`_(r-qjedXZNDb{at|jWv;{u2EC?Kg0cW-)tABY9c$F7QBt>jGT&5HFKS~ zO???@?;Qtfj-yt)2S(Qi1gHY)Phx{MFy&+KAd~dYAydR=#@Iw2$)AD)~(oUcb{f&Kr?(Y_X6l1lkr*acnIP zewW|h<`iX+e?fr2X5$aC?*n(1?%=NOd;?~1pe3CC_7vpn!pl) zvrD`9i2%I{z~$}N;;=e2X$(ouIt6&b%R2i#a;7YoeP+7ka0;p8s3~jV5F&wljNKf^ z)v4}RH}z@t=y1-VGDI5c$VPRBqOQnB<^&AJkiBhZO_5>^Xo&&}I!cwBN&GYX^92q> z3z)rTCE8bIu^rB$mpRBpvsj~+zUk`{7%CNk zw+Z}Hh2i{U1O`0d^3sW6z?>AIj+TJ)xq)Uwl_aMsn|UYc2QqZ7N0(8BMPWa)HjmKmJmR{$g0AG zF&%KA!9-96&;mLU2C0odpg*KP;{M++*X-LlV*L{zlA6e1CWN(h9k_!@N+31Gv@np}|}t_O%vCO!OZ)Nmp&*HlKBM6Aw~6zt`{zV>+n6Fx))3}b@?h7|{g zU)uK8r?e0Rnj>SXY{%^g zzs=OLqX{viaW{)TA-cP&qlGOAGFB!At!Ln0aGRyAif)*}vx}xl82;Za5;pkR?$6J( z3=jyLE|rQ>iRVzt%l0%-hpZ8yR>(CZ#Z1O6l7xf5>n~0{tt30GB*4jJtEf0$ znuLAG^(yH1_unV&##i|L@IaY(Hk0-hdf~9k^3wTpZ;Gj=X0J--sk`FKbnUW zAYc+}0e3j%P)N-}GJ=@J#>GmQ=(Gc_co6buzCmI-lab+9I&+O?4y5GyCBROy!!HI& zEOmG9ZdQLWfCn3uO`mjW&pfokptxnk>I{o1BB~aX3}Y7B6QHhugoA<#K*)7+cRzT= zu2mGremL|fr&yE2;VbhY_zB@{CO1L$ewDv@FN|^@!@+`qNT1@6({P7gX+Xi)ENoCzQAnP`oW|G_Ll&K;op_S zG+-JROH7Oqu0Tt>QmE-FQjxTV3|SQvL#%Rv+PLWaO{&2iK~sgtihmXG!_F?!he=^c30Mh06{^pQJl)F=a5Q1xM$_+YF`SY^;j)@p0moi)|JmFKwu=BwPcvB4&y zNxKDILl)Iawq>k>tB3)r0IG}H1ZuFD7H(1`fsyzb? zJ)h6Zi*s*{bJ|xp;=BLLpNQH{bQ%yXpM{fuvnzO6(ZOsmNf>}!#ct(CBsLhsCNB?3 z2O=fxKQ&sFld6*En1PT4R}|E7S9C)_H}uy%7fW0nU-sZ@^Q^LwI}92tSfD~gY8+IX zRQUq4Ol6LlH>%4FFvz}Z7DS;*Sn7w%%Mb5;i2kzcqZE>0S&TAGPD8P1w|ruilL=E6 z3o$>Log^lY(UMRpQ|8K^zerL_DN`Fj%8dF00ijv3MG^zt8x%kRNAbIUOvxFb7uve> zwbK=qVVMlpHepa{GS+B~2}4Vc8D|dPr9SY)Guu8k`Tmd`da$AAYm$<>0EC3amv{Nw z?S+tp>8JVre!d8Y?L;wvKvhaL?a0mZ*FqsJvM|&pLv?wGQPt1|Qi~t}?t(Muj^gUG zu1zGA1~OYQtMIANu;m;j+Ad03ve*C_sQy zcJ6cAYnOW;fTfr*#UF|zaOtGApBmZ;EDR!IsW#x+*QMvV%A}^bts=mv@AzmGDmf{R zn2~&t_K?GgIu5GI(bs5|DZHbvKJcQ}wuXVnI*GIdpl+6NsU$l!2%w;f$4aHSyw1Np z^@W7(DoV3$wt6i7{B%37<4|D;JZeeyDghE$fij)%0zVnFvrf3-F($F}!xFfUum~wu zeP%26&Phqjs<~)NVpm3VdululHg7?#%AnB*wL9+SgOf97CT|vqI;RkrhUjveGEsjvc=4yaJ3RUGU2d2cki@cek-jafDzSh7Q|wBv!a$)3RDo1r zqYiRxuK-rHNspeW9y`@5vd$;-C;Kz=-;MDu|As&N*(KT1Ck$l&fhQ+Lv1st&%UzPl zOLn+k71540^C2b0m(tfk;1+@3`q0ap5>QwFsvep^_fZ}miGEcCwh45;$Alu;jm9ee za=rSpZ=f%)_$Ylk`y1yt{`;GbxYGp&M+Neg0W*mZ+NIkO`w9YATi78M@A68oe4Q}yQhBTYVRFVz0B{=Xbi?)cdi11UI(pj2 zmX}pSq|_By1x@1+=T-Z!lmzcsuG{O;uunAQ)) zDFD%U^5)k)`ds`1Ji)PG5jRLc%38QuU|XUp0R8=qdfb;BOYSlH1&W;QX1zkYUPw2C z%P)PwJ|CXR`uh?$zXKKd?A!*TAMJoIBEUZP1;*4DDkNQ^Tn*6_72Bsq zva%}p^1S)~@@HK}$7S;mSH0+W;;?lK~u^dkdOdQk7PG; zGo}OvtU9cZZ&X8M1L~i->(|Z~;eU7Z8Qb4jng^~;1InNp!qk$N`?w7Tt3H3et|CI? z>w64D2dDuAlAXJQ%HQprDt$6gm!B$0V~oK*U$+y!4ACJvdqLznibkN$due!+f_HuL z%2)aEZPu^;?D&O2j3Oi(Gf>x2$CUyJr~AhTv}doxt`b24_Rcr_#BmEYCyG z1q6v}0mh>Y)at-d=EwCqLJ%vwc>alqT!*+)2-Ky3@c>f?Mc>K)kM_UR?aGKx6HTQ0 z-oquf*w`r=z(?JW&IKQ?f0vtAzM_vFbW4{zIT$1Ej-lc_Ozo*TZ3Jy_|1m%T1#_l$ zFbT?!68BI4^Y_31&FKIBvyRUs*+d7&kl4QnzshpR$6fkl-43agBq*a7XY~fkLUx^# zaa*GR{P0J))Jv91pMH;L@7z^7l)AV+%$r|A7;gL$KG?O8n>d3MejI}9d|UpuU#~-~ z8G0C7JiK@~1>f8eXrwtbOf$&{%9xjH%(Zq?0h5gQho8;y1D~1tkK66`mp(-hEkKm7 zjLVD}+~OOOC(%l?phM^=)YT|dd?KI7^`rmAJ3HU>@@->z5U=dZ#9L#}z@P`CKuwHt zLIL=AxHHdamU$^5wM zMAmmIGgk~z7zsd{j9pb4643poZeJ_Y{Mz=qC4DUHBN`r+9s(Uht1l8W2B}6`!pd9# zbTvJ^$xGx^wkrn(9Zy7o4%n|U(TpFm_<#ZE5zy0UfDnloFGar=`*o%Y^eVh-nnwU3 z67pX7=i~Rk4L^m;TKwUP;hr2IX&L(KR|r5-U-h=cu&SG!{s{g|*nY;xfBA0b`~UE+ zY30)v=og^R;fFgqcS9kw(@Aq@8V&ar;XjOC=lc7?nkl?#c1fIGg3OKtD&4RQ35l0h8=(|@k-N;Ak*nAUz;g0f8KTeD}V^!Om$TuESMx1 zz2!gOt=w(EQ>$W*o&^0*gx|*B_{C5CEL@)^FoRC_FhRyncr1FAXBNWu2xFRbCRkjz z>*c$T*N^|^k6j~<$6sWF-2#q*RlP|%klB;tl#`^s8=HbzPy}`Wc8tnyKwgcCfg&Pa zC9=>rSB^-ko-Sf+j(!Z+cF8TTC-=TOdjz;L}*@{CRc6 zrXppdWosG84>5+G0(}WnW;GOrfk~vJd&~z}_BixX6goa=(Rd;u|6JJOg@5B8`1bbO zKBS%mQ49G>clJr2Dm>4KKo|3cPiZtR-Y(GcDjR;{+b{fhzW0|u{*N>k@J~H`>5n}8 z1zvpqNJNOL$JQ@t(2>fBfZ6T~FTg;RBr!A#>@I)+V$pI8(bmhoc6}MvQIQR#z}l3? zGH|GX-b8$!8f5AwASnR= z#`qnL@MQ}*F?(_vNV!D;or=o*D0Ey`<~I;(uDo?vhWvyfNO+B(CH;E%#)u?D$Mh-x zK+yjM9fnU|0R0;To-hevd$i5p_{G~F@#X2_?Lu3NMUwgE{qt)Pp$dZDrjB~OD7@n` z?0*H`_@KYP`##{e-nH9C&`U*qdB_o>Da)y1lJ$Gni!AqKX2lI|7U6 zwG1O76jiyj@vR5cNAEMUJuoJRgp%;)o;mo=mq#|*J@25aNSlbAZwRN9Y!iwY5^ zpfYUM#Wxww>Wbm%?%nH`i=v-Ymlt4SHz>i+p$Eo59GcKJjO@4fsP4`?JN?L2rLF$z zwb~iaauMD1|1V_(3TemHjZGG;fA?+{bc)OSef6DfKJwYS{t*wDPyUggY6jy4=mstV zAF-5?9D20MEef$_MTuQyO4z*((IOFq4AzN65*Qda;b!6BZh_!%>@U4ev+Dq}VnORX zU@ZU$^cVzHG3~(V6|MZJ4m8wVUwt3m@bRY+xqgvD$1zitk@WS@;EZJJhE4E^>6Z!d(?-r~M= zk?cvYz(T~kZ0%xRPeY_dzVbquufoG`2SI0Z;%fF_-PPb~Xlz8mU`@dtj|SKwQ$<~A z#N~K!zuQ(Z<|3kZh}JzUIw_NYb^IeH)IB2z6%GuQ?9B40BfOY07AeY zB-1N8^J8RANl=wsQ~K(!=fu+$S^PK+mjB3hk7txhlYu0Hqo4%`brC>d@lkAAMOD?4 z&S>13dq1>wj}_yspO8pSAgIKc({L((j(6T#gA_jC!vGL~KUAidzxqS`NWZoueD-q) z-jh(*-xS;D|Lg2;3rQ(1HlOkn7Jy?^=37YXNt({#whVXA|5{#t{^cU=Zv>rgfq>Rc zU)VN9H=wBif%s-^Y=}Uta#Uy)5ka9$^-q5bbQp6@Vv;4H-Z$no<*t)h8)GkXF9X~u zb8sl6GBqc5_nF}>tZn+qk)YVJ*pchPt;_qoDNmVcOyV305(-c#ot8h8#62#?!E@$3 zrcwJi(!YBa23z0xC|tmJyaH!@we+ftx&8L4ZT$|VUrnf(H=Q_dI3YJkvXe^#+QI_( zt=L$u$Dyi!{Q!w%6%9jWzWhYGR*Ev!7uPEfti+owEQNWcV5dUwcK+rFPs1 z^Wkq@1;cv0Y5c1!*7Rm`Yu_yGwf^@%`S`<5zk6H_Iv2aPw|`ZiNVd!bXjqUFi6kWM zansBDZ(sQW2}X-CGFaq5NSK8F1o;3jW-;b8g18z}baYhs2rG_pWlG@P;Q(uq_z+F5 zb3Uvt|9$(dyPvNb)yq)GTuFz-C7QwZ$Y=9R-0b5x@sT5C?}XLZs2TPpWj$X_NIJTEL;o55tO{dcg3b)<*?&I;D z-SaPhWLT)a+r&^Q;9yo!m!IB#_p~2N5ko>GHwQFokNofMnoImU)6wx=p~bv7vb${@ z#a4lB+9A#9ExU(r5MV_p=)Sdib}XCbi4)M9R$#-~*Y<}h`83aWD*Y39n|Bc(A5yU` z{Z=yRxelH5ZS5`B^n80w0*O970zNRlFz&XH5=7CsRX5AQ#}QBpIN?LaWr{$C>a8a4vg%r*M3VV5KpwD25*s@+2w21P8ZN@a0q_L0f4 zpt%q{S9pFIl|OX5Q&lmY9fDb@;CG))L%XVnv?#j$W-Uaz(EyMb<|o=^|TB*2BF$Dk({peKdc1F zO_WtuL#2T%u6CV=%jhIv9dSDnXI(w6Ge}6ZJ0RqHvp3jIPQ#n_Y#C;;7m>UqFdz^> zKpc7A*>sj_?}ktFFT4t~hh<9#8#@y;wA3JR8VXt5N+#iLJK*Ls(Y8BaP7vKlK*}8o zoy=87C^%xx@g{Vqyo#F0p*i?GCot4-5 z6lX22&a?#-9Al9Y!Ey$9nN<=p3zTF@tGq(;`Gd%5Br+teFgffhNu8 z`!#0yHmEk_Wt)V|Yn^U6L)O7*_C)_gu($;lf;G-q;ENV;t8z0t{_4Evj0h z+jNOg5I5*{l%#G)l6McRnK&xCAB?^%IJe{`xlbT=1sD$cu0ghd0;IGW$v#rP1=%b# zkhj@3ZL?CAvI~$o=^Hv$QOD7OPibuxNfi|fvH&0@fIPIuC#4>#4piPsmDTAyWIoOh znj~q9#oTXVZ8O`pR0ma$L*wj6A!hluy~T_fFanT52^lGmJ}t4kz)xX(=yRAb0w*|tIE_)_RNHmeNIE|CXXshheq;-Zn=aTxk`ai6n9{0&qFV-D1147(23<)Z<7J5G$IjCm5{$?KAZy$Il9UWBVsR8V)f zNBQ;@Okt>O7>3I4SDo1)VA+U8XL*)32Y=$LY{f_i&xv>iaL18(x0}<^$M$bqh&IQ< zux-!Y`jhr$-+QN0RXb3{$TgKrtC+RJG--h35_|hh6M+SlXVYyHKM}6c7`NAb%XKO@ z^Vx$Zi!1CMS64=h*qH$w9B=^9hAkmhF;-^g#}N$}gmXsL!}?_NcyF>B(L z(JFGf4ehu8%`d{g``u|}Nrq5;<1P06gJZJ1Fhv2iMsi?(W&$|@Nt001-FCZd)gLHg zpqV*%c!5%1o1=~^;2|hDMMnjT!%?iZgF4FbeuGiNBGI-yub=GRS4v%-F@qu~DyrbP zDmWJQAAb-xAxhN_yf<{4n5rADEH*LOngcl^>8|m4Vgs3g&jFe^C|dA?A#1&@l`;Dh z)9rnysEnzANu>i`P$i^rr#))7Z3Vug2K?Z6AeIn3XgD;$)j=J!!FJmOf}&G&00+hW zC14e{>!ZrXj&w{{@PBU&S^*9TLe5y{q*ygC)#$9YZ8kY-z8R;Jmt)0}51wb%;0ic8 zYF=)s9#tHk-1(b775BIQv?*w(;SYX?poZ{ToOYGs>fDrb&Wsn_UBM~!z_7o3ykEs3 z4WiGA@4mVD#!cCLRocw@p@%4w?A&~%aAmTHJ(J0zQGmUQ5e=h8p>2Ik-j1^hWlXCj z*h`8d>V?`M2x2DeY5{}_r9hH8BOP@>D?pThg96S-f0Wm2=yFK=fuf>O2m_9hfX8M{ zDKpvl4Vs$yxQ=keS$6_TX^AtY z-}4Ya+&rjvQCVEwWA2}iLKy8WCa1G&9rrDj-mkDX?8KJ{U$@B}+?`1sHATtG{$4^b z@dmqzjiI{@TlmtXxH7KeR`t-53>*3;*{=F-O&dgIHWf5BKKkb*~^iw}J9j-g-Z5_uly|bOm$_a8%?RwBUe( zqj>e({R;UoY_~Sq40BfSj#Bu-ZXO4EMw?}aM{iQnR4>S*{c-NZ=#MLe$&5I!rwlQ) z9L_8~IKU9;a%N4}=HGoccUg?4PSQ7~K%It4yE( zA*p0Q#xakveQPPRZudBvkwp7BTkzdWQ}4*r@#xNa@#rLh2nacWS}>7Q#>OxNFbf7) zY+DQOwd*QoA#KKF-?m=!-5o^l?D+Kp*a6uxHWUdykMvbDiNllH?;5D3fYvrg?I+fx z?R%01Nms|@cy+uwCQvZWF|HuYLIJE0+U0)i9?ec4?ry=Q2J8mq_9pJaOt;FGzg-(s z-as#c93d%kp;ch|rHNKzA(%mI+h9cGQ=#=b9i%XCZ+)wwC?mBd0jHisAooiyNuF`j zIv%T-&ohw@D~jG-LAe_+5QpYy9W3$QS`Gxbx;kc79*$UY*V}=w*Ad}2Ccfj4zW$NX#*|>K-K}+F0Rp{Rf#YCQ@TaR7&J1q?#4DC zL%&?Qk=!3UsDJAx57(pd;*)4nX7|31ava(w#GD*#saP zm>JjD=uzl&H>1&@KiI30q?@2HDJFCDRv)RE_M|t+^yxl8ev0TcI_gMQd(#U@IUI zyC&;psYv_9bW6B*B)WGm*7>2Zq{hiMulGSxstO3#b&fFcnOPIz7U2%xFGyyPoX-ox zOR4c5l6d-yq7y}&w#5{47%4G~A&fL7zzpRCC}+T=vaJfONuL5u&|Z>BVN7c9p}1EU zm9sZ&zxx4!eRRgtS5O>tp#*TS* zRTz^IV9^Z-x^1Al)&NCGWF>TaDVb+M&L)j>%8Ia247OW5WA6#G$%baZTp=+Xm1I00 z%9L1(Zw0mybR<9`D-bdmfom4))P_|<6-H3M2!ca$zr8ZzLhWFN#oR9DOLhV{r-E<+ zOuhrS+i4h61EqWhZ6EA3p%c>?2nZaLUH$<3kXKUFZ=GtFQX=uYN?}BQ1M1SMh_%Di zU)e2WP*N0Gi9%Zg`o~1HRFH;&{PrM|n-n^x^jslhs^oPGW(;4y$l52e#ufRTP1Y3M z&5y-p%#(~Pv?@75h-EcMJiiD~vMOe9+cWl#iq2!s4gPBfKxW@VVv|pcl*Fj>eHpV>y~hmrLkH=)F440#psQ zn8yU+A-ofk%xv%|zZGjJB>u}Obh`bv?tjw%_P@pqc@aDd2=P^3z+VV_mns)r*F{M3 zQNMb6yu`Mb9fgSdZN1g^4*p!{ zdc6@vCfo5frpadiU{{`|!ePaHh~QOmRbD7qu6fQ_`AnPg^@y)^tA1iYTtP$&R+0xJNoV5r9I@c-b6 zB#lA)07aMrr~#hHHVfQ0Kq2HsIpdu25M%e9&of)~4PKL+Mj4=k?xIM`px5H#xbNH( z0byp-0`>z9K?(Caj(jg+fpd(upGXL^nqC6xqWA&VD1&m!YO=#$Cnt7*qY?rvAl3K( zk%oq3u$rC(T?d^7{eJxJpR>*A2_8&+fzDv|@w1&1pz@tQ4vv&-`&mJ zy_tRc{jqO%-hVqg-|iyZq0{{`ec2DP-Uff@pT|v5$c&x!#y@gFaJ@JGyS zFX)iByK*k>KcgyR?$T{HDbpTb^j|R`*L|Y zMfbP!9NlsiDD^Nog#ob907+}2YuBQVh~_0?{bhVjq0czO%%!^;viU1CA;+Umf)76} zBMo^~fcK(9Ods(KGMt1^DW9J~?fgbI^ELfO3*8C0S&a=s#&N}biYgmy0If5Tp8CO= z!@qr$2OWX=q?-1ubku^M``Qd>PGx(Tl4F2m6wN8-HeLrqKs?%eLngu`>te6ygg|QQ3NLO zxi8y&!5JbeYNhE14&cfsA)I2<$5Tif%!8MK=?`6!t5N%RDkgFjY_~YwDK;E2Y;UYw zPPp{OPiD2GgXa}P_{$SNzRta{-DFkg|D5sD$5H4@M>oZr&OrG@> zWN+-br#xmdV`W9z+z9mr9QR&P->7d5n7i<@h z{L^^@d##uY22<>yM+HYxCP>(WC42!k`b8!Dy}MhM&4tw1+NGtE`}R05yGUu!Az3vO zL>o#7U!M~yHK)D;7yz_nYz8vCp@+@oFWqSF(Q;(?oO*~DxM}t#b)0L*>KRyWHsv~R zqn&k18?AEPSsB6-D#llx)vGpVKv>Nu<{`AUBA@RgnC;Ou+?YiPVWNK1Mh*;JX>_%) z+f>X@YHPQ|0$(&V+Le6BxH@=^_u7c|b`)6B$A)be0wMl&|NAzBk{LJkZ&2B$m?e-d zeWOd{N*>Qs0AfI)1yK49fp8E6gQ3V^E>R96!**C;%H+br!dSoxeVK)~qzW0gA(HAk|A+-o z=uz0^k?jizOKG8)&;`#7|E99c744m9xQY3NliPm6lomiBLK4d`Szk)KX91u`7d@0? zAwwOXP_h@fzVEnYs_$PU;9dDa6}v+ghm;kA1K))34`;gK!Ndbx_y#}`C!UgI2N|oB ze$whJ@PWUWbxZVsqCXtAB}c* z4Abn44y7Hh$~~t6n)eaEpwx&jhm}jXV*&Uhsrg?@1X8Ji8nePjv^y+@kAS1~IHks4YEBl{2(7@=6p9nF@3qyb1{eI+ zTGS2^{e#!s0$5u$mCF|qFVOhG_9sz7%~D=YmPzzlXRr^l>^(>NYktnMKNmY)f$h|x zqX%itlVgFmqeq|Ne~By4eLsr(dhdKp>e^rblr8f$K?e!|ul_FaL1HuGgQqPQ2o!Xr z;7#PdwHKY^&tGAau$=ubVs@pIkXtw(Vi(ykKB(GYVg2v(t|m@M?SD-0qBv?XYw<(g8M6rTx1wVB@HBBUe&Y8RH<0Yl!x2bg zNK9AaXB*>f0QMzPJ(&F#EH`Cc`6EHK3$5p2QM;Z;R;VyYTWGVL=JYNyx z8xm$y!1C*=sY;DmiSs&nlWW&yk&65}lr6We15#?0+q|;b?x&W#Oev!-Gq2)2^LQ3WXhS zcKVb>c$X?HGC`;autw&6)L?!UQ7IQ1qejcEc1N&*`cK4a+Mrb)Vek74MWk5JMRCYM z*7A5rSebr6t-@?!xCblCv_2up;h;%cc1Ce`fQ`x0`+3Rxm#*`2a=N35)7NUtaX){C z-hrKe7Bz}^7^MK4$yqZ45I77I4mG|}J#e&pGZ5EskV2C-%d+v8x5m7agA~G`=eG;b zZKQ9DgzJQJ8w_nQOxLvXRZpK z(tQ0RRmW_tJEHv7{X{|c`9J&a0s)Xp`j{T0GR06G4vM2$rMJk*ahG$)u>5~{j~+m6 z!nxu`@I%Jv^u{mUsD9BV6Zsl!#fJ|B7+80<%nVxDayshc{&vv&gP=3jp|A!6ywNkTPs$SDw-E=6Mlnl;>gV^l?U9=%Cl{fLLc6C`n~! z8Yi`dg$2fj3ko}p_U;IrREL#7xly?2L~f%q%K3Q; zi=#)-*zSw)+6MUORRGEWWwdV9ifoP{bvG(SHlb5CH&NR)Q4)u;1O>2mgP_Iq zoG-mBbG={M|K5w3$xT5q1+tIDzJ5uj6$zIy%&%sH3q-n5NZ#>$iku<9K1@hsUlR+? z|6W6_A^Yi$&8Oxz96b&X@{YK^pr`|3u>c4*rvG+Djpm#<4)I$kjbDgtdHb8p8}FZY zy4Z(Xj>Tt4#Y(!wKy(4Rjwns*gB#7RP1-+lxG$yD92%9>7Hk_`&X1GUT1i5g?87<` z6LqRRi5fzc=Bc@g9{cfCOtgFwftiS+QHd^!)+txW*ZIDqE+VeqkHmeJ7EGc5JVn&7 z3!!Lq%cApFptqnjQVb9X0a`gTA?c*MmM&o$|4t($pW!kN~k97U$VF z$Lyl(>->J-7dtN5M@@g(ggEmc*kVN;ieI8%{h!ua$my(pxpE=MRw zti-%jenKhjcbx=tVR+xChR_4{>$K^O44ZpjssryOq`xhPdsWScH2#D6;I<1pE4^Hm zxaAEp&62n>bnDEjZ`X0%p##Mbe3SS(K7&cn9&oJLi>S$WleV`F&gK#`Q7UDQ>G&3( z5k{8CxW0mZ%knA0_t~rMz`%fP?Uz+VhnUn04FN=uicjtz+VLKz z5RDsgQm$Xb3?n{$dr9kfLtAVk+GNDHJb7sz=6%0sgCseyP%e!A1R1b%-KkzdRHNYc zw&YWt-jq7b;<_!srSg*#eLuOGwQO(p36pdu6_5Fd0ki&Y-V*)Uv8D|p(LPDzCyE@Y zbbIEqM-NHC@pvfhP{BM4g^ZI*B71TLgw?n}gBvfDNgg_Eb2CwWR*KB&KJgA&91MMa z*j;;=qW-5m1~V4#JX1oM*H%{t5G-^sk!ShNmx9u9Q%H)6yd}qsh}V?5FPp88yt`EP zYw(aF_oKe>N4%nfv-v*YIpdZqaZbJa;dZJ$%4Xx}a$LJME#Oxm-7XuiaLH@Q_-{iG zbu^8Q)FZ(L*IrHE*(_a}o@k|L*BIe=nuBt6_jf(6mQ`(M4fQ?P3oK<$3Eu$-Btw?< z@&=3|sH%ovt2)o~)>g$m`fB7r!H^%x&%!3rkazXOy^t{bh7r6S+o^BL{0#jP? z4|Xpg@AH--N588!LoKQuY*47c~MXOefbNYu~;mSo^zQKu)tK zR{6qBS2puBXyxc4MoggN%mEmw|U@L>=KkWv_JALc#}y4s}^GX5**=UZz*%1jAxi)pK?V*n|wC_@qf&eFg|- zAbuIY@$A=R+f(n8U`<`{GJJZYvxQ(mT+O@E!PwArv38B-gVEbjv7K0XchO{d_7Qm2 z96Ad<{$BAOga|3#*nYMnR~+TY+G3;*TTGhZW;xo;xufQ-qSk8Jo+zNT-h8sPvD;p~ zAzkI7CEr>f5*|7OA;#bD{!N+mUc$AKZqNOB+&%0HoN*kZ!<8}tnQ;{=Thdyi{~J}gLkt*R!5D50j{A_Yl=Vo00>aS6Dk1mp`igVD zC`4s!kjF2@VAcpp5QdN@(`g4!Qta&P&O75yPc2JwD`j1x`A+CHna7^JajOu_*Q$AD z=+C(ZRdSkdZgjE^z9T?WM$9Z*CsibI*?xFqPZ3W4J6l=xMc7S)_>pY0pj8E1{VXw(Xf-`}a1=o^g~SJRk?ii{dC z*!O#RQwTvtJ{W9_<|6`&ahi!i-5O@1&0Pt_sGb0b#B$$*d-9sdhtJB3y6z7zok&IS zN!^{wxVze0l-sgq**<|(DDni#ng9E zAsmH7D#Um(rvoSP0?RUBscl?4q;R1Z3g5%L*Y9wy@x6`YINdgbsta2D+v3VUlW_oi5 zRWYICy0<^K1|geD`jx~n`aB3ph8@R0?n+|5Pm_JdbP^>EpB6(wgBpQ)8>1I31r_bgaslzHB?T+d5(r1>VV*~Fx7;my)#FJ7 zC3OOR97&&o;TaQk*Y3qsb|mCA9k_mQEd+@ni8#!`o*)aAFQr1PZ_ui9N(eC6#X}7I zGPlK$PBM>2=@qs2XF&AZI~T2s$hkpKsthKjLYOQ>Cri`T!(w$uWvpMRLp~G}->Z!+Fk( z2FkY@xiX0DAB#^P8a8ZD^C&vED`Pa;Ahand@o=lSyz@swG|@^tsmhe=F`>pd>#8~= zdsUhamfIsCDlBuG6ms|q@XKqFXV^1&6Z4Nas60B*2{Kv=Wgy`3rh#nn0cCrZoPRfF zS}7w<4QRm}Z;+?YcL87`Fi@=6yy0mHqRL!SlEb1Wa;3d|gNzJ}iFNo1&27CCa+*iZ zb{0(0Sj^wdO+ceEUyv>09DMSjYfA5>apwn3NbHl@=-ir>{%Ydk=gQ43rx3=1QZB{ENM{=5(%B^Dda4$< z@_fKubtpNo{~rLZK>&XQ)ZggT##4x7%h+vaW%1UzJ4hGv>JyWAlDkC-m`SYwC8=Ph ztJ(iHaXkhPfgkO-is`GUz&iJ4@#lwo&~Xf3zuyY%VUo2zZ;v77BSLRP%@)n_S+i98VNx(k6Nz+jnF7KpC3^q~@To)6e zhqMBe8@;J#G1&|0u35MUu~PY32_!kkPi;z!lV`sTh`<;7adq>TvyVsqDldUJ3=DKA zAqCo~uwaTos6`6xBok^$WH*+N%vBOJ1_X1TZWCV?_(odgH%>e;KKIaPhj>0a`+b=5NpMi3Log% zh;XKLED6V5W*<*wH4LtlJjV6a<}ESlGsW(5^ywem)R?Cd<^@2)3Rc=M_9Pn!g$vD}LJ3Y`I=6oAT4>kli zGBr_Ff?A{8YAaFF3DC1g?P;MmBnlKQV2 zT^xZ0W02o~5?UB~SP#Ey5pV&N8{x8tSSEiW`AIjeKxH5+M69?E{^d zyY?yk9Z=f-vQwBMxCRxV1ONhs z5hNHs5Xf!X>;B;4`c6sSlRNSpXj=geTW4cPGrxNnYcT_YMN7{754N{7ztj)}f+iZN z2Crr^+^44y^vnxozOn}R9u4~=BB9t}$ck``!TiPVQm&4YEbHo>0Xy!U*AzXY_1)+h z(jAgUxF@oO#P)#?6qsqfRESo2Ov-`oDM!Af0Ja(fnJS{Bgue+4(xEXitsv-_Q8fS* zh)-zGZDlX`$M4(t{WvHox`G|FblZb6irZO82upP+dpZe(Q8Ege zjFcMoF9hE$@=v^OP0=aCwFD0E%MXS@u@E|ZgkZlEW>`u{B#`aQwR3_`XccEdJZ@=G zWprTotewT@QG~Xo)Sm$$kKRvTU}Wv&RvcqGpJMu=!h%Pkm6ByVg(%Os$@8Kf78pmN zDrdSWm=i8dm+c>jfW z%p&q)PCM&O>eeh30)I;fXklKf{TZg@YwzZ~nrRjb8v9`l0H~U4s?`Gk08LFn0Q6Q9 z0;qum0N^e9k1zuv|E + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/public/next.svg b/frontend/public/next.svg new file mode 100644 index 00000000..5174b28c --- /dev/null +++ b/frontend/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/vercel.svg b/frontend/public/vercel.svg new file mode 100644 index 00000000..77053960 --- /dev/null +++ b/frontend/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/window.svg b/frontend/public/window.svg new file mode 100644 index 00000000..b2b2a44f --- /dev/null +++ b/frontend/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/app/departments/page.tsx b/frontend/src/app/departments/page.tsx new file mode 100644 index 00000000..eac2f5b4 --- /dev/null +++ b/frontend/src/app/departments/page.tsx @@ -0,0 +1,10 @@ +export default function DepartmentsPage() { + return ( +

+
+

Отделы

+

Раздел в разработке. Здесь будут списки отделов и контакты.

+
+
+ ); +} diff --git a/frontend/src/app/documents/page.tsx b/frontend/src/app/documents/page.tsx new file mode 100644 index 00000000..47754e31 --- /dev/null +++ b/frontend/src/app/documents/page.tsx @@ -0,0 +1,10 @@ +export default function DocumentsPage() { + return ( +
+
+

Документы

+

Раздел в разработке. Здесь будут договоры, отчёты и файлы.

+
+
+ ); +} diff --git a/frontend/src/app/employees/page.tsx b/frontend/src/app/employees/page.tsx new file mode 100644 index 00000000..c297083b --- /dev/null +++ b/frontend/src/app/employees/page.tsx @@ -0,0 +1,222 @@ +"use client"; + +import { Bell, Building2, FileSignature, FileText, Home as HomeIcon, MessageSquare, Search, Users, Wallet } from "lucide-react"; +import Link from "next/link"; +import { usePathname, useRouter } from "next/navigation"; +import { useEmployees, useCurrentUser } from "@/hooks/useApi"; +import { useState, useEffect } from "react"; +import { apiClient } from "@/lib/api"; + +const weekdays = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]; + +const calendarWeeks = [ + ["", "", "", "", "1", "2", "3"], + ["4", "5", "6", "7", "8", "9", "10"], + ["11", "12", "13", "14", "15", "16", "17"], + ["18", "19", "20", "21", "22", "23", "24"], + ["25", "26", "27", "28", "", "", ""], +]; + +export default function EmployeesPage() { + const pathname = usePathname(); + const router = useRouter(); + const [searchQuery, setSearchQuery] = useState(""); + const { employees, loading, error } = useEmployees({ search: searchQuery }); + const { user } = useCurrentUser(); + + // Проверка авторизации + useEffect(() => { + const token = apiClient.getToken(); + if (!token) { + router.push('/login'); + } + }, [router]); + + const sortedEmployees = employees.sort((a, b) => + `${a.first_name} ${a.last_name}`.localeCompare(`${b.first_name} ${b.last_name}`, "ru") + ); + + const navLinkClass = (href: string) => + `flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-50 ${ + pathname === href ? "bg-sky-50 text-sky-700 ring-1 ring-sky-100" : "text-gray-700" + }`; + + const navIconClass = (href: string) => (pathname === href ? "text-sky-700" : "text-gray-400"); + + return ( +
+
+
+
+ Логотип +
+
+
+ + setSearchQuery(e.target.value)} + className="w-full rounded-full border border-gray-200 bg-gray-50 py-2.5 pl-11 pr-4 text-sm text-gray-800 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100" + placeholder="Поиск сотрудников..." + /> +
+
+
+ +
КМ
+
+
+
+ +
+ + +
+
+
+
+

Команда

+

Сотрудники

+
+
Всего: {employees.length}
+
+
+ +
+ {loading && ( +
+

Загрузка сотрудников...

+
+ )} + {error && ( +
+

Ошибка загрузки: {error.message}

+
+ )} + {!loading && !error && employees.length === 0 && ( +
+

Сотрудники не найдены

+
+ )} + {!loading && sortedEmployees.map((employee) => { + const isOnline = employee.is_active; + const statusText = isOnline ? "Онлайн" : "Оффлайн"; + const statusColor = isOnline ? "text-green-600" : "text-gray-500"; + const dotColor = isOnline ? "bg-green-500" : "bg-gray-400"; + const fullName = `${employee.first_name} ${employee.last_name}`; + + return ( +
+
+ {employee.first_name[0]}{employee.last_name[0]} +
+
+

{fullName}

+

{employee.position?.name || 'Не указана'}

+
+ + {statusText} + {employee.department && ( + <> + • + {employee.department.name} + + )} +
+
+
+ ); + })} +
+
+ + +
+
+ ); +} diff --git a/frontend/src/app/favicon.ico b/frontend/src/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5a0f9fdb77e0cf485baffa9f679ead92fbe820d1 GIT binary patch literal 15086 zcmc&*2Ygk<(jTcNBqRYs3F$o~fi#*RVtFXoQ1pqtA)-$#pNc+3A1GizDS{{nf^8QlODV1+=egP*{2NL2oN{!|riQs+PyjZ&eT z8UsDl<xNR12*bvu*Gs4jr2UFeA;<)Hh+UVCkyiB8*5^kLQ}$shuA+ zymsn$V6W~$+6=w5^y)l4|5@tXCbdC*#ekjGcPe5?#Br>K?pW3_hF{^=`98gAnym2-S%4L=Rb0{rT@msSj%BIq*|wfs4iy%Y2Z`_PE|0XtG7~lc~)U$+-iz z;i*0WlSHh;Dv=PdQT&LM5VVQ%N)GsPU8Zfpmf9ppy=C$UfnxF_O&Bfqv>#7|)M7W+<1!O>(+TwRG6FNtOKNw)iNE+W(~5DV!8$;EHsr*|Z0$tXK-!XWu&c*@)wbxB$UJNa8Z zm&gn4V&%_~DE-1NMx#a6l%D@eUT+)Q;4^zf%UdDI+#1;+9)XGKd>EkF2GU7gkFUjl z!cSwQv3>x9#0+>^Z4JL}7a{@XLfh$0yGi=eR=5g(;?ka7a#v42{w(sVNOk%GP{Gc^Vw;$X``oD?g%rL*Jb= z?SW1F9k@e2Y`0Au^Em#O@e}`FvhbgM37a+iJDnD?70z!cZNm+$JR+Z!N1h>)bt;R@ z(ejwGnqk#u@h^qf46Wz%e03dqwwAN1(IvbtvPO-Dai&A|>j}RJ`EPCwYxvXrNBL*h zz%MQD^CqwH&cZnjQ{P6tS^#}D`U+E>=-WN;npvLKF7Ji;>T75RNeA`!l21$q(}1g5T$~`X$=vG+Za^&{nCa zGZjdbs;K*0p`Vlh|04XRM3{$Ioz?TGQ=RM4cZK-<5?lkn_nN@UyeqNZZCB$L55gq0 zh5diG{*sL)`}ryiyc)l>%PCs=vdg_ku@3$dej0x&jz1Oob0hmh_A?Xv`2YsUFTs;m{%=D0&o#w4Es#I6e~4H3<;iFK zYeZdGlW{LR+A#+u(A%^Qo)QPHZ6x(Yvk2=38jFAwq49Mk%$USs{Tly${-J=7ZH&pXgxo(7Mr ztq~Vdem0T(5dYOF5U9Qjx3afjhSC<=Y}^M^iSHV&EO0cegXtJj9ZZ)KVOWPR; z;TMOVFl-()LoLHKU6-+aFkCM3sAp^XzM_5%x1+BRrQQv`GU;z8{_`ntx288|v_5*` z_k^EtcKD#y^_bS=Zpb65W262XoC&|V1?7J!+Tv{Qg7z5ucy`tyN6xX$m$PijL`!I+ zF&Q4g`WCrBe1`S#g4q;hk_+w9r2@MYR&19l8iOviZX5KHdZ`otlOa;B@~D;boXX_0 zws~@{ZN8LlcgU1tw?iCt&yc@@AJG0c@X0Vi!%sXS{^wc!Y2-Kga5N6Y-wpjTJN0q2 z5z}z3n+}82r@>w4Kg)D0Q|dyS+7o-_noZ+crJn-U@{=KpMir^V2?ic;hJ96mOTT zl!w&w(#N(wt3?Axz=ubX@e&rk-hXs2V#O{FDZ!<*0$EHOv*Yr7j zB1gmfVk$f)Z?W5Hh_`8K+i4@U$8X$riezRZKN#X?3OE2;0>jDs4%xhw3wSC zFPU41NUX-SSpErutysur>X<0i?dWf%m+RrUOuL#SB|$krA~qe*(By#tHQhM-3F6+DY;!dSN7`IKlFS8GT@zgE}V z%RDE(TI2%PF!e)lGcJNh4GFNyv>wJ=^_S#LC#r9+{%FB(TI{euT?%157CvGHW7`qq z3~^-0e$!6-G?f1+5e-kMhNw%Xci`X1d*=@PcY?Q+0Eb0QSS9Li1nSA{JjcC>$GiS4 zt+hLBZXI?`d<74wufT0At#6U2A6(^rR9+8(=o@Qf+7Iq(0rcg2z3(Fa%S#;QBc@Qk7e3(CV-3>!Ua6wU z_ZKW0q?W*ku5WglrwTS;+^lM&&DEUy|6D&WVf))4_ zi=X?g#`R#l@+!Ql)cCcDx{!Ld7a}#@p>DQ*3IWFLU8k}P&!xOH=qM}mZ(wCZPOvk6 zOAR|=ITQrXr@-oDK7>39R@K2E) zn8LF?()o$O@nT+&M^VS`WGQ{NiCVvA{vh0i>jlYUmtW!k1oxji!5i)WB=vnLfmWP z7_jeq)EPMEGZE|i5GkeD$C?eeuB@}$f$|-KyeHZF6@K;+>g5s$HZAV)A8C!lYH5w* zahs*sP_)jDMW8q=> zphJR`-0QHk(>_jo-2GYhZ+Mm$`xMH@`sSlvM4%r;I&=koR)hNcCcb+b<@~HmGru^b zh*kNXQqBd{i$%DXc@f*F^lBB2VT~-g??|-@oY*!9H*AA@4Vz%HaTD%sw!@RsVTV}J z7Yi%qOR z9$WlPn&&GqU$(b5QyqD$%Vg0u!mQcPA0SxT2$M`(U?a|F9QxyH(56g6`w_y|b(^g; zg|!=}z(3LcI3RY4b#~Z)Q8lav%Wp$FAErJF<1ltH0WsgDzKr>oF%I-~*RMrOq#`c( zHLJ1xZ&8oq+GOzye;Z?Gyq3Jh=F)s^fWD@6&d)2Ru_~MEv>fH)cI5RK?Eg;W@!cp3 z|4^TV32c6sfAM_J)9m!XTwK?NVqA@Qa+795$AhPd?Ekq?gR~p=q5ay8envdfk0^@? zEVcV#Q5aC6G!HkKj@ze+I{$hp-f@ZHd5CCz3H))L^03Os)qJMs&P4NMLv^J&;A?mp zqFO)1bv4H^T{TZqSx)$Q`BX@$bULI&&I&1(Da{To=M~|#=9Z`?IoG{Jo!jFv^?7YS z(@n!qb1)Ho<(25OWk;5??2#23WsR(4r-z?2OJjtYN2rRSpK9FL?K6yNdCFzJa^w=ME&7w01kn$5Z}tVBxh5hI=K6>mCi zU!;n@s%q|wKAe+D-q$@HdHRECA$-Iifm?7s252!VvOUCqqUTVL9>BHpUi5{h;M_cc zYdF?r&%vAK=HX3ps%L>x9e%NGZ@-UmE_+iO?VrIt(iV6f_g^c`rigaKe2g=Zypv4f zT6~4SNpeDEL|8|90|MAD;YN(ZtijmQQwCfwvCV!cyUwOGhc!youyZWayWHG_@t+6K z*3cZ!L4R#2>Qt)cAJYD%BZjEu_1G2d9jTv%o#H=V!ZziMPrf0k&qt^mcI~*vu{@6h ztTZgoklH6pX^Swm&V~nC{|Eeyu`tuH7v{CELir{CISKk0zl2*1@i5o82WGW>03q_z zsEajWl9c68B$o`!lk)uz8P=fPL!CtVT*cGfPog~R#Jy{SMDe$EC@&U!OY^AjzqI{J z#~#MAC+n{5aYzp4;Qn2UA6nuM+Wt4W?`-u2u*WrjvMNP1wkO$Mkn6luVTx2uAHj2S zmdkE)`|t}&V`Q~BA6zeQw3*6R_naW=0?L)9$XbjWonwU_X?$k439LR$;Z0tu;b+?m zieW?x&f`>dGB^_c%lpUh2L33n!-QYo|6ay_dH-mUBbpBjeyWS{D~kW<@e{(Y@qZ%P zJH&4`Ml@dhutyGSbW?e=msyIod4pH_)tTZQpKkvE*PycCL@BLzvXtbohX3Msyk!B5 zG;FoKpI7(_G>W4^_^)ze}$C? zrpal&_ZoLQt>krn1*qS*wyn3D%4_{Dn&vx9iUJvi{k5PZ0$Jo}B z=sRG%MMnSC^cBp-IgO|$bUbCAQ;U4`iTo+J&2)`x%iTM9) z{IFB}S&!cu68n5i_6KF{X7s0ek-d;-L6Ds35X;JZ&!Z31Y;KFJ7xiJ~tS}^7KI@Ur z&UzkYg`sD#tis$DRge1J#LI_Vl5!oAji19v%@3ots7;P=hrRe=S_ zyM4T3NP;L2-peb8Bv7804N1iEBvCpfi4_N>@ZzBTyvRbrn#VMSmjtCy9bSrUT%#R< z?VxW`c}@Iuu6m>M3-U)PeoJSM@1p&mVU2&TgcvsO<~8z$-pLw$-#eLa?42YNZLknM z|54JuwSFgKo7VP|*zBImaUZ>xOnHr*i%Lm(E<#e(2;#jiJBX8Hrt=^A4wf~TWXN(x&;#eqMmx)(xuEmx&O|&R>Rk3`^4DvJ z`n24=u+gyVe#13nM<0hKSM;97K=VM~kUm@1WXqisvH|}WM14}u9ad*Py4TBp z1Bqgv3(C^&GwJMB^I?e3o%<&prZSpqTpz?qzoYVJ@SRBaIH{z0WK#NPh-=@vWw2;i zD>4ES={yU^Xs6A=_4>y%IdRJOsJsNW@e;oixM%o8PKJ0X31d#l@FS*sDYa6(o|ovI z{(c`MNJL-3>%7`MN1g}Yixd9)wEk&+Nd~Uh{|hvJ-=l0PY!#(}`$XQ59XvN6R?ZEN z)+irSB$hqw3#IwKOZe^wZY`s7txitZLSA*pQJw^|c(qrW3H#^2w||ZQIDTvY*nW(> z6COi*OL1Wv?F^gZ5V&^}4R@5vyYcLX?kni=GitHwAL=^v(+SSOWHj0(@E#cAI(=?mB+=Xn>ia^Gr}=UUB*+|qPD zw{3#)7{_Un%YDwWDz7qD5V#K8(PH3I8qC1G%SAcQwUU*1l=5Pa)AFY%%O|jZy0fV7 zH;CVQ-;;5FH5Z=5vzcea+wid1)&F}rYp`TI=v2i{2BxUEw^R3`P1ENXV|B)r;70LA zA}t=KzoYZaZ}48q)3|>v^( zR7ceE6TZhprB9=H45o>Oz-EqmAnL-~45=^;`_^Nf*Nf#^Vz`!iwsN*#v{E{xN*o*( z#|nqFVr=(e|WgWZThmAJh82^&KgNafi#?!6*x7O>$aw8Xu46l8-A08oR`c^CV!mBLH zuLR?~QKAs_YbM5}$mU_Z8?h`Dr-rOYUJU2O0d4${cb3TY+=KRFtWr7Zf^-<(#CC19 zvtm4dHGPBUB`1AWuu{KLR_>qAE5eRr9Ah$`^*mtM3ilg#)rPL>1dKNL03}FBAW*k5DzXiPca(G)_1+&pUjpy40#uxZ5;EQ!wNz-V|?pz!wS@EdZ*v{LRnzcKaGD2gt5Y~ zDr3g5?V>oaMB{&%Zx+TmCTjdg`9pnJC{6}#K%NJ(xB<(>0q?b94a&!Kn4p{wZs%E^ z)c=)oe;(~I(beT7|5(n>2Cl+2Zy(NoFvY)cPCpfM@XYpkJhLtLtY?$)J^;naN&mJ$ zG(YW?!MDICNb`}RMZDcge%3dSRk~EL9N$gSTexpqigydhzF*eGD|M3apgo{CC$IEB zCJIJXuq5A&BE|1}k?g-g917ThzCfus=(1jm>y!OKUxZ?EEG2Y3OBuG2C4}w}B~kSl zhcwH10~5&humbOGa*=NduMafH-{2XqrT@3qZ9=^)-~!nhl+^ExEW zgBX4S=i)uIm6kcv>_7EwT?4vk_m@b1rhymPJ#GD?{xKHFYrQi}nVy$eV~}cE)9nLZ zhv$#wfype#Z3{c$x|~-B9Om^ya^&q!@AGs1ik#zdiPiYzpwH;UYrPK9`iuAzH6M`T z-JRASt$*^r$Tz0-$LfD*>mT)xu}@y(mC?G({uj~eVrB`>>)BcNWo=9FEV{%$kCz1; zY1<5s$mzXjv%@|cdHn#{kmyjus=cr1U-Q3yYyH*zzpMMlxH>OzPnL`QB&ovHAioWd z@I23htiF&ni*mpCV3$tl}p;=E=vr=8MeWZ+TH*id^JbDd)TIM!$Q2 z_6^3QsegEe zcHkZ3)oowH?AG_;A*$252*%JiZS!CpulC5a_@6fzKdl9H_dxf*K7;j2mfu+g&$*E( zwNN&uzeSzvoyKoZd*^ic-!%U*Xd^6ff-CnQ=XloZ#Ls%x zbtb)BPdmTU^BwQXd>Yv*n>SRvyQqzk#@gBcCL2KglV3rO^r2hUx!v0L`GSDZ6-=pgOOEc-)>1zCREL-O)hiQ1yQ9mRdDW7lmD z^-X_PJ9s%pWx-+jofLidXGw2|^qY80w#I7rsNX{vHJF1Tf*TQ5{X>6qZqVi-e2>(X zeoux!F#}Je8^tNm7F%SL=7ap`>&=V)&Js(&sEFlHo7=_R!+DC!m&%U=mhtNly;D*K zFT=GoSmQfFQ;AS^l>Hv>@I8GJ`F^J#d8%V-XJYuwesVm-Q~K=U@lJ`#0q<9}dB5s= zvCnyzIOV-kiQl}a@wP&dd@(3BOl==vZHJfL?|)+-<5vq zSH!YCxAVgOW7<xM!Rw_Itg= z_YeF*iR(KH*Nh+44CgRBw?rH6zL4byZeS$=n^>OzYb+ao3zhEtJodFj93Q;VI1TTy z;`d6D=M0uLIGyixp3f`%_wjtcf3RZD*X6Tb8{}-yxgyJT65Uf0IRTq_rq@U8lR!t z&(O5rHOTvdrYh+}*0VG2Y3M`U&x(Ds+E&33yld@dOhk-dgEuR}yEKRTKFteVvUzI1 z&$a!Tey0QHLX)3l=U7(kK2s`iZI_P^-hg)UJL!za8kXVyEh}(o!8YFF$xd;~LGM>O z=FcjBD#;&xpE_WaoaeqBV??nm(`z}(&k}aZbBC1gwu}GdGDc2v+I>Cw;|b1*Jk|9x zIn_0qB@bH5(*~umv;iq{(!lSqJX${J8qE{>Tp_=tLE3(4aj#+g;NWFEY0y$7dC(Ff z%6ER&%2M5ys>^!}(R2>6Yv1dB4(X--+s^By7TxWL)6CIhsTNiK-T&ucP5SnK0oRm} AGXMYp literal 0 HcmV?d00001 diff --git a/frontend/src/app/finances/page.tsx b/frontend/src/app/finances/page.tsx new file mode 100644 index 00000000..82c2c713 --- /dev/null +++ b/frontend/src/app/finances/page.tsx @@ -0,0 +1,10 @@ +export default function FinancesPage() { + return ( +
+
+

Финансы

+

Раздел в разработке. Здесь появится аналитика и отчётность.

+
+
+ ); +} diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css new file mode 100644 index 00000000..a2dc41ec --- /dev/null +++ b/frontend/src/app/globals.css @@ -0,0 +1,26 @@ +@import "tailwindcss"; + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +body { + background: var(--background); + color: var(--foreground); + font-family: Arial, Helvetica, sans-serif; +} diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx new file mode 100644 index 00000000..f7fa87eb --- /dev/null +++ b/frontend/src/app/layout.tsx @@ -0,0 +1,34 @@ +import type { Metadata } from "next"; +import { Geist, Geist_Mono } from "next/font/google"; +import "./globals.css"; + +const geistSans = Geist({ + variable: "--font-geist-sans", + subsets: ["latin"], +}); + +const geistMono = Geist_Mono({ + variable: "--font-geist-mono", + subsets: ["latin"], +}); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + {children} + + + ); +} diff --git a/frontend/src/app/login/page.tsx b/frontend/src/app/login/page.tsx new file mode 100644 index 00000000..226f4d17 --- /dev/null +++ b/frontend/src/app/login/page.tsx @@ -0,0 +1,111 @@ +'use client'; + +import { useState, FormEvent } from 'react'; +import { useRouter } from 'next/navigation'; +import { apiClient } from '@/lib/api'; + +export default function Login() { + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + const router = useRouter(); + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + setError(''); + setLoading(true); + + try { + const response = await apiClient.login({ email, password }); + console.log('Успешная авторизация:', response.user); + + // Перенаправляем на главную страницу + router.push('/'); + router.refresh(); // Обновляем данные + } catch (err) { + console.error('Ошибка авторизации:', err); + setError('Неверный email или пароль'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+
+

+ Войти в систему EUSRR +

+

+ Используйте учетные данные LDAP для входа +

+ +
+ {error && ( +
+ {error} +
+ )} + +
+ + setEmail(e.target.value)} + className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100" + placeholder="example@company.com или +79001234567" + required + disabled={loading} + /> +
+
+ + setPassword(e.target.value)} + className="w-full rounded-lg border border-gray-200 bg-gray-50 px-4 py-3 text-sm text-gray-900 transition focus:border-sky-500 focus:bg-white focus:outline-none focus:ring-2 focus:ring-sky-100" + placeholder="••••••••" + required + disabled={loading} + /> +
+ +
+ + + +

+ Для входа используйте корпоративные учетные данные +

+
+
+
+ ); +} diff --git a/frontend/src/app/messages/page.tsx b/frontend/src/app/messages/page.tsx new file mode 100644 index 00000000..f932cb59 --- /dev/null +++ b/frontend/src/app/messages/page.tsx @@ -0,0 +1,10 @@ +export default function MessagesPage() { + return ( +
+
+

Сообщения

+

Раздел в разработке. Здесь появятся чаты и диалоги.

+
+
+ ); +} diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx new file mode 100644 index 00000000..240937e4 --- /dev/null +++ b/frontend/src/app/page.tsx @@ -0,0 +1,259 @@ +"use client"; + +import { Bell, Bookmark, Building2, FileSignature, FileText, Heart, HeartHandshake, Home as HomeIcon, MessageSquare, Search, Star, Users, Wallet } from "lucide-react"; +import Link from "next/link"; +import { usePathname, useRouter } from "next/navigation"; +import { usePosts, useCurrentUser } from "@/hooks/useApi"; +import { useEffect } from "react"; +import { apiClient } from "@/lib/api"; + +function formatTimeAgo(dateString: string): string { + const date = new Date(dateString); + const now = new Date(); + const diffInMs = now.getTime() - date.getTime(); + const diffInMinutes = Math.floor(diffInMs / (1000 * 60)); + const diffInHours = Math.floor(diffInMs / (1000 * 60 * 60)); + const diffInDays = Math.floor(diffInMs / (1000 * 60 * 60 * 24)); + + if (diffInMinutes < 60) return `${diffInMinutes} минут назад`; + if (diffInHours < 24) return `${diffInHours} часов назад`; + return `${diffInDays} дней назад`; +} + +const weekdays = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"]; + +const calendarWeeks = [ + ["", "", "", "", "1", "2", "3"], + ["4", "5", "6", "7", "8", "9", "10"], + ["11", "12", "13", "14", "15", "16", "17"], + ["18", "19", "20", "21", "22", "23", "24"], + ["25", "26", "27", "28", "", "", ""], +]; + +export default function Home() { + const pathname = usePathname(); + const router = useRouter(); + const { posts, loading, error } = usePosts(); + const { user } = useCurrentUser(); + + // Проверка авторизации при загрузке + useEffect(() => { + const token = apiClient.getToken(); + if (!token) { + router.push('/login'); + } + }, [router]); + + const navLinkClass = (href: string) => + `flex items-center gap-3 rounded-lg px-3 py-2 hover:bg-gray-50 ${ + pathname === href ? "bg-sky-50 text-sky-700 ring-1 ring-sky-100" : "text-gray-700" + }`; + + const navIconClass = (href: string) => (pathname === href ? "text-sky-700" : "text-gray-400"); + + return ( +
+
+
+
+ Логотип + +
+
+
+ + +
+
+ +
+ +
+ КМ +
+
+
+
+ +
+ + +
+
+
+
+ КМ +
+
+ + +
+
+
+ Статья + Фото + Ссылка + Опрос + Событие +
+
+ +
+ {loading && ( +
+

Загрузка...

+
+ )} + {error && ( +
+

Ошибка загрузки: {error.message}

+

Проверьте подключение к серверу

+
+ )} + {!loading && !error && posts.length === 0 && ( +
+

Нет постов в ленте

+
+ )} + {!loading && posts.map((post) => ( +
+
+
+
+ {post.author.first_name[0]}{post.author.last_name[0]} +
+
+

{post.author.first_name} {post.author.last_name}

+

{formatTimeAgo(post.created_at)}

+
+
+
+

{post.content}

+ {post.tags && post.tags.length > 0 && ( +
+ {post.tags.map((tag) => ( + + #{tag} + + ))} +
+ )} +
+ + + +
+
+ ))} +
+
+ + +
+
+ ); +} diff --git a/frontend/src/app/register/page.tsx b/frontend/src/app/register/page.tsx new file mode 100644 index 00000000..11ff9405 --- /dev/null +++ b/frontend/src/app/register/page.tsx @@ -0,0 +1,262 @@ +'use client'; + +import { useState, FormEvent } from 'react'; +import { useRouter } from 'next/navigation'; +import { apiClient } from '@/lib/api'; +import Link from "next/link"; + +export default function Register() { + const [formData, setFormData] = useState({ + first_name: '', + last_name: '', + middle_name: '', + email: '', + phone_number: '', + telegram: '', + password: '', + confirmPassword: '', + }); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + const router = useRouter(); + + const handleChange = (e: React.ChangeEvent) => { + setFormData({ + ...formData, + [e.target.name]: e.target.value, + }); + }; + + const handleSubmit = async (e: FormEvent) => { + e.preventDefault(); + setError(''); + + // Валидация + if (formData.password !== formData.confirmPassword) { + setError('Пароли не совпадают'); + return; + } + + if (!formData.email && !formData.phone_number && !formData.telegram) { + setError('Укажите хотя бы один способ связи: email, телефон или Telegram'); + return; + } + + setLoading(true); + + try { + const registerData = { + email: formData.email, + phone_number: formData.phone_number, + password: formData.password, + first_name: formData.first_name, + last_name: formData.last_name, + middle_name: formData.middle_name || undefined, + telegram: formData.telegram || undefined, + }; + + await apiClient.register(registerData); + + // После успешной регистрации авторизуемся + const loginData = { + email: formData.email, + phone_number: formData.phone_number, + password: formData.password + }; + await apiClient.login(loginData); + + router.push('/'); + } catch (err: any) { + console.error('Ошибка регистрации:', err); + setError(err.message || 'Ошибка при регистрации. Проверьте введенные данные.'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+
+

+ Регистрация +

+

+ Создайте новый аккаунт, указав имя и контактные данные. +

+ +
+ {error && ( +
+ {error} +
+ )} + +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ Обязательные поля: Имя, Фамилия, Пароль
+ Контакты: Укажите хотя бы один (Email, Телефон или Telegram) +
+ + +
+ +
+ + Уже есть аккаунт? Войти + +
+ +

+ Регистрируясь, вы принимаете условия использования и подтверждаете ознакомление с политикой конфиденциальности. +

+
+
+
+ ); +} diff --git a/frontend/src/app/requests/page.tsx b/frontend/src/app/requests/page.tsx new file mode 100644 index 00000000..b9e1443c --- /dev/null +++ b/frontend/src/app/requests/page.tsx @@ -0,0 +1,10 @@ +export default function RequestsPage() { + return ( +
+
+

Заявления

+

Раздел в разработке. Здесь появятся заявки и согласования.

+
+
+ ); +} diff --git a/frontend/src/components/feed/CommentsList.tsx b/frontend/src/components/feed/CommentsList.tsx deleted file mode 100644 index 16b80efa..00000000 --- a/frontend/src/components/feed/CommentsList.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import { useState } from 'react'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; -import { useForm } from 'react-hook-form'; -import { zodResolver } from '@hookform/resolvers/zod'; -import { z } from 'zod'; -import { feedApi } from '@/api/feed'; -import type { Comment } from '@/types'; -import { Button } from '@/components/ui/Button'; - -const commentSchema = z.object({ - text: z.string().min(1, 'Комментарий не может быть пустым').max(1000, 'Максимум 1000 символов'), -}); - -type CommentFormData = z.infer; - -interface CommentsListProps { - postId: number; -} - -export function CommentsList({ postId }: CommentsListProps) { - const queryClient = useQueryClient(); - const [showForm, setShowForm] = useState(false); - - const { register, handleSubmit, formState: { errors }, reset } = useForm({ - resolver: zodResolver(commentSchema), - }); - - const { data: comments, isLoading } = useQuery({ - queryKey: ['comments', postId], - queryFn: () => feedApi.getComments(postId), - }); - - const createMutation = useMutation({ - mutationFn: (data: CommentFormData) => feedApi.createComment(postId, data.text), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['comments', postId] }); - queryClient.invalidateQueries({ queryKey: ['posts'] }); - reset(); - setShowForm(false); - }, - }); - - const likeMutation = useMutation({ - mutationFn: (comment: Comment) => - comment.liked_by_me - ? feedApi.unlikeComment(comment.id) - : feedApi.likeComment(comment.id), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['comments', postId] }); - }, - }); - - const formatDate = (dateString: string) => { - const date = new Date(dateString); - const now = new Date(); - const diffMs = now.getTime() - date.getTime(); - const diffMins = Math.floor(diffMs / 60000); - const diffHours = Math.floor(diffMs / 3600000); - - if (diffMins < 1) return 'только что'; - if (diffMins < 60) return `${diffMins} мин назад`; - if (diffHours < 24) return `${diffHours} ч назад`; - return date.toLocaleDateString('ru-RU'); - }; - - const onSubmit = (data: CommentFormData) => { - createMutation.mutate(data); - }; - - if (isLoading) { - return
Загрузка...
; - } - - return ( -
- {/* Форма добавления */} - {showForm ? ( -
-