From b50d4fee086e44b79789ee1faefabdb0b83f633c Mon Sep 17 00:00:00 2001 From: Arijit De Date: Wed, 10 Jun 2026 13:14:43 +0530 Subject: [PATCH 01/11] chore: update frontend dependencies and resolve build artifacts --- .gitignore | 3 +- GCP_Setup.md | 237 +- README.md | 95 +- backend/__init__.py | 1 + backend/auth.py | 130 + backend/config.py | 92 + backend/crew_runner.py | 255 + backend/database.py | 57 + backend/gcs.py | 159 + backend/main.py | 54 + backend/models.py | 112 + backend/requirements.txt | 16 + backend/routers/__init__.py | 1 + backend/routers/auth_router.py | 100 + backend/routers/github_router.py | 102 + backend/routers/job_router.py | 187 + backend/routers/resume_router.py | 165 + backend/schemas.py | 105 + frontend/.gitignore | 24 + frontend/README.md | 16 + frontend/eslint.config.js | 21 + frontend/index.html | 17 + frontend/package-lock.json | 4350 +++++++++++++++++ frontend/package.json | 33 + frontend/public/favicon.svg | 1 + frontend/public/icons.svg | 24 + frontend/src/App.jsx | 39 + frontend/src/api/client.js | 31 + frontend/src/assets/hero.png | Bin 0 -> 13057 bytes frontend/src/assets/react.svg | 1 + frontend/src/assets/vite.svg | 1 + frontend/src/components/GithubProfileAdd.jsx | 74 + frontend/src/components/LoginSection.jsx | 53 + frontend/src/components/Navbar.jsx | 41 + frontend/src/components/ProgressTracker.jsx | 98 + .../src/components/ResumePreviewModal.jsx | 55 + frontend/src/components/ResumeReadyModal.jsx | 59 + frontend/src/components/ResumeUpload.jsx | 113 + frontend/src/components/TailorResumeForm.jsx | 84 + .../src/components/TailoredResumeList.jsx | 76 + frontend/src/context/AuthContext.jsx | 52 + frontend/src/index.css | 450 ++ frontend/src/main.jsx | 16 + frontend/src/pages/HomePage.jsx | 102 + frontend/src/pages/InterviewMaterialsPage.jsx | 85 + frontend/src/pages/LandingPage.jsx | 181 + frontend/src/pages/RegisterPage.jsx | 99 + frontend/vite.config.js | 15 + github_repo_extractor.py | 18 +- package-lock.json | 6 + webapp_plan.md | 491 ++ 51 files changed, 8541 insertions(+), 56 deletions(-) create mode 100644 backend/__init__.py create mode 100644 backend/auth.py create mode 100644 backend/config.py create mode 100644 backend/crew_runner.py create mode 100644 backend/database.py create mode 100644 backend/gcs.py create mode 100644 backend/main.py create mode 100644 backend/models.py create mode 100644 backend/requirements.txt create mode 100644 backend/routers/__init__.py create mode 100644 backend/routers/auth_router.py create mode 100644 backend/routers/github_router.py create mode 100644 backend/routers/job_router.py create mode 100644 backend/routers/resume_router.py create mode 100644 backend/schemas.py create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/eslint.config.js create mode 100644 frontend/index.html create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.svg create mode 100644 frontend/public/icons.svg create mode 100644 frontend/src/App.jsx create mode 100644 frontend/src/api/client.js create mode 100644 frontend/src/assets/hero.png create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/assets/vite.svg create mode 100644 frontend/src/components/GithubProfileAdd.jsx create mode 100644 frontend/src/components/LoginSection.jsx create mode 100644 frontend/src/components/Navbar.jsx create mode 100644 frontend/src/components/ProgressTracker.jsx create mode 100644 frontend/src/components/ResumePreviewModal.jsx create mode 100644 frontend/src/components/ResumeReadyModal.jsx create mode 100644 frontend/src/components/ResumeUpload.jsx create mode 100644 frontend/src/components/TailorResumeForm.jsx create mode 100644 frontend/src/components/TailoredResumeList.jsx create mode 100644 frontend/src/context/AuthContext.jsx create mode 100644 frontend/src/index.css create mode 100644 frontend/src/main.jsx create mode 100644 frontend/src/pages/HomePage.jsx create mode 100644 frontend/src/pages/InterviewMaterialsPage.jsx create mode 100644 frontend/src/pages/LandingPage.jsx create mode 100644 frontend/src/pages/RegisterPage.jsx create mode 100644 frontend/vite.config.js create mode 100644 package-lock.json create mode 100644 webapp_plan.md diff --git a/.gitignore b/.gitignore index ce4faee..c368141 100644 --- a/.gitignore +++ b/.gitignore @@ -163,4 +163,5 @@ cython_debug/ db/ crew_log.txt -project-69718baa-b6cc-44ec-9fb-17c2c8f0dd9c.json \ No newline at end of file +project-69718baa-b6cc-44ec-9fb-17c2c8f0dd9c.json +client_secret_720140080607-c0cuhvl4bvqtnk6tgicqds8136iqgrdv.apps.googleusercontent.com.json \ No newline at end of file diff --git a/GCP_Setup.md b/GCP_Setup.md index 7e22e49..7915807 100644 --- a/GCP_Setup.md +++ b/GCP_Setup.md @@ -1,86 +1,241 @@ # Google Cloud Platform (GCP) Setup Guide -This guide details the steps required to configure Google Cloud Platform (GCP) for the **Job Application Agent** project. The project relies on **Google BigQuery** as a vector database to store and search document embeddings and **Vertex AI** for generating semantic embeddings. +This guide details the steps required to configure Google Cloud Platform (GCP) for the **Job Application Agent** project. The project relies on: + +- **Google BigQuery** — vector database for GitHub repo embeddings +- **Vertex AI** — semantic embedding model (`text-embedding-005`) +- **Cloud SQL for MySQL** — relational database for user accounts, resumes, and job records +- **Cloud Storage (GCS)** — file storage for uploaded and tailored resumes --- ## 1. Prerequisites - A Google Cloud account. If you do not have one, sign up at [cloud.google.com](https://cloud.google.com/). - A billing account linked to your GCP account (BigQuery and Vertex AI require an active billing account, though they offer free tiers/credits). +- `gcloud` CLI installed and authenticated: `gcloud auth login` + +--- ## 2. Create a Google Cloud Project 1. Go to the [Google Cloud Console](https://console.cloud.google.com/). 2. Click on the project drop-down menu at the top of the page. 3. Click **New Project**. 4. Enter a project name (e.g., `job-application-agent`). -5. Note your **Project ID** (e.g., `inbound-byway-457408-c9` from the README, though yours will be unique). +5. Note your **Project ID** — you'll need this in your `.env` file. 6. Click **Create** and ensure your new project is selected in the console. +--- + ## 3. Enable Required APIs -You need to enable both the Vertex AI and BigQuery APIs for your project. +Navigate to **APIs & Services > Library** and enable all of the following: + +| API | Purpose | +|-----|---------| +| **Vertex AI API** | Semantic embeddings for GitHub repos | +| **BigQuery API** | Vector store for repo content | +| **Cloud SQL Admin API** | Managed MySQL database | +| **Cloud Storage API** | Resume file storage | +| **Cloud SQL Admin API** | SQL instance management | + +```bash +# Enable all required APIs via CLI +gcloud services enable aiplatform.googleapis.com \ + bigquery.googleapis.com \ + sqladmin.googleapis.com \ + storage.googleapis.com \ + --project=YOUR_PROJECT_ID +``` -1. Navigate to **APIs & Services > Library** in the left sidebar. -2. Search for **Agent Platform API** (formerly Vertex AI API). -3. Click on the result and click **Enable**. -4. Search for **BigQuery API**. -5. Click on the result and click **Enable**. +--- ## 4. Set Up BigQuery Dataset -The system will need a BigQuery dataset to store tables containing your GitHub repository data and their vector embeddings. +The system will store GitHub repo embeddings in BigQuery. Each user gets their own dataset (automatically named from their email). 1. Navigate to **BigQuery** from the GCP Console sidebar. 2. In the Explorer pane, click the three dots (`⋮`) next to your Project ID and select **Create dataset**. 3. Fill in the dataset details: - - **Dataset ID:** `job_applier_app` (or your preferred name, matching `GCP_DATASET_NAME` in `.env`). - - **Data location:** `asia-south2` (or your preferred region, matching `GCP_LOCATION` in `.env`). + - **Dataset ID:** `job_applier_app` (default dataset; user-specific ones are auto-created at runtime). + - **Data location:** `asia-south2` (must match `GCP_LOCATION` in `.env`). 4. Leave other settings as default and click **Create dataset**. -*(Note: The table `github_repo_data` will typically be created automatically by the LangChain/BigQuery vector store integration when you run the application, provided the dataset exists.)* -## 5. Create a Service Account and Generate JSON Key -To allow your local Python script to interact with GCP securely, you must use a Service Account. +> **Note:** User-specific datasets (e.g., `yourname_gmail_com_github_bq_db`) are created automatically at runtime by the web app. You only need to create the default dataset here. -1. Navigate to **IAM & Admin > Service Accounts** in the GCP Console. -2. Click **Create Service Account** at the top. -3. Provide a name (e.g., `job-agent-sa`) and a description. Click **Create and Continue**. -4. **Grant Access (Permissions):** You must assign the following roles to the service account so it can manage BigQuery data and call Vertex AI models: - - **BigQuery Admin** (or `BigQuery Data Editor` + `BigQuery Job User` for least privilege) - - **Vertex AI User** -5. Click **Continue** and then **Done**. -6. Find the newly created service account in the list, click the three dots (`⋮`) under the Actions column, and select **Manage keys**. -7. Click **Add Key > Create new key**. -8. Select **JSON** and click **Create**. -9. The JSON file will automatically download to your computer. Store this file securely and **DO NOT** commit it to version control (e.g., GitHub). +--- -## 6. Configure Environment Variables -Finally, update your local project to use the GCP resources and credentials you just created. +## 5. Create a Cloud SQL Instance (MySQL) -Create or update your `.env` file in the root of the `Job_Application_Agent` directory: +This is the relational database storing user accounts, resume metadata, and job records. + +### 5a. Create the instance + +```bash +gcloud sql instances create job-applier-mysql \ + --database-version=MYSQL_8_0 \ + --tier=db-f1-micro \ + --region=asia-south2 \ + --root-password=YOUR_SECURE_ROOT_PASSWORD \ + --storage-type=SSD \ + --storage-size=10GB \ + --project=YOUR_PROJECT_ID +``` + +> **Cost:** `db-f1-micro` costs approximately $7/month. + +### 5b. Create the application database + +```bash +gcloud sql databases create job_applier \ + --instance=job-applier-mysql \ + --project=YOUR_PROJECT_ID +``` + +### 5c. Authorize Local IP for Direct Connection + +Instead of running a proxy, authorize your local development machine's public IPv4 address to connect directly to the Cloud SQL instance: + +```bash +# Get your current public IPv4 address +curl -4 ifconfig.me + +# Authorize your IP in Cloud SQL +gcloud sql instances patch job-applier-mysql \ + --authorized-networks="YOUR_PUBLIC_IP/32" \ + --project=YOUR_PROJECT_ID +``` + +Set `MYSQL_HOST` in your `.env` to the Cloud SQL instance's public IP address (which can be retrieved using `gcloud sql instances list`). + +> **Note:** Database tables (`users`, `github_profiles`, `resumes`, `jobs`) are created automatically on first backend startup. + +--- + +## 6. Create a GCS Bucket + +This bucket stores uploaded and tailored resume files. + +```bash +# Create the bucket +gsutil mb \ + -l asia-south2 \ + -c STANDARD \ + gs://job-applier-YOUR_PROJECT_ID-resumes + +# Enable uniform bucket-level access (security best practice) +gsutil uniformbucketlevelaccess set on gs://job-applier-YOUR_PROJECT_ID-resumes +``` + +Replace `YOUR_PROJECT_ID` with your actual GCP project ID (e.g., `project-69718baa-b6cc-44ec-9fb`). + +--- + +## 7. Create a Service Account and Generate JSON Key + +```bash +# Create the service account +gcloud iam service-accounts create job-agent-sa \ + --description="Job Application Agent Service Account" \ + --display-name="Job Agent SA" \ + --project=YOUR_PROJECT_ID + +# Assign required roles +SA_EMAIL="job-agent-sa@YOUR_PROJECT_ID.iam.gserviceaccount.com" + +gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ + --member="serviceAccount:$SA_EMAIL" --role="roles/bigquery.admin" + +gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ + --member="serviceAccount:$SA_EMAIL" --role="roles/aiplatform.user" + +gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ + --member="serviceAccount:$SA_EMAIL" --role="roles/cloudsql.client" + +gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ + --member="serviceAccount:$SA_EMAIL" --role="roles/storage.objectAdmin" + +# Download the JSON key +gcloud iam service-accounts keys create ./service-account.json \ + --iam-account=$SA_EMAIL \ + --project=YOUR_PROJECT_ID +``` + +> **Security:** Store `service-account.json` securely and **never commit it to version control**. It is already listed in `.gitignore`. + +--- + +## 8. Set Up Google OAuth (Optional — for "Sign in with Google") + +1. Go to [GCP Console → APIs & Services → Credentials](https://console.cloud.google.com/apis/credentials). +2. Click **Create Credentials → OAuth 2.0 Client ID**. +3. If prompted, configure the **OAuth consent screen** first (External, fill in app name). +4. **Application type:** Web application. +5. **Authorized JavaScript origins:** `http://localhost:5173` (and your production domain). +6. **Authorized redirect URIs:** `http://localhost:5173`. +7. Click **Create** and copy the **Client ID** and **Client Secret**. + +--- + +## 9. Configure Environment Variables + +Update your `.env` file in the root of the project: ```env +# ── GCP Core ────────────────────────────────────────────────────── # Path to the downloaded Service Account JSON key -GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/your/gcp-service-account.json +GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/service-account.json # Your GCP Project ID GCP_PROJECT_ID=your-unique-project-id -# BigQuery Dataset Name -GCP_DATASET_NAME=job_applier_app - -# GCP Region (must match your dataset location) GCP_LOCATION=asia-south2 - -# BigQuery Table Name (will be created automatically if it doesn't exist) +GCP_DATASET_NAME=job_applier_app GCP_TABLE_NAME=github_repo_data -# Vertex AI Model for Embeddings -VERTEX_AI_MODEL=text-embedding-005 +# ── Cloud SQL MySQL ──────────────────────────────────────────────── +MYSQL_HOST=127.0.0.1 # Use 127.0.0.1 when Cloud SQL Auth Proxy is running +MYSQL_PORT=3306 +MYSQL_USER=root +MYSQL_PASSWORD=YOUR_SECURE_ROOT_PASSWORD +MYSQL_DATABASE=job_applier + +# ── Cloud Storage ────────────────────────────────────────────────── +GCS_BUCKET_NAME=job-applier-your-project-id-resumes + +# ── JWT Auth ─────────────────────────────────────────────────────── +# Generate a strong random key: python3 -c "import secrets; print(secrets.token_urlsafe(32))" +JWT_SECRET_KEY=CHANGE_ME_TO_A_RANDOM_SECRET +JWT_ALGORITHM=HS256 +JWT_EXPIRY_MINUTES=1440 + +# ── Google OAuth (optional) ──────────────────────────────────────── +GOOGLE_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com +GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret + +# ── Existing API Keys ────────────────────────────────────────────── +BRIGHT_DATA_API_KEY=... +GITHUB_PERSONAL_ACCESS_TOKEN=... +GEMINI_API_KEY=... +SERPER_API_KEY=... ``` +--- + ## Summary Checklist + +### Existing (CLI pipeline) - [ ] GCP Project Created - [ ] Vertex AI API Enabled - [ ] BigQuery API Enabled -- [ ] BigQuery Dataset Created (`job_applier_app`) -- [ ] Service Account Created with roles (`BigQuery Admin`, `Vertex AI User`) -- [ ] Service Account JSON key downloaded -- [ ] `.env` file updated with valid GCP configuration +- [ ] BigQuery Dataset Created (`job_applier_app`, region `asia-south2`) +- [ ] Service Account created with roles: `BigQuery Admin`, `Vertex AI User` +- [ ] Service Account JSON key downloaded → path set in `GOOGLE_APPLICATION_CREDENTIALS` + +### New (Web App) +- [ ] Cloud SQL Admin API Enabled +- [ ] Cloud Storage API Enabled +- [ ] Cloud SQL instance created (`job-applier-mysql`, `db-f1-micro`, `asia-south2`) +- [ ] MySQL database created (`job_applier`) +- [ ] Local IPv4 authorized in Cloud SQL Instance settings +- [ ] GCS bucket created (`job-applier-YOUR_PROJECT_ID-resumes`) +- [ ] Service Account roles added: `Cloud SQL Client`, `Storage Object Admin` +- [ ] `.env` updated with `MYSQL_*`, `GCS_BUCKET_NAME`, `JWT_SECRET_KEY` +- [ ] Google OAuth credentials created (optional, for Google Sign-In) diff --git a/README.md b/README.md index 4eeb3a5..364946a 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ A powerful, multi-agent automation system for job applications, leveraging [Crew AI](https://www.crewai.com/) to orchestrate specialized agents that extract, analyze, and summarize job postings, tailor resumes, and prepare interview materials. The system integrates with Google BigQuery and Vertex AI for advanced document storage and semantic search, and features custom tools for LinkedIn and GitHub data extraction. +This project also includes a **Full-Stack Web App version** with a **FastAPI backend** (using Google Cloud SQL MySQL and GCS storage) and a **React + Vite frontend** that displays live agent execution progress via Server-Sent Events (SSE). + --- ## 🚀 Features @@ -56,23 +58,29 @@ A powerful, multi-agent automation system for job applications, leveraging [Crew ### 1. Clone the Repository +This is always the first step. Run: + ```bash git clone https://github.com/arijitde92/Job_Application_Agent.git cd Job_Application_Agent ``` -### 2. Install Dependencies +--- + +### Option A: Running the Standalone CLI Agent + +#### 1. Install Dependencies ```bash pip install -r requirements.txt ``` -### 3. Environment Variables +#### 2. Configure Environment Variables Create a `.env` file in the project root with the following variables: ```env -# GitHub API token (for higher rate limits/private repos) +# GitHub API token GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token # Google Cloud Project details @@ -86,11 +94,7 @@ GCP_TABLE_NAME=github_repo_data VERTEX_AI_MODEL=text-embedding-005 ``` -**Note:** -- `GOOGLE_APPLICATION_CREDENTIALS` should point to your GCP service account JSON file with BigQuery and Vertex AI permissions. -- The default project, dataset, location, and table names are set in the code but can be overridden via environment variables. - -### 4. Run the Application +#### 3. Run the CLI Application ```bash python Job_Applier.py @@ -98,6 +102,79 @@ python Job_Applier.py --- +### Option B: Running the Full-Stack Web App + +#### 1. Setup Python Environment & Dependencies + +Create and activate a conda environment, then install the backend dependencies: + +```bash +conda create -n job_agent python=3.12 -y +conda activate job_agent +pip install -r requirements.txt +pip install -r backend/requirements.txt +``` + +#### 2. Install Node.js + +The frontend React application requires Node.js (v18+). If you do not have it installed, please download and install it from the official [Node.js Download Page](https://nodejs.org/en/download). + +#### 3. Setup Frontend Dependencies + +```bash +cd frontend +npm install +cd .. +``` + +#### 4. Configure Web App Environment Variables + +Add the following database and storage configurations to the bottom of your `.env` file: + +```env +# Cloud SQL MySQL (Direct Connection) +MYSQL_HOST=34.131.150.209 +MYSQL_PORT=3306 +MYSQL_USER=root +MYSQL_PASSWORD=JobAgent@2026 +MYSQL_DATABASE=job_applier + +# Google Cloud Storage (GCS) for Resumes +GCS_BUCKET_NAME=job-applier-project-69718baa-b6cc-44ec-9fb-resumes + +# JWT Authentication +# Generate using: python -c "import secrets; print(secrets.token_urlsafe(32))" +JWT_SECRET_KEY=drUVPzflrCADfaC7HjrydJYPPS_IpspPlXxjOELdfjI +JWT_ALGORITHM=HS256 +JWT_EXPIRY_MINUTES=1440 + +# Google OAuth (Optional — for Google Login) +GOOGLE_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com +GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret +``` + +#### 5. Run the Web Application + +Start the backend API server and frontend development server in separate terminals: + +**Terminal 1 (Backend API):** + +```bash +conda activate job_agent +uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reload +``` + +**Terminal 2 (Frontend React):** + +```bash +cd frontend +npm run dev +``` + +Open `http://localhost:5173` in your browser. + +--- + ## 🔑 API Keys & Cloud Setup - **GitHub:** [Create a Personal Access Token](https://github.com/settings/tokens) and set `GITHUB_PERSONAL_ACCESS_TOKEN` in your `.env` file. @@ -143,4 +220,4 @@ MIT License - [Google Cloud BigQuery](https://cloud.google.com/bigquery) - [Vertex AI](https://cloud.google.com/vertex-ai) - [LangChain](https://python.langchain.com/) -- [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/) \ No newline at end of file +- [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/) diff --git a/backend/__init__.py b/backend/__init__.py new file mode 100644 index 0000000..7f83169 --- /dev/null +++ b/backend/__init__.py @@ -0,0 +1 @@ +# Backend package diff --git a/backend/auth.py b/backend/auth.py new file mode 100644 index 0000000..e26252f --- /dev/null +++ b/backend/auth.py @@ -0,0 +1,130 @@ +""" +auth.py +------- +JWT token creation, password hashing (bcrypt), and authentication dependencies. +Includes Google OAuth ID token verification for sign-in with Google. +""" + +from datetime import datetime, timedelta, timezone +from typing import Optional + +from fastapi import Depends, HTTPException, status +from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials +from jose import JWTError, jwt +# ── Monkeypatch bcrypt/passlib compatibility issue ────────────────────────── +# bcrypt 5.0.0+ raises ValueError for passwords longer than 72 bytes. +# passlib's check_wrap_bug test passes a longer password, causing import failure. +try: + import bcrypt + _orig_hashpw = bcrypt.hashpw + def _patched_hashpw(password, salt): + if len(password) > 72: + password = password[:72] + return _orig_hashpw(password, salt) + bcrypt.hashpw = _patched_hashpw +except ImportError: + pass + +from passlib.context import CryptContext +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from backend.config import get_settings +from backend.database import get_db +from backend.models import User + +settings = get_settings() + +# ── Password hashing ───────────────────────────────────────────────────────── +pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") + +security = HTTPBearer() + + +def hash_password(plain: str) -> str: + """Hash a plaintext password with bcrypt.""" + return pwd_context.hash(plain) + + +def verify_password(plain: str, hashed: str) -> bool: + """Verify a plaintext password against a bcrypt hash.""" + return pwd_context.verify(plain, hashed) + + +# ── JWT tokens ──────────────────────────────────────────────────────────────── + +def create_access_token(user_id: int, email: str) -> str: + """Create a JWT access token with user_id and email in the payload.""" + expire = datetime.now(timezone.utc) + timedelta(minutes=settings.JWT_EXPIRY_MINUTES) + payload = { + "sub": str(user_id), + "email": email, + "exp": expire, + } + return jwt.encode(payload, settings.JWT_SECRET_KEY, algorithm=settings.JWT_ALGORITHM) + + +def decode_token(token: str) -> dict: + """Decode and validate a JWT token. Raises JWTError on failure.""" + return jwt.decode(token, settings.JWT_SECRET_KEY, algorithms=[settings.JWT_ALGORITHM]) + + +# ── FastAPI dependency: get current user ────────────────────────────────────── + +async def get_current_user( + credentials: HTTPAuthorizationCredentials = Depends(security), + db: AsyncSession = Depends(get_db), +) -> User: + """ + FastAPI dependency that extracts the JWT from the Authorization header, + validates it, and returns the corresponding User ORM object. + """ + token = credentials.credentials + credentials_exception = HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid or expired authentication token", + headers={"WWW-Authenticate": "Bearer"}, + ) + + try: + payload = decode_token(token) + user_id: str = payload.get("sub") + if user_id is None: + raise credentials_exception + except JWTError: + raise credentials_exception + + result = await db.execute(select(User).where(User.id == int(user_id))) + user = result.scalar_one_or_none() + if user is None: + raise credentials_exception + + return user + + +# ── Google OAuth ID token verification ──────────────────────────────────────── + +async def verify_google_id_token(id_token_str: str) -> dict: + """ + Verify a Google OAuth ID token server-side using google-auth. + Returns the decoded token payload containing email, name, etc. + Raises HTTPException on invalid token. + """ + from google.oauth2 import id_token as google_id_token + from google.auth.transport import requests as google_requests + + try: + idinfo = google_id_token.verify_oauth2_token( + id_token_str, + google_requests.Request(), + settings.GOOGLE_OAUTH_CLIENT_ID, + ) + # Verify issuer + if idinfo["iss"] not in ("accounts.google.com", "https://accounts.google.com"): + raise ValueError("Invalid issuer") + return idinfo + except Exception as e: + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail=f"Invalid Google ID token: {e}", + ) diff --git a/backend/config.py b/backend/config.py new file mode 100644 index 0000000..0842ce0 --- /dev/null +++ b/backend/config.py @@ -0,0 +1,92 @@ +""" +config.py +--------- +Application settings loaded from environment variables via Pydantic BaseSettings. +All existing env vars (GCP, Gemini, Bright Data, etc.) are preserved for +backward compatibility with the standalone CLI pipeline. +""" + +from pydantic_settings import BaseSettings +from pydantic import Field +from functools import lru_cache + + +class Settings(BaseSettings): + """Application configuration — sourced from .env or environment variables.""" + + # ── MySQL / Cloud SQL ───────────────────────────────────────────────── + MYSQL_HOST: str = Field(default="127.0.0.1", description="Cloud SQL MySQL host") + MYSQL_PORT: int = Field(default=3306, description="Cloud SQL MySQL port") + MYSQL_USER: str = Field(default="root", description="MySQL user") + MYSQL_PASSWORD: str = Field(default="", description="MySQL password") + MYSQL_DATABASE: str = Field(default="job_applier", description="MySQL database name") + + # ── GCS ──────────────────────────────────────────────────────────────── + GCS_BUCKET_NAME: str = Field( + default="job-applier-resumes", + description="GCS bucket for resume storage", + ) + + # ── JWT ──────────────────────────────────────────────────────────────── + JWT_SECRET_KEY: str = Field( + default="CHANGE_ME_IN_PRODUCTION", + description="Secret key for signing JWT tokens", + ) + JWT_ALGORITHM: str = Field(default="HS256") + JWT_EXPIRY_MINUTES: int = Field(default=1440, description="Token expiry in minutes (default 24h)") + + # ── Google OAuth ────────────────────────────────────────────────────── + GOOGLE_OAUTH_CLIENT_ID: str = Field(default="", description="Google OAuth 2.0 Client ID") + GOOGLE_OAUTH_CLIENT_SECRET: str = Field(default="", description="Google OAuth 2.0 Client Secret") + + # ── GCP (existing) ──────────────────────────────────────────────────── + GOOGLE_APPLICATION_CREDENTIALS: str = Field(default="", description="Path to GCP service account JSON") + GCP_PROJECT_ID: str = Field(default="", description="GCP project ID") + GCP_LOCATION: str = Field(default="asia-south2", description="GCP region") + GCP_DATASET_NAME: str = Field(default="job_applier_app", description="BigQuery dataset name") + GCP_TABLE_NAME: str = Field(default="github_repo_data", description="BigQuery table name") + + # ── API Keys (existing) ─────────────────────────────────────────────── + BRIGHT_DATA_API_KEY: str = Field(default="", description="Bright Data MCP API key") + GITHUB_PERSONAL_ACCESS_TOKEN: str = Field(default="", description="GitHub PAT") + GEMINI_API_KEY: str = Field(default="", description="Google Gemini API key") + SERPER_API_KEY: str = Field(default="", description="Serper search API key") + + # ── Resume Upload ───────────────────────────────────────────────────── + MAX_RESUME_SIZE_MB: int = Field(default=10, description="Max resume upload size in MB") + + @property + def mysql_url(self) -> str: + """Construct the async MySQL connection URL for SQLAlchemy.""" + import urllib.parse + encoded_password = urllib.parse.quote_plus(self.MYSQL_PASSWORD) + return ( + f"mysql+asyncmy://{self.MYSQL_USER}:{encoded_password}" + f"@{self.MYSQL_HOST}:{self.MYSQL_PORT}/{self.MYSQL_DATABASE}" + ) + + @property + def mysql_url_sync(self) -> str: + """Construct the sync MySQL connection URL for SQLAlchemy (used in migrations).""" + import urllib.parse + encoded_password = urllib.parse.quote_plus(self.MYSQL_PASSWORD) + return ( + f"mysql+pymysql://{self.MYSQL_USER}:{encoded_password}" + f"@{self.MYSQL_HOST}:{self.MYSQL_PORT}/{self.MYSQL_DATABASE}" + ) + + @property + def max_resume_bytes(self) -> int: + return self.MAX_RESUME_SIZE_MB * 1024 * 1024 + + model_config = { + "env_file": ".env", + "env_file_encoding": "utf-8", + "extra": "ignore", + } + + +@lru_cache() +def get_settings() -> Settings: + """Return a cached Settings instance (reads .env once).""" + return Settings() diff --git a/backend/crew_runner.py b/backend/crew_runner.py new file mode 100644 index 0000000..85b623f --- /dev/null +++ b/backend/crew_runner.py @@ -0,0 +1,255 @@ +""" +crew_runner.py +-------------- +Async wrapper for CrewAI crew execution with progress tracking via SSE. +Runs the existing agent pipeline in a thread pool to avoid blocking the async event loop. +""" + +import asyncio +import json +import os +import tempfile +from concurrent.futures import ThreadPoolExecutor +from datetime import datetime +from typing import Dict, Any + +from sqlalchemy import select, update +from sqlalchemy.ext.asyncio import AsyncSession + +from backend.config import get_settings +from backend.database import AsyncSessionLocal +from backend.gcs import download_file, upload_tailored_resume, upload_interview_materials +from logger import get_logger + +logger = get_logger(__name__) +settings = get_settings() + +# Thread pool for running synchronous crew code +_executor = ThreadPoolExecutor(max_workers=4) + +# In-memory progress store: {job_id: {"current_step": str, "error": str|None}} +progress_store: Dict[int, Dict[str, Any]] = {} + + +def _update_progress(job_id: int, step: str, error: str = None): + """Update the in-memory progress store for SSE broadcasting.""" + progress_store[job_id] = {"current_step": step, "error": error} + logger.info("crew_runner.py: Job %d → step: %s", job_id, step) + + +def _run_crew_sync( + job_id: int, user_id: int, user_email: str, + github_username: str, github_url: str, bq_dataset_name: str, + resume_content: str, job_url: str, +): + """ + Synchronous crew execution — runs in a thread. + This imports and uses the existing crew pipeline. + """ + from dotenv import load_dotenv + load_dotenv() + + # Step 1: Extract job details + _update_progress(job_id, "extracting_job_info") + try: + from webpage_extractor import extract_linkedin_job_details + job_details = extract_linkedin_job_details(job_url) + job_info = job_details.to_dict() + job_info.pop("about_company", None) + job_details_json = json.dumps(job_info, indent=2) + except Exception as e: + logger.error("crew_runner.py: Failed to extract job details for job %d: %s", job_id, e) + raise RuntimeError(f"Failed to extract job details: {e}") + + # Save extracted job details to DB + _save_job_details_sync(job_id, job_details) + + # Step 2: Write resume to temp file for crew to read + _update_progress(job_id, "searching_projects") + with tempfile.NamedTemporaryFile(mode="w", suffix=".md", delete=False, prefix="resume_") as f: + f.write(resume_content) + resume_path = f.name + + try: + # Step 3: Build crew and run + _update_progress(job_id, "building_profile") + + from crewai import Crew + from agents import ( + github_project_summarizer, profiler, resume_strategist, interview_preparer, + ) + from tasks import ( + github_summary_task, profile_task, resume_strategy_task, interview_preparation_task, + ) + + applicant_name = user_email.split("@")[0].replace(".", "_") + + # Build output paths for this job + resume_output = tempfile.mktemp(suffix="_resume.md", prefix=f"job{job_id}_") + interview_output = tempfile.mktemp(suffix="_interview.md", prefix=f"job{job_id}_") + + # Override output_file dynamically + resume_strategy_task.output_file = resume_output + interview_preparation_task.output_file = interview_output + + crew = Crew( + agents=[github_project_summarizer, profiler, resume_strategist, interview_preparer], + tasks=[github_summary_task, profile_task, resume_strategy_task, interview_preparation_task], + verbose=True, + ) + + _update_progress(job_id, "tailoring_resume") + + job_application_inputs = { + "applicant_name": applicant_name, + "job_posting_url": job_url, + "job_name": job_details.job_name, + "company_name": job_details.company_name, + "github_url": github_url, + "resume_path": resume_path, + "job_details_json": job_details_json, + "bq_dataset_name": bq_dataset_name, + } + + result = crew.kickoff(inputs=job_application_inputs) + logger.info("crew_runner.py: Crew execution completed for job %d", job_id) + + # Read output files + tailored_resume_content = "" + interview_content = "" + + if os.path.exists(resume_output): + with open(resume_output, "r") as f: + tailored_resume_content = f.read() + elif hasattr(result, "raw"): + tailored_resume_content = result.raw + + if os.path.exists(interview_output): + with open(interview_output, "r") as f: + interview_content = f.read() + + return { + "tailored_resume": tailored_resume_content, + "interview_materials": interview_content, + "job_details": job_details, + } + + finally: + # Clean up temp files + for path in [resume_path]: + if os.path.exists(path): + os.unlink(path) + + +def _save_job_details_sync(job_id: int, job_details): + """Save extracted job details to the database (sync, called from thread).""" + import asyncio + + async def _save(): + async with AsyncSessionLocal() as db: + await db.execute( + update( + __import__("backend.models", fromlist=["Job"]).Job + ).where( + __import__("backend.models", fromlist=["Job"]).Job.id == job_id + ).values( + job_name=job_details.job_name, + company_name=job_details.company_name, + location=job_details.location, + seniority_level=job_details.seniority_level, + employment_type=job_details.employment_type, + job_function=job_details.job_function, + industry=job_details.industry, + job_description=job_details.job_description, + requirements=job_details.requirements, + ) + ) + await db.commit() + + # Run async DB update from sync thread + loop = asyncio.new_event_loop() + try: + loop.run_until_complete(_save()) + finally: + loop.close() + + +async def run_crew_for_job( + job_id: int, user_id: int, user_email: str, + github_profile, resume_gcs_path: str, job_url: str, +): + """ + Async entry point for crew execution. Updates job status in DB. + Runs the synchronous crew pipeline in a thread pool executor. + """ + _update_progress(job_id, "pending") + + try: + # Download resume from GCS + resume_bytes = download_file(resume_gcs_path) + resume_content = resume_bytes.decode("utf-8") + + # Update status to processing + async with AsyncSessionLocal() as db: + from backend.models import Job + await db.execute( + update(Job).where(Job.id == job_id).values(status="processing") + ) + await db.commit() + + # Run crew in thread pool + loop = asyncio.get_event_loop() + result = await loop.run_in_executor( + _executor, _run_crew_sync, + job_id, user_id, user_email, + github_profile.github_username, github_profile.github_url, + github_profile.bq_dataset_name, resume_content, job_url, + ) + + # Upload results to GCS + _update_progress(job_id, "uploading_results") + + tailored_gcs = None + interview_gcs = None + + if result["tailored_resume"]: + tailored_gcs = upload_tailored_resume( + user_id, job_id, result["tailored_resume"], "resume.md" + ) + if result["interview_materials"]: + interview_gcs = upload_interview_materials( + user_id, job_id, result["interview_materials"], "interview.md" + ) + + # Update job record + async with AsyncSessionLocal() as db: + from backend.models import Job + await db.execute( + update(Job).where(Job.id == job_id).values( + status="completed", + tailored_resume_gcs_path=tailored_gcs, + interview_materials_gcs_path=interview_gcs, + completed_at=datetime.utcnow(), + ) + ) + await db.commit() + + _update_progress(job_id, "completed") + logger.info("crew_runner.py: Job %d completed successfully", job_id) + + except Exception as e: + logger.error("crew_runner.py: Job %d failed: %s", job_id, e, exc_info=True) + _update_progress(job_id, "failed", error=str(e)) + + # Update job status to failed + try: + async with AsyncSessionLocal() as db: + from backend.models import Job + await db.execute( + update(Job).where(Job.id == job_id).values( + status="failed", error_message=str(e)[:2000], + ) + ) + await db.commit() + except Exception as db_err: + logger.error("crew_runner.py: Failed to update job %d status: %s", job_id, db_err) diff --git a/backend/database.py b/backend/database.py new file mode 100644 index 0000000..61c8e19 --- /dev/null +++ b/backend/database.py @@ -0,0 +1,57 @@ +""" +database.py +----------- +SQLAlchemy async engine, session factory, and dependency injection for FastAPI. +Uses asyncmy driver for Cloud SQL MySQL connectivity. +""" + +from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession +from sqlalchemy.orm import DeclarativeBase + +from backend.config import get_settings + +# ── Monkeypatch SQLAlchemy asyncmy ping issue ────────────────────────────── +# In PyMySQL 1.2.0+, ping() defaults reconnect to False. +# SQLAlchemy's asyncmy adapter signature requires reconnect to be explicitly passed, +# but SQLAlchemy's pymysql base dialect calls ping() without args when _send_false_to_ping is False. +try: + from sqlalchemy.dialects.mysql.asyncmy import AsyncAdapt_asyncmy_connection + _orig_ping = AsyncAdapt_asyncmy_connection.ping + def _patched_ping(self, reconnect: bool = False) -> None: + return _orig_ping(self, reconnect) + AsyncAdapt_asyncmy_connection.ping = _patched_ping +except ImportError: + pass + +settings = get_settings() + +# ── Async engine ────────────────────────────────────────────────────────────── +engine = create_async_engine( + settings.mysql_url, + echo=False, + pool_pre_ping=True, + pool_size=10, + max_overflow=20, +) + +# ── Session factory ─────────────────────────────────────────────────────────── +AsyncSessionLocal = async_sessionmaker( + bind=engine, + class_=AsyncSession, + expire_on_commit=False, +) + + +# ── Declarative Base ────────────────────────────────────────────────────────── +class Base(DeclarativeBase): + pass + + +# ── Dependency for FastAPI routes ───────────────────────────────────────────── +async def get_db() -> AsyncSession: + """Yield an async DB session and ensure it is closed after use.""" + async with AsyncSessionLocal() as session: + try: + yield session + finally: + await session.close() diff --git a/backend/gcs.py b/backend/gcs.py new file mode 100644 index 0000000..a48dc41 --- /dev/null +++ b/backend/gcs.py @@ -0,0 +1,159 @@ +""" +gcs.py +------ +Google Cloud Storage helpers for uploading, downloading, and generating +signed URLs for resume and interview material files. + +Bucket structure: + gs:///uploads//.md — User-uploaded original resumes + gs:///tailored//_resume.md — Agent-generated tailored resumes + gs:///tailored//_interview.md — Agent-generated interview materials +""" + +import datetime +from google.cloud import storage + +from backend.config import get_settings + +settings = get_settings() + + +def _get_client() -> storage.Client: + """Return a GCS client.""" + return storage.Client(project=settings.GCP_PROJECT_ID) + + +def _get_bucket(): + """Return the configured GCS bucket.""" + client = _get_client() + return client.bucket(settings.GCS_BUCKET_NAME) + + +# ── Upload functions ────────────────────────────────────────────────────────── + +def upload_resume(user_id: int, file_bytes: bytes, filename: str) -> str: + """ + Upload a user's original resume to GCS. + + Args: + user_id: The user's database ID. + file_bytes: Raw file content. + filename: Original filename. + + Returns: + The GCS path (gs://bucket/uploads//). + + Raises: + ValueError: If file exceeds max size. + """ + if len(file_bytes) > settings.max_resume_bytes: + raise ValueError( + f"File too large. Maximum allowed size is {settings.MAX_RESUME_SIZE_MB} MB." + ) + + blob_path = f"uploads/{user_id}/{filename}" + bucket = _get_bucket() + blob = bucket.blob(blob_path) + blob.upload_from_string(file_bytes, content_type="text/markdown") + + gcs_path = f"gs://{settings.GCS_BUCKET_NAME}/{blob_path}" + return gcs_path + + +def upload_tailored_resume(user_id: int, job_id: int, content: str, filename: str) -> str: + """ + Upload an agent-generated tailored resume to GCS. + + Args: + user_id: The user's database ID. + job_id: The job record ID. + content: Markdown content of the tailored resume. + filename: Desired filename. + + Returns: + The GCS path. + """ + blob_path = f"tailored/{user_id}/{job_id}_{filename}" + bucket = _get_bucket() + blob = bucket.blob(blob_path) + blob.upload_from_string(content.encode("utf-8"), content_type="text/markdown") + + return f"gs://{settings.GCS_BUCKET_NAME}/{blob_path}" + + +def upload_interview_materials(user_id: int, job_id: int, content: str, filename: str) -> str: + """ + Upload agent-generated interview materials to GCS. + + Args: + user_id: The user's database ID. + job_id: The job record ID. + content: Markdown content of the interview materials. + filename: Desired filename. + + Returns: + The GCS path. + """ + blob_path = f"tailored/{user_id}/{job_id}_{filename}" + bucket = _get_bucket() + blob = bucket.blob(blob_path) + blob.upload_from_string(content.encode("utf-8"), content_type="text/markdown") + + return f"gs://{settings.GCS_BUCKET_NAME}/{blob_path}" + + +# ── Download functions ──────────────────────────────────────────────────────── + +def download_file(gcs_path: str) -> bytes: + """ + Download a file from GCS. + + Args: + gcs_path: Full GCS path (gs://bucket/path/to/file). + + Returns: + File content as bytes. + """ + # Parse gs://bucket/path + path = gcs_path.replace(f"gs://{settings.GCS_BUCKET_NAME}/", "") + bucket = _get_bucket() + blob = bucket.blob(path) + return blob.download_as_bytes() + + +def delete_file(gcs_path: str) -> None: + """ + Delete a file from GCS. + + Args: + gcs_path: Full GCS path (gs://bucket/path/to/file). + """ + path = gcs_path.replace(f"gs://{settings.GCS_BUCKET_NAME}/", "") + bucket = _get_bucket() + blob = bucket.blob(path) + blob.delete() + + +# ── Signed URL ──────────────────────────────────────────────────────────────── + +def generate_signed_url(gcs_path: str, expiry_minutes: int = 15) -> str: + """ + Generate a signed URL for temporary access to a GCS file. + + Args: + gcs_path: Full GCS path. + expiry_minutes: URL validity duration in minutes. + + Returns: + A signed URL string. + """ + path = gcs_path.replace(f"gs://{settings.GCS_BUCKET_NAME}/", "") + bucket = _get_bucket() + blob = bucket.blob(path) + + url = blob.generate_signed_url( + version="v4", + expiration=datetime.timedelta(minutes=expiry_minutes), + method="GET", + ) + return url diff --git a/backend/main.py b/backend/main.py new file mode 100644 index 0000000..822f447 --- /dev/null +++ b/backend/main.py @@ -0,0 +1,54 @@ +""" +main.py +------- +FastAPI application entry point with CORS, lifespan events, and router includes. +""" + +from contextlib import asynccontextmanager +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + +from backend.database import engine, Base +from backend.routers import auth_router, github_router, resume_router, job_router + + +@asynccontextmanager +async def lifespan(app: FastAPI): + """Create database tables on startup.""" + async with engine.begin() as conn: + await conn.run_sync(Base.metadata.create_all) + yield + await engine.dispose() + + +app = FastAPI( + title="Job Application Agent API", + description="AI-powered resume tailoring and interview preparation", + version="1.0.0", + lifespan=lifespan, +) + +# CORS — allow frontend dev server and production origins +app.add_middleware( + CORSMiddleware, + allow_origins=[ + "http://localhost:5173", # Vite dev server + "http://localhost:3000", + "http://127.0.0.1:5173", + ], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +# Include routers +app.include_router(auth_router.router) +app.include_router(github_router.router) +app.include_router(resume_router.router) +app.include_router(job_router.router) + + +@app.get("/api/health") +async def health_check(): + """Health check endpoint.""" + return {"status": "healthy", "service": "job-application-agent"} diff --git a/backend/models.py b/backend/models.py new file mode 100644 index 0000000..ea3723e --- /dev/null +++ b/backend/models.py @@ -0,0 +1,112 @@ +""" +models.py +--------- +SQLAlchemy ORM models for the Job Application Agent web app. + +Tables: + - users: User accounts (email/password or OAuth) + - github_profiles: Linked GitHub accounts per user + - resumes: Uploaded resume files tracked in GCS + - jobs: Crew execution records with status tracking +""" + +from datetime import datetime +from sqlalchemy import ( + Column, Integer, String, Text, Enum, ForeignKey, DateTime, UniqueConstraint, Index +) +from sqlalchemy.orm import relationship +from backend.database import Base + + +class User(Base): + __tablename__ = "users" + + id = Column(Integer, primary_key=True, autoincrement=True) + first_name = Column(String(100), nullable=False) + last_name = Column(String(100), nullable=False) + email = Column(String(255), nullable=False, unique=True) + password_hash = Column(String(255), nullable=False, default="") # Empty for OAuth-only users + created_at = Column(DateTime, default=datetime.utcnow) + updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) + + # Relationships + github_profiles = relationship("GithubProfile", back_populates="user", cascade="all, delete-orphan") + resumes = relationship("Resume", back_populates="user", cascade="all, delete-orphan") + jobs = relationship("Job", back_populates="user", cascade="all, delete-orphan") + + __table_args__ = ( + Index("idx_email", "email"), + ) + + +class GithubProfile(Base): + __tablename__ = "github_profiles" + + id = Column(Integer, primary_key=True, autoincrement=True) + user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) + github_username = Column(String(100), nullable=False) + github_url = Column(String(500), nullable=False) + bq_dataset_name = Column(String(255), nullable=False) # e.g. "user_email_github_bq_db" + created_at = Column(DateTime, default=datetime.utcnow) + + # Relationships + user = relationship("User", back_populates="github_profiles") + jobs = relationship("Job", back_populates="github_profile") + + __table_args__ = ( + UniqueConstraint("user_id", "github_username", name="uq_user_github"), + ) + + +class Resume(Base): + __tablename__ = "resumes" + + id = Column(Integer, primary_key=True, autoincrement=True) + user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) + original_filename = Column(String(255), nullable=False) + gcs_path = Column(String(500), nullable=False) # gs://bucket/uploads//.md + uploaded_at = Column(DateTime, default=datetime.utcnow) + + # Relationships + user = relationship("User", back_populates="resumes") + jobs = relationship("Job", back_populates="resume") + + +class Job(Base): + __tablename__ = "jobs" + + id = Column(Integer, primary_key=True, autoincrement=True) + user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) + github_profile_id = Column(Integer, ForeignKey("github_profiles.id", ondelete="RESTRICT"), nullable=False) + resume_id = Column(Integer, ForeignKey("resumes.id", ondelete="RESTRICT"), nullable=False) + linkedin_job_url = Column(String(500), nullable=False) + + # Extracted job details + job_name = Column(String(255), nullable=True) + company_name = Column(String(255), nullable=True) + location = Column(String(255), nullable=True) + seniority_level = Column(String(100), nullable=True) + employment_type = Column(String(100), nullable=True) + job_function = Column(String(255), nullable=True) + industry = Column(String(255), nullable=True) + job_description = Column(Text, nullable=True) + requirements = Column(Text, nullable=True) + + # Output paths + tailored_resume_gcs_path = Column(String(500), nullable=True) + interview_materials_gcs_path = Column(String(500), nullable=True) + + # Status tracking + status = Column( + Enum("pending", "processing", "completed", "failed", name="job_status"), + default="pending", + nullable=False, + ) + error_message = Column(Text, nullable=True) + created_at = Column(DateTime, default=datetime.utcnow) + completed_at = Column(DateTime, nullable=True) + + # Relationships + user = relationship("User", back_populates="jobs") + github_profile = relationship("GithubProfile", back_populates="jobs") + resume = relationship("Resume", back_populates="jobs") diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..c0f7acf --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,16 @@ +# Backend dependencies +fastapi>=0.115.0 +uvicorn[standard]>=0.30.0 +sqlalchemy[asyncio]>=2.0 +asyncmy>=0.2.9 +pymysql>=1.1.0 +pydantic>=2.0 +pydantic-settings>=2.0 +python-jose[cryptography]>=3.3.0 +passlib[bcrypt]>=1.7.4 +python-multipart>=0.0.7 +google-cloud-storage>=2.14.0 +google-auth>=2.25.0 +python-dotenv>=1.0.0 +pydantic[email]>=2.0 +sse-starlette>=1.8.0 diff --git a/backend/routers/__init__.py b/backend/routers/__init__.py new file mode 100644 index 0000000..873f7bb --- /dev/null +++ b/backend/routers/__init__.py @@ -0,0 +1 @@ +# Routers package diff --git a/backend/routers/auth_router.py b/backend/routers/auth_router.py new file mode 100644 index 0000000..9e3afe9 --- /dev/null +++ b/backend/routers/auth_router.py @@ -0,0 +1,100 @@ +""" +auth_router.py +-------------- +Authentication endpoints: register, login, Google OAuth, and current user profile. +""" + +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from backend.database import get_db +from backend.models import User +from backend.schemas import ( + RegisterRequest, LoginRequest, GoogleOAuthRequest, + TokenResponse, UserResponse, +) +from backend.auth import ( + hash_password, verify_password, create_access_token, + get_current_user, verify_google_id_token, +) + +router = APIRouter(prefix="/api/auth", tags=["auth"]) + + +@router.post("/register", response_model=TokenResponse, status_code=status.HTTP_201_CREATED) +async def register(req: RegisterRequest, db: AsyncSession = Depends(get_db)): + """Register a new user account with email and password.""" + # Check for duplicate email + existing = await db.execute(select(User).where(User.email == req.email)) + if existing.scalar_one_or_none(): + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail="An account with this email already exists.", + ) + + user = User( + first_name=req.first_name, + last_name=req.last_name, + email=req.email, + password_hash=hash_password(req.password), + ) + db.add(user) + await db.commit() + await db.refresh(user) + + token = create_access_token(user.id, user.email) + return TokenResponse(access_token=token) + + +@router.post("/login", response_model=TokenResponse) +async def login(req: LoginRequest, db: AsyncSession = Depends(get_db)): + """Login with email and password, returns a JWT token.""" + result = await db.execute(select(User).where(User.email == req.email)) + user = result.scalar_one_or_none() + + if not user or not user.password_hash or not verify_password(req.password, user.password_hash): + raise HTTPException( + status_code=status.HTTP_401_UNAUTHORIZED, + detail="Invalid email or password.", + ) + + token = create_access_token(user.id, user.email) + return TokenResponse(access_token=token) + + +@router.post("/google", response_model=TokenResponse) +async def google_oauth_login(req: GoogleOAuthRequest, db: AsyncSession = Depends(get_db)): + """ + Login or register via Google OAuth. + Verifies the Google ID token server-side, creates a user if first login. + """ + idinfo = await verify_google_id_token(req.id_token) + email = idinfo.get("email") + if not email: + raise HTTPException(status_code=400, detail="Google token missing email claim.") + + # Find or create user + result = await db.execute(select(User).where(User.email == email)) + user = result.scalar_one_or_none() + + if not user: + # First-time Google OAuth login — create account + user = User( + first_name=idinfo.get("given_name", ""), + last_name=idinfo.get("family_name", ""), + email=email, + password_hash="", # OAuth-only user, no password + ) + db.add(user) + await db.commit() + await db.refresh(user) + + token = create_access_token(user.id, user.email) + return TokenResponse(access_token=token) + + +@router.get("/me", response_model=UserResponse) +async def get_me(current_user: User = Depends(get_current_user)): + """Return the currently authenticated user's profile.""" + return current_user diff --git a/backend/routers/github_router.py b/backend/routers/github_router.py new file mode 100644 index 0000000..2d8e1c5 --- /dev/null +++ b/backend/routers/github_router.py @@ -0,0 +1,102 @@ +""" +github_router.py +---------------- +CRUD endpoints for managing GitHub profiles linked to a user account. +""" + +import re +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from backend.database import get_db +from backend.models import User, GithubProfile +from backend.schemas import GithubProfileCreate, GithubProfileResponse +from backend.auth import get_current_user + +router = APIRouter(prefix="/api/github", tags=["github"]) + + +def _sanitize_dataset_name(email: str) -> str: + """ + Generate a BigQuery-safe dataset name from a user's email. + Replaces all non-alphanumeric characters with underscores. + Example: arijitde2050@gmail.com → arijitde2050_gmail_com_github_bq_db + """ + sanitized = re.sub(r"[^a-zA-Z0-9]", "_", email) + return f"{sanitized}_github_bq_db" + + +@router.post("", response_model=GithubProfileResponse, status_code=status.HTTP_201_CREATED) +async def add_github_profile( + req: GithubProfileCreate, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Add a GitHub profile (username) for the authenticated user.""" + # Check for duplicate + existing = await db.execute( + select(GithubProfile).where( + GithubProfile.user_id == current_user.id, + GithubProfile.github_username == req.github_username, + ) + ) + if existing.scalar_one_or_none(): + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail=f"GitHub username '{req.github_username}' is already linked to your account.", + ) + + profile = GithubProfile( + user_id=current_user.id, + github_username=req.github_username, + github_url=f"https://github.com/{req.github_username}", + bq_dataset_name=_sanitize_dataset_name(current_user.email), + ) + db.add(profile) + await db.commit() + await db.refresh(profile) + return profile + + +@router.get("", response_model=list[GithubProfileResponse]) +async def list_github_profiles( + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """List all GitHub profiles for the authenticated user.""" + result = await db.execute( + select(GithubProfile).where(GithubProfile.user_id == current_user.id) + ) + return result.scalars().all() + + +@router.delete("/{profile_id}", status_code=status.HTTP_204_NO_CONTENT) +async def delete_github_profile( + profile_id: int, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """ + Delete a GitHub profile. Fails if the profile has been used in a job + (ON DELETE RESTRICT enforced at the DB level). + """ + result = await db.execute( + select(GithubProfile).where( + GithubProfile.id == profile_id, + GithubProfile.user_id == current_user.id, + ) + ) + profile = result.scalar_one_or_none() + if not profile: + raise HTTPException(status_code=404, detail="GitHub profile not found.") + + try: + await db.delete(profile) + await db.commit() + except Exception: + await db.rollback() + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail="Cannot delete this GitHub profile — it has been used in a job application.", + ) diff --git a/backend/routers/job_router.py b/backend/routers/job_router.py new file mode 100644 index 0000000..f326df2 --- /dev/null +++ b/backend/routers/job_router.py @@ -0,0 +1,187 @@ +""" +job_router.py +------------- +Endpoints for starting crew execution, listing jobs, checking status/progress, +downloading tailored resumes and interview materials. +""" + +import asyncio +from fastapi import APIRouter, Depends, HTTPException, status +from fastapi.responses import StreamingResponse, Response +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from backend.database import get_db +from backend.models import User, Job, GithubProfile, Resume +from backend.schemas import TailorJobRequest, JobResponse, JobDetailResponse +from backend.auth import get_current_user +from backend.gcs import download_file +from backend.crew_runner import run_crew_for_job, progress_store + +router = APIRouter(prefix="/api/jobs", tags=["jobs"]) + + +@router.post("/tailor", response_model=JobResponse, status_code=status.HTTP_201_CREATED) +async def tailor_resume( + req: TailorJobRequest, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Start a crew execution to tailor a resume for a job posting.""" + gh_result = await db.execute( + select(GithubProfile).where( + GithubProfile.id == req.github_profile_id, + GithubProfile.user_id == current_user.id, + ) + ) + github_profile = gh_result.scalar_one_or_none() + if not github_profile: + raise HTTPException(status_code=404, detail="GitHub profile not found.") + + resume_result = await db.execute( + select(Resume).where(Resume.id == req.resume_id, Resume.user_id == current_user.id) + ) + resume = resume_result.scalar_one_or_none() + if not resume: + raise HTTPException(status_code=404, detail="Resume not found.") + + job = Job( + user_id=current_user.id, + github_profile_id=req.github_profile_id, + resume_id=req.resume_id, + linkedin_job_url=req.linkedin_job_url, + status="pending", + ) + db.add(job) + await db.commit() + await db.refresh(job) + + asyncio.create_task( + run_crew_for_job( + job_id=job.id, user_id=current_user.id, user_email=current_user.email, + github_profile=github_profile, resume_gcs_path=resume.gcs_path, + job_url=req.linkedin_job_url, + ) + ) + return job + + +@router.get("", response_model=list[JobResponse]) +async def list_jobs( + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """List all jobs for the authenticated user, newest first.""" + result = await db.execute( + select(Job).where(Job.user_id == current_user.id).order_by(Job.created_at.desc()) + ) + return result.scalars().all() + + +@router.get("/{job_id}", response_model=JobDetailResponse) +async def get_job_detail( + job_id: int, current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Get detailed information about a specific job.""" + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + job = result.scalar_one_or_none() + if not job: + raise HTTPException(status_code=404, detail="Job not found.") + return job + + +@router.get("/{job_id}/progress") +async def stream_job_progress( + job_id: int, current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """SSE endpoint for real-time crew execution progress.""" + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + if not result.scalar_one_or_none(): + raise HTTPException(status_code=404, detail="Job not found.") + + async def event_stream(): + last_step = None + while True: + progress = progress_store.get(job_id, {}) + current_step = progress.get("current_step", "pending") + error = progress.get("error") + if current_step != last_step: + last_step = current_step + err_str = f'"{error}"' if error else "null" + yield f'data: {{"step": "{current_step}", "error": {err_str}}}\n\n' + if current_step in ("completed", "failed"): + break + await asyncio.sleep(1) + + return StreamingResponse( + event_stream(), media_type="text/event-stream", + headers={"Cache-Control": "no-cache", "Connection": "keep-alive", "X-Accel-Buffering": "no"}, + ) + + +@router.get("/{job_id}/resume/download") +async def download_tailored_resume( + job_id: int, current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Download the tailored resume .md file.""" + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + job = result.scalar_one_or_none() + if not job: + raise HTTPException(status_code=404, detail="Job not found.") + if not job.tailored_resume_gcs_path: + raise HTTPException(status_code=404, detail="Tailored resume not available yet.") + content = download_file(job.tailored_resume_gcs_path) + fname = f"{(job.company_name or 'tailored')}_{(job.job_name or 'resume')}_resume.md".replace(" ", "_") + return Response(content=content, media_type="text/markdown", + headers={"Content-Disposition": f'attachment; filename="{fname}"'}) + + +@router.get("/{job_id}/interview/download") +async def download_interview_materials( + job_id: int, current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Download the interview materials .md file.""" + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + job = result.scalar_one_or_none() + if not job: + raise HTTPException(status_code=404, detail="Job not found.") + if not job.interview_materials_gcs_path: + raise HTTPException(status_code=404, detail="Interview materials not available yet.") + content = download_file(job.interview_materials_gcs_path) + fname = f"{(job.company_name or 'interview')}_{(job.job_name or 'prep')}_interview.md".replace(" ", "_") + return Response(content=content, media_type="text/markdown", + headers={"Content-Disposition": f'attachment; filename="{fname}"'}) + + +@router.get("/{job_id}/interview/content") +async def get_interview_content( + job_id: int, current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Get interview materials markdown content for in-browser viewing.""" + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + job = result.scalar_one_or_none() + if not job: + raise HTTPException(status_code=404, detail="Job not found.") + if not job.interview_materials_gcs_path: + raise HTTPException(status_code=404, detail="Interview materials not available yet.") + content = download_file(job.interview_materials_gcs_path) + return { + "content": content.decode("utf-8"), "job_name": job.job_name, + "company_name": job.company_name, + "created_at": job.created_at.isoformat() if job.created_at else None, + } diff --git a/backend/routers/resume_router.py b/backend/routers/resume_router.py new file mode 100644 index 0000000..45c5556 --- /dev/null +++ b/backend/routers/resume_router.py @@ -0,0 +1,165 @@ +""" +resume_router.py +---------------- +Endpoints for uploading, listing, previewing, and deleting resumes. +""" + +from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, status +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from backend.database import get_db +from backend.models import User, Resume +from backend.schemas import ResumeResponse +from backend.auth import get_current_user +from backend.gcs import upload_resume, generate_signed_url, download_file, delete_file +from backend.config import get_settings + +settings = get_settings() +router = APIRouter(prefix="/api/resumes", tags=["resumes"]) + + +@router.post("/upload", response_model=ResumeResponse, status_code=status.HTTP_201_CREATED) +async def upload_resume_file( + file: UploadFile = File(...), + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Upload a .md resume file to GCS.""" + # Validate file extension + if not file.filename or not file.filename.endswith(".md"): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Only Markdown (.md) files are accepted.", + ) + + # Read file content + file_bytes = await file.read() + + # Validate file size + if len(file_bytes) > settings.max_resume_bytes: + raise HTTPException( + status_code=status.HTTP_413_REQUEST_ENTITY_TOO_LARGE, + detail=f"File too large. Maximum allowed size is {settings.MAX_RESUME_SIZE_MB} MB.", + ) + + # Upload to GCS + try: + gcs_path = upload_resume(current_user.id, file_bytes, file.filename) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Failed to upload resume: {e}", + ) + + # Create DB record + resume = Resume( + user_id=current_user.id, + original_filename=file.filename, + gcs_path=gcs_path, + ) + db.add(resume) + await db.commit() + await db.refresh(resume) + return resume + + +@router.get("", response_model=list[ResumeResponse]) +async def list_resumes( + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """List all resumes uploaded by the authenticated user.""" + result = await db.execute( + select(Resume).where(Resume.user_id == current_user.id).order_by(Resume.uploaded_at.desc()) + ) + return result.scalars().all() + + +@router.get("/{resume_id}/preview") +async def preview_resume( + resume_id: int, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Get a signed URL for previewing a resume.""" + result = await db.execute( + select(Resume).where( + Resume.id == resume_id, + Resume.user_id == current_user.id, + ) + ) + resume = result.scalar_one_or_none() + if not resume: + raise HTTPException(status_code=404, detail="Resume not found.") + + try: + signed_url = generate_signed_url(resume.gcs_path) + return {"signed_url": signed_url} + except Exception as e: + raise HTTPException( + status_code=500, + detail=f"Failed to generate preview URL: {e}", + ) + + +@router.get("/{resume_id}/content") +async def get_resume_content( + resume_id: int, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Get the raw markdown content of a resume for in-browser rendering.""" + result = await db.execute( + select(Resume).where( + Resume.id == resume_id, + Resume.user_id == current_user.id, + ) + ) + resume = result.scalar_one_or_none() + if not resume: + raise HTTPException(status_code=404, detail="Resume not found.") + + try: + content_bytes = download_file(resume.gcs_path) + return {"content": content_bytes.decode("utf-8"), "filename": resume.original_filename} + except Exception as e: + raise HTTPException(status_code=500, detail=f"Failed to read resume: {e}") + + +@router.delete("/{resume_id}", status_code=status.HTTP_204_NO_CONTENT) +async def delete_resume( + resume_id: int, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """ + Delete a resume. Fails if the resume has been used in a job application + (ON DELETE RESTRICT enforced at the DB level). + """ + result = await db.execute( + select(Resume).where( + Resume.id == resume_id, + Resume.user_id == current_user.id, + ) + ) + resume = result.scalar_one_or_none() + if not resume: + raise HTTPException(status_code=404, detail="Resume not found.") + + try: + # Delete from GCS + try: + delete_file(resume.gcs_path) + except Exception: + pass # GCS file might not exist; still remove DB record + + # Delete DB record + await db.delete(resume) + await db.commit() + except Exception: + await db.rollback() + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail="Cannot delete this resume — it has been used in a job application.", + ) diff --git a/backend/schemas.py b/backend/schemas.py new file mode 100644 index 0000000..6e595a6 --- /dev/null +++ b/backend/schemas.py @@ -0,0 +1,105 @@ +""" +schemas.py +---------- +Pydantic request/response schemas for the FastAPI endpoints. +""" + +from datetime import datetime +from typing import Optional +from pydantic import BaseModel, EmailStr, Field + + +# ── Auth ────────────────────────────────────────────────────────────────────── + +class RegisterRequest(BaseModel): + first_name: str = Field(..., min_length=1, max_length=100) + last_name: str = Field(..., min_length=1, max_length=100) + email: EmailStr + password: str = Field(..., min_length=8) + + +class LoginRequest(BaseModel): + email: EmailStr + password: str + + +class GoogleOAuthRequest(BaseModel): + id_token: str = Field(..., description="Google OAuth ID token from frontend") + + +class TokenResponse(BaseModel): + access_token: str + token_type: str = "bearer" + + +class UserResponse(BaseModel): + id: int + first_name: str + last_name: str + email: str + created_at: datetime + + model_config = {"from_attributes": True} + + +# ── GitHub Profiles ─────────────────────────────────────────────────────────── + +class GithubProfileCreate(BaseModel): + github_username: str = Field(..., min_length=1, max_length=100) + + +class GithubProfileResponse(BaseModel): + id: int + github_username: str + github_url: str + bq_dataset_name: str + created_at: datetime + + model_config = {"from_attributes": True} + + +# ── Resumes ─────────────────────────────────────────────────────────────────── + +class ResumeResponse(BaseModel): + id: int + original_filename: str + gcs_path: str + uploaded_at: datetime + + model_config = {"from_attributes": True} + + +# ── Jobs ────────────────────────────────────────────────────────────────────── + +class TailorJobRequest(BaseModel): + linkedin_job_url: str = Field(..., description="LinkedIn job posting URL") + github_profile_id: int = Field(..., description="ID of the GitHub profile to use") + resume_id: int = Field(..., description="ID of the uploaded resume to use") + + +class JobResponse(BaseModel): + id: int + linkedin_job_url: str + job_name: Optional[str] = None + company_name: Optional[str] = None + location: Optional[str] = None + seniority_level: Optional[str] = None + employment_type: Optional[str] = None + job_function: Optional[str] = None + industry: Optional[str] = None + status: str + error_message: Optional[str] = None + tailored_resume_gcs_path: Optional[str] = None + interview_materials_gcs_path: Optional[str] = None + created_at: datetime + completed_at: Optional[datetime] = None + + model_config = {"from_attributes": True} + + +class JobDetailResponse(JobResponse): + """Extended job response including the full description and requirements.""" + job_description: Optional[str] = None + requirements: Optional[str] = None + + model_config = {"from_attributes": True} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..a36934d --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,16 @@ +# React + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..ea36dd3 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,21 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{js,jsx}'], + extends: [ + js.configs.recommended, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + ], + languageOptions: { + globals: globals.browser, + parserOptions: { ecmaFeatures: { jsx: true } }, + }, + }, +]) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..6f95f9c --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + + Job Application Agent — AI Resume Tailoring + + +
+ + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..65a901e --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,4350 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "axios": "^1.17.0", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-icons": "^5.6.0", + "react-markdown": "^10.1.0", + "react-router-dom": "^7.17.0", + "rehype-highlight": "^7.0.2", + "remark-gfm": "^4.0.1" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "vite": "^8.0.12" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@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.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@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.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "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.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "Apache-2.0", + "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, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.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, + "license": "Apache-2.0", + "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, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz", + "integrity": "sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.3.tgz", + "integrity": "sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.3.tgz", + "integrity": "sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.3.tgz", + "integrity": "sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.3.tgz", + "integrity": "sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.3.tgz", + "integrity": "sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.3.tgz", + "integrity": "sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.3.tgz", + "integrity": "sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.3.tgz", + "integrity": "sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.3.tgz", + "integrity": "sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.3.tgz", + "integrity": "sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.3.tgz", + "integrity": "sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.3.tgz", + "integrity": "sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.3.tgz", + "integrity": "sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.3.tgz", + "integrity": "sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "license": "MIT", + "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, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", + "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", + "integrity": "sha512-DlSMqo4WhThw4vB8Mpn0Woe9J+Jfq1geJ61AKW0QEgLzGMNwtIMdxbDUzLxcun8W7NbJO0e2Jg/Nxm3cCSVzzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.34", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.34.tgz", + "integrity": "sha512-IMDedajPifLnHNY0X9n8hKxRTQ6/eTHwr5bDo04WnuqxyKw6LYtQywCuuqPZwhl3aBXMvQpJov42GLCwRRdQzw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001797", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001797.tgz", + "integrity": "sha512-l8xKG+gwAIExZGl9FrF7KUwuOmk6wbEPC9Xoy/RtnWv1XG0Q4LFlagaLpUv3Kiza3W/wm27zy0yWJEieYKAP6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "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, + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "license": "MIT", + "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.369", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.369.tgz", + "integrity": "sha512-XM22K9FNaaCOvMMrBn1caIc8v0g6+pKt660ZbfQqUZvfil0hEzr8ZoiY7VcSLGM3L/x3rz5PqZrk+bKOOmVM9w==", + "dev": true, + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "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==", + "license": "MIT", + "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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.1.tgz", + "integrity": "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.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", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", + "dev": true, + "license": "MIT", + "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 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.5.2.tgz", + "integrity": "sha512-hmgTH57GfzoTFjVN0yBwTggnsVUF2tcqi7RJZHqi9lIezSs4eFyAMktA68YD4r5kNw1mxyY4dmkyoFDb3FIqrA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^9 || ^10" + } + }, + "node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "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, + "license": "BSD-3-Clause", + "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, + "license": "BSD-2-Clause", + "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, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-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, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "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, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.6.0.tgz", + "integrity": "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/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, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "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.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "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, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lowlight": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", + "integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "highlight.js": "~11.11.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", + "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", + "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.47", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.47.tgz", + "integrity": "sha512-Uzmd6LXpouKo8EUK68IjH4+E01w/hXyV3R3g/geCJo+rXLNfh1xucB+LOzYEOQPSiUK3h/xZf0cQGcSsmyL2Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "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/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, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "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, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/react": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz", + "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz", + "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.7" + } + }, + "node_modules/react-icons": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.6.0.tgz", + "integrity": "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/react-router": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.17.0.tgz", + "integrity": "sha512-FDELK7rTMlCHO5+reyXsPlmfr7N1F91lPHsWYfMEGQm/KQ+F4JFM8jGoeQDmDvdTs93Fw9aSilH+uKRb4/jXvQ==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.17.0.tgz", + "integrity": "sha512-fyU2yjGups/hE6Xz0I5ZYbVL8Gx29eCjgpHaRaTaVU+OOAdfRX05KsvyRm0GO8YQwOkhpU3MurW1jyMUJn+zSw==", + "license": "MIT", + "dependencies": { + "react-router": "7.17.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/rehype-highlight": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz", + "integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-text": "^4.0.0", + "lowlight": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", + "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rolldown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", + "integrity": "sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "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, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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" + } + ], + "license": "MIT", + "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, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "8.0.16", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.16.tgz", + "integrity": "sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "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, + "license": "ISC" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..e7c4951 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,33 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "axios": "^1.17.0", + "react": "^19.2.6", + "react-dom": "^19.2.6", + "react-icons": "^5.6.0", + "react-markdown": "^10.1.0", + "react-router-dom": "^7.17.0", + "rehype-highlight": "^7.0.2", + "remark-gfm": "^4.0.1" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.1", + "eslint": "^10.3.0", + "eslint-plugin-react-hooks": "^7.1.1", + "eslint-plugin-react-refresh": "^0.5.2", + "globals": "^17.6.0", + "vite": "^8.0.12" + } +} diff --git a/frontend/public/favicon.svg b/frontend/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/frontend/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/public/icons.svg b/frontend/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/frontend/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx new file mode 100644 index 0000000..aff5b5e --- /dev/null +++ b/frontend/src/App.jsx @@ -0,0 +1,39 @@ +import { Routes, Route, Navigate } from 'react-router-dom'; +import { useAuth } from './context/AuthContext'; +import LandingPage from './pages/LandingPage'; +import RegisterPage from './pages/RegisterPage'; +import HomePage from './pages/HomePage'; +import InterviewMaterialsPage from './pages/InterviewMaterialsPage'; + +function ProtectedRoute({ children }) { + const { user, loading } = useAuth(); + if (loading) { + return ( +
+
+
+ ); + } + return user ? children : ; +} + +export default function App() { + const { user, loading } = useAuth(); + + if (loading) { + return ( +
+
+
+ ); + } + + return ( + + : } /> + : } /> + } /> + } /> + + ); +} diff --git a/frontend/src/api/client.js b/frontend/src/api/client.js new file mode 100644 index 0000000..a90b6a0 --- /dev/null +++ b/frontend/src/api/client.js @@ -0,0 +1,31 @@ +import axios from 'axios'; + +const api = axios.create({ + baseURL: '/api', + headers: { 'Content-Type': 'application/json' }, +}); + +// JWT interceptor — attach token to every request +api.interceptors.request.use((config) => { + const token = localStorage.getItem('token'); + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; +}); + +// Response interceptor — handle 401 globally +api.interceptors.response.use( + (response) => response, + (error) => { + if (error.response?.status === 401) { + localStorage.removeItem('token'); + if (window.location.pathname !== '/') { + window.location.href = '/'; + } + } + return Promise.reject(error); + } +); + +export default api; diff --git a/frontend/src/assets/hero.png b/frontend/src/assets/hero.png new file mode 100644 index 0000000000000000000000000000000000000000..02251f4b956c55af2d76fd0788124d7eee2b45eb GIT binary patch literal 13057 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 P00000NkvXXu0mjft=yBf literal 0 HcmV?d00001 diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/vite.svg b/frontend/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/frontend/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/frontend/src/components/GithubProfileAdd.jsx b/frontend/src/components/GithubProfileAdd.jsx new file mode 100644 index 0000000..2d44baa --- /dev/null +++ b/frontend/src/components/GithubProfileAdd.jsx @@ -0,0 +1,74 @@ +import { useState } from 'react'; +import api from '../api/client'; +import { FiGithub, FiTrash2, FiPlus } from 'react-icons/fi'; + +export default function GithubProfileAdd({ profiles, onRefresh }) { + const [username, setUsername] = useState(''); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + + const handleAdd = async (e) => { + e.preventDefault(); + if (!username.trim()) return; + setError(''); + setLoading(true); + try { + await api.post('/github', { github_username: username.trim() }); + setUsername(''); + onRefresh(); + } catch (err) { + setError(err.response?.data?.detail || 'Failed to add GitHub profile.'); + } finally { + setLoading(false); + } + }; + + const handleDelete = async (id) => { + try { + await api.delete(`/github/${id}`); + onRefresh(); + } catch (err) { + setError(err.response?.data?.detail || 'Cannot delete profile.'); + } + }; + + return ( +
+

+ GitHub Profiles +

+ +
+ setUsername(e.target.value)} + style={{ flex: 1 }} id="github-username-input" + /> + +
+ + {error &&

{error}

} + + {profiles.length > 0 && ( +
+ {profiles.map((p) => ( +
+ + {p.github_username} + + +
+ ))} +
+ )} +
+ ); +} diff --git a/frontend/src/components/LoginSection.jsx b/frontend/src/components/LoginSection.jsx new file mode 100644 index 0000000..3aecd77 --- /dev/null +++ b/frontend/src/components/LoginSection.jsx @@ -0,0 +1,53 @@ +import { useState } from 'react'; +import api from '../api/client'; +import { useAuth } from '../context/AuthContext'; +import { FiMail, FiLock } from 'react-icons/fi'; + +export default function LoginSection() { + const { login } = useAuth(); + const [email, setEmail] = useState(''); + const [password, setPassword] = useState(''); + const [error, setError] = useState(''); + const [loading, setLoading] = useState(false); + + const handleSubmit = async (e) => { + e.preventDefault(); + setError(''); + setLoading(true); + try { + const res = await api.post('/auth/login', { email, password }); + login(res.data.access_token); + } catch (err) { + setError(err.response?.data?.detail || 'Login failed. Please try again.'); + } finally { + setLoading(false); + } + }; + + return ( +
+
+ +
+ + setEmail(e.target.value)} required + style={{ paddingLeft: 36 }} /> +
+
+
+ +
+ + setPassword(e.target.value)} required + style={{ paddingLeft: 36 }} /> +
+
+ {error &&

{error}

} + +
+ ); +} diff --git a/frontend/src/components/Navbar.jsx b/frontend/src/components/Navbar.jsx new file mode 100644 index 0000000..2cbdedb --- /dev/null +++ b/frontend/src/components/Navbar.jsx @@ -0,0 +1,41 @@ +import { useAuth } from '../context/AuthContext'; +import { useNavigate, Link } from 'react-router-dom'; +import { FiLogOut, FiZap } from 'react-icons/fi'; + +export default function Navbar() { + const { user, logout } = useAuth(); + const navigate = useNavigate(); + + const handleLogout = () => { + logout(); + navigate('/'); + }; + + return ( + + ); +} diff --git a/frontend/src/components/ProgressTracker.jsx b/frontend/src/components/ProgressTracker.jsx new file mode 100644 index 0000000..419a93a --- /dev/null +++ b/frontend/src/components/ProgressTracker.jsx @@ -0,0 +1,98 @@ +import { useEffect, useState } from 'react'; +import { FiCheck, FiLoader, FiClock, FiAlertTriangle } from 'react-icons/fi'; + +const STEPS = [ + { key: 'extracting_job_info', label: 'Extracting job information' }, + { key: 'searching_projects', label: 'Searching GitHub projects' }, + { key: 'building_profile', label: 'Building your profile' }, + { key: 'tailoring_resume', label: 'Tailoring your resume' }, + { key: 'uploading_results', label: 'Uploading results' }, +]; + +export default function ProgressTracker({ jobId, onComplete }) { + const [currentStep, setCurrentStep] = useState('pending'); + const [error, setError] = useState(null); + + useEffect(() => { + if (!jobId) return; + + const eventSource = new EventSource(`/api/jobs/${jobId}/progress`); + eventSource.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + setCurrentStep(data.step); + if (data.error) setError(data.error); + if (data.step === 'completed' || data.step === 'failed') { + eventSource.close(); + if (data.step === 'completed') onComplete?.(); + } + } catch (e) { + console.error('SSE parse error:', e); + } + }; + eventSource.onerror = () => { + // Auto-reconnect is built into EventSource + }; + return () => eventSource.close(); + }, [jobId, onComplete]); + + const getStepIndex = () => STEPS.findIndex((s) => s.key === currentStep); + const activeIdx = getStepIndex(); + + return ( +
+

+ {currentStep === 'completed' ? '✅ Tailoring Complete!' : + currentStep === 'failed' ? '❌ Tailoring Failed' : + '⚡ Tailoring in progress...'} +

+ +
+ {STEPS.map((step, idx) => { + let status = 'pending'; + if (currentStep === 'completed') status = 'done'; + else if (currentStep === 'failed' && idx <= activeIdx) status = idx === activeIdx ? 'failed' : 'done'; + else if (idx < activeIdx) status = 'done'; + else if (idx === activeIdx) status = 'active'; + + return ( +
+
+ {status === 'done' && } + {status === 'active' && } + {status === 'failed' && } + {status === 'pending' && } +
+ + {step.label} + +
+ ); + })} +
+ + {error && ( +

+ {error} +

+ )} +
+ ); +} diff --git a/frontend/src/components/ResumePreviewModal.jsx b/frontend/src/components/ResumePreviewModal.jsx new file mode 100644 index 0000000..00f0029 --- /dev/null +++ b/frontend/src/components/ResumePreviewModal.jsx @@ -0,0 +1,55 @@ +import { useState, useEffect } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import api from '../api/client'; +import { FiX } from 'react-icons/fi'; + +export default function ResumePreviewModal({ jobId, resumeId, onClose }) { + const [content, setContent] = useState(''); + const [loading, setLoading] = useState(true); + const [title, setTitle] = useState('Resume Preview'); + + useEffect(() => { + const fetchContent = async () => { + setLoading(true); + try { + if (jobId) { + // Preview tailored resume from a job + const res = await api.get(`/jobs/${jobId}/resume/download`, { responseType: 'text' }); + setContent(typeof res.data === 'string' ? res.data : new TextDecoder().decode(res.data)); + setTitle('Tailored Resume'); + } else if (resumeId) { + // Preview uploaded resume + const res = await api.get(`/resumes/${resumeId}/content`); + setContent(res.data.content); + setTitle(res.data.filename || 'Resume Preview'); + } + } catch (err) { + setContent('Failed to load resume content.'); + } finally { + setLoading(false); + } + }; + fetchContent(); + }, [jobId, resumeId]); + + return ( +
+
e.stopPropagation()}> +
+

{title}

+ +
+ {loading ? ( +
+
+
+ ) : ( +
+ {content} +
+ )} +
+
+ ); +} diff --git a/frontend/src/components/ResumeReadyModal.jsx b/frontend/src/components/ResumeReadyModal.jsx new file mode 100644 index 0000000..03246aa --- /dev/null +++ b/frontend/src/components/ResumeReadyModal.jsx @@ -0,0 +1,59 @@ +import { useNavigate } from 'react-router-dom'; +import { FiEye, FiDownload, FiBookOpen, FiX } from 'react-icons/fi'; +import api from '../api/client'; + +export default function ResumeReadyModal({ job, onClose, onPreviewResume }) { + const navigate = useNavigate(); + + const downloadFile = async (type) => { + try { + const url = type === 'resume' + ? `/jobs/${job.id}/resume/download` + : `/jobs/${job.id}/interview/download`; + const res = await api.get(url, { responseType: 'blob' }); + const blob = new Blob([res.data], { type: 'text/markdown' }); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = `${type}_${job.company_name || 'output'}.md`; + link.click(); + URL.revokeObjectURL(link.href); + } catch (err) { + console.error('Download failed:', err); + } + }; + + return ( +
+
e.stopPropagation()} style={{ textAlign: 'center', maxWidth: 500 }}> + + +
🎉
+

+ Your tailored resume is ready! +

+

+ {job.job_name} at {job.company_name} +

+ +
+ + +
+ + +
+
+
+
+ ); +} diff --git a/frontend/src/components/ResumeUpload.jsx b/frontend/src/components/ResumeUpload.jsx new file mode 100644 index 0000000..5fa8b93 --- /dev/null +++ b/frontend/src/components/ResumeUpload.jsx @@ -0,0 +1,113 @@ +import { useState, useRef } from 'react'; +import api from '../api/client'; +import { FiUploadCloud, FiFile, FiTrash2, FiExternalLink } from 'react-icons/fi'; + +export default function ResumeUpload({ resumes, onRefresh }) { + const [uploading, setUploading] = useState(false); + const [dragActive, setDragActive] = useState(false); + const [error, setError] = useState(''); + const fileInputRef = useRef(null); + + const handleUpload = async (file) => { + if (!file) return; + if (!file.name.endsWith('.md')) { + setError('Only Markdown (.md) files are accepted.'); + return; + } + setError(''); + setUploading(true); + try { + const formData = new FormData(); + formData.append('file', file); + await api.post('/resumes/upload', formData, { + headers: { 'Content-Type': 'multipart/form-data' }, + }); + onRefresh(); + } catch (err) { + setError(err.response?.data?.detail || 'Upload failed.'); + } finally { + setUploading(false); + } + }; + + const handleDelete = async (id) => { + try { + await api.delete(`/resumes/${id}`); + onRefresh(); + } catch (err) { + setError(err.response?.data?.detail || 'Cannot delete resume.'); + } + }; + + const handleDrop = (e) => { + e.preventDefault(); + setDragActive(false); + const file = e.dataTransfer.files[0]; + handleUpload(file); + }; + + return ( +
+

+ Resume Upload +

+ + {/* Drop zone */} +
{ e.preventDefault(); setDragActive(true); }} + onDragLeave={() => setDragActive(false)} + onDrop={handleDrop} + onClick={() => fileInputRef.current?.click()} + style={{ + border: `2px dashed ${dragActive ? 'var(--accent-primary)' : 'var(--border-medium)'}`, + borderRadius: 'var(--radius-md)', padding: 'var(--space-8)', + textAlign: 'center', cursor: 'pointer', + background: dragActive ? 'var(--accent-primary-glow)' : 'transparent', + transition: 'all var(--transition-base)', marginBottom: 'var(--space-4)', + }} + > + +

+ {uploading ? 'Uploading...' : 'Drag & drop or click to upload'} +

+

+ Only .md files accepted +

+ handleUpload(e.target.files[0])} /> +
+ + {/* Conversion links */} + + + {error &&

{error}

} + + {/* Resume list */} + {resumes.length > 0 && ( +
+ {resumes.map((r) => ( +
+ + {r.original_filename} + + +
+ ))} +
+ )} +
+ ); +} diff --git a/frontend/src/components/TailorResumeForm.jsx b/frontend/src/components/TailorResumeForm.jsx new file mode 100644 index 0000000..f409645 --- /dev/null +++ b/frontend/src/components/TailorResumeForm.jsx @@ -0,0 +1,84 @@ +import { useState } from 'react'; +import api from '../api/client'; +import { FiLink, FiSend, FiEye } from 'react-icons/fi'; + +export default function TailorResumeForm({ githubProfiles, resumes, onJobCreated, onPreviewUploadedResume }) { + const [jobUrl, setJobUrl] = useState(''); + const [githubId, setGithubId] = useState(''); + const [resumeId, setResumeId] = useState(''); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + + const handleSubmit = async (e) => { + e.preventDefault(); + if (!jobUrl || !githubId || !resumeId) { + setError('All fields are required.'); + return; + } + setError(''); + setLoading(true); + try { + const res = await api.post('/jobs/tailor', { + linkedin_job_url: jobUrl, + github_profile_id: parseInt(githubId), + resume_id: parseInt(resumeId), + }); + setJobUrl(''); + onJobCreated(res.data); + } catch (err) { + setError(err.response?.data?.detail || 'Failed to start tailoring.'); + } finally { + setLoading(false); + } + }; + + const canPreview = resumeId && resumes.length > 0; + + return ( +
+
+ +
+ + setJobUrl(e.target.value)} required + style={{ paddingLeft: 36 }} /> +
+
+ +
+
+ + +
+
+ +
+ + {canPreview && ( + + )} +
+
+
+ + {error &&

{error}

} + + +
+ ); +} diff --git a/frontend/src/components/TailoredResumeList.jsx b/frontend/src/components/TailoredResumeList.jsx new file mode 100644 index 0000000..cc3cd71 --- /dev/null +++ b/frontend/src/components/TailoredResumeList.jsx @@ -0,0 +1,76 @@ +import { useNavigate } from 'react-router-dom'; +import { FiEye, FiDownload, FiBookOpen } from 'react-icons/fi'; +import api from '../api/client'; + +export default function TailoredResumeList({ jobs, onPreviewResume }) { + const navigate = useNavigate(); + + const downloadFile = async (jobId, type) => { + try { + const url = type === 'resume' + ? `/jobs/${jobId}/resume/download` + : `/jobs/${jobId}/interview/download`; + const res = await api.get(url, { responseType: 'blob' }); + const blob = new Blob([res.data], { type: 'text/markdown' }); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = res.headers['content-disposition']?.split('filename=')[1]?.replace(/"/g, '') || `${type}.md`; + link.click(); + URL.revokeObjectURL(link.href); + } catch (err) { + console.error('Download failed:', err); + } + }; + + if (!jobs || jobs.length === 0) { + return ( +
+

No tailored resumes yet

+

Start by tailoring your first resume below!

+
+ ); + } + + return ( +
+ {jobs.map((job) => ( +
+
+
+ {job.job_name || 'Processing...'} +
+
+ {job.company_name || '—'} · {new Date(job.created_at).toLocaleDateString()} +
+
+ {job.status} + {job.status === 'completed' && ( +
+ + + + +
+ )} + {job.status === 'failed' && job.error_message && ( +

+ {job.error_message} +

+ )} +
+ ))} +
+ ); +} diff --git a/frontend/src/context/AuthContext.jsx b/frontend/src/context/AuthContext.jsx new file mode 100644 index 0000000..f6f09ec --- /dev/null +++ b/frontend/src/context/AuthContext.jsx @@ -0,0 +1,52 @@ +import { createContext, useContext, useState, useEffect, useCallback } from 'react'; +import api from '../api/client'; + +const AuthContext = createContext(null); + +export function AuthProvider({ children }) { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(true); + + const fetchUser = useCallback(async () => { + const token = localStorage.getItem('token'); + if (!token) { + setLoading(false); + return; + } + try { + const res = await api.get('/auth/me'); + setUser(res.data); + } catch { + localStorage.removeItem('token'); + setUser(null); + } finally { + setLoading(false); + } + }, []); + + useEffect(() => { + fetchUser(); + }, [fetchUser]); + + const login = (token) => { + localStorage.setItem('token', token); + fetchUser(); + }; + + const logout = () => { + localStorage.removeItem('token'); + setUser(null); + }; + + return ( + + {children} + + ); +} + +export function useAuth() { + const ctx = useContext(AuthContext); + if (!ctx) throw new Error('useAuth must be used within AuthProvider'); + return ctx; +} diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..237a532 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,450 @@ +/* ══════════════════════════════════════════════════════════════════════ + DESIGN SYSTEM — Global Tokens & Base Styles + ══════════════════════════════════════════════════════════════════════ */ + +:root { + /* ── Color Palette ─────────────────────────────────────────────── */ + --bg-primary: #0a0a0f; + --bg-secondary: #13131a; + --bg-surface: #1a1a2e; + --bg-surface-hover: #22223a; + --bg-elevated: #252540; + + --accent-primary: #6c63ff; + --accent-primary-hover: #7d76ff; + --accent-primary-glow: rgba(108, 99, 255, 0.25); + --accent-secondary: #00d4aa; + --accent-secondary-glow: rgba(0, 212, 170, 0.2); + + --text-primary: #e8e8f0; + --text-secondary: #9898a8; + --text-muted: #6b6b7b; + --text-accent: #b4b0ff; + + --error: #ff4757; + --error-bg: rgba(255, 71, 87, 0.1); + --warning: #ffa726; + --success: #00d4aa; + --success-bg: rgba(0, 212, 170, 0.1); + --info: #6c63ff; + + --border-subtle: rgba(255, 255, 255, 0.06); + --border-medium: rgba(255, 255, 255, 0.1); + --border-accent: rgba(108, 99, 255, 0.3); + + /* ── Typography ────────────────────────────────────────────────── */ + --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + --font-size-xs: 0.75rem; + --font-size-sm: 0.875rem; + --font-size-base: 1rem; + --font-size-lg: 1.125rem; + --font-size-xl: 1.25rem; + --font-size-2xl: 1.5rem; + --font-size-3xl: 2rem; + --font-size-4xl: 2.5rem; + --font-size-5xl: 3.5rem; + + /* ── Spacing ───────────────────────────────────────────────────── */ + --space-1: 0.25rem; + --space-2: 0.5rem; + --space-3: 0.75rem; + --space-4: 1rem; + --space-5: 1.25rem; + --space-6: 1.5rem; + --space-8: 2rem; + --space-10: 2.5rem; + --space-12: 3rem; + --space-16: 4rem; + --space-20: 5rem; + + /* ── Border Radius ─────────────────────────────────────────────── */ + --radius-sm: 6px; + --radius-md: 10px; + --radius-lg: 16px; + --radius-xl: 20px; + --radius-full: 9999px; + + /* ── Shadows ───────────────────────────────────────────────────── */ + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 14px rgba(0, 0, 0, 0.35); + --shadow-lg: 0 10px 40px rgba(0, 0, 0, 0.4); + --shadow-glow: 0 0 30px var(--accent-primary-glow); + + /* ── Transitions ───────────────────────────────────────────────── */ + --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1); + --transition-slow: 400ms cubic-bezier(0.4, 0, 0.2, 1); + + /* ── Glassmorphism ─────────────────────────────────────────────── */ + --glass-bg: rgba(26, 26, 46, 0.6); + --glass-border: rgba(255, 255, 255, 0.08); + --glass-blur: blur(20px); +} + +/* ── Reset & Base ──────────────────────────────────────────────────── */ + +*, *::before, *::after { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +html { + font-size: 16px; + scroll-behavior: smooth; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +body { + font-family: var(--font-family); + background-color: var(--bg-primary); + color: var(--text-primary); + line-height: 1.6; + min-height: 100vh; + overflow-x: hidden; +} + +a { + color: var(--accent-primary); + text-decoration: none; + transition: color var(--transition-fast); +} +a:hover { + color: var(--accent-primary-hover); +} + +h1, h2, h3, h4, h5, h6 { + line-height: 1.2; + font-weight: 700; +} + +img { max-width: 100%; } + +/* ── Utility Classes ───────────────────────────────────────────────── */ + +.glass-card { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: var(--radius-lg); + transition: border-color var(--transition-base), box-shadow var(--transition-base); +} +.glass-card:hover { + border-color: var(--border-accent); + box-shadow: var(--shadow-glow); +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 0 var(--space-6); +} + +/* ── Buttons ───────────────────────────────────────────────────────── */ + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: var(--space-2); + font-family: var(--font-family); + font-size: var(--font-size-sm); + font-weight: 600; + padding: var(--space-3) var(--space-6); + border-radius: var(--radius-md); + border: none; + cursor: pointer; + transition: all var(--transition-base); + text-decoration: none; + white-space: nowrap; +} +.btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.btn-primary { + background: linear-gradient(135deg, var(--accent-primary), #8b7dff); + color: white; + box-shadow: 0 4px 15px var(--accent-primary-glow); +} +.btn-primary:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: 0 6px 25px var(--accent-primary-glow); +} + +.btn-secondary { + background: var(--bg-surface); + color: var(--text-primary); + border: 1px solid var(--border-medium); +} +.btn-secondary:hover:not(:disabled) { + background: var(--bg-surface-hover); + border-color: var(--border-accent); +} + +.btn-ghost { + background: transparent; + color: var(--text-secondary); + border: 1px solid transparent; +} +.btn-ghost:hover:not(:disabled) { + color: var(--text-primary); + background: rgba(255, 255, 255, 0.04); +} + +.btn-danger { + background: rgba(255, 71, 87, 0.15); + color: var(--error); + border: 1px solid rgba(255, 71, 87, 0.3); +} +.btn-danger:hover:not(:disabled) { + background: rgba(255, 71, 87, 0.25); +} + +.btn-success { + background: linear-gradient(135deg, var(--accent-secondary), #00e6b8); + color: #0a0a0f; + font-weight: 700; +} +.btn-success:hover:not(:disabled) { + transform: translateY(-2px); + box-shadow: 0 6px 25px var(--accent-secondary-glow); +} + +.btn-sm { padding: var(--space-2) var(--space-4); font-size: var(--font-size-xs); } +.btn-lg { padding: var(--space-4) var(--space-8); font-size: var(--font-size-base); } +.btn-icon { + width: 36px; + height: 36px; + padding: 0; + border-radius: var(--radius-sm); +} + +/* ── Form Inputs ───────────────────────────────────────────────────── */ + +.input-group { + display: flex; + flex-direction: column; + gap: var(--space-2); +} + +.input-group label { + font-size: var(--font-size-sm); + font-weight: 500; + color: var(--text-secondary); +} + +.input-field { + font-family: var(--font-family); + font-size: var(--font-size-base); + padding: var(--space-3) var(--space-4); + background: var(--bg-secondary); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-md); + color: var(--text-primary); + transition: border-color var(--transition-fast), box-shadow var(--transition-fast); + outline: none; + width: 100%; +} +.input-field::placeholder { + color: var(--text-muted); +} +.input-field:focus { + border-color: var(--accent-primary); + box-shadow: 0 0 0 3px var(--accent-primary-glow); +} +.input-field.error { + border-color: var(--error); + box-shadow: 0 0 0 3px var(--error-bg); +} + +.input-error { + font-size: var(--font-size-xs); + color: var(--error); +} + +select.input-field { + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239898a8' d='M6 8L1 3h10z'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right var(--space-4) center; + padding-right: var(--space-10); +} + +/* ── Toast Notifications ───────────────────────────────────────────── */ + +.toast-container { + position: fixed; + top: var(--space-6); + right: var(--space-6); + z-index: 9999; + display: flex; + flex-direction: column; + gap: var(--space-3); +} + +.toast { + padding: var(--space-4) var(--space-6); + border-radius: var(--radius-md); + font-size: var(--font-size-sm); + font-weight: 500; + backdrop-filter: var(--glass-blur); + animation: slideIn 0.3s ease-out; + max-width: 400px; +} +.toast-error { + background: var(--error-bg); + border: 1px solid rgba(255, 71, 87, 0.3); + color: var(--error); +} +.toast-success { + background: var(--success-bg); + border: 1px solid rgba(0, 212, 170, 0.3); + color: var(--success); +} + +/* ── Animations ────────────────────────────────────────────────────── */ + +@keyframes slideIn { + from { opacity: 0; transform: translateX(20px); } + to { opacity: 1; transform: translateX(0); } +} + +@keyframes fadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +@keyframes fadeInUp { + from { opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); } +} + +@keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.5; } +} + +@keyframes gradientShift { + 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } +} + +@keyframes float { + 0%, 100% { transform: translateY(0px); } + 50% { transform: translateY(-10px); } +} + +@keyframes spin { + from { transform: rotate(0deg); } + to { transform: rotate(360deg); } +} + +.animate-fade-in { animation: fadeIn 0.5s ease-out; } +.animate-fade-in-up { animation: fadeInUp 0.6s ease-out; } +.animate-pulse { animation: pulse 2s infinite; } + +/* ── Scrollbar ─────────────────────────────────────────────────────── */ + +::-webkit-scrollbar { + width: 8px; +} +::-webkit-scrollbar-track { + background: var(--bg-primary); +} +::-webkit-scrollbar-thumb { + background: var(--bg-surface-hover); + border-radius: 4px; +} +::-webkit-scrollbar-thumb:hover { + background: var(--text-muted); +} + +/* ── Markdown Content Styling ──────────────────────────────────────── */ + +.markdown-content { + font-size: var(--font-size-base); + line-height: 1.8; + color: var(--text-primary); +} +.markdown-content h1 { font-size: var(--font-size-3xl); margin: var(--space-8) 0 var(--space-4); } +.markdown-content h2 { font-size: var(--font-size-2xl); margin: var(--space-6) 0 var(--space-3); color: var(--accent-primary); } +.markdown-content h3 { font-size: var(--font-size-xl); margin: var(--space-5) 0 var(--space-2); } +.markdown-content p { margin-bottom: var(--space-4); } +.markdown-content ul, .markdown-content ol { padding-left: var(--space-6); margin-bottom: var(--space-4); } +.markdown-content li { margin-bottom: var(--space-2); } +.markdown-content code { + font-family: 'JetBrains Mono', 'Fira Code', monospace; + background: var(--bg-secondary); + padding: 2px 6px; + border-radius: 4px; + font-size: 0.9em; +} +.markdown-content pre { + background: var(--bg-secondary); + padding: var(--space-4); + border-radius: var(--radius-md); + overflow-x: auto; + margin-bottom: var(--space-4); +} +.markdown-content pre code { background: none; padding: 0; } +.markdown-content strong { color: var(--text-primary); font-weight: 600; } +.markdown-content hr { border: none; border-top: 1px solid var(--border-subtle); margin: var(--space-8) 0; } + +/* ── Modal Overlay ─────────────────────────────────────────────────── */ + +.modal-overlay { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.7); + backdrop-filter: blur(4px); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + animation: fadeIn 0.2s ease-out; +} + +.modal-content { + background: var(--bg-surface); + border: 1px solid var(--glass-border); + border-radius: var(--radius-xl); + max-width: 800px; + max-height: 85vh; + width: 90%; + overflow-y: auto; + padding: var(--space-8); + animation: fadeInUp 0.3s ease-out; +} + +/* ── Spinner ───────────────────────────────────────────────────────── */ + +.spinner { + width: 20px; + height: 20px; + border: 2px solid var(--border-medium); + border-top-color: var(--accent-primary); + border-radius: 50%; + animation: spin 0.6s linear infinite; +} + +/* ── Badge ─────────────────────────────────────────────────────────── */ + +.badge { + display: inline-flex; + align-items: center; + font-size: var(--font-size-xs); + font-weight: 600; + padding: 2px 8px; + border-radius: var(--radius-full); + text-transform: uppercase; + letter-spacing: 0.5px; +} +.badge-pending { background: rgba(255, 167, 38, 0.15); color: var(--warning); } +.badge-processing { background: var(--accent-primary-glow); color: var(--accent-primary); animation: pulse 2s infinite; } +.badge-completed { background: var(--success-bg); color: var(--success); } +.badge-failed { background: var(--error-bg); color: var(--error); } diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx new file mode 100644 index 0000000..56a6aa2 --- /dev/null +++ b/frontend/src/main.jsx @@ -0,0 +1,16 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import { BrowserRouter } from 'react-router-dom' +import { AuthProvider } from './context/AuthContext' +import App from './App' +import './index.css' + +createRoot(document.getElementById('root')).render( + + + + + + + +) diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx new file mode 100644 index 0000000..dbb102c --- /dev/null +++ b/frontend/src/pages/HomePage.jsx @@ -0,0 +1,102 @@ +import { useState, useEffect, useCallback } from 'react'; +import { useAuth } from '../context/AuthContext'; +import api from '../api/client'; +import Navbar from '../components/Navbar'; +import ResumeUpload from '../components/ResumeUpload'; +import GithubProfileAdd from '../components/GithubProfileAdd'; +import TailoredResumeList from '../components/TailoredResumeList'; +import TailorResumeForm from '../components/TailorResumeForm'; +import ProgressTracker from '../components/ProgressTracker'; +import ResumePreviewModal from '../components/ResumePreviewModal'; +import ResumeReadyModal from '../components/ResumeReadyModal'; +import { FiActivity, FiSettings, FiSend } from 'react-icons/fi'; + +export default function HomePage() { + const { user } = useAuth(); + const [jobs, setJobs] = useState([]); + const [resumes, setResumes] = useState([]); + const [githubProfiles, setGithubProfiles] = useState([]); + const [activeJobId, setActiveJobId] = useState(null); + const [completedJob, setCompletedJob] = useState(null); + const [previewJobId, setPreviewJobId] = useState(null); + const [previewResumeId, setPreviewResumeId] = useState(null); + + const fetchData = useCallback(async () => { + try { + const [j, r, g] = await Promise.all([ + api.get('/jobs'), api.get('/resumes'), api.get('/github'), + ]); + setJobs(j.data); setResumes(r.data); setGithubProfiles(g.data); + } catch (err) { console.error('Fetch error:', err); } + }, []); + + useEffect(() => { fetchData(); }, [fetchData]); + + const handleJobCreated = (job) => { + setActiveJobId(job.id); + setJobs((prev) => [job, ...prev]); + }; + + const handleComplete = useCallback(async () => { + try { + const res = await api.get(`/jobs/${activeJobId}`); + setCompletedJob(res.data); + const jobsRes = await api.get('/jobs'); + setJobs(jobsRes.data); + } catch { setCompletedJob({ id: activeJobId }); } + setActiveJobId(null); + }, [activeJobId]); + + return ( +
+ +
+
+

+ Welcome back, {user?.first_name}! +

+

Manage your resumes and tailor them for your next opportunity.

+
+ +
+

+ Previously Tailored Resumes +

+ setPreviewJobId(id)} /> +
+ +
+

+ Manage Resources +

+
+ + +
+
+ +
+

+ Tailor Resume +

+
+ setPreviewResumeId(id)} /> +
+
+ + {activeJobId && ( +
+ +
+ )} +
+ + {previewJobId && setPreviewJobId(null)} />} + {previewResumeId && setPreviewResumeId(null)} />} + {completedJob && { setCompletedJob(null); fetchData(); }} + onPreviewResume={(id) => { setCompletedJob(null); setPreviewJobId(id); }} />} +
+ ); +} diff --git a/frontend/src/pages/InterviewMaterialsPage.jsx b/frontend/src/pages/InterviewMaterialsPage.jsx new file mode 100644 index 0000000..e585012 --- /dev/null +++ b/frontend/src/pages/InterviewMaterialsPage.jsx @@ -0,0 +1,85 @@ +import { useState, useEffect } from 'react'; +import { useParams, Link } from 'react-router-dom'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; +import api from '../api/client'; +import Navbar from '../components/Navbar'; +import { FiArrowLeft, FiDownload } from 'react-icons/fi'; + +export default function InterviewMaterialsPage() { + const { jobId } = useParams(); + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(''); + + useEffect(() => { + (async () => { + try { + const res = await api.get(`/jobs/${jobId}/interview/content`); + setData(res.data); + } catch (err) { + setError(err.response?.data?.detail || 'Failed to load interview materials.'); + } finally { + setLoading(false); + } + })(); + }, [jobId]); + + const handleDownload = async () => { + try { + const res = await api.get(`/jobs/${jobId}/interview/download`, { responseType: 'blob' }); + const blob = new Blob([res.data], { type: 'text/markdown' }); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = `interview_materials_${data?.company_name || 'prep'}.md`; + link.click(); + URL.revokeObjectURL(link.href); + } catch (err) { + console.error('Download failed:', err); + } + }; + + return ( +
+ +
+
+ + Back to Dashboard + + {data && ( + + )} +
+ + {loading ? ( +
+
+
+ ) : error ? ( +
+

{error}

+
+ ) : ( + <> +
+

+ Interview Preparation +

+

+ {data.job_name} at {data.company_name} · {data.created_at ? new Date(data.created_at).toLocaleDateString() : ''} +

+
+
+
+ {data.content} +
+
+ + )} +
+
+ ); +} diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx new file mode 100644 index 0000000..9956289 --- /dev/null +++ b/frontend/src/pages/LandingPage.jsx @@ -0,0 +1,181 @@ +import { Link } from 'react-router-dom'; +import LoginSection from '../components/LoginSection'; +import { FiUpload, FiLink, FiCpu, FiTarget, FiGithub, FiSearch, FiZap, FiFileText } from 'react-icons/fi'; + +const PROBLEMS = [ + { icon: , text: 'Spending hours customizing resumes for each application?' }, + { icon: , text: 'Struggling to pass ATS keyword screening?' }, + { icon: , text: 'Not sure which projects to highlight for each role?' }, + { icon: , text: 'LinkedIn job postings are hard to decode quickly' }, +]; + +const STEPS = [ + { num: '01', icon: , title: 'Upload & Link', desc: 'Upload your resume and link your GitHub profile' }, + { num: '02', icon: , title: 'Paste Job URL', desc: 'Paste a LinkedIn job posting URL' }, + { num: '03', icon: , title: 'AI Tailoring', desc: 'AI agents analyze, match, and tailor your resume' }, +]; + +const FEATURES = [ + { icon: , title: 'ATS Optimization', desc: 'Embed the right keywords to pass automated screening systems' }, + { icon: , title: 'GitHub Analysis', desc: 'Automatically analyze your repos to highlight relevant projects' }, + { icon: , title: 'Smart Matching', desc: 'AI matches your experience with job requirements precisely' }, + { icon: , title: 'Instant Tailoring', desc: 'Get a perfectly tailored resume in minutes, not hours' }, +]; + +export default function LandingPage() { + return ( +
+ {/* ── Hero ──────────────────────────────────────────────────── */} +
+ {/* Gradient orbs */} +
+
+ +
+ + ✨ AI-Powered Resume Agent + +

+ Your Dream Job Deserves
a Perfect Resume +

+

+ AI agents analyze your GitHub projects, understand job requirements, + and tailor your resume for maximum impact. +

+ +
+
+ + {/* ── Problems ──────────────────────────────────────────────── */} +
+
+

+ Sound familiar? +

+
+ {PROBLEMS.map((p, i) => ( +
+
{p.icon}
+

{p.text}

+
+ ))} +
+
+
+ + {/* ── How It Works ──────────────────────────────────────────── */} +
+
+

+ How It Works +

+

+ Three simple steps to a perfectly tailored resume +

+
+ {STEPS.map((s, i) => ( +
+ + {s.icon} + + + STEP {s.num} + +

{s.title}

+

{s.desc}

+
+ ))} +
+
+
+ + {/* ── Features ──────────────────────────────────────────────── */} +
+
+

+ Powerful Features +

+
+ {FEATURES.map((f, i) => ( +
+
+ {f.icon} +
+

{f.title}

+

{f.desc}

+
+ ))} +
+
+
+ + {/* ── Auth Section ──────────────────────────────────────────── */} +
+
+
+ {/* Login side */} +
+

Welcome Back

+

+ Sign in to your account +

+ +
+ + {/* Register side */} +
+

New Here?

+

+ Create an account and start tailoring your resume with AI +

+ + Create Account + +
+
+
+
+ + {/* ── Footer ────────────────────────────────────────────────── */} +
+ Built with CrewAI, FastAPI & React · {new Date().getFullYear()} +
+
+ ); +} diff --git a/frontend/src/pages/RegisterPage.jsx b/frontend/src/pages/RegisterPage.jsx new file mode 100644 index 0000000..0d66cac --- /dev/null +++ b/frontend/src/pages/RegisterPage.jsx @@ -0,0 +1,99 @@ +import { useState } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import api from '../api/client'; +import { useAuth } from '../context/AuthContext'; +import { FiUser, FiMail, FiLock, FiArrowLeft } from 'react-icons/fi'; + +export default function RegisterPage() { + const { login } = useAuth(); + const navigate = useNavigate(); + const [form, setForm] = useState({ first_name: '', last_name: '', email: '', password: '', confirmPassword: '' }); + const [errors, setErrors] = useState({}); + const [serverError, setServerError] = useState(''); + const [loading, setLoading] = useState(false); + + const validate = () => { + const errs = {}; + if (!form.first_name.trim()) errs.first_name = 'First name is required'; + if (!form.last_name.trim()) errs.last_name = 'Last name is required'; + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email)) errs.email = 'Invalid email address'; + if (form.password.length < 8) errs.password = 'Password must be at least 8 characters'; + if (form.password !== form.confirmPassword) errs.confirmPassword = 'Passwords do not match'; + setErrors(errs); + return Object.keys(errs).length === 0; + }; + + const handleSubmit = async (e) => { + e.preventDefault(); + if (!validate()) return; + setServerError(''); + setLoading(true); + try { + const res = await api.post('/auth/register', { + first_name: form.first_name, last_name: form.last_name, + email: form.email, password: form.password, + }); + login(res.data.access_token); + navigate('/dashboard'); + } catch (err) { + setServerError(err.response?.data?.detail || 'Registration failed.'); + } finally { + setLoading(false); + } + }; + + const handleChange = (field) => (e) => { + setForm({ ...form, [field]: e.target.value }); + if (errors[field]) setErrors({ ...errors, [field]: '' }); + }; + + const fields = [ + { key: 'first_name', label: 'First Name', type: 'text', icon: , placeholder: 'John' }, + { key: 'last_name', label: 'Last Name', type: 'text', icon: , placeholder: 'Doe' }, + { key: 'email', label: 'Email', type: 'email', icon: , placeholder: 'you@example.com' }, + { key: 'password', label: 'Password', type: 'password', icon: , placeholder: 'At least 8 characters' }, + { key: 'confirmPassword', label: 'Confirm Password', type: 'password', icon: , placeholder: 'Re-enter your password' }, + ]; + + return ( +
+
+ + Back to home + +

Create Account

+

+ Join and start tailoring your resumes with AI +

+ +
+ {fields.map((f) => ( +
+ +
+ {f.icon} + +
+ {errors[f.key] && {errors[f.key]}} + {f.key === 'confirmPassword' && form.password && form.confirmPassword && form.password === form.confirmPassword && ( + + Passwords Matched + + )} +
+ ))} + {serverError &&

{serverError}

} + +
+ +

+ Already have an account? Sign in +

+
+
+ ); +} diff --git a/frontend/vite.config.js b/frontend/vite.config.js new file mode 100644 index 0000000..1406734 --- /dev/null +++ b/frontend/vite.config.js @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +export default defineConfig({ + plugins: [react()], + server: { + port: 5173, + proxy: { + '/api': { + target: 'http://localhost:8000', + changeOrigin: true, + }, + }, + }, +}) diff --git a/github_repo_extractor.py b/github_repo_extractor.py index 399b966..07b3629 100644 --- a/github_repo_extractor.py +++ b/github_repo_extractor.py @@ -149,10 +149,14 @@ def extract_github_repo_contents(repo_url, save_to_disk=True): TABLE_NAME = os.environ.get("GCP_TABLE_NAME", "github_repo_data") # Function to process a GitHub repo and store embeddings in BigQuery -def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_token=None): +def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_token=None, dataset_name=None): """ Loads files from a GitHub repo, creates embeddings, and stores them in BigQuery. + + Args: + dataset_name: Optional override for the BQ dataset name. Defaults to GCP_DATASET_NAME env var. """ + effective_dataset = dataset_name or DATASET_NAME # Extract owner and repo first, and validate the URL try: owner, repo = parse_github_url(repo_url) @@ -166,7 +170,7 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ # Query to check for existing data query = f""" SELECT COUNT(*) as count - FROM `{PROJECT_ID}.{DATASET_NAME}.{TABLE_NAME}` + FROM `{PROJECT_ID}.{effective_dataset}.{TABLE_NAME}` WHERE repo_username = '{owner}' AND repo_name = '{repo}' """ @@ -221,7 +225,7 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ bq_store = BigQueryVectorStore( project_id=PROJECT_ID, location=LOCATION, - dataset_name=DATASET_NAME, + dataset_name=effective_dataset, table_name=TABLE_NAME, embedding=embedding_model, ) @@ -243,11 +247,15 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ logger.info("github_repo_extractor.py: Added %d documents to BigQuery vector store.", len(doc_ids)) -def query_github_vector_store(query, top_k=5): +def query_github_vector_store(query, top_k=5, dataset_name=None): """ Query the BigQuery vector store for relevant document chunks using a natural language query. Returns a list of (content, metadata) tuples. + + Args: + dataset_name: Optional override for the BQ dataset name. Defaults to GCP_DATASET_NAME env var. """ + effective_dataset = dataset_name or DATASET_NAME # 1. Create Vertex AI Embeddings (same as used for ingestion) embedding_model = GoogleGenerativeAIEmbeddings( model="text-embedding-005", project=PROJECT_ID, vertexai=True @@ -257,7 +265,7 @@ def query_github_vector_store(query, top_k=5): bq_store = BigQueryVectorStore( project_id=PROJECT_ID, location=LOCATION, - dataset_name=DATASET_NAME, + dataset_name=effective_dataset, table_name=TABLE_NAME, embedding=embedding_model, ) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..8591261 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "Job_Application_Agent", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/webapp_plan.md b/webapp_plan.md new file mode 100644 index 0000000..50b0a55 --- /dev/null +++ b/webapp_plan.md @@ -0,0 +1,491 @@ +# Job Application Agent — Full-Stack Web Application Plan + +Build a production-grade web interface for the existing CrewAI-based Job Application Agent using **FastAPI** (backend), **React + Vite** (frontend), **Google Cloud SQL for MySQL** (user data), and **Google Cloud Storage** (resume files). + +--- + +## Resolved Decisions + +| Decision | Resolution | +|----------|------------| +| **GCP Region** | `asia-south2` for all resources (Cloud SQL, GCS, BigQuery) | +| **Cloud SQL Tier** | `db-f1-micro` (cheapest, ~$7/mo) | +| **Authentication** | JWT + OAuth (Google Sign-In) | +| **BQ Dataset Naming** | Sanitized: `arijitde2050_gmail_com_github_bq_db` | +| **Interview Materials** | Stored in GCS + tracked in `jobs` table | +| **GCS Bucket Name** | `job-applier--resumes` | +| **Max Resume Upload** | 10 MB | +| **Concurrency** | Concurrent crew executions (asyncio + thread pool) | +| **Deployment** | Dockerized → GCP Cloud Run | + +--- + +## Current Architecture Understanding + +### Existing Agent Pipeline + +```mermaid +graph LR + A["Job_Applier.py
(Entrypoint)"] -->|"extract job details
via Bright Data MCP"| B["webpage_extractor.py
extract_linkedin_job_details()"] + A -->|"kickoff crew"| C["CrewAI Crew"] + C --> D["Agent 1: GitHub Summarizer
Tools: github_repos_extractor,
repo_content_searcher"] + C --> E["Agent 2: Profiler
Tools: FileRead, MDXSearch"] + C --> F["Agent 3: Resume Strategist
Tools: Scrape, Search,
FileRead, MDXSearch"] + C --> G["Agent 4: Interview Preparer
Tools: Scrape, Search,
FileRead, MDXSearch"] + D -->|"index repos in
BigQuery vector store"| H["github_repo_extractor.py
process_github_repo_to_bq()"] + D --> E --> F --> G + F -->|"output"| I["Tailored Resume .md"] + G -->|"output"| J["interview_materials.md"] +``` + +**Key observations:** +- `Job_Applier.py` pre-fetches job details via `extract_linkedin_job_details()` then passes JSON to all crew tasks +- `github_repo_extractor.py` uses `GithubFileLoader` → Vertex AI embeddings → BigQuery vector store +- BigQuery dataset/table are configured via env vars (`GCP_DATASET_NAME`, `GCP_TABLE_NAME`) +- The crew outputs a tailored resume as `{applicant_name}_{company_name}_{job_name}_resume.md` locally +- LLM: Gemini 2.5 Flash via `gemini/gemini-2.5-flash` + +--- + +## Proposed Changes + +### New Directory Structure + +``` +Job_Application_Agent/ +├── backend/ # FastAPI application +│ ├── __init__.py +│ ├── main.py # FastAPI app entry point, CORS, lifespan +│ ├── config.py # Settings from env vars (Pydantic BaseSettings) +│ ├── database.py # SQLAlchemy engine, session, Base +│ ├── models.py # SQLAlchemy ORM models (users, github, resumes, jobs) +│ ├── schemas.py # Pydantic request/response schemas +│ ├── auth.py # JWT token creation, password hashing, auth deps +│ ├── gcs.py # GCS upload/download helpers +│ ├── crew_runner.py # Crew execution wrapper with progress callbacks +│ ├── requirements.txt # Backend-specific dependencies +│ └── routers/ +│ ├── __init__.py +│ ├── auth_router.py # POST /register, POST /login +│ ├── github_router.py # POST /github, GET /github, DELETE /github +│ ├── resume_router.py # POST /resume/upload, GET /resumes, DELETE /resume +│ └── job_router.py # POST /job/tailor, GET /jobs, GET /job/{id}/status +├── frontend/ # React + Vite application +│ ├── index.html +│ ├── package.json +│ ├── vite.config.js +│ ├── public/ +│ └── src/ +│ ├── main.jsx +│ ├── App.jsx +│ ├── App.css +│ ├── index.css # Global design tokens +│ ├── api/ +│ │ └── client.js # Axios instance with JWT interceptor +│ ├── context/ +│ │ └── AuthContext.jsx # Auth state management +│ ├── pages/ +│ │ ├── LandingPage.jsx # USP, hero, features, sign-up/login +│ │ ├── RegisterPage.jsx # User registration form +│ │ ├── HomePage.jsx # Dashboard after login +│ │ └── InterviewMaterialsPage.jsx # View interview materials (markdown) +│ └── components/ +│ ├── Navbar.jsx +│ ├── LoginSection.jsx +│ ├── ResumeUpload.jsx +│ ├── GithubProfileAdd.jsx +│ ├── TailoredResumeList.jsx +│ ├── TailorResumeForm.jsx +│ ├── ProgressTracker.jsx +│ ├── ResumePreviewModal.jsx +│ └── ResumeReadyModal.jsx +├── agents.py # MODIFIED — accept dynamic DB name +├── tasks.py # MODIFIED — dynamic output paths +├── github_repo_extractor.py # MODIFIED — accept DB name parameter +├── webpage_extractor.py # Unchanged +├── logger.py # Unchanged +├── Job_Applier.py # Kept for standalone CLI usage +└── requirements.txt # Existing (unchanged) +``` + +--- + +### Component 1: Google Cloud Infrastructure + +#### GCS Bucket Setup + +Create a single GCS bucket with the following folder structure: +``` +gs:/// +├── uploads/ +│ └── / # User-uploaded original resumes +│ └── .md +└── tailored/ + └── / # Agent-generated tailored resumes + └── ___resume.md +``` + +**Setup command:** +```bash +gsutil mb -l asia-south2 -c STANDARD gs://job-applier--resumes +gsutil uniformbucketlevelaccess set on gs://job-applier--resumes +``` + +#### Cloud SQL for MySQL Setup + +- Instance name: `job-applier-mysql` +- MySQL version: 8.0 +- Region: `asia-south2` +- Add the service account and app's IP to authorized networks + +--- + +### Component 2: Database Schema (Cloud SQL MySQL) + +#### [NEW] [models.py](file:///home/arijit/Documents/github/Job_Application_Agent/backend/models.py) + +```sql +-- users table +CREATE TABLE users ( + id INT AUTO_INCREMENT PRIMARY KEY, + first_name VARCHAR(100) NOT NULL, + last_name VARCHAR(100) NOT NULL, + email VARCHAR(255) NOT NULL UNIQUE, + password_hash VARCHAR(255) NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + INDEX idx_email (email) +); + +-- github_profiles table +CREATE TABLE github_profiles ( + id INT AUTO_INCREMENT PRIMARY KEY, + user_id INT NOT NULL, + github_username VARCHAR(100) NOT NULL, + github_url VARCHAR(500) NOT NULL, + bq_dataset_name VARCHAR(255) NOT NULL, -- e.g. "user_email_github_bq_db" + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + UNIQUE KEY uq_user_github (user_id, github_username) +); + +-- resumes table +CREATE TABLE resumes ( + id INT AUTO_INCREMENT PRIMARY KEY, + user_id INT NOT NULL, + original_filename VARCHAR(255) NOT NULL, + gcs_path VARCHAR(500) NOT NULL, -- gs://bucket/uploads//.md + uploaded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE +); + +-- jobs table +CREATE TABLE jobs ( + id INT AUTO_INCREMENT PRIMARY KEY, + user_id INT NOT NULL, + github_profile_id INT NOT NULL, + resume_id INT NOT NULL, + linkedin_job_url VARCHAR(500) NOT NULL, + job_name VARCHAR(255), + company_name VARCHAR(255), + location VARCHAR(255), + seniority_level VARCHAR(100), + employment_type VARCHAR(100), + job_function VARCHAR(255), + industry VARCHAR(255), + job_description TEXT, + requirements TEXT, + tailored_resume_gcs_path VARCHAR(500), -- gs://bucket/tailored//_resume.md + interview_materials_gcs_path VARCHAR(500), -- gs://bucket/tailored//_interview.md + status ENUM('pending','processing','completed','failed') DEFAULT 'pending', + error_message TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + completed_at TIMESTAMP NULL, + FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, + FOREIGN KEY (github_profile_id) REFERENCES github_profiles(id) ON DELETE RESTRICT, + FOREIGN KEY (resume_id) REFERENCES resumes(id) ON DELETE RESTRICT +); +``` + +**Key design decisions:** +- `github_profiles` and `resumes` use `ON DELETE CASCADE` — deleting a user removes their profiles/resumes +- `jobs` uses `ON DELETE RESTRICT` for `github_profile_id` and `resume_id` — can't delete a github profile or resume that has been used in a job application +- `jobs.status` tracks crew execution state for progress UI +- `bq_dataset_name` stored per github profile so the system knows which BQ dataset to query + +--- + +### Component 3: FastAPI Backend + +#### [NEW] [config.py](file:///home/arijit/Documents/github/Job_Application_Agent/backend/config.py) + +Pydantic `BaseSettings` loading from `.env`: +- `MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_USER`, `MYSQL_PASSWORD`, `MYSQL_DATABASE` +- `GCS_BUCKET_NAME` +- `JWT_SECRET_KEY`, `JWT_ALGORITHM=HS256`, `JWT_EXPIRY_MINUTES=1440` +- `GOOGLE_OAUTH_CLIENT_ID`, `GOOGLE_OAUTH_CLIENT_SECRET` +- All existing env vars (GCP project, Gemini key, Bright Data key, etc.) + +#### [NEW] [database.py](file:///home/arijit/Documents/github/Job_Application_Agent/backend/database.py) + +- SQLAlchemy async engine with `asyncmy` driver connecting to Cloud SQL +- Session factory, dependency injection via `get_db()` +- `Base.metadata.create_all()` for table creation on startup + +#### [NEW] [auth.py](file:///home/arijit/Documents/github/Job_Application_Agent/backend/auth.py) + +- `hash_password(plain)` → bcrypt hash +- `verify_password(plain, hashed)` → bool +- `create_access_token(user_id, email)` → JWT string +- `get_current_user(token)` → FastAPI dependency that extracts & validates JWT +- `google_oauth_login(id_token)` → Verify Google OAuth ID token, create/find user, return JWT +- Uses `google-auth` library to verify Google ID tokens server-side +- On first Google OAuth login, creates a user record (password_hash set to empty — OAuth-only users) + +#### [NEW] [gcs.py](file:///home/arijit/Documents/github/Job_Application_Agent/backend/gcs.py) + +- `upload_resume(user_id, file_bytes, filename)` → returns `gcs_path` (max 10MB enforced) +- `upload_tailored_resume(user_id, job_id, content, filename)` → returns `gcs_path` +- `upload_interview_materials(user_id, job_id, content, filename)` → returns `gcs_path` +- `download_file(gcs_path)` → returns file bytes +- `generate_signed_url(gcs_path, expiry_minutes=15)` → returns presigned URL for preview + +#### [NEW] [crew_runner.py](file:///home/arijit/Documents/github/Job_Application_Agent/backend/crew_runner.py) + +Wraps the existing crew execution with progress tracking: + +```python +async def run_crew_for_job(job_id, user, github_profile, resume_gcs_path, job_url): + """ + 1. Update job status to 'processing' + 2. Extract job details via extract_linkedin_job_details() + 3. Store extracted details in jobs table + 4. Download user's resume from GCS to temp file + 5. Build crew inputs (dynamic BQ dataset name from github_profile) + 6. Kick off crew with progress callbacks + 7. Upload tailored resume to GCS + 8. Update job record with tailored_resume_gcs_path, status='completed' + """ +``` + +**Concurrency**: Each crew execution runs in a `ThreadPoolExecutor` thread via `asyncio.run_in_executor()`, allowing multiple users to tailor resumes simultaneously. + +**Progress tracking via SSE (Server-Sent Events):** +- Each crew step updates a shared dict `progress_store[job_id]` +- Steps: `extracting_job_info` → `indexing_github_repos` → `searching_projects` → `building_profile` → `tailoring_resume` → `generating_interview_prep` → `uploading_results` → `completed` +- Frontend connects via `GET /api/jobs/{id}/progress` (SSE endpoint) + +#### API Endpoints Summary + +| Method | Endpoint | Description | +|--------|----------|-------------| +| `POST` | `/api/auth/register` | Create new user account | +| `POST` | `/api/auth/login` | Login, returns JWT token | +| `POST` | `/api/auth/google` | Google OAuth login/register | +| `GET` | `/api/auth/me` | Get current user profile | +| `POST` | `/api/github` | Add a GitHub username | +| `GET` | `/api/github` | List user's GitHub profiles | +| `DELETE` | `/api/github/{id}` | Remove a GitHub profile | +| `POST` | `/api/resumes/upload` | Upload a `.md` resume to GCS | +| `GET` | `/api/resumes` | List user's uploaded resumes | +| `GET` | `/api/resumes/{id}/preview` | Get signed URL for resume preview | +| `DELETE` | `/api/resumes/{id}` | Delete a resume (if not used in a job) | +| `POST` | `/api/jobs/tailor` | Start crew execution for a job | +| `GET` | `/api/jobs` | List user's tailored jobs | +| `GET` | `/api/jobs/{id}` | Get job details + tailored resume URL | +| `GET` | `/api/jobs/{id}/progress` | SSE stream for crew progress | +| `GET` | `/api/jobs/{id}/resume/download` | Download tailored resume .md file | +| `GET` | `/api/jobs/{id}/interview/download` | Download interview materials .md file | +| `GET` | `/api/jobs/{id}/interview/content` | Get interview materials markdown content for in-browser viewing | + +--- + +### Component 4: Existing Code Modifications + +#### [MODIFY] [github_repo_extractor.py](file:///home/arijit/Documents/github/Job_Application_Agent/github_repo_extractor.py) + +- `process_github_repo_to_bq()`: Add optional `dataset_name` parameter (defaults to env var for backward compatibility). When called from the web app, pass the user-specific dataset name. +- `query_github_vector_store()`: Same — add optional `dataset_name` parameter. + +#### [MODIFY] [agents.py](file:///home/arijit/Documents/github/Job_Application_Agent/agents.py) + +- Refactor `extract_github_repos_tool` and `repo_content_searcher` to accept `dataset_name` as a parameter (passed via crew input variables). +- The tools will use the user-specific BQ dataset when called from the web app. + +#### [MODIFY] [tasks.py](file:///home/arijit/Documents/github/Job_Application_Agent/tasks.py) + +- `resume_strategy_task`: Change `output_file` to a temp path that the web app can read and upload to GCS. +- Add `{bq_dataset_name}` as a crew input variable passed to tasks that use BQ. + +--- + +### Component 5: React Frontend + +#### Design System + +- **Font**: Inter (Google Fonts) +- **Color Palette**: Dark mode primary with vibrant accents + - Background: `#0a0a0f` (deep navy-black) + - Surface: `#13131a` / `#1a1a2e` + - Primary accent: `#6c63ff` (vibrant indigo) + - Secondary accent: `#00d4aa` (teal-green for success) + - Text: `#e8e8f0` / `#9898a8` (muted) + - Error: `#ff4757` +- **Effects**: Glassmorphism cards, subtle gradient borders, smooth transitions + +#### Page: Landing Page (`LandingPage.jsx`) + +**Sections:** +1. **Hero Section**: Full-width gradient background with animated particles or subtle mesh gradient. Large headline: *"Your Dream Job Deserves a Perfect Resume"*, sub-headline addressing the pain points. CTA buttons for Sign Up / Learn More. + +2. **Problem Section** (with icons/illustrations): + - "Spending hours customizing resumes for each application?" + - "Struggling to pass ATS keyword screening?" + - "Not sure which projects to highlight for each role?" + - "LinkedIn job postings are hard to decode quickly" + +3. **Solution/How It Works** (3-step visual flow): + - Step 1: Upload your resume & link your GitHub + - Step 2: Paste a LinkedIn job URL + - Step 3: AI agents analyze, match, and tailor your resume + +4. **Features Grid** (glassmorphism cards): + - AI-Powered ATS Optimization + - GitHub Project Analysis + - Smart Keyword Matching + - Instant Resume Tailoring + +5. **Login / Sign Up Section**: A split card at the bottom — + - **Left side**: Login form (email + password + Login button) + "Sign in with Google" OAuth button + - **Right side**: Sign Up prompt with a "Create Account" button that navigates to `/register` + +#### Page: Register Page (`RegisterPage.jsx`) + +- Clean form: First Name, Last Name, Email, Password, Confirm Password +- "Sign up with Google" OAuth button as alternative +- Client-side validation (email format, password min length 8, password match) +- On success → redirect to login or auto-login + +#### Page: Home Page (`HomePage.jsx`) — Protected Route + +**Layout: Single-page dashboard with stacked sections** + +**i) Welcome Header** +- "Welcome back, {first_name}!" with user avatar placeholder +- Logout button in navbar + +**ii) Previously Tailored Resumes Section** +- Table/card list showing: Job Title, Company, Date, Status (completed/processing/failed) +- Each completed row has: + - "View Resume" button → opens markdown preview modal + - "View Interview Materials" button → navigates to `/interview/{job_id}` page + - "⬇ Resume" download button → triggers `.md` file download + - "⬇ Interview" download button → triggers `.md` file download +- Empty state: "No tailored resumes yet. Start by tailoring your first resume below!" + +**iii) Manage Resources Section** (two side-by-side cards) + +**Resume Upload Card:** +- Drag-and-drop zone or file picker (accepts `.md` only) +- Info banner: "Only Markdown (.md) files accepted" with conversion links: + - [PDF → Markdown](https://pdf2md.morethan.io/) + - [Word → Markdown](https://word2md.com/) +- List of uploaded resumes with delete option +- Upload triggers `POST /api/resumes/upload` + +**GitHub Profile Card:** +- Text input for GitHub username + "Add" button +- List of added GitHub usernames with delete option + +**iv) Tailor Resume Section** +- **Job URL input**: LinkedIn job posting URL text field +- **GitHub Profile dropdown**: Select from user's added profiles +- **Resume dropdown**: Select from user's uploaded resumes +- **"Preview Resume" button**: Opens a modal showing the selected resume content (fetched via signed URL, rendered as markdown) +- **"Tailor My Resume" button**: Triggers `POST /api/jobs/tailor` + +**v) Progress Tracker** (appears after clicking "Tailor My Resume") +- Vertical stepper / progress bar with labeled steps: + 1. ⏳ Extracting job information + 2. ⏳ Searching GitHub projects + 3. ⏳ Ingesting GitHub project info + 4. ⏳ Creating user profile + 5. ⏳ Understanding job requirements + 6. ⏳ Tailoring your resume +- Each step shows: pending (grey) → in-progress (pulsing accent) → completed (green check) +- Connects to SSE endpoint `GET /api/jobs/{id}/progress` + +**vi) Resume Ready Modal** +- Triggered when SSE reports `completed` +- "🎉 Your tailored resume is ready!" +- Buttons: + - "View Resume" → opens markdown preview modal + - "View Interview Materials" → navigates to `/interview/{job_id}` + - "⬇ Download Resume" → downloads tailored resume `.md` file + - "⬇ Download Interview Materials" → downloads interview materials `.md` file + - "Close" +- On close, the new entry appears in the "Previously Tailored Resumes" section + +#### Page: Interview Materials Page (`InterviewMaterialsPage.jsx`) — Route: `/interview/:jobId` + +- Fetches interview materials markdown content via `GET /api/jobs/{id}/interview/content` +- Renders the markdown beautifully in-browser using `react-markdown` with syntax highlighting +- Header shows: Job Title, Company Name, Date created +- "⬇ Download" button in the top-right corner +- "← Back to Dashboard" navigation link +- Styled consistently with the dark-mode glassmorphism design system + +--- + +### Component 6: Error Handling + +| Layer | Error | Handling | +|-------|-------|----------| +| **Backend** | Invalid/expired JWT | Return 401, frontend redirects to login | +| **Backend** | Duplicate email on register | Return 409 Conflict | +| **Backend** | Resume not `.md` | Return 400 with message | +| **Backend** | Resume too large (>5MB) | Return 413 | +| **Backend** | GCS upload failure | Return 500, log error | +| **Backend** | Crew execution failure | Set job status to `failed`, store `error_message` | +| **Backend** | LinkedIn scraping failure | Return error in job details, set status `failed` | +| **Backend** | BQ dataset creation failure | Return 500, log error | +| **Frontend** | Network errors | Toast notifications with retry option | +| **Frontend** | Form validation | Inline error messages under fields | +| **Frontend** | SSE connection lost | Auto-reconnect with exponential backoff | +| **Frontend** | Upload wrong file type | Block upload, show warning banner | + +--- + +## Execution Order + +```mermaid +graph TD + A["Phase 1: Infrastructure
Cloud SQL + GCS Bucket"] --> B["Phase 2: Backend Foundation
config, database, models, auth"] + B --> C["Phase 3: Backend APIs
auth, github, resume, job routers"] + C --> D["Phase 4: Agent Modifications
Dynamic BQ dataset, crew_runner"] + D --> E["Phase 5: Frontend Foundation
Vite setup, design system, routing"] + E --> F["Phase 6: Frontend Pages
Landing, Register, Home"] + F --> G["Phase 7: Integration
SSE progress, file preview, modals"] + G --> H["Phase 8: Testing & Polish
Error handling, animations, UX"] +``` + +--- + +## Verification Plan + +### Automated Tests +- **Backend unit tests**: pytest for auth (register, login, JWT), CRUD operations on all tables, GCS mock upload/download +- **API integration tests**: httpx async client against FastAPI test server +- **Frontend**: Manual browser testing via browser tool — verify all pages render, forms submit, progress tracker works + +### Manual Verification +1. Register a new user → verify record in Cloud SQL +2. Upload a `.md` resume → verify file in GCS bucket + DB record +3. Add a GitHub username → verify DB record +4. Submit a job URL with selected github + resume → verify: + - Job details extracted and stored in `jobs` table + - Progress SSE stream shows correct steps + - Tailored resume uploaded to GCS + - Job status updated to `completed` + - Entry appears in "Previously Tailored Resumes" list +5. Test error cases: wrong file type, duplicate email, invalid job URL, expired JWT From c18a188a96e6836fd242e0ce1a2c63ed7f3765fb Mon Sep 17 00:00:00 2001 From: Arijit De Date: Tue, 16 Jun 2026 18:16:10 +0530 Subject: [PATCH 02/11] refactor: configure agent execution limits, add log directory, and remove resume file and redundant DB sync --- .gitignore | 3 +- ...Artificial Intelligence Engineer_resume.md | 90 ------------------- agents.py | 20 +++-- backend/config.py | 13 ++- backend/crew_runner.py | 66 +++++++------- example_env.txt | 26 +++++- frontend/package-lock.json | 10 +-- 7 files changed, 90 insertions(+), 138 deletions(-) delete mode 100644 Arijit_De_hoichoi_Artificial Intelligence Engineer_resume.md diff --git a/.gitignore b/.gitignore index c368141..931bff6 100644 --- a/.gitignore +++ b/.gitignore @@ -164,4 +164,5 @@ cython_debug/ db/ crew_log.txt project-69718baa-b6cc-44ec-9fb-17c2c8f0dd9c.json -client_secret_720140080607-c0cuhvl4bvqtnk6tgicqds8136iqgrdv.apps.googleusercontent.com.json \ No newline at end of file +client_secret_720140080607-c0cuhvl4bvqtnk6tgicqds8136iqgrdv.apps.googleusercontent.com.json +logs/ \ No newline at end of file diff --git a/Arijit_De_hoichoi_Artificial Intelligence Engineer_resume.md b/Arijit_De_hoichoi_Artificial Intelligence Engineer_resume.md deleted file mode 100644 index fb1fc2b..0000000 --- a/Arijit_De_hoichoi_Artificial Intelligence Engineer_resume.md +++ /dev/null @@ -1,90 +0,0 @@ -# Arijit De -*Machine Learning Engineer | AI/ML Systems | Generative AI | MLOps* - -Kolkata, India | [LinkedIn Profile](https://www.linkedin.com/in/arijit-de/) | [GitHub Profile](https://github.com/arijitde) - -## Summary - -Highly accomplished Machine Learning Engineer with 2-6 years of hands-on experience in designing, training, and deploying robust AI/ML systems in production environments. Specializes in Deep Learning, Computer Vision, and Natural Language Processing, with a proven track record in building `Platform Intelligence` and `Creative AI` solutions. Expert in `Generative AI`, `LLMs`, `prompt engineering`, and `RAG architectures`, leveraging frameworks like PyTorch and cloud platforms (GCP). Passionate about developing scalable `MLOps foundations`, driving `model performance`, and championing `responsible AI practices` to transform complex data into actionable insights and innovative products. Adept at translating ambiguous creative problems into well-scoped AI features for diverse stakeholders. - -## Work Experience - -**Machine Learning Engineer** | mVizn Pte. Ltd. | Singapore -*Jan 2022 – Present* - -* Led the end-to-end development and deployment of a Deep Learning pipeline for 3D point cloud semantic segmentation, enhancing `model performance` by 30% and improving system robustness for critical applications. -* Directed backend development and deployed `AI models` on `GCP` (VMs, Cloud Storage) with Python and `MySQL` integration, leading to a 60% improvement in `system performance` and `scalability` for a unified intelligence layer. -* Implemented `GCP IAM` for secure role-based access control and resolved critical post-deployment issues, collaborating with 5+ stakeholders to align technical solutions with business needs and ensure continuous `model monitoring` and iteration. -* Developed `APIs` and `model-serving infrastructure` to enable direct consumption of `AI-driven insights` by various teams, streamlining data access and decision-making. - -**Machine Learning Engineer** | Mercedes-Benz Research and Development India | Bengaluru, India -*Aug 2020 – Jan 2022* - -* Developed and deployed an `AI system` for Vulnerable Road User (VRU) detection using a `Yolo v3 model`, significantly improving `Level 3 ADAS capabilities` by 30% in real-world scenarios. -* Created manual quality control tools with `PyQt` for validating annotated images, increasing `annotation accuracy` by 25% and ensuring high-quality training data. -* Automated quality checks and `data analysis` using `Python scripts`, boosting `annotation throughput` by 20% and optimizing data processing pipelines. - -**Systems Engineer** | Tata Consultancy Services | Bengaluru, India -*Sep 2018 – Aug 2020* - -* Maintained and enhanced a large-scale internal website, implementing numerous feature requests across frontend (`HTML`, `Bootstrap CSS`, `JavaScript`) and backend (`Java`, `MySQL`). -* Collaborated with cross-functional teams to streamline release cycles and deliver high-quality software solutions, demonstrating strong teamwork in complex system management. - -## Projects - -**Job Application Agent** (Ongoing) -* Developed an `AI agent` using `LangChain`, `Crew AI`, `Google Cloud BigQuery`, and `Vertex AI` for automated job application tasks, demonstrating practical application of `GenAI workflows` and `MLOps tools`. -* Implemented `RAG architectures` to enhance agent's knowledge retrieval and contextual understanding for tailored applications. - -**Spiritual Chatbot** -* Utilized `OpenAI GPT-3.5 turbo` and `LangChain` for `prompt engineering` to develop a conversational `LLM` capable of providing spiritual guidance, showcasing expertise in `fine-tuning` and `evaluating model outputs`. - -**Github Code Analysis Tool** -* Employed `OpenAI GPT-3.5 turbo`, `LangChain`, and `DeepLake` `vector database` to build a tool for code analysis, demonstrating experience with `RAG systems` and efficient data retrieval for `LLM` applications. - -**3D Brain Analysis and Visualization App** -* Developed a `Flask` application for 3D brain MRI segmentation and visualization, highlighting expertise in `computer vision` and `REST API development` for medical imaging solutions. - -## Skills - -**Programming & Frameworks:** -* **Python:** `PyTorch`, `TensorFlow`, `Scikit-Learn`, `Numpy`, `Pandas`, `OpenCV`, `Flask` -* **SQL:** `MySQL`, `Google Cloud BigQuery` -* **Other:** C++, HTML, CSS, JavaScript, Java - -**AI/ML & Generative AI:** -* `Deep Learning`, `Computer Vision`, `Natural Language Processing` -* `Generative AI (GenAI)`, `Large Language Models (LLMs)` -* `Prompt Engineering`, `Fine-tuning`, `RAG Architectures` -* `Semantic Segmentation`, `Object Detection`, `Audience Segmentation`, `Content Performance Prediction` -* `Model Evaluation`, `A/B Testing`, `Bias Audits`, `Explainability` - -**Cloud & MLOps:** -* `Google Cloud Platform (GCP)`: VMs, Cloud Storage, IAM, `Vertex AI` -* `MLOps Tools`: `Model Registry`, `Experiment Tracking`, `Feature Store`, `Deployment Pipelines` -* `Data Pipeline Tools`: `Data Ingestion`, `ETL`, (equivalent experience to `Airflow`/`dbt` through BigQuery and pipeline ownership) - -**Databases & Tools:** -* `SQL Databases`, `Vector Databases` (`DeepLake`) -* `Git`, `PyQt`, `LangChain`, `Crew AI` - -## Education - -**Ph.D. in Computer Science & Engineering** | Jadavpur University | Kolkata, India -*Specialization: Medical Image Analysis (Brain Segmentation, Tumor Classification)* -*Jan 2015 – Dec 2021* - -**Master of Engineering in Computer Science & Engineering** | Jadavpur University | Kolkata, India -*Aug 2013 – Jul 2015* - -**Bachelor of Engineering in Computer Science & Engineering** | Jadavpur University | Kolkata, India -*Aug 2009 – Jul 2013* - -## Publications & Certifications - -**Selected Publications:** -* Numerous publications in top-tier conferences and journals (`ICPR`, `IATMSI`, `ICIP`, `EMBC`, `Expert Syst. Appl.`) focusing on medical image analysis, deep graph cuts, and neurological disorder detection. - -**Certifications:** -* **Deep Learning Specialization** by Deeplearning.ai -* **TensorFlow in Practice Specialization** by Deeplearning.ai \ No newline at end of file diff --git a/agents.py b/agents.py index b319755..0dfd525 100644 --- a/agents.py +++ b/agents.py @@ -158,6 +158,9 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = tools=[extract_github_repos_tool, repo_content_searcher], llm=gemini_llm, verbose=True, + max_iter=8, + max_rpm=10, + respect_context_window=True, backstory=( "You are an expert in analyzing GitHub repositories and summarizing project experience for job applications. " "You first ensure the user's repositories are indexed in the vector store using the github_repos_extractor tool. " @@ -171,9 +174,12 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = profiler = Agent( role="Personal Profiler for Engineers", goal="Do incredible analytical research on job applicants to help them stand out in the job market", - tools = [read_resume, semantic_search_resume], + tools=[read_resume, semantic_search_resume], llm=gemini_llm, verbose=True, + max_iter=8, + max_rpm=10, + respect_context_window=True, backstory=( "Equipped with analytical prowess, you dissect and synthesize information " "from diverse sources to craft comprehensive personal and professional profiles," @@ -185,10 +191,12 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = resume_strategist = Agent( role="Resume Strategist for Engineers", goal="Find all the best ways to make a resume stand out in the job market.", - tools = [scrape_tool, search_tool, - read_resume, semantic_search_resume], + tools=[scrape_tool, search_tool, read_resume, semantic_search_resume], llm=gemini_llm, verbose=True, + max_iter=8, + max_rpm=10, + respect_context_window=True, backstory=( "With a strategic mind and an eye for detail, you " "excel at refining resumes to highlight the most " @@ -202,10 +210,12 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = role="Engineering Interview Preparer", goal="Create interview questions and talking points " "based on the resume and job requirements", - tools = [scrape_tool, search_tool, - read_resume, semantic_search_resume], + tools=[scrape_tool, search_tool, read_resume, semantic_search_resume], llm=gemini_llm, verbose=True, + max_iter=8, + max_rpm=10, + respect_context_window=True, backstory=( "Your role is crucial in anticipating the dynamics of " "interviews. With your ability to formulate key questions " diff --git a/backend/config.py b/backend/config.py index 0842ce0..a8b0703 100644 --- a/backend/config.py +++ b/backend/config.py @@ -52,6 +52,10 @@ class Settings(BaseSettings): GEMINI_API_KEY: str = Field(default="", description="Google Gemini API key") SERPER_API_KEY: str = Field(default="", description="Serper search API key") + # ── Crew AI ─────────────────────────────────────────────────────────── + CREWAI_TOOLS_ALLOW_UNSAFE_PATHS: bool = Field(default=True, description="Allow CrewAI tools to access unsafe paths") + CREWAI_TRACING_ENABLED: bool = Field(default=True, description="Enable CrewAI tracing") + # ── Resume Upload ───────────────────────────────────────────────────── MAX_RESUME_SIZE_MB: int = Field(default=10, description="Max resume upload size in MB") @@ -89,4 +93,11 @@ def max_resume_bytes(self) -> int: @lru_cache() def get_settings() -> Settings: """Return a cached Settings instance (reads .env once).""" - return Settings() + settings = Settings() + import os + if settings.GOOGLE_APPLICATION_CREDENTIALS: + os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = settings.GOOGLE_APPLICATION_CREDENTIALS + # Propagate CrewAI variables to os.environ for libraries that read them directly + os.environ["CREWAI_TOOLS_ALLOW_UNSAFE_PATHS"] = str(settings.CREWAI_TOOLS_ALLOW_UNSAFE_PATHS).lower() + os.environ["CREWAI_TRACING_ENABLED"] = str(settings.CREWAI_TRACING_ENABLED).lower() + return settings diff --git a/backend/crew_runner.py b/backend/crew_runner.py index 85b623f..1be1393 100644 --- a/backend/crew_runner.py +++ b/backend/crew_runner.py @@ -11,6 +11,7 @@ import tempfile from concurrent.futures import ThreadPoolExecutor from datetime import datetime +from pathlib import Path from typing import Dict, Any from sqlalchemy import select, update @@ -30,6 +31,9 @@ # In-memory progress store: {job_id: {"current_step": str, "error": str|None}} progress_store: Dict[int, Dict[str, Any]] = {} +# ── Crew verbose log path ───────────────────────────────────────────────────── +_LOG_DIR = Path(__file__).parent.parent / "logs" + def _update_progress(job_id: int, step: str, error: str = None): """Update the in-memory progress store for SSE broadcasting.""" @@ -61,8 +65,6 @@ def _run_crew_sync( logger.error("crew_runner.py: Failed to extract job details for job %d: %s", job_id, e) raise RuntimeError(f"Failed to extract job details: {e}") - # Save extracted job details to DB - _save_job_details_sync(job_id, job_details) # Step 2: Write resume to temp file for crew to read _update_progress(job_id, "searching_projects") @@ -92,11 +94,17 @@ def _run_crew_sync( resume_strategy_task.output_file = resume_output interview_preparation_task.output_file = interview_output + _LOG_DIR.mkdir(parents=True, exist_ok=True) + ts = datetime.now().strftime("%Y%m%d_%H%M%S") + crew_log_path = str(_LOG_DIR / f"{ts}_crew.log") + crew = Crew( agents=[github_project_summarizer, profiler, resume_strategist, interview_preparer], tasks=[github_summary_task, profile_task, resume_strategy_task, interview_preparation_task], verbose=True, + output_log_file=crew_log_path, ) + logger.info("crew_runner.py: Crew verbose log → %s", crew_log_path) _update_progress(job_id, "tailoring_resume") @@ -112,7 +120,7 @@ def _run_crew_sync( } result = crew.kickoff(inputs=job_application_inputs) - logger.info("crew_runner.py: Crew execution completed for job %d", job_id) + logger.info("crew_runner.py: Crew execution completed for job %d. Log saved to %s", job_id, crew_log_path) # Read output files tailored_resume_content = "" @@ -141,38 +149,6 @@ def _run_crew_sync( os.unlink(path) -def _save_job_details_sync(job_id: int, job_details): - """Save extracted job details to the database (sync, called from thread).""" - import asyncio - - async def _save(): - async with AsyncSessionLocal() as db: - await db.execute( - update( - __import__("backend.models", fromlist=["Job"]).Job - ).where( - __import__("backend.models", fromlist=["Job"]).Job.id == job_id - ).values( - job_name=job_details.job_name, - company_name=job_details.company_name, - location=job_details.location, - seniority_level=job_details.seniority_level, - employment_type=job_details.employment_type, - job_function=job_details.job_function, - industry=job_details.industry, - job_description=job_details.job_description, - requirements=job_details.requirements, - ) - ) - await db.commit() - - # Run async DB update from sync thread - loop = asyncio.new_event_loop() - try: - loop.run_until_complete(_save()) - finally: - loop.close() - async def run_crew_for_job( job_id: int, user_id: int, user_email: str, @@ -206,6 +182,26 @@ async def run_crew_for_job( github_profile.bq_dataset_name, resume_content, job_url, ) + # Save extracted job details to DB on the correct async event loop + job_details = result["job_details"] + async with AsyncSessionLocal() as db: + from backend.models import Job + await db.execute( + update(Job).where(Job.id == job_id).values( + job_name=job_details.job_name, + company_name=job_details.company_name, + location=job_details.location, + seniority_level=job_details.seniority_level, + employment_type=job_details.employment_type, + job_function=job_details.job_function, + industry=job_details.industry, + job_description=job_details.job_description, + requirements=job_details.requirements, + ) + ) + await db.commit() + logger.info("crew_runner.py: Job details saved for job %d", job_id) + # Upload results to GCS _update_progress(job_id, "uploading_results") diff --git a/example_env.txt b/example_env.txt index 7de9932..81eb081 100644 --- a/example_env.txt +++ b/example_env.txt @@ -22,4 +22,28 @@ BRIGHT_DATA_API_KEY= # Logging Configuration # Console log level: DEBUG | INFO | WARNING | ERROR | CRITICAL (default: INFO) -LOG_LEVEL=INFO \ No newline at end of file +LOG_LEVEL=INFO + +# ── Web App Configuration ────────────────────────────────────────── +# Cloud SQL MySQL +MYSQL_HOST=127.0.0.1 +MYSQL_PORT=3306 +MYSQL_USER= +MYSQL_PASSWORD= +MYSQL_DATABASE=job_applier + +# GCS Bucket for resumes +GCS_BUCKET_NAME= + +# JWT Authentication +JWT_SECRET_KEY= +JWT_ALGORITHM=HS256 +JWT_EXPIRY_MINUTES=1440 + +# Google OAuth (optional — set up in GCP Console) +GOOGLE_OAUTH_CLIENT_ID= +GOOGLE_OAUTH_CLIENT_SECRET= + +# Crew AI +CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true +CREWAI_TRACING_ENABLED=true \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 65a901e..57ad64a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1743,16 +1743,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" From 4da8f4d745f469392c7b14bbfbf06ff4006bbfe8 Mon Sep 17 00:00:00 2001 From: Arijit De Date: Wed, 17 Jun 2026 13:29:24 +0530 Subject: [PATCH 03/11] docs: add Cloud SQL Auth Proxy setup instructions and update crew log file naming convention --- README.md | 37 +++++++++++++++++++++++++++++++++---- backend/crew_runner.py | 2 +- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 364946a..3857cbe 100644 --- a/README.md +++ b/README.md @@ -132,8 +132,10 @@ cd .. Add the following database and storage configurations to the bottom of your `.env` file: ```env -# Cloud SQL MySQL (Direct Connection) -MYSQL_HOST=34.131.150.209 +# Cloud SQL MySQL Connection +# Use 127.0.0.1 when running Cloud SQL Auth Proxy (Recommended) +# Use 34.131.150.209 for direct connection (requires authorizing your public IP in GCP console) +MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASSWORD=JobAgent@2026 @@ -153,9 +155,36 @@ GOOGLE_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret ``` -#### 5. Run the Web Application +#### 5. Setup & Run Cloud SQL Auth Proxy (Recommended) -Start the backend API server and frontend development server in separate terminals: +Since dynamic public IP addresses change frequently, running the Cloud SQL Auth Proxy is the recommended way to securely connect to the Cloud SQL database from your local development environment without having to configure authorized IP networks in the GCP Console. + +##### A. Install the Proxy Client (Linux) +```bash +# Download the binary (for 64-bit Linux) +curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.linux.amd64 + +# Make it executable +chmod +x cloud-sql-proxy + +# Move it to a directory in your PATH (optional, but recommended) +sudo mv cloud-sql-proxy /usr/local/bin/ +``` + +##### B. Run the Proxy +Start the proxy in a separate terminal using your GCP Service Account JSON key: + +```bash +cloud-sql-proxy \ + --credentials-file ./project-69718baa-b6cc-44ec-9fb-17c2c8f0dd9c.json \ + project-69718baa-b6cc-44ec-9fb:asia-south2:job-applier-mysql +``` + +*Note: If port `3306` is already in use by a local MySQL server on your machine, run the proxy on port `3307` using the `--port 3307` flag and update `MYSQL_PORT=3307` in your `.env` file.* + +#### 6. Run the Web Application + +Start the backend API server and frontend development server in separate terminals (ensure the Cloud SQL Auth Proxy is running if `MYSQL_HOST` is set to `127.0.0.1`): **Terminal 1 (Backend API):** diff --git a/backend/crew_runner.py b/backend/crew_runner.py index 1be1393..1af48ac 100644 --- a/backend/crew_runner.py +++ b/backend/crew_runner.py @@ -96,7 +96,7 @@ def _run_crew_sync( _LOG_DIR.mkdir(parents=True, exist_ok=True) ts = datetime.now().strftime("%Y%m%d_%H%M%S") - crew_log_path = str(_LOG_DIR / f"{ts}_crew.log") + crew_log_path = str(_LOG_DIR / f"{ts}_crew") crew = Crew( agents=[github_project_summarizer, profiler, resume_strategist, interview_preparer], From d27615fe29c2a3a69a8dcb3e43991ffb9072e733 Mon Sep 17 00:00:00 2001 From: Arijit De Date: Thu, 18 Jun 2026 11:13:27 +0000 Subject: [PATCH 04/11] Refactored the project to a production grade project sturcutre. Added uv as the backend package manager. Updated README.md --- backend/__init__.py | 1 - .../auth_router.py => app/api/v1/auth.py} | 0 .../github_router.py => app/api/v1/github.py} | 0 .../job_router.py => app/api/v1/jobs.py} | 0 .../api/v1/resumes.py} | 0 backend/{ => app/core}/config.py | 0 backend/{ => app/core}/database.py | 0 logger.py => backend/app/core/logging.py | 0 backend/{auth.py => app/core/security.py} | 0 backend/{ => app}/main.py | 0 backend/{models.py => app/models/__init__.py} | 0 .../{schemas.py => app/schemas/__init__.py} | 0 .../app/services/crew/agents.py | 0 .../app/services/crew/crew.py | 0 .../app/services/crew/tasks.py | 0 backend/{ => app/services}/crew_runner.py | 0 .../services/extractors/github_extractor.py | 0 .../services/extractors/linkedin_extractor.py | 0 .../{gcs.py => app/services/gcs_service.py} | 0 GCP_Setup.md => backend/docs/GCP_Setup.md | 0 webapp_plan.md => backend/docs/webapp_plan.md | 0 backend/requirements.txt | 16 ------ backend/routers/__init__.py | 1 - .../sample_data/Arijit_De_Resume.md | 0 .../sample_data/interview_materials.md | 0 example_env.txt | 49 ------------------- package-lock.json | 6 --- requirements.txt | 14 ------ 28 files changed, 87 deletions(-) delete mode 100644 backend/__init__.py rename backend/{routers/auth_router.py => app/api/v1/auth.py} (100%) rename backend/{routers/github_router.py => app/api/v1/github.py} (100%) rename backend/{routers/job_router.py => app/api/v1/jobs.py} (100%) rename backend/{routers/resume_router.py => app/api/v1/resumes.py} (100%) rename backend/{ => app/core}/config.py (100%) rename backend/{ => app/core}/database.py (100%) rename logger.py => backend/app/core/logging.py (100%) rename backend/{auth.py => app/core/security.py} (100%) rename backend/{ => app}/main.py (100%) rename backend/{models.py => app/models/__init__.py} (100%) rename backend/{schemas.py => app/schemas/__init__.py} (100%) rename agents.py => backend/app/services/crew/agents.py (100%) rename Job_Applier.py => backend/app/services/crew/crew.py (100%) rename tasks.py => backend/app/services/crew/tasks.py (100%) rename backend/{ => app/services}/crew_runner.py (100%) rename github_repo_extractor.py => backend/app/services/extractors/github_extractor.py (100%) rename webpage_extractor.py => backend/app/services/extractors/linkedin_extractor.py (100%) rename backend/{gcs.py => app/services/gcs_service.py} (100%) rename GCP_Setup.md => backend/docs/GCP_Setup.md (100%) rename webapp_plan.md => backend/docs/webapp_plan.md (100%) delete mode 100644 backend/requirements.txt delete mode 100644 backend/routers/__init__.py rename Arijit_De_Resume.md => backend/sample_data/Arijit_De_Resume.md (100%) rename interview_materials.md => backend/sample_data/interview_materials.md (100%) delete mode 100644 example_env.txt delete mode 100644 package-lock.json delete mode 100644 requirements.txt diff --git a/backend/__init__.py b/backend/__init__.py deleted file mode 100644 index 7f83169..0000000 --- a/backend/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Backend package diff --git a/backend/routers/auth_router.py b/backend/app/api/v1/auth.py similarity index 100% rename from backend/routers/auth_router.py rename to backend/app/api/v1/auth.py diff --git a/backend/routers/github_router.py b/backend/app/api/v1/github.py similarity index 100% rename from backend/routers/github_router.py rename to backend/app/api/v1/github.py diff --git a/backend/routers/job_router.py b/backend/app/api/v1/jobs.py similarity index 100% rename from backend/routers/job_router.py rename to backend/app/api/v1/jobs.py diff --git a/backend/routers/resume_router.py b/backend/app/api/v1/resumes.py similarity index 100% rename from backend/routers/resume_router.py rename to backend/app/api/v1/resumes.py diff --git a/backend/config.py b/backend/app/core/config.py similarity index 100% rename from backend/config.py rename to backend/app/core/config.py diff --git a/backend/database.py b/backend/app/core/database.py similarity index 100% rename from backend/database.py rename to backend/app/core/database.py diff --git a/logger.py b/backend/app/core/logging.py similarity index 100% rename from logger.py rename to backend/app/core/logging.py diff --git a/backend/auth.py b/backend/app/core/security.py similarity index 100% rename from backend/auth.py rename to backend/app/core/security.py diff --git a/backend/main.py b/backend/app/main.py similarity index 100% rename from backend/main.py rename to backend/app/main.py diff --git a/backend/models.py b/backend/app/models/__init__.py similarity index 100% rename from backend/models.py rename to backend/app/models/__init__.py diff --git a/backend/schemas.py b/backend/app/schemas/__init__.py similarity index 100% rename from backend/schemas.py rename to backend/app/schemas/__init__.py diff --git a/agents.py b/backend/app/services/crew/agents.py similarity index 100% rename from agents.py rename to backend/app/services/crew/agents.py diff --git a/Job_Applier.py b/backend/app/services/crew/crew.py similarity index 100% rename from Job_Applier.py rename to backend/app/services/crew/crew.py diff --git a/tasks.py b/backend/app/services/crew/tasks.py similarity index 100% rename from tasks.py rename to backend/app/services/crew/tasks.py diff --git a/backend/crew_runner.py b/backend/app/services/crew_runner.py similarity index 100% rename from backend/crew_runner.py rename to backend/app/services/crew_runner.py diff --git a/github_repo_extractor.py b/backend/app/services/extractors/github_extractor.py similarity index 100% rename from github_repo_extractor.py rename to backend/app/services/extractors/github_extractor.py diff --git a/webpage_extractor.py b/backend/app/services/extractors/linkedin_extractor.py similarity index 100% rename from webpage_extractor.py rename to backend/app/services/extractors/linkedin_extractor.py diff --git a/backend/gcs.py b/backend/app/services/gcs_service.py similarity index 100% rename from backend/gcs.py rename to backend/app/services/gcs_service.py diff --git a/GCP_Setup.md b/backend/docs/GCP_Setup.md similarity index 100% rename from GCP_Setup.md rename to backend/docs/GCP_Setup.md diff --git a/webapp_plan.md b/backend/docs/webapp_plan.md similarity index 100% rename from webapp_plan.md rename to backend/docs/webapp_plan.md diff --git a/backend/requirements.txt b/backend/requirements.txt deleted file mode 100644 index c0f7acf..0000000 --- a/backend/requirements.txt +++ /dev/null @@ -1,16 +0,0 @@ -# Backend dependencies -fastapi>=0.115.0 -uvicorn[standard]>=0.30.0 -sqlalchemy[asyncio]>=2.0 -asyncmy>=0.2.9 -pymysql>=1.1.0 -pydantic>=2.0 -pydantic-settings>=2.0 -python-jose[cryptography]>=3.3.0 -passlib[bcrypt]>=1.7.4 -python-multipart>=0.0.7 -google-cloud-storage>=2.14.0 -google-auth>=2.25.0 -python-dotenv>=1.0.0 -pydantic[email]>=2.0 -sse-starlette>=1.8.0 diff --git a/backend/routers/__init__.py b/backend/routers/__init__.py deleted file mode 100644 index 873f7bb..0000000 --- a/backend/routers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# Routers package diff --git a/Arijit_De_Resume.md b/backend/sample_data/Arijit_De_Resume.md similarity index 100% rename from Arijit_De_Resume.md rename to backend/sample_data/Arijit_De_Resume.md diff --git a/interview_materials.md b/backend/sample_data/interview_materials.md similarity index 100% rename from interview_materials.md rename to backend/sample_data/interview_materials.md diff --git a/example_env.txt b/example_env.txt deleted file mode 100644 index 81eb081..0000000 --- a/example_env.txt +++ /dev/null @@ -1,49 +0,0 @@ -# Path to the downloaded Service Account JSON key -GOOGLE_APPLICATION_CREDENTIALS= - -# Your GCP Project ID -GCP_PROJECT_ID= - -GCP_LOCATION= -GCP_DATASET_NAME= -GCP_TABLE_NAME= - -GITHUB_PERSONAL_ACCESS_TOKEN= - -OPENAI_API_KEY= - -SERPER_API_KEY= - -ANTHROPIC_API_KEY= - -GEMINI_API_KEY= - -BRIGHT_DATA_API_KEY= - -# Logging Configuration -# Console log level: DEBUG | INFO | WARNING | ERROR | CRITICAL (default: INFO) -LOG_LEVEL=INFO - -# ── Web App Configuration ────────────────────────────────────────── -# Cloud SQL MySQL -MYSQL_HOST=127.0.0.1 -MYSQL_PORT=3306 -MYSQL_USER= -MYSQL_PASSWORD= -MYSQL_DATABASE=job_applier - -# GCS Bucket for resumes -GCS_BUCKET_NAME= - -# JWT Authentication -JWT_SECRET_KEY= -JWT_ALGORITHM=HS256 -JWT_EXPIRY_MINUTES=1440 - -# Google OAuth (optional — set up in GCP Console) -GOOGLE_OAUTH_CLIENT_ID= -GOOGLE_OAUTH_CLIENT_SECRET= - -# Crew AI -CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true -CREWAI_TRACING_ENABLED=true \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 8591261..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Job_Application_Agent", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1573186..0000000 --- a/requirements.txt +++ /dev/null @@ -1,14 +0,0 @@ -crewai[anthropic] -crewai-tools -beautifulsoup4 -google-cloud-bigquery -langchain-community -langchain-google-genai -langchain-google-community[featurestore] -langchain-text-splitters -openpyxl -pandas -pypdf -python-dotenv -requests -python-docx \ No newline at end of file From 40de1a30969e693797a11d060513bf672bfedd1e Mon Sep 17 00:00:00 2001 From: Arijit De Date: Thu, 18 Jun 2026 11:16:17 +0000 Subject: [PATCH 05/11] refactor: Refactored the project to a production grade project sturcutre. Added uv as the backend package manager. Updated README.md --- .github/workflows/deploy.yml | 0 .gitignore | 22 +- README.md | 295 +- backend/.env.example | 53 + backend/Dockerfile | 0 backend/README.md | 104 + backend/app/__init__.py | 0 backend/app/api/__init__.py | 0 backend/app/api/deps.py | 15 + backend/app/api/v1/__init__.py | 0 backend/app/api/v1/auth.py | 8 +- backend/app/api/v1/github.py | 8 +- backend/app/api/v1/jobs.py | 12 +- backend/app/api/v1/resumes.py | 12 +- backend/app/cli.py | 251 + backend/app/core/__init__.py | 0 backend/app/core/config.py | 11 + backend/app/core/database.py | 2 +- backend/app/core/logging.py | 9 +- backend/app/core/security.py | 6 +- backend/app/main.py | 34 +- backend/app/models/__init__.py | 2 +- backend/app/services/__init__.py | 0 backend/app/services/crew/__init__.py | 0 backend/app/services/crew/__main__.py | 68 + backend/app/services/crew/agents.py | 24 +- backend/app/services/crew/crew.py | 112 +- backend/app/services/crew/tasks.py | 2 +- backend/app/services/crew_runner.py | 59 +- backend/app/services/extractors/__init__.py | 0 .../services/extractors/github_extractor.py | 26 +- .../services/extractors/linkedin_extractor.py | 14 +- backend/app/services/gcs_service.py | 2 +- backend/pyproject.toml | 76 + backend/tests/__init__.py | 0 backend/tests/test_health.py | 13 + backend/uv.lock | 5428 +++++++++++++++++ docker-compose.yml | 0 frontend/.env.example | 11 + frontend/Dockerfile | 0 frontend/README.md | 49 +- frontend/src/components/GithubProfileAdd.jsx | 2 +- frontend/src/components/LoginSection.jsx | 2 +- .../src/components/ResumePreviewModal.jsx | 2 +- frontend/src/components/ResumeReadyModal.jsx | 2 +- frontend/src/components/ResumeUpload.jsx | 2 +- frontend/src/components/TailorResumeForm.jsx | 2 +- .../src/components/TailoredResumeList.jsx | 2 +- frontend/src/context/AuthContext.jsx | 2 +- frontend/src/hooks/.gitkeep | 0 frontend/src/pages/HomePage.jsx | 2 +- frontend/src/pages/InterviewMaterialsPage.jsx | 2 +- frontend/src/pages/RegisterPage.jsx | 2 +- .../src/{api/client.js => services/api.js} | 0 54 files changed, 6405 insertions(+), 345 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 backend/.env.example create mode 100644 backend/Dockerfile create mode 100644 backend/README.md create mode 100644 backend/app/__init__.py create mode 100644 backend/app/api/__init__.py create mode 100644 backend/app/api/deps.py create mode 100644 backend/app/api/v1/__init__.py create mode 100644 backend/app/cli.py create mode 100644 backend/app/core/__init__.py create mode 100644 backend/app/services/__init__.py create mode 100644 backend/app/services/crew/__init__.py create mode 100644 backend/app/services/crew/__main__.py create mode 100644 backend/app/services/extractors/__init__.py create mode 100644 backend/pyproject.toml create mode 100644 backend/tests/__init__.py create mode 100644 backend/tests/test_health.py create mode 100644 backend/uv.lock create mode 100644 docker-compose.yml create mode 100644 frontend/.env.example create mode 100644 frontend/Dockerfile create mode 100644 frontend/src/hooks/.gitkeep rename frontend/src/{api/client.js => services/api.js} (100%) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore index 931bff6..1701bca 100644 --- a/.gitignore +++ b/.gitignore @@ -123,6 +123,11 @@ celerybeat.pid # Environments .env +.env.* +!.env.example +**/.env +**/.env.* +!**/.env.example .venv env/ venv/ @@ -130,6 +135,11 @@ ENV/ env.bak/ venv.bak/ +# Node +node_modules/ +**/node_modules/ +frontend/dist/ + # Spyder project settings .spyderproject .spyproject @@ -163,6 +173,12 @@ cython_debug/ db/ crew_log.txt -project-69718baa-b6cc-44ec-9fb-17c2c8f0dd9c.json -client_secret_720140080607-c0cuhvl4bvqtnk6tgicqds8136iqgrdv.apps.googleusercontent.com.json -logs/ \ No newline at end of file +logs/ +**/logs/ + +# Credentials / service-account keys (never commit) +**/credentials/ +client_secret_*.json +*-service-account*.json +project-*.json +backend/credentials/ \ No newline at end of file diff --git a/README.md b/README.md index 3857cbe..22e270d 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,101 @@ This project also includes a **Full-Stack Web App version** with a **FastAPI bac --- +## 📦 Project Structure + +``` +Job_Application_Agent/ +├── backend/ # FastAPI backend + CrewAI pipeline (uv-managed) +│ ├── app/ +│ │ ├── api/ # Route handlers (api/v1) + shared deps +│ │ ├── core/ # config, security, database, logging +│ │ ├── services/ # GCS, crew runner, CrewAI pipeline, extractors +│ │ ├── models/ # SQLAlchemy ORM models +│ │ ├── schemas/ # Pydantic schemas +│ │ └── main.py # App init + CORS + routers +│ ├── credentials/ # GCP keys (gitignored) +│ ├── pyproject.toml # Dependencies (uv) +│ ├── Dockerfile # (empty for now) +│ └── README.md # Backend setup & run instructions +├── frontend/ # React + Vite (JavaScript) frontend +│ ├── src/ +│ │ ├── components/ pages/ context/ hooks/ services/ assets/ +│ │ └── main.jsx App.jsx +│ ├── Dockerfile # (empty for now) +│ └── package.json +├── .github/workflows/ # CI/CD (deploy.yml — empty for now) +├── docker-compose.yml # (empty for now) +└── README.md # This file +``` + +## ✅ Prerequisites + +| Requirement | Version / Notes | +| ----------- | --------------- | +| **Python** | 3.11+ (3.12 recommended). You don't need to install it manually — `uv` will fetch a matching interpreter. | +| **[uv](https://docs.astral.sh/uv/)** | The Python package & project manager used here. Install: `curl -LsSf https://astral.sh/uv/install.sh \| sh` (then restart your shell so `~/.local/bin` is on `PATH`). | +| **Node.js** | 18+ (with `npm`), for the React frontend. [Download](https://nodejs.org/en/download). | +| **Google Cloud account** | A GCP project with **BigQuery**, **Vertex AI**, **Cloud SQL Admin**, and **Cloud Storage** APIs enabled, plus a **service-account JSON key**. See [backend/docs/GCP_Setup.md](backend/docs/GCP_Setup.md). | +| **Cloud SQL (MySQL)** | A Cloud SQL MySQL instance (the web app stores users/jobs there). | +| **[Cloud SQL Auth Proxy](https://cloud.google.com/sql/docs/mysql/sql-proxy)** | `cloud-sql-proxy` binary on `PATH` (the `uv run db-proxy` / `uv run dev` commands invoke it). See [Installation](https://docs.cloud.google.com/sql/docs/mysql/connect-instance-auth-proxy) to install| +| **API keys** | GitHub PAT, Bright Data, Gemini, and (optionally) Serper. See [API Keys & Cloud Setup](#-api-keys--cloud-setup). | + +> **All `uv run` commands are run from the `backend/` directory** — the project +> and its custom commands are defined in `backend/pyproject.toml`. There is no +> root-level `pyproject.toml`, so `uv run dev` from the repo root will not work. + +--- + +## ⚡ Quick Start + +```bash +git clone https://github.com/arijitde92/Job_Application_Agent.git +cd Job_Application_Agent +``` + +### 1. Backend (uv) + +```bash +cd backend +cp .env.example .env # then fill in secrets (see below) +uv sync # creates backend/.venv and installs everything +``` + +Place your GCP service-account JSON key under `backend/credentials/` and point +`GOOGLE_APPLICATION_CREDENTIALS` in `backend/.env` at it (an absolute path is +safest). + +### 2. Frontend + +```bash +cd ../frontend +cp .env.example .env +npm install +``` + +### 3. Run everything (from `backend/`) + +```bash +cd ../backend +uv run dev # Cloud SQL proxy + API + frontend, together +``` + +Then open **http://localhost:5173**. The API is at http://localhost:8000 +(docs at http://localhost:8000/docs). + +Prefer separate terminals? Run them individually: + +```bash +uv run db-proxy # Cloud SQL Auth Proxy → 127.0.0.1:3306 +uv run api # FastAPI dev server → http://localhost:8000 +uv run frontend # Vite dev server → http://localhost:5173 +``` + +See **[backend/README.md](backend/README.md)** for the full command list, +env-var overrides, and the standalone crew CLI. + +--- + ## 🚀 Features - **Multi-Agent Orchestration:** Uses Crew AI to coordinate agents for research, profiling, resume tailoring, and interview preparation. @@ -22,7 +117,6 @@ This project also includes a **Full-Stack Web App version** with a **FastAPI bac - **Crew AI** ([Homepage](https://www.crewai.com/)): The backbone of the system, enabling modular, collaborative agent workflows. - **Agents:** - - **Researcher:** Extracts and analyzes job requirements from LinkedIn. - **GitHub Project Summarizer:** Summarizes your most relevant GitHub projects. - **Profiler:** Compiles a comprehensive personal/professional profile. - **Resume Strategist:** Tailors your resume for each job. @@ -45,184 +139,101 @@ This project also includes a **Full-Stack Web App version** with a **FastAPI bac ## 🏗️ Architecture -- **Python** (see `requirements.txt` for dependencies) +- **Python 3.11+** with **[uv](https://docs.astral.sh/uv/)** for dependency & + environment management (see `backend/pyproject.toml`) +- **FastAPI** backend (async SQLAlchemy + Cloud SQL MySQL, JWT/Google OAuth auth) +- **React + Vite** frontend with live progress via Server-Sent Events (SSE) - **Crew AI** for agent orchestration - **Google BigQuery** as a vector store for document embeddings - **Vertex AI** for generating and querying semantic embeddings -- **BeautifulSoup, Requests** for web scraping -- **LangChain** for document loading and chunking - ---- - -## ⚙️ Setup Instructions - -### 1. Clone the Repository - -This is always the first step. Run: - -```bash -git clone https://github.com/arijitde92/Job_Application_Agent.git -cd Job_Application_Agent -``` +- **Google Cloud Storage** for resume & generated-output storage +- **Bright Data MCP** for LinkedIn job scraping; **LangChain** for document + loading and chunking --- -### Option A: Running the Standalone CLI Agent +## ⚙️ Configuration -#### 1. Install Dependencies - -```bash -pip install -r requirements.txt -``` - -#### 2. Configure Environment Variables - -Create a `.env` file in the project root with the following variables: +All backend configuration lives in **`backend/.env`** (copy it from +`backend/.env.example`). Key groups: ```env -# GitHub API token -GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token - -# Google Cloud Project details -GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/gcp-service-account.json -GCP_PROJECT_ID=inbound-byway-457408-c9 -GCP_DATASET_NAME=job_applier_app +# ── GCP ────────────────────────────────────────────────────────── +GOOGLE_APPLICATION_CREDENTIALS=/abs/path/to/backend/credentials/service-account.json +GCP_PROJECT_ID=your-project-id GCP_LOCATION=asia-south2 +GCP_DATASET_NAME=job_applier_app GCP_TABLE_NAME=github_repo_data -# (Optional) Vertex AI Model -VERTEX_AI_MODEL=text-embedding-005 -``` - -#### 3. Run the CLI Application - -```bash -python Job_Applier.py -``` - ---- - -### Option B: Running the Full-Stack Web App - -#### 1. Setup Python Environment & Dependencies - -Create and activate a conda environment, then install the backend dependencies: - -```bash -conda create -n job_agent python=3.12 -y -conda activate job_agent -pip install -r requirements.txt -pip install -r backend/requirements.txt -``` - -#### 2. Install Node.js +# ── API keys ───────────────────────────────────────────────────── +GITHUB_PERSONAL_ACCESS_TOKEN=... +BRIGHT_DATA_API_KEY=... # LinkedIn scraping (Bright Data MCP) +GEMINI_API_KEY=... # Crew LLM + Vertex embeddings +SERPER_API_KEY=... # optional web search -The frontend React application requires Node.js (v18+). If you do not have it installed, please download and install it from the official [Node.js Download Page](https://nodejs.org/en/download). - -#### 3. Setup Frontend Dependencies - -```bash -cd frontend -npm install -cd .. -``` - -#### 4. Configure Web App Environment Variables - -Add the following database and storage configurations to the bottom of your `.env` file: - -```env -# Cloud SQL MySQL Connection -# Use 127.0.0.1 when running Cloud SQL Auth Proxy (Recommended) -# Use 34.131.150.209 for direct connection (requires authorizing your public IP in GCP console) -MYSQL_HOST=127.0.0.1 +# ── Cloud SQL (MySQL) ──────────────────────────────────────────── +MYSQL_HOST=127.0.0.1 # 127.0.0.1 when using the Cloud SQL Auth Proxy MYSQL_PORT=3306 -MYSQL_USER=root -MYSQL_PASSWORD=JobAgent@2026 +MYSQL_USER=... +MYSQL_PASSWORD=... MYSQL_DATABASE=job_applier -# Google Cloud Storage (GCS) for Resumes -GCS_BUCKET_NAME=job-applier-project-69718baa-b6cc-44ec-9fb-resumes - -# JWT Authentication -# Generate using: python -c "import secrets; print(secrets.token_urlsafe(32))" -JWT_SECRET_KEY=drUVPzflrCADfaC7HjrydJYPPS_IpspPlXxjOELdfjI -JWT_ALGORITHM=HS256 -JWT_EXPIRY_MINUTES=1440 - -# Google OAuth (Optional — for Google Login) -GOOGLE_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com -GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret +# ── GCS / Auth ─────────────────────────────────────────────────── +GCS_BUCKET_NAME=your-resumes-bucket +JWT_SECRET_KEY= # generate: python -c "import secrets; print(secrets.token_urlsafe(32))" +GOOGLE_OAUTH_CLIENT_ID= # optional, for "Sign in with Google" +GOOGLE_OAUTH_CLIENT_SECRET= ``` -#### 5. Setup & Run Cloud SQL Auth Proxy (Recommended) - -Since dynamic public IP addresses change frequently, running the Cloud SQL Auth Proxy is the recommended way to securely connect to the Cloud SQL database from your local development environment without having to configure authorized IP networks in the GCP Console. +The frontend has its own `frontend/.env` (copy from `frontend/.env.example`) for +`VITE_*` variables. -##### A. Install the Proxy Client (Linux) -```bash -# Download the binary (for 64-bit Linux) -curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.11.0/cloud-sql-proxy.linux.amd64 - -# Make it executable -chmod +x cloud-sql-proxy +> **Never commit `.env` or service-account keys.** They are gitignored. The +> `db-proxy` connection name is derived from `GCP_PROJECT_ID`, `GCP_LOCATION`, +> and instance `job-applier-mysql` by default — override with `CLOUD_SQL_INSTANCE` +> if yours differs. -# Move it to a directory in your PATH (optional, but recommended) -sudo mv cloud-sql-proxy /usr/local/bin/ -``` +For step-by-step GCP provisioning (project, BigQuery dataset, Cloud SQL instance, +GCS bucket, service account), see **[backend/docs/GCP_Setup.md](backend/docs/GCP_Setup.md)**. -##### B. Run the Proxy -Start the proxy in a separate terminal using your GCP Service Account JSON key: - -```bash -cloud-sql-proxy \ - --credentials-file ./project-69718baa-b6cc-44ec-9fb-17c2c8f0dd9c.json \ - project-69718baa-b6cc-44ec-9fb:asia-south2:job-applier-mysql -``` - -*Note: If port `3306` is already in use by a local MySQL server on your machine, run the proxy on port `3307` using the `--port 3307` flag and update `MYSQL_PORT=3307` in your `.env` file.* - -#### 6. Run the Web Application - -Start the backend API server and frontend development server in separate terminals (ensure the Cloud SQL Auth Proxy is running if `MYSQL_HOST` is set to `127.0.0.1`): +--- -**Terminal 1 (Backend API):** +## 🖥️ Standalone Crew CLI (no web app) -```bash -conda activate job_agent -uvicorn backend.main:app --host 127.0.0.1 --port 8000 --reload -``` - -**Terminal 2 (Frontend React):** +You can run the agent pipeline directly, without the frontend/DB, from `backend/`: ```bash -cd frontend -npm run dev +cd backend +uv run crew \ + --url https://www.linkedin.com/jobs/view// \ + --github https://github.com/ \ + --resume sample_data/Arijit_De_Resume.md \ + --name "Your Name" ``` -Open `http://localhost:5173` in your browser. +This extracts the job, indexes the GitHub repos into BigQuery, tailors the +resume, and writes interview materials — same pipeline the web app drives. --- ## 🔑 API Keys & Cloud Setup -- **GitHub:** [Create a Personal Access Token](https://github.com/settings/tokens) and set `GITHUB_PERSONAL_ACCESS_TOKEN` in your `.env` file. -- **Google Cloud:** - - Enable BigQuery and Vertex AI APIs. - - Create a service account with the necessary permissions. - - Download the JSON key and set `GOOGLE_APPLICATION_CREDENTIALS` in your `.env` file. -- **OpenAI:** - - [Get an OpenAI API Key](https://platform.openai.com/account/api-keys) - - Add `OPENAI_API_KEY=your_openai_api_key` to your `.env` file. -- **Serper:** - - [Get a Serper API Key](https://serper.dev/) - - Add `SERPER_API_KEY=your_serper_api_key` to your `.env` file. +All keys go in `backend/.env`. + +- **GitHub:** [Create a Personal Access Token](https://github.com/settings/tokens) → `GITHUB_PERSONAL_ACCESS_TOKEN`. +- **Google Cloud:** + - Enable **BigQuery**, **Vertex AI**, **Cloud SQL Admin**, and **Cloud Storage** APIs. + - Create a service account with the relevant roles (BigQuery, Vertex AI User, Cloud SQL Client, Storage Object Admin). + - Download the JSON key into `backend/credentials/` and point `GOOGLE_APPLICATION_CREDENTIALS` at it. +- **Gemini:** [Get a Gemini API key](https://aistudio.google.com/app/apikey) → `GEMINI_API_KEY` (the crew's LLM + embeddings). +- **Bright Data:** [Get an API key](https://brightdata.com/) for the MCP scraper → `BRIGHT_DATA_API_KEY` (LinkedIn job extraction). +- **Serper (optional):** [Get a Serper API key](https://serper.dev/) → `SERPER_API_KEY` (web search tool). --- ## 📚 How it Works -1. **Job Research:** The Researcher agent scrapes LinkedIn for job details. +1. **Job Extraction:** The job posting is scraped once via the Bright Data MCP LinkedIn extractor and parsed into structured `JobDetails`, which are injected into every downstream task. 2. **GitHub Analysis:** The GitHub Project Summarizer indexes and summarizes your public repos, storing embeddings in BigQuery using Vertex AI. 3. **Profile Compilation:** The Profiler agent creates a comprehensive profile using your resume, GitHub summaries, and job requirements. 4. **Resume Tailoring:** The Resume Strategist aligns your resume with the job description. diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..e4a875a --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,53 @@ +# ────────────────────────────────────────────────────────────────────────── +# Backend environment — copy to `backend/.env` and fill in real values. +# The app reads this file (BaseSettings, model_config env_file=".env") when +# started from the `backend/` directory. +# ────────────────────────────────────────────────────────────────────────── + +# ── GCP ──────────────────────────────────────────────────────────────────── +# Absolute path to the downloaded service-account JSON key. +GOOGLE_APPLICATION_CREDENTIALS=./credentials/service-account.json +GCP_PROJECT_ID= +GCP_LOCATION=asia-south2 +GCP_DATASET_NAME=job_applier_app +GCP_TABLE_NAME=github_repo_data + +# ── API keys ─────────────────────────────────────────────────────────────── +GITHUB_PERSONAL_ACCESS_TOKEN= +SERPER_API_KEY= +ANTHROPIC_API_KEY= +GEMINI_API_KEY= +BRIGHT_DATA_API_KEY= + +# ── Logging ──────────────────────────────────────────────────────────────── +# Console log level: DEBUG | INFO | WARNING | ERROR | CRITICAL +LOG_LEVEL=INFO + +# ── Cloud SQL (MySQL) ────────────────────────────────────────────────────── +MYSQL_HOST=127.0.0.1 +MYSQL_PORT=3306 +MYSQL_USER= +MYSQL_PASSWORD= +MYSQL_DATABASE=job_applier + +# ── GCS bucket for resumes ───────────────────────────────────────────────── +GCS_BUCKET_NAME= + +# ── JWT authentication ───────────────────────────────────────────────────── +JWT_SECRET_KEY=CHANGE_ME_IN_PRODUCTION +JWT_ALGORITHM=HS256 +JWT_EXPIRY_MINUTES=1440 + +# ── Google OAuth (optional) ──────────────────────────────────────────────── +GOOGLE_OAUTH_CLIENT_ID= +GOOGLE_OAUTH_CLIENT_SECRET= + +# ── CrewAI ───────────────────────────────────────────────────────────────── +CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true +CREWAI_TRACING_ENABLED=true + +# ── CORS (comma-separated frontend origins) ──────────────────────────────── +CORS_ORIGINS=http://localhost:5173,http://localhost:3000,http://127.0.0.1:5173 + +# ── Resume upload limit ──────────────────────────────────────────────────── +MAX_RESUME_SIZE_MB=10 diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..5f372b7 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,104 @@ +# Job Application Agent — Backend + +FastAPI backend plus the CrewAI multi-agent pipeline that tailors resumes and +generates interview materials from a LinkedIn job posting and a GitHub profile. + +## Layout + +``` +backend/ +├── app/ +│ ├── api/ +│ │ ├── v1/ # Versioned route handlers +│ │ │ ├── auth.py # /api/auth — register, login, Google OAuth +│ │ │ ├── github.py # /api/github — GitHub profile CRUD +│ │ │ ├── resumes.py # /api/resumes — upload / preview / delete +│ │ │ └── jobs.py # /api/jobs — tailor, status (SSE), downloads +│ │ └── deps.py # Shared dependencies (get_db, get_current_user) +│ ├── core/ +│ │ ├── config.py # Pydantic BaseSettings (.env) +│ │ ├── security.py # JWT, password hashing, Google OAuth verify +│ │ ├── database.py # Async SQLAlchemy engine / session / Base +│ │ └── logging.py # Centralised logging +│ ├── services/ +│ │ ├── gcs_service.py # Google Cloud Storage helpers +│ │ ├── crew_runner.py # Async wrapper that drives the crew per job +│ │ ├── crew/ # CrewAI pipeline +│ │ │ ├── agents.py # Agent definitions + tools +│ │ │ ├── tasks.py # Task definitions +│ │ │ ├── crew.py # build_crew() factory +│ │ │ └── __main__.py # CLI: python -m app.services.crew +│ │ └── extractors/ +│ │ ├── linkedin_extractor.py # Bright Data MCP → JobDetails +│ │ └── github_extractor.py # GitHub → BigQuery vector store (RAG) +│ ├── models/ # SQLAlchemy ORM models +│ ├── schemas/ # Pydantic request/response schemas +│ └── main.py # FastAPI app init, CORS, router registration +├── credentials/ # GCP service-account / OAuth JSON (gitignored) +├── sample_data/ # Example resume & interview output +├── tests/ # Pytest suite +├── pyproject.toml # Dependencies (managed by uv) +├── Dockerfile # (intentionally empty for now) +└── .env.example # Copy to .env and fill in +``` + +## Setup (uv) + +This project uses [uv](https://docs.astral.sh/uv/). + +```bash +cd backend +cp .env.example .env # fill in secrets +uv sync # create venv + install from pyproject.toml +``` + +## Custom commands + +Defined as `[project.scripts]` in `pyproject.toml` — run from `backend/`: + +| Command | What it does | +| ------------------ | -------------------------------------------------------- | +| `uv run api` | FastAPI dev server with autoreload (127.0.0.1:8000) | +| `uv run api-prod` | FastAPI production server (no reload, `API_WORKERS` proc) | +| `uv run frontend` | Vite dev server via `npm run dev` (../frontend) | +| `uv run dev` | Runs **db-proxy + api + frontend** together; Ctrl-C stops all | +| `uv run db-proxy` | Cloud SQL Auth Proxy → `127.0.0.1:3306` (standalone) | +| `uv run crew ...` | The CrewAI pipeline CLI (see below) | + +Override host/port/workers with env vars: `API_HOST`, `API_PORT`, `API_WORKERS`. + +`db-proxy` derives the instance connection name from `.env` +(`::job-applier-mysql`) and binds the port from +`MYSQL_PORT`. Override with `CLOUD_SQL_INSTANCE` (full `project:region:instance` +name), `CLOUD_SQL_INSTANCE_NAME`, or `CLOUD_SQL_PROXY_BIN`. It authenticates with +`GOOGLE_APPLICATION_CREDENTIALS`, so that must point at a valid service-account +key with the **Cloud SQL Client** role. + +```bash +cd backend +uv run api # → http://localhost:8000/docs +uv run dev # db-proxy + api + frontend (needs `npm install` in ../frontend first) +``` + +`dev` starts the Cloud SQL proxy first and waits until `127.0.0.1:` +accepts connections before launching the API, so the app's startup DB connection +succeeds. Skip the proxy with `DEV_SKIP_PROXY=1` (e.g. when `MYSQL_HOST` is a +direct public IP). Ctrl-C stops all three processes (and their children). + +## Run the crew pipeline standalone (CLI) + +```bash +cd backend +uv run crew \ + --url https://www.linkedin.com/jobs/view// \ + --github https://github.com/ \ + --resume sample_data/Arijit_De_Resume.md \ + --name "Your Name" +``` + +## Tests + +```bash +cd backend +uv run pytest +``` diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/api/__init__.py b/backend/app/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/api/deps.py b/backend/app/api/deps.py new file mode 100644 index 0000000..293502f --- /dev/null +++ b/backend/app/api/deps.py @@ -0,0 +1,15 @@ +""" +app.api.deps +------------ +Common API dependencies shared across endpoints (database session, auth). + +Import these in routers rather than reaching into ``app.core`` directly, so the +dependency surface stays in one place: + + from app.api.deps import get_db, get_current_user +""" + +from app.core.database import get_db +from app.core.security import get_current_user + +__all__ = ["get_db", "get_current_user"] diff --git a/backend/app/api/v1/__init__.py b/backend/app/api/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/api/v1/auth.py b/backend/app/api/v1/auth.py index 9e3afe9..374e925 100644 --- a/backend/app/api/v1/auth.py +++ b/backend/app/api/v1/auth.py @@ -8,13 +8,13 @@ from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession -from backend.database import get_db -from backend.models import User -from backend.schemas import ( +from app.api.deps import get_db +from app.models import User +from app.schemas import ( RegisterRequest, LoginRequest, GoogleOAuthRequest, TokenResponse, UserResponse, ) -from backend.auth import ( +from app.core.security import ( hash_password, verify_password, create_access_token, get_current_user, verify_google_id_token, ) diff --git a/backend/app/api/v1/github.py b/backend/app/api/v1/github.py index 2d8e1c5..6169aa0 100644 --- a/backend/app/api/v1/github.py +++ b/backend/app/api/v1/github.py @@ -9,10 +9,10 @@ from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession -from backend.database import get_db -from backend.models import User, GithubProfile -from backend.schemas import GithubProfileCreate, GithubProfileResponse -from backend.auth import get_current_user +from app.api.deps import get_db +from app.models import User, GithubProfile +from app.schemas import GithubProfileCreate, GithubProfileResponse +from app.api.deps import get_current_user router = APIRouter(prefix="/api/github", tags=["github"]) diff --git a/backend/app/api/v1/jobs.py b/backend/app/api/v1/jobs.py index f326df2..49adece 100644 --- a/backend/app/api/v1/jobs.py +++ b/backend/app/api/v1/jobs.py @@ -11,12 +11,12 @@ from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession -from backend.database import get_db -from backend.models import User, Job, GithubProfile, Resume -from backend.schemas import TailorJobRequest, JobResponse, JobDetailResponse -from backend.auth import get_current_user -from backend.gcs import download_file -from backend.crew_runner import run_crew_for_job, progress_store +from app.api.deps import get_db +from app.models import User, Job, GithubProfile, Resume +from app.schemas import TailorJobRequest, JobResponse, JobDetailResponse +from app.api.deps import get_current_user +from app.services.gcs_service import download_file +from app.services.crew_runner import run_crew_for_job, progress_store router = APIRouter(prefix="/api/jobs", tags=["jobs"]) diff --git a/backend/app/api/v1/resumes.py b/backend/app/api/v1/resumes.py index 45c5556..c6a0616 100644 --- a/backend/app/api/v1/resumes.py +++ b/backend/app/api/v1/resumes.py @@ -8,12 +8,12 @@ from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession -from backend.database import get_db -from backend.models import User, Resume -from backend.schemas import ResumeResponse -from backend.auth import get_current_user -from backend.gcs import upload_resume, generate_signed_url, download_file, delete_file -from backend.config import get_settings +from app.api.deps import get_db +from app.models import User, Resume +from app.schemas import ResumeResponse +from app.api.deps import get_current_user +from app.services.gcs_service import upload_resume, generate_signed_url, download_file, delete_file +from app.core.config import get_settings settings = get_settings() router = APIRouter(prefix="/api/resumes", tags=["resumes"]) diff --git a/backend/app/cli.py b/backend/app/cli.py new file mode 100644 index 0000000..3786d0e --- /dev/null +++ b/backend/app/cli.py @@ -0,0 +1,251 @@ +""" +app.cli +------- +Console entrypoints exposed via ``[project.scripts]`` in pyproject.toml. + +Run from the ``backend/`` directory: + + uv run api # start the FastAPI server (reload) + uv run api-prod # start the FastAPI server (no reload, multiple workers) + uv run frontend # start the Vite dev server (npm) + uv run dev # run db-proxy + api + frontend together + uv run db-proxy # start the Cloud SQL Auth Proxy (127.0.0.1:3306) + uv run crew --url ... # run the CrewAI pipeline CLI + +These are thin wrappers around uvicorn / npm / cloud-sql-proxy so the long +invocations live in one place. +""" + +import os +import subprocess +import sys +from pathlib import Path + +# backend/app/cli.py → parents[1] == backend/, parents[2] == repo root +BACKEND_DIR = Path(__file__).resolve().parents[1] +REPO_ROOT = Path(__file__).resolve().parents[2] +FRONTEND_DIR = REPO_ROOT / "frontend" + +DEFAULT_API_HOST = os.environ.get("API_HOST", "127.0.0.1") +DEFAULT_API_PORT = os.environ.get("API_PORT", "8000") + + +def crew() -> None: + """Run the CrewAI pipeline CLI (delegates to app.services.crew.__main__).""" + from app.services.crew.__main__ import main + + main() + + +def _cloud_sql_proxy_cmd() -> tuple[list[str], str, str]: + """ + Build the Cloud SQL Auth Proxy command from settings/env. + + The instance connection name is ``::``. It is + taken from CLOUD_SQL_INSTANCE if set, otherwise built from GCP_PROJECT_ID, + GCP_LOCATION and CLOUD_SQL_INSTANCE_NAME (default: job-applier-mysql). + + Tunables (env vars): + CLOUD_SQL_INSTANCE full connection name (overrides the parts below) + CLOUD_SQL_INSTANCE_NAME instance id (default: job-applier-mysql) + CLOUD_SQL_PROXY_BIN proxy binary (default: cloud-sql-proxy) + MYSQL_PORT local port to bind (default: 3306) + + Returns: + (cmd, instance_connection_name, port) + + Raises: + SystemExit: if the instance connection name cannot be determined. + """ + from app.core.config import get_settings + + settings = get_settings() + + instance = os.environ.get("CLOUD_SQL_INSTANCE") + if not instance: + project = settings.GCP_PROJECT_ID + region = settings.GCP_LOCATION + name = os.environ.get("CLOUD_SQL_INSTANCE_NAME", "job-applier-mysql") + if not project or not region: + print( + "Cannot build the Cloud SQL instance connection name: set " + "GCP_PROJECT_ID and GCP_LOCATION in .env, or set CLOUD_SQL_INSTANCE " + "to '::'.", + file=sys.stderr, + ) + sys.exit(1) + instance = f"{project}:{region}:{name}" + + proxy_bin = os.environ.get("CLOUD_SQL_PROXY_BIN", "cloud-sql-proxy") + port = str(settings.MYSQL_PORT) + cmd = [proxy_bin, "--address=127.0.0.1", f"--port={port}", instance] + return cmd, instance, port + + +def db_proxy() -> None: + """ + Start the Cloud SQL Auth Proxy so the app can reach the MySQL instance on + 127.0.0.1:3306 (matching MYSQL_HOST/MYSQL_PORT in .env). + """ + cmd, instance, port = _cloud_sql_proxy_cmd() + print(f"Starting Cloud SQL Auth Proxy → 127.0.0.1:{port} for {instance}") + try: + sys.exit(subprocess.call(cmd)) + except FileNotFoundError: + print( + f"'{cmd[0]}' not found. Install the Cloud SQL Auth Proxy or set " + "CLOUD_SQL_PROXY_BIN to its path.", + file=sys.stderr, + ) + sys.exit(1) + except KeyboardInterrupt: + pass + + +def api() -> None: + """Start the FastAPI app with autoreload (development).""" + import uvicorn + + uvicorn.run( + "app.main:app", + host=DEFAULT_API_HOST, + port=int(DEFAULT_API_PORT), + reload=True, + ) + + +def api_prod() -> None: + """Start the FastAPI app without reload (production-style).""" + import uvicorn + + workers = int(os.environ.get("API_WORKERS", "4")) + uvicorn.run( + "app.main:app", + host=os.environ.get("API_HOST", "0.0.0.0"), + port=int(DEFAULT_API_PORT), + workers=workers, + ) + + +def frontend() -> None: + """Start the Vite dev server (npm run dev).""" + if not (FRONTEND_DIR / "node_modules").exists(): + print("frontend/node_modules missing — run `npm install` in frontend/ first.", file=sys.stderr) + sys.exit(1) + sys.exit(subprocess.call(["npm", "run", "dev"], cwd=FRONTEND_DIR)) + + +def _wait_for_port(host: str, port: int, timeout: float = 30.0) -> bool: + """Block until ``host:port`` accepts a TCP connection, or timeout elapses.""" + import socket + import time + + deadline = time.monotonic() + timeout + while time.monotonic() < deadline: + try: + with socket.create_connection((host, port), timeout=1): + return True + except OSError: + time.sleep(0.5) + return False + + +def _spawn(cmd: list[str], cwd: Path) -> subprocess.Popen: + """ + Start a child process in its own session/process group so that on teardown + we can signal the whole group — npm spawns Vite, and uvicorn --reload spawns + a worker, both of which would otherwise orphan and keep their ports bound. + """ + return subprocess.Popen(cmd, cwd=cwd, start_new_session=True) + + +def _terminate(procs: list[subprocess.Popen]) -> None: + """Stop each process and its whole group; escalate to SIGKILL if needed.""" + import signal as _signal + import time + + for p in procs: + if p.poll() is not None: + continue + try: + os.killpg(os.getpgid(p.pid), _signal.SIGTERM) + except (ProcessLookupError, PermissionError): + p.terminate() + for p in procs: + try: + p.wait(timeout=10) + except subprocess.TimeoutExpired: + try: + os.killpg(os.getpgid(p.pid), _signal.SIGKILL) + except (ProcessLookupError, PermissionError): + p.kill() + + +def dev() -> None: + """ + Run the Cloud SQL Auth Proxy, the API, and the frontend dev server together; + Ctrl-C stops all three. + + The proxy starts first; the API only launches once 127.0.0.1: is + accepting connections, so its startup DB connection succeeds. Set + DEV_SKIP_PROXY=1 to skip the proxy (e.g. when MYSQL_HOST is a direct IP). + """ + import time + + if not (FRONTEND_DIR / "node_modules").exists(): + print("frontend/node_modules missing — run `npm install` in frontend/ first.", file=sys.stderr) + sys.exit(1) + + skip_proxy = os.environ.get("DEV_SKIP_PROXY") in ("1", "true", "True") + db_port = 3306 + + procs: list[subprocess.Popen] = [] + try: + # 1. Cloud SQL Auth Proxy (first, so the DB is reachable before the API). + if not skip_proxy: + proxy_cmd, instance, port_str = _cloud_sql_proxy_cmd() + db_port = int(port_str) + try: + procs.append(_spawn(proxy_cmd, BACKEND_DIR)) + except FileNotFoundError: + print( + f"'{proxy_cmd[0]}' not found. Install the Cloud SQL Auth Proxy, set " + "CLOUD_SQL_PROXY_BIN, or run with DEV_SKIP_PROXY=1.", + file=sys.stderr, + ) + sys.exit(1) + print(f" DB proxy → 127.0.0.1:{db_port} for {instance} (waiting…)") + if not _wait_for_port("127.0.0.1", db_port): + print(f"Cloud SQL proxy did not open 127.0.0.1:{db_port} in time.", file=sys.stderr) + raise SystemExit(1) + + # 2. API: run via uvicorn in a subprocess so it sits alongside the frontend. + procs.append( + _spawn( + [ + sys.executable, "-m", "uvicorn", "app.main:app", + "--host", DEFAULT_API_HOST, "--port", DEFAULT_API_PORT, "--reload", + ], + BACKEND_DIR, + ) + ) + # 3. Frontend dev server. + procs.append(_spawn(["npm", "run", "dev"], FRONTEND_DIR)) + + if not skip_proxy: + print(f"\n DB proxy → 127.0.0.1:{db_port}") + print(f" API → http://{DEFAULT_API_HOST}:{DEFAULT_API_PORT}") + print(" Frontend → http://localhost:5173") + print(" Press Ctrl-C to stop all.\n") + + # Exit if any process dies. + while True: + for p in procs: + code = p.poll() + if code is not None: + raise SystemExit(code) + time.sleep(0.5) + except (KeyboardInterrupt, SystemExit): + pass + finally: + _terminate(procs) diff --git a/backend/app/core/__init__.py b/backend/app/core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/core/config.py b/backend/app/core/config.py index a8b0703..38550d5 100644 --- a/backend/app/core/config.py +++ b/backend/app/core/config.py @@ -59,6 +59,17 @@ class Settings(BaseSettings): # ── Resume Upload ───────────────────────────────────────────────────── MAX_RESUME_SIZE_MB: int = Field(default=10, description="Max resume upload size in MB") + # ── CORS ────────────────────────────────────────────────────────────── + CORS_ORIGINS: str = Field( + default="http://localhost:5173,http://localhost:3000,http://127.0.0.1:5173", + description="Comma-separated list of allowed CORS origins", + ) + + @property + def cors_origins(self) -> list[str]: + """Parse CORS_ORIGINS into a list of origin strings.""" + return [o.strip() for o in self.CORS_ORIGINS.split(",") if o.strip()] + @property def mysql_url(self) -> str: """Construct the async MySQL connection URL for SQLAlchemy.""" diff --git a/backend/app/core/database.py b/backend/app/core/database.py index 61c8e19..a80cade 100644 --- a/backend/app/core/database.py +++ b/backend/app/core/database.py @@ -8,7 +8,7 @@ from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession from sqlalchemy.orm import DeclarativeBase -from backend.config import get_settings +from app.core.config import get_settings # ── Monkeypatch SQLAlchemy asyncmy ping issue ────────────────────────────── # In PyMySQL 1.2.0+, ping() defaults reconnect to False. diff --git a/backend/app/core/logging.py b/backend/app/core/logging.py index 4678868..20f849d 100644 --- a/backend/app/core/logging.py +++ b/backend/app/core/logging.py @@ -1,10 +1,10 @@ """ -logger.py ---------- +app.core.logging +---------------- Centralized logging configuration for the Job Application Agent. Usage: - from logger import get_logger + from app.core.logging import get_logger logger = get_logger(__name__) logger.info("Something happened") @@ -28,7 +28,8 @@ from pathlib import Path # ── Constants ───────────────────────────────────────────────────────────────── -LOG_DIR = Path(__file__).parent / "logs" +# app/core/logging.py → parents[2] resolves to the `backend/` directory. +LOG_DIR = Path(__file__).resolve().parents[2] / "logs" timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S") LOG_FILE = LOG_DIR / f"job_agent_{timestamp}.log" LOG_LEVEL_ENV = os.environ.get("LOG_LEVEL", "INFO").upper() # Override via .env diff --git a/backend/app/core/security.py b/backend/app/core/security.py index e26252f..1260986 100644 --- a/backend/app/core/security.py +++ b/backend/app/core/security.py @@ -29,9 +29,9 @@ def _patched_hashpw(password, salt): from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession -from backend.config import get_settings -from backend.database import get_db -from backend.models import User +from app.core.config import get_settings +from app.core.database import get_db +from app.models import User settings = get_settings() diff --git a/backend/app/main.py b/backend/app/main.py index 822f447..085a75e 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,20 +1,24 @@ """ -main.py -------- -FastAPI application entry point with CORS, lifespan events, and router includes. +app.main +-------- +FastAPI application entry point: CORS, lifespan events, and router registration. """ from contextlib import asynccontextmanager + from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -from backend.database import engine, Base -from backend.routers import auth_router, github_router, resume_router, job_router +from app.core.config import get_settings +from app.core.database import engine, Base +from app.api.v1 import auth, github, resumes, jobs + +settings = get_settings() @asynccontextmanager async def lifespan(app: FastAPI): - """Create database tables on startup.""" + """Create database tables on startup and dispose the engine on shutdown.""" async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) yield @@ -31,24 +35,20 @@ async def lifespan(app: FastAPI): # CORS — allow frontend dev server and production origins app.add_middleware( CORSMiddleware, - allow_origins=[ - "http://localhost:5173", # Vite dev server - "http://localhost:3000", - "http://127.0.0.1:5173", - ], + allow_origins=settings.cors_origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) -# Include routers -app.include_router(auth_router.router) -app.include_router(github_router.router) -app.include_router(resume_router.router) -app.include_router(job_router.router) +# ── Routers (versioned under /api) ──────────────────────────────────────────── +app.include_router(auth.router) +app.include_router(github.router) +app.include_router(resumes.router) +app.include_router(jobs.router) -@app.get("/api/health") +@app.get("/api/health", tags=["health"]) async def health_check(): """Health check endpoint.""" return {"status": "healthy", "service": "job-application-agent"} diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index ea3723e..bc5c1b2 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -15,7 +15,7 @@ Column, Integer, String, Text, Enum, ForeignKey, DateTime, UniqueConstraint, Index ) from sqlalchemy.orm import relationship -from backend.database import Base +from app.core.database import Base class User(Base): diff --git a/backend/app/services/__init__.py b/backend/app/services/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/services/crew/__init__.py b/backend/app/services/crew/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/services/crew/__main__.py b/backend/app/services/crew/__main__.py new file mode 100644 index 0000000..ee18a15 --- /dev/null +++ b/backend/app/services/crew/__main__.py @@ -0,0 +1,68 @@ +""" +Standalone CLI for the crew pipeline. + +Run from the ``backend/`` directory: + + uv run python -m app.services.crew --url \\ + --github https://github.com/ --resume path/to/resume.md \\ + --name "Your Name" +""" + +import argparse +import json + +from dotenv import load_dotenv + +from app.core.logging import get_logger, log_token_usage +from app.services.crew.crew import build_crew +from app.services.extractors.linkedin_extractor import ( + extract_linkedin_job_details, + JobDetails, +) + +load_dotenv() +logger = get_logger(__name__) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Run the job-application crew end to end.") + parser.add_argument("--url", default="https://www.linkedin.com/jobs/view/4413867953/", + help="LinkedIn job posting URL") + parser.add_argument("--github", default="https://github.com/arijitde92", + help="GitHub profile URL") + parser.add_argument("--resume", default="sample_data/Arijit_De_Resume.md", + help="Path to the applicant's resume (.md)") + parser.add_argument("--name", default="Arijit De", help="Applicant name") + args = parser.parse_args() + + # --- Single MCP scrape: extract job details once, reuse everywhere --- + logger.info("crew CLI: Extracting job details from: %s", args.url) + job_details: JobDetails = extract_linkedin_job_details(args.url) + logger.info("crew CLI: Extracted job '%s' at '%s'", + job_details.job_name, job_details.company_name) + + # Build the JSON passed to all crew tasks — exclude about_company (not needed) + job_info = job_details.to_dict() + job_info.pop("about_company", None) + job_details_json = json.dumps(job_info, indent=2) + + job_application_inputs = { + "applicant_name": args.name.replace(" ", "_"), + "job_posting_url": args.url, + "job_name": job_details.job_name, + "company_name": job_details.company_name, + "github_url": args.github, + "resume_path": args.resume, + "job_details_json": job_details_json, # injected into every task description + } + + logger.info("crew CLI: Starting job applier crew execution...") + crew = build_crew() + result = crew.kickoff(inputs=job_application_inputs) + logger.info("crew CLI: Crew execution completed.") + if hasattr(result, "token_usage"): + log_token_usage(result.token_usage, logger) + + +if __name__ == "__main__": + main() diff --git a/backend/app/services/crew/agents.py b/backend/app/services/crew/agents.py index 0dfd525..acfe032 100644 --- a/backend/app/services/crew/agents.py +++ b/backend/app/services/crew/agents.py @@ -13,9 +13,9 @@ import json import os from dotenv import load_dotenv -from github_repo_extractor import process_github_repo_to_bq, query_github_vector_store -from webpage_extractor import extract_linkedin_job_details, JobDetails -from logger import get_logger +from app.services.extractors.github_extractor import process_github_repo_to_bq, query_github_vector_store +from app.services.extractors.linkedin_extractor import extract_linkedin_job_details, JobDetails +from app.core.logging import get_logger load_dotenv() logger = get_logger(__name__) @@ -63,10 +63,10 @@ def get_repository_links(user_url: str, github_repo_urls: List[str]) -> List[str user_name = user_url.split('/')[-1].split('?')[0] # Fetch the url of each repository - logger.info("agents.py: Searching URL: %s", user_url) + logger.info("crew.agents: Searching URL: %s", user_url) response = requests.get(user_url, headers={'User-Agent': "Chrome/51.0.2704.106"}) if response.status_code != 200: - logger.error("agents.py: Error Occurred: Response Code: %s", response.status_code) + logger.error("crew.agents: Error Occurred: Response Code: %s", response.status_code) return github_repo_urls html_content = response.content soup = BeautifulSoup(html_content, 'html.parser') @@ -74,7 +74,7 @@ def get_repository_links(user_url: str, github_repo_urls: List[str]) -> List[str for repo_heading in repo_headings: repo_name = repo_heading.a.attrs["href"].split('/')[-1] link = 'https://github.com/' + user_name + "/" + repo_name - logger.info("agents.py: Found repo: %s", link) + logger.info("crew.agents: Found repo: %s", link) github_repo_urls.append(link) pages = soup.find_all(attrs={"class": "next_page"}) if len(pages) > 0: @@ -86,11 +86,11 @@ def get_repository_links(user_url: str, github_repo_urls: List[str]) -> List[str # Call the function to get repository links github_repo_urls = get_repository_links(user_url, []) - logger.info("agents.py: Found %d repositories from %s", len(github_repo_urls), user_url) + logger.info("crew.agents: Found %d repositories from %s", len(github_repo_urls), user_url) if not github_repo_urls: - logger.warning("agents.py: No repositories found or an error occurred.") + logger.warning("crew.agents: No repositories found or an error occurred.") return None - logger.info("agents.py: Found %d repositories for user %s", len(github_repo_urls), user_url) + logger.info("crew.agents: Found %d repositories for user %s", len(github_repo_urls), user_url) for repo_url in github_repo_urls[:GITHUB_REPO_SEARCH_LIMIT]: process_github_repo_to_bq(repo_url, file_filter=lambda file_path: file_path.endswith(('.py', '.ipynb', '.md', '.txt')), @@ -115,10 +115,10 @@ def extract_linkedin_job_details_tool(url: str) -> str: str: A JSON-formatted string containing the extracted job details. Returns an error message JSON if scraping fails. """ - logger.info("agents.py: extract_linkedin_job_details_tool called for URL: %s", url) + logger.info("crew.agents: extract_linkedin_job_details_tool called for URL: %s", url) job: JobDetails = extract_linkedin_job_details(url) logger.info( - "agents.py: Extracted job '%s' at '%s'", + "crew.agents: Extracted job '%s' at '%s'", job.job_name, job.company_name ) return job.to_agent_string() @@ -226,7 +226,7 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) if __name__ == "__main__": - logger.info("agents.py: Testing agents.py") + logger.info("crew.agents: Testing agents.py") # print("Testing LinkedIn Job Details Extraction Tool") # job_posting_url = "https://www.linkedin.com/jobs/view/4234610887/" # job_details = extract_linkedin_job_details_tool.run(url=job_posting_url) diff --git a/backend/app/services/crew/crew.py b/backend/app/services/crew/crew.py index f7ee7dd..bbb3e3c 100644 --- a/backend/app/services/crew/crew.py +++ b/backend/app/services/crew/crew.py @@ -1,83 +1,61 @@ -from crewai import Crew -import os -import json -from dotenv import load_dotenv -from webpage_extractor import extract_linkedin_job_details, JobDetails -from logger import get_logger, log_token_usage +""" +app.services.crew.crew +----------------------- +Crew assembly for the job-application pipeline. -load_dotenv() -logger = get_logger(__name__) +``build_crew()`` wires the four agents and their tasks into a CrewAI ``Crew``. +The web app (``app.services.crew_runner``) and the standalone CLI +(``python -m app.services.crew``) both construct the crew through this factory. +""" + +from crewai import Crew -from agents import ( +from app.core.logging import get_logger +from app.services.crew.agents import ( github_project_summarizer, profiler, resume_strategist, interview_preparer, ) - -from tasks import ( +from app.services.crew.tasks import ( github_summary_task, profile_task, resume_strategy_task, interview_preparation_task, ) -# NOTE: researcher and research_task have been removed. -# Job details are extracted once here and injected into crew inputs as -# job_details_json so every task can access them directly. - -job_applier_crew = Crew( - agents=[ - github_project_summarizer, - profiler, - resume_strategist, - interview_preparer, - ], - tasks=[ - github_summary_task, - profile_task, - resume_strategy_task, - interview_preparation_task, - ], - output_log_file="crew_log.txt", - tracing=True, - verbose=True, -) +logger = get_logger(__name__) -if __name__ == "__main__": - job_posting_url = 'https://www.linkedin.com/jobs/view/4413867953/' - # --- Single MCP scrape: extract job details once, reuse everywhere --- - logger.info("Job_Applier.py: Extracting job details from: %s", job_posting_url) - job_details: JobDetails = extract_linkedin_job_details(job_posting_url) - logger.info( - "Job_Applier.py: Extracted job '%s' at '%s'", - job_details.job_name, job_details.company_name, +def build_crew(output_log_file: str = "crew_log.txt", verbose: bool = True, tracing: bool = True) -> Crew: + """ + Construct the job-application :class:`crewai.Crew`. + + Job details are extracted once by the caller and injected into every task via + the ``job_details_json`` crew input variable, so no researcher agent is needed. + + Args: + output_log_file: Path for CrewAI's verbose execution log. + verbose: Enable verbose agent/task logging. + tracing: Enable CrewAI tracing. + + Returns: + A configured :class:`crewai.Crew` ready for ``kickoff(inputs=...)``. + """ + return Crew( + agents=[ + github_project_summarizer, + profiler, + resume_strategist, + interview_preparer, + ], + tasks=[ + github_summary_task, + profile_task, + resume_strategy_task, + interview_preparation_task, + ], + output_log_file=output_log_file, + tracing=tracing, + verbose=verbose, ) - - # Build the JSON passed to all crew tasks — exclude about_company (not needed) - job_info = job_details.to_dict() - job_info.pop("about_company", None) - job_details_json = json.dumps(job_info, indent=2) - - applicant_name = 'Arijit De' - github_url = 'https://github.com/arijitde92' - resume_path = 'Arijit_De_Resume.md' - - job_application_inputs = { - 'applicant_name': applicant_name.replace(' ', '_'), - 'job_posting_url': job_posting_url, - 'job_name': job_details.job_name, - 'company_name': job_details.company_name, - 'github_url': github_url, - 'resume_path': resume_path, - 'job_details_json': job_details_json, # injected into every task description - } - - logger.info("Job_Applier.py: Job application inputs prepared for '%s' at '%s'", - job_details.job_name, job_details.company_name) - logger.info("Job_Applier.py: Starting job applier crew execution...") - result = job_applier_crew.kickoff(inputs=job_application_inputs) - logger.info("Job_Applier.py: Crew execution completed.") - if hasattr(result, 'token_usage'): - log_token_usage(result.token_usage, logger) \ No newline at end of file diff --git a/backend/app/services/crew/tasks.py b/backend/app/services/crew/tasks.py index a7d6fb3..f626ba2 100644 --- a/backend/app/services/crew/tasks.py +++ b/backend/app/services/crew/tasks.py @@ -1,5 +1,5 @@ from crewai import Task -from agents import ( +from app.services.crew.agents import ( github_project_summarizer, profiler, resume_strategist, diff --git a/backend/app/services/crew_runner.py b/backend/app/services/crew_runner.py index 1af48ac..77a28de 100644 --- a/backend/app/services/crew_runner.py +++ b/backend/app/services/crew_runner.py @@ -1,8 +1,8 @@ """ -crew_runner.py --------------- +app.services.crew_runner +------------------------ Async wrapper for CrewAI crew execution with progress tracking via SSE. -Runs the existing agent pipeline in a thread pool to avoid blocking the async event loop. +Runs the agent pipeline in a thread pool to avoid blocking the async event loop. """ import asyncio @@ -17,10 +17,10 @@ from sqlalchemy import select, update from sqlalchemy.ext.asyncio import AsyncSession -from backend.config import get_settings -from backend.database import AsyncSessionLocal -from backend.gcs import download_file, upload_tailored_resume, upload_interview_materials -from logger import get_logger +from app.core.config import get_settings +from app.core.database import AsyncSessionLocal +from app.services.gcs_service import download_file, upload_tailored_resume, upload_interview_materials +from app.core.logging import get_logger logger = get_logger(__name__) settings = get_settings() @@ -32,13 +32,14 @@ progress_store: Dict[int, Dict[str, Any]] = {} # ── Crew verbose log path ───────────────────────────────────────────────────── -_LOG_DIR = Path(__file__).parent.parent / "logs" +# app/services/crew_runner.py → parents[2] resolves to the `backend/` directory. +_LOG_DIR = Path(__file__).resolve().parents[2] / "logs" def _update_progress(job_id: int, step: str, error: str = None): """Update the in-memory progress store for SSE broadcasting.""" progress_store[job_id] = {"current_step": step, "error": error} - logger.info("crew_runner.py: Job %d → step: %s", job_id, step) + logger.info("crew_runner: Job %d → step: %s", job_id, step) def _run_crew_sync( @@ -56,13 +57,13 @@ def _run_crew_sync( # Step 1: Extract job details _update_progress(job_id, "extracting_job_info") try: - from webpage_extractor import extract_linkedin_job_details + from app.services.extractors.linkedin_extractor import extract_linkedin_job_details job_details = extract_linkedin_job_details(job_url) job_info = job_details.to_dict() job_info.pop("about_company", None) job_details_json = json.dumps(job_info, indent=2) except Exception as e: - logger.error("crew_runner.py: Failed to extract job details for job %d: %s", job_id, e) + logger.error("crew_runner: Failed to extract job details for job %d: %s", job_id, e) raise RuntimeError(f"Failed to extract job details: {e}") @@ -76,12 +77,9 @@ def _run_crew_sync( # Step 3: Build crew and run _update_progress(job_id, "building_profile") - from crewai import Crew - from agents import ( - github_project_summarizer, profiler, resume_strategist, interview_preparer, - ) - from tasks import ( - github_summary_task, profile_task, resume_strategy_task, interview_preparation_task, + from app.services.crew.crew import build_crew + from app.services.crew.tasks import ( + resume_strategy_task, interview_preparation_task, ) applicant_name = user_email.split("@")[0].replace(".", "_") @@ -98,13 +96,8 @@ def _run_crew_sync( ts = datetime.now().strftime("%Y%m%d_%H%M%S") crew_log_path = str(_LOG_DIR / f"{ts}_crew") - crew = Crew( - agents=[github_project_summarizer, profiler, resume_strategist, interview_preparer], - tasks=[github_summary_task, profile_task, resume_strategy_task, interview_preparation_task], - verbose=True, - output_log_file=crew_log_path, - ) - logger.info("crew_runner.py: Crew verbose log → %s", crew_log_path) + crew = build_crew(output_log_file=crew_log_path, verbose=True, tracing=False) + logger.info("crew_runner: Crew verbose log → %s", crew_log_path) _update_progress(job_id, "tailoring_resume") @@ -120,7 +113,7 @@ def _run_crew_sync( } result = crew.kickoff(inputs=job_application_inputs) - logger.info("crew_runner.py: Crew execution completed for job %d. Log saved to %s", job_id, crew_log_path) + logger.info("crew_runner: Crew execution completed for job %d. Log saved to %s", job_id, crew_log_path) # Read output files tailored_resume_content = "" @@ -167,7 +160,7 @@ async def run_crew_for_job( # Update status to processing async with AsyncSessionLocal() as db: - from backend.models import Job + from app.models import Job await db.execute( update(Job).where(Job.id == job_id).values(status="processing") ) @@ -185,7 +178,7 @@ async def run_crew_for_job( # Save extracted job details to DB on the correct async event loop job_details = result["job_details"] async with AsyncSessionLocal() as db: - from backend.models import Job + from app.models import Job await db.execute( update(Job).where(Job.id == job_id).values( job_name=job_details.job_name, @@ -200,7 +193,7 @@ async def run_crew_for_job( ) ) await db.commit() - logger.info("crew_runner.py: Job details saved for job %d", job_id) + logger.info("crew_runner: Job details saved for job %d", job_id) # Upload results to GCS _update_progress(job_id, "uploading_results") @@ -219,7 +212,7 @@ async def run_crew_for_job( # Update job record async with AsyncSessionLocal() as db: - from backend.models import Job + from app.models import Job await db.execute( update(Job).where(Job.id == job_id).values( status="completed", @@ -231,16 +224,16 @@ async def run_crew_for_job( await db.commit() _update_progress(job_id, "completed") - logger.info("crew_runner.py: Job %d completed successfully", job_id) + logger.info("crew_runner: Job %d completed successfully", job_id) except Exception as e: - logger.error("crew_runner.py: Job %d failed: %s", job_id, e, exc_info=True) + logger.error("crew_runner: Job %d failed: %s", job_id, e, exc_info=True) _update_progress(job_id, "failed", error=str(e)) # Update job status to failed try: async with AsyncSessionLocal() as db: - from backend.models import Job + from app.models import Job await db.execute( update(Job).where(Job.id == job_id).values( status="failed", error_message=str(e)[:2000], @@ -248,4 +241,4 @@ async def run_crew_for_job( ) await db.commit() except Exception as db_err: - logger.error("crew_runner.py: Failed to update job %d status: %s", job_id, db_err) + logger.error("crew_runner: Failed to update job %d status: %s", job_id, db_err) diff --git a/backend/app/services/extractors/__init__.py b/backend/app/services/extractors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/services/extractors/github_extractor.py b/backend/app/services/extractors/github_extractor.py index 07b3629..762a92c 100644 --- a/backend/app/services/extractors/github_extractor.py +++ b/backend/app/services/extractors/github_extractor.py @@ -10,7 +10,7 @@ import openpyxl import os # Added for directory and file operations from dotenv import load_dotenv -from logger import get_logger +from app.core.logging import get_logger logger = get_logger(__name__) # MIME types considered non-textual BINARY_MIME_PREFIXES = [ @@ -181,12 +181,12 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ # Check if data exists for row in results: if row.count > 0: - logger.info("github_repo_extractor.py: Data for %s/%s already exists in BigQuery. Skipping processing.", owner, repo) + logger.info("github_extractor: Data for %s/%s already exists in BigQuery. Skipping processing.", owner, repo) return except Exception as e: - logger.error("github_repo_extractor.py: Error while querying BigQuery Table with query: %s. Error: %s", query, e) + logger.error("github_extractor: Error while querying BigQuery Table with query: %s. Error: %s", query, e) - logger.info("github_repo_extractor.py: No existing data found for %s/%s. Proceeding with processing.", owner, repo) + logger.info("github_extractor: No existing data found for %s/%s. Proceeding with processing.", owner, repo) # 1. Load files from GitHub loader = GithubFileLoader( repo=f"{owner}/{repo}", @@ -197,7 +197,7 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ ) documents = loader.load() if not documents: - logger.warning("github_repo_extractor.py: No documents loaded from %s", repo_url) + logger.warning("github_extractor: No documents loaded from %s", repo_url) return # Add repo_username and repo_name as metadata to each document @@ -214,7 +214,7 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ separators=["\n\n", "\n", ".", "!", "?", ",", " ", ""], ) doc_splits = text_splitter.split_documents(documents) - logger.info("github_repo_extractor.py: Loaded and split %d document chunks from %s", len(doc_splits), repo_url) + logger.info("github_extractor: Loaded and split %d document chunks from %s", len(doc_splits), repo_url) # 3. Create Vertex AI Embeddings using the new genai package embedding_model = GoogleGenerativeAIEmbeddings( @@ -241,11 +241,11 @@ def process_github_repo_to_bq(repo_url, branch="main", file_filter=None, access_ ids = bq_store.add_documents(batch) if ids: doc_ids.extend(ids) - logger.info("github_repo_extractor.py: Added batch of %d documents.", len(batch)) + logger.info("github_extractor: Added batch of %d documents.", len(batch)) except Exception as e: - logger.error("github_repo_extractor.py: Error adding batch to BigQuery: %s", e) + logger.error("github_extractor: Error adding batch to BigQuery: %s", e) - logger.info("github_repo_extractor.py: Added %d documents to BigQuery vector store.", len(doc_ids)) + logger.info("github_extractor: Added %d documents to BigQuery vector store.", len(doc_ids)) def query_github_vector_store(query, top_k=5, dataset_name=None): """ @@ -289,8 +289,8 @@ def query_github_vector_store(query, top_k=5, dataset_name=None): # Example query query = "How do I run the chatbot locally?" results = query_github_vector_store(query) - logger.info("github_repo_extractor.py: Top relevant chunks:") + logger.info("github_extractor: Top relevant chunks:") for i, (content, metadata) in enumerate(results, 1): - logger.info("github_repo_extractor.py: Result %d:", i) - logger.info("github_repo_extractor.py: Metadata: %s", metadata) - logger.info("github_repo_extractor.py: Content: %s%s", content[:500], "..." if len(content) > 500 else "") + logger.info("github_extractor: Result %d:", i) + logger.info("github_extractor: Metadata: %s", metadata) + logger.info("github_extractor: Content: %s%s", content[:500], "..." if len(content) > 500 else "") diff --git a/backend/app/services/extractors/linkedin_extractor.py b/backend/app/services/extractors/linkedin_extractor.py index 131a265..2709325 100644 --- a/backend/app/services/extractors/linkedin_extractor.py +++ b/backend/app/services/extractors/linkedin_extractor.py @@ -5,7 +5,7 @@ from dotenv import load_dotenv from pydantic import BaseModel, Field from crewai_tools import MCPServerAdapter -from logger import get_logger +from app.core.logging import get_logger load_dotenv() logger = get_logger(__name__) @@ -86,7 +86,7 @@ def extract_linkedin_job_details(url: str, json_output: bool = False): JobDetails | str: Extracted job details. """ logger.info( - "webpage_extractor.py: Scraping LinkedIn job URL via Bright Data MCP: %s", url + "linkedin_extractor: Scraping LinkedIn job URL via Bright Data MCP: %s", url ) server_params = _get_mcp_server_params() @@ -96,7 +96,7 @@ def extract_linkedin_job_details(url: str, json_output: bool = False): with MCPServerAdapter(server_params) as mcp_tools: tool_names = [t.name for t in mcp_tools] logger.info( - "webpage_extractor.py: Connected to Bright Data MCP. Available tools: %s", + "linkedin_extractor: Connected to Bright Data MCP. Available tools: %s", tool_names, ) @@ -106,17 +106,17 @@ def extract_linkedin_job_details(url: str, json_output: bool = False): ) scrape_tool = next(t for t in mcp_tools if t.name == "scrape_as_markdown") - logger.info("webpage_extractor.py: Calling scrape_as_markdown for: %s", url) + logger.info("linkedin_extractor: Calling scrape_as_markdown for: %s", url) result = scrape_tool._run(url=url) markdown_content = str(result) logger.info( - "webpage_extractor.py: Scraping complete. Content length: %d chars", + "linkedin_extractor: Scraping complete. Content length: %d chars", len(markdown_content), ) except Exception as exc: logger.error( - "webpage_extractor.py: Failed to scrape %s — %s", url, exc, exc_info=True + "linkedin_extractor: Failed to scrape %s — %s", url, exc, exc_info=True ) error_model = JobDetails(url=url, job_name=f"ERROR: {exc}") return error_model.to_agent_string() if json_output else error_model @@ -323,7 +323,7 @@ def section_between( if __name__ == "__main__": test_url = "https://www.linkedin.com/jobs/view/4413867953/" - logger.info("webpage_extractor.py: Running standalone extraction for: %s", test_url) + logger.info("linkedin_extractor: Running standalone extraction for: %s", test_url) job: JobDetails = extract_linkedin_job_details(test_url) diff --git a/backend/app/services/gcs_service.py b/backend/app/services/gcs_service.py index a48dc41..86130e4 100644 --- a/backend/app/services/gcs_service.py +++ b/backend/app/services/gcs_service.py @@ -13,7 +13,7 @@ import datetime from google.cloud import storage -from backend.config import get_settings +from app.core.config import get_settings settings = get_settings() diff --git a/backend/pyproject.toml b/backend/pyproject.toml new file mode 100644 index 0000000..00c0ca9 --- /dev/null +++ b/backend/pyproject.toml @@ -0,0 +1,76 @@ +[project] +name = "job-application-agent-backend" +version = "1.0.0" +description = "AI-powered resume tailoring and interview preparation — FastAPI backend + CrewAI pipeline" +readme = "README.md" +requires-python = ">=3.11" +dependencies = [ + # ── Web framework ────────────────────────────────────────────────────── + # Pinned to the 0.115 line: fastapi 0.137.x has a regression where + # include_router() silently registers no routes in this environment. + # Bump only after verifying include_router works (see tests/test_health.py + # and the /api route count). + "fastapi>=0.115.0,<0.116", + "uvicorn[standard]>=0.30.0", + "python-multipart>=0.0.7", + "sse-starlette>=1.8.0", + # ── Database ─────────────────────────────────────────────────────────── + "sqlalchemy[asyncio]>=2.0", + "asyncmy>=0.2.9", + "pymysql>=1.1.0", + # ── Config & validation ──────────────────────────────────────────────── + "pydantic[email]>=2.0", + "pydantic-settings>=2.0", + "python-dotenv>=1.0.0", + # ── Auth ─────────────────────────────────────────────────────────────── + "python-jose[cryptography]>=3.3.0", + "passlib[bcrypt]>=1.7.4", + "google-auth>=2.25.0", + # ── Google Cloud ─────────────────────────────────────────────────────── + "google-cloud-storage>=2.14.0", + "google-cloud-bigquery>=3.0.0", + # ── LLM / Agent pipeline (CrewAI) ────────────────────────────────────── + "crewai[anthropic]", + "crewai-tools", + # ── RAG / embeddings ─────────────────────────────────────────────────── + "langchain-community", + "langchain-google-genai", + "langchain-google-community[featurestore]", + "langchain-text-splitters", + # ── Document parsing & scraping ──────────────────────────────────────── + "beautifulsoup4", + "openpyxl", + "pandas", + "pypdf", + "python-docx", + "requests", +] + +[project.scripts] +# Custom commands — invoke from backend/ with `uv run `. +api = "app.cli:api" # FastAPI dev server (reload) +api-prod = "app.cli:api_prod" # FastAPI production server (workers, no reload) +frontend = "app.cli:frontend" # Vite dev server (npm run dev) +dev = "app.cli:dev" # backend api + cloud SQL Proxy + frontend together +db-proxy = "app.cli:db_proxy" # Cloud SQL Auth Proxy (127.0.0.1:3306) +crew = "app.cli:crew" # CrewAI pipeline CLI + +[dependency-groups] +dev = [ + "pytest>=8.0", + "pytest-asyncio>=0.23", + "httpx>=0.27", +] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +# The importable package is `app/`; only it needs to be built into the wheel +# so the [project.scripts] entrypoints resolve. +packages = ["app"] + +[tool.pytest.ini_options] +asyncio_mode = "auto" +testpaths = ["tests"] diff --git a/backend/tests/__init__.py b/backend/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/tests/test_health.py b/backend/tests/test_health.py new file mode 100644 index 0000000..2cde3ab --- /dev/null +++ b/backend/tests/test_health.py @@ -0,0 +1,13 @@ +"""Smoke test for the FastAPI app — verifies the health endpoint responds.""" + +from fastapi.testclient import TestClient + +from app.main import app + +client = TestClient(app) + + +def test_health_check(): + resp = client.get("/api/health") + assert resp.status_code == 200 + assert resp.json()["status"] == "healthy" diff --git a/backend/uv.lock b/backend/uv.lock new file mode 100644 index 0000000..16ca2de --- /dev/null +++ b/backend/uv.lock @@ -0,0 +1,5428 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", + "python_full_version < '3.12'", +] + +[[package]] +name = "aiofiles" +version = "24.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/03/a88171e277e8caa88a4c77808c20ebb04ba74cc4681bf1e9416c862de237/aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c", size = 30247, upload-time = "2024-06-24T11:02:03.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/45/30bb92d442636f570cb5651bc661f52b610e2eec3f891a5dc3a4c3667db0/aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5", size = 15896, upload-time = "2024-06-24T11:02:01.529Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/c6/61a2d7b7572279226bb2e7f61d7a19ca7c90da0329c93fa0d560cbf288d8/aiohappyeyeballs-2.6.2.tar.gz", hash = "sha256:e202810ee718bd01fc6ef49e8ea53d023d5cb6b581076d7925aa499fa55dbe64", size = 22591, upload-time = "2026-05-20T15:12:24.631Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/fc/a7bf5b6e4e617b45f90f2d9d2a68519c249c81dd4fc2658c7a2a61c4f4b7/aiohappyeyeballs-2.6.2-py3-none-any.whl", hash = "sha256:4708045e2d7a6c6bdf8aafa8ed39649eaf926a4543b54560659129e3365953c4", size = 15062, upload-time = "2026-05-20T15:12:23.328Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.14.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225, upload-time = "2026-06-07T21:06:07.957Z" }, + { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743, upload-time = "2026-06-07T21:06:09.749Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139, upload-time = "2026-06-07T21:06:11.26Z" }, + { url = "https://files.pythonhosted.org/packages/5b/8d/614ace2f579702c9840ab1e1447fd8509e35b0b904f7196418fa2f57b25d/aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04", size = 1784088, upload-time = "2026-06-07T21:06:12.887Z" }, + { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835, upload-time = "2026-06-07T21:06:14.564Z" }, + { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801, upload-time = "2026-06-07T21:06:16.228Z" }, + { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992, upload-time = "2026-06-07T21:06:17.947Z" }, + { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989, upload-time = "2026-06-07T21:06:19.677Z" }, + { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129, upload-time = "2026-06-07T21:06:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/a7/80/18a592ed3be0a402cc03670bd72ee1f8563ddbe1d8d5542dbf868f274136/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee", size = 1756576, upload-time = "2026-06-07T21:06:24.8Z" }, + { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668, upload-time = "2026-06-07T21:06:26.528Z" }, + { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019, upload-time = "2026-06-07T21:06:28.297Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638, upload-time = "2026-06-07T21:06:30.242Z" }, + { url = "https://files.pythonhosted.org/packages/eb/94/3c337ba72451a89806ace6f75bddc92bafc5b8d53d90115a512858024b63/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85", size = 1835660, upload-time = "2026-06-07T21:06:31.943Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698, upload-time = "2026-06-07T21:06:33.72Z" }, + { url = "https://files.pythonhosted.org/packages/b5/63/a251a9d2a6cb45065b2ddc0bde2b3dd10108740a9a42f632c66405a761a2/aiohttp-3.14.1-cp311-cp311-win32.whl", hash = "sha256:313701e488100074ce99850404ee36e741abf6330179fec908a1944ecf570126", size = 458386, upload-time = "2026-06-07T21:06:35.279Z" }, + { url = "https://files.pythonhosted.org/packages/17/ca/69274c51dcd6e8947d77b2806cf47a4a15f2c846e2cbeb1882547d3da283/aiohttp-3.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:03ab4530fdcb3a543a122ba4b65ac9919da9fe9f78a03d328a6e38ff962f7aa5", size = 483406, upload-time = "2026-06-07T21:06:36.824Z" }, + { url = "https://files.pythonhosted.org/packages/2c/8a/c25904f77690c3688ec140f87591ef11a0cfe36bf3d5c0f1f38056fb62b3/aiohttp-3.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:486f7d16ed54c39c2cbd7ca71fd8ba2b8bb7860df65bd7b6ed640bab96a38a8b", size = 452987, upload-time = "2026-06-07T21:06:38.371Z" }, + { url = "https://files.pythonhosted.org/packages/1d/21/151624b51cd92553d95424daf4bf19f19ce9be9002d19253e7e7ce67197b/aiohttp-3.14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d35143e27778b4bb0fb189562d7f275bff79c62ab8e98459717c0ea617ff2480", size = 757402, upload-time = "2026-06-07T21:06:40.311Z" }, + { url = "https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bcfb80a2cc36fba2534e5e5b5264dc7ae6fcd9bf15256da3e53d2f499e6fa29d", size = 512310, upload-time = "2026-06-07T21:06:42.207Z" }, + { url = "https://files.pythonhosted.org/packages/55/b2/2aac325583aaa1353045f96dffa586d8a34e8322e14a7ba49cffeb103ab4/aiohttp-3.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27fd7c91e51729b4f7e1577865fa6d34c9adccbc39aabe9000285b48af9f0ec2", size = 512448, upload-time = "2026-06-07T21:06:43.813Z" }, + { url = "https://files.pythonhosted.org/packages/8a/72/a60607cb849faa8af8a356c9329ea2eb6f395d49e82cc82ccba1fd8deb8f/aiohttp-3.14.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c567bf9eaf664280116a8688f63016e6b32db2505908e2bdaca1b6438142f2", size = 1766854, upload-time = "2026-06-07T21:06:45.391Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d3/d9fe1c9ec7557ab4d0d82bebaa728c6418f0b93295ec2f4ab015f7710cc7/aiohttp-3.14.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f5e6ff2bdbb8f4cd3fbe41f99e25bbcd58e3bf9f13d3dd31a11e7917251cc77a", size = 1740884, upload-time = "2026-06-07T21:06:47.413Z" }, + { url = "https://files.pythonhosted.org/packages/c1/dc/f2cecfaf9337ba3e63f181500814ff502aa3d00d9c7ec93a9d23d10a27b2/aiohttp-3.14.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2f73e01dc37122325caf079982621262f96d74823c179038a82fddfc50359264", size = 1810034, upload-time = "2026-06-07T21:06:50.165Z" }, + { url = "https://files.pythonhosted.org/packages/66/d7/2ff65c5e65c0d7476daf7e15c032e0805e36811185b9623e3238ad6c763e/aiohttp-3.14.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb2c0c80d431c0d03f2c7dbf125150fedd4f0de17366a7ca33f7ccb822391842", size = 1904054, upload-time = "2026-06-07T21:06:52.035Z" }, + { url = "https://files.pythonhosted.org/packages/20/9c/d445818389df371f56d141d881153ba23183c4735a03f7356ffb43f7757d/aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e6fc1a85fa7194a1a7d19f44e8609180f4a8eb5fa4c7ed8b4355f080fad235c", size = 1790278, upload-time = "2026-06-07T21:06:54.049Z" }, + { url = "https://files.pythonhosted.org/packages/4d/aa/bf04cb4d865fc6101c2229a294ad744973b72e513fdc5a6b791e6983d72a/aiohttp-3.14.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:686b6c0d3911ec387b444ddf5dc62fb7f7c0a7d5186a7861626496a5ab4aff95", size = 1591795, upload-time = "2026-06-07T21:06:55.911Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b4/4dac0038960427ba832f6609dfb4ea5437d7fd80c72001b9e48f834f428b/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c6fa4dc7ad6f8109c70bb1499e589f76b0b792baf39f9b017eb92c8a81d0a199", size = 1728397, upload-time = "2026-06-07T21:06:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f9/7cd4e8ad7aa3b75f17d56bb5498dd604a93d4e6eece822ba0568c413fff0/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:87a5eea1b2a5e21e1ebdbb33ad4165359189327e63fc4e4894693e7f821ac817", size = 1766504, upload-time = "2026-06-07T21:07:00.009Z" }, + { url = "https://files.pythonhosted.org/packages/f9/df/fc01d9fcad0f73fed3f3d361f1f94f975947b50dff82919f6dc2bf4316cc/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c1421eb01d4fd608d88cc8290211d177a58532b55ad94076fb349c5bf467f0a", size = 1777806, upload-time = "2026-06-07T21:07:02.064Z" }, + { url = "https://files.pythonhosted.org/packages/41/09/47e2d090bddcc8fb4ccb4c314aadc32d7c5d9bb55f50f6ad1c92fc15d501/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:34b257ec41345c1e8f2df68fa908a7952f5de932723871eb633ecbbff396c9a4", size = 1580707, upload-time = "2026-06-07T21:07:03.942Z" }, + { url = "https://files.pythonhosted.org/packages/3d/36/f1a4ce904ae0b6930cfe9afc96d0896f7ec1a620c400405d63783bb95a9c/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:de538791a80e5d862addbc183f70f0158ac9b9bb872bb147f1fd2a683691e087", size = 1798121, upload-time = "2026-06-07T21:07:05.987Z" }, + { url = "https://files.pythonhosted.org/packages/70/0a/e0075ce9ca0279ee1d4f0c0b85f54fea02ebc83c3007651a72bece658fec/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f71173be42d3241d428f760122febb748de0623f44308a6f120d0dd9ec572e3", size = 1767580, upload-time = "2026-06-07T21:07:07.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/a0c0a8f327a9c52095cdd8e312391b00d3ed64ab6c72bb5c33d8ec251cf7/aiohttp-3.14.1-cp312-cp312-win32.whl", hash = "sha256:ec8dc383ee57ea3e883477dcca3f11b65d58199f1080acaf4cd6ad9a99698be4", size = 452771, upload-time = "2026-06-07T21:07:09.669Z" }, + { url = "https://files.pythonhosted.org/packages/df/d9/ea367c75f16ac9c6cdc8febb25e8318fa21a2b1bc8d6514d4b2d890bface/aiohttp-3.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2aa92c87868cd13674989f9ee83e5f9f7ea4237589b728048e1f0c8f6caa3271", size = 479873, upload-time = "2026-06-07T21:07:11.538Z" }, + { url = "https://files.pythonhosted.org/packages/03/64/8d96784a7851156db8a4c6c3f6f91042fdf39fb15a4cc38c8b3c14833c45/aiohttp-3.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:2c840c90759922cb5e6dda94596e079a30fb5a5ba548e7e0dc00574703940847", size = 448073, upload-time = "2026-06-07T21:07:13.637Z" }, + { url = "https://files.pythonhosted.org/packages/bc/97/bd137012dd97e1649162b099135a80e1fd59aaa807b2430fc448d1029aff/aiohttp-3.14.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:b3a03285a7f9c7b016324574a6d92a1c895da6b978cb8f1deee3ac72bc6da178", size = 506882, upload-time = "2026-06-07T21:07:15.501Z" }, + { url = "https://files.pythonhosted.org/packages/ef/79/e5cc690e9d922a66887ceeaca53a8ffd5a7b0be3816142b7abc433742d89/aiohttp-3.14.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:2a73f487ab8ef5abbb24b7aa9b73e98eaba9e9e031804ff2416f02eca315ccaf", size = 515270, upload-time = "2026-06-07T21:07:17.53Z" }, + { url = "https://files.pythonhosted.org/packages/fe/22/a73ccbf9dbd6e26dda0b24d5fd5db7da92ee3383a79f47677ffb834c5c5b/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd", size = 485841, upload-time = "2026-06-07T21:07:19.555Z" }, + { url = "https://files.pythonhosted.org/packages/3b/b9/57ed8eaf596321c2ad747bd480fb1700dbd7177c60dfc9e4c187f629662e/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe", size = 492088, upload-time = "2026-06-07T21:07:21.581Z" }, + { url = "https://files.pythonhosted.org/packages/78/c0/5ebe5270a7c140d7c6f79dcb018640225f14d406c149e4eec04a7d82fe71/aiohttp-3.14.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4", size = 501564, upload-time = "2026-06-07T21:07:23.388Z" }, + { url = "https://files.pythonhosted.org/packages/75/7f/8cdaa24fc7983865e0915153b96a9ac5bcdd3548d64c5a27d17cecccad2d/aiohttp-3.14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876", size = 751998, upload-time = "2026-06-07T21:07:25.046Z" }, + { url = "https://files.pythonhosted.org/packages/b2/f4/c4227aacfacc5cb0cc2d119b65301d177912a6842cd64e120c47af76064f/aiohttp-3.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dfd6e47d3c44c2279907607f73a4240b88c69eb8b90da7e2441a8045dfd21da", size = 510918, upload-time = "2026-06-07T21:07:27.28Z" }, + { url = "https://files.pythonhosted.org/packages/ab/01/a2d5f96cd4e74424864d30bc0a7e44d0a12dacdcfa91b5b2d1bd3dca6bf3/aiohttp-3.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6", size = 508657, upload-time = "2026-06-07T21:07:29.252Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ed/3c0fb5c500fdd8e7ebc10d1889c04384fffa1a9163eac1356088ca9da1b1/aiohttp-3.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96", size = 1757907, upload-time = "2026-06-07T21:07:31.03Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ab/d4c924d9bd5be3050c226612413ce68cb54c70d2c31b661bfc8d9a5b6a70/aiohttp-3.14.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93b032b5ec3255473c143627d21a69ac74ae12f7f33974cb587c564d11b1066f", size = 1737565, upload-time = "2026-06-07T21:07:33.031Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/37326821ff779084020cdc33224d20b19f42f4183a500ff92022a739eda7/aiohttp-3.14.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f234b4deb12f3ad59127e037bc57c40c21e45b45282df7d3a55a0f409f595296", size = 1799018, upload-time = "2026-06-07T21:07:35.003Z" }, + { url = "https://files.pythonhosted.org/packages/b3/4f/6e947ba73e4ce09070761c05ed3a8ceb7c21f5e46798671d8b2aac0e4626/aiohttp-3.14.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9af6779bfb46abf124068327abcdf9ce95c9ef8287a3e8da76ccf2d0f16c28fa", size = 1894416, upload-time = "2026-06-07T21:07:36.956Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6e/dbf1d0625dc711fb2851f4f3c3055c39ed58bae92082d8c627dbe6013736/aiohttp-3.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451", size = 1783881, upload-time = "2026-06-07T21:07:39.063Z" }, + { url = "https://files.pythonhosted.org/packages/44/c2/5e25098a67268ed369483ae7d1a58bd0a13d03aab860d2a0e4a6eb25b046/aiohttp-3.14.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f380468b09d2a81633ee863b0ec5648d364bd17bb8ecfb8c2f387f7ac1faf42c", size = 1587572, upload-time = "2026-06-07T21:07:41.058Z" }, + { url = "https://files.pythonhosted.org/packages/2a/bd/cf9cee17e140f942a3de73e658a543aa8fbf35a5fc67a9d2538d52d77f0b/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca", size = 1722137, upload-time = "2026-06-07T21:07:43.014Z" }, + { url = "https://files.pythonhosted.org/packages/89/6d/5684f8c59045c96f81a18cefbc1fbbd79d25b88f1c622f2a5c5c08fcb632/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:269b76ac5394092b95bc4a098f4fc6c191c083c3bd12775d1e30e663132f6a09", size = 1755953, upload-time = "2026-06-07T21:07:45.933Z" }, + { url = "https://files.pythonhosted.org/packages/a8/40/35caf3170f8359760740a7d9aa0fff2e344bef98e1d1186f5a0f6dec17e6/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0b3e614340c889d575451696374c9d17affd54cd607ca0babed8f8c37b9397", size = 1766479, upload-time = "2026-06-07T21:07:48.047Z" }, + { url = "https://files.pythonhosted.org/packages/6d/a1/b0c61e7a137f0d81de49a82023a6df73c3c16d6fefb0f8e4a93d21639002/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5663ee9257cfa1add7253a7da3035a02f31b6600ec48261585e1800a81533080", size = 1580077, upload-time = "2026-06-07T21:07:50.069Z" }, + { url = "https://files.pythonhosted.org/packages/0b/41/194ea4623693009fcefebef7aef63c141754f153e9cd0d39d3b9e36c175c/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:603a2c834142172ffddc054067f5ec0ca65d57a0aa98a71bc81952573208e345", size = 1791688, upload-time = "2026-06-07T21:07:52.106Z" }, + { url = "https://files.pythonhosted.org/packages/ba/45/4de841f005cfe1fd63e2a2fe011262c515e2a62aa6994b15947e7d717ac9/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588", size = 1761094, upload-time = "2026-06-07T21:07:54.113Z" }, + { url = "https://files.pythonhosted.org/packages/e4/ae/dbce10533d3896d544d5053939ed75b7dc31a1b0973d959b1b5ae21028d6/aiohttp-3.14.1-cp313-cp313-win32.whl", hash = "sha256:e509a55f681e6158c20f70f102f9cf61fb20fbc382272bc6d94b7343f2582780", size = 452662, upload-time = "2026-06-07T21:07:56.06Z" }, + { url = "https://files.pythonhosted.org/packages/7b/d9/0bf1a19362c32f06229da5e7ddfcec91f93474d6307f7a2d3135e9c674dc/aiohttp-3.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:1ac8531b638959718e18c2207fbfe297819875da46a740b29dfa29beba64355a", size = 479748, upload-time = "2026-06-07T21:07:58.319Z" }, + { url = "https://files.pythonhosted.org/packages/22/0a/62e7232dc9484fbec112ceb32efb6a624cc7994ec6e2b019286f17c4e8f2/aiohttp-3.14.1-cp313-cp313-win_arm64.whl", hash = "sha256:250d14af67f6b6a1a4a811049b1afa69d61d617fca6bf33149b3ab1a6dbcf7b8", size = 447723, upload-time = "2026-06-07T21:08:00.154Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a1/5fafa04e1ca91ddb47608699d60649c1c6db3cf41c99e78fc4056f9513db/aiohttp-3.14.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7c106c26852ca1c2047c6b80384f17100b4e439af276f21ef3d4e2f450ae7e15", size = 508531, upload-time = "2026-06-07T21:08:02.093Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2e/bfa02f699d87ffc86d5959270b28f1cb410add3ccaced8ed2e0b8a5238fc/aiohttp-3.14.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:20205f7f5ade7aaec9f4b500549bbc071b046453aed72f9c06dcab87896a83e8", size = 514718, upload-time = "2026-06-07T21:08:04.476Z" }, + { url = "https://files.pythonhosted.org/packages/85/a5/9594ad6289eebbc97d167c44213d557807f90e59115caad24de21ad2c3b1/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3", size = 487918, upload-time = "2026-06-07T21:08:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/b4/61/16a32c36c3c49edec122a3dc811f2057df2f94d3b14aa107c8017d981618/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba", size = 494014, upload-time = "2026-06-07T21:08:08.263Z" }, + { url = "https://files.pythonhosted.org/packages/9b/89/3ebcf96ed99c05bec9c434aaac6963fd3cbab4a786ae739908a144d9ce44/aiohttp-3.14.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397", size = 502398, upload-time = "2026-06-07T21:08:10.244Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3d/b74870a0c2d40c355928cd5b96c7a11fa821b8a40fc41365e64479b151fb/aiohttp-3.14.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448", size = 758018, upload-time = "2026-06-07T21:08:12.447Z" }, + { url = "https://files.pythonhosted.org/packages/d3/66/f42f5c984d99e49c6cff5f26f590750f2e2f7ef1fcfb99966ab5be1b632e/aiohttp-3.14.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d03f281ed22579314ba00821ce20115a7c0ac430660b4cc05704a3f818b3e004", size = 512462, upload-time = "2026-06-07T21:08:14.624Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983", size = 512824, upload-time = "2026-06-07T21:08:16.572Z" }, + { url = "https://files.pythonhosted.org/packages/26/97/2aa0e5ba0727dc3bd5aaebb7ccbc510f7dfb7fb961ec87497cd496635ab1/aiohttp-3.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe", size = 1749898, upload-time = "2026-06-07T21:08:18.635Z" }, + { url = "https://files.pythonhosted.org/packages/00/8d/e97f6c96c891d457c8479d92a514ba194d0412f981d72c70341ee18488ed/aiohttp-3.14.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:367a9314fdc79dab0fac96e216cb41dd73c85bdca85306ce8999118ba7e0f333", size = 1710114, upload-time = "2026-06-07T21:08:20.892Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e6/aa8d7e863048c8fceb5cd6ce74017311cec3ead07847387e12265fb4444e/aiohttp-3.14.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a24f677ebe83749039e7bdf862ff0bbb16818ae4193d4ef96505e269375bcce0", size = 1802541, upload-time = "2026-06-07T21:08:23.044Z" }, + { url = "https://files.pythonhosted.org/packages/83/a8/72193137de57fda4ebfae4563182d082c8856e3b6e9871d0b46f028fb369/aiohttp-3.14.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c83afe0ba876be7e943d2e0ba645809ad441575d2840c895c21ee5de93b9377a", size = 1875776, upload-time = "2026-06-07T21:08:25.288Z" }, + { url = "https://files.pythonhosted.org/packages/a0/18/938441025db6769a3464596b2410af3afde0b21eb2f204c6f766f68af4bd/aiohttp-3.14.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602", size = 1760329, upload-time = "2026-06-07T21:08:27.363Z" }, + { url = "https://files.pythonhosted.org/packages/60/29/bf2496b4065e76e09fe48015aaffe5ce161d8f089b06ac6982070f653076/aiohttp-3.14.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeea07c4397bbc57719c4eed8f9c284874d4f175f9b6d57f7a1546b976d455ca", size = 1587293, upload-time = "2026-06-07T21:08:29.805Z" }, + { url = "https://files.pythonhosted.org/packages/49/a2/2136674d52123b1354bd05dd5753c318db47dc0c927cc70b27bab3755456/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35", size = 1714756, upload-time = "2026-06-07T21:08:32.094Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b9/e5fd2e6f915503081c0f9b1e8540947037929c70c191da2e4d54b31a21a1/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ae6be797afdef264e8a84864a85b196ca06045586481b3df8a967322fd2fa844", size = 1721052, upload-time = "2026-06-07T21:08:34.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/5a/2833e324a2263e104e31e2e91bc5bbee81bc499afd32203faee048a883f0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:8560b4d712474335d08907db7973f71912d3a9a8f1dee992ec06b5d2fe359496", size = 1766888, upload-time = "2026-06-07T21:08:36.95Z" }, + { url = "https://files.pythonhosted.org/packages/57/fa/dea6511870913162f3b2e8c42a7614eb203a4540b8c2da43e0bfb0548f3c/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7edd08e0a5deb1e8564a2fcd8f4561014a3f05252334671bbf55ddd47db0e5", size = 1581679, upload-time = "2026-06-07T21:08:39.292Z" }, + { url = "https://files.pythonhosted.org/packages/14/bd/3cf0d55e71784b33534e9710a67d382d900598b4787fbce6cc7317f8c42a/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:b6ff7fcee63287ae57b5df3e4f5957ce032122802509246dec1a5bcc55904c95", size = 1782021, upload-time = "2026-06-07T21:08:41.407Z" }, + { url = "https://files.pythonhosted.org/packages/c1/af/14bb5843eccbe234f4dfb78ab73e549d99727247e62ae5d62cbd22eaf5b0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444", size = 1742574, upload-time = "2026-06-07T21:08:43.795Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1e/fbeb7af9210a67ac0f9c9bec0f8f4568497924e33137a3d5b48e1cf85f3f/aiohttp-3.14.1-cp314-cp314-win32.whl", hash = "sha256:a9875b46d910cff3ea2f5962f9d266b465459fe634e22556ab9bd6fc1192eea0", size = 457773, upload-time = "2026-06-07T21:08:46.168Z" }, + { url = "https://files.pythonhosted.org/packages/f0/2b/13e8d741a9ec5db7d900c060554cf8352ab85e44e2a4469ebb9d377bda17/aiohttp-3.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:af8b4b81a960eeaf1234971ac3cd0ba5901f3cd42eae42a46b4d089a8b492719", size = 485001, upload-time = "2026-06-07T21:08:48.401Z" }, + { url = "https://files.pythonhosted.org/packages/df/30/491acfa2c4d6c3ff59c49a14fc1b50be3241e25bbb0c84c09e2da4d11395/aiohttp-3.14.1-cp314-cp314-win_arm64.whl", hash = "sha256:cf4491381b1b57425c315a56a439251b1bdac07b2275f19a8c44bc57744532ec", size = 453809, upload-time = "2026-06-07T21:08:50.7Z" }, + { url = "https://files.pythonhosted.org/packages/34/e3/19dbe1a1f4cc6230eb9e314de7fe68053b0992f9302b27d12141a0b5db53/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2", size = 793320, upload-time = "2026-06-07T21:08:52.775Z" }, + { url = "https://files.pythonhosted.org/packages/7f/20/1b7182219ba1b108430d6e4dc53d25ae02dcfcf5a045b33af4e8c5167527/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10ee9c1753a8f706345b22496c79fbddb5be0599e0823f3738b1534058e25340", size = 529077, upload-time = "2026-06-07T21:08:55Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c8/14ce60ec31a2e5f5274bb17d383a6f7a3aabca31ac04eee05585bbadab16/aiohttp-3.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d", size = 532476, upload-time = "2026-06-07T21:08:57.176Z" }, + { url = "https://files.pythonhosted.org/packages/7e/02/9ac85e081e53da2e061b02fa7758fe0a12d17b8ce2d1f5e6c7cb76730328/aiohttp-3.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94", size = 1922347, upload-time = "2026-06-07T21:08:59.563Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3e/d3ba07a0ab38b5389e10bec4362d21e10a4f667cba2d79ba30837b3a5059/aiohttp-3.14.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e8f2d660c350b3d0e259c7a7e3d9b7fc8b41210cbcc3d4a7076ff0a5e5c2fdc", size = 1786465, upload-time = "2026-06-07T21:09:01.909Z" }, + { url = "https://files.pythonhosted.org/packages/0b/cb/e2ee978a00cfb2df829704a69528b18154eba5939f45bc1efa8f33aee4c5/aiohttp-3.14.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4691802dda97be727f79d86818acaad7eb8e9252626a1d6b519fedbb92d5e251", size = 1909423, upload-time = "2026-06-07T21:09:04.357Z" }, + { url = "https://files.pythonhosted.org/packages/73/5d/1430334858b1022b58ae50399a918f0bd6fe8fa7fa183598d657ff61e040/aiohttp-3.14.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c389c482a7e9b9dc3ee2701ac46c4125297a3818875b9c305ddb603c04828fd1", size = 2001906, upload-time = "2026-06-07T21:09:06.722Z" }, + { url = "https://files.pythonhosted.org/packages/66/4e/560c7472d3d198a23aa5c8b19a5115bf6a9b77b7d3e4bb363da320430ad2/aiohttp-3.14.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3", size = 1877095, upload-time = "2026-06-07T21:09:09.011Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f1/4745806578d447db4a784a8591e2dae3afdfc2bcb96f8f81271b13df6543/aiohttp-3.14.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:979ed4717f59b8bb12e3963378fa285d93d367e15bcd66c721311826d3c44a6c", size = 1676222, upload-time = "2026-06-07T21:09:11.461Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c9/48255813cca749a229ef0ab476004ec623728ad79a9c0840616f6c076325/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203", size = 1842922, upload-time = "2026-06-07T21:09:14.118Z" }, + { url = "https://files.pythonhosted.org/packages/3d/c0/bbd054e2bee909f529523a5af3891052606af5143c09f5f183ec3b234676/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:4132e72c608fe9fecb8f409113567605915b83e9bdd3ea56538d2f9cd35002f1", size = 1825035, upload-time = "2026-06-07T21:09:16.447Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ae/90395d4376deceb74e09ec26b6adf7d2015a6f8802d6d84446af860fef04/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:eefd9cc9b6d4a2db5f00a26bc3e4f9acf71926a6ec557cd56c9c6f27c290b665", size = 1849512, upload-time = "2026-06-07T21:09:18.742Z" }, + { url = "https://files.pythonhosted.org/packages/93/bd/fb25f3049957553d4ce0ba6ae480aa2f592a6985497fca590837d16c1be0/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b165790117eea512d7f3fb22f1f6dad3d55a7189571993eb015591c1401276d1", size = 1668571, upload-time = "2026-06-07T21:09:21.458Z" }, + { url = "https://files.pythonhosted.org/packages/3f/22/7f73303d64dd567ff3addca90b556690ed1233a47b8f55d242fb90af3681/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ed09c7eb1c391271c2ed0314a51903e72a3acb653d5ccfc264cdf3ef11f8269d", size = 1881159, upload-time = "2026-06-07T21:09:23.813Z" }, + { url = "https://files.pythonhosted.org/packages/44/be/0474c5a8b5640e1e4aa1923430a91f4151be82e511373fe764189b89aef5/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c", size = 1841409, upload-time = "2026-06-07T21:09:26.207Z" }, + { url = "https://files.pythonhosted.org/packages/7b/3c/bb4a7cba26956cb3da4553cc2056cf67be5b5ff6e6d8fa4fbdff73bfb7ae/aiohttp-3.14.1-cp314-cp314t-win32.whl", hash = "sha256:47ddf841cdecc810749921d25606dee45857d12d2ad5ddb7b5bd7eab12e4b365", size = 494166, upload-time = "2026-06-07T21:09:28.505Z" }, + { url = "https://files.pythonhosted.org/packages/8a/84/ec80c2c1f66a952555a9f86df6b33af65108a6febfa0471b69013a12f807/aiohttp-3.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e78b522b7a6e27e0b25d19b247b75039ac4c94f99823e3c9e53ae1603a9f7e9", size = 530255, upload-time = "2026-06-07T21:09:30.843Z" }, + { url = "https://files.pythonhosted.org/packages/2a/71/6e22be134a4061ada85a92951b842f2657f17d926b727f3f94c56ae963d6/aiohttp-3.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6", size = 469640, upload-time = "2026-06-07T21:09:33.028Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "aiosqlite" +version = "0.21.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/7d/8bca2bf9a247c2c5dfeec1d7a5f40db6518f88d314b8bca9da29670d2671/aiosqlite-0.21.0.tar.gz", hash = "sha256:131bb8056daa3bc875608c631c678cda73922a2d4ba8aec373b19f18c17e7aa3", size = 13454, upload-time = "2025-02-03T07:30:16.235Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl", hash = "sha256:2549cf4057f95f53dcba16f2b64e8e2791d7e1adedb13197dd8ed77bb226d7d0", size = 15792, upload-time = "2025-02-03T07:30:13.6Z" }, +] + +[[package]] +name = "annotated-doc" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anthropic" +version = "0.73.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "docstring-parser" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f0/07/f550112c3f5299d02f06580577f602e8a112b1988ad7c98ac1a8f7292d7e/anthropic-0.73.0.tar.gz", hash = "sha256:30f0d7d86390165f86af6ca7c3041f8720bb2e1b0e12a44525c8edfdbd2c5239", size = 425168, upload-time = "2025-11-14T18:47:52.635Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/b1/5d4d3f649e151e58dc938cf19c4d0cd19fca9a986879f30fea08a7b17138/anthropic-0.73.0-py3-none-any.whl", hash = "sha256:0d56cd8b3ca3fea9c9b5162868bdfd053fbc189b8b56d4290bd2d427b56db769", size = 367839, upload-time = "2025-11-14T18:47:51.195Z" }, +] + +[[package]] +name = "anyio" +version = "4.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/b5/001890774a9552aff22502b8da382593109ce0c95314abaebbb116567545/anyio-4.14.0.tar.gz", hash = "sha256:b47c1f9ccf73e67021df785332508f99379c68fa7d0684e8e3492cb1d4b23f89", size = 253586, upload-time = "2026-06-15T22:00:49.021Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/16/9826f089383c593cdfc4a6e5aca94d9e91ae1692c57af82c3b2aa5e810f7/anyio-4.14.0-py3-none-any.whl", hash = "sha256:dd9b7a2a9799ed6552fde617b2c5df02b7fdd7d88392fc48101e51bae46164d9", size = 123506, upload-time = "2026-06-15T22:00:47.595Z" }, +] + +[[package]] +name = "appdirs" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/d8/05696357e0311f5b5c316d7b95f46c669dd9c15aaeecbb48c7d0aeb88c40/appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41", size = 13470, upload-time = "2020-05-11T07:59:51.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566, upload-time = "2020-05-11T07:59:49.499Z" }, +] + +[[package]] +name = "asyncmy" +version = "0.2.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/3c/d8297584c40f3d1af55365026bcdca7844ecfea1d917ad19df48f8331a26/asyncmy-0.2.11.tar.gz", hash = "sha256:c3d65d959dde62c911e39ecd1ad0f1339a5e6929fc411d48cfc2f82846190bf4", size = 62865, upload-time = "2026-01-15T11:32:30.368Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/58/ec29057913334cacaa2be98eacb21ad468bc58214ff25aab28b78487d697/asyncmy-0.2.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b324b70438120cabdb1b0d8789082b8a2770257e7beaa7d036322ba5f603f25", size = 1757174, upload-time = "2026-01-15T11:31:43.006Z" }, + { url = "https://files.pythonhosted.org/packages/7e/46/7939167e05143c8feba1812dbdd478579d215d4b6d7f84856981ab71db7c/asyncmy-0.2.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:919811ec4157506632a354047b943b995c71f31182d430ab87c60ccee844c1d9", size = 1724357, upload-time = "2026-01-15T11:31:44.826Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a0/5cfc1bdeb6166ea26eac97d3cefb574d490aabc052478a3f65730b7379d9/asyncmy-0.2.11-cp311-cp311-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:8f416fba944dad20d47eb9a4db1a1853a0f7856b12b0a3b52c1a2fba2f447851", size = 5100925, upload-time = "2026-01-15T11:31:46.842Z" }, + { url = "https://files.pythonhosted.org/packages/0e/37/d9bda68844e6741a7e7e1e449da6cc7926b7ccbf11af26a806b19fd7e7ae/asyncmy-0.2.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:905a6693e3dbaf4280dfced96131bada108554754df40d75a7ff91961ba7331a", size = 5303964, upload-time = "2026-01-15T11:31:48.719Z" }, + { url = "https://files.pythonhosted.org/packages/57/da/358b6e50148a808e05963acd2ae47c1fbef4cdead0157ce2fc90fd4ecf7d/asyncmy-0.2.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ff3ac9feb09e4e80c227280f6350c8015cfed018efe9090f41e2fb4ab8cbf163", size = 5116361, upload-time = "2026-01-15T11:31:50.26Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e8/6b11d62b0e164adbff5ed882d650c8b60fa710001965c54c70c77cffc941/asyncmy-0.2.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:be18725eeccb616b5769ed8cbcabb2758a47e162c4232d7bef98b978950228ad", size = 5241238, upload-time = "2026-01-15T11:31:51.708Z" }, + { url = "https://files.pythonhosted.org/packages/34/6b/d28fe93160900aba9573cbbf9be5291ac2f1a37eab4fd85e366d5ecbfd84/asyncmy-0.2.11-cp311-cp311-win32.whl", hash = "sha256:d32e03278b72f7ef80c0692797e0ce1c03a63ac0192f858d804a6ecd471754e3", size = 1583714, upload-time = "2026-01-15T11:31:52.968Z" }, + { url = "https://files.pythonhosted.org/packages/09/29/39effc0c56fea76b695490b95df0da4dd0b6f040ed160ad40740e1358265/asyncmy-0.2.11-cp311-cp311-win_amd64.whl", hash = "sha256:adfe7d271f9ef52c5f96ffd716ed7726839ec7c39fccf98748803f871b399dbd", size = 1655038, upload-time = "2026-01-15T11:31:54.161Z" }, + { url = "https://files.pythonhosted.org/packages/ca/93/3b4c7f9b35a27e80bd2f305c4c8d7ae56b6dd40d616d34dd4dbb818c90c9/asyncmy-0.2.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:914dddd2ba884822a304297f6ca96026548a100339a4e0ca5c427f6cfa3e4b62", size = 1731817, upload-time = "2026-01-15T11:31:55.486Z" }, + { url = "https://files.pythonhosted.org/packages/7b/65/c70b2b8d014b21504de7e2027e2456f7774cec855766ec1808da47d70b24/asyncmy-0.2.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ea7ca4bcf7747b1fd4e80f16aa461972e0931cecd3bc43a3ba8e14a5d368a98", size = 1712017, upload-time = "2026-01-15T11:31:56.795Z" }, + { url = "https://files.pythonhosted.org/packages/65/a9/f326999a1ffacc7738376fa68c7ede164db9e5520bb4dbd35f1fdd5704dd/asyncmy-0.2.11-cp312-cp312-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:b2fd6e04efca56d9176e7b620ee47dd1dd334e2eb03c1ae1580954c2625b99d1", size = 4986605, upload-time = "2026-01-15T11:31:58.462Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f2/634326efc5fca15620eb106194d2287997a31625dc95f1940a3cef2f80a7/asyncmy-0.2.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4df583dd9d09e817c4cc68b706133d5da453faf56da431a24fcdd64b9552e26b", size = 5226256, upload-time = "2026-01-15T11:32:00.095Z" }, + { url = "https://files.pythonhosted.org/packages/35/7f/4ecd2dcee1d13d49a301ab8ee11a33c75ded4b3089bdb7bf5fb385ed162d/asyncmy-0.2.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2d473b683db7fa1acb167a4bc25ea38e398c991427bd8aa708a9b75059a1d33", size = 5045263, upload-time = "2026-01-15T11:32:01.653Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3e/d94fc4a0ca1e2e492982db607c26b48a95ba668e24755f3bf00da68ae9be/asyncmy-0.2.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d03803975e5dfe74ef4af18411da3716681fde78a65a8758237e7e3e4a342ba1", size = 5194397, upload-time = "2026-01-15T11:32:03.068Z" }, + { url = "https://files.pythonhosted.org/packages/1e/06/d1bb47ce9ed32ba02f2ff44118d5eb36702d38f97cd824bd6a51d3decfdf/asyncmy-0.2.11-cp312-cp312-win32.whl", hash = "sha256:564fc38b3a0665663b8b2ec35fc34fd2768688ba5c869a0d8bd1eb57b85351b2", size = 1560945, upload-time = "2026-01-15T11:32:04.543Z" }, + { url = "https://files.pythonhosted.org/packages/74/d8/973c576c84f4b706a45372c959778feca6842033ccbbd26b2bfe344ebc4b/asyncmy-0.2.11-cp312-cp312-win_amd64.whl", hash = "sha256:84e23466602407da7e126fb5f2da2948c69a6f0d40d4ea7771331771e05c1c2e", size = 1637442, upload-time = "2026-01-15T11:32:05.802Z" }, + { url = "https://files.pythonhosted.org/packages/83/9a/b5b77690f7287acb0a284319e85378c6f4063cd3617dd5311e00f332d628/asyncmy-0.2.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a48be02bdae5e5324ac2d142d7afc6dd9c6af546fd892804c9d8e58d8107980", size = 1727740, upload-time = "2026-01-15T11:32:07.443Z" }, + { url = "https://files.pythonhosted.org/packages/10/28/7b168dc84704edb0b60f7906bfba3a451fd90c0cb2443edbb377b1a11d20/asyncmy-0.2.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:babed99ea1cf7edb476dba23c27560b2a042de46e61678c0cfa3bc017e5f49e4", size = 1706138, upload-time = "2026-01-15T11:32:08.898Z" }, + { url = "https://files.pythonhosted.org/packages/ec/27/ac7363e8ab95f2048852851bbbef12d4eee62363d202d7e566291023ece4/asyncmy-0.2.11-cp313-cp313-manylinux_2_17_i686.manylinux_2_5_i686.manylinux1_i686.manylinux2014_i686.whl", hash = "sha256:709cc8147edad072b5176d87878a985323c87cc017c460073414f2b7d5ae9d01", size = 4942591, upload-time = "2026-01-15T11:32:10.127Z" }, + { url = "https://files.pythonhosted.org/packages/08/81/092314cc97e3732535804f2d3e1b966daeaa3a33a8e9a686328cf09498ad/asyncmy-0.2.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:373aecf8cd17662c13bab69dc36db7242be8e956242164469b8733886fb2ec0a", size = 5178039, upload-time = "2026-01-15T11:32:12.088Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9b/b884404bac62d9b6efbc9006c4b80ad55e8b0bb6f585b44eee1eceb07b1c/asyncmy-0.2.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e23ea478e6638e479dfab2674d2c39a21160c7d750d5c8cf2a0e205d947a63b7", size = 4987628, upload-time = "2026-01-15T11:32:13.979Z" }, + { url = "https://files.pythonhosted.org/packages/00/65/68e576aecd2a43d383123e3a66339e6a3535495b0e81443e374a3d3c356d/asyncmy-0.2.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:577272e238aff9b985eb880b49b1ba009e1fd1133b754fc71c833ab5bd9561ee", size = 5143375, upload-time = "2026-01-15T11:32:15.38Z" }, + { url = "https://files.pythonhosted.org/packages/4e/e4/cd30ea75ab96e5c6fe0daf6bd1871753fe5a1677515530fa0bc1a807dd6c/asyncmy-0.2.11-cp313-cp313-win32.whl", hash = "sha256:29536a08bf8c96437188ae4080fdd09c5a82cbe93794d0996cd0dd238f632664", size = 1559106, upload-time = "2026-01-15T11:32:16.895Z" }, + { url = "https://files.pythonhosted.org/packages/0c/3e/497e3ac839d7d18e79770b977f90e6f17a87181f95b8aed59359ff4aba0c/asyncmy-0.2.11-cp313-cp313-win_amd64.whl", hash = "sha256:f095af7b980505158609ca0bcdd0d14d1e48893e43fc1856c7cecfd9439f498c", size = 1635619, upload-time = "2026-01-15T11:32:18.241Z" }, +] + +[[package]] +name = "attrs" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" }, +] + +[[package]] +name = "backoff" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, +] + +[[package]] +name = "bcrypt" +version = "5.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/36/3329e2518d70ad8e2e5817d5a4cac6bba05a47767ec416c7d020a965f408/bcrypt-5.0.0.tar.gz", hash = "sha256:f748f7c2d6fd375cc93d3fba7ef4a9e3a092421b8dbf34d8d4dc06be9492dfdd", size = 25386, upload-time = "2025-09-25T19:50:47.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/85/3e65e01985fddf25b64ca67275bb5bdb4040bd1a53b66d355c6c37c8a680/bcrypt-5.0.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f3c08197f3039bec79cee59a606d62b96b16669cff3949f21e74796b6e3cd2be", size = 481806, upload-time = "2025-09-25T19:49:05.102Z" }, + { url = "https://files.pythonhosted.org/packages/44/dc/01eb79f12b177017a726cbf78330eb0eb442fae0e7b3dfd84ea2849552f3/bcrypt-5.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:200af71bc25f22006f4069060c88ed36f8aa4ff7f53e67ff04d2ab3f1e79a5b2", size = 268626, upload-time = "2025-09-25T19:49:06.723Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/e82388ad5959c40d6afd94fb4743cc077129d45b952d46bdc3180310e2df/bcrypt-5.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:baade0a5657654c2984468efb7d6c110db87ea63ef5a4b54732e7e337253e44f", size = 271853, upload-time = "2025-09-25T19:49:08.028Z" }, + { url = "https://files.pythonhosted.org/packages/ec/86/7134b9dae7cf0efa85671651341f6afa695857fae172615e960fb6a466fa/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c58b56cdfb03202b3bcc9fd8daee8e8e9b6d7e3163aa97c631dfcfcc24d36c86", size = 269793, upload-time = "2025-09-25T19:49:09.727Z" }, + { url = "https://files.pythonhosted.org/packages/cc/82/6296688ac1b9e503d034e7d0614d56e80c5d1a08402ff856a4549cb59207/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4bfd2a34de661f34d0bda43c3e4e79df586e4716ef401fe31ea39d69d581ef23", size = 289930, upload-time = "2025-09-25T19:49:11.204Z" }, + { url = "https://files.pythonhosted.org/packages/d1/18/884a44aa47f2a3b88dd09bc05a1e40b57878ecd111d17e5bba6f09f8bb77/bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ed2e1365e31fc73f1825fa830f1c8f8917ca1b3ca6185773b349c20fd606cec2", size = 272194, upload-time = "2025-09-25T19:49:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/0e/8f/371a3ab33c6982070b674f1788e05b656cfbf5685894acbfef0c65483a59/bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:83e787d7a84dbbfba6f250dd7a5efd689e935f03dd83b0f919d39349e1f23f83", size = 269381, upload-time = "2025-09-25T19:49:14.308Z" }, + { url = "https://files.pythonhosted.org/packages/b1/34/7e4e6abb7a8778db6422e88b1f06eb07c47682313997ee8a8f9352e5a6f1/bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_x86_64.whl", hash = "sha256:137c5156524328a24b9fac1cb5db0ba618bc97d11970b39184c1d87dc4bf1746", size = 271750, upload-time = "2025-09-25T19:49:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/c0/1b/54f416be2499bd72123c70d98d36c6cd61a4e33d9b89562c22481c81bb30/bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:38cac74101777a6a7d3b3e3cfefa57089b5ada650dce2baf0cbdd9d65db22a9e", size = 303757, upload-time = "2025-09-25T19:49:17.244Z" }, + { url = "https://files.pythonhosted.org/packages/13/62/062c24c7bcf9d2826a1a843d0d605c65a755bc98002923d01fd61270705a/bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d8d65b564ec849643d9f7ea05c6d9f0cd7ca23bdd4ac0c2dbef1104ab504543d", size = 306740, upload-time = "2025-09-25T19:49:18.693Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c8/1fdbfc8c0f20875b6b4020f3c7dc447b8de60aa0be5faaf009d24242aec9/bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:741449132f64b3524e95cd30e5cd3343006ce146088f074f31ab26b94e6c75ba", size = 334197, upload-time = "2025-09-25T19:49:20.523Z" }, + { url = "https://files.pythonhosted.org/packages/a6/c1/8b84545382d75bef226fbc6588af0f7b7d095f7cd6a670b42a86243183cd/bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:212139484ab3207b1f0c00633d3be92fef3c5f0af17cad155679d03ff2ee1e41", size = 352974, upload-time = "2025-09-25T19:49:22.254Z" }, + { url = "https://files.pythonhosted.org/packages/10/a6/ffb49d4254ed085e62e3e5dd05982b4393e32fe1e49bb1130186617c29cd/bcrypt-5.0.0-cp313-cp313t-win32.whl", hash = "sha256:9d52ed507c2488eddd6a95bccee4e808d3234fa78dd370e24bac65a21212b861", size = 148498, upload-time = "2025-09-25T19:49:24.134Z" }, + { url = "https://files.pythonhosted.org/packages/48/a9/259559edc85258b6d5fc5471a62a3299a6aa37a6611a169756bf4689323c/bcrypt-5.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f6984a24db30548fd39a44360532898c33528b74aedf81c26cf29c51ee47057e", size = 145853, upload-time = "2025-09-25T19:49:25.702Z" }, + { url = "https://files.pythonhosted.org/packages/2d/df/9714173403c7e8b245acf8e4be8876aac64a209d1b392af457c79e60492e/bcrypt-5.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9fffdb387abe6aa775af36ef16f55e318dcda4194ddbf82007a6f21da29de8f5", size = 139626, upload-time = "2025-09-25T19:49:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/f8/14/c18006f91816606a4abe294ccc5d1e6f0e42304df5a33710e9e8e95416e1/bcrypt-5.0.0-cp314-cp314t-macosx_10_12_universal2.whl", hash = "sha256:4870a52610537037adb382444fefd3706d96d663ac44cbb2f37e3919dca3d7ef", size = 481862, upload-time = "2025-09-25T19:49:28.365Z" }, + { url = "https://files.pythonhosted.org/packages/67/49/dd074d831f00e589537e07a0725cf0e220d1f0d5d8e85ad5bbff251c45aa/bcrypt-5.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48f753100931605686f74e27a7b49238122aa761a9aefe9373265b8b7aa43ea4", size = 268544, upload-time = "2025-09-25T19:49:30.39Z" }, + { url = "https://files.pythonhosted.org/packages/f5/91/50ccba088b8c474545b034a1424d05195d9fcbaaf802ab8bfe2be5a4e0d7/bcrypt-5.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f70aadb7a809305226daedf75d90379c397b094755a710d7014b8b117df1ebbf", size = 271787, upload-time = "2025-09-25T19:49:32.144Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e7/d7dba133e02abcda3b52087a7eea8c0d4f64d3e593b4fffc10c31b7061f3/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:744d3c6b164caa658adcb72cb8cc9ad9b4b75c7db507ab4bc2480474a51989da", size = 269753, upload-time = "2025-09-25T19:49:33.885Z" }, + { url = "https://files.pythonhosted.org/packages/33/fc/5b145673c4b8d01018307b5c2c1fc87a6f5a436f0ad56607aee389de8ee3/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a28bc05039bdf3289d757f49d616ab3efe8cf40d8e8001ccdd621cd4f98f4fc9", size = 289587, upload-time = "2025-09-25T19:49:35.144Z" }, + { url = "https://files.pythonhosted.org/packages/27/d7/1ff22703ec6d4f90e62f1a5654b8867ef96bafb8e8102c2288333e1a6ca6/bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7f277a4b3390ab4bebe597800a90da0edae882c6196d3038a73adf446c4f969f", size = 272178, upload-time = "2025-09-25T19:49:36.793Z" }, + { url = "https://files.pythonhosted.org/packages/c8/88/815b6d558a1e4d40ece04a2f84865b0fef233513bd85fd0e40c294272d62/bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:79cfa161eda8d2ddf29acad370356b47f02387153b11d46042e93a0a95127493", size = 269295, upload-time = "2025-09-25T19:49:38.164Z" }, + { url = "https://files.pythonhosted.org/packages/51/8c/e0db387c79ab4931fc89827d37608c31cc57b6edc08ccd2386139028dc0d/bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a5393eae5722bcef046a990b84dff02b954904c36a194f6cfc817d7dca6c6f0b", size = 271700, upload-time = "2025-09-25T19:49:39.917Z" }, + { url = "https://files.pythonhosted.org/packages/06/83/1570edddd150f572dbe9fc00f6203a89fc7d4226821f67328a85c330f239/bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7f4c94dec1b5ab5d522750cb059bb9409ea8872d4494fd152b53cca99f1ddd8c", size = 334034, upload-time = "2025-09-25T19:49:41.227Z" }, + { url = "https://files.pythonhosted.org/packages/c9/f2/ea64e51a65e56ae7a8a4ec236c2bfbdd4b23008abd50ac33fbb2d1d15424/bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0cae4cb350934dfd74c020525eeae0a5f79257e8a201c0c176f4b84fdbf2a4b4", size = 352766, upload-time = "2025-09-25T19:49:43.08Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d4/1a388d21ee66876f27d1a1f41287897d0c0f1712ef97d395d708ba93004c/bcrypt-5.0.0-cp314-cp314t-win32.whl", hash = "sha256:b17366316c654e1ad0306a6858e189fc835eca39f7eb2cafd6aaca8ce0c40a2e", size = 152449, upload-time = "2025-09-25T19:49:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/3f/61/3291c2243ae0229e5bca5d19f4032cecad5dfb05a2557169d3a69dc0ba91/bcrypt-5.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:92864f54fb48b4c718fc92a32825d0e42265a627f956bc0361fe869f1adc3e7d", size = 149310, upload-time = "2025-09-25T19:49:46.162Z" }, + { url = "https://files.pythonhosted.org/packages/3e/89/4b01c52ae0c1a681d4021e5dd3e45b111a8fb47254a274fa9a378d8d834b/bcrypt-5.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dd19cf5184a90c873009244586396a6a884d591a5323f0e8a5922560718d4993", size = 143761, upload-time = "2025-09-25T19:49:47.345Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/6237f151fbfe295fe3e074ecc6d44228faa1e842a81f6d34a02937ee1736/bcrypt-5.0.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:fc746432b951e92b58317af8e0ca746efe93e66555f1b40888865ef5bf56446b", size = 494553, upload-time = "2025-09-25T19:49:49.006Z" }, + { url = "https://files.pythonhosted.org/packages/45/b6/4c1205dde5e464ea3bd88e8742e19f899c16fa8916fb8510a851fae985b5/bcrypt-5.0.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c2388ca94ffee269b6038d48747f4ce8df0ffbea43f31abfa18ac72f0218effb", size = 275009, upload-time = "2025-09-25T19:49:50.581Z" }, + { url = "https://files.pythonhosted.org/packages/3b/71/427945e6ead72ccffe77894b2655b695ccf14ae1866cd977e185d606dd2f/bcrypt-5.0.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:560ddb6ec730386e7b3b26b8b4c88197aaed924430e7b74666a586ac997249ef", size = 278029, upload-time = "2025-09-25T19:49:52.533Z" }, + { url = "https://files.pythonhosted.org/packages/17/72/c344825e3b83c5389a369c8a8e58ffe1480b8a699f46c127c34580c4666b/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d79e5c65dcc9af213594d6f7f1fa2c98ad3fc10431e7aa53c176b441943efbdd", size = 275907, upload-time = "2025-09-25T19:49:54.709Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7e/d4e47d2df1641a36d1212e5c0514f5291e1a956a7749f1e595c07a972038/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2b732e7d388fa22d48920baa267ba5d97cca38070b69c0e2d37087b381c681fd", size = 296500, upload-time = "2025-09-25T19:49:56.013Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c3/0ae57a68be2039287ec28bc463b82e4b8dc23f9d12c0be331f4782e19108/bcrypt-5.0.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0c8e093ea2532601a6f686edbc2c6b2ec24131ff5c52f7610dd64fa4553b5464", size = 278412, upload-time = "2025-09-25T19:49:57.356Z" }, + { url = "https://files.pythonhosted.org/packages/45/2b/77424511adb11e6a99e3a00dcc7745034bee89036ad7d7e255a7e47be7d8/bcrypt-5.0.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5b1589f4839a0899c146e8892efe320c0fa096568abd9b95593efac50a87cb75", size = 275486, upload-time = "2025-09-25T19:49:59.116Z" }, + { url = "https://files.pythonhosted.org/packages/43/0a/405c753f6158e0f3f14b00b462d8bca31296f7ecfc8fc8bc7919c0c7d73a/bcrypt-5.0.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:89042e61b5e808b67daf24a434d89bab164d4de1746b37a8d173b6b14f3db9ff", size = 277940, upload-time = "2025-09-25T19:50:00.869Z" }, + { url = "https://files.pythonhosted.org/packages/62/83/b3efc285d4aadc1fa83db385ec64dcfa1707e890eb42f03b127d66ac1b7b/bcrypt-5.0.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e3cf5b2560c7b5a142286f69bde914494b6d8f901aaa71e453078388a50881c4", size = 310776, upload-time = "2025-09-25T19:50:02.393Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/47ee337dacecde6d234890fe929936cb03ebc4c3a7460854bbd9c97780b8/bcrypt-5.0.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f632fd56fc4e61564f78b46a2269153122db34988e78b6be8b32d28507b7eaeb", size = 312922, upload-time = "2025-09-25T19:50:04.232Z" }, + { url = "https://files.pythonhosted.org/packages/d6/3a/43d494dfb728f55f4e1cf8fd435d50c16a2d75493225b54c8d06122523c6/bcrypt-5.0.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:801cad5ccb6b87d1b430f183269b94c24f248dddbbc5c1f78b6ed231743e001c", size = 341367, upload-time = "2025-09-25T19:50:05.559Z" }, + { url = "https://files.pythonhosted.org/packages/55/ab/a0727a4547e383e2e22a630e0f908113db37904f58719dc48d4622139b5c/bcrypt-5.0.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3cf67a804fc66fc217e6914a5635000259fbbbb12e78a99488e4d5ba445a71eb", size = 359187, upload-time = "2025-09-25T19:50:06.916Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bb/461f352fdca663524b4643d8b09e8435b4990f17fbf4fea6bc2a90aa0cc7/bcrypt-5.0.0-cp38-abi3-win32.whl", hash = "sha256:3abeb543874b2c0524ff40c57a4e14e5d3a66ff33fb423529c88f180fd756538", size = 153752, upload-time = "2025-09-25T19:50:08.515Z" }, + { url = "https://files.pythonhosted.org/packages/41/aa/4190e60921927b7056820291f56fc57d00d04757c8b316b2d3c0d1d6da2c/bcrypt-5.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:35a77ec55b541e5e583eb3436ffbbf53b0ffa1fa16ca6782279daf95d146dcd9", size = 150881, upload-time = "2025-09-25T19:50:09.742Z" }, + { url = "https://files.pythonhosted.org/packages/54/12/cd77221719d0b39ac0b55dbd39358db1cd1246e0282e104366ebbfb8266a/bcrypt-5.0.0-cp38-abi3-win_arm64.whl", hash = "sha256:cde08734f12c6a4e28dc6755cd11d3bdfea608d93d958fffbe95a7026ebe4980", size = 144931, upload-time = "2025-09-25T19:50:11.016Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ba/2af136406e1c3839aea9ecadc2f6be2bcd1eff255bd451dd39bcf302c47a/bcrypt-5.0.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0c418ca99fd47e9c59a301744d63328f17798b5947b0f791e9af3c1c499c2d0a", size = 495313, upload-time = "2025-09-25T19:50:12.309Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ee/2f4985dbad090ace5ad1f7dd8ff94477fe089b5fab2040bd784a3d5f187b/bcrypt-5.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddb4e1500f6efdd402218ffe34d040a1196c072e07929b9820f363a1fd1f4191", size = 275290, upload-time = "2025-09-25T19:50:13.673Z" }, + { url = "https://files.pythonhosted.org/packages/e4/6e/b77ade812672d15cf50842e167eead80ac3514f3beacac8902915417f8b7/bcrypt-5.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7aeef54b60ceddb6f30ee3db090351ecf0d40ec6e2abf41430997407a46d2254", size = 278253, upload-time = "2025-09-25T19:50:15.089Z" }, + { url = "https://files.pythonhosted.org/packages/36/c4/ed00ed32f1040f7990dac7115f82273e3c03da1e1a1587a778d8cea496d8/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f0ce778135f60799d89c9693b9b398819d15f1921ba15fe719acb3178215a7db", size = 276084, upload-time = "2025-09-25T19:50:16.699Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/fa6e16145e145e87f1fa351bbd54b429354fd72145cd3d4e0c5157cf4c70/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a71f70ee269671460b37a449f5ff26982a6f2ba493b3eabdd687b4bf35f875ac", size = 297185, upload-time = "2025-09-25T19:50:18.525Z" }, + { url = "https://files.pythonhosted.org/packages/24/b4/11f8a31d8b67cca3371e046db49baa7c0594d71eb40ac8121e2fc0888db0/bcrypt-5.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8429e1c410b4073944f03bd778a9e066e7fad723564a52ff91841d278dfc822", size = 278656, upload-time = "2025-09-25T19:50:19.809Z" }, + { url = "https://files.pythonhosted.org/packages/ac/31/79f11865f8078e192847d2cb526e3fa27c200933c982c5b2869720fa5fce/bcrypt-5.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:edfcdcedd0d0f05850c52ba3127b1fce70b9f89e0fe5ff16517df7e81fa3cbb8", size = 275662, upload-time = "2025-09-25T19:50:21.567Z" }, + { url = "https://files.pythonhosted.org/packages/d4/8d/5e43d9584b3b3591a6f9b68f755a4da879a59712981ef5ad2a0ac1379f7a/bcrypt-5.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:611f0a17aa4a25a69362dcc299fda5c8a3d4f160e2abb3831041feb77393a14a", size = 278240, upload-time = "2025-09-25T19:50:23.305Z" }, + { url = "https://files.pythonhosted.org/packages/89/48/44590e3fc158620f680a978aafe8f87a4c4320da81ed11552f0323aa9a57/bcrypt-5.0.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:db99dca3b1fdc3db87d7c57eac0c82281242d1eabf19dcb8a6b10eb29a2e72d1", size = 311152, upload-time = "2025-09-25T19:50:24.597Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/e4fbfc46f14f47b0d20493669a625da5827d07e8a88ee460af6cd9768b44/bcrypt-5.0.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5feebf85a9cefda32966d8171f5db7e3ba964b77fdfe31919622256f80f9cf42", size = 313284, upload-time = "2025-09-25T19:50:26.268Z" }, + { url = "https://files.pythonhosted.org/packages/25/ae/479f81d3f4594456a01ea2f05b132a519eff9ab5768a70430fa1132384b1/bcrypt-5.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3ca8a166b1140436e058298a34d88032ab62f15aae1c598580333dc21d27ef10", size = 341643, upload-time = "2025-09-25T19:50:28.02Z" }, + { url = "https://files.pythonhosted.org/packages/df/d2/36a086dee1473b14276cd6ea7f61aef3b2648710b5d7f1c9e032c29b859f/bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:61afc381250c3182d9078551e3ac3a41da14154fbff647ddf52a769f588c4172", size = 359698, upload-time = "2025-09-25T19:50:31.347Z" }, + { url = "https://files.pythonhosted.org/packages/c0/f6/688d2cd64bfd0b14d805ddb8a565e11ca1fb0fd6817175d58b10052b6d88/bcrypt-5.0.0-cp39-abi3-win32.whl", hash = "sha256:64d7ce196203e468c457c37ec22390f1a61c85c6f0b8160fd752940ccfb3a683", size = 153725, upload-time = "2025-09-25T19:50:34.384Z" }, + { url = "https://files.pythonhosted.org/packages/9f/b9/9d9a641194a730bda138b3dfe53f584d61c58cd5230e37566e83ec2ffa0d/bcrypt-5.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:64ee8434b0da054d830fa8e89e1c8bf30061d539044a39524ff7dec90481e5c2", size = 150912, upload-time = "2025-09-25T19:50:35.69Z" }, + { url = "https://files.pythonhosted.org/packages/27/44/d2ef5e87509158ad2187f4dd0852df80695bb1ee0cfe0a684727b01a69e0/bcrypt-5.0.0-cp39-abi3-win_arm64.whl", hash = "sha256:f2347d3534e76bf50bca5500989d6c1d05ed64b440408057a37673282c654927", size = 144953, upload-time = "2025-09-25T19:50:37.32Z" }, + { url = "https://files.pythonhosted.org/packages/8a/75/4aa9f5a4d40d762892066ba1046000b329c7cd58e888a6db878019b282dc/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7edda91d5ab52b15636d9c30da87d2cc84f426c72b9dba7a9b4fe142ba11f534", size = 271180, upload-time = "2025-09-25T19:50:38.575Z" }, + { url = "https://files.pythonhosted.org/packages/54/79/875f9558179573d40a9cc743038ac2bf67dfb79cecb1e8b5d70e88c94c3d/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4", size = 273791, upload-time = "2025-09-25T19:50:39.913Z" }, + { url = "https://files.pythonhosted.org/packages/bc/fe/975adb8c216174bf70fc17535f75e85ac06ed5252ea077be10d9cff5ce24/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dcd58e2b3a908b5ecc9b9df2f0085592506ac2d5110786018ee5e160f28e0911", size = 270746, upload-time = "2025-09-25T19:50:43.306Z" }, + { url = "https://files.pythonhosted.org/packages/e4/f8/972c96f5a2b6c4b3deca57009d93e946bbdbe2241dca9806d502f29dd3ee/bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:6b8f520b61e8781efee73cba14e3e8c9556ccfb375623f4f97429544734545b4", size = 273375, upload-time = "2025-09-25T19:50:45.43Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/2e/3e5079847e653b1f6dc647aa24549d68c6addb4c595cc0d902d1b19308ad/beautifulsoup4-4.13.5.tar.gz", hash = "sha256:5e70131382930e7c3de33450a2f54a63d5e4b19386eab43a5b34d594268f3695", size = 622954, upload-time = "2025-08-24T14:06:13.168Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl", hash = "sha256:642085eaa22233aceadff9c69651bc51e8bf3f874fb6d7104ece2beb24b47c4a", size = 105113, upload-time = "2025-08-24T14:06:14.884Z" }, +] + +[[package]] +name = "build" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "os_name == 'nt'" }, + { name = "packaging" }, + { name = "pyproject-hooks" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/e0/df5e171f685f82f37b12e1f208064e24244911079d7b767447d1af7e0d70/build-1.5.0.tar.gz", hash = "sha256:302c22c3ba2a0fd5f3911918651341ebb3896176cbdec15bd421f80b1afc7647", size = 89796, upload-time = "2026-04-30T03:18:25.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, +] + +[[package]] +name = "certifi" +version = "2026.6.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/c7/424b75da314c1045981bd9777432fad05a9e0c69daa4ed7e308bbaffe405/certifi-2026.6.17.tar.gz", hash = "sha256:024c88eeec92ca068db80f02b8b07c9cef7b9fe261d1d535abfd5abd6f6af432", size = 134594, upload-time = "2026-06-17T10:31:07.894Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/2f/c5464532e965badff2f4c4c1a3a83f5697f0d7c407ed0cda44aaa99bb451/certifi-2026.6.17-py3-none-any.whl", hash = "sha256:2227dcbaafe0d2f59279d1762ddddc37783ed4354594f194ffc31d20f41fc3db", size = 133289, upload-time = "2026-06-17T10:31:06.348Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/d7/b5b7020a0565c2e9fa8c09f4b5fa6232feb326b8c20081ccded47ea368fd/charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", size = 309705, upload-time = "2026-04-02T09:26:02.191Z" }, + { url = "https://files.pythonhosted.org/packages/5a/53/58c29116c340e5456724ecd2fff4196d236b98f3da97b404bc5e51ac3493/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", size = 206419, upload-time = "2026-04-02T09:26:03.583Z" }, + { url = "https://files.pythonhosted.org/packages/b2/02/e8146dc6591a37a00e5144c63f29fb7c97a734ea8a111190783c0e60ab63/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", size = 227901, upload-time = "2026-04-02T09:26:04.738Z" }, + { url = "https://files.pythonhosted.org/packages/fb/73/77486c4cd58f1267bf17db420e930c9afa1b3be3fe8c8b8ebbebc9624359/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", size = 222742, upload-time = "2026-04-02T09:26:06.36Z" }, + { url = "https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", size = 214061, upload-time = "2026-04-02T09:26:08.347Z" }, + { url = "https://files.pythonhosted.org/packages/dc/92/42bd3cefcf7687253fb86694b45f37b733c97f59af3724f356fa92b8c344/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", size = 199239, upload-time = "2026-04-02T09:26:09.823Z" }, + { url = "https://files.pythonhosted.org/packages/4c/3d/069e7184e2aa3b3cddc700e3dd267413dc259854adc3380421c805c6a17d/charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", size = 210173, upload-time = "2026-04-02T09:26:10.953Z" }, + { url = "https://files.pythonhosted.org/packages/62/51/9d56feb5f2e7074c46f93e0ebdbe61f0848ee246e2f0d89f8e20b89ebb8f/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", size = 209841, upload-time = "2026-04-02T09:26:12.142Z" }, + { url = "https://files.pythonhosted.org/packages/d2/59/893d8f99cc4c837dda1fe2f1139079703deb9f321aabcb032355de13b6c7/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", size = 200304, upload-time = "2026-04-02T09:26:13.711Z" }, + { url = "https://files.pythonhosted.org/packages/7d/1d/ee6f3be3464247578d1ed5c46de545ccc3d3ff933695395c402c21fa6b77/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", size = 229455, upload-time = "2026-04-02T09:26:14.941Z" }, + { url = "https://files.pythonhosted.org/packages/54/bb/8fb0a946296ea96a488928bdce8ef99023998c48e4713af533e9bb98ef07/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", size = 210036, upload-time = "2026-04-02T09:26:16.478Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bc/015b2387f913749f82afd4fcba07846d05b6d784dd16123cb66860e0237d/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", size = 224739, upload-time = "2026-04-02T09:26:17.751Z" }, + { url = "https://files.pythonhosted.org/packages/17/ab/63133691f56baae417493cba6b7c641571a2130eb7bceba6773367ab9ec5/charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", size = 216277, upload-time = "2026-04-02T09:26:18.981Z" }, + { url = "https://files.pythonhosted.org/packages/06/6d/3be70e827977f20db77c12a97e6a9f973631a45b8d186c084527e53e77a4/charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", size = 147819, upload-time = "2026-04-02T09:26:20.295Z" }, + { url = "https://files.pythonhosted.org/packages/20/d9/5f67790f06b735d7c7637171bbfd89882ad67201891b7275e51116ed8207/charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", size = 159281, upload-time = "2026-04-02T09:26:21.74Z" }, + { url = "https://files.pythonhosted.org/packages/ca/83/6413f36c5a34afead88ce6f66684d943d91f233d76dd083798f9602b75ae/charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", size = 147843, upload-time = "2026-04-02T09:26:22.901Z" }, + { url = "https://files.pythonhosted.org/packages/0c/eb/4fc8d0a7110eb5fc9cc161723a34a8a6c200ce3b4fbf681bc86feee22308/charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", size = 311328, upload-time = "2026-04-02T09:26:24.331Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e3/0fadc706008ac9d7b9b5be6dc767c05f9d3e5df51744ce4cc9605de7b9f4/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", size = 208061, upload-time = "2026-04-02T09:26:25.568Z" }, + { url = "https://files.pythonhosted.org/packages/42/f0/3dd1045c47f4a4604df85ec18ad093912ae1344ac706993aff91d38773a2/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", size = 229031, upload-time = "2026-04-02T09:26:26.865Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/675a46eb016118a2fbde5a277a5d15f4f69d5f3f5f338e5ee2f8948fcf43/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", size = 225239, upload-time = "2026-04-02T09:26:28.044Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f8/d0118a2f5f23b02cd166fa385c60f9b0d4f9194f574e2b31cef350ad7223/charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", size = 216589, upload-time = "2026-04-02T09:26:29.239Z" }, + { url = "https://files.pythonhosted.org/packages/b1/f1/6d2b0b261b6c4ceef0fcb0d17a01cc5bc53586c2d4796fa04b5c540bc13d/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", size = 202733, upload-time = "2026-04-02T09:26:30.5Z" }, + { url = "https://files.pythonhosted.org/packages/6f/c0/7b1f943f7e87cc3db9626ba17807d042c38645f0a1d4415c7a14afb5591f/charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", size = 212652, upload-time = "2026-04-02T09:26:31.709Z" }, + { url = "https://files.pythonhosted.org/packages/38/dd/5a9ab159fe45c6e72079398f277b7d2b523e7f716acc489726115a910097/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", size = 211229, upload-time = "2026-04-02T09:26:33.282Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ff/531a1cad5ca855d1c1a8b69cb71abfd6d85c0291580146fda7c82857caa1/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", size = 203552, upload-time = "2026-04-02T09:26:34.845Z" }, + { url = "https://files.pythonhosted.org/packages/c1/4c/a5fb52d528a8ca41f7598cb619409ece30a169fbdf9cdce592e53b46c3a6/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", size = 230806, upload-time = "2026-04-02T09:26:36.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/7a/071feed8124111a32b316b33ae4de83d36923039ef8cf48120266844285b/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", size = 212316, upload-time = "2026-04-02T09:26:37.672Z" }, + { url = "https://files.pythonhosted.org/packages/fd/35/f7dba3994312d7ba508e041eaac39a36b120f32d4c8662b8814dab876431/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464", size = 227274, upload-time = "2026-04-02T09:26:38.93Z" }, + { url = "https://files.pythonhosted.org/packages/8a/2d/a572df5c9204ab7688ec1edc895a73ebded3b023bb07364710b05dd1c9be/charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", size = 218468, upload-time = "2026-04-02T09:26:40.17Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/890922a8b03a568ca2f336c36585a4713c55d4d67bf0f0c78924be6315ca/charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", size = 148460, upload-time = "2026-04-02T09:26:41.416Z" }, + { url = "https://files.pythonhosted.org/packages/35/d9/0e7dffa06c5ab081f75b1b786f0aefc88365825dfcd0ac544bdb7b2b6853/charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", size = 159330, upload-time = "2026-04-02T09:26:42.554Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5d/481bcc2a7c88ea6b0878c299547843b2521ccbc40980cb406267088bc701/charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", size = 147828, upload-time = "2026-04-02T09:26:44.075Z" }, + { url = "https://files.pythonhosted.org/packages/c1/3b/66777e39d3ae1ddc77ee606be4ec6d8cbd4c801f65e5a1b6f2b11b8346dd/charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", size = 309627, upload-time = "2026-04-02T09:26:45.198Z" }, + { url = "https://files.pythonhosted.org/packages/2e/4e/b7f84e617b4854ade48a1b7915c8ccfadeba444d2a18c291f696e37f0d3b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", size = 207008, upload-time = "2026-04-02T09:26:46.824Z" }, + { url = "https://files.pythonhosted.org/packages/c4/bb/ec73c0257c9e11b268f018f068f5d00aa0ef8c8b09f7753ebd5f2880e248/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", size = 228303, upload-time = "2026-04-02T09:26:48.397Z" }, + { url = "https://files.pythonhosted.org/packages/85/fb/32d1f5033484494619f701e719429c69b766bfc4dbc61aa9e9c8c166528b/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", size = 224282, upload-time = "2026-04-02T09:26:49.684Z" }, + { url = "https://files.pythonhosted.org/packages/fa/07/330e3a0dda4c404d6da83b327270906e9654a24f6c546dc886a0eb0ffb23/charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", size = 215595, upload-time = "2026-04-02T09:26:50.915Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7c/fc890655786e423f02556e0216d4b8c6bcb6bdfa890160dc66bf52dee468/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", size = 201986, upload-time = "2026-04-02T09:26:52.197Z" }, + { url = "https://files.pythonhosted.org/packages/d8/97/bfb18b3db2aed3b90cf54dc292ad79fdd5ad65c4eae454099475cbeadd0d/charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", size = 211711, upload-time = "2026-04-02T09:26:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/6f/a5/a581c13798546a7fd557c82614a5c65a13df2157e9ad6373166d2a3e645d/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", size = 210036, upload-time = "2026-04-02T09:26:54.975Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bf/b3ab5bcb478e4193d517644b0fb2bf5497fbceeaa7a1bc0f4d5b50953861/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", size = 202998, upload-time = "2026-04-02T09:26:56.303Z" }, + { url = "https://files.pythonhosted.org/packages/e7/4e/23efd79b65d314fa320ec6017b4b5834d5c12a58ba4610aa353af2e2f577/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", size = 230056, upload-time = "2026-04-02T09:26:57.554Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9f/1e1941bc3f0e01df116e68dc37a55c4d249df5e6fa77f008841aef68264f/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", size = 211537, upload-time = "2026-04-02T09:26:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/80/0f/088cbb3020d44428964a6c97fe1edfb1b9550396bf6d278330281e8b709c/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", size = 226176, upload-time = "2026-04-02T09:27:00.437Z" }, + { url = "https://files.pythonhosted.org/packages/6a/9f/130394f9bbe06f4f63e22641d32fc9b202b7e251c9aef4db044324dac493/charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", size = 217723, upload-time = "2026-04-02T09:27:02.021Z" }, + { url = "https://files.pythonhosted.org/packages/73/55/c469897448a06e49f8fa03f6caae97074fde823f432a98f979cc42b90e69/charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", size = 148085, upload-time = "2026-04-02T09:27:03.192Z" }, + { url = "https://files.pythonhosted.org/packages/5d/78/1b74c5bbb3f99b77a1715c91b3e0b5bdb6fe302d95ace4f5b1bec37b0167/charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", size = 158819, upload-time = "2026-04-02T09:27:04.454Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/46bd42279d323deb8687c4a5a811fd548cb7d1de10cf6535d099877a9a9f/charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", size = 147915, upload-time = "2026-04-02T09:27:05.971Z" }, + { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" }, + { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" }, + { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" }, + { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" }, + { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" }, + { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" }, + { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" }, + { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" }, + { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" }, + { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" }, + { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" }, + { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" }, + { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" }, + { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" }, + { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" }, + { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" }, + { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" }, + { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" }, + { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" }, +] + +[[package]] +name = "chromadb" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bcrypt" }, + { name = "build" }, + { name = "grpcio" }, + { name = "httpx" }, + { name = "importlib-resources" }, + { name = "jsonschema" }, + { name = "kubernetes" }, + { name = "mmh3" }, + { name = "numpy" }, + { name = "onnxruntime" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-sdk" }, + { name = "orjson" }, + { name = "overrides" }, + { name = "posthog" }, + { name = "pybase64" }, + { name = "pydantic" }, + { name = "pypika" }, + { name = "pyyaml" }, + { name = "rich" }, + { name = "tenacity" }, + { name = "tokenizers" }, + { name = "tqdm" }, + { name = "typer" }, + { name = "typing-extensions" }, + { name = "uvicorn", extra = ["standard"] }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7f/48/11851dddeadad6abe36ee071fedc99b5bdd2c324df3afa8cb952ae02798b/chromadb-1.1.1.tar.gz", hash = "sha256:ebfce0122753e306a76f1e291d4ddaebe5f01b5979b97ae0bc80b1d4024ff223", size = 1338109, upload-time = "2025-10-05T02:49:14.834Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/59/0d881a9b7eb63d8d2446cf67fcbb53fb8ae34991759d2b6024a067e90a9a/chromadb-1.1.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:27fe0e25ef0f83fb09c30355ab084fe6f246808a7ea29e8c19e85cf45785b90d", size = 19175479, upload-time = "2025-10-05T02:49:12.525Z" }, + { url = "https://files.pythonhosted.org/packages/94/4f/5a9fa317c84c98e70af48f74b00aa25589626c03a0428b4381b2095f3d73/chromadb-1.1.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:95aed58869683f12e7dcbf68b039fe5f576dbe9d1b86b8f4d014c9d077ccafd2", size = 18267188, upload-time = "2025-10-05T02:49:09.236Z" }, + { url = "https://files.pythonhosted.org/packages/45/1a/02defe2f1c8d1daedb084bbe85f5b6083510a3ba192ed57797a3649a4310/chromadb-1.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:06776dad41389a00e7d63d936c3a15c179d502becaf99f75745ee11b062c9b6a", size = 18855754, upload-time = "2025-10-05T02:49:03.299Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0d/80be82717e5dc19839af24558494811b6f2af2b261a8f21c51b872193b09/chromadb-1.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bba0096a7f5e975875ead23a91c0d41d977fbd3767f60d3305a011b0ace7afd3", size = 19893681, upload-time = "2025-10-05T02:49:06.481Z" }, + { url = "https://files.pythonhosted.org/packages/2d/6e/956e62975305a4e31daf6114a73b3b0683a8f36f8d70b20aabd466770edb/chromadb-1.1.1-cp39-abi3-win_amd64.whl", hash = "sha256:a77aa026a73a18181fd89bbbdb86191c9a82fd42aa0b549ff18d8cae56394c8b", size = 19844042, upload-time = "2025-10-05T02:49:16.925Z" }, +] + +[[package]] +name = "click" +version = "8.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "crewai" +version = "1.14.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiofiles" }, + { name = "aiosqlite" }, + { name = "appdirs" }, + { name = "chromadb" }, + { name = "click" }, + { name = "crewai-cli" }, + { name = "crewai-core" }, + { name = "httpx" }, + { name = "instructor" }, + { name = "json-repair" }, + { name = "json5" }, + { name = "jsonref" }, + { name = "lancedb" }, + { name = "mcp" }, + { name = "openai" }, + { name = "openpyxl" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-sdk" }, + { name = "pdfplumber" }, + { name = "portalocker" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt" }, + { name = "python-dotenv" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "tokenizers" }, + { name = "tomli" }, + { name = "tomli-w" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/f7/5f3182520d418708468613f0d74d8e01831f79ad6416b4eb37b10ada8fb2/crewai-1.14.7.tar.gz", hash = "sha256:85e35d4290470c9fe434c35e58055407a36c2600a0465add589133769febb371", size = 7665248, upload-time = "2026-06-11T17:14:42.062Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/de/2b553b4b67f2044c3ca3d69949a715655e62e2eecd61bb40bfc4b9c9f62a/crewai-1.14.7-py3-none-any.whl", hash = "sha256:6deeaa883927f76f02b2c417494572f9fbd9873c5a2b82ae733062b83ddc0da8", size = 1007553, upload-time = "2026-06-11T17:14:39.912Z" }, +] + +[package.optional-dependencies] +anthropic = [ + { name = "anthropic" }, +] + +[[package]] +name = "crewai-cli" +version = "1.14.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appdirs" }, + { name = "certifi" }, + { name = "click" }, + { name = "crewai-core" }, + { name = "cryptography" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt" }, + { name = "python-dotenv" }, + { name = "rich" }, + { name = "textual" }, + { name = "tomli" }, + { name = "tomli-w" }, + { name = "uv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/6e/afd4a96296c1add13e92957702fe2cd74a52f79d5e183c2846183fa0d1eb/crewai_cli-1.14.7.tar.gz", hash = "sha256:cb8f363a77cbe05f73bfda388f971d53b66bc3f37f84addafc1af0cdd43d6af4", size = 111556, upload-time = "2026-06-11T17:14:44.827Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/11/7b72aee4a9fe820924114448f66e8172b4bc104c61227ed24241b1ceb04b/crewai_cli-1.14.7-py3-none-any.whl", hash = "sha256:01c073e0a1db5a56f830af20dc85816f43da820d738850103c9a8d50d834588e", size = 111463, upload-time = "2026-06-11T17:14:43.589Z" }, +] + +[[package]] +name = "crewai-core" +version = "1.14.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appdirs" }, + { name = "cryptography" }, + { name = "httpx" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-sdk" }, + { name = "packaging" }, + { name = "portalocker" }, + { name = "pydantic" }, + { name = "pyjwt" }, + { name = "rich" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/1e/6ecde20a9761e2492f973f9f89b667da57f613d26d615a3d12962774e489/crewai_core-1.14.7.tar.gz", hash = "sha256:c8c16f29abb515380c45b729c22fca3ade29a51d25211ce5ac63b50f7af7179e", size = 20908, upload-time = "2026-06-11T17:14:46.807Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/71/e551211ae4e4e3fc0c32cd31b097719c12d3841f84fe86cc557aa76eef2d/crewai_core-1.14.7-py3-none-any.whl", hash = "sha256:244a16baff22d6925a46f87114d32c14494c687dd97479be5467a3a432e7e4d6", size = 28877, upload-time = "2026-06-11T17:14:45.815Z" }, +] + +[[package]] +name = "crewai-tools" +version = "1.14.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, + { name = "crewai" }, + { name = "pymupdf" }, + { name = "python-docx" }, + { name = "pytube" }, + { name = "requests" }, + { name = "tiktoken" }, + { name = "youtube-transcript-api" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/f6/48b9de65470ca5857b6513500864a4b25bc0fe630ad7d8dd762fecd39f31/crewai_tools-1.14.7.tar.gz", hash = "sha256:7b19aec91d86a08a31da8b7753d8a8b74e22f1bbac96c75e182295f7a1daf948", size = 895021, upload-time = "2026-06-11T17:14:51.598Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/57/2ceb2cfec8845e3d9e358c441cb382f82c9b3b8b964384d665e290e565b0/crewai_tools-1.14.7-py3-none-any.whl", hash = "sha256:e6f1b0a36b40a43ba57c42519cf9320c59a937cfd1a5c110246ae0c7bc99d595", size = 809653, upload-time = "2026-06-11T17:14:49.845Z" }, +] + +[[package]] +name = "cryptography" +version = "49.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/99/d1c90d6041656cc6ee229dc99cd67fd0cd5aec3c5f7d72fffc27cc750054/cryptography-49.0.0.tar.gz", hash = "sha256:f89660a348f4f78a92366240a61404e337586ef7f5909a2fef59ca88ef505493", size = 854345, upload-time = "2026-06-12T20:02:30.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/22/adf66990e63584a68dfb50c24f48a125c07b1699899381c8151e63ed458c/cryptography-49.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:966fe0e9c67490071f14c0d2b1cb2dfb3023c5ce39457343931415f08382f2db", size = 4032100, upload-time = "2026-06-12T20:02:32.143Z" }, + { url = "https://files.pythonhosted.org/packages/09/41/3797cfaf69cae04a13ee78ebd83f0678d9c02b4779d21ce24445326f1a69/cryptography-49.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:36d1709f992593689b45bda411498d62c6e365f2ca00b84657d4dadd24de16db", size = 4692978, upload-time = "2026-06-12T20:01:21.305Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8b/43011f7ebe515a8aa20d61f290a326cd890c2e738e16e59eaff8d9c3a412/cryptography-49.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e959b578856a3924bc0cbb710fc12c387b9412a951389f3ca61704a9e25f325", size = 4716422, upload-time = "2026-06-12T20:01:48.566Z" }, + { url = "https://files.pythonhosted.org/packages/4a/91/01ce7303a4579e6d3a6abef01bd322848e9ea7a219adcabc5048b9033571/cryptography-49.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:53ecee2e23f7169b6117e99fc8a944e5e50f79e69758a83b52a00cb98ab2b2d2", size = 4700503, upload-time = "2026-06-12T20:02:47.091Z" }, + { url = "https://files.pythonhosted.org/packages/62/99/a2c95cf8293f07491e9e27c20cc4dcd18176d944e674679adeb1d0173fd6/cryptography-49.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:2eda353d8a27bcbcaa4cbed18994a74ab4d19a2ca897db188ea269ab9b71419b", size = 5309779, upload-time = "2026-06-12T20:02:08.987Z" }, + { url = "https://files.pythonhosted.org/packages/20/2c/0622f20ff02b2ef32558733443805dc82fd4c275be01b2d19d14676f3a1b/cryptography-49.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2afe9051da7ae7bd5905da5a949280c7d2bb75682e188f650a9d0f2756b834c6", size = 4749683, upload-time = "2026-06-12T20:02:03.335Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5b/c5246635d5fd3b64e0d45ae10e99fd32fe9676a79915ccfe5a61ba9af1a5/cryptography-49.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:0b82e28ee398a386f0807bba7884d30f25218855690f45115831bcce5d90822c", size = 4337874, upload-time = "2026-06-12T20:02:54.323Z" }, + { url = "https://files.pythonhosted.org/packages/6d/88/05563c7fe2e914e87d1a536d06fe83e66b4e1d95cb593e05aea375531da8/cryptography-49.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ccac2bfebc306b862133e3bb71f3f6ee8bb525240089b2d952e4144b3a6d5da7", size = 4700283, upload-time = "2026-06-12T20:01:34.822Z" }, + { url = "https://files.pythonhosted.org/packages/c4/b6/d7696e4e890d6ae1469935164c9e5215c557671cb78d6e3f458ccceaa632/cryptography-49.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d0527ce944105f257f605a827d6ebead966c752038b6e8656abb9c5edee6fc68", size = 5265844, upload-time = "2026-06-12T20:01:24.09Z" }, + { url = "https://files.pythonhosted.org/packages/a9/3c/f3ad17eecc1a57b0ba236dc01f90e783c51f4a2f35f64777cc4f47a184b2/cryptography-49.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:cbc77da8c523d5abd028635ba850a6966fcee2c82e2bf65a41d1d8afe0f98be9", size = 4749290, upload-time = "2026-06-12T20:01:30.848Z" }, + { url = "https://files.pythonhosted.org/packages/4f/01/339573cf1023163a400b0b5d16f6d507de413b9f60be6fd1b77feeaf6737/cryptography-49.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b87e65d263b3e5d3bb92a57e2a6638e2f31110fa7aa890c7b2dbba42248d0a3f", size = 4834612, upload-time = "2026-06-12T20:01:29.246Z" }, + { url = "https://files.pythonhosted.org/packages/71/fd/577302e213a1be9468f92d1afef66fcf1ef83d516819d9992ca547f592bd/cryptography-49.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:66ec79c3904820572d7e987abdf304281f141d37ad9a489b8e97066e7b9b6459", size = 4980804, upload-time = "2026-06-12T20:01:42.853Z" }, + { url = "https://files.pythonhosted.org/packages/1f/09/f42b1d190c5ba75f72062a387f8030d1d75f6ab035788f1d9c4b01de6525/cryptography-49.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:e5dfc1e64de5677cec922ffa8da89c546d0415bf6efdf081842e5d44c84e1f0e", size = 3810026, upload-time = "2026-06-12T20:02:39.262Z" }, + { url = "https://files.pythonhosted.org/packages/ec/9e/db72b3ae7fc9cfad53e630e56c6ae83b9b6ff0bf3718ffb8012d20b3aabf/cryptography-49.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:73a205dce83953d131a4aa1e0fd917a2fd1c5b1eef251e9d7152efefcbf5caf7", size = 4013892, upload-time = "2026-06-12T20:02:10.735Z" }, + { url = "https://files.pythonhosted.org/packages/86/12/c48a424f38db03027be9f7ed5c7dc5de9933dbee992865f98b13727a009d/cryptography-49.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:196ecd6a36e4e9aa10270393bb98d8df88fccee0bf1e5128b91ae4eb4375896d", size = 4678835, upload-time = "2026-06-12T20:02:48.743Z" }, + { url = "https://files.pythonhosted.org/packages/68/28/8a3ad4653662c93fc44dc4e5d8fd374c25c42e07b34bbfbadf49cf57a5a8/cryptography-49.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7abcee80084cda3f7691f3eb1ce480d8df49cec637b429aa35986c1de71738aa", size = 4697239, upload-time = "2026-06-12T20:02:56.03Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b2/2193fc74f81aee4f9b62733133b73b5176718932ed8f2e4b03fa040480a6/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:4ae387c9cb68ea569ca17e490d66d8142b81c3cc814bf179974b7d146e490bbb", size = 4685593, upload-time = "2026-06-12T20:02:50.666Z" }, + { url = "https://files.pythonhosted.org/packages/47/f1/1d3eaa243bfc5de4a187b22aa8c048b3e4980bfbe830ac46e6bac2e66947/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:f37d847238971164fdbc68ade6f6574aecc9c0af714190e2083429ff68f4ce9d", size = 5289961, upload-time = "2026-06-12T20:01:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/58/39/2d51306721330c486495853eda1c567880ff036de15a14c4b74f399934af/cryptography-49.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:c2bc30226390d60ea19d9f82b19db005fe0452154a23c1c410c12ea801e43561", size = 4731145, upload-time = "2026-06-12T20:02:16.832Z" }, + { url = "https://files.pythonhosted.org/packages/17/50/983e838c7fd0d87fd8c969bcdd328edaf5f756e38df5281637424c155873/cryptography-49.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:07cab27cc7b7e0fd28e5e26bb9eeedde5c135c868b46de4a27845abe94af6122", size = 4321719, upload-time = "2026-06-12T20:02:52.611Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f5/8f571d7e27c55bce9f76f026143bcb1e040a4233149ecca0bea5fa5dd5f7/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:b20133d204d2bb56ba047642199603876c872026ca53e79c35b83772ab2cc505", size = 4685209, upload-time = "2026-06-12T20:02:07.282Z" }, + { url = "https://files.pythonhosted.org/packages/e7/84/0e27016a6fc5a0886f797018b26aa42f40c09a82332bff77822a451deaaa/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b970c6da94d5bb18629db453d14f2a1300f6bf59b61e9b82377931ef95504866", size = 5246285, upload-time = "2026-06-12T20:01:32.439Z" }, + { url = "https://files.pythonhosted.org/packages/11/2d/5e1fb307cb5931881516b464c98774b3f2c36b5d4bb9a2830253cf553cad/cryptography-49.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:d8ecde755e2e91bf773fc94e8c9d730cd7f2007004cb492263a794ec3899a1c8", size = 4730441, upload-time = "2026-06-12T20:02:01.469Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c0/bff5a02ee731d207d6a1ed51732549d8c53d2bc8da1d10ec6f2844201d68/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e3fb64c420688e5319ae25113a354015abbd8dffbfbc41781a1ea66fc7622ac3", size = 4815869, upload-time = "2026-06-12T20:01:36.574Z" }, + { url = "https://files.pythonhosted.org/packages/b9/26/814681d14248d95d73d5c3eea0c39a94eb8302df966f670a2c60de90974b/cryptography-49.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32703d93296f5c1f4b53349ad3a250c2cae0fdecd3a3dd5d47e616d8d616af27", size = 4960948, upload-time = "2026-06-12T20:02:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/93ecac273d3738939d023612ad12cca9a3740a5345d69fda04134c43fd96/cryptography-49.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:33cd0565932807baddb67b96dbee92f2c374b5c89dee09fd74079aeb8c8dba61", size = 3799153, upload-time = "2026-06-12T20:01:39.059Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/5bb823f5bedcf80718cea7fbc95ec5515cca3769633c4b01a32be7f30e7c/cryptography-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ec5e529fb80935c94fe7b729f9972b50e351a0e6b50aa294fd5cabb109fcc29a", size = 4025947, upload-time = "2026-06-12T20:01:25.745Z" }, + { url = "https://files.pythonhosted.org/packages/3d/df/40577043ca124e17012f408ddddaeb213b856336ac82ddb3bc915f39e29f/cryptography-49.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f78ff2c9ed8dc2d036b0f4d640e22522213d047c1b14e61205a7e55c80a494d4", size = 4692429, upload-time = "2026-06-12T20:01:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/2c/99/2d13299eb3dd27b02dcfaafcc91d6b5cb3329f7cbd6d8f51921acd566c1a/cryptography-49.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:35b151772baff2c74cba7fa290ceaff4c3b11c0c881eb93eb5dbc05a7cfbba18", size = 4700968, upload-time = "2026-06-12T20:02:45.383Z" }, + { url = "https://files.pythonhosted.org/packages/a5/4d/9c0cd02f95e2602dd5e563da149ee0830abef3537be8b34dc56281ebe27a/cryptography-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f21641cf4b30fca7aee061ced0ec7ad7b073518088b7c9969a297c0ae796c69", size = 4697758, upload-time = "2026-06-12T20:01:41.13Z" }, + { url = "https://files.pythonhosted.org/packages/24/01/186c825898477d77e2324d5360fefe622ff1d8d1963ec0554e2cada8ec77/cryptography-49.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9e82dcc8e56052715fb18b2429e3bca4823b1629136a2084fc45a9a5cecb9b64", size = 5298863, upload-time = "2026-06-12T20:02:24.579Z" }, + { url = "https://files.pythonhosted.org/packages/b8/7b/62cbbab75d0659865bf0273790031544a0b16c8072d258f9428dcd8190dc/cryptography-49.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6f2debedf9ca60cf1d5bd466475638af5130f89965605cd818484d19987d3a21", size = 4735983, upload-time = "2026-06-12T20:01:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/6c/72/3e798c064bc39e471008075d0f9bc9daf77a80879c092e4a8e170c585ed4/cryptography-49.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:8c25ceb16df5b9435f3f6a9829204985b0e0cbee3b48aacd432c7d2c850b44d9", size = 4334173, upload-time = "2026-06-12T20:01:44.743Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ee/6fca21d1ac73e06f8bef71940abfd4d2f6472b4bca284d770f32bd4086f6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:28d8b15e6275f12c8a207dc309dfa957903c927d08d0cc937ee3f63f200693cc", size = 4697298, upload-time = "2026-06-12T20:02:20.918Z" }, + { url = "https://files.pythonhosted.org/packages/67/d0/a5fcd3515f0bae49a7b6d0413cc1bdccdcc1fc0047037a0d480642cdc5d6/cryptography-49.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6fc361c34fb6aac015ce19435876635e5c6d21db31998b0920f675f131e043b8", size = 5254338, upload-time = "2026-06-12T20:02:22.737Z" }, + { url = "https://files.pythonhosted.org/packages/a0/84/84fe36f19caf857d61cb7fc9c63035a47ffabd84ea12d1d393148efa3615/cryptography-49.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:2400ef9c9e2299a25614eb1dea3db54a69b1349efd043bfac9c67630d136df36", size = 4735650, upload-time = "2026-06-12T20:02:41.389Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/db537264e234f7273a73ec020873d6d6b39dfd8a53db78b550ca8320440e/cryptography-49.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:67e1d20ad9ef3a563c59ef22e7a8a0b8210bd26604369ea4a30a7c66aefe504e", size = 4834820, upload-time = "2026-06-12T20:01:51.847Z" }, + { url = "https://files.pythonhosted.org/packages/93/77/8df9eb486495979bccecd1062e2eaf435250e84437040295b57d09048b0b/cryptography-49.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:42b0684e0e40cf26122427802486f6d93aea593612603a94fbf260c7eb1e9c1b", size = 4967968, upload-time = "2026-06-12T20:02:12.524Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e6/f60198ea8d9dfa15fff9ed4ca02ce362f6eadd9ba757dcc50634c4257b63/cryptography-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:026ac7423e6fa66872d3bf889be5974507da3944f866f704fa200eadacd00001", size = 3785547, upload-time = "2026-06-12T20:02:26.847Z" }, + { url = "https://files.pythonhosted.org/packages/63/d3/4a83af35d65e3fad632c926fad684c193ea4398569ccb0bbbc7fe8f5dc9a/cryptography-49.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:fc1e275c2f1d97b1a6450b8b0ea3ebfa6e087a611c2b26cb2404d48588abab7b", size = 3993685, upload-time = "2026-06-12T20:02:14.883Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a7/f9dac0ab7f80368c56993a7bf638ef9935f825c91902798481fac0898138/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83782480a4a9da4d0feb51950131ba32e12e70813848b3343f6e18c28a66838", size = 4676239, upload-time = "2026-06-12T20:02:28.793Z" }, + { url = "https://files.pythonhosted.org/packages/d7/70/2ba3769dd0ae167e2f33dfa9592d45db6ff9a61d62ca1a5b3d1bdd09068f/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b39efa323140595abd3ecca8529d321ae50f55f3aa3ba9cc81ea56a6011953d5", size = 4715584, upload-time = "2026-06-12T20:01:27.495Z" }, + { url = "https://files.pythonhosted.org/packages/94/64/2923570ac1c0bd3a737aa366ac3abbbbde273042308b8cde95e2364a6e6a/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:b47db11c2c3525083296069b98ac5221907455e989ae0c2e3008bde851921615", size = 4675885, upload-time = "2026-06-12T20:01:55.49Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f8/614dc7e051418cfe53d55173c1e24c6b0085e89996fe90508c2fdf769aef/cryptography-49.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:084ef1af862eb07ec46d25f68689f2102a9fc0e05ce7b80f14f5fe51e4eef0f6", size = 4715449, upload-time = "2026-06-12T20:02:05.469Z" }, + { url = "https://files.pythonhosted.org/packages/aa/50/a9caea39ad19c431c1a3f8a31114df65b260cdfe67786b6c7e7c040c4c44/cryptography-49.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:be9fcb48a55f023493482827d4f459bd263cc20efde64f204b97c123201850c6", size = 3783731, upload-time = "2026-06-12T20:02:43.319Z" }, +] + +[[package]] +name = "db-dtypes" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pyarrow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/9f/5569a989ad23915e51fd1b4a52ecbc7513832c1c7b5e5df262bcecae1b21/db_dtypes-1.7.0.tar.gz", hash = "sha256:30951c7cda9e5455e43636eebe041c9a637ff28bc49a95d82cb68759d7625467", size = 35793, upload-time = "2026-06-03T14:52:07.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/7a/797ed371bde520223e49dbbe0f8762fa4cc724d0e21fc6af944bb8f82150/db_dtypes-1.7.0-py3-none-any.whl", hash = "sha256:c80a1d9bc7dda3cc63638a3f2cf4ec27af50b809ec2d92b8a94cb9d8438cdc76", size = 17740, upload-time = "2026-06-03T14:51:15.287Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "deprecation" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/d3/8ae2869247df154b64c1884d7346d412fed0c49df84db635aab2d1c40e62/deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff", size = 173788, upload-time = "2020-04-20T14:23:38.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/c3/253a89ee03fc9b9682f1541728eb66db7db22148cd94f89ab22528cd1e1b/deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a", size = 11178, upload-time = "2020-04-20T14:23:36.581Z" }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + +[[package]] +name = "docstring-parser" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/4d/f332313098c1de1b2d2ff91cf2674415cc7cddab2ca1b01ae29774bd5fdf/docstring_parser-0.18.0.tar.gz", hash = "sha256:292510982205c12b1248696f44959db3cdd1740237a968ea1e2e7a900eeb2015", size = 29341, upload-time = "2026-04-14T04:09:19.867Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/5f/ed01f9a3cdffbd5a008556fc7b2a08ddb1cc6ace7effa7340604b1d16699/docstring_parser-0.18.0-py3-none-any.whl", hash = "sha256:b3fcbed555c47d8479be0796ef7e19c2670d428d72e96da63f3a40122860374b", size = 22484, upload-time = "2026-04-14T04:09:18.638Z" }, +] + +[[package]] +name = "durationpy" +version = "0.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/a4/e44218c2b394e31a6dd0d6b095c4e1f32d0be54c2a4b250032d717647bab/durationpy-0.10.tar.gz", hash = "sha256:1fa6893409a6e739c9c72334fc65cca1f355dbdd93405d30f726deb5bde42fba", size = 3335, upload-time = "2025-05-17T13:52:37.26Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/0d/9feae160378a3553fa9a339b0e9c1a048e147a4127210e286ef18b730f03/durationpy-0.10-py3-none-any.whl", hash = "sha256:3b41e1b601234296b4fb368338fdcd3e13e0b4fb5b67345948f4f2bf9868b286", size = 3922, upload-time = "2025-05-17T13:52:36.463Z" }, +] + +[[package]] +name = "ecdsa" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/ca/8de7744cb3bc966c85430ca2d0fcaeea872507c6a4cf6e007f7fe269ed9d/ecdsa-0.19.2.tar.gz", hash = "sha256:62635b0ac1ca2e027f82122b5b81cb706edc38cd91c63dda28e4f3455a2bf930", size = 202432, upload-time = "2026-03-26T09:58:17.675Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/79/119091c98e2bf49e24ed9f3ae69f816d715d2904aefa6a2baa039a2ba0b0/ecdsa-0.19.2-py2.py3-none-any.whl", hash = "sha256:840f5dc5e375c68f36c1a7a5b9caad28f95daa65185c9253c0c08dd952bb7399", size = 150818, upload-time = "2026-03-26T09:58:15.808Z" }, +] + +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "fastapi" +version = "0.115.14" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/53/8c38a874844a8b0fa10dd8adf3836ac154082cf88d3f22b544e9ceea0a15/fastapi-0.115.14.tar.gz", hash = "sha256:b1de15cdc1c499a4da47914db35d0e4ef8f1ce62b624e94e0e5824421df99739", size = 296263, upload-time = "2025-06-26T15:29:08.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/50/b1222562c6d270fea83e9c9075b8e8600b8479150a18e4516a6138b980d1/fastapi-0.115.14-py3-none-any.whl", hash = "sha256:6c0c8bf9420bd58f565e585036d971872472b4f7d3f6c73b698e10cffdefb3ca", size = 95514, upload-time = "2025-06-26T15:29:06.49Z" }, +] + +[[package]] +name = "filelock" +version = "3.29.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/dc/be6cbe99670cd6e4ad387123647cb08e0c32975e223f82551e914c5568a6/filelock-3.29.4.tar.gz", hash = "sha256:10cdb3656fc44541cdf30652a93fb10ec6b05325620eb316bd26893e4201538a", size = 63028, upload-time = "2026-06-13T16:12:00.744Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/37/a065dc3bd6e49423a6532c642ca7378d3f467b1ef44c2800c937af7f9739/filelock-3.29.4-py3-none-any.whl", hash = "sha256:dac1648087d5115554850d113e7dd8c83ab2d38e3435dde2d4f163847e57b767", size = 42757, upload-time = "2026-06-13T16:11:59.582Z" }, +] + +[[package]] +name = "filetype" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/29/745f7d30d47fe0f251d3ad3dc2978a23141917661998763bebb6da007eb1/filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb", size = 998020, upload-time = "2022-11-02T17:34:04.141Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970, upload-time = "2022-11-02T17:34:01.425Z" }, +] + +[[package]] +name = "flatbuffers" +version = "25.12.19" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/03/077f869d540370db12165c0aa51640a873fb661d8b315d1d4d67b284d7ac/frozenlist-1.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:09474e9831bc2b2199fad6da3c14c7b0fbdd377cce9d3d77131be28906cb7d84", size = 86912, upload-time = "2025-10-06T05:35:45.98Z" }, + { url = "https://files.pythonhosted.org/packages/df/b5/7610b6bd13e4ae77b96ba85abea1c8cb249683217ef09ac9e0ae93f25a91/frozenlist-1.8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:17c883ab0ab67200b5f964d2b9ed6b00971917d5d8a92df149dc2c9779208ee9", size = 50046, upload-time = "2025-10-06T05:35:47.009Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ef/0e8f1fe32f8a53dd26bdd1f9347efe0778b0fddf62789ea683f4cc7d787d/frozenlist-1.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fa47e444b8ba08fffd1c18e8cdb9a75db1b6a27f17507522834ad13ed5922b93", size = 50119, upload-time = "2025-10-06T05:35:48.38Z" }, + { url = "https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f", size = 231067, upload-time = "2025-10-06T05:35:49.97Z" }, + { url = "https://files.pythonhosted.org/packages/45/7e/afe40eca3a2dc19b9904c0f5d7edfe82b5304cb831391edec0ac04af94c2/frozenlist-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:957e7c38f250991e48a9a73e6423db1bb9dd14e722a10f6b8bb8e16a0f55f695", size = 233160, upload-time = "2025-10-06T05:35:51.729Z" }, + { url = "https://files.pythonhosted.org/packages/a6/aa/7416eac95603ce428679d273255ffc7c998d4132cfae200103f164b108aa/frozenlist-1.8.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8585e3bb2cdea02fc88ffa245069c36555557ad3609e83be0ec71f54fd4abb52", size = 228544, upload-time = "2025-10-06T05:35:53.246Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3d/2a2d1f683d55ac7e3875e4263d28410063e738384d3adc294f5ff3d7105e/frozenlist-1.8.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:edee74874ce20a373d62dc28b0b18b93f645633c2943fd90ee9d898550770581", size = 243797, upload-time = "2025-10-06T05:35:54.497Z" }, + { url = "https://files.pythonhosted.org/packages/78/1e/2d5565b589e580c296d3bb54da08d206e797d941a83a6fdea42af23be79c/frozenlist-1.8.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c9a63152fe95756b85f31186bddf42e4c02c6321207fd6601a1c89ebac4fe567", size = 247923, upload-time = "2025-10-06T05:35:55.861Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/65872fcf1d326a7f101ad4d86285c403c87be7d832b7470b77f6d2ed5ddc/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b6db2185db9be0a04fecf2f241c70b63b1a242e2805be291855078f2b404dd6b", size = 230886, upload-time = "2025-10-06T05:35:57.399Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/ac9ced601d62f6956f03cc794f9e04c81719509f85255abf96e2510f4265/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:f4be2e3d8bc8aabd566f8d5b8ba7ecc09249d74ba3c9ed52e54dc23a293f0b92", size = 245731, upload-time = "2025-10-06T05:35:58.563Z" }, + { url = "https://files.pythonhosted.org/packages/b9/49/ecccb5f2598daf0b4a1415497eba4c33c1e8ce07495eb07d2860c731b8d5/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c8d1634419f39ea6f5c427ea2f90ca85126b54b50837f31497f3bf38266e853d", size = 241544, upload-time = "2025-10-06T05:35:59.719Z" }, + { url = "https://files.pythonhosted.org/packages/53/4b/ddf24113323c0bbcc54cb38c8b8916f1da7165e07b8e24a717b4a12cbf10/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:1a7fa382a4a223773ed64242dbe1c9c326ec09457e6b8428efb4118c685c3dfd", size = 241806, upload-time = "2025-10-06T05:36:00.959Z" }, + { url = "https://files.pythonhosted.org/packages/a7/fb/9b9a084d73c67175484ba2789a59f8eebebd0827d186a8102005ce41e1ba/frozenlist-1.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:11847b53d722050808926e785df837353bd4d75f1d494377e59b23594d834967", size = 229382, upload-time = "2025-10-06T05:36:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/95/a3/c8fb25aac55bf5e12dae5c5aa6a98f85d436c1dc658f21c3ac73f9fa95e5/frozenlist-1.8.0-cp311-cp311-win32.whl", hash = "sha256:27c6e8077956cf73eadd514be8fb04d77fc946a7fe9f7fe167648b0b9085cc25", size = 39647, upload-time = "2025-10-06T05:36:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/0a/f5/603d0d6a02cfd4c8f2a095a54672b3cf967ad688a60fb9faf04fc4887f65/frozenlist-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:ac913f8403b36a2c8610bbfd25b8013488533e71e62b4b4adce9c86c8cea905b", size = 44064, upload-time = "2025-10-06T05:36:04.368Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/c2c9ab44e181f043a86f9a8f84d5124b62dbcb3a02c0977ec72b9ac1d3e0/frozenlist-1.8.0-cp311-cp311-win_arm64.whl", hash = "sha256:d4d3214a0f8394edfa3e303136d0575eece0745ff2b47bd2cb2e66dd92d4351a", size = 39937, upload-time = "2025-10-06T05:36:05.669Z" }, + { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, + { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, + { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, + { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, + { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, + { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, + { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, + { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, + { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, + { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, + { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, + { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, + { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, + { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, + { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, + { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, + { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, + { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, + { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, + { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, + { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, + { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, + { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, + { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, + { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, + { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, + { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, + { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, + { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, + { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, + { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, + { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, + { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, + { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, + { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, + { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, + { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, + { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, + { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, + { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, + { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, + { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, + { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, + { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, + { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, + { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, + { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, + { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, + { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, + { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, + { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, + { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, +] + +[[package]] +name = "fsspec" +version = "2026.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/a1/ae4e3e5003468d6391d2c77b6fa1cd73bd5d13511d81c642d7b28ac90ed4/fsspec-2026.6.0.tar.gz", hash = "sha256:f5bac145310fe30e16e1471bd6840b2d990d609e872251d7e674241822abf01a", size = 313646, upload-time = "2026-06-16T01:57:28.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/22/4222d7ddf3da30f363edaa98e329c2bce6c65497c9cb2810931c8b2c0fbc/fsspec-2026.6.0-py3-none-any.whl", hash = "sha256:02e0b71817df9b2169dc30a16832045764def1191b43dcff5bb85bdee212d2a1", size = 203949, upload-time = "2026-06-16T01:57:26.358Z" }, +] + +[[package]] +name = "google-api-core" +version = "2.25.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth" }, + { name = "googleapis-common-protos" }, + { name = "proto-plus" }, + { name = "protobuf" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/cd/63f1557235c2440fe0577acdbc32577c5c002684c58c7f4d770a92366a24/google_api_core-2.25.2.tar.gz", hash = "sha256:1c63aa6af0d0d5e37966f157a77f9396d820fba59f9e43e9415bc3dc5baff300", size = 166266, upload-time = "2025-10-03T00:07:34.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/d8/894716a5423933f5c8d2d5f04b16f052a515f78e815dab0c2c6f1fd105dc/google_api_core-2.25.2-py3-none-any.whl", hash = "sha256:e9a8f62d363dc8424a8497f4c2a47d6bcda6c16514c935629c257ab5d10210e7", size = 162489, upload-time = "2025-10-03T00:07:32.924Z" }, +] + +[package.optional-dependencies] +grpc = [ + { name = "grpcio" }, + { name = "grpcio-status" }, +] + +[[package]] +name = "google-api-python-client" +version = "2.197.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core" }, + { name = "google-auth" }, + { name = "google-auth-httplib2" }, + { name = "httplib2" }, + { name = "uritemplate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/09/081d66357118bd260f8f182cb1b2dd5bd32ca88e3714d7c93896cab946fc/google_api_python_client-2.197.0.tar.gz", hash = "sha256:32e03977eda4a66eafc6ae58dc9ec46426b6025636d5ef019c5703013eddd4e5", size = 14707398, upload-time = "2026-05-28T20:23:12.498Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e5/e9cc221fd75230974d4ef45eb72d2261feca3c110d5554215d516bfe6534/google_api_python_client-2.197.0-py3-none-any.whl", hash = "sha256:0f8b89aa75768161dd4f5092d6bcb386c13236b32e0d9a938c02f71342094d14", size = 15287302, upload-time = "2026-05-28T20:23:09.683Z" }, +] + +[[package]] +name = "google-auth" +version = "2.55.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "pyasn1-modules" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/1c/70b23fc52b2bb3c70b379f3bd05c4a60ab3a873e30c6bd21c57e0154848a/google_auth-2.55.0.tar.gz", hash = "sha256:fcd3a130f575fa36403d38774af1c64a4fbfbca09215f0589d2372b5119697cb", size = 349379, upload-time = "2026-06-15T22:33:16.466Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/71/c0321dc6d63d99946da45f7c06299b934e4f7f7da5c4f14d101bcb39adf1/google_auth-2.55.0-py3-none-any.whl", hash = "sha256:a17cef9dedf98c4ebae2fb0c48c8f75952c877cbc2efe09f329ef16c2783d88a", size = 252400, upload-time = "2026-06-15T22:33:14.992Z" }, +] + +[package.optional-dependencies] +pyopenssl = [ + { name = "pyopenssl" }, +] +requests = [ + { name = "requests" }, +] + +[[package]] +name = "google-auth-httplib2" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth" }, + { name = "httplib2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/b3/f192c8bc7e41e0ebdbd95afcae4783417a34b6a6af62d22daf22c3fd38fc/google_auth_httplib2-0.4.0.tar.gz", hash = "sha256:d5b030a204b7a4b4d553ba9ca701b62481ee2b74419325580be70f7d85ffed35", size = 11161, upload-time = "2026-05-07T08:03:46.878Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/be/954c35a62b9e31de66b0a43c225c9b6bb9e0f98d6b1dc110a2308e3644f5/google_auth_httplib2-0.4.0-py3-none-any.whl", hash = "sha256:8e55cfafa3358cba85f6cad4a886138e88e158d71e7e5c9ee5936a5c1507fb91", size = 9529, upload-time = "2026-05-07T08:02:12.375Z" }, +] + +[[package]] +name = "google-cloud-aiplatform" +version = "1.148.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "docstring-parser" }, + { name = "google-api-core", extra = ["grpc"] }, + { name = "google-auth" }, + { name = "google-cloud-bigquery" }, + { name = "google-cloud-resource-manager" }, + { name = "google-cloud-storage" }, + { name = "google-genai" }, + { name = "packaging" }, + { name = "proto-plus" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/f3/b2a9417014c93858a2e3266134f931eefd972c2d410b25d7b8782fc6f143/google_cloud_aiplatform-1.148.1.tar.gz", hash = "sha256:75d605fba34e68714bd08e1e482755d0a6e3ae972805f809d088e686c30879e7", size = 10278758, upload-time = "2026-04-17T23:45:26.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/5b/e3515d7bbba602c2b0f6a0da5431785e897252443682e4735d0e6873dc8f/google_cloud_aiplatform-1.148.1-py2.py3-none-any.whl", hash = "sha256:035101e2d8e65c6a706cc3930b2452de7ddcbde50dd130320fcea0d8b03b0c5a", size = 8434481, upload-time = "2026-04-17T23:45:22.919Z" }, +] + +[[package]] +name = "google-cloud-bigquery" +version = "3.42.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", extra = ["grpc"] }, + { name = "google-auth", extra = ["pyopenssl"] }, + { name = "google-cloud-core" }, + { name = "google-resumable-media" }, + { name = "packaging" }, + { name = "python-dateutil" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/97/a6/3d40767763061323d70ecf1870d9d5f428ee6a7e66f7b6e7297ee17f8b30/google_cloud_bigquery-3.42.0.tar.gz", hash = "sha256:4491a75f82d905101e75b690ca4c6791984bf4f50653706747537b05baa90213", size = 514647, upload-time = "2026-06-15T22:55:34.21Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/27/6ab5688744a08c15770ad10a4e430b16365f3ff95d9a59e565d47ce27175/google_cloud_bigquery-3.42.0-py3-none-any.whl", hash = "sha256:9df6a73043363cad17000c29591ed829be5f630ec30b85b29bc29062ab8b19a4", size = 263751, upload-time = "2026-06-15T22:55:32.352Z" }, +] + +[[package]] +name = "google-cloud-bigquery-storage" +version = "2.39.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", extra = ["grpc"] }, + { name = "google-auth" }, + { name = "grpcio" }, + { name = "proto-plus" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1b/85/c998751fb4182b84872df7eafcdd2f68e325c791102b65d416975c020020/google_cloud_bigquery_storage-2.39.0.tar.gz", hash = "sha256:d5afd90ad06cf24d9167316cca70ab5b344e880fc13031d7392aa78ee76b8bb6", size = 309852, upload-time = "2026-06-03T15:13:01.874Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/f6/4157466c10181907d07786fb41df5d0a9ff339c1770b9e2a15cfe483e845/google_cloud_bigquery_storage-2.39.0-py3-none-any.whl", hash = "sha256:8c192b6263804f7bdd6f57a17e763ba7f03fa4e53d7ecafca0187e0fd6467d48", size = 305958, upload-time = "2026-06-03T15:12:15.889Z" }, +] + +[[package]] +name = "google-cloud-core" +version = "2.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core" }, + { name = "google-auth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a8/dd/1eef226e470369b26824a505c34482c0b493bc35fe8e0c6b003b5feca21a/google_cloud_core-2.6.0.tar.gz", hash = "sha256:e76149739f90fac1fc6757c09f47eaccb3145b54adbd7759b0f7c4b235f46c83", size = 36001, upload-time = "2026-05-07T08:04:04.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/4a/98da8930ab109c73d9a5d13782a9ebb81ea8c111f6d534a567b71d23e52b/google_cloud_core-2.6.0-py3-none-any.whl", hash = "sha256:6d63ac8e5eca6d9e4319d0a1e2265fadcd7f1049904378caecfa01cf52dd869e", size = 29390, upload-time = "2026-05-07T08:02:34.672Z" }, +] + +[[package]] +name = "google-cloud-modelarmor" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", extra = ["grpc"] }, + { name = "google-auth" }, + { name = "grpcio" }, + { name = "proto-plus" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/cd/992805c34262651b27a31e2807f47d1dad630df06c9d1037577e41823027/google_cloud_modelarmor-0.7.0.tar.gz", hash = "sha256:2ac62135620cdfc610ad9d9b3f92553de0d27343b693f021fd2012f1898d4ac6", size = 166306, upload-time = "2026-06-12T18:03:24.055Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/d1/ca292cb90e107d29fdb33912f96437965e3ca27e3d76831852dde5527f93/google_cloud_modelarmor-0.7.0-py3-none-any.whl", hash = "sha256:a3cf05b1e6bc95ea3dd3cc3f8e19b5fdd12a249ac25b61650c32b0206e60038f", size = 142088, upload-time = "2026-06-12T18:03:05.397Z" }, +] + +[[package]] +name = "google-cloud-resource-manager" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", extra = ["grpc"] }, + { name = "google-auth" }, + { name = "grpc-google-iam-v1" }, + { name = "grpcio" }, + { name = "proto-plus" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/1a/13060cabf553d52d151d2afc26b39561e82853380d499dd525a0d422d9f0/google_cloud_resource_manager-1.17.0.tar.gz", hash = "sha256:0f486b62e2c58ff992a3a50fa0f4a96eef7750aa6c971bb373398ccb91828660", size = 464971, upload-time = "2026-03-26T22:17:29.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/f7/661d7a9023e877a226b5683429c3662f75a29ef45cb1464cf39adb689218/google_cloud_resource_manager-1.17.0-py3-none-any.whl", hash = "sha256:e479baf4b014a57f298e01b8279e3290b032e3476d69c8e5e1427af8f82739a5", size = 404403, upload-time = "2026-03-26T22:15:26.57Z" }, +] + +[[package]] +name = "google-cloud-storage" +version = "3.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core" }, + { name = "google-auth" }, + { name = "google-cloud-core" }, + { name = "google-crc32c" }, + { name = "google-resumable-media" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/ef/7cefdca67a6c8b3af0ec38612f9e78e5a9f6179dd91352772ae1a9849246/google_cloud_storage-3.4.1.tar.gz", hash = "sha256:6f041a297e23a4b485fad8c305a7a6e6831855c208bcbe74d00332a909f82268", size = 17238203, upload-time = "2025-10-08T18:43:39.665Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/6e/b47d83d3a35231c6232566341b0355cce78fd4e6988a7343725408547b2c/google_cloud_storage-3.4.1-py3-none-any.whl", hash = "sha256:972764cc0392aa097be8f49a5354e22eb47c3f62370067fb1571ffff4a1c1189", size = 290142, upload-time = "2025-10-08T18:43:37.524Z" }, +] + +[[package]] +name = "google-crc32c" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/41/4b9c02f99e4c5fb477122cd5437403b552873f014616ac1d19ac8221a58d/google_crc32c-1.8.0.tar.gz", hash = "sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79", size = 14192, upload-time = "2025-12-16T00:35:25.142Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/ef/21ccfaab3d5078d41efe8612e0ed0bfc9ce22475de074162a91a25f7980d/google_crc32c-1.8.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:014a7e68d623e9a4222d663931febc3033c5c7c9730785727de2a81f87d5bab8", size = 31298, upload-time = "2025-12-16T00:20:32.241Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b8/f8413d3f4b676136e965e764ceedec904fe38ae8de0cdc52a12d8eb1096e/google_crc32c-1.8.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:86cfc00fe45a0ac7359e5214a1704e51a99e757d0272554874f419f79838c5f7", size = 30872, upload-time = "2025-12-16T00:33:58.785Z" }, + { url = "https://files.pythonhosted.org/packages/f6/fd/33aa4ec62b290477181c55bb1c9302c9698c58c0ce9a6ab4874abc8b0d60/google_crc32c-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:19b40d637a54cb71e0829179f6cb41835f0fbd9e8eb60552152a8b52c36cbe15", size = 33243, upload-time = "2025-12-16T00:40:21.46Z" }, + { url = "https://files.pythonhosted.org/packages/71/03/4820b3bd99c9653d1a5210cb32f9ba4da9681619b4d35b6a052432df4773/google_crc32c-1.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:17446feb05abddc187e5441a45971b8394ea4c1b6efd88ab0af393fd9e0a156a", size = 33608, upload-time = "2025-12-16T00:40:22.204Z" }, + { url = "https://files.pythonhosted.org/packages/7c/43/acf61476a11437bf9733fb2f70599b1ced11ec7ed9ea760fdd9a77d0c619/google_crc32c-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:71734788a88f551fbd6a97be9668a0020698e07b2bf5b3aa26a36c10cdfb27b2", size = 34439, upload-time = "2025-12-16T00:35:20.458Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5f/7307325b1198b59324c0fa9807cafb551afb65e831699f2ce211ad5c8240/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:4b8286b659c1335172e39563ab0a768b8015e88e08329fa5321f774275fc3113", size = 31300, upload-time = "2025-12-16T00:21:56.723Z" }, + { url = "https://files.pythonhosted.org/packages/21/8e/58c0d5d86e2220e6a37befe7e6a94dd2f6006044b1a33edf1ff6d9f7e319/google_crc32c-1.8.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:2a3dc3318507de089c5384cc74d54318401410f82aa65b2d9cdde9d297aca7cb", size = 30867, upload-time = "2025-12-16T00:38:31.302Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411", size = 33364, upload-time = "2025-12-16T00:40:22.96Z" }, + { url = "https://files.pythonhosted.org/packages/21/3f/3457ea803db0198c9aaca2dd373750972ce28a26f00544b6b85088811939/google_crc32c-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454", size = 33740, upload-time = "2025-12-16T00:40:23.96Z" }, + { url = "https://files.pythonhosted.org/packages/df/c0/87c2073e0c72515bb8733d4eef7b21548e8d189f094b5dad20b0ecaf64f6/google_crc32c-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:3cc0c8912038065eafa603b238abf252e204accab2a704c63b9e14837a854962", size = 34437, upload-time = "2025-12-16T00:35:21.395Z" }, + { url = "https://files.pythonhosted.org/packages/d1/db/000f15b41724589b0e7bc24bc7a8967898d8d3bc8caf64c513d91ef1f6c0/google_crc32c-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:3ebb04528e83b2634857f43f9bb8ef5b2bbe7f10f140daeb01b58f972d04736b", size = 31297, upload-time = "2025-12-16T00:23:20.709Z" }, + { url = "https://files.pythonhosted.org/packages/d7/0d/8ebed0c39c53a7e838e2a486da8abb0e52de135f1b376ae2f0b160eb4c1a/google_crc32c-1.8.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:450dc98429d3e33ed2926fc99ee81001928d63460f8538f21a5d6060912a8e27", size = 30867, upload-time = "2025-12-16T00:43:14.628Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/b468aec74a0354b34c8cbf748db20d6e350a68a2b0912e128cabee49806c/google_crc32c-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa", size = 33344, upload-time = "2025-12-16T00:40:24.742Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e8/b33784d6fc77fb5062a8a7854e43e1e618b87d5ddf610a88025e4de6226e/google_crc32c-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8", size = 33694, upload-time = "2025-12-16T00:40:25.505Z" }, + { url = "https://files.pythonhosted.org/packages/92/b1/d3cbd4d988afb3d8e4db94ca953df429ed6db7282ed0e700d25e6c7bfc8d/google_crc32c-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:57a50a9035b75643996fbf224d6661e386c7162d1dfdab9bc4ca790947d1007f", size = 34435, upload-time = "2025-12-16T00:35:22.107Z" }, + { url = "https://files.pythonhosted.org/packages/21/88/8ecf3c2b864a490b9e7010c84fd203ec8cf3b280651106a3a74dd1b0ca72/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:e6584b12cb06796d285d09e33f63309a09368b9d806a551d8036a4207ea43697", size = 31301, upload-time = "2025-12-16T00:24:48.527Z" }, + { url = "https://files.pythonhosted.org/packages/36/c6/f7ff6c11f5ca215d9f43d3629163727a272eabc356e5c9b2853df2bfe965/google_crc32c-1.8.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:f4b51844ef67d6cf2e9425983274da75f18b1597bb2c998e1c0a0e8d46f8f651", size = 30868, upload-time = "2025-12-16T00:48:12.163Z" }, + { url = "https://files.pythonhosted.org/packages/56/15/c25671c7aad70f8179d858c55a6ae8404902abe0cdcf32a29d581792b491/google_crc32c-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b0d1a7afc6e8e4635564ba8aa5c0548e3173e41b6384d7711a9123165f582de2", size = 33381, upload-time = "2025-12-16T00:40:26.268Z" }, + { url = "https://files.pythonhosted.org/packages/42/fa/f50f51260d7b0ef5d4898af122d8a7ec5a84e2984f676f746445f783705f/google_crc32c-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8b3f68782f3cbd1bce027e48768293072813469af6a61a86f6bb4977a4380f21", size = 33734, upload-time = "2025-12-16T00:40:27.028Z" }, + { url = "https://files.pythonhosted.org/packages/08/a5/7b059810934a09fb3ccb657e0843813c1fee1183d3bc2c8041800374aa2c/google_crc32c-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:d511b3153e7011a27ab6ee6bb3a5404a55b994dc1a7322c0b87b29606d9790e2", size = 34878, upload-time = "2025-12-16T00:35:23.142Z" }, + { url = "https://files.pythonhosted.org/packages/52/c5/c171e4d8c44fec1422d801a6d2e5d7ddabd733eeda505c79730ee9607f07/google_crc32c-1.8.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:87fa445064e7db928226b2e6f0d5304ab4cd0339e664a4e9a25029f384d9bb93", size = 28615, upload-time = "2025-12-16T00:40:29.298Z" }, + { url = "https://files.pythonhosted.org/packages/9c/97/7d75fe37a7a6ed171a2cf17117177e7aab7e6e0d115858741b41e9dd4254/google_crc32c-1.8.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c", size = 28800, upload-time = "2025-12-16T00:40:30.322Z" }, +] + +[[package]] +name = "google-genai" +version = "1.75.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "google-auth", extra = ["requests"] }, + { name = "httpx" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "sniffio" }, + { name = "tenacity" }, + { name = "typing-extensions" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9d/59/3ed61240ef20b3ae6ed54e82c6f8b6d1f194947bc6679679dd6cdb037594/google_genai-1.75.0.tar.gz", hash = "sha256:56bac3991b311c93f980c0a2abcd287b672146905df1fbd71c92ed633d5a07cf", size = 539039, upload-time = "2026-05-04T22:48:54.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/b6/552d40e96da22921eb1fead7c14b00b5b5473a20e45959488660fab35ee2/google_genai-1.75.0-py3-none-any.whl", hash = "sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c", size = 793726, upload-time = "2026-05-04T22:48:53.033Z" }, +] + +[[package]] +name = "google-resumable-media" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-crc32c" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/f8/1ca5781d6be9cb9f73f7d40f4958c4bd1226a60598e3e39e1d6aaf838c4b/google_resumable_media-2.10.0.tar.gz", hash = "sha256:e324bc9d0fdae4c52a08ae90456edc4e71ece858399e1217ac0eb3a51d6bc6ee", size = 2164570, upload-time = "2026-06-03T16:14:26.103Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/d8/00c6854ac1512bb9eaf13bd3f8f28222f7674947fc510a4ff7616f2efc80/google_resumable_media-2.10.0-py3-none-any.whl", hash = "sha256:88152884bee37b2bf36a0ab81ad8c7fd12212c9803dd981d77c1b35b02d34e7c", size = 81533, upload-time = "2026-06-03T16:13:12.51Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.75.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/c8/f439cffde755cffa462bfbb156278fa6f9d09119719af9814b858fd4f81f/googleapis_common_protos-1.75.0.tar.gz", hash = "sha256:53a062ff3c32552fbd62c11fe23768b78e4ddf0494d5e5fd97d3f4689c75fbbd", size = 151035, upload-time = "2026-05-07T08:04:49.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/c8/e2645aa8ed02fd4c7a2f59d68783b65b1f3cbdfe39a6308e156509d1fee8/googleapis_common_protos-1.75.0-py3-none-any.whl", hash = "sha256:961ed60399c457ceb0ee8f285a84c870aabc9c6a832b9d37bb281b5bebde43ed", size = 300631, upload-time = "2026-05-07T08:03:30.345Z" }, +] + +[package.optional-dependencies] +grpc = [ + { name = "grpcio" }, +] + +[[package]] +name = "greenlet" +version = "3.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dd/8b/befc3cb36965f397d87e86fb3b00e3ec0dc67c1ecb0986d7f54ee528f018/greenlet-3.5.2.tar.gz", hash = "sha256:c1b906220d83c140361cdd12eef970fb5881a168b98ee58a43786426173da14c", size = 199243, upload-time = "2026-06-17T20:19:01.317Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/68/371ee6dad168be3386c46030bedaa8e3e7e3cf3d203621d4529e78ff36ef/greenlet-3.5.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d7792398872f89466c6671d5d193537eff163ecf7fac78d82e6ddc25017fb4f5", size = 286925, upload-time = "2026-06-17T17:33:17.928Z" }, + { url = "https://files.pythonhosted.org/packages/26/16/ed5706c26b4d26f3fabceb79abca992654eac8b0fa435def2ac6dbd92122/greenlet-3.5.2-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:711028c953cd6ce5dc01bbb5a1747e3ad6bd8b2f7ded73778bb936e8dab9e3b6", size = 606036, upload-time = "2026-06-17T18:07:18.538Z" }, + { url = "https://files.pythonhosted.org/packages/8e/32/f9c77093af9f5f96615922b7e3fe3690a9faff02adb89f1d74e21578b147/greenlet-3.5.2-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5eba55076d79e8a5176e6925295cfb901ebc95dae493342ede22230f75d8bee2", size = 617821, upload-time = "2026-06-17T18:29:41.317Z" }, + { url = "https://files.pythonhosted.org/packages/27/f5/a963a939039aa5acafc2f9535f6cc8958ad30afe1478e2e37ab5098af74d/greenlet-3.5.2-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1724499fc08388208408681c53c5062e9803c334e5a0bdaeb616228ba882aac8", size = 625675, upload-time = "2026-06-17T18:39:25.767Z" }, + { url = "https://files.pythonhosted.org/packages/bd/d4/642833e778c17d32b5cabb793e14ce7364c55952462fc506fecdee55d485/greenlet-3.5.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1c1e5ad80f1f38ea479b83b39dccb20874cfe9ad5e52f87225fa294ba4d39a1", size = 616877, upload-time = "2026-06-17T17:39:26.564Z" }, + { url = "https://files.pythonhosted.org/packages/ef/c8/995a898ebbf44e3da0b7ea6fbc1631518c185fb83467a5d6cf408d6d3ced/greenlet-3.5.2-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:e976f9f6941f57d87a194c91868622c8b22a142a741d2fde31655c319133ade6", size = 420572, upload-time = "2026-06-17T18:41:18.035Z" }, + { url = "https://files.pythonhosted.org/packages/d3/cc/7120f83e78b8be3cf7acbe2306b3b7bd2cbf99f5ad12e85e2f05d7b31961/greenlet-3.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e194b996aa1b89d933cfe136e5eb39b22a8b72ba59d376ef39a55bca4dbf47f", size = 1577274, upload-time = "2026-06-17T18:22:10.692Z" }, + { url = "https://files.pythonhosted.org/packages/fa/d8/05a0074ee485dd51c320fd706fd7ed48006b9cad3443092d7df1a655f0d2/greenlet-3.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e554809538bd4867f24421b43abde170f9c9b8192149b30df5e164bcac6124f", size = 1643566, upload-time = "2026-06-17T17:40:05.452Z" }, + { url = "https://files.pythonhosted.org/packages/35/fe/9fe2060bdeece682e38d381184ae66045b48ed183c107ab3f88b9886a630/greenlet-3.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:e063263ce9047878480d7e536012fc8b7c8e1922989eb5f03b9ab998a2ee7b7e", size = 238643, upload-time = "2026-06-17T17:37:03.039Z" }, + { url = "https://files.pythonhosted.org/packages/41/13/a9db72f5b6b700977ebd371d6a1f2984a08838357de924fcd5571607b1bf/greenlet-3.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:a3f76a94e2d6e1fee8f302265679d8cc47d71a203936dd03c6e2ace0f9cfd46d", size = 237135, upload-time = "2026-06-17T17:34:34.14Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7a/6bc2a7835731387ed303b9390ce68a116ab053df05450a59181239200454/greenlet-3.5.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:76dae33e97b52743a19210931ee3e78a88fe1438bc2fc4ee5e7512d289bfad4f", size = 288351, upload-time = "2026-06-17T17:36:17.019Z" }, + { url = "https://files.pythonhosted.org/packages/57/1b/bd98062fcef6d0e9d0873ab6f2d029772e6ea342972ae43275bd6177900f/greenlet-3.5.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:30252d191d6959df1d040b559a38fc017139606c5ecc2ad00416557c0355d742", size = 604273, upload-time = "2026-06-17T18:07:20.296Z" }, + { url = "https://files.pythonhosted.org/packages/25/e6/fe392c522bf45d976abe7db2793f6ef4e87b053ebb869deeaae46aeb54da/greenlet-3.5.2-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1adc23c50f22b0f5979521909a8360ab4a3d3bef8b641ce633a04cf1b1c967ea", size = 616536, upload-time = "2026-06-17T18:29:43.205Z" }, + { url = "https://files.pythonhosted.org/packages/42/df/cdb1f75f07214f13110e7e3879531f11c26083bd480a56a9474c430ec44c/greenlet-3.5.2-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87359c23eb4e8f1b16da68faad29bf5aeb80e3628d7d8e4aa2e41c36879ddedd", size = 621843, upload-time = "2026-06-17T18:39:27.507Z" }, + { url = "https://files.pythonhosted.org/packages/68/4a/399ff81fa93a19d6a9df394cef0355f082dbc19ad41aba9593cd0ad444e2/greenlet-3.5.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1f052fff492c52fdfa99bd3b3c1389a53de37dae76a0562741417f0d018f02b3", size = 613749, upload-time = "2026-06-17T17:39:28.148Z" }, + { url = "https://files.pythonhosted.org/packages/2e/25/36a3628a7edcfeefddd3101dc88039c79721c5f8d688db7ebed1cbaaa789/greenlet-3.5.2-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:f4d67c1684db3f9782c37ee4bade3f86f5a23a8fcf3f8359224106018ca40728", size = 424889, upload-time = "2026-06-17T18:41:19.469Z" }, + { url = "https://files.pythonhosted.org/packages/a5/75/f519593f12ad43d08e28c03a95cfe2eeae011707dbc9dab0c4a263ce90f9/greenlet-3.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:120b77c2a18ebf629c3a7886f68c6d01e065654844ad468f15bb93ace66f2094", size = 1573725, upload-time = "2026-06-17T18:22:12.023Z" }, + { url = "https://files.pythonhosted.org/packages/f1/bc/bc1ea4b0754c6c51bbf9d94677b0b1f7fbda8cbb404e44a896854fc0a940/greenlet-3.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a850f6224088ef7dcc70f1a545cb6b3d119c35d6dca63b925b9f35da0635cdad", size = 1638132, upload-time = "2026-06-17T17:40:06.971Z" }, + { url = "https://files.pythonhosted.org/packages/36/c0/f0f5a34247df60de285f75f22e57f14027f4b3c43820981854b5b643ca6d/greenlet-3.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:89da99ee8345b458ea2f16831dad31c88ddcdec454b48704d569a0b8fb28f146", size = 239393, upload-time = "2026-06-17T17:33:47.09Z" }, + { url = "https://files.pythonhosted.org/packages/09/17/a8544e165445f30aea67a8d9cf2786d2bb0eb1b0e0d224b4d9bd80e2d587/greenlet-3.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:ca92411942154023c65851e6077d8ca0d00f19de5fa80bb2c6f196ff6c920ba9", size = 237723, upload-time = "2026-06-17T17:36:47.776Z" }, + { url = "https://files.pythonhosted.org/packages/d0/3c/bb37b9d40d65b0741a8b040ca5c307034d0a9822994dff5f825c88dd7a6b/greenlet-3.5.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:0629377725977252159de1ebd3c6e49c170a63856e585446797bb3d66d4d9c34", size = 287178, upload-time = "2026-06-17T17:35:25.132Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a6/0c5902393f492f8ceb19d0b5cf139284e3a11b333a049739643b1036b6f8/greenlet-3.5.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2ddf9eddc617681108dd071b3feabf3f4a4cd64846254aec4d4ceda098b639a", size = 606900, upload-time = "2026-06-17T18:07:21.692Z" }, + { url = "https://files.pythonhosted.org/packages/d8/7c/42899c31d4b87148ae4e3f87f63e13398824be6241f4dde42ded95768a34/greenlet-3.5.2-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f41feb9f2b59e2e61ac9bea4e344ddd9396bf3cacb2583f73a3595ed7df6f8e7", size = 619265, upload-time = "2026-06-17T18:29:44.837Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7e/28f991affb413b232b1e7d768db24c37b3f4d5daecc3f19b455d40bd2dea/greenlet-3.5.2-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9dc23f0e5ad76415457212a4b947d22ebe4dc80baf02adf7dd5647a90f38bb4e", size = 625044, upload-time = "2026-06-17T18:39:29.046Z" }, + { url = "https://files.pythonhosted.org/packages/d3/52/4ff8c98d3cfe62b4515f8584ae14510a58f35c549cc5292b78d9b7a40b70/greenlet-3.5.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09201fa698768db245920b00fdc86ee3e73540f01ca6db162be9632642e1a473", size = 616187, upload-time = "2026-06-17T17:39:29.473Z" }, + { url = "https://files.pythonhosted.org/packages/29/05/0cc9ec660e7acff85f93b0a048b6654371c822c884add44c02a465cf70e0/greenlet-3.5.2-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:423167363c510a75b649f5cd58d873c29498ea03598b9e4b1c3b73e0f899f3d5", size = 427322, upload-time = "2026-06-17T18:41:20.892Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a6/269c8bf9aefc13361ce1088f0e392b154cb21005de7862e42b5d782b81fd/greenlet-3.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a1759fa4f14c398508cf20dc8037de55cc23ae8bd14c185c2718257837195ca5", size = 1573778, upload-time = "2026-06-17T18:22:13.497Z" }, + { url = "https://files.pythonhosted.org/packages/1f/9b/391d015cbc6323e81b14c02cf825fdca7e0049c9bb489bf4ac72883118ba/greenlet-3.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9318cdeb9abdbfdd8bc8464ee4a06dffde2c7846e1def138365a6240ab2c9a5", size = 1638092, upload-time = "2026-06-17T17:40:08.163Z" }, + { url = "https://files.pythonhosted.org/packages/49/53/5b4df711f4356c62e85d9f819d87966d526d1cfb32bae49a8f7d6fc36ea4/greenlet-3.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:2c3b3311af72b3d3b03cc0f1ffd11f072e834be5d0444105cf715fc44434e39c", size = 239352, upload-time = "2026-06-17T17:38:51.593Z" }, + { url = "https://files.pythonhosted.org/packages/bb/b6/18efc3a329ec035c3f344b8f2b60356451950ddf9b7b64ff00023778a1dd/greenlet-3.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:f9bbd6216c45a563c2a61e478e038b439d9f248bde44f775ea37d339da643af4", size = 237635, upload-time = "2026-06-17T17:35:36.632Z" }, + { url = "https://files.pythonhosted.org/packages/c7/89/aaafc8e14de4ac882e02ccb963225329b0e8578aba4365e71eb678e45722/greenlet-3.5.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:1c31219badba285858ba8ed117f403dea7fafee6bade9a1991875aae530c3ceb", size = 287676, upload-time = "2026-06-17T17:33:31.514Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fc/2308249206c12ac70de7b9a00970f84f07d10b3cd60e05d2fbcaa84124e8/greenlet-3.5.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f96ed6f4adc1066954ae95f45717657cb67468ef3b89e9a3632e14a625a8f39", size = 653552, upload-time = "2026-06-17T18:07:23.493Z" }, + { url = "https://files.pythonhosted.org/packages/7c/24/47730d1f8f1336b9b089237521ed7a26eee997065dcb4cab81cdca333abc/greenlet-3.5.2-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5795e883e915333c0d5648faaa691857fbc7180136883edc377f50f0d509c2a8", size = 665756, upload-time = "2026-06-17T18:29:46.616Z" }, + { url = "https://files.pythonhosted.org/packages/23/5c/2664d290cbd1fef9eb3f69b5d3bc5aa91b6fa907519298ca6af93a90c6cb/greenlet-3.5.2-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6e9e49d732ee92a189bb7035e293029244aeba648297a9b856dc733d17ca7f0d", size = 669989, upload-time = "2026-06-17T18:39:30.79Z" }, + { url = "https://files.pythonhosted.org/packages/99/69/d6c99db15dc0b5e892ac3cc7b942c8b21f4a9cc3bd9ea0bc3b0f339ffbd4/greenlet-3.5.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26aed8d9503ca78889141a9739d71b383efea5f472a7c522b5410f7eb2a1b163", size = 663228, upload-time = "2026-06-17T17:39:31.073Z" }, + { url = "https://files.pythonhosted.org/packages/42/d4/fcb53fa9847d7fbd4723fbed9469c3869b9e3544c4e001d9d5aa2f66162d/greenlet-3.5.2-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:537c5c4f30395020bb9f48f53146070e3b997c3c75da14011ab732aaa19ce3ef", size = 472888, upload-time = "2026-06-17T18:41:22.511Z" }, + { url = "https://files.pythonhosted.org/packages/4f/88/9e603f448e2bc107c883e95817b980fb9b45ba6aea0299b2e9978124bea2/greenlet-3.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dbebc038fcdda8f8f21cce985fd04e34e0f42007e7fc7ab7ad285caf77974b95", size = 1620723, upload-time = "2026-06-17T18:22:14.817Z" }, + { url = "https://files.pythonhosted.org/packages/11/91/26da17e3777858c16fdb8d020a4c68f3a03cb92f238de8f5351d5d5186e9/greenlet-3.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a207023f1cf8695fd82580b8099c09c5809be18bc2282362cdfb965dd884a317", size = 1684227, upload-time = "2026-06-17T17:40:09.536Z" }, + { url = "https://files.pythonhosted.org/packages/2d/44/b3a11f7aa34cb38f1b7f3df8bcd9fcd09bac9d342c2a2c9b8686c804bcd2/greenlet-3.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:c674a1dd4fe41f6a93febe7ab366ceabf15080ea31a9307811c56dac5f435f73", size = 240257, upload-time = "2026-06-17T17:35:23.359Z" }, + { url = "https://files.pythonhosted.org/packages/de/e3/3b62145fe917311732041a258adb218248add00542e3131c48bd047fbed5/greenlet-3.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:3c417cd6c593bbbef6f7aa31a79f37d3db7d18832fc56b694a2150130bde784e", size = 239038, upload-time = "2026-06-17T17:37:56.792Z" }, + { url = "https://files.pythonhosted.org/packages/47/ac/d3bad483e9f6cd1848604fdffa32cac25846dd6dfcec0e6f81c790185518/greenlet-3.5.2-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:a96457a30384de52d9c5d2fd33abf6c1daae3db392cd556738f408b1a79a1cf0", size = 295668, upload-time = "2026-06-17T17:36:02.293Z" }, + { url = "https://files.pythonhosted.org/packages/00/e9/3a7e557b895fd0469b00cd0b2bd498ba950e8bfdf6d7adeecf2c5e4130a6/greenlet-3.5.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4af5d4961818ab651d09c1448a03b1ba2a1726a076266ebb62330bab9f3238c", size = 652820, upload-time = "2026-06-17T18:07:24.95Z" }, + { url = "https://files.pythonhosted.org/packages/78/67/6225d5c5e4afc04be0fd161eec82e4b72017e8a100d222f25d7b42b0140d/greenlet-3.5.2-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a1789a6244ea1ba61fd4386c9a6a31873e9b0234762103364be98ef87dcb19f3", size = 658697, upload-time = "2026-06-17T18:29:48.365Z" }, + { url = "https://files.pythonhosted.org/packages/35/ad/9b3058f999b81750a9c6d9ec424f509462d232b58002086fe2ba63b66407/greenlet-3.5.2-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2ee6288f1933d698b4f098127ed17bda2910a75d2807915bd16294a972055d6c", size = 658945, upload-time = "2026-06-17T18:39:32.509Z" }, + { url = "https://files.pythonhosted.org/packages/fa/99/6324b8ef916dcaddccb340b304c992ca3f947614ce0f2685d438187300b8/greenlet-3.5.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3be00501fb4a8c37f6b4b3c4773808ceb26ea65c7ea64fd5735d0f330b3786de", size = 656436, upload-time = "2026-06-17T17:39:32.509Z" }, + { url = "https://files.pythonhosted.org/packages/92/75/1b6ecd8c027b69ab1b6798a84094df79aab5e69ac7e249c78b9d361dd1fa/greenlet-3.5.2-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:b4cad42662c796334c2d24607c411e3ed82481c1fb4e1e8ec3a5a8416060092e", size = 490529, upload-time = "2026-06-17T18:41:23.954Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ee/f5bf9daac27c5e1b011965f64b5630a32b415daf7381b312943629e12c2a/greenlet-3.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1d554cd96841a68d464d75a3736f8e87408a7b02b1930a75fa32feb408ad62f8", size = 1617193, upload-time = "2026-06-17T18:22:16.252Z" }, + { url = "https://files.pythonhosted.org/packages/8a/21/b05d5b12715bda92ce27c118d64971d21e9b8f3563ed959a7d271e2d4223/greenlet-3.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3dff6cd3aac35f6cd3fc23460105acf576f5faf6c378de0bc088bf37c913864a", size = 1677512, upload-time = "2026-06-17T17:40:10.771Z" }, + { url = "https://files.pythonhosted.org/packages/b8/97/1b8f1314b868041b327dc1051603e8142b826480cb0ecb8a7b7632aee9c4/greenlet-3.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:36cfea2aa075d544617176b2e84450480f0797070ad8799a8c41ada2fe449d32", size = 243145, upload-time = "2026-06-17T17:34:37.502Z" }, + { url = "https://files.pythonhosted.org/packages/36/07/1b5311775e04c718a118c504d7a3a312430e2a1bd1347226aff4774e4549/greenlet-3.5.2-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:a0314aa832c94633355dc6f3ee54f195159533355a323f26926fc63b98b2ccbb", size = 288315, upload-time = "2026-06-17T17:34:34.04Z" }, + { url = "https://files.pythonhosted.org/packages/ed/cc/6abcd2a486b58b9f77b7a93b690d59cb2c11a5906ed2ad4c63c7b9c1113d/greenlet-3.5.2-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24c59cb7db9d5c694cb8fd0c76eef8e456b2123afdfa7e4b8f2a67a0860d7682", size = 659130, upload-time = "2026-06-17T18:07:26.354Z" }, + { url = "https://files.pythonhosted.org/packages/f2/12/f4aaad6d3d383233f700ab322568a4f29f2c701a4861d85f4811d99689b2/greenlet-3.5.2-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7bb811753703739ad318112f16eccfaabdac050037b6d092debaa8b23566b4ce", size = 669724, upload-time = "2026-06-17T18:29:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/53/e0/4ce3a046b51e53934eae93d7f9c13975a97285741e9e1fcadf8751314c37/greenlet-3.5.2-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2debcd0ef9455b7d4879589903efc8e497d4b8fb8c0ae772309e44d1ca5e957f", size = 673494, upload-time = "2026-06-17T18:39:34.196Z" }, + { url = "https://files.pythonhosted.org/packages/91/2a/a089811fc31c6bf8742f40a4e73470d6d401cef18e4314eb20dc399b377c/greenlet-3.5.2-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6d78b5c1c178dad90447f1b8452262709d3eef4c98f825569e74c9d0b2260ac9", size = 668089, upload-time = "2026-06-17T17:39:33.808Z" }, + { url = "https://files.pythonhosted.org/packages/52/e0/9c18721e63445dce02ee67e4c81c0f281626604ff55ae6f7b7f4354d7129/greenlet-3.5.2-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:9558cae989faeab6fbb425cd98a0cfa4190a47fba6443973fbee0a1eb0b0b6c3", size = 479721, upload-time = "2026-06-17T18:41:25.726Z" }, + { url = "https://files.pythonhosted.org/packages/0f/1c/2f47c7d5fcfa98a62b705bf9a0505d86f4563c0d81cab1f7159ff1e743b7/greenlet-3.5.2-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:0977af2df83136f81c1f76e76d4e2fe7d0dc56ea9c101a86af26a95190b9ca32", size = 1625684, upload-time = "2026-06-17T18:22:17.664Z" }, + { url = "https://files.pythonhosted.org/packages/b9/bf/661dd24624f70b7b32972d7693d0344ecde10278f647d7b828baf739899c/greenlet-3.5.2-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f9ed777c6891d8253e54468576f55e27f8fc1a662a664f946a191003574c0a74", size = 1688043, upload-time = "2026-06-17T17:40:12.403Z" }, + { url = "https://files.pythonhosted.org/packages/60/49/d9bde1d15a21296b3b521fe083eb8aabd54ac05d15de9832918f3d639543/greenlet-3.5.2-cp315-cp315-win_amd64.whl", hash = "sha256:c0ea4eb3de23f0bac1d75205e10ccfa9b418b17b01a2d7bf19e3b69dda08900a", size = 240531, upload-time = "2026-06-17T17:35:47.448Z" }, + { url = "https://files.pythonhosted.org/packages/7f/4d/86d7768bd53e9907de0333df215c2018cd01a593b3715cbd79aa82dd94b7/greenlet-3.5.2-cp315-cp315-win_arm64.whl", hash = "sha256:7a7bfc200be40d04961d7e80e8337d726c0c1a50777e588123c3ed8ba731dcb9", size = 239579, upload-time = "2026-06-17T17:39:39.954Z" }, + { url = "https://files.pythonhosted.org/packages/92/15/907be5e8900901039bae752fa9a31c03a3c1e064833f35a4e49449184581/greenlet-3.5.2-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:98a52d6a50d4deaba304331d83ee3e10ebbdc1517fcca40b2715d1de4534065c", size = 296697, upload-time = "2026-06-17T17:37:15.887Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/08c57be575c3d6a3c023bbf22144a1c7dc6ed4d134527bb36ded4dbf04a8/greenlet-3.5.2-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1587ff8b58fdf806993ed1490a06ac19c22d47b219c68b30954380029045d8d4", size = 656710, upload-time = "2026-06-17T18:07:28.046Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d0/749f917bdc9fc90fceea4aa65fbf6556e617a50714d1496bdc8ad190bb36/greenlet-3.5.2-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:feb721811d2754bfd16b48de151dd6b1f222c048e625151f2ca44cfdfd69f59c", size = 662629, upload-time = "2026-06-17T18:29:51.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/87/10776cd88df54d0f563e9e21e98363f2d6af94bedc553b1da0972fa87f80/greenlet-3.5.2-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9476cbead736dc48ce89e3cd97acff95ecc48cbf21273603a438f9870c4a014", size = 663191, upload-time = "2026-06-17T18:39:35.639Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a5/68cefae3a07f6d0093a490cf28ab604f14578f3e60205a2a2b2d5cd70af2/greenlet-3.5.2-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7fe6062b1f35534e1e8fb28dfed406cf4eeff3e0bca3a0d9f8ff69f20a4abb00", size = 660147, upload-time = "2026-06-17T17:39:35.068Z" }, + { url = "https://files.pythonhosted.org/packages/02/aa/26ddf92826a99d87bfb8fdb8f3a262a6f16495a5d8e579737baa92fb4543/greenlet-3.5.2-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:5930d3946ecae99fa7fc0e3f3ae515426ad85058ebd9bfc6c00cca8016e6206b", size = 498199, upload-time = "2026-06-17T18:41:27.464Z" }, + { url = "https://files.pythonhosted.org/packages/d2/6b/b9156d8397e4750220f54c7c5c34650f1e740a8d2f66eab9cfd1b7b53b69/greenlet-3.5.2-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:b4ac902af825cbac8e9b2fccab8122236fd2ba6c8b71a080116d2c2ec72671b1", size = 1621675, upload-time = "2026-06-17T18:22:18.873Z" }, + { url = "https://files.pythonhosted.org/packages/b0/e3/d3250f4fa01c211a93d04e34fded63187e648dbec17b9b1a14d388040593/greenlet-3.5.2-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:6f1e473c06ae8be00c9034c2bb10fa277b08a93287e3111c395b839f01d27e1f", size = 1680577, upload-time = "2026-06-17T17:40:14.055Z" }, + { url = "https://files.pythonhosted.org/packages/55/ba/eaee8bda4419770d7096b5a009ebff0ab20a2a28cdd83c4b591bfdf36fa9/greenlet-3.5.2-cp315-cp315t-win_amd64.whl", hash = "sha256:3c2315045f9983e2e50d7e89d95405c21bddb8745f2da4487bc080ab3525f904", size = 243482, upload-time = "2026-06-17T17:37:34.741Z" }, + { url = "https://files.pythonhosted.org/packages/37/45/f794a81c91e9942c61f9110bd1f9a38a0ea565eab57f8b08cd53d3131e48/greenlet-3.5.2-cp315-cp315t-win_arm64.whl", hash = "sha256:db548d5ab6c2a8ead82c013f875090d79b5d7d2b67fc513934ce6cf66492ad7f", size = 242062, upload-time = "2026-06-17T17:35:39.814Z" }, +] + +[[package]] +name = "grpc-google-iam-v1" +version = "0.14.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos", extra = ["grpc"] }, + { name = "grpcio" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/44/4f/d098419ad0bfc06c9ce440575f05aa22d8973b6c276e86ac7890093d3c37/grpc_google_iam_v1-0.14.4.tar.gz", hash = "sha256:392b3796947ed6334e61171d9ab06bf7eb357f554e5fc7556ad7aab6d0e17038", size = 23706, upload-time = "2026-04-01T01:57:49.813Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/22/c2dd50c09bf679bd38173656cd4402d2511e563b33bc88f90009cf50613c/grpc_google_iam_v1-0.14.4-py3-none-any.whl", hash = "sha256:412facc320fcbd94034b4df3d557662051d4d8adfa86e0ddb4dca70a3f739964", size = 32675, upload-time = "2026-04-01T01:57:47.69Z" }, +] + +[[package]] +name = "grpcio" +version = "1.81.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/b5/1ff353970a87eda4c98251e34d2dfd214abd4982dc89119c9252a2a482d2/grpcio-1.81.1.tar.gz", hash = "sha256:6fa10a767143a5e82e8eaab53918af0cd8909a57a27f8cb2288b80a613ac671b", size = 13026582, upload-time = "2026-06-11T12:46:51.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/ea/1c2fa386b718ff493225e61cfc052ef400b4d6ffc54cbe261026432624b5/grpcio-1.81.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:d71d30f2d92f67d944631c523713934fee37292469e182ebcd2c1dd8a64ce53f", size = 6093112, upload-time = "2026-06-11T12:44:52.131Z" }, + { url = "https://files.pythonhosted.org/packages/2b/18/acf45fa8bd1bc5d7b0c2fd3dc4c209379fbd5bb396b440b68a83342226b7/grpcio-1.81.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:b137f4bf3ada9dc44d411478decc6ff09a79ed30b306cd2abaa98408c3588137", size = 12074277, upload-time = "2026-06-11T12:44:55.354Z" }, + { url = "https://files.pythonhosted.org/packages/48/d7/ee86a60699b7db039f772a2c4a7e4facc7138984ff42c0130933a0063884/grpcio-1.81.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a3acb384427816dd5d470f47e62137b87f74da694faa8a50147012cf40df276a", size = 6640348, upload-time = "2026-06-11T12:44:59.223Z" }, + { url = "https://files.pythonhosted.org/packages/26/ee/d2de5e47378ffc207d476c230fea3be4d2601edbce9995f4fe45535d4896/grpcio-1.81.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f9a0ebbe45c29b5e5866593c12b78bd9035f0f0f0d4bc8361680cd580d99db49", size = 7331842, upload-time = "2026-06-11T12:45:02.001Z" }, + { url = "https://files.pythonhosted.org/packages/23/d6/abeda5c2b896a0b341584fe5ac411bbf72e197a9a374c355fb90965e08d2/grpcio-1.81.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0a37165cc80b1a368384b383e63a4c38116a10467ae44c904d2d7468c4470ec2", size = 6842229, upload-time = "2026-06-11T12:45:04.76Z" }, + { url = "https://files.pythonhosted.org/packages/10/1c/1f0da7d590b4aeee006826ba568d0e419ca14b23e18f901a3da3e9fba613/grpcio-1.81.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6282caffb41ec326d4cb67ca9cf53b739d1b2f975a2acb498c7418e9f7d9a416", size = 7446096, upload-time = "2026-06-11T12:45:07.499Z" }, + { url = "https://files.pythonhosted.org/packages/6a/81/5c505d508f7c887aa7982d21443a4126597c80d34b0bcf40f9cec576d7f3/grpcio-1.81.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a35009284d0d3d5c2c9601c164a911b8b4331608d98a9a66d47d97bb2f522b70", size = 8445238, upload-time = "2026-06-11T12:45:10.243Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b2/524847365122ee509ca17bcc4e092198b700e94af7bfd5bb5e6dd9f3ee66/grpcio-1.81.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1b22c80559854b789a01fd89e8929b3798a156c0829b5282a8939f33ad4115ad", size = 7873989, upload-time = "2026-06-11T12:45:13.102Z" }, + { url = "https://files.pythonhosted.org/packages/18/fa/07c037c50b006909d1d13a5848774f8aa7b242f70dc03a035c64eea0e6db/grpcio-1.81.1-cp311-cp311-win32.whl", hash = "sha256:428bec0161b48d8cf583c068591bc0016d0d9cfff52462b72b3884861ea768c5", size = 4202223, upload-time = "2026-06-11T12:45:16.166Z" }, + { url = "https://files.pythonhosted.org/packages/41/ed/6bff15376920942fac6b95b9802752b837437172c9e8fc2d3170546b89cc/grpcio-1.81.1-cp311-cp311-win_amd64.whl", hash = "sha256:30e825f6848d9f18bba350ed6c75c1b02a0b5184474a31db9a32b1fa66fd8c79", size = 4941303, upload-time = "2026-06-11T12:45:18.724Z" }, + { url = "https://files.pythonhosted.org/packages/85/07/9a979c81738863a738dc23d65177056e71fbb2db817740ed870b33434e7a/grpcio-1.81.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:8b39472beafc0bdcafc4c8c73ad082ebfdb449d566897a61e7acb4fa88089115", size = 6053264, upload-time = "2026-06-11T12:45:21.017Z" }, + { url = "https://files.pythonhosted.org/packages/75/95/539706ca0d3bd40dbad583dc56fd883da941f37556b629132da5762781b9/grpcio-1.81.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:12b7524c88d4026d3dcb7b0ebe16b6714f3b4af402ddd0f0639ab064a00c87c3", size = 12052560, upload-time = "2026-06-11T12:45:23.652Z" }, + { url = "https://files.pythonhosted.org/packages/e0/44/f257b7e0bd69c93b06c6cb8ac8d1b901ccb42bedabd83c1a4c77a71f8810/grpcio-1.81.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1e123f9b37edb8375fd74130d1f69c944bbf0a7b06761ae7211154b8759e94d2", size = 6595983, upload-time = "2026-06-11T12:45:26.963Z" }, + { url = "https://files.pythonhosted.org/packages/b9/f3/19782aa04c960968bef8c5539329d8e3bbc3364e2e46d19eb5e5cc5e43b7/grpcio-1.81.1-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:2c2e2ae6867c2966b8daccc836d54a13218e0007e9a490aeb81dd05be64d22d7", size = 7303455, upload-time = "2026-06-11T12:45:29.707Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8c/dea020b6d91508cd84463917a63149ec196ee7db505d032ae43fcb3303b9/grpcio-1.81.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:766bc7c9a9c340342f4c864ccbda8e78111e4751f13b895812b9c148fb79e9d0", size = 6809167, upload-time = "2026-06-11T12:45:32.52Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/3030dd940408083bd32cd95d634777a71605ade4887154d93e8a89244946/grpcio-1.81.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b259a04a737cb3496be0901328eb8b7552ed8df4865d8c8f1cf1bffcfc0776a3", size = 7412536, upload-time = "2026-06-11T12:45:35.403Z" }, + { url = "https://files.pythonhosted.org/packages/e0/dd/1172a9e42b168edcafefad6115346ef619a3fc02158bb170e66ced24bcdd/grpcio-1.81.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:85b10a45b8993d195c4f3ff57025b8d1e11834909ee475c403bfa60cb4caefaf", size = 8408276, upload-time = "2026-06-11T12:45:37.78Z" }, + { url = "https://files.pythonhosted.org/packages/25/7a/71437c7f3596e5246155c515852795a85a1a8d228190212432b13b97a95d/grpcio-1.81.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8ea1936c26b99999b27479853039a7f34713f56c49375ad52b38535ec93a796c", size = 7849660, upload-time = "2026-06-11T12:45:40.627Z" }, + { url = "https://files.pythonhosted.org/packages/65/40/7debc0da45d2efebafb82da75644be347497fe4ee250514b8cd3b86ae8bf/grpcio-1.81.1-cp312-cp312-win32.whl", hash = "sha256:a185a04039df6cae8648bc8ab6d6fde7bf94f7188ecf7828e76ac52eef1e41d6", size = 4185819, upload-time = "2026-06-11T12:45:43.027Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b9/8fe3ba5ed462067774ebc1f9c7f26aa7ebcc280ddd476be107153de1339e/grpcio-1.81.1-cp312-cp312-win_amd64.whl", hash = "sha256:3ad74f8bb1a18963914c5452d289422830b39459e8776ebbcd207be1fbfb1d94", size = 4930461, upload-time = "2026-06-11T12:45:45.775Z" }, + { url = "https://files.pythonhosted.org/packages/7a/42/dcc2e4b600538ef18327c0839d56b7d3c3812337c5d710df5877dbb39b1e/grpcio-1.81.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:b10e1ff4756ed27d5a29d7fc79cfce7ef1ff56ad20025b89bac7cf79e09abbbe", size = 6054466, upload-time = "2026-06-11T12:45:48.43Z" }, + { url = "https://files.pythonhosted.org/packages/7b/4a/a36e03210183a8a7d4c80c3936acee679f4bd77d5861f369db47b2cc5f05/grpcio-1.81.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:819edbdcb42ab8598b494bcf0222684bbb7a3c772bd1b1f0be7e029a6063c28e", size = 12048795, upload-time = "2026-06-11T12:45:54.011Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d5/d68e30b29098f63beab6fe501100fe82674ff142b32c672532da86a99b3a/grpcio-1.81.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c5bf2dc311127d91230cc79b92188c082634a06cf66c5234db49a43b910183b0", size = 6599094, upload-time = "2026-06-11T12:45:57.799Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b3/e837954d279754f638a11cca5dcf6b24a005efb398984cefaf7735945a54/grpcio-1.81.1-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e8ca6a1fcdb2943c9cbc1804a1baf3acb6071d72a471591678ded84218006e14", size = 7307182, upload-time = "2026-06-11T12:46:00.568Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1e/b47957057e729adc6cdf519a47f8be2562b7140e280f1418443eb4022192/grpcio-1.81.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e64dd101d380a115cc5a0c7856788adb535f1a4e21fc543775602f8be95180ae", size = 6810962, upload-time = "2026-06-11T12:46:03.312Z" }, + { url = "https://files.pythonhosted.org/packages/40/26/569868e364e05b19ec8f969da53d230bcd89c962cd198f7c29943155c4d3/grpcio-1.81.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:98a07f9bf591e3a8919797bee1c53f026ba4acd587e5a4404c8e57c9ec36b2a5", size = 7415698, upload-time = "2026-06-11T12:46:06.005Z" }, + { url = "https://files.pythonhosted.org/packages/36/0c/5440a0582cb5653fc42a6e262eeb22700943313f8076f9dc927491b20a59/grpcio-1.81.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:c261d74b1a945cf895a9d6eccd1685a8e837531beaab782da4d630a8d12deffb", size = 8407779, upload-time = "2026-06-11T12:46:08.84Z" }, + { url = "https://files.pythonhosted.org/packages/ff/aa/66fe9f39871d766987d869a03ee0842a026f499c7b1e62decb9e78a8088e/grpcio-1.81.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58ad1131c300d3c9b933802b3cc4dc69d380822935ba50b28703156ea826fbf7", size = 7844521, upload-time = "2026-06-11T12:46:12.171Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9e/69bb7194861bcd28fb3193261d4f9c3831b4446993f002cf59068943e7ab/grpcio-1.81.1-cp313-cp313-win32.whl", hash = "sha256:78e29211f26da2fdd0e9c6d2b79f489476140cf7029b6a64808ade7ca4156a42", size = 4182786, upload-time = "2026-06-11T12:46:15.192Z" }, + { url = "https://files.pythonhosted.org/packages/0d/20/3da8bb0d637feccdc3e1e419bb511ce93651ce7d54164f95de22cc0b8b34/grpcio-1.81.1-cp313-cp313-win_amd64.whl", hash = "sha256:edb59506291b647a30884b1d51a599d605f40b20af4a7dc3d33786a47a31de60", size = 4928648, upload-time = "2026-06-11T12:46:17.823Z" }, + { url = "https://files.pythonhosted.org/packages/b6/58/19414622b1bf6981bc9c05a365bd548e71876c89000083b3af489251e9c0/grpcio-1.81.1-cp314-cp314-linux_armv7l.whl", hash = "sha256:506f48f2f9c29b143fca3dad7b0d518c188b6c9648c75a2ae6e2d9f2c13a060b", size = 6055336, upload-time = "2026-06-11T12:46:20.557Z" }, + { url = "https://files.pythonhosted.org/packages/32/f1/2ec88adb92b0eba970dd0e0e7dd086341daa3c75eba4f735f9e44bf684b0/grpcio-1.81.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d865db4a6318e1c1bea83292e0ed231090538fc4ca45425b0f0480eb338bbc6e", size = 12056279, upload-time = "2026-06-11T12:46:24.255Z" }, + { url = "https://files.pythonhosted.org/packages/41/36/e8c5f8c6ec71de73733695ebc809e98b178b534ec6d8eaa31a7ebab4ad4c/grpcio-1.81.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2aa72e3ce1770317ef534f63d397b55e130725f5149bd36077c3b539019db27", size = 6608225, upload-time = "2026-06-11T12:46:27.601Z" }, + { url = "https://files.pythonhosted.org/packages/30/22/96fc577a845ab093326d9ab1adb874bd4936c8cf98ac8ed2f3db13a0a2fb/grpcio-1.81.1-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0490c30c261eded63f3f354979f9dc4502a9fb944cccb60cd9dc85f5a7349854", size = 7306576, upload-time = "2026-06-11T12:46:30.514Z" }, + { url = "https://files.pythonhosted.org/packages/76/7b/61dab5d5969f28d97fb1009cead1df0a5cd987d3315e1b37f18a4449f8bc/grpcio-1.81.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:410482da976329fe5f4067270401b12cf2bd552ff8020f054ecfaddb5475f9d6", size = 6812165, upload-time = "2026-06-11T12:46:33.699Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/6e501929d4f5f96462fd82fd9f0f06e5f9612207582b862868d68757b27d/grpcio-1.81.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3657301562ac3cb8018d30d0d3ebfa39932239f7b5703422057ef14b69949f5", size = 7422962, upload-time = "2026-06-11T12:46:36.511Z" }, + { url = "https://files.pythonhosted.org/packages/2a/7e/f2157589e66daa78ebb3165942d05a08bdea93b9d11c2bc1e172aef89685/grpcio-1.81.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:24c8e57504c8f45b237e40b99262d181071e5099a07053695b75d97bb53053a0", size = 8408176, upload-time = "2026-06-11T12:46:39.803Z" }, + { url = "https://files.pythonhosted.org/packages/da/df/c6717fef716e00d235ffb96123baf6dce76d6004f6233fa767c502861460/grpcio-1.81.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b427c19380991a4eaab2f6144b64b99b412043314c6bf4ab544f97bb31ee4190", size = 7846681, upload-time = "2026-06-11T12:46:43.013Z" }, + { url = "https://files.pythonhosted.org/packages/36/84/3502e9f210a6a5c4438c8aca3f88edd2e04f6a27f3d41b26cf0a0024b096/grpcio-1.81.1-cp314-cp314-win32.whl", hash = "sha256:61233fe8951e5c85dff81c2458b6528624760166946b5b47ea150a589168411f", size = 4264615, upload-time = "2026-06-11T12:46:45.741Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/4af731ff7492c68a96e4c71bfd0f4590acde92b31c6fe4894e6465c10ff6/grpcio-1.81.1-cp314-cp314-win_amd64.whl", hash = "sha256:3768a5ff1b2125e6f552e561b6b2dca0e64982d8949689b4df145cf8b98d7821", size = 5070275, upload-time = "2026-06-11T12:46:48.486Z" }, +] + +[[package]] +name = "grpcio-status" +version = "1.71.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "grpcio" }, + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fd/d1/b6e9877fedae3add1afdeae1f89d1927d296da9cf977eca0eb08fb8a460e/grpcio_status-1.71.2.tar.gz", hash = "sha256:c7a97e176df71cdc2c179cd1847d7fc86cca5832ad12e9798d7fed6b7a1aab50", size = 13677, upload-time = "2025-06-28T04:24:05.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/58/317b0134129b556a93a3b0afe00ee675b5657f0155509e22fcb853bafe2d/grpcio_status-1.71.2-py3-none-any.whl", hash = "sha256:803c98cb6a8b7dc6dbb785b1111aed739f241ab5e9da0bba96888aa74704cfd3", size = 14424, upload-time = "2025-06-28T04:23:42.136Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hf-xet" +version = "1.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/2d/57fd21d84d93efb4bd0b962383790e19dd1bc053501b4264c97903b4e83e/hf_xet-1.5.1.tar.gz", hash = "sha256:51ef4500dab3764b41135ee1381a4b62ce56fc54d4c92b719b59e597d6df5bf6", size = 876636, upload-time = "2026-06-08T23:02:53.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/ee/dd9ba7beae1005e54131b7d45263cc74c8a066d47d354e6d58ae9445a388/hf_xet-1.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:dbf48c0d02cf0b2e568944330c60d9120c272dabe013bd892d48e25bc6797577", size = 4069485, upload-time = "2026-06-08T23:02:13.193Z" }, + { url = "https://files.pythonhosted.org/packages/b6/bc/9cae6cfeb4e03070874e73e5c97c66eb90369d3206b6a2b1ef5f96520888/hf_xet-1.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78e4e5192ad2b674c2e1160b651cb9134db974f8ae1835bdfbfb0166b894a43", size = 3838493, upload-time = "2026-06-08T23:02:15.282Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b4/d5c01e0eb6d9f2ca2dacd84d0d1b71e6cfbb2ef3208c968528e010e9b3d7/hf_xet-1.5.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6f7a04a8ad962422e225bc49fbbac99dc1806764b1f3e54dbd154bffa7593947", size = 4505658, upload-time = "2026-06-08T23:02:17.196Z" }, + { url = "https://files.pythonhosted.org/packages/76/c5/29a7598c0c6383c523dc22186d577f4e04267a626cd95ae60f67c00bfe66/hf_xet-1.5.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:d48199c2bf4f8df0adc55d31d1368b6ec0e4d4f45bc86b08038089c23db0bed8", size = 4292822, upload-time = "2026-06-08T23:02:18.608Z" }, + { url = "https://files.pythonhosted.org/packages/04/9a/dceaf6ca69390126b86ea825fb354b93d01163199070b7bd849225de9468/hf_xet-1.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:97f212a88d14bbf573619a74b7fecb238de77d08fc702e54dec6f78276ca3283", size = 4491255, upload-time = "2026-06-08T23:02:20.124Z" }, + { url = "https://files.pythonhosted.org/packages/48/a7/e5a7afaacf6c1791fdbeeac42951fb81c3d2bc482992b115dedcc86d963e/hf_xet-1.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f61e3665892a6c8c5e765395838b8ddf36185da835253d4bc4509a81e49fb342", size = 4711062, upload-time = "2026-06-08T23:02:21.863Z" }, + { url = "https://files.pythonhosted.org/packages/53/49/2802f8433c9742ce281bddc1e65c02c32268ca3098d66828b05e12e45ee2/hf_xet-1.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f4ad3ebd4c32dd2b27099d69dc7b2df821e30767e46fb6ee6a0713778243b8ff", size = 4017205, upload-time = "2026-06-08T23:02:23.495Z" }, + { url = "https://files.pythonhosted.org/packages/9e/5a/50c71195b9fb883659f596e7252faf4c18c58e753a9013bdbf9bac5d2250/hf_xet-1.5.1-cp313-cp313t-win_arm64.whl", hash = "sha256:8298485c1e36e7e67cbd01eeb1376619b7af43d4f1ec245caae306f890a8a32d", size = 3845426, upload-time = "2026-06-08T23:02:25.124Z" }, + { url = "https://files.pythonhosted.org/packages/05/24/5e0c28f80371c17d49fed004597d9d132cb75c1f6f53db2cb95f459d2312/hf_xet-1.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:3474760d10e3bb6f92ff3f024fcb00c0b3e4001e9b035c7483e49a5dd17aa70f", size = 4069676, upload-time = "2026-06-08T23:02:26.759Z" }, + { url = "https://files.pythonhosted.org/packages/d2/17/261ba565b6a4d960fb478f61fdf919c0be5824645aaf1c319eca660c1611/hf_xet-1.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6762d89b9e3267dfd502b29b2a327b4525f33b17e7b509a78d94e2151a30ce30", size = 3838509, upload-time = "2026-06-08T23:02:28.573Z" }, + { url = "https://files.pythonhosted.org/packages/4e/44/7ffdc2e184b0d41fc0f683ba3936ef669ab63cf242cf36ef50e57d683668/hf_xet-1.5.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bf67e6ed10260cef62e852789dc91ebb03f382d5bdc4b1dbeb64763ea275e7d6", size = 4505881, upload-time = "2026-06-08T23:02:30.257Z" }, + { url = "https://files.pythonhosted.org/packages/63/b6/788060d5aa4d5e671f1a31bf69624c314eb2d8babab3aa562f9e5d53444e/hf_xet-1.5.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c6b6cd08ca095058780b50b8ce4d6cbf6787bcf27841705d58a9d32246e3e47a", size = 4292995, upload-time = "2026-06-08T23:02:31.993Z" }, + { url = "https://files.pythonhosted.org/packages/22/93/c5540cbd6b55529b7dc42f6734e88cebee21aefbea34128b66229df56c57/hf_xet-1.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e1af0de8ca6f190d4294a28b88023db64a1e2d1d719cab044baf75bec569e7a9", size = 4491570, upload-time = "2026-06-08T23:02:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/03/f3/9d8ceab30f44f36c1679b1b8683054c71a0dadc787dbf07421891742d3ca/hf_xet-1.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4f561cbbb92f80960772059864b7fb07eae879adde1b2e781ec6f86f6ac26c59", size = 4711565, upload-time = "2026-06-08T23:02:35.454Z" }, + { url = "https://files.pythonhosted.org/packages/cd/54/27ed9a5e2cc583b4df82f75a03a4df8dbf55f5a9fa1f47f1fadfb20dbeac/hf_xet-1.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:e7dbb40617410f432182d918e37c12303fe6700fd6aa6c5964e30a535a4461d6", size = 4017343, upload-time = "2026-06-08T23:02:37.14Z" }, + { url = "https://files.pythonhosted.org/packages/ae/12/ecb2fc8d45e767580e3a37faa97cb895608b614965567efb4f18cff67e27/hf_xet-1.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6071d5ccb4d8d2cbd5fea5cc798da4f0ba3f44e25369591c4e89a4987050e61d", size = 3845716, upload-time = "2026-06-08T23:02:39.073Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d8/5e54cf37434759d1f4f2ba9b66077ff9d4c4e1f37b6bd7975da5c40d94ab/hf_xet-1.5.1-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6abd35c3221eff63836618ddfb954dcf84798603f71d8e33e3ed7b04acfdbe6e", size = 4077794, upload-time = "2026-06-08T23:02:40.656Z" }, + { url = "https://files.pythonhosted.org/packages/35/94/4b2ecfbad8f8b04701a23aefb62f540b9137d058b7e1dbef16a32676f0e9/hf_xet-1.5.1-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:94e761bbd266bf4c03cee73753916062665ce8365aa40ed321f45afcb934b41e", size = 3845354, upload-time = "2026-06-08T23:02:42.702Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/f99f4bc7295023d7bd9ebbfd51f75cc530ca262c1227666268b8208f4b77/hf_xet-1.5.1-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:892e3a3a3aecc12aded8b93cf4f9cd059282c7de0732f7d55026f3abdf474350", size = 4514864, upload-time = "2026-06-08T23:02:44.497Z" }, + { url = "https://files.pythonhosted.org/packages/cd/6e/21f7e5a2381278bd3b7b7a5a4d90038518bb6308a0c1daf5d9f8268bb178/hf_xet-1.5.1-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a93df2039190502835b1db8cd7e178b0b7b889fe9ab51299d5ced26e0dd879a4", size = 4303784, upload-time = "2026-06-08T23:02:46.203Z" }, + { url = "https://files.pythonhosted.org/packages/35/0e/f992bb6927ac1cb30ef74e62268f551f338bc32b2191f7c96a44c6f7283e/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0c97106032ef70467b4f6bc2d0ccc266d7613ee076afc56516c502f87ce1c4a6", size = 4500703, upload-time = "2026-06-08T23:02:47.628Z" }, + { url = "https://files.pythonhosted.org/packages/fb/d1/90a498d05447980b977b1669246eeeeae4cfb0ea3e7a286eaba627f91bf9/hf_xet-1.5.1-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6208adb15d192b90e4c2ad2a27ed864359b2cb0f2494eb6d7c7f3699ac02e2bf", size = 4719498, upload-time = "2026-06-08T23:02:49.268Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b6/20f99cfe97cc663a711f7b33cc21d4793e51968e9a26125b4afcd77315ba/hf_xet-1.5.1-cp37-abi3-win_amd64.whl", hash = "sha256:f7b3002f95d1c13e24bcb4537baa8f0eb3838957067c91bb4959bc004a6435f5", size = 4026419, upload-time = "2026-06-08T23:02:50.829Z" }, + { url = "https://files.pythonhosted.org/packages/f9/fa/77453694888f03e5a8c8852d1514a0894d8e81c622d39edbaf308ea0dcf4/hf_xet-1.5.1-cp37-abi3-win_arm64.whl", hash = "sha256:93d090b57b211133f6c0dab0205ef5cb6d89162979ba75a74845045cc3063b8e", size = 3855178, upload-time = "2026-06-08T23:02:52.452Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httplib2" +version = "0.31.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyparsing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/1f/e86365613582c027dda5ddb64e1010e57a3d53e99ab8a72093fa13d565ec/httplib2-0.31.2.tar.gz", hash = "sha256:385e0869d7397484f4eab426197a4c020b606edd43372492337c0b4010ae5d24", size = 250800, upload-time = "2026-01-23T11:04:44.165Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/90/fd509079dfcab01102c0fdd87f3a9506894bc70afcf9e9785ef6b2b3aff6/httplib2-0.31.2-py3-none-any.whl", hash = "sha256:dbf0c2fa3862acf3c55c078ea9c0bc4481d7dc5117cae71be9514912cf9f8349", size = 91099, upload-time = "2026-01-23T11:04:42.78Z" }, +] + +[[package]] +name = "httptools" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/e5/d471fcb0e14523fe1c3f4ba58ca52480e7bd70ad7109a3846bc75892f7fb/httptools-0.8.0.tar.gz", hash = "sha256:6b2a32f18d97e16e90827d7a819ffa8dbd8cc245fc4e1fa9d1095b54ef4bd999", size = 271342, upload-time = "2026-05-25T22:17:48.841Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/d2/c3eedaef57de65c3cc5f8dc244cf12d09c84ad258a479055aad6db23206c/httptools-0.8.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ed377e64805bdba4943c82717333f8f8603a13b09aff9cead2717c6c817fb168", size = 208428, upload-time = "2026-05-25T22:16:59.717Z" }, + { url = "https://files.pythonhosted.org/packages/f1/94/dfe435d90d0ef61ec0f2cc3d480eef78c59727c6c2ce039f433882f6131a/httptools-0.8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9518c406d7b310f05adb1a37f80acabac40504a575d7c0da6d3e365c695ac20d", size = 113366, upload-time = "2026-05-25T22:17:00.795Z" }, + { url = "https://files.pythonhosted.org/packages/cc/d4/13025f1a56e615dcb331e0bbe2d9a1143212b58c263385fc5d2e558f5bac/httptools-0.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57278e6fa0424c42a8a3e454828ab4f0aff27b40cddf9679579b98c6dce6a376", size = 464676, upload-time = "2026-05-25T22:17:02.014Z" }, + { url = "https://files.pythonhosted.org/packages/bf/95/4c1c26c0b985f8a3331682d802598f14e32dc41bf7509266eb2c04ad4801/httptools-0.8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbb8caadb2b742d293169d2b458b5c001ef70e3158704aa3d3ef9597624c5d1d", size = 464235, upload-time = "2026-05-25T22:17:03.109Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/6735be2b0ca527718c431cdb8e5f70c3862c0844a687df0f572c51e11497/httptools-0.8.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:52dd695b865fe96d9d2b16b64a895f3f57bf3cb064e8383cd3b5713a069e8085", size = 449809, upload-time = "2026-05-25T22:17:04.443Z" }, + { url = "https://files.pythonhosted.org/packages/b5/f9/5811c74f37a758c8a4aa3dc430375119d335947e883efc4664d8f3559a41/httptools-0.8.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:20b4aac66ff65f7db06a375808b78f42a94970aa22e826b3cb2b43eb09174124", size = 452174, upload-time = "2026-05-25T22:17:05.476Z" }, + { url = "https://files.pythonhosted.org/packages/cc/94/97b75870dea07b71e3ec535cebe525b08d723152e4c7d13fa887e51f4de2/httptools-0.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a1b4c8e7a489a0d750d91894e9a8cdc295838f1924c0ca903ae993456fddec07", size = 90991, upload-time = "2026-05-25T22:17:06.75Z" }, + { url = "https://files.pythonhosted.org/packages/14/88/1d21a36da8f5cb0fa49eafd4b169eba5608d57e75bbcf61845cbc6243216/httptools-0.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:880490234c10f70a9830743097e8958d6e4b9f5a0ffc24515023afeef984054d", size = 208247, upload-time = "2026-05-25T22:17:07.843Z" }, + { url = "https://files.pythonhosted.org/packages/a5/42/cc4feea2945cb3051038f090c9b36bd5b8a9d7f5a894a506a8983e33fd1c/httptools-0.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5931891fb7b441b8a3853cf1b85c82c903defce084dd5f6771ca46e31bf862c5", size = 113064, upload-time = "2026-05-25T22:17:09.136Z" }, + { url = "https://files.pythonhosted.org/packages/e3/a6/febbb8b8db0f58b38e44ad6cb946e6a255ae49b55f2e8543408fb7501ccd/httptools-0.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b15fc622b0f869d19207c4089a501d9bcc63ca5e071ffdd2f03f922df882dcb2", size = 523851, upload-time = "2026-05-25T22:17:10.106Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e4/f90a0df0b83beff265b7e3b65f2a4cefd95792d4be0ac3e16049f2acd3c2/httptools-0.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:425f83884fd6343828d8c565f046cb72b6d19063f6924093e11bcd8e1548cd09", size = 518842, upload-time = "2026-05-25T22:17:11.218Z" }, + { url = "https://files.pythonhosted.org/packages/9e/2d/0c9ac76dd2c893841fbf6498d6acec4f2442e1b7067f6e3e316a80e494e8/httptools-0.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7c3c97f4311c7be57e2986629df89d49cb434dbff78eafcd48c2bff986b15a", size = 501238, upload-time = "2026-05-25T22:17:12.728Z" }, + { url = "https://files.pythonhosted.org/packages/ca/42/906adc91ae3a5fa9c59c0a2f21c139725bd7e5b41ae6acd485cd14123ebf/httptools-0.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a1afd7c9fbff0d9f5d489c4ce2768bd09c84a46ddefc7161e6aa82ae35c85745", size = 509567, upload-time = "2026-05-25T22:17:13.842Z" }, + { url = "https://files.pythonhosted.org/packages/05/0b/4240efeb672751ee5b9b380cb0e3fdc050bc05f68adc7a8aefc4fcd9a69a/httptools-0.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:cd96f29b4bab1d42fa6e3d008711c75e0f79e94e06827330160e3a304227f150", size = 90918, upload-time = "2026-05-25T22:17:15.155Z" }, + { url = "https://files.pythonhosted.org/packages/5e/e5/8cfcabc5546e8022f168be28bcdaa128a240a0befdd03b59d558b4f18bd6/httptools-0.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:614ceea8ea606848bece2338ac03b3ce5324bcb4be8dc7d377ed708012fa4db8", size = 205148, upload-time = "2026-05-25T22:17:16.333Z" }, + { url = "https://files.pythonhosted.org/packages/2a/0e/0fb14848c19a686c8062ff9067c1a48793e3224b47bc5b201535b6036fce/httptools-0.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d689918c15a013c65ef52d9fd495d766893ab831a2c8d89f2ac5940a5df847c", size = 111368, upload-time = "2026-05-25T22:17:17.586Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1b/46f1cecf06b9bbde8e4b8c88034ac7908989e5ff7a3a388ef38392949c1f/httptools-0.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:eb3028cca2fc0a6d720e52ef61d8ebb62fcbfeb1de56874546d858d3f25a26b7", size = 486447, upload-time = "2026-05-25T22:17:18.564Z" }, + { url = "https://files.pythonhosted.org/packages/77/00/258bfc0837221f81d9725c45f9b948a6a6b2994a147a4fb66e85100c668f/httptools-0.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88bdd940f2b5d487b4d032c6afa5489a7dc4694410d43de3c38c4fb3af0dc45d", size = 482448, upload-time = "2026-05-25T22:17:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/04/ab/d1cef3b5523f4d272a70f42a776c3169a2dddfe3a54de4b2ce4a36341528/httptools-0.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6a43c9dd399758ccc0531acb0a3c4a6c299ee893ee9400e9c893b7bdcfae0681", size = 464460, upload-time = "2026-05-25T22:17:20.882Z" }, + { url = "https://files.pythonhosted.org/packages/ce/48/5d1d072442277bb2b3434e0e60690b8e8c23840ef7de8b6ea54040a536d3/httptools-0.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0770728beb05094c809b98e814edff5fef69d26ad7d21185f2f6d5884a0ba683", size = 471312, upload-time = "2026-05-25T22:17:22.085Z" }, + { url = "https://files.pythonhosted.org/packages/0d/66/b96623b27e51a68199ef4efdda0613cced9233fe3062ac74e50749c5ad37/httptools-0.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:7685df791fad561384bfb139e77fde27a1ffd93134e016f95a0db424ffbf77b1", size = 90117, upload-time = "2026-05-25T22:17:23.074Z" }, + { url = "https://files.pythonhosted.org/packages/1a/12/fa3fbf5f9517b273edea2dc982aa82a8c634091e67c590792b729017bc6f/httptools-0.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:de242a49b5d18e0a8776e654e9f6bf6d89f3875a5c35b425a0e7ce940feb3fd6", size = 206183, upload-time = "2026-05-25T22:17:24.004Z" }, + { url = "https://files.pythonhosted.org/packages/30/fc/5e7c4cb443370f2090a3aba0453a07384d29ff66b7435bb90e77e1037599/httptools-0.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:159e9ab5f701ccd42e555a12f1ad8ff69702910fc1c996cf2bb66e5fcb7a231b", size = 112079, upload-time = "2026-05-25T22:17:25.216Z" }, + { url = "https://files.pythonhosted.org/packages/ba/53/771bd891eb0f236f32145d6a1775777ec85745f3cc983a1f23d1a3b8ddfe/httptools-0.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c4a9f1707e4823d54dfec6c33fa3697d302aed536ed352a7ebb5a061ddb869d0", size = 481596, upload-time = "2026-05-25T22:17:26.186Z" }, + { url = "https://files.pythonhosted.org/packages/62/42/94e15bc68ce3d423243c45d7f1b0c7561f13844f97dc52ae23182fb65628/httptools-0.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d76ad7b951387e3632c8716a9bb03ac5b45c5f16119aa409db0459520887944e", size = 480865, upload-time = "2026-05-25T22:17:27.542Z" }, + { url = "https://files.pythonhosted.org/packages/1c/7c/fe2980fc03723272e30f135b62360b075f513dfe7cc73aef36c7f04012bd/httptools-0.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a3b7387147361c3fd47a0bde763c5c91b5b4cd4dc9989b8ece84ff436c99843b", size = 463189, upload-time = "2026-05-25T22:17:28.546Z" }, + { url = "https://files.pythonhosted.org/packages/15/1b/47fc5fff68acd1bfa20b4734059c9a06cadb88119dcd5258b5b0d21d91c8/httptools-0.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f256d6ce930c52ca1cb2a960b7da03548c454e7d28b06059ad41bfe789036ce0", size = 466610, upload-time = "2026-05-25T22:17:29.816Z" }, + { url = "https://files.pythonhosted.org/packages/60/bd/07b13c93ffd9bec9546e0d43f8e19378dd696dbd278511406bc07371ef1f/httptools-0.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:19d1ee275bb59ba2643ba9a3a1e51cc0c788caf2b8df506368e03f56fdd08527", size = 92705, upload-time = "2026-05-25T22:17:31.133Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c4/121648f68ce066d7bd762d6b6d97e620847642d38d54f3d90ff11d947629/httptools-0.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:de1ed58a974e75d56560acc7e7fed01a454994429456f65209789992e41f2568", size = 215023, upload-time = "2026-05-25T22:17:32.401Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b0/312a062ae741ae3e8baa8c8bf20be81b2e67337b259ab4349bebc7b6142e/httptools-0.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e93c227b595c6926c1acee96891dd9da4be338cfbe82e5cd3bb9d8dd7dc4ac0b", size = 117405, upload-time = "2026-05-25T22:17:33.742Z" }, + { url = "https://files.pythonhosted.org/packages/fc/37/fccd705f795386bb05bf413012fecff2a33e5aa8c2f069096de3e9fd8702/httptools-0.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2a021c3a8e65cc125390d72f59b968afca3bdcaff25bd67965e0a055a14946ca", size = 558497, upload-time = "2026-05-25T22:17:34.732Z" }, + { url = "https://files.pythonhosted.org/packages/bd/39/f172e8003576de35f5ba77ff417cf0e34429d35dc014deef15afa337a72c/httptools-0.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48774d39cbb70e2b1f71f88852a3087ae1d3a1eb80482bb48c13067ab080c14f", size = 571585, upload-time = "2026-05-25T22:17:35.813Z" }, + { url = "https://files.pythonhosted.org/packages/3e/b9/f5564760af99f3dbbf3f9104dc00e5da27e96cf433c6bdcf77617f70bf3f/httptools-0.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:88eead8ec8680a9f146c655bc88445a325bd7921cfd8194c7337e9467282427d", size = 543297, upload-time = "2026-05-25T22:17:37.08Z" }, + { url = "https://files.pythonhosted.org/packages/99/67/8d9f2c313618e161b82f3873188e7196126da1d6e29688df40eb3997c77a/httptools-0.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2c032fa028f46871ec7e1fc59fc15e8023eab3e6bbe6ece786a1611719a5d081", size = 539535, upload-time = "2026-05-25T22:17:38.032Z" }, + { url = "https://files.pythonhosted.org/packages/48/63/b906c01e53f50d432c0defe43ce52764a111dc1bdd028bafbeb54dcfd008/httptools-0.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:384c17174464c8e873398b7af24f0b1f44d992c820328413951a625323155d77", size = 108209, upload-time = "2026-05-25T22:17:39.473Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "httpx-sse" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/4c/751061ffa58615a32c31b2d82e8482be8dd4a89154f003147acee90f2be9/httpx_sse-0.4.3.tar.gz", hash = "sha256:9b1ed0127459a66014aec3c56bebd93da3c1bc8bb6618c8082039a44889a755d", size = 15943, upload-time = "2025-10-10T21:48:22.271Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fd/6668e5aec43ab844de6fc74927e155a3b37bf40d7c3790e49fc0406b6578/httpx_sse-0.4.3-py3-none-any.whl", hash = "sha256:0ac1c9fe3c0afad2e0ebb25a934a59f4c7823b60792691f779fad2c5568830fc", size = 8960, upload-time = "2025-10-10T21:48:21.158Z" }, +] + +[[package]] +name = "huggingface-hub" +version = "1.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "fsspec" }, + { name = "hf-xet", marker = "platform_machine == 'AMD64' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, + { name = "httpx" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "tqdm" }, + { name = "typer" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/0f/ed994dbade67a54407c28cab96ef845e0e6d25500be56aca6394f8bfc9dd/huggingface_hub-1.16.1.tar.gz", hash = "sha256:7f1dc4c5ec21aed69be630ad0c3378616be16f3de1a47b141c0e812965d9c832", size = 792534, upload-time = "2026-05-21T18:40:00.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/79/621a7dbb80c70974f73a597275351ebe03ce5bc65cb5f8f4acb5859252bc/huggingface_hub-1.16.1-py3-none-any.whl", hash = "sha256:64340de934b9ce37857ef85a82de72f5629e8a270f9119eabb12bf495eb53c22", size = 668176, upload-time = "2026-05-21T18:39:58.596Z" }, +] + +[[package]] +name = "idna" +version = "3.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, +] + +[[package]] +name = "importlib-resources" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/06/b56dfa750b44e86157093bc8fca0ab81dccbf5260510de4eaf1cb69b5b99/importlib_resources-7.1.0.tar.gz", hash = "sha256:0722d4c6212489c530f2a145a34c0a7a3b4721bc96a15fada5930e2a0b760708", size = 44985, upload-time = "2026-04-12T16:36:09.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/db/55a262f3606bebcae07cc14095338471ad7c0bbcaa37707e6f0ee49725b7/importlib_resources-7.1.0-py3-none-any.whl", hash = "sha256:1bd7b48b4088eddb2cd16382150bb515af0bd2c70128194392725f82ad2c96a1", size = 37232, upload-time = "2026-04-12T16:36:08.219Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "instructor" +version = "1.15.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "docstring-parser" }, + { name = "jinja2" }, + { name = "jiter" }, + { name = "openai" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "requests" }, + { name = "rich" }, + { name = "tenacity" }, + { name = "typer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/5b/40d7906e46aa8607b7259fdfb0114865d87ba52e7554499d8f4830c16d63/instructor-1.15.3.tar.gz", hash = "sha256:2d13f1201a2a9c0a350a6286990f7609b29d04efd6da8f641354a110a3f8bb0b", size = 70049094, upload-time = "2026-06-15T05:51:17.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/b3/f999fa377b2e639b0b212216b9f493e72de8ed8ed64b803fb1fe6b776f99/instructor-1.15.3-py3-none-any.whl", hash = "sha256:12553651b77b933ac3e96e53c18d0d3e7c5e627d1ea35625c1e4e11be0d41c59", size = 252418, upload-time = "2026-06-15T05:51:21.428Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jiter" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/c1/0cddc6eb17d4c53a99840953f95dd3accdc5cfc7a337b0e9b26476276be9/jiter-0.14.0.tar.gz", hash = "sha256:e8a39e66dac7153cf3f964a12aad515afa8d74938ec5cc0018adcdae5367c79e", size = 165725, upload-time = "2026-04-10T14:28:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/1f/198ae537fccb7080a0ed655eb56abf64a92f79489dfbf79f40fa34225bcd/jiter-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:7e791e247b8044512e070bd1f3633dc08350d32776d2d6e7473309d0edf256a2", size = 316896, upload-time = "2026-04-10T14:26:01.986Z" }, + { url = "https://files.pythonhosted.org/packages/cf/34/da67cff3fce964a36d03c3e365fb0f8726ade2a6cfd4d3c70107e216ead6/jiter-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71527ce13fd5a0c4e40ad37331f8c547177dbb2dd0a93e5278b6a5eecf748804", size = 321085, upload-time = "2026-04-10T14:26:03.364Z" }, + { url = "https://files.pythonhosted.org/packages/ed/36/4c72e67180d4e71a4f5dcf7886d0840e83c49ab11788172177a77570326e/jiter-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02c4a7ab56f746014874f2c525584c0daca1dec37f66fd707ecef3b7e5c2228c", size = 347393, upload-time = "2026-04-10T14:26:05.314Z" }, + { url = "https://files.pythonhosted.org/packages/bc/db/9b39e09ceafa9878235c0fc29e3e3f9b12a4c6a98ea3085b998cadf3accc/jiter-0.14.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:376e9dafff914253bb9d46cdc5f7965607fbe7feb0a491c34e35f92b2770702e", size = 372937, upload-time = "2026-04-10T14:26:06.884Z" }, + { url = "https://files.pythonhosted.org/packages/b0/96/0dcba1d7a82c1b720774b48ef239376addbaf30df24c34742ac4a57b67b2/jiter-0.14.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23ad2a7a9da1935575c820428dd8d2490ce4d23189691ce33da1fc0a58e14e1c", size = 463646, upload-time = "2026-04-10T14:26:08.345Z" }, + { url = "https://files.pythonhosted.org/packages/f1/e3/f61b71543e746e6b8b805e7755814fc242715c16f1dba58e1cbccb8032c2/jiter-0.14.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54b3ddf5786bc7732d293bba3411ac637ecfa200a39983166d1df86a59a43c9f", size = 380225, upload-time = "2026-04-10T14:26:10.161Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5e/0ddeb7096aca099114abe36c4921016e8d251e6f35f5890240b31f1f60ae/jiter-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c001d5a646c2a50dc055dd526dad5d5245969e8234d2b1131d0451e81f3a373", size = 358682, upload-time = "2026-04-10T14:26:11.574Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d1/fe0c46cd7fda9cad8f1ff9ad217dc61f1e4280b21052ec6dfe88c1446ef2/jiter-0.14.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:834bb5bdabca2e91592a03d373838a8d0a1b8bbde7077ae6913fd2fc51812d00", size = 359973, upload-time = "2026-04-10T14:26:13.316Z" }, + { url = "https://files.pythonhosted.org/packages/ac/21/f5317f91729b501019184771c80d60abd89907009e7bfa6c7e348c5bdd44/jiter-0.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4e9178be60e229b1b2b0710f61b9e24d1f4f8556985a83ff4c4f95920eea7314", size = 397568, upload-time = "2026-04-10T14:26:15.212Z" }, + { url = "https://files.pythonhosted.org/packages/e9/05/79d8f33fb2bf168db0df5c9cd16fe440a8ada57e929d3677b22712c2568f/jiter-0.14.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a7e4ccff04ec03614e62c613e976a3a5860dc9714ce8266f44328bdc8b1cab2c", size = 522535, upload-time = "2026-04-10T14:26:16.956Z" }, + { url = "https://files.pythonhosted.org/packages/5c/00/d1e3ff3d2a465e67f08507d74bafb2dcd29eba91dc939820e39e8dea38b8/jiter-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:69539d936fb5d55caf6ecd33e2e884de083ff0ea28579780d56c4403094bb8d9", size = 556709, upload-time = "2026-04-10T14:26:18.5Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/bbb2189f62ace8d95e869aa4c84c9946616f301e2d02895a6f20dcc3bba3/jiter-0.14.0-cp311-cp311-win32.whl", hash = "sha256:4927d09b3e572787cc5e0a5318601448e1ab9391bcef95677f5840c2d00eaa6d", size = 208660, upload-time = "2026-04-10T14:26:20.511Z" }, + { url = "https://files.pythonhosted.org/packages/b8/86/c500b53dcbf08575f5963e536ebd757a1f7c568272ba5d180b212c9a87fb/jiter-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:42d6ed359ac49eb922fdd565f209c57340aa06d589c84c8413e42a0f9ae1b842", size = 204659, upload-time = "2026-04-10T14:26:22.152Z" }, + { url = "https://files.pythonhosted.org/packages/75/4a/a676249049d42cb29bef82233e4fe0524d414cbe3606c7a4b311193c2f77/jiter-0.14.0-cp311-cp311-win_arm64.whl", hash = "sha256:6dd689f5f4a5a33747b28686e051095beb214fe28cfda5e9fe58a295a788f593", size = 194772, upload-time = "2026-04-10T14:26:23.458Z" }, + { url = "https://files.pythonhosted.org/packages/5a/68/7390a418f10897da93b158f2d5a8bd0bcd73a0f9ec3bb36917085bb759ef/jiter-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2fb2ce3a7bc331256dfb14cefc34832366bb28a9aca81deaf43bbf2a5659e607", size = 316295, upload-time = "2026-04-10T14:26:24.887Z" }, + { url = "https://files.pythonhosted.org/packages/60/a0/5854ac00ff63551c52c6c89534ec6aba4b93474e7924d64e860b1c94165b/jiter-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5252a7ca23785cef5d02d4ece6077a1b556a410c591b379f82091c3001e14844", size = 315898, upload-time = "2026-04-10T14:26:26.601Z" }, + { url = "https://files.pythonhosted.org/packages/41/a1/4f44832650a16b18e8391f1bf1d6ca4909bc738351826bcc198bba4357f4/jiter-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c409578cbd77c338975670ada777add4efd53379667edf0aceea730cabede6fb", size = 343730, upload-time = "2026-04-10T14:26:28.326Z" }, + { url = "https://files.pythonhosted.org/packages/48/64/a329e9d469f86307203594b1707e11ae51c3348d03bfd514a5f997870012/jiter-0.14.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ede4331a1899d604463369c730dbb961ffdc5312bc7f16c41c2896415b1304a", size = 370102, upload-time = "2026-04-10T14:26:30.089Z" }, + { url = "https://files.pythonhosted.org/packages/94/c1/5e3dfc59635aa4d4c7bd20a820ac1d09b8ed851568356802cf1c08edb3cf/jiter-0.14.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92cd8b6025981a041f5310430310b55b25ca593972c16407af8837d3d7d2ca01", size = 461335, upload-time = "2026-04-10T14:26:31.911Z" }, + { url = "https://files.pythonhosted.org/packages/e3/1b/dd157009dbc058f7b00108f545ccb72a2d56461395c4fc7b9cfdccb00af4/jiter-0.14.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:351bf6eda4e3a7ceb876377840c702e9a3e4ecc4624dbfb2d6463c67ae52637d", size = 378536, upload-time = "2026-04-10T14:26:33.595Z" }, + { url = "https://files.pythonhosted.org/packages/91/78/256013667b7c10b8834f8e6e54cd3e562d4c6e34227a1596addccc05e38c/jiter-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1dcfbeb93d9ecd9ca128bbf8910120367777973fa193fb9a39c31237d8df165", size = 353859, upload-time = "2026-04-10T14:26:35.098Z" }, + { url = "https://files.pythonhosted.org/packages/de/d9/137d65ade9093a409fe80955ce60b12bb753722c986467aeda47faf450ad/jiter-0.14.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:ae039aaef8de3f8157ecc1fdd4d85043ac4f57538c245a0afaecb8321ec951c3", size = 357626, upload-time = "2026-04-10T14:26:36.685Z" }, + { url = "https://files.pythonhosted.org/packages/2e/48/76750835b87029342727c1a268bea8878ab988caf81ee4e7b880900eeb5a/jiter-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7d9d51eb96c82a9652933bd769fe6de66877d6eb2b2440e281f2938c51b5643e", size = 393172, upload-time = "2026-04-10T14:26:38.097Z" }, + { url = "https://files.pythonhosted.org/packages/a6/60/456c4e81d5c8045279aefe60e9e483be08793828800a4e64add8fdde7f2a/jiter-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d824ca4148b705970bf4e120924a212fdfca9859a73e42bd7889a63a4ea6bb98", size = 520300, upload-time = "2026-04-10T14:26:39.532Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9f/2020e0984c235f678dced38fe4eec3058cf528e6af36ebf969b410305941/jiter-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff3a6465b3a0f54b1a430f45c3c0ba7d61ceb45cbc3e33f9e1a7f638d690baf3", size = 553059, upload-time = "2026-04-10T14:26:40.991Z" }, + { url = "https://files.pythonhosted.org/packages/ef/32/e2d298e1a22a4bbe6062136d1c7192db7dba003a6975e51d9a9eecabc4c2/jiter-0.14.0-cp312-cp312-win32.whl", hash = "sha256:5dec7c0a3e98d2a3f8a2e67382d0d7c3ac60c69103a4b271da889b4e8bb1e129", size = 206030, upload-time = "2026-04-10T14:26:42.517Z" }, + { url = "https://files.pythonhosted.org/packages/36/ac/96369141b3d8a4a8e4590e983085efe1c436f35c0cda940dd76d942e3e40/jiter-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:fc7e37b4b8bc7e80a63ad6cfa5fc11fab27dbfea4cc4ae644b1ab3f273dc348f", size = 201603, upload-time = "2026-04-10T14:26:44.328Z" }, + { url = "https://files.pythonhosted.org/packages/01/c3/75d847f264647017d7e3052bbcc8b1e24b95fa139c320c5f5066fa7a0bdd/jiter-0.14.0-cp312-cp312-win_arm64.whl", hash = "sha256:ee4a72f12847ef29b072aee9ad5474041ab2924106bdca9fcf5d7d965853e057", size = 191525, upload-time = "2026-04-10T14:26:46Z" }, + { url = "https://files.pythonhosted.org/packages/97/2a/09f70020898507a89279659a1afe3364d57fc1b2c89949081975d135f6f5/jiter-0.14.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:af72f204cf4d44258e5b4c1745130ac45ddab0e71a06333b01de660ab4187a94", size = 315502, upload-time = "2026-04-10T14:26:47.697Z" }, + { url = "https://files.pythonhosted.org/packages/d6/be/080c96a45cd74f9fce5db4fd68510b88087fb37ffe2541ff73c12db92535/jiter-0.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4b77da71f6e819be5fbcec11a453fde5b1d0267ef6ed487e2a392fd8e14e4e3a", size = 314870, upload-time = "2026-04-10T14:26:49.149Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5e/2d0fee155826a968a832cc32438de5e2a193292c8721ca70d0b53e58245b/jiter-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f4ea612fe8b84b8b04e51d0e78029ecf3466348e25973f953de6e6a59aa4c1", size = 343406, upload-time = "2026-04-10T14:26:50.762Z" }, + { url = "https://files.pythonhosted.org/packages/70/af/bf9ee0d3a4f8dc0d679fc1337f874fe60cdbf841ebbb304b374e1c9aaceb/jiter-0.14.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62fe2451f8fcc0240261e6a4df18ecbcd58327857e61e625b2393ea3b468aac9", size = 369415, upload-time = "2026-04-10T14:26:52.188Z" }, + { url = "https://files.pythonhosted.org/packages/0f/83/8e8561eadba31f4d3948a5b712fb0447ec71c3560b57a855449e7b8ddc98/jiter-0.14.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6112f26f5afc75bcb475787d29da3aa92f9d09c7858f632f4be6ffe607be82e9", size = 461456, upload-time = "2026-04-10T14:26:53.611Z" }, + { url = "https://files.pythonhosted.org/packages/f6/c9/c5299e826a5fe6108d172b344033f61c69b1bb979dd8d9ddd4278a160971/jiter-0.14.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:215a6cb8fb7dc702aa35d475cc00ddc7f970e5c0b1417fb4b4ac5d82fa2a29db", size = 378488, upload-time = "2026-04-10T14:26:55.211Z" }, + { url = "https://files.pythonhosted.org/packages/5d/37/c16d9d15c0a471b8644b1abe3c82668092a707d9bedcf076f24ff2e380cd/jiter-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ab96a30fb3cb2c7e0cd33f7616c8860da5f5674438988a54ac717caccdbaa", size = 353242, upload-time = "2026-04-10T14:26:56.705Z" }, + { url = "https://files.pythonhosted.org/packages/58/ea/8050cb0dc654e728e1bfacbc0c640772f2181af5dedd13ae70145743a439/jiter-0.14.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3a99c1387b1f2928f799a9de899193484d66206a50e98233b6b088a7f0c1edb2", size = 356823, upload-time = "2026-04-10T14:26:58.281Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/cf71506d270e5f84d97326bf220e47aed9b95e9a4a060758fb07772170ab/jiter-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab18d11074485438695f8d34a1b6da61db9754248f96d51341956607a8f39985", size = 392564, upload-time = "2026-04-10T14:27:00.018Z" }, + { url = "https://files.pythonhosted.org/packages/b0/cc/8c6c74a3efb5bd671bfd14f51e8a73375464ca914b1551bc3b40e26ac2c9/jiter-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:801028dcfc26ac0895e4964cbc0fd62c73be9fd4a7d7b1aaf6e5790033a719b7", size = 520322, upload-time = "2026-04-10T14:27:01.664Z" }, + { url = "https://files.pythonhosted.org/packages/41/24/68d7b883ec959884ddf00d019b2e0e82ba81b167e1253684fa90519ce33c/jiter-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ad425b087aafb4a1c7e1e98a279200743b9aaf30c3e0ba723aec93f061bd9bc8", size = 552619, upload-time = "2026-04-10T14:27:03.316Z" }, + { url = "https://files.pythonhosted.org/packages/b6/89/b1a0985223bbf3150ff9e8f46f98fc9360c1de94f48abe271bbe1b465682/jiter-0.14.0-cp313-cp313-win32.whl", hash = "sha256:882bcb9b334318e233950b8be366fe5f92c86b66a7e449e76975dfd6d776a01f", size = 205699, upload-time = "2026-04-10T14:27:04.662Z" }, + { url = "https://files.pythonhosted.org/packages/4c/19/3f339a5a7f14a11730e67f6be34f9d5105751d547b615ef593fa122a5ded/jiter-0.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:9b8c571a5dba09b98bd3462b5a53f27209a5cbbe85670391692ede71974e979f", size = 201323, upload-time = "2026-04-10T14:27:06.139Z" }, + { url = "https://files.pythonhosted.org/packages/50/56/752dd89c84be0e022a8ea3720bcfa0a8431db79a962578544812ce061739/jiter-0.14.0-cp313-cp313-win_arm64.whl", hash = "sha256:34f19dcc35cb1abe7c369b3756babf8c7f04595c0807a848df8f26ef8298ef92", size = 191099, upload-time = "2026-04-10T14:27:07.564Z" }, + { url = "https://files.pythonhosted.org/packages/91/28/292916f354f25a1fe8cf2c918d1415c699a4a659ae00be0430e1c5d9ffea/jiter-0.14.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e89bcd7d426a75bb4952c696b267075790d854a07aad4c9894551a82c5b574ab", size = 320880, upload-time = "2026-04-10T14:27:09.326Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c7/b002a7d8b8957ac3d469bd59c18ef4b1595a5216ae0de639a287b9816023/jiter-0.14.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b25beaa0d4447ea8c7ae0c18c688905d34840d7d0b937f2f7bdd52162c98a40", size = 346563, upload-time = "2026-04-10T14:27:11.287Z" }, + { url = "https://files.pythonhosted.org/packages/f9/3b/f8d07580d8706021d255a6356b8fab13ee4c869412995550ce6ed4ddf97d/jiter-0.14.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a8758dd413c51e3b7f6557cdc6921faf70b14106f45f969f091f5cda990ea", size = 357928, upload-time = "2026-04-10T14:27:12.729Z" }, + { url = "https://files.pythonhosted.org/packages/47/5b/ac1a974da29e35507230383110ffec59998b290a8732585d04e19a9eb5ba/jiter-0.14.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e1a7eead856a5038a8d291f1447176ab0b525c77a279a058121b5fccee257f6f", size = 203519, upload-time = "2026-04-10T14:27:14.125Z" }, + { url = "https://files.pythonhosted.org/packages/96/6d/9fc8433d667d2454271378a79747d8c76c10b51b482b454e6190e511f244/jiter-0.14.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e692633a12cda97e352fdcd1c4acc971b1c28707e1e33aeef782b0cbf051975", size = 190113, upload-time = "2026-04-10T14:27:16.638Z" }, + { url = "https://files.pythonhosted.org/packages/4f/1e/354ed92461b165bd581f9ef5150971a572c873ec3b68a916d5aa91da3cc2/jiter-0.14.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:6f396837fc7577871ca8c12edaf239ed9ccef3bbe39904ae9b8b63ce0a48b140", size = 315277, upload-time = "2026-04-10T14:27:18.109Z" }, + { url = "https://files.pythonhosted.org/packages/a6/95/8c7c7028aa8636ac21b7a55faef3e34215e6ed0cbf5ae58258427f621aa3/jiter-0.14.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a4d50ea3d8ba4176f79754333bd35f1bbcd28e91adc13eb9b7ca91bc52a6cef9", size = 315923, upload-time = "2026-04-10T14:27:19.603Z" }, + { url = "https://files.pythonhosted.org/packages/47/40/e2a852a44c4a089f2681a16611b7ce113224a80fd8504c46d78491b47220/jiter-0.14.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce17f8a050447d1b4153bda4fb7d26e6a9e74eb4f4a41913f30934c5075bf615", size = 344943, upload-time = "2026-04-10T14:27:21.262Z" }, + { url = "https://files.pythonhosted.org/packages/fc/1f/670f92adee1e9895eac41e8a4d623b6da68c4d46249d8b556b60b63f949e/jiter-0.14.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f4f1c4b125e1652aefbc2e2c1617b60a160ab789d180e3d423c41439e5f32850", size = 369725, upload-time = "2026-04-10T14:27:22.766Z" }, + { url = "https://files.pythonhosted.org/packages/01/2f/541c9ba567d05de1c4874a0f8f8c5e3fd78e2b874266623da9a775cf46e0/jiter-0.14.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be808176a6a3a14321d18c603f2d40741858a7c4fc982f83232842689fe86dd9", size = 461210, upload-time = "2026-04-10T14:27:24.315Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a9/c31cbec09627e0d5de7aeaec7690dba03e090caa808fefd8133137cf45bc/jiter-0.14.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:26679d58ba816f88c3849306dd58cb863a90a1cf352cdd4ef67e30ccf8a77994", size = 380002, upload-time = "2026-04-10T14:27:26.155Z" }, + { url = "https://files.pythonhosted.org/packages/50/02/3c05c1666c41904a2f607475a73e7a4763d1cbde2d18229c4f85b22dc253/jiter-0.14.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80381f5a19af8fa9aef743f080e34f6b25ebd89656475f8cf0470ec6157052aa", size = 354678, upload-time = "2026-04-10T14:27:27.701Z" }, + { url = "https://files.pythonhosted.org/packages/7d/97/e15b33545c2b13518f560d695f974b9891b311641bdcf178d63177e8801e/jiter-0.14.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:004df5fdb8ecbd6d99f3227df18ba1a259254c4359736a2e6f036c944e02d7c5", size = 358920, upload-time = "2026-04-10T14:27:29.256Z" }, + { url = "https://files.pythonhosted.org/packages/ad/d2/8b1461def6b96ba44530df20d07ef7a1c7da22f3f9bf1727e2d611077bf1/jiter-0.14.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cff5708f7ed0fa098f2b53446c6fa74c48469118e5cd7497b4f1cd569ab06928", size = 394512, upload-time = "2026-04-10T14:27:31.344Z" }, + { url = "https://files.pythonhosted.org/packages/e3/88/837566dd6ed6e452e8d3205355afd484ce44b2533edfa4ed73a298ea893e/jiter-0.14.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:2492e5f06c36a976d25c7cc347a60e26d5470178d44cde1b9b75e60b4e519f28", size = 521120, upload-time = "2026-04-10T14:27:33.299Z" }, + { url = "https://files.pythonhosted.org/packages/89/6b/b00b45c4d1b4c031777fe161d620b755b5b02cdade1e316dcb46e4471d63/jiter-0.14.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:7609cfbe3a03d37bfdbf5052012d5a879e72b83168a363deae7b3a26564d57de", size = 553668, upload-time = "2026-04-10T14:27:34.868Z" }, + { url = "https://files.pythonhosted.org/packages/ad/d8/6fe5b42011d19397433d345716eac16728ac241862a2aac9c91923c7509a/jiter-0.14.0-cp314-cp314-win32.whl", hash = "sha256:7282342d32e357543565286b6450378c3cd402eea333fc1ebe146f1fabb306fc", size = 207001, upload-time = "2026-04-10T14:27:36.455Z" }, + { url = "https://files.pythonhosted.org/packages/e5/43/5c2e08da1efad5e410f0eaaabeadd954812612c33fbbd8fd5328b489139d/jiter-0.14.0-cp314-cp314-win_amd64.whl", hash = "sha256:bd77945f38866a448e73b0b7637366afa814d4617790ecd88a18ca74377e6c02", size = 202187, upload-time = "2026-04-10T14:27:38Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1f/6e39ac0b4cdfa23e606af5b245df5f9adaa76f35e0c5096790da430ca506/jiter-0.14.0-cp314-cp314-win_arm64.whl", hash = "sha256:f2d4c61da0821ee42e0cdf5489da60a6d074306313a377c2b35af464955a3611", size = 192257, upload-time = "2026-04-10T14:27:39.504Z" }, + { url = "https://files.pythonhosted.org/packages/05/57/7dbc0ffbbb5176a27e3518716608aa464aee2e2887dc938f0b900a120449/jiter-0.14.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1bf7ff85517dd2f20a5750081d2b75083c1b269cf75afc7511bdf1f9548beb3b", size = 323441, upload-time = "2026-04-10T14:27:41.039Z" }, + { url = "https://files.pythonhosted.org/packages/83/6e/7b3314398d8983f06b557aa21b670511ec72d3b79a68ee5e4d9bff972286/jiter-0.14.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8ef8791c3e78d6c6b157c6d360fbb5c715bebb8113bc6a9303c5caff012754a", size = 348109, upload-time = "2026-04-10T14:27:42.552Z" }, + { url = "https://files.pythonhosted.org/packages/ae/4f/8dc674bcd7db6dba566de73c08c763c337058baff1dbeb34567045b27cdc/jiter-0.14.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e74663b8b10da1fe0f4e4703fd7980d24ad17174b6bb35d8498d6e3ebce2ae6a", size = 368328, upload-time = "2026-04-10T14:27:44.574Z" }, + { url = "https://files.pythonhosted.org/packages/3b/5f/188e09a1f20906f98bbdec44ed820e19f4e8eb8aff88b9d1a5a497587ff3/jiter-0.14.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1aca29ba52913f78362ec9c2da62f22cdc4c3083313403f90c15460979b84d9b", size = 463301, upload-time = "2026-04-10T14:27:46.717Z" }, + { url = "https://files.pythonhosted.org/packages/ac/f0/19046ef965ed8f349e8554775bb12ff4352f443fbe12b95d31f575891256/jiter-0.14.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8b39b7d87a952b79949af5fef44d2544e58c21a28da7f1bae3ef166455c61746", size = 378891, upload-time = "2026-04-10T14:27:48.32Z" }, + { url = "https://files.pythonhosted.org/packages/c4/c3/da43bd8431ee175695777ee78cf0e93eacbb47393ff493f18c45231b427d/jiter-0.14.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d918a68b26e9fab068c2b5453577ef04943ab2807b9a6275df2a812599a310", size = 360749, upload-time = "2026-04-10T14:27:49.88Z" }, + { url = "https://files.pythonhosted.org/packages/72/26/e054771be889707c6161dbdec9c23d33a9ec70945395d70f07cfea1e9a6f/jiter-0.14.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:b08997c35aee1201c1a5361466a8fb9162d03ae7bf6568df70b6c859f1e654a4", size = 358526, upload-time = "2026-04-10T14:27:51.504Z" }, + { url = "https://files.pythonhosted.org/packages/c3/0f/7bea65ea2a6d91f2bf989ff11a18136644392bf2b0497a1fa50934c30a9c/jiter-0.14.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:260bf7ca20704d58d41f669e5e9fe7fe2fa72901a6b324e79056f5d52e9c9be2", size = 393926, upload-time = "2026-04-10T14:27:53.368Z" }, + { url = "https://files.pythonhosted.org/packages/3c/a1/b1ff7d70deef61ac0b7c6c2f12d2ace950cdeecb4fdc94500a0926802857/jiter-0.14.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:37826e3df29e60f30a382f9294348d0238ef127f4b5d7f5f8da78b5b9e050560", size = 521052, upload-time = "2026-04-10T14:27:55.058Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7b/3b0649983cbaf15eda26a414b5b1982e910c67bd6f7b1b490f3cfc76896a/jiter-0.14.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:645be49c46f2900937ba0eaf871ad5183c96858c0af74b6becc7f4e367e36e06", size = 553716, upload-time = "2026-04-10T14:27:57.269Z" }, + { url = "https://files.pythonhosted.org/packages/97/f8/33d78c83bd93ae0c0af05293a6660f88a1977caef39a6d72a84afab94ce0/jiter-0.14.0-cp314-cp314t-win32.whl", hash = "sha256:2f7877ed45118de283786178eceaf877110abacd04fde31efff3940ae9672674", size = 207957, upload-time = "2026-04-10T14:27:59.285Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ac/2b760516c03e2227826d1f7025d89bf6bf6357a28fe75c2a2800873c50bf/jiter-0.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:14c0cb10337c49f5eafe8e7364daca5e29a020ea03580b8f8e6c597fed4e1588", size = 204690, upload-time = "2026-04-10T14:28:00.962Z" }, + { url = "https://files.pythonhosted.org/packages/dc/2e/a44c20c58aeed0355f2d326969a181696aeb551a25195f47563908a815be/jiter-0.14.0-cp314-cp314t-win_arm64.whl", hash = "sha256:5419d4aa2024961da9fe12a9cfe7484996735dca99e8e090b5c88595ef1951ff", size = 191338, upload-time = "2026-04-10T14:28:02.853Z" }, + { url = "https://files.pythonhosted.org/packages/32/a1/ef34ca2cab2962598591636a1804b93645821201cc0095d4a93a9a329c9d/jiter-0.14.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:a25ffa2dbbdf8721855612f6dca15c108224b12d0c4024d0ac3d7902132b4211", size = 311366, upload-time = "2026-04-10T14:28:27.943Z" }, + { url = "https://files.pythonhosted.org/packages/60/bb/520576a532a6b8a6f42747afed289c8448c879a34d7802fe2c832d4fd38f/jiter-0.14.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ac9cbaa86c10996b92bd12c91659b60f939f8e28fcfa6bc11a0e90a774ce95b", size = 309873, upload-time = "2026-04-10T14:28:29.688Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/c16db114ea1f2f532f198aa8dc39585026af45af362c69a0492f31bc4821/jiter-0.14.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:844e73b6c56b505e9e169234ea3bdea2ea43f769f847f47ac559ba1d2361ebea", size = 344816, upload-time = "2026-04-10T14:28:31.348Z" }, + { url = "https://files.pythonhosted.org/packages/99/8f/15e7741ff19e9bcd4d753f7ff22f988fd54592f134ca13701c13ea8c20e0/jiter-0.14.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e52c076f187405fc21523c746c04399c9af8ece566077ed147b2126f2bcba577", size = 351445, upload-time = "2026-04-10T14:28:33.093Z" }, + { url = "https://files.pythonhosted.org/packages/21/42/9042c3f3019de4adcb8c16591c325ec7255beea9fcd33a42a43f3b0b1000/jiter-0.14.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:fbd9e482663ca9d005d051330e4d2d8150bb208a209409c10f7e7dfdf7c49da9", size = 308810, upload-time = "2026-04-10T14:28:34.673Z" }, + { url = "https://files.pythonhosted.org/packages/60/cf/a7e19b308bd86bb04776803b1f01a5f9a287a4c55205f4708827ee487fbf/jiter-0.14.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:33a20d838b91ef376b3a56896d5b04e725c7df5bc4864cc6569cf046a8d73b6d", size = 308443, upload-time = "2026-04-10T14:28:36.658Z" }, + { url = "https://files.pythonhosted.org/packages/ca/44/e26ede3f0caeff93f222559cb0cc4ca68579f07d009d7b6010c5b586f9b1/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:432c4db5255d86a259efde91e55cb4c8d18c0521d844c9e2e7efcce3899fb016", size = 343039, upload-time = "2026-04-10T14:28:38.356Z" }, + { url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" }, +] + +[[package]] +name = "job-application-agent-backend" +version = "1.0.0" +source = { editable = "." } +dependencies = [ + { name = "asyncmy" }, + { name = "beautifulsoup4" }, + { name = "crewai", extra = ["anthropic"] }, + { name = "crewai-tools" }, + { name = "fastapi" }, + { name = "google-auth" }, + { name = "google-cloud-bigquery" }, + { name = "google-cloud-storage" }, + { name = "langchain-community" }, + { name = "langchain-google-community", extra = ["featurestore"] }, + { name = "langchain-google-genai" }, + { name = "langchain-text-splitters" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "passlib", extra = ["bcrypt"] }, + { name = "pydantic", extra = ["email"] }, + { name = "pydantic-settings" }, + { name = "pymysql" }, + { name = "pypdf" }, + { name = "python-docx" }, + { name = "python-dotenv" }, + { name = "python-jose", extra = ["cryptography"] }, + { name = "python-multipart" }, + { name = "requests" }, + { name = "sqlalchemy", extra = ["asyncio"] }, + { name = "sse-starlette" }, + { name = "uvicorn", extra = ["standard"] }, +] + +[package.dev-dependencies] +dev = [ + { name = "httpx" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, +] + +[package.metadata] +requires-dist = [ + { name = "asyncmy", specifier = ">=0.2.9" }, + { name = "beautifulsoup4" }, + { name = "crewai", extras = ["anthropic"] }, + { name = "crewai-tools" }, + { name = "fastapi", specifier = ">=0.115.0,<0.116" }, + { name = "google-auth", specifier = ">=2.25.0" }, + { name = "google-cloud-bigquery", specifier = ">=3.0.0" }, + { name = "google-cloud-storage", specifier = ">=2.14.0" }, + { name = "langchain-community" }, + { name = "langchain-google-community", extras = ["featurestore"] }, + { name = "langchain-google-genai" }, + { name = "langchain-text-splitters" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "passlib", extras = ["bcrypt"], specifier = ">=1.7.4" }, + { name = "pydantic", extras = ["email"], specifier = ">=2.0" }, + { name = "pydantic-settings", specifier = ">=2.0" }, + { name = "pymysql", specifier = ">=1.1.0" }, + { name = "pypdf" }, + { name = "python-docx" }, + { name = "python-dotenv", specifier = ">=1.0.0" }, + { name = "python-jose", extras = ["cryptography"], specifier = ">=3.3.0" }, + { name = "python-multipart", specifier = ">=0.0.7" }, + { name = "requests" }, + { name = "sqlalchemy", extras = ["asyncio"], specifier = ">=2.0" }, + { name = "sse-starlette", specifier = ">=1.8.0" }, + { name = "uvicorn", extras = ["standard"], specifier = ">=0.30.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "httpx", specifier = ">=0.27" }, + { name = "pytest", specifier = ">=8.0" }, + { name = "pytest-asyncio", specifier = ">=0.23" }, +] + +[[package]] +name = "json-repair" +version = "0.25.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/60/484ee009c1867ddc5ffe0ff2131b82e80bbf13fdb59f3d93834f98e56a9f/json_repair-0.25.3.tar.gz", hash = "sha256:4ee970581a05b0b258b749eb8bcac21de380edda97c3717a4edfafc519ec21a4", size = 20619, upload-time = "2024-07-10T13:42:18.977Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/9e/2ab68cc0ff030e1ef78329d7b933473d3ad2c7d0e66aede6a7c87f74753c/json_repair-0.25.3-py3-none-any.whl", hash = "sha256:f00b510dd21b31ebe72581bdb07e66381df2883d6f640c89605e482882c12b17", size = 12812, upload-time = "2024-07-10T13:42:16.918Z" }, +] + +[[package]] +name = "json5" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/3d/bbe62f3d0c05a689c711cff57b2e3ac3d3e526380adb7c781989f075115c/json5-0.10.0.tar.gz", hash = "sha256:e66941c8f0a02026943c52c2eb34ebeb2a6f819a0be05920a6f5243cd30fd559", size = 48202, upload-time = "2024-11-26T19:56:37.823Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/42/797895b952b682c3dafe23b1834507ee7f02f4d6299b65aaa61425763278/json5-0.10.0-py3-none-any.whl", hash = "sha256:19b23410220a7271e8377f81ba8aacba2fdd56947fbb137ee5977cbe1f5e8dfa", size = 34049, upload-time = "2024-11-26T19:56:36.649Z" }, +] + +[[package]] +name = "jsonpatch" +version = "1.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpointer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, +] + +[[package]] +name = "jsonpointer" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/c7/af399a2e7a67fd18d63c40c5e62d3af4e67b836a2107468b6a5ea24c4304/jsonpointer-3.1.1.tar.gz", hash = "sha256:0b801c7db33a904024f6004d526dcc53bbb8a4a0f4e32bfd10beadf60adf1900", size = 9068, upload-time = "2026-03-23T22:32:32.458Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/6a/a83720e953b1682d2d109d3c2dbb0bc9bf28cc1cbc205be4ef4be5da709d/jsonpointer-3.1.1-py3-none-any.whl", hash = "sha256:8ff8b95779d071ba472cf5bc913028df06031797532f08a7d5b602d8b2a488ca", size = 7659, upload-time = "2026-03-23T22:32:31.568Z" }, +] + +[[package]] +name = "jsonref" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/0d/c1f3277e90ccdb50d33ed5ba1ec5b3f0a242ed8c1b1a85d3afeb68464dca/jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552", size = 8814, upload-time = "2023-01-16T16:10:04.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/ec/e1db9922bceb168197a558a2b8c03a7963f1afe93517ddd3cf99f202f996/jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9", size = 9425, upload-time = "2023-01-16T16:10:02.255Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "kubernetes" +version = "36.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "certifi" }, + { name = "durationpy" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "requests-oauthlib" }, + { name = "six" }, + { name = "urllib3" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/57/8b538af5076bc3372949d76f70ba3449bdfe52f9e6488170fa5d4f7cbe70/kubernetes-36.0.2.tar.gz", hash = "sha256:03551fcb49cae1f708f63624041e37403545b7aaed10cbf54e2b01a37a5438e3", size = 2336738, upload-time = "2026-06-01T18:20:30.785Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/2c/5c160dbdef7123f8cc97fd8ece7e0198627a426a2a49614845e9086feb8d/kubernetes-36.0.2-py2.py3-none-any.whl", hash = "sha256:faf9b5241b58de0c4a5069f2a0ffc8ac06fece7215156cd3d3ba081a78a858b6", size = 4617568, upload-time = "2026-06-01T18:20:28.737Z" }, +] + +[[package]] +name = "lance-namespace" +version = "0.8.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lance-namespace-urllib3-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/12/f7ab93b29be3edbf5fc3610714bf2d06088e7f4524bfb38dfd6852458b08/lance_namespace-0.8.6.tar.gz", hash = "sha256:18232e721c8188145f4ec9389cc2dfbeeabf54a619d94885ea1b3375bee9f4af", size = 11529, upload-time = "2026-06-12T17:36:41.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/1b/5b1668ee2dc8910965f390640359112a31157092fcf8e000b89c79b58708/lance_namespace-0.8.6-py3-none-any.whl", hash = "sha256:571eae34f9aad70e5b05020416c2860889b9ec82993ccd0eb015e7b39c3ea309", size = 13383, upload-time = "2026-06-12T17:36:43.456Z" }, +] + +[[package]] +name = "lance-namespace-urllib3-client" +version = "0.8.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dateutil" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/80/fb224b4a89c1c1638cde949cb6cce6c3aca7759effbfea46a3d9c3960b21/lance_namespace_urllib3_client-0.8.6.tar.gz", hash = "sha256:b6fb1d306e74a7576e5309919020be744527de484a63dbf5eed10f8b368548df", size = 228772, upload-time = "2026-06-12T17:36:42.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/90/1e27de15cd1b16785a1c7312beb0a59e75c8344a815f600f58173a565bd1/lance_namespace_urllib3_client-0.8.6-py3-none-any.whl", hash = "sha256:9d78249c3fb15aa3d15d668f78f04a275af3d08d800a7027492f37996ac4968b", size = 369950, upload-time = "2026-06-12T17:36:40.438Z" }, +] + +[[package]] +name = "lancedb" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "deprecation" }, + { name = "lance-namespace" }, + { name = "numpy" }, + { name = "overrides", marker = "python_full_version < '3.12'" }, + { name = "packaging" }, + { name = "pyarrow" }, + { name = "pydantic" }, + { name = "tqdm" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/2f/1577778ad57dba0c55dc13d87230583e14541c82562483ecf8bb2f8e8a00/lancedb-0.30.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:be2a9a43a65c330ccfd08115afb26106cd8d16788522fe7693d3a1f4e01ad321", size = 41959907, upload-time = "2026-03-16T23:03:04.551Z" }, + { url = "https://files.pythonhosted.org/packages/f1/ca/8c2a04ce499a2a97d1a0de2b7e84fa8166f988a9a495e1ada860110489c2/lancedb-0.30.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be6a4ba2a1799a426cbf2ba5ea2559a7389a569e9a31f2409d531ceb59d42f35", size = 43873070, upload-time = "2026-03-16T23:11:01.352Z" }, + { url = "https://files.pythonhosted.org/packages/16/68/e01bf7837454a5ce9e2f6773905e07b09a949bc88136c0773c8166ed7729/lancedb-0.30.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a967ec05f9930770aeb077bc5579769b1bedf559fcd03a592d9644084625918", size = 46891197, upload-time = "2026-03-16T23:14:39.18Z" }, + { url = "https://files.pythonhosted.org/packages/43/d1/9085ad17abd98f3a180d7860df3190b2d76f99f533c76d7c7494cec4139d/lancedb-0.30.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:05c66f40f7d4f6f24208e786c40f84b87b1b8e55505305849dd3fed3b78431a3", size = 43877660, upload-time = "2026-03-16T23:11:00.837Z" }, + { url = "https://files.pythonhosted.org/packages/ea/69/504ee25c57c3f23c80276b5b7b5e4c0f98a5197a7e9e51d3c50500d2b53a/lancedb-0.30.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:bdcd27d98554ed11b6f345b14d1307b0e2332d5654767e9ee2e23d9b2d6513d1", size = 46932144, upload-time = "2026-03-16T23:15:00.474Z" }, + { url = "https://files.pythonhosted.org/packages/2c/85/d5550f22023e672af1945394f7a06a578fcab2980ecc6666acef3428a771/lancedb-0.30.0-cp39-abi3-win_amd64.whl", hash = "sha256:4751ff0446b90be4d4dccfe05f6c105f403a05f3b8531ab99eedc1c656aca950", size = 51121310, upload-time = "2026-03-16T23:43:23.89Z" }, +] + +[[package]] +name = "langchain" +version = "1.3.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "langgraph" }, + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/7c/651d0dc4913a7a892156c03dd343b99cfe19ee729e6911ab1f4fe7567b8b/langchain-1.3.9.tar.gz", hash = "sha256:9b14ef0db9ef314299ded858b22ca2a40b8f1b05c8c9cb6b82d53a53075fef00", size = 631514, upload-time = "2026-06-12T16:53:27.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/55/3481619d21b9bdfbfda8680fba5cfc6cfe926789b8eaaad95353078cfa20/langchain-1.3.9-py3-none-any.whl", hash = "sha256:4af49ad1095799e4408b489fb79d4b8b49292453618b202d8a697fca59bb6871", size = 132873, upload-time = "2026-06-12T16:53:25.489Z" }, +] + +[[package]] +name = "langchain-classic" +version = "1.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "langchain-text-splitters" }, + { name = "langsmith" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8d/65/6b5e8a7ff2f2968652c88a67dcecb925b9d8f0a0ce9458c76cd5a0dbd138/langchain_classic-1.0.8.tar.gz", hash = "sha256:ada0cc341a8a5b80fb24d73bdfaaeb849056ee2d8a41cc468355163fd3667484", size = 10557071, upload-time = "2026-06-10T21:27:54.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/9a/b8f5cb7490fdbf233088031fc69c9c747439d4097f67f196c1eb4869916d/langchain_classic-1.0.8-py3-none-any.whl", hash = "sha256:1a11ea7fbe630c4f2af2f3873d27718ceac9488cf32d0821030be7cf039a6213", size = 1041536, upload-time = "2026-06-10T21:27:52.767Z" }, +] + +[[package]] +name = "langchain-community" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "httpx-sse" }, + { name = "langchain-classic" }, + { name = "langchain-core" }, + { name = "langsmith" }, + { name = "numpy" }, + { name = "pydantic-settings" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sqlalchemy" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/0c/e3aca1f2b1c5b95f8b87cb2b6e81a6f20d538c07a128419dc01cef0617b6/langchain_community-0.4.2.tar.gz", hash = "sha256:a99308160d53d7e9b5965ee665e5173709914338210089fd5788ad724432c21e", size = 33268708, upload-time = "2026-05-22T19:42:59.374Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/39/5d97e42a3e95dc2a6d71b2f902a3fae71786131e11d01bddb604accb0ebe/langchain_community-0.4.2-py3-none-any.whl", hash = "sha256:84dd8c5122532394d5b6849a5fc9995ef28e4f77227daeb09f24b3d942e9e466", size = 2364406, upload-time = "2026-05-22T19:42:57.103Z" }, +] + +[[package]] +name = "langchain-core" +version = "1.4.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpatch" }, + { name = "langchain-protocol" }, + { name = "langsmith" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "tenacity" }, + { name = "typing-extensions" }, + { name = "uuid-utils" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/2b/fffaff399d20a56d40b9562fa19701e91abd72d8c9d9bc8c2673077b56b6/langchain_core-1.4.7.tar.gz", hash = "sha256:7a825d77de0a3f39adbd9d09612a75e85527e14a52c1601089bcc062972d9f2b", size = 952522, upload-time = "2026-06-12T19:23:57.588Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3e/dcdffa60078ae7b3a00ebb4cbbf1a204a14c3609983c604886523a7d4418/langchain_core-1.4.7-py3-none-any.whl", hash = "sha256:bcadd51951140ecdcba98311dbd931ba5de02a5ba8a2288dad5069c1eea2a13d", size = 554941, upload-time = "2026-06-12T19:23:55.826Z" }, +] + +[[package]] +name = "langchain-google-community" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core" }, + { name = "google-api-python-client" }, + { name = "google-cloud-core" }, + { name = "google-cloud-modelarmor" }, + { name = "grpcio" }, + { name = "langchain" }, + { name = "langchain-community" }, + { name = "langchain-core" }, + { name = "langgraph" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/d5/14edabd51bddddefdb6466c399544f4427d93eca1223c8b5b43dc0d01b2f/langchain_google_community-4.0.0.tar.gz", hash = "sha256:8851da3dbe3a398c39065ec672eecf1763986122fb7626a625cfe3b54dc0e400", size = 1004858, upload-time = "2026-04-29T21:52:28.999Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/42/4228fb6117e2cecd0192e03c834afce7b9fb133db380c590cbe8022ed67c/langchain_google_community-4.0.0-py3-none-any.whl", hash = "sha256:919b12a61341b7401259319b04f0c34aa7175ac4ee5b05cc1bc54eae65710ddb", size = 168481, upload-time = "2026-04-29T21:52:27.389Z" }, +] + +[package.optional-dependencies] +featurestore = [ + { name = "db-dtypes" }, + { name = "google-cloud-aiplatform" }, + { name = "google-cloud-bigquery-storage" }, + { name = "pandas" }, + { name = "pyarrow" }, + { name = "pydantic" }, +] + +[[package]] +name = "langchain-google-genai" +version = "4.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filetype" }, + { name = "google-genai" }, + { name = "langchain-core" }, + { name = "pydantic" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/4b/a1acdba3a86f861d379cb654f234d334c04a4c93178c8c7b0182ddeb9966/langchain_google_genai-4.2.5.tar.gz", hash = "sha256:2abab4be22699a9cc29948b2bf012946f51a0bbf10ab3a4a9a129047234829f8", size = 271850, upload-time = "2026-06-10T01:48:57.06Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/82/3d4d3dc181ea1756f323dad4d5936239c2f404ea0acb5102316224280634/langchain_google_genai-4.2.5-py3-none-any.whl", hash = "sha256:289699ddb8e1076a76144f83e25e0086e4ce629b196fc103251f2a629e0756e5", size = 69404, upload-time = "2026-06-10T01:48:56.09Z" }, +] + +[[package]] +name = "langchain-protocol" +version = "0.0.17" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/44/b3/4e2429876c7a35585618caa2b9f9089f7162a6b50562b614ad82ac11c17e/langchain_protocol-0.0.17.tar.gz", hash = "sha256:e7cbe58c205df4b4fd87dc6d5bb23f10e13b236d0e2e1b0b9d05bc2b648f3eea", size = 6026, upload-time = "2026-06-12T18:39:51.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/0a/a1bfe72c6ec856e99773bbd96c8086421e554b3693d0142b9ea009c6ac92/langchain_protocol-0.0.17-py3-none-any.whl", hash = "sha256:982a08fe152586ed10d4ff3d538c2e0b5766e5f307cdea325e10be3f2c17cae6", size = 7096, upload-time = "2026-06-12T18:39:50.973Z" }, +] + +[[package]] +name = "langchain-text-splitters" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/9f/6c545900fefb7b00ddfa3f16b80d61338a0ec68c31c5451eeeab99082760/langchain_text_splitters-1.1.2.tar.gz", hash = "sha256:782a723db0a4746ac91e251c7c1d57fd23636e4f38ed733074e28d7a86f41627", size = 293580, upload-time = "2026-04-16T14:20:39.162Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/26/1ef06f56198d631296d646a6223de35bcc6cf9795ceb2442816bc963b84c/langchain_text_splitters-1.1.2-py3-none-any.whl", hash = "sha256:a2de0d799ff31886429fd6e2e0032df275b60ec817c19059a7b46181cc1c2f10", size = 35903, upload-time = "2026-04-16T14:20:38.243Z" }, +] + +[[package]] +name = "langgraph" +version = "1.2.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "langgraph-checkpoint" }, + { name = "langgraph-prebuilt" }, + { name = "langgraph-sdk" }, + { name = "pydantic" }, + { name = "xxhash" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/77/9d/7c9ebd17b95569122e2d2e641f535cf086c870d66bb8e59be33cdba856b3/langgraph-1.2.5.tar.gz", hash = "sha256:09a3bdec6fdb3228623fc78b6f69a1400d383f66348d0b04d0efb692022cc6ef", size = 712532, upload-time = "2026-06-12T20:30:58.498Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/03/187281cf61845c5a9c397ae6cd9cd73bb54b39435e5575a7b83c853e5b76/langgraph-1.2.5-py3-none-any.whl", hash = "sha256:9286bb5def82fc865959c14378fe473518dc097d586225f622f029637a2a4bb9", size = 246150, upload-time = "2026-06-12T20:30:57.018Z" }, +] + +[[package]] +name = "langgraph-checkpoint" +version = "4.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "ormsgpack" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/47/886af6f886f0bff2273164a45f008694e48a96ff3cd25ff0228f2aa9480e/langgraph_checkpoint-4.1.1.tar.gz", hash = "sha256:6c2bdb530c91f91d7d9c1bd100925d0fc4f498d418c17f3587d1526279482a25", size = 184020, upload-time = "2026-05-22T16:57:38.503Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/b4/71425e3e38be92611300b9cc5e46a5bf98ab23f5ea8a75b73d02a2f1413c/langgraph_checkpoint-4.1.1-py3-none-any.whl", hash = "sha256:25d29144b082827218e7bc3f1e9b0566a4bb007895cd6cc26f66a8428739f56e", size = 56212, upload-time = "2026-05-22T16:57:37.203Z" }, +] + +[[package]] +name = "langgraph-prebuilt" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "langchain-core" }, + { name = "langgraph-checkpoint" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/66/ed9b93f56bc17ef22d551892f0ac2b225a97fe0fcf23a511b857f70d590b/langgraph_prebuilt-1.1.0.tar.gz", hash = "sha256:3c579cf6eed2d17f9c157c2d0fcaddcd8688524e7022d3b22b37a3bf4589d528", size = 178833, upload-time = "2026-05-12T03:37:49.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/43/3fe1a700b8490ed02679cdbbc8c915eb23a092faf496c9c1118abcd10be3/langgraph_prebuilt-1.1.0-py3-none-any.whl", hash = "sha256:51e311747d755b751d5c6b39b0c1446124d3a7643d2515017e6714b323508fc9", size = 41043, upload-time = "2026-05-12T03:37:48.007Z" }, +] + +[[package]] +name = "langgraph-sdk" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, + { name = "langchain-core" }, + { name = "langchain-protocol" }, + { name = "orjson" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/2b/bd8ac26d4e97f6df88ef05ce5b6a38945a3903e1025d926f4752aa88aa97/langgraph_sdk-0.4.2.tar.gz", hash = "sha256:b88f0f5f6328ac0680d6790614a905b2bcfa257f2276dba4e38f0e86db0aa738", size = 348327, upload-time = "2026-06-01T17:51:19.856Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/05/aac507337cceae773c2cc9ab91eb6301963af7aeeb55b4217a00e15aff17/langgraph_sdk-0.4.2-py3-none-any.whl", hash = "sha256:75fa5096c1177ce39c847096a8fe3745ffd480ddb412995f836e9f5f884c43dd", size = 160521, upload-time = "2026-06-01T17:51:18.849Z" }, +] + +[[package]] +name = "langsmith" +version = "0.8.16" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx" }, + { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "uuid-utils" }, + { name = "websockets" }, + { name = "xxhash" }, + { name = "zstandard" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/19/1ed2af9c6d5d7a148e6b3e809b0af8ce8848e1f66a0726c8223d30e5292b/langsmith-0.8.16.tar.gz", hash = "sha256:8c943f0c9185fe2a9637b5b442828b7efd823b1de28d50d14c136c79660f909b", size = 4513275, upload-time = "2026-06-15T17:41:24.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/13/8186a9867c67f3fef9958a1d60b45f46c1a9b5d28f67d8fd136f28ceab3f/langsmith-0.8.16-py3-none-any.whl", hash = "sha256:081e57c0175d142192683288740a796eb0eb32d9e703b4bf9133678ceefe3286", size = 500303, upload-time = "2026-06-15T17:41:22.33Z" }, +] + +[[package]] +name = "linkify-it-py" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "uc-micro-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/c9/06ea13676ef354f0af6169587ae292d3e2406e212876a413bf9eece4eb23/linkify_it_py-2.1.0.tar.gz", hash = "sha256:43360231720999c10e9328dc3691160e27a718e280673d444c38d7d3aaa3b98b", size = 29158, upload-time = "2026-03-01T07:48:47.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/de/88b3be5c31b22333b3ca2f6ff1de4e863d8fe45aaea7485f591970ec1d3e/linkify_it_py-2.1.0-py3-none-any.whl", hash = "sha256:0d252c1594ecba2ecedc444053db5d3a9b7ec1b0dd929c8f1d74dce89f86c05e", size = 19878, upload-time = "2026-03-01T07:48:46.098Z" }, +] + +[[package]] +name = "lxml" +version = "6.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/3b/aab6728cae887456f409b4d75e8a01856e4f04bd510de38052a47768b680/lxml-6.1.1.tar.gz", hash = "sha256:ba96ae44888e0185281e937633a743ea90d5a196c6000f82565ebb0580012d40", size = 4197430, upload-time = "2026-05-18T19:19:06.424Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/b0/83f481780d1548750b8ce2ec824073deef2f452d9cd1a6faff8507e3d16d/lxml-6.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:53b7d2b7a10b1c35c0a5e21e9224accf60c1bbfba523990732e521b2b73adef2", size = 8526461, upload-time = "2026-05-18T19:17:25.862Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/30fa0f808002c7329397bfbb24e306789c0b29f04aa5842c07b174b4216f/lxml-6.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ff3f333630ab480244a1bff72043e511a91eb22e7595dead8653ee5612dd8f3d", size = 4595375, upload-time = "2026-05-18T19:17:34.555Z" }, + { url = "https://files.pythonhosted.org/packages/4f/d2/edb71cf0e561581a7c5eb2626244320eb04e9f8ce6d563184fd668b45073/lxml-6.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a4bbea04c97f6d78a48e3fbc1cb9116d2780b1b39e03a23f6eb9b603fd61f510", size = 4923654, upload-time = "2026-05-18T19:17:42.917Z" }, + { url = "https://files.pythonhosted.org/packages/4c/77/1bc7eeb0de4577d783fb625aa092cc9357883bba35845a3666bf1259f3dc/lxml-6.1.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:db1d75f6617a49c1c01bc7023713e0ff59ab32c9579ae62a7674c0e34f3b0b0a", size = 5067921, upload-time = "2026-05-18T19:17:49.175Z" }, + { url = "https://files.pythonhosted.org/packages/1b/3c/c0690d74bd2bc17bc03b5b0d093569ead597dd0bfa088bf99eef8c24e19c/lxml-6.1.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a12689be69a28ddaa0ab99a5a1137da2afd5f8f16df7b5680b66f616d3eda1d", size = 5002456, upload-time = "2026-05-18T19:17:59.715Z" }, + { url = "https://files.pythonhosted.org/packages/66/8d/d1b3271af0c0f1e27e8472a849e4d2c65bc7766884b9ad2da9e76e145c88/lxml-6.1.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b73c339ae29b90fd2d06e58ebd555a751bde9cd6bbd36cc0281b9a2c94e9d8", size = 5202776, upload-time = "2026-05-18T19:18:08.924Z" }, + { url = "https://files.pythonhosted.org/packages/7a/45/689824ffb237fd10125ad273f32b28ff04dc6203c2822c85ff65a93df65e/lxml-6.1.1-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:752d3bbfe874715ccd0aec7f88d7fc623c0f1fd7aa7b3238a084e017bad2a009", size = 5329945, upload-time = "2026-05-18T19:18:13.673Z" }, + { url = "https://files.pythonhosted.org/packages/5d/c0/ef73af53767e958fd87d437c170f272e2f6e6c0f854939f133a895f1e711/lxml-6.1.1-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:6b1761fbf9ec984e2e9d9c589ef5f5fd684b7c19f92aadd567a26c5224958db6", size = 4659237, upload-time = "2026-05-18T19:18:18.657Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5e/e1158e40397585e91cb0472374a1f63d0926a1ddeaa92f13d1a1ffe306d5/lxml-6.1.1-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d680fbcb768404c601ecb43519ecd8461f6954cb11c06a78962f666832ccfca8", size = 5265904, upload-time = "2026-05-18T19:18:24.883Z" }, + { url = "https://files.pythonhosted.org/packages/a0/16/8687e5d1400ed1c0bc41dace232ebb7553952b618ea1f2e5fb6e2cfbbe23/lxml-6.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:162af1091cd785f2f27e62d3547ae9bc58ec5c86dd314d67021fd02463708d83", size = 5045225, upload-time = "2026-05-18T19:17:20.073Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/d877bd1ae2e5ffdfd4836565aba350db31feb2f2656d6ce70316ed66a05e/lxml-6.1.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e9308ff8241c532df3f3e570f9a5aeed6c853f888512ba4b75638d7c11c95ef6", size = 4712721, upload-time = "2026-05-18T19:17:40.512Z" }, + { url = "https://files.pythonhosted.org/packages/44/4d/1f44fd1d770b10dacbf6b5c6e520f4d6e0708744930f719dc04e67cab981/lxml-6.1.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5f6994074ebae6ffb04447268e37dc16edc304f9859cf91acb86e0af6c1b395c", size = 5252549, upload-time = "2026-05-18T19:17:51.236Z" }, + { url = "https://files.pythonhosted.org/packages/64/5d/1d66b84f850089254c230ef6ea6b267a5a54e2e179a5d960036a05d501d7/lxml-6.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:80c2dfadb855da477cf73373ad29a333535dedb9b12bad02c9814c8e2b43bf08", size = 5226877, upload-time = "2026-05-18T19:18:00.875Z" }, + { url = "https://files.pythonhosted.org/packages/ad/00/84c4b5302d42a2d0184f38d538c8a197f33b52a50bd4f7bcfe990bce3036/lxml-6.1.1-cp311-cp311-win32.whl", hash = "sha256:30a89d3ac8faec007453fb541f3f46807eeec88edd5826f6e3fe001752a2c621", size = 3594072, upload-time = "2026-05-18T19:17:12.714Z" }, + { url = "https://files.pythonhosted.org/packages/61/9d/2e2f7d876349f45e0f3e29f72da311668853d59b58d473a2dea4f0160135/lxml-6.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:abbefa31eee84842140f67acef1c828e28bba8bbf0c3bc6e5492a9af88152c28", size = 4025469, upload-time = "2026-05-18T19:17:50.566Z" }, + { url = "https://files.pythonhosted.org/packages/b0/d5/570e6390e4110331e6208b2ba83d1482cc9146808ee118b22824a34c1070/lxml-6.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:dcb292aa7fe485ceff7af4f92e46c5af397daec5dff64871a528f0fc47a3cc5b", size = 3667640, upload-time = "2026-05-19T19:22:48.293Z" }, + { url = "https://files.pythonhosted.org/packages/6a/6e/c4add832b6fc1e887125b96f880d7b9b70aae5248718e046b1704bcac4b9/lxml-6.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:104c09bda8d2a562824c0e319d0768ce26a779b7601e0931d33b09b53c392ef7", size = 8570821, upload-time = "2026-05-18T19:17:42.068Z" }, + { url = "https://files.pythonhosted.org/packages/22/00/ff3009c88e65de8011630acf8ab5a09cb2becd2aaf47fba2f3449f6224e9/lxml-6.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:25c6997a9a534e016695a0ba06b2f07945de682731ff01065b6d5a4474179da1", size = 4624252, upload-time = "2026-05-18T19:17:47.897Z" }, + { url = "https://files.pythonhosted.org/packages/42/95/bb63f0fd62e554fe078e1fb3c8fe9083c14ddc7ad7fa178d10e57e071ac7/lxml-6.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c921ba5c51e4e9f63b8b00267d06566e1f63407408a0496da2d1d0bfc819c7fc", size = 4930746, upload-time = "2026-05-18T19:18:29.637Z" }, + { url = "https://files.pythonhosted.org/packages/eb/99/0013e8d9b5960f4f041cf0b73e2f80c23eb5205b1f7bfb20203243651359/lxml-6.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:54a7f95e4de5fb94e2f9f4b9055c6ba33bf3d628fd77a1d647c5923caa2cdcdc", size = 5093723, upload-time = "2026-05-18T19:18:34.168Z" }, + { url = "https://files.pythonhosted.org/packages/29/91/317b332636bfc7bddcff828d41b3307f50043f4b237e40849c333d80fa1a/lxml-6.1.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f2ec43df44b1f76249ee0a615334f9b5b060e1c8bd90e706dad2d14d02f383", size = 5005557, upload-time = "2026-05-18T19:18:39.798Z" }, + { url = "https://files.pythonhosted.org/packages/42/2f/cc9bf06afe70f9c9093ae60855d9759da9db601ec4080f7473319666ffd7/lxml-6.1.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:70ef8a7e102a1508f8121aae5b0867abd663f72c14f0a9c937e6554cb4587b7b", size = 5631036, upload-time = "2026-05-18T19:18:44.858Z" }, + { url = "https://files.pythonhosted.org/packages/08/f6/af32e23e563971ffb0fb86be52bc5be5c2c118858ffc119bf6a9039b173d/lxml-6.1.1-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebe6af670449830d6d9b752c256a983291c766a1365ba5d5460048f9e33a7818", size = 5240367, upload-time = "2026-05-18T19:18:49.217Z" }, + { url = "https://files.pythonhosted.org/packages/78/83/8555d40948b09ce86f1bd0c68a7ac31d07b1929f92cc1b074006c97ef2d2/lxml-6.1.1-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:27acc820660aaffa4f7c087f29120e12980f7779d56d8492d263170111284740", size = 5350171, upload-time = "2026-05-18T19:18:52.779Z" }, + { url = "https://files.pythonhosted.org/packages/63/75/5d92da93729b7bad783689e6496049fa40927b45bec7bf183c981de3ca70/lxml-6.1.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:1db753c9115ec7100d073b744d17e25e88a8f90f5c39b2f5dd878149af59671f", size = 4694874, upload-time = "2026-05-18T19:18:55.139Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b5/3aad415a9a25b822e783f15deeb4dffccf5113030f1afa2222dd929313d9/lxml-6.1.1-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4f469aebd783bb741c2ecb2a681008fd26bfe5c16a9a72ed5467f834e810df2", size = 5244492, upload-time = "2026-05-18T19:19:01.28Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a1/5fcf7eb9904b80086aa47dcf0027de07b1bb990afad2e6823144c368ae04/lxml-6.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:766b010012d59470072c1816b5b6c69f1d243e5db36ea5968e94accf430a4635", size = 5048232, upload-time = "2026-05-18T19:18:12.67Z" }, + { url = "https://files.pythonhosted.org/packages/77/74/1f601b63c7a69fcdf10fa9b148c81da8442204194f6c55509cc485c786b9/lxml-6.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b8d812c6011c08b8111a15e54dd990b8923692d80adf35488bee34026c35accf", size = 4777023, upload-time = "2026-05-18T19:18:15.928Z" }, + { url = "https://files.pythonhosted.org/packages/a2/b9/7a78f51aec95b1bf780d78e12705a9f6533284f8693dc5c0e6724fa53d3f/lxml-6.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fe0306bd29505a9177aac19f1877174b0e7422c222a59f70b2cd41633448c3dc", size = 5645773, upload-time = "2026-05-18T19:18:23.223Z" }, + { url = "https://files.pythonhosted.org/packages/a5/6e/98a7b7ad54e4e74fa1f20fff776913980619d0ebe5558232d7da6580bdd8/lxml-6.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5ba186ad207446c65d3bb3d3e0412b032b1d9f595e59861e2354798c5703d955", size = 5233088, upload-time = "2026-05-18T19:18:31.433Z" }, + { url = "https://files.pythonhosted.org/packages/65/d1/bc0ed2427bf609f2ee10da303a6a226f9c8bce94f945dc29a32ce55de6e4/lxml-6.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aa366a1e55b8ebfe8ca8ddc3cfe75c8ebade181aeb0f661d0cb05986b647f72a", size = 5260995, upload-time = "2026-05-18T19:18:37.091Z" }, + { url = "https://files.pythonhosted.org/packages/69/8b/6772e1a4b513fc50a8d931f19edde0e13ae6918510a1e13ff67864f3e5ed/lxml-6.1.1-cp312-cp312-win32.whl", hash = "sha256:126c93f7f56f0eda92f6d8c619edc463a4f23d9252f1c9d0405a76f25fa9f11a", size = 3596382, upload-time = "2026-05-18T19:17:18.37Z" }, + { url = "https://files.pythonhosted.org/packages/1b/89/45198e9624762af2dfd2cb8782598477ceb29f6e59caab560388ae1f4ec1/lxml-6.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:26e6eda8d38c1fcab1090dd196ee87cbd13788e531937610e2589085de074e77", size = 3997255, upload-time = "2026-05-18T19:17:56.781Z" }, + { url = "https://files.pythonhosted.org/packages/90/a9/7a54b6834088d9ae528a7b780584ba6a39a9457b0ac330479f20ffbc9449/lxml-6.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:6540377fbd53fe1b629172288c464fb18db11ce1fa7dc15891da10aa9dcc3e7f", size = 3659610, upload-time = "2026-05-19T19:22:50.843Z" }, + { url = "https://files.pythonhosted.org/packages/a5/eb/7e6f37c5584ccbb2ff267f56fd0339016938c1c8684cfefab9b33ffc2f36/lxml-6.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:68a9198d0fc122d14bb76837de9aa80cf84caed990b5b237f532ed87d3706736", size = 8559780, upload-time = "2026-05-18T19:17:57.661Z" }, + { url = "https://files.pythonhosted.org/packages/a1/36/587c2521cf23a2cd6c9c22108aa7528f683a1f195ed7ccd23a4b1786ad36/lxml-6.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7d47866cb32fb503450b6edc9df355d10dc49836af2e89901bd6ac6b0896d9d9", size = 4618006, upload-time = "2026-05-18T19:18:04.452Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ca/ab7bfe2bf4c972af5e7878262845ead3a24a929a9b04bc11c7c1ece6c82a/lxml-6.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb7c9811bfaa8b1ed5ed319f5d370dfbcaa59d52ea64be2a5a85e18195930354", size = 4924139, upload-time = "2026-05-18T19:19:04.873Z" }, + { url = "https://files.pythonhosted.org/packages/6b/55/a0c72851dfee5ecc689f949723a73dea457758912542cb955b108eaf0d8f/lxml-6.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:762ff394d5bd56da0cf034a23dcce4e13923f15321a2adfa2ac00201dc6d3fca", size = 5082329, upload-time = "2026-05-18T19:19:09.728Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b6/0608f7d61a3b96cc67e5648a3d906e31a5082093e10e7be65b3886289938/lxml-6.1.1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a088f287f7d8275a33c07f2cac6c50b9319309a0200a39e7e75d80c707723099", size = 4993564, upload-time = "2026-05-18T19:19:13.608Z" }, + { url = "https://files.pythonhosted.org/packages/4c/66/ae227524b066d29d55bf0b453d93d2d793c40218657d643dcbbca13b8faf/lxml-6.1.1-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e902da4b04e6b52e5893900d4b8ab46068f75f3561f01bf1080957f9fd932ed6", size = 5613467, upload-time = "2026-05-18T19:19:16.228Z" }, + { url = "https://files.pythonhosted.org/packages/a6/76/dbe4a00b50385e40194231dcfe5a12c059de7cf90e89c83407d2b085b719/lxml-6.1.1-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1d4962d4c66bf830a7e59ed6cfc17d148149898a3aefa8ec6e59763e6e3ed085", size = 5228304, upload-time = "2026-05-18T19:19:19.354Z" }, + { url = "https://files.pythonhosted.org/packages/1c/01/00b1b8442ed2041793336868ba0b9ea4b13d7da7c085c6404c207a63bf79/lxml-6.1.1-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:581d4c8ae690a6609e64862dd6b7c2489635c2d13907fc2b20f2bc200ff1d21e", size = 5341607, upload-time = "2026-05-18T19:19:22.297Z" }, + { url = "https://files.pythonhosted.org/packages/63/36/1ad29931e9a4638bb707869f01d423a6c815f82152138d1a40dfcfde2b95/lxml-6.1.1-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:876e1ff5930ed8bf295ec5ef9a8155e9b6b1876bbf1deed8b3a8069311875a8f", size = 4700168, upload-time = "2026-05-18T19:19:25.133Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d1/a9536cecf9be18a0dc72d32bead283a2332d1ffebd2dd3ac70ce444686e5/lxml-6.1.1-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9eb9b5a968f6e0f6d640092a567e14529ff8cea2e29d00da6f78a79fa49f013c", size = 5232487, upload-time = "2026-05-18T19:19:28.603Z" }, + { url = "https://files.pythonhosted.org/packages/0e/77/b4fb1e03bf5d130e879214d3100092e386418807fb74dd0adc4b0a48f351/lxml-6.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:aa49e06d94aba782c6a02eecb7e507969e7e7a41b267f1b359bb35585f295d5b", size = 5044231, upload-time = "2026-05-18T19:18:42.246Z" }, + { url = "https://files.pythonhosted.org/packages/26/4c/d00daeeb0a5530c4028a9232aa1b93db3ef4ed2158c116ea73c79a9765b3/lxml-6.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:70cdfd80589d59e43e18005dd7244e8895e93db8ab6a620b7e23df5445a4e3d2", size = 4769450, upload-time = "2026-05-18T19:18:48.013Z" }, + { url = "https://files.pythonhosted.org/packages/ed/6a/715a3a8d156ce42f29cf014706f5410c2ff3b02267774110fc23266409fe/lxml-6.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:aad9aa39483ed8ec44d6d2e59e5b98a0d80676ef0d92f44bfc374836111f62f5", size = 5635874, upload-time = "2026-05-18T19:18:51.914Z" }, + { url = "https://files.pythonhosted.org/packages/45/37/0544bc21dde2a88f3a17b504e6fc79c0e01d25a33c2f6079724e9e72b9c7/lxml-6.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d49514be2f28d895c38cf9d2b72d7b9a07d00314519f456c0b50b53cfcf4c785", size = 5223987, upload-time = "2026-05-18T19:18:59.715Z" }, + { url = "https://files.pythonhosted.org/packages/4d/f8/f6a5e8185bcb28c2befae3d31f8e3df3b811cb0f47746517a81279fcafe1/lxml-6.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:47402e62c52ff5988c1e8c6c63177f5708bccf48e366dea4e3dcf1e645e04947", size = 5250276, upload-time = "2026-05-18T19:19:03.834Z" }, + { url = "https://files.pythonhosted.org/packages/c7/f2/1a2b9f1b7a49d45495369be7ef9ad05b262930f2eab3e3145706fca8083f/lxml-6.1.1-cp313-cp313-win32.whl", hash = "sha256:3483644525531e1d5762b0c44a8e18b6efba321b6dcf8a8952de10b037618bca", size = 3596903, upload-time = "2026-05-18T19:17:29.863Z" }, + { url = "https://files.pythonhosted.org/packages/e6/99/f4ffb024f238eec2131aaa09f3278fb6129cf892741bf68e1fc1afb8c100/lxml-6.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:a10bd2fd62e8ce916ececb342f348f190724a098c1faa056fdfb2a22ad5e8660", size = 3995869, upload-time = "2026-05-18T19:18:02.596Z" }, + { url = "https://files.pythonhosted.org/packages/d1/53/70eb8c5c6037f27448f1e3c54ebede9545a801ae63f0a7254afca4fe8e45/lxml-6.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:424aa57aca0897eb922aef34395bd1289b3b6f04e6bae20ea123c0c7e333cffc", size = 3658490, upload-time = "2026-05-19T19:22:53.846Z" }, + { url = "https://files.pythonhosted.org/packages/13/e2/2e325795566de01d0d7c3bb57d3c370616b2d07b01214e84eec5d3b10963/lxml-6.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:19b7ab10b210b0b3ad7985d9ac4eb66ab09a90b20fe6e2f7ba55d01a234345d0", size = 8577146, upload-time = "2026-05-18T19:18:17.765Z" }, + { url = "https://files.pythonhosted.org/packages/93/cf/5630b5e4be7d2e6bee8efe83865c925221103cf0221303b104ce134b01e2/lxml-6.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c08e5c694306507275f2290073350c4f32e383db15213b2c69e7ff39c1193840", size = 4623866, upload-time = "2026-05-18T19:18:30.669Z" }, + { url = "https://files.pythonhosted.org/packages/d2/51/3904907c063451cf8d4a5c9fe0cad95fa1f4ec57f4e3884fa0731bd7a305/lxml-6.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:74a9717fd0d82effef5c2854f0d917231d5324b5a3eb7275c43ac9fa32f97a14", size = 4950022, upload-time = "2026-05-18T19:19:31.958Z" }, + { url = "https://files.pythonhosted.org/packages/94/cd/9c7611a51c37a2830928405817cc5d56a97f64fab83cc3f628748b135749/lxml-6.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efe0374196335f93b53269acd811b944f2e6bdc88e8894f214bd636455484909", size = 5086695, upload-time = "2026-05-18T19:19:34.764Z" }, + { url = "https://files.pythonhosted.org/packages/da/d6/24e3b5906abb0b674ff2ae195bc3ce59708df2bcd17cf17703b2d7dd643a/lxml-6.1.1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac931cdc9442c1763b8a8f6cd62c0c938737eafc5be75eff88df55fc73bc0d00", size = 5031642, upload-time = "2026-05-18T19:19:37.771Z" }, + { url = "https://files.pythonhosted.org/packages/2d/db/6ec54f99019838bff54785c51da07f189eb4676861c5f2730962b0d8d665/lxml-6.1.1-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:aee395f5d0927f947758b4ec119fd5fc8ec71f07a1c5c52077b30b04c0fa6955", size = 5647338, upload-time = "2026-05-18T19:19:40.553Z" }, + { url = "https://files.pythonhosted.org/packages/42/3d/ef4dcfffd22d27a61805d8ed9f7fb888495bc6aa88648fa07c1eaa5586b6/lxml-6.1.1-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9395002973c827b3ed67db77e6ec09f092919a587022174554096a269378fb13", size = 5239528, upload-time = "2026-05-18T19:19:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/62/bb/37fb3f0dff146bdcfa78eec47879273820b2a0bf350ec236ce14bd0b1c26/lxml-6.1.1-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:73bc2086f141224ebddb7fc5c6a36ca58b31b94b561e1dfe8e073e3270fad1e7", size = 5350730, upload-time = "2026-05-18T19:19:46.307Z" }, + { url = "https://files.pythonhosted.org/packages/90/42/43253f168388df4fae1f38c01df36ddb9bee39e2048167b54cdcbae85ea3/lxml-6.1.1-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:3779def59032b81e44a5f70096ef6bf2082f8d901937dca354474ba09782e245", size = 4697530, upload-time = "2026-05-18T19:19:49.889Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a8/c5a8504f81bbdfc8e7094c2c850cdb4ed6777fc4d5ddd9e5ab819f3b0d54/lxml-6.1.1-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:86c89b9d55ebf820ad7c90bc533410f0d098054f293351f10603c0c46ff598f5", size = 5250670, upload-time = "2026-05-18T19:19:53.199Z" }, + { url = "https://files.pythonhosted.org/packages/77/b7/c7e76ab18744d75e21f320ebf9ff9d1ceae2b54dd431ea5a64caf26c9672/lxml-6.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19607c6bbff2a44cf3fe8250abccd20942d3462473e0a721d01d379ed017e462", size = 5084485, upload-time = "2026-05-18T19:19:08.422Z" }, + { url = "https://files.pythonhosted.org/packages/31/31/b35c53f8ef7b7c31cacd23d3638652fff7bcd1deb6eedb709ab43b685908/lxml-6.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:c6ed5141a5c7507cf3ee76bd363b0d6f801e3321adc35b5d825a23115faa5465", size = 4737635, upload-time = "2026-05-18T19:19:12.321Z" }, + { url = "https://files.pythonhosted.org/packages/d9/06/31f23c813a7fe8e0cb1b175e915b08c9bf4e86d225b210feadbdbe519667/lxml-6.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:62aeb7e85b5d60320b9d77eef2e773994e2c0ce10121b277e0a19804e1654a5a", size = 5670681, upload-time = "2026-05-18T19:19:15.001Z" }, + { url = "https://files.pythonhosted.org/packages/1a/bc/ce619bccc89b1fd9ad8a8e1330ee3f3beff9f2ff95b712d7bbcdd6e22fc3/lxml-6.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b1b963fd8f5caa68e99dfae060d54de1fe9cba899b8718b44a00cdca53c3e590", size = 5238229, upload-time = "2026-05-18T19:19:18.131Z" }, + { url = "https://files.pythonhosted.org/packages/2f/5d/b329acbbedc0b619ebc2be6cf7ee9ed07e80892c88d4dfd612c33805789a/lxml-6.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:63876be28efefa04a1df615b46770e82042cce445cfdce55160522f57b231ccb", size = 5264191, upload-time = "2026-05-18T19:19:21.118Z" }, + { url = "https://files.pythonhosted.org/packages/d6/85/be36fb1425b30db3c3f9df75fe86343ebffb79e6320bd7f588e25bfeac39/lxml-6.1.1-cp314-cp314-win32.whl", hash = "sha256:7f7a92e8583f06b1fd49d01158143b8461cfcd135dcb10ec807270a3051bd603", size = 3657202, upload-time = "2026-05-18T19:17:39.509Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ce/3cf9a827342269f54d405a6202397de63f07c69cbd6ce7d183a3f0cba1e9/lxml-6.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:b2d444f2e66624d68e9c6b211e28a76e22fff5fcabcfff4deac18b529b7d4137", size = 4064497, upload-time = "2026-05-18T19:18:14.662Z" }, + { url = "https://files.pythonhosted.org/packages/d9/3e/1a957bde8f0760039e627f94699f82caa782c9d838d86c3d28245ee67212/lxml-6.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3fd9728a2735fda14f4e8235830c86b539e9661e849665bf926d3f867943b4bf", size = 3741991, upload-time = "2026-05-19T19:22:59.111Z" }, + { url = "https://files.pythonhosted.org/packages/78/b2/00ed55b3a2efa4658fb795c38d1090ec9b3e8a6c3683d4441fa517f09c3b/lxml-6.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:787b2496d0dbe8cd180984e8d29e3a6f76e7ea34db781cb3bd55e4ba1ef8b4ee", size = 8827545, upload-time = "2026-05-18T19:18:41.193Z" }, + { url = "https://files.pythonhosted.org/packages/c0/73/74573db19baa618d5f266f2407898b087ff6927115b00b71e5fc1b700847/lxml-6.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2c8daa471358dc2d6fcf02165e80ec68f77871a286df95bc5cc3816153b0fd2c", size = 4735736, upload-time = "2026-05-18T19:18:46.761Z" }, + { url = "https://files.pythonhosted.org/packages/16/02/6f7061f4f95f51e545d48e87647c54791d204a4e881be4156e7a26ba5338/lxml-6.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:acd7d70b64c0aae0c7922cca83d288a16f5f6da523637697872253415269baef", size = 4970291, upload-time = "2026-05-18T19:19:56.215Z" }, + { url = "https://files.pythonhosted.org/packages/b0/02/55fc057d8283427dea7d6edb102e7a840239c77a64a983d92f62a304c0e9/lxml-6.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4f0dd2f01f9f8a89f565d000e03abcf0a13d692a346c8d22f628d49af098777a", size = 5102822, upload-time = "2026-05-18T19:19:59.223Z" }, + { url = "https://files.pythonhosted.org/packages/e4/48/8e1cf78d89d66850121d9255a2a24414c98f775da93b90cf976956c24b14/lxml-6.1.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b7e8a14c8634bf6f7a568634cb395305a6d964aeb5b7ee32248094bed3a7e2c", size = 5027923, upload-time = "2026-05-18T19:20:01.549Z" }, + { url = "https://files.pythonhosted.org/packages/ed/00/0632a0647612c8af24d26997b3b961397daa9d5b2581444805933629a4cb/lxml-6.1.1-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:86281fbdd6a8162756f8d603f37e3435bfa38043adb79c6dc6a2dfee065e7525", size = 5595843, upload-time = "2026-05-18T19:20:03.93Z" }, + { url = "https://files.pythonhosted.org/packages/bc/86/ab008a7dc360711b66858d61c80a5979a70a09f2aa2b05d9698df80b803d/lxml-6.1.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5d7152ec39ca7c402d8fb9bad86140a15b9503bd0c54484e3f1bbe3dd37ceca", size = 5224515, upload-time = "2026-05-18T19:20:06.381Z" }, + { url = "https://files.pythonhosted.org/packages/75/c6/2702ff375e728e34f56d9a45339a9cf7e4427e917f542225242d63a05afa/lxml-6.1.1-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:88d8cb75b9d82858497a5393e3c63cfbf03035225e4b35a49ed7ccb151e4dc0e", size = 5312511, upload-time = "2026-05-18T19:20:09.308Z" }, + { url = "https://files.pythonhosted.org/packages/b7/57/a5807c98f87a86f10ef9ffab35516df7c0f0c4b6d5d33e9f608ab9c04a31/lxml-6.1.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f64ec5397ea6a41fc1b4af0380d79b44a755b5531dcaccd9940fb260dca93038", size = 4639206, upload-time = "2026-05-18T19:20:11.704Z" }, + { url = "https://files.pythonhosted.org/packages/1f/e1/8a0a2c35734812395f4da4eaf33748a7e5705bfb2a58b128da764339d5ec/lxml-6.1.1-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d34bbf07dbc7ca5970671b1512e928991fb5e9d95365636c9b2d8b4f53af405e", size = 5232404, upload-time = "2026-05-18T19:20:14.064Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e2/0e6a4dd5ad84d01d99aa7bae7cfefd4a760a0e0f8176818241de17d9b6c0/lxml-6.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:17e0e18d4ad8adbd0399291bc44845b69d9dd68439a3cdebdf35ff902ec05072", size = 5083769, upload-time = "2026-05-18T19:19:23.758Z" }, + { url = "https://files.pythonhosted.org/packages/a0/7e/161f33d463f6ffc1c7679104b65086dea120080d49dde4d238f015aaee2f/lxml-6.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:3ab541146f1f6968c462d6c2ac495148e8cdba2f8347700b2141b6ec5a75bf52", size = 4758936, upload-time = "2026-05-18T19:19:27.256Z" }, + { url = "https://files.pythonhosted.org/packages/f1/fb/2369825e3f6ca99305bf9f7b7085fda91c8b0922a89e54d900974aa3ef85/lxml-6.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:2a0217714657e023ef4293500f65aa20fce6164c8fd6b08fa5bd4a859fb14b9b", size = 5620296, upload-time = "2026-05-18T19:19:29.993Z" }, + { url = "https://files.pythonhosted.org/packages/30/90/d61e383146f74c5ab683947ea14dc7b82778838ab9b95ea73a23b60d0191/lxml-6.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:05a82eb6e1530a64f26225b55cbd178113bd0b5af1c2b625f25e5296742c26d2", size = 5228598, upload-time = "2026-05-18T19:19:33.523Z" }, + { url = "https://files.pythonhosted.org/packages/76/2d/2dafd8149e94b05bb070690efd5bb2680720681e03ff03fc57d2b70a1105/lxml-6.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9e36f163528fc50cbef305f02a5fd66d404edf7049cdaff211dbc2cba5a7013e", size = 5247845, upload-time = "2026-05-18T19:19:36.649Z" }, + { url = "https://files.pythonhosted.org/packages/ce/68/b30e913340c380ddac9580c6e6230991fc37240ec4f64704833e4f3e2769/lxml-6.1.1-cp314-cp314t-win32.whl", hash = "sha256:649dda677cf3bd6ac9ae14007ba0c824ded8ce5808b53fc7431d9140399118c1", size = 3897345, upload-time = "2026-05-18T19:17:33.562Z" }, + { url = "https://files.pythonhosted.org/packages/3c/4e/9eb2af5335545f9fbcd7af57bcf87c6025d31eaa31b14ec184a6c8675328/lxml-6.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:793033d6c5cdf33a573f910d9bea14ef8f5771820411d118da8e1182edb53d5e", size = 4393350, upload-time = "2026-05-18T19:18:10.076Z" }, + { url = "https://files.pythonhosted.org/packages/7f/2c/0f1e93c636720e8a3eb59af2bfda99d98b55891e1c53bc30c2e0e865f01b/lxml-6.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:58bb955caba94e467d2a96da17660d2d704e0675894cba21ab8a775b8621fd1c", size = 3817223, upload-time = "2026-05-19T19:22:56.823Z" }, + { url = "https://files.pythonhosted.org/packages/b5/32/86a3f0f724a3a402d4627937a7fc27b160e45e7012b4adf47f6e1e844511/lxml-6.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:31033dc34636ea6b7d5cc11b1ddbda78a14de858ba9d3e1ed4b69a3085bc521e", size = 3930127, upload-time = "2026-05-18T19:19:02.27Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/d832e82af08723761556d004b1d04d281c09f9a8cecd7d3148548c9941a3/lxml-6.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3893c14c4b6ac5b2d54ba8cf03e99fe5104e592de491f19bd6b82756c09f8004", size = 4210769, upload-time = "2026-05-18T19:20:41.427Z" }, + { url = "https://files.pythonhosted.org/packages/6d/39/0dc5949f759ed7d951e0bb8c2f2d9d7aca1908d22352fa84a8afd2ea54af/lxml-6.1.1-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c07da4cebf6889f03ebac8d238f62318e29f495de0aa18a51ea14e61ae907e2e", size = 4318163, upload-time = "2026-05-18T19:20:44.702Z" }, + { url = "https://files.pythonhosted.org/packages/e6/fb/8ab3845fe046ba4cbf74536bcf6801a774b7caf4350de1c5d37f1f0a9e90/lxml-6.1.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6f0ce10945fab9c4c06ce14e22af9059d1a87493a9af4501a5b0b9187e21cf2", size = 4250945, upload-time = "2026-05-18T19:20:47.385Z" }, + { url = "https://files.pythonhosted.org/packages/68/1b/7553ab136894374ffae8851ec06f98f511cd8e66246e41b6be059d0a7289/lxml-6.1.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f8844cd288697c6425c9beba919302241e3278871dc6519515e72b04e987abcf", size = 4401664, upload-time = "2026-05-18T19:20:50.489Z" }, + { url = "https://files.pythonhosted.org/packages/db/a4/441aee36c6f6b249823d20fd91f9be9ab89d7c5a8ae542a4a4ca6d342d56/lxml-6.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ed21202aec73cda4d55d1ce57b389aadb90ffb044e6cd1080b8347efe1b1ec84", size = 3508989, upload-time = "2026-05-18T19:18:38.158Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" }, +] + +[package.optional-dependencies] +linkify = [ + { name = "linkify-it-py" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/db/fefacb2136439fc8dd20e797950e749aa1f4997ed584c62cfb8ef7c2be0e/markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad", size = 11631, upload-time = "2025-09-27T18:36:18.185Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2e/5898933336b61975ce9dc04decbc0a7f2fee78c30353c5efba7f2d6ff27a/markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a", size = 12058, upload-time = "2025-09-27T18:36:19.444Z" }, + { url = "https://files.pythonhosted.org/packages/1d/09/adf2df3699d87d1d8184038df46a9c80d78c0148492323f4693df54e17bb/markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50", size = 24287, upload-time = "2025-09-27T18:36:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf", size = 22940, upload-time = "2025-09-27T18:36:22.249Z" }, + { url = "https://files.pythonhosted.org/packages/19/ae/31c1be199ef767124c042c6c3e904da327a2f7f0cd63a0337e1eca2967a8/markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f", size = 21887, upload-time = "2025-09-27T18:36:23.535Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/7edcab99d5349a4532a459e1fe64f0b0467a3365056ae550d3bcf3f79e1e/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a", size = 23692, upload-time = "2025-09-27T18:36:24.823Z" }, + { url = "https://files.pythonhosted.org/packages/a4/28/6e74cdd26d7514849143d69f0bf2399f929c37dc2b31e6829fd2045b2765/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115", size = 21471, upload-time = "2025-09-27T18:36:25.95Z" }, + { url = "https://files.pythonhosted.org/packages/62/7e/a145f36a5c2945673e590850a6f8014318d5577ed7e5920a4b3448e0865d/markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a", size = 22923, upload-time = "2025-09-27T18:36:27.109Z" }, + { url = "https://files.pythonhosted.org/packages/0f/62/d9c46a7f5c9adbeeeda52f5b8d802e1094e9717705a645efc71b0913a0a8/markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19", size = 14572, upload-time = "2025-09-27T18:36:28.045Z" }, + { url = "https://files.pythonhosted.org/packages/83/8a/4414c03d3f891739326e1783338e48fb49781cc915b2e0ee052aa490d586/markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01", size = 15077, upload-time = "2025-09-27T18:36:29.025Z" }, + { url = "https://files.pythonhosted.org/packages/35/73/893072b42e6862f319b5207adc9ae06070f095b358655f077f69a35601f0/markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c", size = 13876, upload-time = "2025-09-27T18:36:29.954Z" }, + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, + { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, + { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, + { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, + { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, + { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, + { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, + { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, + { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, + { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, + { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, + { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, + { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, + { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, + { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, + { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, + { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, + { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, + { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, + { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, + { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, + { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, + { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, + { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, + { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, + { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, + { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, + { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, + { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, + { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, + { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, + { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, + { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, + { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, + { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, + { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, +] + +[[package]] +name = "mcp" +version = "1.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "httpx" }, + { name = "httpx-sse" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "pydantic-settings" }, + { name = "pyjwt", extra = ["crypto"] }, + { name = "python-multipart" }, + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "sse-starlette" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/6d/62e76bbb8144d6ed86e202b5edd8a4cb631e7c8130f3f4893c3f90262b10/mcp-1.26.0.tar.gz", hash = "sha256:db6e2ef491eecc1a0d93711a76f28dec2e05999f93afd48795da1c1137142c66", size = 608005, upload-time = "2026-01-24T19:40:32.468Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-py3-none-any.whl", hash = "sha256:904a21c33c25aa98ddbeb47273033c435e595bbacfdb177f4bd87f6dceebe1ca", size = 233615, upload-time = "2026-01-24T19:40:30.652Z" }, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/59/fc/f8d0863f8862f25602c0404d75568e89fb6b4109804645e5cdfb1be5cf56/mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0", size = 56114, upload-time = "2026-05-13T09:03:38.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d", size = 66663, upload-time = "2026-05-13T09:03:37.76Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "mmh3" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/1a/edb23803a168f070ded7a3014c6d706f63b90c84ccc024f89d794a3b7a6d/mmh3-5.2.1.tar.gz", hash = "sha256:bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad", size = 33775, upload-time = "2026-03-05T15:55:57.716Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/d7/3312a59df3c1cdd783f4cf0c4ee8e9decff9c5466937182e4cc7dbbfe6c5/mmh3-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dae0f0bd7d30c0ad61b9a504e8e272cb8391eed3f1587edf933f4f6b33437450", size = 56082, upload-time = "2026-03-05T15:53:59.702Z" }, + { url = "https://files.pythonhosted.org/packages/61/96/6f617baa098ca0d2989bfec6d28b5719532cd8d8848782662f5b755f657f/mmh3-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9aeaf53eaa075dd63e81512522fd180097312fb2c9f476333309184285c49ce0", size = 40458, upload-time = "2026-03-05T15:54:01.548Z" }, + { url = "https://files.pythonhosted.org/packages/c1/b4/9cd284bd6062d711e13d26c04d4778ab3f690c1c38a4563e3c767ec8802e/mmh3-5.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082", size = 40079, upload-time = "2026-03-05T15:54:02.743Z" }, + { url = "https://files.pythonhosted.org/packages/f6/09/a806334ce1d3d50bf782b95fcee8b3648e1e170327d4bb7b4bad2ad7d956/mmh3-5.2.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:e080c0637aea036f35507e803a4778f119a9b436617694ae1c5c366805f1e997", size = 97242, upload-time = "2026-03-05T15:54:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/ee/93/723e317dd9e041c4dc4566a2eb53b01ad94de31750e0b834f1643905e97c/mmh3-5.2.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:db0562c5f71d18596dcd45e854cf2eeba27d7543e1a3acdafb7eef728f7fe85d", size = 103082, upload-time = "2026-03-05T15:54:06.387Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/f96121e69cc48696075071531cf574f112e1ffd08059f4bffb41210e6fc5/mmh3-5.2.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d9f9a3ce559a5267014b04b82956993270f63ec91765e13e9fd73daf2d2738e", size = 106054, upload-time = "2026-03-05T15:54:07.506Z" }, + { url = "https://files.pythonhosted.org/packages/82/49/192b987ec48d0b2aecf8ac285a9b11fbc00030f6b9c694664ae923458dde/mmh3-5.2.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:960b1b3efa39872ac8b6cc3a556edd6fb90ed74f08c9c45e028f1005b26aa55d", size = 112910, upload-time = "2026-03-05T15:54:09.403Z" }, + { url = "https://files.pythonhosted.org/packages/cf/a1/03e91fd334ed0144b83343a76eb11f17434cd08f746401488cfeafb2d241/mmh3-5.2.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d30b650595fdbe32366b94cb14f30bb2b625e512bd4e1df00611f99dc5c27fd4", size = 120551, upload-time = "2026-03-05T15:54:10.587Z" }, + { url = "https://files.pythonhosted.org/packages/93/b9/b89a71d2ff35c3a764d1c066c7313fc62c7cc48fa48a4b3b0304a4a0146f/mmh3-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:82f3802bfc4751f420d591c5c864de538b71cea117fce67e4595c2afede08a15", size = 99096, upload-time = "2026-03-05T15:54:11.76Z" }, + { url = "https://files.pythonhosted.org/packages/36/b5/613772c1c6ed5f7b63df55eb131e887cc43720fec392777b95a79d34e640/mmh3-5.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:915e7a2418f10bd1151b1953df06d896db9783c9cfdb9a8ee1f9b3a4331ab503", size = 98524, upload-time = "2026-03-05T15:54:13.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0e/1524566fe8eaf871e4f7bc44095929fcd2620488f402822d848df19d679c/mmh3-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:fc78739b5ec6e4fb02301984a3d442a91406e7700efbe305071e7fd1c78278f2", size = 106239, upload-time = "2026-03-05T15:54:14.601Z" }, + { url = "https://files.pythonhosted.org/packages/04/94/21adfa7d90a7a697137ad6de33eeff6445420ca55e433a5d4919c79bc3b5/mmh3-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:41aac7002a749f08727cb91babff1daf8deac317c0b1f317adc69be0e6c375d1", size = 109797, upload-time = "2026-03-05T15:54:15.819Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e6/1aacc3a219e1aa62fa65669995d4a3562b35be5200ec03680c7e4bec9676/mmh3-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9d8089d853c7963a8ce87fff93e2a67075c0bc08684a08ea6ad13577c38ffc38", size = 97228, upload-time = "2026-03-05T15:54:16.992Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b9/5e4cca8dcccf298add0a27f3c357bc8cf8baf821d35cdc6165e4bd5a48b0/mmh3-5.2.1-cp311-cp311-win32.whl", hash = "sha256:baeb47635cb33375dee4924cd93d7f5dcaa786c740b08423b0209b824a1ee728", size = 40751, upload-time = "2026-03-05T15:54:18.714Z" }, + { url = "https://files.pythonhosted.org/packages/72/fc/5b11d49247f499bcda591171e9cf3b6ee422b19e70aa2cef2e0ae65ca3b9/mmh3-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:1e4ecee40ba19e6975e1120829796770325841c2f153c0e9aecca927194c6a2a", size = 41517, upload-time = "2026-03-05T15:54:19.764Z" }, + { url = "https://files.pythonhosted.org/packages/8a/5f/2a511ee8a1c2a527c77726d5231685b72312c5a1a1b7639ad66a9652aa84/mmh3-5.2.1-cp311-cp311-win_arm64.whl", hash = "sha256:c302245fd6c33d96bd169c7ccf2513c20f4c1e417c07ce9dce107c8bc3f8411f", size = 39287, upload-time = "2026-03-05T15:54:20.904Z" }, + { url = "https://files.pythonhosted.org/packages/92/94/bc5c3b573b40a328c4d141c20e399039ada95e5e2a661df3425c5165fd84/mmh3-5.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0cc21533878e5586b80d74c281d7f8da7932bc8ace50b8d5f6dbf7e3935f63f1", size = 56087, upload-time = "2026-03-05T15:54:21.92Z" }, + { url = "https://files.pythonhosted.org/packages/f6/80/64a02cc3e95c3af0aaa2590849d9ed24a9f14bb93537addde688e039b7c3/mmh3-5.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4eda76074cfca2787c8cf1bec603eaebdddd8b061ad5502f85cddae998d54f00", size = 40500, upload-time = "2026-03-05T15:54:22.953Z" }, + { url = "https://files.pythonhosted.org/packages/8b/72/e6d6602ce18adf4ddcd0e48f2e13590cc92a536199e52109f46f259d3c46/mmh3-5.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:eee884572b06bbe8a2b54f424dbd996139442cf83c76478e1ec162512e0dd2c7", size = 40034, upload-time = "2026-03-05T15:54:23.943Z" }, + { url = "https://files.pythonhosted.org/packages/59/c2/bf4537a8e58e21886ef16477041238cab5095c836496e19fafc34b7445d2/mmh3-5.2.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0d0b7e803191db5f714d264044e06189c8ccd3219e936cc184f07106bd17fd7b", size = 97292, upload-time = "2026-03-05T15:54:25.335Z" }, + { url = "https://files.pythonhosted.org/packages/e5/e2/51ed62063b44d10b06d975ac87af287729eeb5e3ed9772f7584a17983e90/mmh3-5.2.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e6c219e375f6341d0959af814296372d265a8ca1af63825f65e2e87c618f006", size = 103274, upload-time = "2026-03-05T15:54:26.44Z" }, + { url = "https://files.pythonhosted.org/packages/75/ce/12a7524dca59eec92e5b31fdb13ede1e98eda277cf2b786cf73bfbc24e81/mmh3-5.2.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:26fb5b9c3946bf7f1daed7b37e0c03898a6f062149127570f8ede346390a0825", size = 106158, upload-time = "2026-03-05T15:54:28.578Z" }, + { url = "https://files.pythonhosted.org/packages/86/1f/d3ba6dd322d01ab5d44c46c8f0c38ab6bbbf9b5e20e666dfc05bf4a23604/mmh3-5.2.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3c38d142c706201db5b2345166eeef1e7740e3e2422b470b8ba5c8727a9b4c7a", size = 113005, upload-time = "2026-03-05T15:54:29.767Z" }, + { url = "https://files.pythonhosted.org/packages/b6/a9/15d6b6f913294ea41b44d901741298e3718e1cb89ee626b3694625826a43/mmh3-5.2.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50885073e2909251d4718634a191c49ae5f527e5e1736d738e365c3e8be8f22b", size = 120744, upload-time = "2026-03-05T15:54:30.931Z" }, + { url = "https://files.pythonhosted.org/packages/76/b3/70b73923fd0284c439860ff5c871b20210dfdbe9a6b9dd0ee6496d77f174/mmh3-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b3f99e1756fc48ad507b95e5d86f2fb21b3d495012ff13e6592ebac14033f166", size = 99111, upload-time = "2026-03-05T15:54:32.353Z" }, + { url = "https://files.pythonhosted.org/packages/dd/38/99f7f75cd27d10d8b899a1caafb9d531f3903e4d54d572220e3d8ac35e89/mmh3-5.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:62815d2c67f2dd1be76a253d88af4e1da19aeaa1820146dec52cf8bee2958b16", size = 98623, upload-time = "2026-03-05T15:54:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/fd/68/6e292c0853e204c44d2f03ea5f090be3317a0e2d9417ecb62c9eb27687df/mmh3-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8f767ba0911602ddef289404e33835a61168314ebd3c729833db2ed685824211", size = 106437, upload-time = "2026-03-05T15:54:35.177Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c6/fedd7284c459cfb58721d461fcf5607a4c1f5d9ab195d113d51d10164d16/mmh3-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:67e41a497bac88cc1de96eeba56eeb933c39d54bc227352f8455aa87c4ca4000", size = 110002, upload-time = "2026-03-05T15:54:36.673Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ac/ca8e0c19a34f5b71390171d2ff0b9f7f187550d66801a731bb68925126a4/mmh3-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d74a03fb57757ece25aa4b3c1c60157a1cece37a020542785f942e2f827eed5", size = 97507, upload-time = "2026-03-05T15:54:37.804Z" }, + { url = "https://files.pythonhosted.org/packages/df/94/6ebb9094cfc7ac5e7950776b9d13a66bb4a34f83814f32ba2abc9494fc68/mmh3-5.2.1-cp312-cp312-win32.whl", hash = "sha256:7374d6e3ef72afe49697ecd683f3da12f4fc06af2d75433d0580c6746d2fa025", size = 40773, upload-time = "2026-03-05T15:54:40.077Z" }, + { url = "https://files.pythonhosted.org/packages/5b/3c/cd3527198cf159495966551c84a5f36805a10ac17b294f41f67b83f6a4d6/mmh3-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:3a9fed49c6ce4ed7e73f13182760c65c816da006debe67f37635580dfb0fae00", size = 41560, upload-time = "2026-03-05T15:54:41.148Z" }, + { url = "https://files.pythonhosted.org/packages/15/96/6fe5ebd0f970a076e3ed5512871ce7569447b962e96c125528a2f9724470/mmh3-5.2.1-cp312-cp312-win_arm64.whl", hash = "sha256:bbfcb95d9a744e6e2827dfc66ad10e1020e0cac255eb7f85652832d5a264c2fc", size = 39313, upload-time = "2026-03-05T15:54:42.171Z" }, + { url = "https://files.pythonhosted.org/packages/25/a5/9daa0508a1569a54130f6198d5462a92deda870043624aa3ea72721aa765/mmh3-5.2.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:723b2681ed4cc07d3401bbea9c201ad4f2a4ca6ba8cddaff6789f715dd2b391e", size = 40832, upload-time = "2026-03-05T15:54:43.212Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6b/3230c6d80c1f4b766dedf280a92c2241e99f87c1504ff74205ec8cebe451/mmh3-5.2.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:3619473a0e0d329fd4aec8075628f8f616be2da41605300696206d6f36920c3d", size = 41964, upload-time = "2026-03-05T15:54:44.204Z" }, + { url = "https://files.pythonhosted.org/packages/62/fb/648bfddb74a872004b6ee751551bfdda783fe6d70d2e9723bad84dbe5311/mmh3-5.2.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:e48d4dbe0f88e53081da605ae68644e5182752803bbc2beb228cca7f1c4454d6", size = 39114, upload-time = "2026-03-05T15:54:45.205Z" }, + { url = "https://files.pythonhosted.org/packages/95/c2/ab7901f87af438468b496728d11264cb397b3574d41506e71b92128e0373/mmh3-5.2.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:a482ac121de6973897c92c2f31defc6bafb11c83825109275cffce54bb64933f", size = 39819, upload-time = "2026-03-05T15:54:46.509Z" }, + { url = "https://files.pythonhosted.org/packages/2f/ed/6f88dda0df67de1612f2e130ffea34cf84aaee5bff5b0aff4dbff2babe34/mmh3-5.2.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:17fbb47f0885ace8327ce1235d0416dc86a211dcd8cc1e703f41523be32cfec8", size = 40330, upload-time = "2026-03-05T15:54:47.864Z" }, + { url = "https://files.pythonhosted.org/packages/3d/66/7516d23f53cdf90f43fce24ab80c28f45e6851d78b46bef8c02084edf583/mmh3-5.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d51fde50a77f81330523562e3c2734ffdca9c4c9e9d355478117905e1cfe16c6", size = 56078, upload-time = "2026-03-05T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/bc/34/4d152fdf4a91a132cb226b671f11c6b796eada9ab78080fb5ce1e95adaab/mmh3-5.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:19bbd3b841174ae6ed588536ab5e1b1fe83d046e668602c20266547298d939a9", size = 40498, upload-time = "2026-03-05T15:54:49.942Z" }, + { url = "https://files.pythonhosted.org/packages/d4/4c/8e3af1b6d85a299767ec97bd923f12b06267089c1472c27c1696870d1175/mmh3-5.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be77c402d5e882b6fbacfd90823f13da8e0a69658405a39a569c6b58fdb17b03", size = 40033, upload-time = "2026-03-05T15:54:50.994Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/966ea560e32578d453c9e9db53d602cbb1d0da27317e232afa7c38ceba11/mmh3-5.2.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fd96476f04db5ceba1cfa0f21228f67c1f7402296f0e73fee3513aa680ad237b", size = 97320, upload-time = "2026-03-05T15:54:52.072Z" }, + { url = "https://files.pythonhosted.org/packages/bb/0d/2c5f9893b38aeb6b034d1a44ecd55a010148054f6a516abe53b5e4057297/mmh3-5.2.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:707151644085dd0f20fe4f4b573d28e5130c4aaa5f587e95b60989c5926653b5", size = 103299, upload-time = "2026-03-05T15:54:53.569Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fc/2ebaef4a4d4376f89761274dc274035ffd96006ab496b4ee5af9b08f21a9/mmh3-5.2.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3737303ca9ea0f7cb83028781148fcda4f1dac7821db0c47672971dabcf63593", size = 106222, upload-time = "2026-03-05T15:54:55.092Z" }, + { url = "https://files.pythonhosted.org/packages/57/09/ea7ffe126d0ba0406622602a2d05e1e1a6841cc92fc322eb576c95b27fad/mmh3-5.2.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2778fed822d7db23ac5008b181441af0c869455b2e7d001f4019636ac31b6fe4", size = 113048, upload-time = "2026-03-05T15:54:56.305Z" }, + { url = "https://files.pythonhosted.org/packages/85/57/9447032edf93a64aa9bef4d9aa596400b1756f40411890f77a284f6293ca/mmh3-5.2.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d57dea657357230cc780e13920d7fa7db059d58fe721c80020f94476da4ca0a1", size = 120742, upload-time = "2026-03-05T15:54:57.453Z" }, + { url = "https://files.pythonhosted.org/packages/53/82/a86cc87cc88c92e9e1a598fee509f0409435b57879a6129bf3b3e40513c7/mmh3-5.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:169e0d178cb59314456ab30772429a802b25d13227088085b0d49b9fe1533104", size = 99132, upload-time = "2026-03-05T15:54:58.583Z" }, + { url = "https://files.pythonhosted.org/packages/54/f7/6b16eb1b40ee89bb740698735574536bc20d6cdafc65ae702ea235578e05/mmh3-5.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e4e1f580033335c6f76d1e0d6b56baf009d1a64d6a4816347e4271ba951f46d", size = 98686, upload-time = "2026-03-05T15:55:00.078Z" }, + { url = "https://files.pythonhosted.org/packages/e8/88/a601e9f32ad1410f438a6d0544298ea621f989bd34a0731a7190f7dec799/mmh3-5.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:2bd9f19f7f1fcebd74e830f4af0f28adad4975d40d80620be19ffb2b2af56c9f", size = 106479, upload-time = "2026-03-05T15:55:01.532Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5c/ce29ae3dfc4feec4007a437a1b7435fb9507532a25147602cd5b52be86db/mmh3-5.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c88653877aeb514c089d1b3d473451677b8b9a6d1497dbddf1ae7934518b06d2", size = 110030, upload-time = "2026-03-05T15:55:02.934Z" }, + { url = "https://files.pythonhosted.org/packages/13/30/ae444ef2ff87c805d525da4fa63d27cda4fe8a48e77003a036b8461cfd5c/mmh3-5.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fceef7fe67c81e1585198215e42ad3fdba3a25644beda8fbdaf85f4d7b93175a", size = 97536, upload-time = "2026-03-05T15:55:04.135Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f9/dc3787ee5c813cc27fe79f45ad4500d9b5437f23a7402435cc34e07c7718/mmh3-5.2.1-cp313-cp313-win32.whl", hash = "sha256:54b64fb2433bc71488e7a449603bf8bd31fbcf9cb56fbe1eb6d459e90b86c37b", size = 40769, upload-time = "2026-03-05T15:55:05.277Z" }, + { url = "https://files.pythonhosted.org/packages/43/67/850e0b5a1e97799822ebfc4ca0e8c6ece3ed8baf7dcdf64de817dfdda2ca/mmh3-5.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:cae6383181f1e345317742d2ddd88f9e7d2682fa4c9432e3a74e47d92dce0229", size = 41563, upload-time = "2026-03-05T15:55:06.283Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/98c90b28e1da5458e19fbfaf4adb5289208d3bfccd45dd14eab216a2f0bb/mmh3-5.2.1-cp313-cp313-win_arm64.whl", hash = "sha256:022aa1a528604e6c83d0a7705fdef0b5355d897a9e0fa3a8d26709ceaa06965d", size = 39310, upload-time = "2026-03-05T15:55:07.323Z" }, + { url = "https://files.pythonhosted.org/packages/63/b4/65bc1fb2bb7f83e91c30865023b1847cf89a5f237165575e8c83aa536584/mmh3-5.2.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:d771f085fcdf4035786adfb1d8db026df1eb4b41dac1c3d070d1e49512843227", size = 40794, upload-time = "2026-03-05T15:55:09.773Z" }, + { url = "https://files.pythonhosted.org/packages/c4/86/7168b3d83be8eb553897b1fac9da8bbb06568e5cfe555ffc329ebb46f59d/mmh3-5.2.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:7f196cd7910d71e9d9860da0ff7a77f64d22c1ad931f1dd18559a06e03109fc0", size = 41923, upload-time = "2026-03-05T15:55:10.924Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9b/b653ab611c9060ce8ff0ba25c0226757755725e789292f3ca138a58082cd/mmh3-5.2.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:b1f12bd684887a0a5d55e6363ca87056f361e45451105012d329b86ec19dbe0b", size = 39131, upload-time = "2026-03-05T15:55:11.961Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b4/5a2e0d34ab4d33543f01121e832395ea510132ea8e52cdf63926d9d81754/mmh3-5.2.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:d106493a60dcb4aef35a0fac85105e150a11cf8bc2b0d388f5a33272d756c966", size = 39825, upload-time = "2026-03-05T15:55:13.013Z" }, + { url = "https://files.pythonhosted.org/packages/bd/69/81699a8f39a3f8d368bec6443435c0c392df0d200ad915bf0d222b588e03/mmh3-5.2.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:44983e45310ee5b9f73397350251cdf6e63a466406a105f1d16cb5baa659270b", size = 40344, upload-time = "2026-03-05T15:55:14.026Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b3/71c8c775807606e8fd8acc5c69016e1caf3200d50b50b6dd4b40ce10b76c/mmh3-5.2.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:368625fb01666655985391dbad3860dc0ba7c0d6b9125819f3121ee7292b4ac8", size = 56291, upload-time = "2026-03-05T15:55:15.137Z" }, + { url = "https://files.pythonhosted.org/packages/6f/75/2c24517d4b2ce9e4917362d24f274d3d541346af764430249ddcc4cb3a08/mmh3-5.2.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:72d1cc63bcc91e14933f77d51b3df899d6a07d184ec515ea7f56bff659e124d7", size = 40575, upload-time = "2026-03-05T15:55:16.518Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/e4a360164365ac9f07a25f0f7928e3a66eb9ecc989384060747aa170e6aa/mmh3-5.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e8b4b5580280b9265af3e0409974fb79c64cf7523632d03fbf11df18f8b0181e", size = 40052, upload-time = "2026-03-05T15:55:17.735Z" }, + { url = "https://files.pythonhosted.org/packages/97/ca/120d92223a7546131bbbc31c9174168ee7a73b1366f5463ffe69d9e691fe/mmh3-5.2.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4cbbde66f1183db040daede83dd86c06d663c5bb2af6de1142b7c8c37923dd74", size = 97311, upload-time = "2026-03-05T15:55:18.959Z" }, + { url = "https://files.pythonhosted.org/packages/b6/71/c1a60c1652b8813ef9de6d289784847355417ee0f2980bca002fe87f4ae5/mmh3-5.2.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8ff038d52ef6aa0f309feeba00c5095c9118d0abf787e8e8454d6048db2037fc", size = 103279, upload-time = "2026-03-05T15:55:20.448Z" }, + { url = "https://files.pythonhosted.org/packages/48/29/ad97f4be1509cdcb28ae32c15593ce7c415db47ace37f8fad35b493faa9a/mmh3-5.2.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4130d0b9ce5fad6af07421b1aecc7e079519f70d6c05729ab871794eded8617", size = 106290, upload-time = "2026-03-05T15:55:21.6Z" }, + { url = "https://files.pythonhosted.org/packages/77/29/1f86d22e281bd8827ba373600a4a8b0c0eae5ca6aa55b9a8c26d2a34decc/mmh3-5.2.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e0bfe77d238308839699944164b96a2eeccaf55f2af400f54dc20669d8d5f2", size = 113116, upload-time = "2026-03-05T15:55:22.826Z" }, + { url = "https://files.pythonhosted.org/packages/a7/7c/339971ea7ed4c12d98f421f13db3ea576a9114082ccb59d2d1a0f00ccac1/mmh3-5.2.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f963eafc0a77a6c0562397da004f5876a9bcf7265a7bcc3205e29636bc4a1312", size = 120740, upload-time = "2026-03-05T15:55:24.3Z" }, + { url = "https://files.pythonhosted.org/packages/e4/92/3c7c4bdb8e926bb3c972d1e2907d77960c1c4b250b41e8366cf20c6e4373/mmh3-5.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:92883836caf50d5255be03d988d75bc93e3f86ba247b7ca137347c323f731deb", size = 99143, upload-time = "2026-03-05T15:55:25.456Z" }, + { url = "https://files.pythonhosted.org/packages/df/0a/33dd8706e732458c8375eae63c981292de07a406bad4ec03e5269654aa2c/mmh3-5.2.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:57b52603e89355ff318025dd55158f6e71396c0f1f609d548e9ea9c94cc6ce0a", size = 98703, upload-time = "2026-03-05T15:55:26.723Z" }, + { url = "https://files.pythonhosted.org/packages/51/04/76bbce05df76cbc3d396f13b2ea5b1578ef02b6a5187e132c6c33f99d596/mmh3-5.2.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f40a95186a72fa0b67d15fef0f157bfcda00b4f59c8a07cbe5530d41ac35d105", size = 106484, upload-time = "2026-03-05T15:55:28.214Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8f/c6e204a2c70b719c1f62ffd9da27aef2dddcba875ea9c31ca0e87b975a46/mmh3-5.2.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:58370d05d033ee97224c81263af123dea3d931025030fd34b61227a768a8858a", size = 110012, upload-time = "2026-03-05T15:55:29.532Z" }, + { url = "https://files.pythonhosted.org/packages/e3/37/7181efd8e39db386c1ebc3e6b7d1f702a09d7c1197a6f2742ed6b5c16597/mmh3-5.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7be6dfb49e48fd0a7d91ff758a2b51336f1cd21f9d44b20f6801f072bd080cdd", size = 97508, upload-time = "2026-03-05T15:55:31.01Z" }, + { url = "https://files.pythonhosted.org/packages/42/0f/afa7ca2615fd85e1469474bb860e381443d0b868c083b62b41cb1d7ca32f/mmh3-5.2.1-cp314-cp314-win32.whl", hash = "sha256:54fe8518abe06a4c3852754bfd498b30cc58e667f376c513eac89a244ce781a4", size = 41387, upload-time = "2026-03-05T15:55:32.403Z" }, + { url = "https://files.pythonhosted.org/packages/71/0d/46d42a260ee1357db3d486e6c7a692e303c017968e14865e00efa10d09fc/mmh3-5.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:3f796b535008708846044c43302719c6956f39ca2d93f2edda5319e79a29efbb", size = 42101, upload-time = "2026-03-05T15:55:33.646Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7b/848a8378059d96501a41159fca90d6a99e89736b0afbe8e8edffeac8c74b/mmh3-5.2.1-cp314-cp314-win_arm64.whl", hash = "sha256:cd471ede0d802dd936b6fab28188302b2d497f68436025857ca72cd3810423fe", size = 39836, upload-time = "2026-03-05T15:55:35.026Z" }, + { url = "https://files.pythonhosted.org/packages/27/61/1dabea76c011ba8547c25d30c91c0ec22544487a8750997a27a0c9e1180b/mmh3-5.2.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:5174a697ce042fa77c407e05efe41e03aa56dae9ec67388055820fb48cf4c3ba", size = 57727, upload-time = "2026-03-05T15:55:36.162Z" }, + { url = "https://files.pythonhosted.org/packages/b7/32/731185950d1cf2d5e28979cc8593016ba1619a295faba10dda664a4931b5/mmh3-5.2.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0a3984146e414684a6be2862d84fcb1035f4984851cb81b26d933bab6119bf00", size = 41308, upload-time = "2026-03-05T15:55:37.254Z" }, + { url = "https://files.pythonhosted.org/packages/76/aa/66c76801c24b8c9418b4edde9b5e57c75e72c94e29c48f707e3962534f18/mmh3-5.2.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bd6e7d363aa93bd3421b30b6af97064daf47bc96005bddba67c5ffbc6df426b8", size = 40758, upload-time = "2026-03-05T15:55:38.61Z" }, + { url = "https://files.pythonhosted.org/packages/9e/bb/79a1f638a02f0ae389f706d13891e2fbf7d8c0a22ecde67ba828951bb60a/mmh3-5.2.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:113f78e7463a36dbbcea05bfe688efd7fa759d0f0c56e73c974d60dcfec3dfcc", size = 109670, upload-time = "2026-03-05T15:55:40.13Z" }, + { url = "https://files.pythonhosted.org/packages/26/94/8cd0e187a288985bcfc79bf5144d1d712df9dee74365f59d26e3a1865be6/mmh3-5.2.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e8ec5f606e0809426d2440e0683509fb605a8820a21ebd120dcdba61b74ef7f", size = 117399, upload-time = "2026-03-05T15:55:42.076Z" }, + { url = "https://files.pythonhosted.org/packages/42/94/dfea6059bd5c5beda565f58a4096e43f4858fb6d2862806b8bbd12cbb284/mmh3-5.2.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22b0f9971ec4e07e8223f2beebe96a6cfc779d940b6f27d26604040dd74d3a44", size = 120386, upload-time = "2026-03-05T15:55:43.481Z" }, + { url = "https://files.pythonhosted.org/packages/47/cb/f9c45e62aaa67220179f487772461d891bb582bb2f9783c944832c60efd9/mmh3-5.2.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:85ffc9920ffc39c5eee1e3ac9100c913a0973996fbad5111f939bbda49204bb7", size = 125924, upload-time = "2026-03-05T15:55:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/a5/83/fe54a4a7c11bc9f623dfc1707decd034245602b076dfc1dcc771a4163170/mmh3-5.2.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7aec798c2b01aaa65a55f1124f3405804184373abb318a3091325aece235f67c", size = 135280, upload-time = "2026-03-05T15:55:45.866Z" }, + { url = "https://files.pythonhosted.org/packages/97/67/fe7e9e9c143daddd210cd22aef89cbc425d58ecf238d2b7d9eb0da974105/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:55dbbd8ffbc40d1697d5e2d0375b08599dae8746b0b08dea05eee4ce81648fac", size = 110050, upload-time = "2026-03-05T15:55:47.074Z" }, + { url = "https://files.pythonhosted.org/packages/43/c4/6d4b09fcbef80794de447c9378e39eefc047156b290fa3dd2d5257ca8227/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:6c85c38a279ca9295a69b9b088a2e48aa49737bb1b34e6a9dc6297c110e8d912", size = 111158, upload-time = "2026-03-05T15:55:48.239Z" }, + { url = "https://files.pythonhosted.org/packages/81/a6/ca51c864bdb30524beb055a6d8826db3906af0834ec8c41d097a6e8573d5/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:6290289fa5fb4c70fd7f72016e03633d60388185483ff3b162912c81205ae2cf", size = 116890, upload-time = "2026-03-05T15:55:49.405Z" }, + { url = "https://files.pythonhosted.org/packages/cc/04/5a1fe2e2ad843d03e89af25238cbc4f6840a8bb6c4329a98ab694c71deda/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:4fc6cd65dc4d2fdb2625e288939a3566e36127a84811a4913f02f3d5931da52d", size = 123121, upload-time = "2026-03-05T15:55:50.61Z" }, + { url = "https://files.pythonhosted.org/packages/af/4d/3c820c6f4897afd25905270a9f2330a23f77a207ea7356f7aadace7273c0/mmh3-5.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:623f938f6a039536cc02b7582a07a080f13fdfd48f87e63201d92d7e34d09a18", size = 110187, upload-time = "2026-03-05T15:55:52.143Z" }, + { url = "https://files.pythonhosted.org/packages/21/54/1d71cd143752361c0aebef16ad3f55926a6faf7b112d355745c1f8a25f7f/mmh3-5.2.1-cp314-cp314t-win32.whl", hash = "sha256:29bc3973676ae334412efdd367fcd11d036b7be3efc1ce2407ef8676dabfeb82", size = 41934, upload-time = "2026-03-05T15:55:53.564Z" }, + { url = "https://files.pythonhosted.org/packages/9d/e4/63a2a88f31d93dea03947cccc2a076946857e799ea4f7acdecbf43b324aa/mmh3-5.2.1-cp314-cp314t-win_amd64.whl", hash = "sha256:28cfab66577000b9505a0d068c731aee7ca85cd26d4d63881fab17857e0fe1fb", size = 43036, upload-time = "2026-03-05T15:55:55.252Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0f/59204bf136d1201f8d7884cfbaf7498c5b4674e87a4c693f9bde63741ce1/mmh3-5.2.1-cp314-cp314t-win_arm64.whl", hash = "sha256:dfd51b4c56b673dfbc43d7d27ef857dd91124801e2806c69bb45585ce0fa019b", size = 40391, upload-time = "2026-03-05T15:55:56.697Z" }, +] + +[[package]] +name = "multidict" +version = "6.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/f1/a90635c4f88fb913fbf4ce660b83b7445b7a02615bda034b2f8eb38fd597/multidict-6.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7ff981b266af91d7b4b3793ca3382e53229088d193a85dfad6f5f4c27fc73e5d", size = 76626, upload-time = "2026-01-26T02:43:26.485Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9b/267e64eaf6fc637a15b35f5de31a566634a2740f97d8d094a69d34f524a4/multidict-6.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:844c5bca0b5444adb44a623fb0a1310c2f4cd41f402126bb269cd44c9b3f3e1e", size = 44706, upload-time = "2026-01-26T02:43:27.607Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a4/d45caf2b97b035c57267791ecfaafbd59c68212004b3842830954bb4b02e/multidict-6.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2a0a924d4c2e9afcd7ec64f9de35fcd96915149b2216e1cb2c10a56df483855", size = 44356, upload-time = "2026-01-26T02:43:28.661Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d2/0a36c8473f0cbaeadd5db6c8b72d15bbceeec275807772bfcd059bef487d/multidict-6.7.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8be1802715a8e892c784c0197c2ace276ea52702a0ede98b6310c8f255a5afb3", size = 244355, upload-time = "2026-01-26T02:43:31.165Z" }, + { url = "https://files.pythonhosted.org/packages/5d/16/8c65be997fd7dd311b7d39c7b6e71a0cb449bad093761481eccbbe4b42a2/multidict-6.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e2d2ed645ea29f31c4c7ea1552fcfd7cb7ba656e1eafd4134a6620c9f5fdd9e", size = 246433, upload-time = "2026-01-26T02:43:32.581Z" }, + { url = "https://files.pythonhosted.org/packages/01/fb/4dbd7e848d2799c6a026ec88ad39cf2b8416aa167fcc903baa55ecaa045c/multidict-6.7.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:95922cee9a778659e91db6497596435777bd25ed116701a4c034f8e46544955a", size = 225376, upload-time = "2026-01-26T02:43:34.417Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4a3a6341eac3830f6053062f8fbc9a9e54407c80755b3f05bc427295c2d0/multidict-6.7.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6b83cabdc375ffaaa15edd97eb7c0c672ad788e2687004990074d7d6c9b140c8", size = 257365, upload-time = "2026-01-26T02:43:35.741Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a2/dd575a69c1aa206e12d27d0770cdf9b92434b48a9ef0cd0d1afdecaa93c4/multidict-6.7.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:38fb49540705369bab8484db0689d86c0a33a0a9f2c1b197f506b71b4b6c19b0", size = 254747, upload-time = "2026-01-26T02:43:36.976Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144", size = 246293, upload-time = "2026-01-26T02:43:38.258Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a4/23466059dc3854763423d0ad6c0f3683a379d97673b1b89ec33826e46728/multidict-6.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d3bc717b6fe763b8be3f2bee2701d3c8eb1b2a8ae9f60910f1b2860c82b6c49", size = 242962, upload-time = "2026-01-26T02:43:40.034Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/51dd754a3524d685958001e8fa20a0f5f90a6a856e0a9dcabff69be3dbb7/multidict-6.7.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:619e5a1ac57986dbfec9f0b301d865dddf763696435e2962f6d9cf2fdff2bb71", size = 237360, upload-time = "2026-01-26T02:43:41.752Z" }, + { url = "https://files.pythonhosted.org/packages/64/3f/036dfc8c174934d4b55d86ff4f978e558b0e585cef70cfc1ad01adc6bf18/multidict-6.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0b38ebffd9be37c1170d33bc0f36f4f262e0a09bc1aac1c34c7aa51a7293f0b3", size = 245940, upload-time = "2026-01-26T02:43:43.042Z" }, + { url = "https://files.pythonhosted.org/packages/3d/20/6214d3c105928ebc353a1c644a6ef1408bc5794fcb4f170bb524a3c16311/multidict-6.7.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:10ae39c9cfe6adedcdb764f5e8411d4a92b055e35573a2eaa88d3323289ef93c", size = 253502, upload-time = "2026-01-26T02:43:44.371Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e2/c653bc4ae1be70a0f836b82172d643fcf1dade042ba2676ab08ec08bff0f/multidict-6.7.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:25167cc263257660290fba06b9318d2026e3c910be240a146e1f66dd114af2b0", size = 247065, upload-time = "2026-01-26T02:43:45.745Z" }, + { url = "https://files.pythonhosted.org/packages/c8/11/a854b4154cd3bd8b1fd375e8a8ca9d73be37610c361543d56f764109509b/multidict-6.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:128441d052254f42989ef98b7b6a6ecb1e6f708aa962c7984235316db59f50fa", size = 241870, upload-time = "2026-01-26T02:43:47.054Z" }, + { url = "https://files.pythonhosted.org/packages/13/bf/9676c0392309b5fdae322333d22a829715b570edb9baa8016a517b55b558/multidict-6.7.1-cp311-cp311-win32.whl", hash = "sha256:d62b7f64ffde3b99d06b707a280db04fb3855b55f5a06df387236051d0668f4a", size = 41302, upload-time = "2026-01-26T02:43:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/c9/68/f16a3a8ba6f7b6dc92a1f19669c0810bd2c43fc5a02da13b1cbf8e253845/multidict-6.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:bdbf9f3b332abd0cdb306e7c2113818ab1e922dc84b8f8fd06ec89ed2a19ab8b", size = 45981, upload-time = "2026-01-26T02:43:49.921Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ad/9dd5305253fa00cd3c7555dbef69d5bf4133debc53b87ab8d6a44d411665/multidict-6.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:b8c990b037d2fff2f4e33d3f21b9b531c5745b33a49a7d6dbe7a177266af44f6", size = 43159, upload-time = "2026-01-26T02:43:51.635Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, + { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, + { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, + { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, + { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, + { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, + { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, + { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, + { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, + { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, + { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, + { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, + { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, + { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, + { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, + { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, + { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, + { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, + { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, + { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, + { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, + { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, + { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, + { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, + { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, + { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, + { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, + { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, + { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, + { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, + { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, + { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, + { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, + { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, + { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, + { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, + { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, + { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, + { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, + { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, + { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, + { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, + { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, + { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, + { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, + { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, + { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, + { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, + { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, + { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, + { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, + { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, + { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, +] + +[[package]] +name = "numpy" +version = "2.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" }, + { url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" }, + { url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" }, + { url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" }, + { url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" }, + { url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" }, + { url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" }, + { url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" }, + { url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" }, + { url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" }, + { url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" }, + { url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" }, + { url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" }, + { url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" }, + { url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" }, + { url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" }, + { url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" }, + { url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" }, + { url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" }, + { url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" }, + { url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" }, + { url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" }, + { url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" }, + { url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" }, + { url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" }, + { url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" }, + { url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" }, + { url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" }, + { url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" }, + { url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" }, + { url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" }, + { url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" }, + { url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" }, + { url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" }, + { url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" }, + { url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" }, + { url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" }, + { url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" }, + { url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" }, + { url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" }, + { url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" }, + { url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" }, + { url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" }, + { url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" }, + { url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" }, + { url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" }, + { url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" }, + { url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" }, + { url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" }, +] + +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + +[[package]] +name = "onnxruntime" +version = "1.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flatbuffers" }, + { name = "numpy" }, + { name = "packaging" }, + { name = "protobuf" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/e4/5353d7e09ced4a8f473f843223fc75d726b2b5519dcefc12f22a6c92852d/onnxruntime-1.27.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:8ba14a38c570087f3cdb8cfba33f7a38a1e826c1e5b29e17c28ceda0cc910016", size = 18416484, upload-time = "2026-06-15T22:43:43.894Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1f/a2117aa3f144fce88774efa37440d0ca72d0c9144854dfc0961f2b04c6fc/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2eb083321af8a236a84c7c140a7f4cecbfa2a987a18c07c78db471c20cd390ef", size = 16419330, upload-time = "2026-06-15T22:42:37.58Z" }, + { url = "https://files.pythonhosted.org/packages/e0/cd/74bb804170ceb622fda9111df31a07b3024f7491472256d3a90b5391a4d2/onnxruntime-1.27.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4f7b0e90d2d212e2c2deaa6c8291616183ab815d3ec558ea12d3ac8b26d36f4", size = 18636930, upload-time = "2026-06-15T22:43:01.584Z" }, + { url = "https://files.pythonhosted.org/packages/fe/8f/5b8e2b85e81735696887175dbaf6409f215683f5ca9d4928fbb038211d32/onnxruntime-1.27.0-cp311-cp311-win_amd64.whl", hash = "sha256:ff050e4f6bf7f12918fa14dcb047c0b02e295f35e86d42532552be4b3d54e977", size = 13356110, upload-time = "2026-06-15T22:43:32.172Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3a/4f568de678126b6a371a93862f015a82138359decd97fcac61fc84b5b774/onnxruntime-1.27.0-cp311-cp311-win_arm64.whl", hash = "sha256:75fbc1e1fb43a39a856c8209c544cca7817b5de7ac16b15b1bdf55d1cc67b9df", size = 13098635, upload-time = "2026-06-15T22:43:19.607Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b7/dd3a524ed93a820dff1af902d0412957ab12499953333e9daa01af5bc480/onnxruntime-1.27.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a14c2ce45312def86b77aea651f46565e45960cf5f0721bfdff449165086ab76", size = 18433506, upload-time = "2026-06-15T22:43:47.026Z" }, + { url = "https://files.pythonhosted.org/packages/84/86/c3b6b17745a1997d784dadc9bd88d713d2e6721139a5a0e885b28cfb79b1/onnxruntime-1.27.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6fddce0539a4898c7bef35b052ffd37935b2190e35488eab99ce91887743ea1", size = 16438140, upload-time = "2026-06-15T22:42:40.666Z" }, + { url = "https://files.pythonhosted.org/packages/26/81/24dd9b31b0fb912ee19ca53ac1c9764bfd79d58a2ccef564eb693be831a5/onnxruntime-1.27.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c65a7438632d55dfbc8a02ee60bd6cf7dd9d1ba05a43d4b851452f32338e194", size = 18658316, upload-time = "2026-06-15T22:43:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/4f/88/8ec9db1a4d126bb8b758992beb40d1249df171917d75f44a327eb5f20dda/onnxruntime-1.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:20c321cf187ba496e648acf6b4cf90b4d398b0d17c2a77fdaeba365b908cc1c1", size = 13358769, upload-time = "2026-06-15T22:43:34.581Z" }, + { url = "https://files.pythonhosted.org/packages/ae/9f/fdad359dfcba7e7cd8815569b304a596531d4efa77a75d77f8b4981891a2/onnxruntime-1.27.0-cp312-cp312-win_arm64.whl", hash = "sha256:d0d1f68868e2ef30ef70998ba9bbbc5c305e9b17041e3936751c1b8aa6aade06", size = 13104440, upload-time = "2026-06-15T22:43:22.893Z" }, + { url = "https://files.pythonhosted.org/packages/fb/2b/54208fd03ad410480bc17edf4869376362da8bbf46fe186ddf4cb5cc20fe/onnxruntime-1.27.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:b3e5b58b8c89c2b20e086e890aa9527377e5c240dc3ecc1640d18e07705eeb1c", size = 18432958, upload-time = "2026-06-15T22:42:53.105Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/24fc51fcbb126da6d032372314e47b55c3faad58f2aa78c0e199ccd20b9c/onnxruntime-1.27.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b3d87eb560ff6a772240506f3c78d6d27c63cafedd5c775672e1194f968cfd", size = 16438180, upload-time = "2026-06-15T22:42:43.093Z" }, + { url = "https://files.pythonhosted.org/packages/cb/19/14929c3c2fe0b79b41cce24463062bf3afa4cdd3c19dccf00319caa92bff/onnxruntime-1.27.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6872443f236a554921cda6f318c900e2d0c226792cf3534d00e5057c6926e5d2", size = 18658445, upload-time = "2026-06-15T22:43:08.053Z" }, + { url = "https://files.pythonhosted.org/packages/7f/76/59ed932b0244acd7bbbd6449480053a6d958ea66357f022f932872e19287/onnxruntime-1.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:760021bca514d64a811837820d351a08a41741f16f8b4c26450da708fecf14e6", size = 13357856, upload-time = "2026-06-15T22:43:37.315Z" }, + { url = "https://files.pythonhosted.org/packages/79/51/d1ec60ec7b1e2ae2d7340ba52b8a13529140039cd4407ba8dddbbc046582/onnxruntime-1.27.0-cp313-cp313-win_arm64.whl", hash = "sha256:2fdfa9df40a0ded0028ce6f9cd863264237f3970559dea2b81456e9ac4622b94", size = 13104412, upload-time = "2026-06-15T22:43:27.457Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7d/e6bb1c6445c94f708c38cd8fbb7bf0264108c33498b9445c93e60fe6d329/onnxruntime-1.27.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54c0c4e9202c36c4ecdb1f3443f5dfbfd5ee3b54d1362c4b4c6134110e74fb32", size = 16443331, upload-time = "2026-06-15T22:42:45.649Z" }, + { url = "https://files.pythonhosted.org/packages/72/1b/b18b31e806eabc41077810199fbbb36fbc2d5f19912416e5ccfbf73053d1/onnxruntime-1.27.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1b215aa662c8f983f7d6dedafe65a9be72c26e5338e0fe98b3e0422c32c85428", size = 18670967, upload-time = "2026-06-15T22:43:10.621Z" }, + { url = "https://files.pythonhosted.org/packages/3a/37/48ab79c39b58a7c9f6f5aac1fa0ff2b993eb2643393d6ed9e839ddb6f347/onnxruntime-1.27.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:0874edc171f470fc4dd2bbb60bc0989612ed1a8b89b365cda016630a93227f13", size = 18433941, upload-time = "2026-06-15T22:42:58.867Z" }, + { url = "https://files.pythonhosted.org/packages/6e/24/d535ca8a09dbf697f853377c8dc0820dbcaae5f334316b400b953afbcba8/onnxruntime-1.27.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5b51c014cf1a4fcd93c29a97eac8071fa27710dae05a4d0380bb60a66d60a62c", size = 16439970, upload-time = "2026-06-15T22:42:48.023Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b1/ea9ee80c0bdaa4efb13f29f8c236f3740f6655e8c092a2d119515a5a652c/onnxruntime-1.27.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:445fb702ea5241ba813a3ce2febe2e9408a64f6ad2eb610924322c536165f7cd", size = 18659240, upload-time = "2026-06-15T22:43:13.165Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f2/1404507d76a21940e8bf46f414e3d1abd94dc888cb89a30f4a540275846f/onnxruntime-1.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:49e416be0d717338b6d041b99911b716d70c397d277056450724f93bdded3fc2", size = 13685306, upload-time = "2026-06-15T22:43:40.416Z" }, + { url = "https://files.pythonhosted.org/packages/10/e5/ca5cf012ccccb806c70e94aadfebca5606acc62b33eb88cec13352d0778f/onnxruntime-1.27.0-cp314-cp314-win_arm64.whl", hash = "sha256:856032937dd3bc7a7c141909c8d7ae4fde3e3f59bddf061ae627b9a051bda95c", size = 13456280, upload-time = "2026-06-15T22:43:29.693Z" }, + { url = "https://files.pythonhosted.org/packages/67/7b/dca330a8397e9d816c976d7aed4e24a4a2d279bb1e551e3d0221d1389b1d/onnxruntime-1.27.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c6197a02e3f620c4dc13cff51b80672409fc1ffab3aa2593911b19fd322ff48b", size = 16443274, upload-time = "2026-06-15T22:42:50.467Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f6/2bac21f722aa45d876d4a51f26bd0ef30e704068a3cd5021a5a7cd784271/onnxruntime-1.27.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:370d211e1ceeac4cd5f45301655463ac59e27cdc74d9f7aeb2d19ff4b7a76715", size = 18670781, upload-time = "2026-06-15T22:43:17.151Z" }, +] + +[[package]] +name = "openai" +version = "2.43.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "distro" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "tqdm" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/fa/88d0c58a0c58df7e6758e66b99c5d028d5e0bb49f8812d7203940cd9dbf1/openai-2.43.0.tar.gz", hash = "sha256:e74d238200a26868977002190fb6631613480a93dfe0c9c982e77021ed60a017", size = 785369, upload-time = "2026-06-17T17:06:56.06Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/d2/ba767f4bbb30776c03d40906a2d3afad716a165ffa1771fc23b8992f7920/openai-2.43.0-py3-none-any.whl", hash = "sha256:65a670b54fadf2268c9e1330133373c963eb779ee969e5cbad419ec2c21dce97", size = 1355077, upload-time = "2026-06-17T17:06:53.614Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + +[[package]] +name = "opentelemetry-api" +version = "1.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/5e/94a8cb759e4e409022229418294e098ca7feca00eb3c467bb20cbd329bda/opentelemetry_api-1.34.1.tar.gz", hash = "sha256:64f0bd06d42824843731d05beea88d4d4b6ae59f9fe347ff7dfa2cc14233bbb3", size = 64987, upload-time = "2025-06-10T08:55:19.818Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a5/3a/2ba85557e8dc024c0842ad22c570418dc02c36cbd1ab4b832a93edf071b8/opentelemetry_api-1.34.1-py3-none-any.whl", hash = "sha256:b7df4cb0830d5a6c29ad0c0691dbae874d8daefa934b8b1d642de48323d32a8c", size = 65767, upload-time = "2025-06-10T08:54:56.717Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-proto" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/f0/ff235936ee40db93360233b62da932d4fd9e8d103cd090c6bcb9afaf5f01/opentelemetry_exporter_otlp_proto_common-1.34.1.tar.gz", hash = "sha256:b59a20a927facd5eac06edaf87a07e49f9e4a13db487b7d8a52b37cb87710f8b", size = 20817, upload-time = "2025-06-10T08:55:22.55Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/e8/8b292a11cc8d8d87ec0c4089ae21b6a58af49ca2e51fa916435bc922fdc7/opentelemetry_exporter_otlp_proto_common-1.34.1-py3-none-any.whl", hash = "sha256:8e2019284bf24d3deebbb6c59c71e6eef3307cd88eff8c633e061abba33f7e87", size = 18834, upload-time = "2025-06-10T08:55:00.806Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-grpc" +version = "1.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "grpcio" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/f7/bb63837a3edb9ca857aaf5760796874e7cecddc88a2571b0992865a48fb6/opentelemetry_exporter_otlp_proto_grpc-1.34.1.tar.gz", hash = "sha256:7c841b90caa3aafcfc4fee58487a6c71743c34c6dc1787089d8b0578bbd794dd", size = 22566, upload-time = "2025-06-10T08:55:23.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b4/42/0a4dd47e7ef54edf670c81fc06a83d68ea42727b82126a1df9dd0477695d/opentelemetry_exporter_otlp_proto_grpc-1.34.1-py3-none-any.whl", hash = "sha256:04bb8b732b02295be79f8a86a4ad28fae3d4ddb07307a98c7aa6f331de18cca6", size = 18615, upload-time = "2025-06-10T08:55:02.214Z" }, +] + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "googleapis-common-protos" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-common" }, + { name = "opentelemetry-proto" }, + { name = "opentelemetry-sdk" }, + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/8f/954bc725961cbe425a749d55c0ba1df46832a5999eae764d1a7349ac1c29/opentelemetry_exporter_otlp_proto_http-1.34.1.tar.gz", hash = "sha256:aaac36fdce46a8191e604dcf632e1f9380c7d5b356b27b3e0edb5610d9be28ad", size = 15351, upload-time = "2025-06-10T08:55:24.657Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/54/b05251c04e30c1ac70cf4a7c5653c085dfcf2c8b98af71661d6a252adc39/opentelemetry_exporter_otlp_proto_http-1.34.1-py3-none-any.whl", hash = "sha256:5251f00ca85872ce50d871f6d3cc89fe203b94c3c14c964bbdc3883366c705d8", size = 17744, upload-time = "2025-06-10T08:55:03.802Z" }, +] + +[[package]] +name = "opentelemetry-proto" +version = "1.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/b3/c3158dd012463bb7c0eb7304a85a6f63baeeb5b4c93a53845cf89f848c7e/opentelemetry_proto-1.34.1.tar.gz", hash = "sha256:16286214e405c211fc774187f3e4bbb1351290b8dfb88e8948af209ce85b719e", size = 34344, upload-time = "2025-06-10T08:55:32.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/ab/4591bfa54e946350ce8b3f28e5c658fe9785e7cd11e9c11b1671a867822b/opentelemetry_proto-1.34.1-py3-none-any.whl", hash = "sha256:eb4bb5ac27f2562df2d6857fc557b3a481b5e298bc04f94cc68041f00cebcbd2", size = 55692, upload-time = "2025-06-10T08:55:14.904Z" }, +] + +[[package]] +name = "opentelemetry-sdk" +version = "1.34.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/41/fe20f9036433da8e0fcef568984da4c1d1c771fa072ecd1a4d98779dccdd/opentelemetry_sdk-1.34.1.tar.gz", hash = "sha256:8091db0d763fcd6098d4781bbc80ff0971f94e260739aa6afe6fd379cdf3aa4d", size = 159441, upload-time = "2025-06-10T08:55:33.028Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/1b/def4fe6aa73f483cabf4c748f4c25070d5f7604dcc8b52e962983491b29e/opentelemetry_sdk-1.34.1-py3-none-any.whl", hash = "sha256:308effad4059562f1d92163c61c8141df649da24ce361827812c40abb2a1e96e", size = 118477, upload-time = "2025-06-10T08:55:16.02Z" }, +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/f0/f33458486da911f47c4aa6db9bda308bb80f3236c111bf848bd870c16b16/opentelemetry_semantic_conventions-0.55b1.tar.gz", hash = "sha256:ef95b1f009159c28d7a7849f5cbc71c4c34c845bb514d66adfdf1b3fff3598b3", size = 119829, upload-time = "2025-06-10T08:55:33.881Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/89/267b0af1b1d0ba828f0e60642b6a5116ac1fd917cde7fc02821627029bd1/opentelemetry_semantic_conventions-0.55b1-py3-none-any.whl", hash = "sha256:5da81dfdf7d52e3d37f8fe88d5e771e191de924cfff5f550ab0b8f7b2409baed", size = 196223, upload-time = "2025-06-10T08:55:17.638Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" }, + { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" }, + { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" }, + { url = "https://files.pythonhosted.org/packages/ea/76/f11311285324a40aab1e3031385c50b635a7cd0734fdaf60c7e89a696f60/orjson-3.11.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6082706765a95a6680d812e1daf1c0cfe8adec7831b3ff3b625693f3b461b1c", size = 127988, upload-time = "2026-05-06T15:09:39.597Z" }, + { url = "https://files.pythonhosted.org/packages/9e/85/0ef63bcf1337f44031ce9b91b1919563f62a37527b3ea4368bb15a22e5d7/orjson-3.11.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:277fefe9d76ee17eb14debf399e3533d4d63b5f677a4d3719eb763536af1f4bd", size = 135188, upload-time = "2026-05-06T15:09:40.957Z" }, + { url = "https://files.pythonhosted.org/packages/05/94/b0d27090ea8a2095db3c2bd1b1c96f96f19bbb494d7fef33130e846e613d/orjson-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03db380e3780fa0015ed776a90f20e8e20bb11dde13b216ce19e5718e3dfba62", size = 145937, upload-time = "2026-05-06T15:09:42.249Z" }, + { url = "https://files.pythonhosted.org/packages/09/eb/75d50c29c05b8054013e221e598820a365c8e64065312e75e202ed880709/orjson-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33d7d766701847dc6729846362dc27895d2f2d2251264f9d10e7cb9878194877", size = 132758, upload-time = "2026-05-06T15:09:43.945Z" }, + { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" }, + { url = "https://files.pythonhosted.org/packages/0e/30/3178eb16f3221aeef068b6f1f1ebe05f656ea5c6dffe9f6c917329fe17a3/orjson-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3513550321f8c8c811a7c3297b8a630e82dc08e4c10216d07703c997776236cd", size = 141685, upload-time = "2026-05-06T15:09:46.858Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f1/ff2f19ed0225f9680fafa42febca3570dd59444ebf190980738d376214c2/orjson-3.11.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c5d001196b89fa9cf0a4ab79766cd835b991a166e4b621ba95089edc50c429ff", size = 415167, upload-time = "2026-05-06T15:09:48.312Z" }, + { url = "https://files.pythonhosted.org/packages/9b/61/863bddf0da6e9e586765414debd54b4e58db05f560902b6d00658cb88636/orjson-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:16969c9d369c98eb084889c6e4d2d39b77c7eb38ceccf8da2a9fff62ae908980", size = 147913, upload-time = "2026-05-06T15:09:49.733Z" }, + { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" }, + { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533, upload-time = "2026-05-06T15:09:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106, upload-time = "2026-05-06T15:09:54.204Z" }, + { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848, upload-time = "2026-05-06T15:09:55.551Z" }, + { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" }, + { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" }, + { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" }, + { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" }, + { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" }, + { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" }, + { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" }, + { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" }, + { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" }, + { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" }, + { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" }, + { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" }, + { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" }, + { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" }, + { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" }, + { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" }, + { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" }, + { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" }, + { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" }, + { url = "https://files.pythonhosted.org/packages/8e/eb/5da01e356015aee6ecfa1187ced87aef51364e306f5e695dd52719bf0e78/orjson-3.11.9-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b6ef1979adc4bc243523f1a2ba91418030a8e29b0a99cbe7e0e2d6807d4dce6e", size = 228465, upload-time = "2026-05-06T15:10:44.097Z" }, + { url = "https://files.pythonhosted.org/packages/64/62/3e0e0c14c957133bcd855395c62b55ed4e3b0af23ffea11b032cb1dcbdb1/orjson-3.11.9-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:f36b7f32c7c0db4a719f1fc5824db4a9c6f8bd1a354debb91faf26ebf3a4c71e", size = 128364, upload-time = "2026-05-06T15:10:45.839Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/07d8aa117211a8ed7630bda80c8c0b14d04e0f8dcf99bcf49656e4a710eb/orjson-3.11.9-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08f4d8ebb44925c794e535b2bebc507cebf32209df81de22ae285fb0d8d66de0", size = 132063, upload-time = "2026-05-06T15:10:47.267Z" }, + { url = "https://files.pythonhosted.org/packages/d6/ec/4acaf21483e18aa945be74a474c74b434f284b549f275a0a39b9f98956e9/orjson-3.11.9-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6cc7923789694fd58f001cbcac7e47abc13af4d560ebbfcf3b41a8b1a0748124", size = 122356, upload-time = "2026-05-06T15:10:48.765Z" }, + { url = "https://files.pythonhosted.org/packages/13/d8/5f0555e7638801323b7a75850f92e7dfa891bc84fe27a1ba4449170d1200/orjson-3.11.9-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea5c46eb2d3af39e806b986f4b09d5c2706a1f5afde3cbf7544ce6616127173c", size = 129592, upload-time = "2026-05-06T15:10:50.13Z" }, + { url = "https://files.pythonhosted.org/packages/b6/30/ed9860412a3603ceb3c5955bfd72d28b9d0e7ba6ed81add14f83d7114236/orjson-3.11.9-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f5d89a2ed90731df3be64bab0aa44f78bff39fdc9d71c291f4a8023aa46425b7", size = 140491, upload-time = "2026-05-06T15:10:51.582Z" }, + { url = "https://files.pythonhosted.org/packages/d0/17/adc514dea7ac7c505527febf884934b815d34f0c7b8693c1a8b39c5c4a57/orjson-3.11.9-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25e4aed0312d292c09f61af25bba34e0b2c88546041472b09088c39a4d828af1", size = 127309, upload-time = "2026-05-06T15:10:53.329Z" }, + { url = "https://files.pythonhosted.org/packages/76/3e/c0b690253f0b82d86e99949af13533363acfb5432ecb5d53dd5b3bce9c34/orjson-3.11.9-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaea64f3f467d22e70eeed68bdccb3bc4f83f650446c4a03c59f2cba28a108db", size = 134030, upload-time = "2026-05-06T15:10:54.988Z" }, + { url = "https://files.pythonhosted.org/packages/c1/7a/bc82a0bb25e9faaf92dc4d9ef002732efc09737706af83e346788641d4a7/orjson-3.11.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a028425d1b440c5d92a6be1e1a020739dfe67ea87d96c6dbe828c1b30041728b", size = 141482, upload-time = "2026-05-06T15:10:56.663Z" }, + { url = "https://files.pythonhosted.org/packages/01/55/e69188b939f77d5d32a9833745ace31ea5ccae3ab613a1ec185d3cd2c4fb/orjson-3.11.9-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5b192c6cf397e4455b11523c5cf2b18ed084c1bbd61b6c0926344d2129481972", size = 415178, upload-time = "2026-05-06T15:10:58.446Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1a/b8a5a7ac527e80b9cb11d51e3f6689b709279183264b9ec5c7bc680bb8b5/orjson-3.11.9-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ea407d4ccf5891d667d045fecae97a7a1e5e87b3b97f97ae1803c2e741130be0", size = 148089, upload-time = "2026-05-06T15:11:00.441Z" }, + { url = "https://files.pythonhosted.org/packages/97/4e/00503f64204bf859b37213a63927028f30fb6268cd8677fb0a5ad48155e1/orjson-3.11.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f63aaf97afd9f6dec5b1a68e1b8da12bfccb4cb9a9a65c3e0b6c847849e7586", size = 136921, upload-time = "2026-05-06T15:11:02.176Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ba/a23b82a0a8d0ed7bed4e5f5035aae751cad4ff6a1e8d2ecd14d8860f5929/orjson-3.11.9-cp314-cp314-win32.whl", hash = "sha256:e30ab17845bb9fa54ccf67fa4f9f5282652d54faa6d17452f47d0f369d038673", size = 131638, upload-time = "2026-05-06T15:11:03.696Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c3/0c6798456bade745c75c452342dabacce5798196483e77e643be1f53877d/orjson-3.11.9-cp314-cp314-win_amd64.whl", hash = "sha256:32ef5f4283a3be81913947d19608eacb7c6608026851123790cd9cc8982af34b", size = 127078, upload-time = "2026-05-06T15:11:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/16/21/5a3f1e8913103b703a436a5664238e5b965ec392b555fe68943ea3691e6b/orjson-3.11.9-cp314-cp314-win_arm64.whl", hash = "sha256:eebdbdeef0094e4f5aefa20dcd4eb2368ab5e7a3b4edea27f1e7b2892e009cf9", size = 126687, upload-time = "2026-05-06T15:11:06.602Z" }, +] + +[[package]] +name = "ormsgpack" +version = "1.12.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/0c/f1761e21486942ab9bb6feaebc610fa074f7c5e496e6962dea5873348077/ormsgpack-1.12.2.tar.gz", hash = "sha256:944a2233640273bee67521795a73cf1e959538e0dfb7ac635505010455e53b33", size = 39031, upload-time = "2026-01-18T20:55:28.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/08/8b68f24b18e69d92238aa8f258218e6dfeacf4381d9d07ab8df303f524a9/ormsgpack-1.12.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:bd5f4bf04c37888e864f08e740c5a573c4017f6fd6e99fa944c5c935fabf2dd9", size = 378266, upload-time = "2026-01-18T20:55:59.876Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/29fc13044ecb7c153523ae0a1972269fcd613650d1fa1a9cec1044c6b666/ormsgpack-1.12.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34d5b28b3570e9fed9a5a76528fc7230c3c76333bc214798958e58e9b79cc18a", size = 203035, upload-time = "2026-01-18T20:55:30.59Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c2/00169fb25dd8f9213f5e8a549dfb73e4d592009ebc85fbbcd3e1dcac575b/ormsgpack-1.12.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3708693412c28f3538fb5a65da93787b6bbab3484f6bc6e935bfb77a62400ae5", size = 210539, upload-time = "2026-01-18T20:55:48.569Z" }, + { url = "https://files.pythonhosted.org/packages/1b/33/543627f323ff3c73091f51d6a20db28a1a33531af30873ea90c5ac95a9b5/ormsgpack-1.12.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43013a3f3e2e902e1d05e72c0f1aeb5bedbb8e09240b51e26792a3c89267e181", size = 212401, upload-time = "2026-01-18T20:56:10.101Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5d/f70e2c3da414f46186659d24745483757bcc9adccb481a6eb93e2b729301/ormsgpack-1.12.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7c8b1667a72cbba74f0ae7ecf3105a5e01304620ed14528b2cb4320679d2869b", size = 387082, upload-time = "2026-01-18T20:56:12.047Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d6/06e8dc920c7903e051f30934d874d4afccc9bb1c09dcaf0bc03a7de4b343/ormsgpack-1.12.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:df6961442140193e517303d0b5d7bc2e20e69a879c2d774316125350c4a76b92", size = 482346, upload-time = "2026-01-18T20:56:05.152Z" }, + { url = "https://files.pythonhosted.org/packages/66/c4/f337ac0905eed9c393ef990c54565cd33644918e0a8031fe48c098c71dbf/ormsgpack-1.12.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c6a4c34ddef109647c769d69be65fa1de7a6022b02ad45546a69b3216573eb4a", size = 425181, upload-time = "2026-01-18T20:55:37.83Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/6d5758fabef3babdf4bbbc453738cc7de9cd3334e4c38dd5737e27b85653/ormsgpack-1.12.2-cp311-cp311-win_amd64.whl", hash = "sha256:73670ed0375ecc303858e3613f407628dd1fca18fe6ac57b7b7ce66cc7bb006c", size = 117182, upload-time = "2026-01-18T20:55:31.472Z" }, + { url = "https://files.pythonhosted.org/packages/c4/57/17a15549233c37e7fd054c48fe9207492e06b026dbd872b826a0b5f833b6/ormsgpack-1.12.2-cp311-cp311-win_arm64.whl", hash = "sha256:c2be829954434e33601ae5da328cccce3266b098927ca7a30246a0baec2ce7bd", size = 111464, upload-time = "2026-01-18T20:55:38.811Z" }, + { url = "https://files.pythonhosted.org/packages/4c/36/16c4b1921c308a92cef3bf6663226ae283395aa0ff6e154f925c32e91ff5/ormsgpack-1.12.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7a29d09b64b9694b588ff2f80e9826bdceb3a2b91523c5beae1fab27d5c940e7", size = 378618, upload-time = "2026-01-18T20:55:50.835Z" }, + { url = "https://files.pythonhosted.org/packages/c0/68/468de634079615abf66ed13bb5c34ff71da237213f29294363beeeca5306/ormsgpack-1.12.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b39e629fd2e1c5b2f46f99778450b59454d1f901bc507963168985e79f09c5d", size = 203186, upload-time = "2026-01-18T20:56:11.163Z" }, + { url = "https://files.pythonhosted.org/packages/73/a9/d756e01961442688b7939bacd87ce13bfad7d26ce24f910f6028178b2cc8/ormsgpack-1.12.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:958dcb270d30a7cb633a45ee62b9444433fa571a752d2ca484efdac07480876e", size = 210738, upload-time = "2026-01-18T20:56:09.181Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ba/795b1036888542c9113269a3f5690ab53dd2258c6fb17676ac4bd44fcf94/ormsgpack-1.12.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58d379d72b6c5e964851c77cfedfb386e474adee4fd39791c2c5d9efb53505cc", size = 212569, upload-time = "2026-01-18T20:56:06.135Z" }, + { url = "https://files.pythonhosted.org/packages/6c/aa/bff73c57497b9e0cba8837c7e4bcab584b1a6dbc91a5dd5526784a5030c8/ormsgpack-1.12.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8463a3fc5f09832e67bdb0e2fda6d518dc4281b133166146a67f54c08496442e", size = 387166, upload-time = "2026-01-18T20:55:36.738Z" }, + { url = "https://files.pythonhosted.org/packages/d3/cf/f8283cba44bcb7b14f97b6274d449db276b3a86589bdb363169b51bc12de/ormsgpack-1.12.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:eddffb77eff0bad4e67547d67a130604e7e2dfbb7b0cde0796045be4090f35c6", size = 482498, upload-time = "2026-01-18T20:55:29.626Z" }, + { url = "https://files.pythonhosted.org/packages/05/be/71e37b852d723dfcbe952ad04178c030df60d6b78eba26bfd14c9a40575e/ormsgpack-1.12.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fcd55e5f6ba0dbce624942adf9f152062135f991a0126064889f68eb850de0dd", size = 425518, upload-time = "2026-01-18T20:55:49.556Z" }, + { url = "https://files.pythonhosted.org/packages/7a/0c/9803aa883d18c7ef197213cd2cbf73ba76472a11fe100fb7dab2884edf48/ormsgpack-1.12.2-cp312-cp312-win_amd64.whl", hash = "sha256:d024b40828f1dde5654faebd0d824f9cc29ad46891f626272dd5bfd7af2333a4", size = 117462, upload-time = "2026-01-18T20:55:47.726Z" }, + { url = "https://files.pythonhosted.org/packages/c8/9e/029e898298b2cc662f10d7a15652a53e3b525b1e7f07e21fef8536a09bb8/ormsgpack-1.12.2-cp312-cp312-win_arm64.whl", hash = "sha256:da538c542bac7d1c8f3f2a937863dba36f013108ce63e55745941dda4b75dbb6", size = 111559, upload-time = "2026-01-18T20:55:54.273Z" }, + { url = "https://files.pythonhosted.org/packages/eb/29/bb0eba3288c0449efbb013e9c6f58aea79cf5cb9ee1921f8865f04c1a9d7/ormsgpack-1.12.2-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5ea60cb5f210b1cfbad8c002948d73447508e629ec375acb82910e3efa8ff355", size = 378661, upload-time = "2026-01-18T20:55:57.765Z" }, + { url = "https://files.pythonhosted.org/packages/6e/31/5efa31346affdac489acade2926989e019e8ca98129658a183e3add7af5e/ormsgpack-1.12.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3601f19afdbea273ed70b06495e5794606a8b690a568d6c996a90d7255e51c1", size = 203194, upload-time = "2026-01-18T20:56:08.252Z" }, + { url = "https://files.pythonhosted.org/packages/eb/56/d0087278beef833187e0167f8527235ebe6f6ffc2a143e9de12a98b1ce87/ormsgpack-1.12.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29a9f17a3dac6054c0dce7925e0f4995c727f7c41859adf9b5572180f640d172", size = 210778, upload-time = "2026-01-18T20:55:17.694Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a2/072343e1413d9443e5a252a8eb591c2d5b1bffbe5e7bfc78c069361b92eb/ormsgpack-1.12.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39c1bd2092880e413902910388be8715f70b9f15f20779d44e673033a6146f2d", size = 212592, upload-time = "2026-01-18T20:55:32.747Z" }, + { url = "https://files.pythonhosted.org/packages/a2/8b/a0da3b98a91d41187a63b02dda14267eefc2a74fcb43cc2701066cf1510e/ormsgpack-1.12.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:50b7249244382209877deedeee838aef1542f3d0fc28b8fe71ca9d7e1896a0d7", size = 387164, upload-time = "2026-01-18T20:55:40.853Z" }, + { url = "https://files.pythonhosted.org/packages/19/bb/6d226bc4cf9fc20d8eb1d976d027a3f7c3491e8f08289a2e76abe96a65f3/ormsgpack-1.12.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:5af04800d844451cf102a59c74a841324868d3f1625c296a06cc655c542a6685", size = 482516, upload-time = "2026-01-18T20:55:42.033Z" }, + { url = "https://files.pythonhosted.org/packages/fb/f1/bb2c7223398543dedb3dbf8bb93aaa737b387de61c5feaad6f908841b782/ormsgpack-1.12.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cec70477d4371cd524534cd16472d8b9cc187e0e3043a8790545a9a9b296c258", size = 425539, upload-time = "2026-01-18T20:55:24.727Z" }, + { url = "https://files.pythonhosted.org/packages/7b/e8/0fb45f57a2ada1fed374f7494c8cd55e2f88ccd0ab0a669aa3468716bf5f/ormsgpack-1.12.2-cp313-cp313-win_amd64.whl", hash = "sha256:21f4276caca5c03a818041d637e4019bc84f9d6ca8baa5ea03e5cc8bf56140e9", size = 117459, upload-time = "2026-01-18T20:55:56.876Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d4/0cfeea1e960d550a131001a7f38a5132c7ae3ebde4c82af1f364ccc5d904/ormsgpack-1.12.2-cp313-cp313-win_arm64.whl", hash = "sha256:baca4b6773d20a82e36d6fd25f341064244f9f86a13dead95dd7d7f996f51709", size = 111577, upload-time = "2026-01-18T20:55:43.605Z" }, + { url = "https://files.pythonhosted.org/packages/94/16/24d18851334be09c25e87f74307c84950f18c324a4d3c0b41dabdbf19c29/ormsgpack-1.12.2-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:bc68dd5915f4acf66ff2010ee47c8906dc1cf07399b16f4089f8c71733f6e36c", size = 378717, upload-time = "2026-01-18T20:55:26.164Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a2/88b9b56f83adae8032ac6a6fa7f080c65b3baf9b6b64fd3d37bd202991d4/ormsgpack-1.12.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46d084427b4132553940070ad95107266656cb646ea9da4975f85cb1a6676553", size = 203183, upload-time = "2026-01-18T20:55:18.815Z" }, + { url = "https://files.pythonhosted.org/packages/a9/80/43e4555963bf602e5bdc79cbc8debd8b6d5456c00d2504df9775e74b450b/ormsgpack-1.12.2-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c010da16235806cf1d7bc4c96bf286bfa91c686853395a299b3ddb49499a3e13", size = 210814, upload-time = "2026-01-18T20:55:33.973Z" }, + { url = "https://files.pythonhosted.org/packages/78/e1/7cfbf28de8bca6efe7e525b329c31277d1b64ce08dcba723971c241a9d60/ormsgpack-1.12.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18867233df592c997154ff942a6503df274b5ac1765215bceba7a231bea2745d", size = 212634, upload-time = "2026-01-18T20:55:28.634Z" }, + { url = "https://files.pythonhosted.org/packages/95/f8/30ae5716e88d792a4e879debee195653c26ddd3964c968594ddef0a3cc7e/ormsgpack-1.12.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b009049086ddc6b8f80c76b3955df1aa22a5fbd7673c525cd63bf91f23122ede", size = 387139, upload-time = "2026-01-18T20:56:02.013Z" }, + { url = "https://files.pythonhosted.org/packages/dc/81/aee5b18a3e3a0e52f718b37ab4b8af6fae0d9d6a65103036a90c2a8ffb5d/ormsgpack-1.12.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:1dcc17d92b6390d4f18f937cf0b99054824a7815818012ddca925d6e01c2e49e", size = 482578, upload-time = "2026-01-18T20:55:35.117Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/71c9ba472d5d45f7546317f467a5fc941929cd68fb32796ca3d13dcbaec2/ormsgpack-1.12.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f04b5e896d510b07c0ad733d7fce2d44b260c5e6c402d272128f8941984e4285", size = 425539, upload-time = "2026-01-18T20:56:04.009Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a6/ac99cd7fe77e822fed5250ff4b86fa66dd4238937dd178d2299f10b69816/ormsgpack-1.12.2-cp314-cp314-win_amd64.whl", hash = "sha256:ae3aba7eed4ca7cb79fd3436eddd29140f17ea254b91604aa1eb19bfcedb990f", size = 117493, upload-time = "2026-01-18T20:56:07.343Z" }, + { url = "https://files.pythonhosted.org/packages/3a/67/339872846a1ae4592535385a1c1f93614138566d7af094200c9c3b45d1e5/ormsgpack-1.12.2-cp314-cp314-win_arm64.whl", hash = "sha256:118576ea6006893aea811b17429bfc561b4778fad393f5f538c84af70b01260c", size = 111579, upload-time = "2026-01-18T20:55:21.161Z" }, + { url = "https://files.pythonhosted.org/packages/49/c2/6feb972dc87285ad381749d3882d8aecbde9f6ecf908dd717d33d66df095/ormsgpack-1.12.2-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:7121b3d355d3858781dc40dafe25a32ff8a8242b9d80c692fd548a4b1f7fd3c8", size = 378721, upload-time = "2026-01-18T20:55:52.12Z" }, + { url = "https://files.pythonhosted.org/packages/a3/9a/900a6b9b413e0f8a471cf07830f9cf65939af039a362204b36bd5b581d8b/ormsgpack-1.12.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ee766d2e78251b7a63daf1cddfac36a73562d3ddef68cacfb41b2af64698033", size = 203170, upload-time = "2026-01-18T20:55:44.469Z" }, + { url = "https://files.pythonhosted.org/packages/87/4c/27a95466354606b256f24fad464d7c97ab62bce6cc529dd4673e1179b8fb/ormsgpack-1.12.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:292410a7d23de9b40444636b9b8f1e4e4b814af7f1ef476e44887e52a123f09d", size = 212816, upload-time = "2026-01-18T20:55:23.501Z" }, + { url = "https://files.pythonhosted.org/packages/73/cd/29cee6007bddf7a834e6cd6f536754c0535fcb939d384f0f37a38b1cddb8/ormsgpack-1.12.2-cp314-cp314t-win_amd64.whl", hash = "sha256:837dd316584485b72ef451d08dd3e96c4a11d12e4963aedb40e08f89685d8ec2", size = 117232, upload-time = "2026-01-18T20:55:45.448Z" }, +] + +[[package]] +name = "overrides" +version = "7.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/36/86/b585f53236dec60aba864e050778b25045f857e17f6e5ea0ae95fe80edd2/overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a", size = 22812, upload-time = "2024-01-27T21:01:33.423Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" }, +] + +[[package]] +name = "packaging" +version = "26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/fa/7ac648108144a095b4fb6aa3de1954689f7af60a14cf25583f4960ecb878/pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", size = 11578790, upload-time = "2025-09-29T23:18:30.065Z" }, + { url = "https://files.pythonhosted.org/packages/9b/35/74442388c6cf008882d4d4bdfc4109be87e9b8b7ccd097ad1e7f006e2e95/pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", size = 10833831, upload-time = "2025-09-29T23:38:56.071Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e4/de154cbfeee13383ad58d23017da99390b91d73f8c11856f2095e813201b/pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", size = 12199267, upload-time = "2025-09-29T23:18:41.627Z" }, + { url = "https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", size = 12789281, upload-time = "2025-09-29T23:18:56.834Z" }, + { url = "https://files.pythonhosted.org/packages/f2/00/a5ac8c7a0e67fd1a6059e40aa08fa1c52cc00709077d2300e210c3ce0322/pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", size = 13240453, upload-time = "2025-09-29T23:19:09.247Z" }, + { url = "https://files.pythonhosted.org/packages/27/4d/5c23a5bc7bd209231618dd9e606ce076272c9bc4f12023a70e03a86b4067/pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", size = 13890361, upload-time = "2025-09-29T23:19:25.342Z" }, + { url = "https://files.pythonhosted.org/packages/8e/59/712db1d7040520de7a4965df15b774348980e6df45c129b8c64d0dbe74ef/pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", size = 11348702, upload-time = "2025-09-29T23:19:38.296Z" }, + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, + { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, + { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, + { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, + { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, + { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, + { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, + { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, + { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, + { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, + { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, + { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, +] + +[[package]] +name = "passlib" +version = "1.7.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/06/9da9ee59a67fae7761aab3ccc84fa4f3f33f125b370f1ccdb915bf967c11/passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04", size = 689844, upload-time = "2020-10-08T19:00:52.121Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/a4/ab6b7589382ca3df236e03faa71deac88cae040af60c071a78d254a62172/passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1", size = 525554, upload-time = "2020-10-08T19:00:49.856Z" }, +] + +[package.optional-dependencies] +bcrypt = [ + { name = "bcrypt" }, +] + +[[package]] +name = "pdfminer-six" +version = "20260107" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "charset-normalizer" }, + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/a4/5cec1112009f0439a5ca6afa8ace321f0ab2f48da3255b7a1c8953014670/pdfminer_six-20260107.tar.gz", hash = "sha256:96bfd431e3577a55a0efd25676968ca4ce8fd5b53f14565f85716ff363889602", size = 8512094, upload-time = "2026-01-07T13:29:12.937Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/8b/28c4eaec9d6b036a52cb44720408f26b1a143ca9bce76cc19e8f5de00ab4/pdfminer_six-20260107-py3-none-any.whl", hash = "sha256:366585ba97e80dffa8f00cebe303d2f381884d8637af4ce422f1df3ef38111a9", size = 6592252, upload-time = "2026-01-07T13:29:10.742Z" }, +] + +[[package]] +name = "pdfplumber" +version = "0.11.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pdfminer-six" }, + { name = "pillow" }, + { name = "pypdfium2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/05/56/6f450312ba05a27d7713b73857c1a25100dbda04fbc1331b13fb227a607d/pdfplumber-0.11.10.tar.gz", hash = "sha256:b95b2d28c66efb0a794a83b88c6c6aea5987532a445d20a1cbcfa657022e6e57", size = 102892, upload-time = "2026-06-15T03:31:31.035Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/9a/07d658e1e7fad860f1c541ab941348125dbdab773be3a0afaf32361866c7/pdfplumber-0.11.10-py3-none-any.whl", hash = "sha256:7741ea81bf165b474b153e6789d10d18e06b6ddcf3ec84289c3ef2fed6802580", size = 60047, upload-time = "2026-06-15T03:31:29.702Z" }, +] + +[[package]] +name = "pillow" +version = "12.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/e1/748f5663efe6edcfc4e74b2b93edfb9b8b99b67f21a854c3ae416500a2d9/pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab", size = 5354347, upload-time = "2026-04-01T14:42:44.255Z" }, + { url = "https://files.pythonhosted.org/packages/47/a1/d5ff69e747374c33a3b53b9f98cca7889fce1fd03d79cdc4e1bccc6c5a87/pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65", size = 4695873, upload-time = "2026-04-01T14:42:46.452Z" }, + { url = "https://files.pythonhosted.org/packages/df/21/e3fbdf54408a973c7f7f89a23b2cb97a7ef30c61ab4142af31eee6aebc88/pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7", size = 6280168, upload-time = "2026-04-01T14:42:49.228Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f1/00b7278c7dd52b17ad4329153748f87b6756ec195ff786c2bdf12518337d/pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e", size = 8088188, upload-time = "2026-04-01T14:42:51.735Z" }, + { url = "https://files.pythonhosted.org/packages/ad/cf/220a5994ef1b10e70e85748b75649d77d506499352be135a4989c957b701/pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705", size = 6394401, upload-time = "2026-04-01T14:42:54.343Z" }, + { url = "https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176", size = 7079655, upload-time = "2026-04-01T14:42:56.954Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3d/45132c57d5fb4b5744567c3817026480ac7fc3ce5d4c47902bc0e7f6f853/pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b", size = 6503105, upload-time = "2026-04-01T14:42:59.847Z" }, + { url = "https://files.pythonhosted.org/packages/7d/2e/9df2fc1e82097b1df3dce58dc43286aa01068e918c07574711fcc53e6fb4/pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909", size = 7203402, upload-time = "2026-04-01T14:43:02.664Z" }, + { url = "https://files.pythonhosted.org/packages/bd/2e/2941e42858ebb67e50ae741473de81c2984e6eff7b397017623c676e2e8d/pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808", size = 6378149, upload-time = "2026-04-01T14:43:05.274Z" }, + { url = "https://files.pythonhosted.org/packages/69/42/836b6f3cd7f3e5fa10a1f1a5420447c17966044c8fbf589cc0452d5502db/pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60", size = 7082626, upload-time = "2026-04-01T14:43:08.557Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/549194b5d6f1f494b485e493edc6693c0a16f4ada488e5bd974ed1f42fad/pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe", size = 2463531, upload-time = "2026-04-01T14:43:10.743Z" }, + { url = "https://files.pythonhosted.org/packages/58/be/7482c8a5ebebbc6470b3eb791812fff7d5e0216c2be3827b30b8bb6603ed/pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5", size = 5308279, upload-time = "2026-04-01T14:43:13.246Z" }, + { url = "https://files.pythonhosted.org/packages/d8/95/0a351b9289c2b5cbde0bacd4a83ebc44023e835490a727b2a3bd60ddc0f4/pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421", size = 4695490, upload-time = "2026-04-01T14:43:15.584Z" }, + { url = "https://files.pythonhosted.org/packages/de/af/4e8e6869cbed569d43c416fad3dc4ecb944cb5d9492defaed89ddd6fe871/pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987", size = 6284462, upload-time = "2026-04-01T14:43:18.268Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9e/c05e19657fd57841e476be1ab46c4d501bffbadbafdc31a6d665f8b737b6/pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76", size = 8094744, upload-time = "2026-04-01T14:43:20.716Z" }, + { url = "https://files.pythonhosted.org/packages/2b/54/1789c455ed10176066b6e7e6da1b01e50e36f94ba584dc68d9eebfe9156d/pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005", size = 6398371, upload-time = "2026-04-01T14:43:23.443Z" }, + { url = "https://files.pythonhosted.org/packages/43/e3/fdc657359e919462369869f1c9f0e973f353f9a9ee295a39b1fea8ee1a77/pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780", size = 7087215, upload-time = "2026-04-01T14:43:26.758Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f8/2f6825e441d5b1959d2ca5adec984210f1ec086435b0ed5f52c19b3b8a6e/pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5", size = 6509783, upload-time = "2026-04-01T14:43:29.56Z" }, + { url = "https://files.pythonhosted.org/packages/67/f9/029a27095ad20f854f9dba026b3ea6428548316e057e6fc3545409e86651/pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5", size = 7212112, upload-time = "2026-04-01T14:43:32.091Z" }, + { url = "https://files.pythonhosted.org/packages/be/42/025cfe05d1be22dbfdb4f264fe9de1ccda83f66e4fc3aac94748e784af04/pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940", size = 6378489, upload-time = "2026-04-01T14:43:34.601Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7b/25a221d2c761c6a8ae21bfa3874988ff2583e19cf8a27bf2fee358df7942/pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5", size = 7084129, upload-time = "2026-04-01T14:43:37.213Z" }, + { url = "https://files.pythonhosted.org/packages/10/e1/542a474affab20fd4a0f1836cb234e8493519da6b76899e30bcc5d990b8b/pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414", size = 2463612, upload-time = "2026-04-01T14:43:39.421Z" }, + { url = "https://files.pythonhosted.org/packages/4a/01/53d10cf0dbad820a8db274d259a37ba50b88b24768ddccec07355382d5ad/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c", size = 4100837, upload-time = "2026-04-01T14:43:41.506Z" }, + { url = "https://files.pythonhosted.org/packages/0f/98/f3a6657ecb698c937f6c76ee564882945f29b79bad496abcba0e84659ec5/pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2", size = 4176528, upload-time = "2026-04-01T14:43:43.773Z" }, + { url = "https://files.pythonhosted.org/packages/69/bc/8986948f05e3ea490b8442ea1c1d4d990b24a7e43d8a51b2c7d8b1dced36/pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c", size = 3640401, upload-time = "2026-04-01T14:43:45.87Z" }, + { url = "https://files.pythonhosted.org/packages/34/46/6c717baadcd62bc8ed51d238d521ab651eaa74838291bda1f86fe1f864c9/pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795", size = 5308094, upload-time = "2026-04-01T14:43:48.438Z" }, + { url = "https://files.pythonhosted.org/packages/71/43/905a14a8b17fdb1ccb58d282454490662d2cb89a6bfec26af6d3520da5ec/pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f", size = 4695402, upload-time = "2026-04-01T14:43:51.292Z" }, + { url = "https://files.pythonhosted.org/packages/73/dd/42107efcb777b16fa0393317eac58f5b5cf30e8392e266e76e51cff28c3d/pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed", size = 6280005, upload-time = "2026-04-01T14:43:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/a8/68/b93e09e5e8549019e61acf49f65b1a8530765a7f812c77a7461bca7e4494/pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9", size = 8090669, upload-time = "2026-04-01T14:43:57.335Z" }, + { url = "https://files.pythonhosted.org/packages/4b/6e/3ccb54ce8ec4ddd1accd2d89004308b7b0b21c4ac3d20fa70af4760a4330/pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed", size = 6395194, upload-time = "2026-04-01T14:43:59.864Z" }, + { url = "https://files.pythonhosted.org/packages/67/ee/21d4e8536afd1a328f01b359b4d3997b291ffd35a237c877b331c1c3b71c/pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3", size = 7082423, upload-time = "2026-04-01T14:44:02.74Z" }, + { url = "https://files.pythonhosted.org/packages/78/5f/e9f86ab0146464e8c133fe85df987ed9e77e08b29d8d35f9f9f4d6f917ba/pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9", size = 6505667, upload-time = "2026-04-01T14:44:05.381Z" }, + { url = "https://files.pythonhosted.org/packages/ed/1e/409007f56a2fdce61584fd3acbc2bbc259857d555196cedcadc68c015c82/pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795", size = 7208580, upload-time = "2026-04-01T14:44:08.39Z" }, + { url = "https://files.pythonhosted.org/packages/23/c4/7349421080b12fb35414607b8871e9534546c128a11965fd4a7002ccfbee/pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e", size = 6375896, upload-time = "2026-04-01T14:44:11.197Z" }, + { url = "https://files.pythonhosted.org/packages/3f/82/8a3739a5e470b3c6cbb1d21d315800d8e16bff503d1f16b03a4ec3212786/pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b", size = 7081266, upload-time = "2026-04-01T14:44:13.947Z" }, + { url = "https://files.pythonhosted.org/packages/c3/25/f968f618a062574294592f668218f8af564830ccebdd1fa6200f598e65c5/pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06", size = 2463508, upload-time = "2026-04-01T14:44:16.312Z" }, + { url = "https://files.pythonhosted.org/packages/4d/a4/b342930964e3cb4dce5038ae34b0eab4653334995336cd486c5a8c25a00c/pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b", size = 5309927, upload-time = "2026-04-01T14:44:18.89Z" }, + { url = "https://files.pythonhosted.org/packages/9f/de/23198e0a65a9cf06123f5435a5d95cea62a635697f8f03d134d3f3a96151/pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f", size = 4698624, upload-time = "2026-04-01T14:44:21.115Z" }, + { url = "https://files.pythonhosted.org/packages/01/a6/1265e977f17d93ea37aa28aa81bad4fa597933879fac2520d24e021c8da3/pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612", size = 6321252, upload-time = "2026-04-01T14:44:23.663Z" }, + { url = "https://files.pythonhosted.org/packages/3c/83/5982eb4a285967baa70340320be9f88e57665a387e3a53a7f0db8231a0cd/pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c", size = 8126550, upload-time = "2026-04-01T14:44:26.772Z" }, + { url = "https://files.pythonhosted.org/packages/4e/48/6ffc514adce69f6050d0753b1a18fd920fce8cac87620d5a31231b04bfc5/pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea", size = 6433114, upload-time = "2026-04-01T14:44:29.615Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f9a77144231fb8d40ee27107b4463e205fa4677e2ca2548e14da5cf18dce/pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4", size = 7115667, upload-time = "2026-04-01T14:44:32.773Z" }, + { url = "https://files.pythonhosted.org/packages/c1/fc/ac4ee3041e7d5a565e1c4fd72a113f03b6394cc72ab7089d27608f8aaccb/pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4", size = 6538966, upload-time = "2026-04-01T14:44:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a8/27fb307055087f3668f6d0a8ccb636e7431d56ed0750e07a60547b1e083e/pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea", size = 7238241, upload-time = "2026-04-01T14:44:37.875Z" }, + { url = "https://files.pythonhosted.org/packages/ad/4b/926ab182c07fccae9fcb120043464e1ff1564775ec8864f21a0ebce6ac25/pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24", size = 6379592, upload-time = "2026-04-01T14:44:40.336Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c4/f9e476451a098181b30050cc4c9a3556b64c02cf6497ea421ac047e89e4b/pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98", size = 7085542, upload-time = "2026-04-01T14:44:43.251Z" }, + { url = "https://files.pythonhosted.org/packages/00/a4/285f12aeacbe2d6dc36c407dfbbe9e96d4a80b0fb710a337f6d2ad978c75/pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453", size = 2465765, upload-time = "2026-04-01T14:44:45.996Z" }, + { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" }, + { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" }, + { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" }, + { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" }, + { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" }, + { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" }, + { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" }, + { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" }, + { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" }, + { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" }, + { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" }, + { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" }, + { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" }, + { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" }, + { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" }, + { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" }, + { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" }, + { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" }, + { url = "https://files.pythonhosted.org/packages/4e/b7/2437044fb910f499610356d1352e3423753c98e34f915252aafecc64889f/pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f", size = 5273969, upload-time = "2026-04-01T14:45:55.538Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f4/8316e31de11b780f4ac08ef3654a75555e624a98db1056ecb2122d008d5a/pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d", size = 4659674, upload-time = "2026-04-01T14:45:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/d4/37/664fca7201f8bb2aa1d20e2c3d5564a62e6ae5111741966c8319ca802361/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f", size = 5288479, upload-time = "2026-04-01T14:46:01.141Z" }, + { url = "https://files.pythonhosted.org/packages/49/62/5b0ed78fce87346be7a5cfcfaaad91f6a1f98c26f86bdbafa2066c647ef6/pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e", size = 7032230, upload-time = "2026-04-01T14:46:03.874Z" }, + { url = "https://files.pythonhosted.org/packages/c3/28/ec0fc38107fc32536908034e990c47914c57cd7c5a3ece4d8d8f7ffd7e27/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0", size = 5355404, upload-time = "2026-04-01T14:46:06.33Z" }, + { url = "https://files.pythonhosted.org/packages/5e/8b/51b0eddcfa2180d60e41f06bd6d0a62202b20b59c68f5a132e615b75aecf/pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1", size = 6002215, upload-time = "2026-04-01T14:46:08.83Z" }, + { url = "https://files.pythonhosted.org/packages/bc/60/5382c03e1970de634027cee8e1b7d39776b778b81812aaf45b694dfe9e28/pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e", size = 7080946, upload-time = "2026-04-01T14:46:11.734Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "portalocker" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/f8/969e6f280201b40b31bcb62843c619f343dcc351dff83a5891530c9dd60e/portalocker-2.7.0.tar.gz", hash = "sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51", size = 20183, upload-time = "2023-01-18T23:36:14.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/df/d4f711d168524f5aebd7fb30969eaa31e3048cf8979688cde3b08f6e5eb8/portalocker-2.7.0-py2.py3-none-any.whl", hash = "sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983", size = 15502, upload-time = "2023-01-18T23:36:12.849Z" }, +] + +[[package]] +name = "posthog" +version = "5.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backoff" }, + { name = "distro" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/20/60ae67bb9d82f00427946218d49e2e7e80fb41c15dc5019482289ec9ce8d/posthog-5.4.0.tar.gz", hash = "sha256:701669261b8d07cdde0276e5bc096b87f9e200e3b9589c5ebff14df658c5893c", size = 88076, upload-time = "2025-06-20T23:19:23.485Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/98/e480cab9a08d1c09b1c59a93dade92c1bb7544826684ff2acbfd10fcfbd4/posthog-5.4.0-py3-none-any.whl", hash = "sha256:284dfa302f64353484420b52d4ad81ff5c2c2d1d607c4e2db602ac72761831bd", size = 105364, upload-time = "2025-06-20T23:19:22.001Z" }, +] + +[[package]] +name = "propcache" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/44/c87281c333769159c50594f22610f77398a47ccbfbbf23074e744e86f87c/propcache-0.5.2.tar.gz", hash = "sha256:01c4fc7480cd0598bb4b57022df55b9ca296da7fc5a8760bd8451a7e63a7d427", size = 50208, upload-time = "2026-05-08T21:02:12.199Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/f1/8a8cc1c2c7e7934ab77e0163414f736fadbc0f5e8dd9673b952355ac175b/propcache-0.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74b70780220e2dd89175ca24b81b68b67c83db499ae611e7f2313cb329801c78", size = 90744, upload-time = "2026-05-08T20:59:45.799Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f4/651b1225e976bd1a2ba5cfba0c29d096581c2636b437e3a9a7ab6276270a/propcache-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a4840ab0ae0216d952f4b53dc6d0b992bfc2bedbfe360bdd9b548bc184c08959", size = 52033, upload-time = "2026-05-08T20:59:47.408Z" }, + { url = "https://files.pythonhosted.org/packages/15/a8/8ede85d6aa1f79fc7dc2f8fd2c8d65920b8272c3892903c8a1affde48cfb/propcache-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c6844ba6364fb12f403928a82cfd295ab103a2b315c77c747b2dbe4a41894ea7", size = 52754, upload-time = "2026-05-08T20:59:49.202Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fe/b3551b41bbc2f5b5bb088fc6920567cd43101253e68fbaa261339eb96fe1/propcache-0.5.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2293949b855ce597f2826452d17c2d545fb5622379c4ea6fdf525e9b8e8a2511", size = 57573, upload-time = "2026-05-08T20:59:50.778Z" }, + { url = "https://files.pythonhosted.org/packages/83/27/ab851ebd1b7172e3e161f5f8d39e315d54a91bea246f01f4d872d3376aef/propcache-0.5.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0fd59b5af35f74da48d905dcbad55449ba13be91823cb05a9bd590bbf5b61660", size = 60645, upload-time = "2026-05-08T20:59:52.227Z" }, + { url = "https://files.pythonhosted.org/packages/95/7d/466b3d18022e9897cbda9c735c493c5bd747d7a4c6f5ea1480b4cec434b6/propcache-0.5.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29f9309a2e42b0d273be006fdb4be2d6c39a47f6f57d8fb1cf9f81481df81b66", size = 61563, upload-time = "2026-05-08T20:59:53.866Z" }, + { url = "https://files.pythonhosted.org/packages/27/1b/16ab7f2cf2041da2f60d156ba64c2484eadf9168075b4ff43c3ef60045af/propcache-0.5.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5aaa2b923c1944ac8febd6609cb373540a5563e7cbcb0fd770f75dace2eb817b", size = 58888, upload-time = "2026-05-08T20:59:55.457Z" }, + { url = "https://files.pythonhosted.org/packages/0a/67/bb777ffd907633563bf35fd859c4ce97b0512c32f4633cf5d1eb7c33512b/propcache-0.5.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:66ea454f095ddf5b6b14f56c064c0941c4788be11e18d2464cf643bf7203ff67", size = 59253, upload-time = "2026-05-08T20:59:57.075Z" }, + { url = "https://files.pythonhosted.org/packages/b9/42/64f8d90b73fd9cdc1499b48057ff6d9cd2a98a25734c9bb62ecf07e87061/propcache-0.5.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:95f1e3f4760d404b13c9976c0229b2b49a3c8e2c62a9ce92efdd2b11ada75e3f", size = 57558, upload-time = "2026-05-08T20:59:58.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/dba5bc03c9041f2092ea55a449caf5dfe68352c6654511b29ba0654ddb69/propcache-0.5.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:85341b12b9d55bad0bded24cac341bb34289469e03a11f3f583ea1cc1db0326c", size = 55007, upload-time = "2026-05-08T20:59:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/14/c0/43f649c7aa2a77a3b100d84e9dea3a483120ecb608bfe36ce49eaff517fe/propcache-0.5.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:26a4dca084132874e639895c3135dfad5eb20bae209f62d1aeb31b03e601c3c0", size = 60355, upload-time = "2026-05-08T21:00:01.144Z" }, + { url = "https://files.pythonhosted.org/packages/83/c0/435dafd27f1cb4a495381dae60e25883ccfe4020bb72818e8184c1678092/propcache-0.5.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:3b199b9b2b3d6a7edf3183ba8a9a137a22b97f7df525feb5ae1eccf026d2a9c6", size = 59057, upload-time = "2026-05-08T21:00:02.401Z" }, + { url = "https://files.pythonhosted.org/packages/53/ae/6e292df9135d659944e96cb3389258e4a663e5b2b5f6c217ef0ddc8d2f73/propcache-0.5.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e59bc9e66329185b93dab73f210f1a37f81cb40f321501db8017c9aea15dba27", size = 61938, upload-time = "2026-05-08T21:00:03.638Z" }, + { url = "https://files.pythonhosted.org/packages/0b/42/314ebc50d8159055411fd6b0bda322ff510e4b1f7d2e4927940ad0f6af20/propcache-0.5.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:552ffadf6ad409844bc5919c42a0a83d88314cedddaea0e41e80a8b8fffe881f", size = 59731, upload-time = "2026-05-08T21:00:04.881Z" }, + { url = "https://files.pythonhosted.org/packages/b8/9b/2da6dee38871c3c8772fabc2758325a5c9077d6d18c597737dc04dd884cd/propcache-0.5.2-cp311-cp311-win32.whl", hash = "sha256:cd416c1de191973c52ff1a12a57446bfc7642797b282d7caf2162d7d1b8aa9a0", size = 38966, upload-time = "2026-05-08T21:00:06.511Z" }, + { url = "https://files.pythonhosted.org/packages/42/4e/f17363fb58c0afe05b067361cb6d86ed2d29de6506779a27547c4d183075/propcache-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:44e488ef40dbb452700b2b1f8188934121f6648f52c295055662d2191959ff82", size = 42135, upload-time = "2026-05-08T21:00:08.088Z" }, + { url = "https://files.pythonhosted.org/packages/c6/eb/6af6685077d22e8b33358d3c548e3282706a0b3cd85044ffba4e5dd08e3b/propcache-0.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:54adaa85a22078d1e306304a40984dc5be99d599bf3dc0a24dc98f7daeab89ab", size = 38381, upload-time = "2026-05-08T21:00:09.692Z" }, + { url = "https://files.pythonhosted.org/packages/4a/cb/e27bc2b2737a0bb49962b275efa051e8f1c35a936df7d5139b6b658b7dc9/propcache-0.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:806719138ecd720339a12410fb9614ac9b2b2d3a5fdf8235d56981c36f4039ba", size = 95887, upload-time = "2026-05-08T21:00:11.277Z" }, + { url = "https://files.pythonhosted.org/packages/e6/13/b8ae04c59392f8d11c6cd9fb4011d1dc7c86b81225c770280300e259ffe1/propcache-0.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:db2b80ea58eab4f86b2beec3cc8b39e8ff9276ac20e96b7cce43c8ae84cd6b5a", size = 54654, upload-time = "2026-05-08T21:00:12.604Z" }, + { url = "https://files.pythonhosted.org/packages/2c/7d/49777a3e20b55863d4794384a38acd460c04157b0a00f8602b0d508b8431/propcache-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e5cbfac9f61484f7e9f3597775500cd3ebe8274e9b050c38f9525c77c97520bf", size = 55190, upload-time = "2026-05-08T21:00:13.935Z" }, + { url = "https://files.pythonhosted.org/packages/44/c7/085d0cd63062e84044e3f05797749c3f8e3938ff3aeb0eb2f69d43fafc91/propcache-0.5.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbc581d2814337da56222fab8dc5f161cd798a434e49bac27930aaef798e144", size = 59995, upload-time = "2026-05-08T21:00:15.526Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/32cf8e3009e92b2645cf1e944f701e8ea4e924dffde1ee26db860bcbf7e4/propcache-0.5.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:857187f381f88c8e2fa2fe56ab94879d011b883d5a2ee5a1b60a8cd2a06846d9", size = 63422, upload-time = "2026-05-08T21:00:16.824Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/f112433f99fc979431b87a39ef169e3f8df070d99a72792c56d6937ac48b/propcache-0.5.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:178b4a2cdaac1818e2bf1c5a99b94383fa73ea5382e032a48dec07dc5668dc42", size = 64342, upload-time = "2026-05-08T21:00:18.362Z" }, + { url = "https://files.pythonhosted.org/packages/14/15/5574111ae50dd6e879456888c0eadd4c5a869959775854e18e18a6b345f3/propcache-0.5.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f328175a2cde1f0ff2c4ed8ce968b9dcfb55f3a7153f39e2957ed994da13476", size = 61639, upload-time = "2026-05-08T21:00:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/cc/da/4d775080b1490c0ae604acda868bd71aabe3a89ed16f2aa4339eb8a283e7/propcache-0.5.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5671d09a36b06d0fd4a3da0fccbcae360e9b1570924171a15e9e0997f0249fba", size = 61588, upload-time = "2026-05-08T21:00:21.155Z" }, + { url = "https://files.pythonhosted.org/packages/04/ac/f076982cbe2195ee9cf32de5a1e46951d9fb399fc207f390562dd0fd8fb2/propcache-0.5.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80168e2ebe4d3ec6599d10ad8f520304ae1cad9b6c5a95372aef1b66b7bfb53a", size = 60029, upload-time = "2026-05-08T21:00:22.713Z" }, + { url = "https://files.pythonhosted.org/packages/70/60/189be62e0dd898dce3b331e1b8c7a543cd3a405ac0c81fe8ee8a9d5d77e1/propcache-0.5.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:45f11346f884bc47444f6e6647131055844134c3175b629f84952e2b5cd62b64", size = 56774, upload-time = "2026-05-08T21:00:24.001Z" }, + { url = "https://files.pythonhosted.org/packages/ea/9e/93377b9c7939c1ffae98f878dee955efadfd638078bc86dbc21f9d52f651/propcache-0.5.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e778ebd44ef4f66ed60a0416b06b489687db264a9c0b3620362f26489492913", size = 63532, upload-time = "2026-05-08T21:00:25.545Z" }, + { url = "https://files.pythonhosted.org/packages/14/f9/590ef6cfb9b8028d516d287812ece32bb0bc5f11fbb9c8bf6b2e6313fec8/propcache-0.5.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:c0cb9ed24c8964e172768d455a38254c2dd8a552905729ce006cad3d3dda59b1", size = 61592, upload-time = "2026-05-08T21:00:27.186Z" }, + { url = "https://files.pythonhosted.org/packages/b4/5e/70958b3034c297a630bba2f17ca7abc2d5f39a803ad7e370ab79d1ecd022/propcache-0.5.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1d1ad32d9d4355e2be65574fd0bfd3677e7066b009cd5b9b2dee8aa6a6393b33", size = 64788, upload-time = "2026-05-08T21:00:28.8Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/77fe5936d8c3086ca9048f7f415f122ed82e53884a9ec193646b42deef06/propcache-0.5.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c80f4ba3e8f00189165999a742ee526ebeccedf6c3f7beb0c7df821e9772435a", size = 62514, upload-time = "2026-05-08T21:00:30.098Z" }, + { url = "https://files.pythonhosted.org/packages/cf/74/66bd798b5b3be70aa1b391f5cc9d6a0a5532d7fd3b19ec0b213e72e6ad9d/propcache-0.5.2-cp312-cp312-win32.whl", hash = "sha256:8c7972d8f193740d9175f0998ab38717e6cd322d5935c5b0fef8c0d323fd9031", size = 39018, upload-time = "2026-05-08T21:00:31.622Z" }, + { url = "https://files.pythonhosted.org/packages/61/7c/5c0d34aa3024694d6dcb9271cdbdd08c4e47c1c0ad95ec7e7bc74cdea145/propcache-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:d9ee8826a7d47863a08ac44e1a5f611a462eefc3a194b492da242128bec75b42", size = 42322, upload-time = "2026-05-08T21:00:32.918Z" }, + { url = "https://files.pythonhosted.org/packages/4d/91/875812f1a3feb20ceba818ef39fbe4d92f1081e04ac815c822496d0d038b/propcache-0.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:2800a4a8ead6b28cccd1ec54b59346f0def7922ee1c7598e8499c733cfbb7c84", size = 38172, upload-time = "2026-05-08T21:00:35.124Z" }, + { url = "https://files.pythonhosted.org/packages/c5/09/f049e45385503fe67db75a6b6186a7b9f0c3930366dc960522c312a825b1/propcache-0.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:099aaf4b4d1a02265b92a977edf00b5c4f63b3b17ac6de39b0d637c9cac0188a", size = 94457, upload-time = "2026-05-08T21:00:36.355Z" }, + { url = "https://files.pythonhosted.org/packages/6b/65/83d1d05655baf63113731bd5a1008435e14f8d1e5a06cbe4ec5b23ad7a31/propcache-0.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68ce1c44c7a813a7f71ea04315a8c7b330b63db99d059a797a4651bb6f69f117", size = 53835, upload-time = "2026-05-08T21:00:38.072Z" }, + { url = "https://files.pythonhosted.org/packages/a9/12/a6ba6482bb5ea3260c000c9b20881c95fa11c6b30173715668259f844ed7/propcache-0.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fc299c129490f55f254cd90be0deca4764e36e9a7c08b4aa588479a3bbed3098", size = 54545, upload-time = "2026-05-08T21:00:39.319Z" }, + { url = "https://files.pythonhosted.org/packages/a9/19/7fa086f5764c59ec8a8e157cd93aa8497acc00aba9dcdec56bfffb32602d/propcache-0.5.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6ae2198be502c10f09b2516e7b5d019816924bc3183a43ce792a7bd6625e6f4", size = 59886, upload-time = "2026-05-08T21:00:40.621Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e4/5d7663dc8235956c8f5281698a3af1d351d8820341ddd890f59d9a9127f2/propcache-0.5.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6041d31504dc1779d700e1edcfb08eea334b357620b06681a4eabb57a74e574e", size = 63261, upload-time = "2026-05-08T21:00:41.775Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4a/15a03adee24d6350da4292caeac44c34c033d2afe5e87eb370f38854560f/propcache-0.5.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7eabc04151c78a9f4d5bbb5f1faf571e4defeb4b585e0fe95b60ff2dbe4d3d7", size = 64184, upload-time = "2026-05-08T21:00:43.018Z" }, + { url = "https://files.pythonhosted.org/packages/8b/c6/979176efdaa3d239e36d503d5af63a0a773b36662ed8f52e5b6a6d9fd40e/propcache-0.5.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4db0ba63d693afd40d249bd93f842b5f144f8fcbb83de05660373bcf30517b1d", size = 61534, upload-time = "2026-05-08T21:00:44.507Z" }, + { url = "https://files.pythonhosted.org/packages/c8/22/63e8cd1bae4c2d2be6493b6b7d10566ddafad88137cfbc99964a1119853c/propcache-0.5.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1dbcf7675229b35d31abb6547d8ebc8c27a830ac3f9a794edff6254873ec7c0a", size = 61500, upload-time = "2026-05-08T21:00:45.796Z" }, + { url = "https://files.pythonhosted.org/packages/60/5a/28e5d9acbac1cc9ccb67045e8c1b943aa8d79fdf39c93bd73cacd68008ea/propcache-0.5.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d310c013aad2c72f1c3f2f8dd3279d460a858c551f97aeb8c63e4693cca7b4d2", size = 59994, upload-time = "2026-05-08T21:00:47.093Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/db650677f554a95b9c01a7c9d93d629e93a15562f5deb4573c9ee136fed2/propcache-0.5.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:06187263ddad280d05b4d8a8b3bb7d164cbebd469236544a42e6d9b28ac6a4fa", size = 56884, upload-time = "2026-05-08T21:00:48.376Z" }, + { url = "https://files.pythonhosted.org/packages/80/45/70b39b89516ff8b96bf732fa6fded8cef20f293cb1508690101c3c07ec51/propcache-0.5.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3115559b8effafd63b142ea5ed53d63a16ea6469cbc63dce4ee194b42db5d853", size = 63464, upload-time = "2026-05-08T21:00:49.954Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e2/fa59d3a89eac5534293124af4f1d0d0ada091ce4a0ab4610ce03fd2bdd8d/propcache-0.5.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c60462af8e6dc30c35407c7237ea908d777b22862bbee27bc4699c0d8bcdc45a", size = 61588, upload-time = "2026-05-08T21:00:51.281Z" }, + { url = "https://files.pythonhosted.org/packages/0b/97/efb547a55c4bc7381cfb202d6a2239ac621045277bc1ea5dfd3a7f0516c0/propcache-0.5.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40314bca9ac559716fe374094fc81c11dcc34b64fd6c585360f5775690505704", size = 64667, upload-time = "2026-05-08T21:00:52.602Z" }, + { url = "https://files.pythonhosted.org/packages/92/56/f5c7d9b4b7595d5127da38974d791b2153f3d1eae6c674af3583ace92ad3/propcache-0.5.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cfa21e036ce1e1db2be04ba3b85d2df1bb1702fa01932d984c5464c665228ff4", size = 62463, upload-time = "2026-05-08T21:00:54.303Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3b/484a3a65fc9f9f60c41dcd17b428bace5389544e2c680994534a20755066/propcache-0.5.2-cp313-cp313-win32.whl", hash = "sha256:f156a3529f38063b6dbaf356e15602a7f95f8055b1295a438433a6386f10463d", size = 38621, upload-time = "2026-05-08T21:00:55.808Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fd/3f0f10dba4dabad3bf53102be007abf55481067952bde0fdddff439e7c61/propcache-0.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:dfed59d0a5aeb01e242e66ff0300bc4a265a7c05f612d30016f0b60b1017d757", size = 41649, upload-time = "2026-05-08T21:00:57.061Z" }, + { url = "https://files.pythonhosted.org/packages/90/ec/6ce619cc32bb500a482f811f9cd509368b4e58e638d13f2c68f370d6b475/propcache-0.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:ba338430e87ceb9c8f0cf754de38a9860560261e56c00376debd628698a7364f", size = 37636, upload-time = "2026-05-08T21:00:58.646Z" }, + { url = "https://files.pythonhosted.org/packages/1b/82/c1d268bbbf2ef981c5bf0fbbe746db617c66e3bcefe431a1aa8943fbe23a/propcache-0.5.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a592f5f3da71c8691c788c13cb6734b6d17663d2e1cb8caddf0673d01ef8847d", size = 98872, upload-time = "2026-05-08T21:00:59.889Z" }, + { url = "https://files.pythonhosted.org/packages/f4/d4/52c871e73e864e6b34c0e2d58ac1ec5ccd149497ddc7ad2137ae98323a35/propcache-0.5.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6a997d0489e9668a384fcfd5061b857aa5361de73191cac204d04b889cfbbafa", size = 56257, upload-time = "2026-05-08T21:01:01.195Z" }, + { url = "https://files.pythonhosted.org/packages/67/f0/9b90ca2a210b3d09bcfcd96ecd0f55545c091535abce2a45de2775cfd357/propcache-0.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:10734b5484ea113152ee25a91dccedf81631791805d2c9ccb054958e51842c94", size = 56696, upload-time = "2026-05-08T21:01:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/9d/0e/6e9d4ba07c8e56e21ddec1e75f12148142b21ca83a51871babce095334f4/propcache-0.5.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cafca7e56c12bb02ae16d283742bef25a61122e9dab2b5b3f2ccbe589ce32164", size = 62378, upload-time = "2026-05-08T21:01:04.475Z" }, + { url = "https://files.pythonhosted.org/packages/65/19/c10badaa463dde8a27ce884f8ee2ec37e6035b7c9f5ff0c8f74f06f08dac/propcache-0.5.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f064f8d2b59177878b7615df1735cd8fe3462ed6be8c7b217d17a276489c2b7f", size = 65283, upload-time = "2026-05-08T21:01:05.959Z" }, + { url = "https://files.pythonhosted.org/packages/b0/b6/93bea99ca80e19cef6512a8580e5b7857bbe09422d9daa7fd4ef5723306c/propcache-0.5.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f78abfa8dfc32376fd1aacf597b2f2fbbe0ea751419aee718af5d4f82537ef8c", size = 66616, upload-time = "2026-05-08T21:01:07.228Z" }, + { url = "https://files.pythonhosted.org/packages/83/e4/5c7462e50625f051f37fb38b8224f7639f667184bbd34424ec83819bb1b7/propcache-0.5.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f7467da8a9822bf1a55336f877340c5bcbd3c482afc43a99771169f74a26dedc", size = 63773, upload-time = "2026-05-08T21:01:08.514Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b6/99238894047b13c823be25027e736626cd414a52a5e30d2c3347c2733529/propcache-0.5.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a6ddc6ac9e25de626c1f129c1b467d7ecd33ce2237d3fd0c4e429feef0a7ee1f", size = 63664, upload-time = "2026-05-08T21:01:09.874Z" }, + { url = "https://files.pythonhosted.org/packages/85/1e/a3a1a63116a2b8edb415a8bb9a6f0c34bd03830b1e18e8ce2904e1dc1cf4/propcache-0.5.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2f22cbbac9e26a8e864c0985ff1268d5d939d53d9d9411a9824279097e03a2cb", size = 62643, upload-time = "2026-05-08T21:01:11.132Z" }, + { url = "https://files.pythonhosted.org/packages/e4/03/893cf147de2fc6543c5eaa07ad833170e7e2a2385725bbebe8c0503723bb/propcache-0.5.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:fc76378c62a0f04d0cd82fbb1a2cd2d7e28fcb40d5873f28a6c44e388aaa2751", size = 59595, upload-time = "2026-05-08T21:01:12.387Z" }, + { url = "https://files.pythonhosted.org/packages/86/3b/04c1a2e12c57766568ba75ba72b3bf2042818d4c1425fab6fc07155c7cff/propcache-0.5.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:acd2c8edba48e31e58a363b8cf4e5c7db3b04b3f9e371f601df30d9b0d244836", size = 65711, upload-time = "2026-05-08T21:01:13.676Z" }, + { url = "https://files.pythonhosted.org/packages/1c/34/80f8d0099f8d6bacc4de1624c85672681c8cd1149ca2da0e38fd120b817f/propcache-0.5.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:452b5065457eb9991ec5eb38ff41d6cd4c991c9ac7c531c4d5849ae473a9a13f", size = 64247, upload-time = "2026-05-08T21:01:14.936Z" }, + { url = "https://files.pythonhosted.org/packages/f3/1a/8b08f3a5f1037e9e370c55883ceeeee0f6dd0416fb2d2d67b8bfc91f2a79/propcache-0.5.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3430bb2bfe1331885c427745a751e774ee679fd4344f80b97bf879815fe8fa55", size = 67102, upload-time = "2026-05-08T21:01:16.281Z" }, + { url = "https://files.pythonhosted.org/packages/34/68/8bdb7bb7756d76e005490649d10e4a8369e610c74d619f71e1aedf889e9c/propcache-0.5.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cef6cea3922890dd6c9654971001fa797b526c16ab5e1e46c05fd6f877be7568", size = 64964, upload-time = "2026-05-08T21:01:17.57Z" }, + { url = "https://files.pythonhosted.org/packages/0a/aa/50fb0b5d3968b61a510926ff8b8465f1d6e976b3ab74496d7a4b9fc42515/propcache-0.5.2-cp313-cp313t-win32.whl", hash = "sha256:72d61e16dd78228b58c5d47be830ff3da7e5f139abdf0aef9d86cde1c5cf2191", size = 42546, upload-time = "2026-05-08T21:01:18.946Z" }, + { url = "https://files.pythonhosted.org/packages/ae/4c/0ddbae64321bd4a95bcbfc19307238016b5b1fee645c84626c8d539e5b74/propcache-0.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:0958834041a0166d343b8d2cedcd8bcbaeb4fdbe0cf08320c5379f143c3be6e7", size = 46330, upload-time = "2026-05-08T21:01:20.162Z" }, + { url = "https://files.pythonhosted.org/packages/00/d9/9cddc8efb78d8af264c5ec9f6d10b62f57c515feda8d321595f56010fb23/propcache-0.5.2-cp313-cp313t-win_arm64.whl", hash = "sha256:6de8bd93ddde9b992cf2b2e0d796d501a19026b5b9fd87356d7d0779531a8d96", size = 40521, upload-time = "2026-05-08T21:01:21.399Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ea/23ee535d90ce8bcc465a3028eb3cc0ce3bd1005f4bb27710b30587de798d/propcache-0.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:46088abff4cba581dea21ae0467a480526cb25aa5f3c269e909f800328bc3999", size = 94662, upload-time = "2026-05-08T21:01:22.683Z" }, + { url = "https://files.pythonhosted.org/packages/b5/06/c5a52f419b5d8972f8d46a7577476090d8e3263ff589ce40b5ca4968d5be/propcache-0.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fc88b26f08d634f7bc819a7852e5214f5802641ab8d9fd5326892292eee1993e", size = 53928, upload-time = "2026-05-08T21:01:23.986Z" }, + { url = "https://files.pythonhosted.org/packages/63/b1/4260d67d6bd85e58a66b72d54ce15d5de789b6f3870cc6bedf8ff9667401/propcache-0.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:97797ebb098e670a2f92dd66f32897e30d7615b14e7f59711de23e30a9072539", size = 54650, upload-time = "2026-05-08T21:01:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/70/06/2f46c318e3307cd7a6a7481def374ce838c0fe20084b39dd54b0879d0e99/propcache-0.5.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba57fffe4ac99c5d30076161b5866336d97600769bad35cc68f7774b15298a4e", size = 59912, upload-time = "2026-05-08T21:01:26.545Z" }, + { url = "https://files.pythonhosted.org/packages/4c/29/fe1aebec2ce57ab985a9c382bded1124431f85078113aa222c5d278430d4/propcache-0.5.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:583c19759d9eec1e5b69e2fbef36a7d9c326041be9746cb822d335c8cedc2979", size = 63300, upload-time = "2026-05-08T21:01:27.937Z" }, + { url = "https://files.pythonhosted.org/packages/b4/18/2334b26768b6c82be8c69e83671b767d5ef426aa09b0cba6c2ea47816774/propcache-0.5.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d0326e2e5e1f3163fa306c834e48e8d490e5fae607a097a40c0648109b47ba80", size = 64208, upload-time = "2026-05-08T21:01:29.484Z" }, + { url = "https://files.pythonhosted.org/packages/2b/76/7f1bfd6afff4c5e38e36a3c6d68eb5f4b7311ea80baf693db78d95b603c4/propcache-0.5.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e00820e192c8dbebcafb383ebbf99030895f09905e7a0eb2e0340a0bcc2bc825", size = 61633, upload-time = "2026-05-08T21:01:31.068Z" }, + { url = "https://files.pythonhosted.org/packages/c4/46/b3ff8aba2b4953a3e50de2cf72f1b5748b8eca93b15f3dc2c84339084c09/propcache-0.5.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c66afea89b1e43725731d2004732a046fe6fe955d51f952c3e95a7314a284a39", size = 61724, upload-time = "2026-05-08T21:01:32.374Z" }, + { url = "https://files.pythonhosted.org/packages/c5/01/814cfcafbcff954f94c01cf30e097ddc88a076b5440fbcf4570753437d40/propcache-0.5.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc37dec6c6cdad0b57881a5658fd14fbf53e333b1a86cf86559f190e1d9ec4", size = 60069, upload-time = "2026-05-08T21:01:33.67Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/5c6f7622d510cc666a300687e06fd060c1a43361c0c9b20d284f06d8096a/propcache-0.5.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5570dbcc97571c15f68068e529c92715a12f8d54030e272d264b377e22bd17a5", size = 57099, upload-time = "2026-05-08T21:01:34.915Z" }, + { url = "https://files.pythonhosted.org/packages/55/27/9cb0b4c679124085327957d42521c99dba04c88c90c3e55a6f0b633ebccc/propcache-0.5.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f814362777a9f841adddb200ecdf8f5cb1e5a3c4b7a86378edbd6ccb26edd702", size = 63391, upload-time = "2026-05-08T21:01:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9d/7258aaa5bdf60fc6f27591eef6fe52768cb0beda7140be477c8b12c9794a/propcache-0.5.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:196913dea116aeb5a2ba95af4ddcb7ea85559ae07d8eee8751688310d09168c3", size = 61626, upload-time = "2026-05-08T21:01:37.545Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0d/41c602003e8a9b16fe1e7eadf62c7bfba9d5474370b24200bf48b315f45f/propcache-0.5.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:6e7b8719005dd1175be4ab1cd25e9b98659a5e0347331506ec6760d2773a7fb5", size = 64781, upload-time = "2026-05-08T21:01:38.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f3/38e66b1856e9bd079deea015bc4a55f7767c0e4db2f7dcf69e7e680ba4ce/propcache-0.5.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:51f96d685ab16e88cab128cd37a52c5da540809c8b879fa047731bfcb4ad35a4", size = 62570, upload-time = "2026-05-08T21:01:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/95/ca/bbfe9b910ce57dde8bb4876b4520fc02a4e89497c10de26be936758a3aaa/propcache-0.5.2-cp314-cp314-win32.whl", hash = "sha256:cc6fc3cc62e8501d3ed62894425040d2728ecddb1ed072737a5c70bd537aa9f0", size = 39436, upload-time = "2026-05-08T21:01:41.654Z" }, + { url = "https://files.pythonhosted.org/packages/61/d2/45c9defbaa1ea297035d9d4cce9e8f80daafbf19319c6007f157c6256ea9/propcache-0.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:81e3a30b0bb60caa22033dd0f8a3618d1d67356212514f62c57db75cb0ef410c", size = 42373, upload-time = "2026-05-08T21:01:43.041Z" }, + { url = "https://files.pythonhosted.org/packages/44/68/9ea5103f41d5217d7d6ec24db90018e23aebec070c3f9a6e54d12b841fd8/propcache-0.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:0d2c9bf8528f135dbb805ce027567e09164f7efa51a2be07458a2c0420f292d0", size = 38554, upload-time = "2026-05-08T21:01:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/8a/81/fadf555f42d3b762eea8a53950b0489fdc0aa9da5f8ed9e10ce0a4e01b48/propcache-0.5.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:4bc8ff1feffc6a61c7002ffe84634c41b822e104990ae009f44a0834430070bb", size = 99395, upload-time = "2026-05-08T21:01:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c9/c61e134a686949cf7971af3a390148b1156f7be81c73bc0cd12c873e2d48/propcache-0.5.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:79aa3ff0a9b566633b642fa9caf7e21ed1c13d6feca718187873f199e1514078", size = 56653, upload-time = "2026-05-08T21:01:47.307Z" }, + { url = "https://files.pythonhosted.org/packages/cb/73/daf935ea7048ddd7ec8eec5345b4a40b619d2d178b3c0a0900796bc3c794/propcache-0.5.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1b31822f4474c4036bae62de9402710051d431a606d6a0f907fec79935a071aa", size = 56914, upload-time = "2026-05-08T21:01:48.573Z" }, + { url = "https://files.pythonhosted.org/packages/79/9f/aba959b435ea18617edd7cf0a7ad0b9c574b8fc7e3d2cd55fb59cb255d33/propcache-0.5.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13fef48778b5a2a756523fdb781326b028ca75e32858b04f2cdd19f394564917", size = 62567, upload-time = "2026-05-08T21:01:49.903Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a1/859942de9a791ff42f6141736f5b37749b8f53e65edfa49638c67dd67e6a/propcache-0.5.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8b73ab70f1a3351fbc71f663b3e645af6dd0329100c353081cf69c37433fc6fe", size = 65542, upload-time = "2026-05-08T21:01:51.204Z" }, + { url = "https://files.pythonhosted.org/packages/b5/61/315bc0fd6c0fc7f80a528b8afd209e5fc4a875ea79571b91b8f50f442907/propcache-0.5.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5538d2c13d93e4698af7e092b57bc7298fd35d1d58e656ae18f23ee0d0378e03", size = 66845, upload-time = "2026-05-08T21:01:52.539Z" }, + { url = "https://files.pythonhosted.org/packages/47/f7/9f8122e3132e8e354ac41975ef8f1099be7d5a16bc7ae562734e993665c0/propcache-0.5.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cd645f03898405cabe694fb8bc35241e3a9c332ec85627584fe3de201452b335", size = 63985, upload-time = "2026-05-08T21:01:53.847Z" }, + { url = "https://files.pythonhosted.org/packages/c8/54/c317819ec157cbf6f35df9df9657a6f82daf34d5faf15948b2f639c2192e/propcache-0.5.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a473b3440261e0c60706e732b2ed2f517857344fc21bf48fdfe211e2d98eb285", size = 63999, upload-time = "2026-05-08T21:01:55.179Z" }, + { url = "https://files.pythonhosted.org/packages/5a/56/387e3f7dfce0a9233df41fb888aa1c30222cb4bbbf09537c02dd9bd85fe2/propcache-0.5.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7afa37062e6650640e932e4cc9297d81f9f42d9944029cc386b8247dea4da837", size = 62779, upload-time = "2026-05-08T21:01:57.489Z" }, + { url = "https://files.pythonhosted.org/packages/a1/9c/596784cb5824ed61ee960d3f8655a3f0993e107c6e98ab6c818b7fb92ccb/propcache-0.5.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:8a90efd5777e996e42d568db9ac740b944d691e565cbfd31b2f7832f9184b2b8", size = 59796, upload-time = "2026-05-08T21:01:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/c2/3d/1a6cfa1726a48542c1e8784a0761421476a5b68e09b7f36bf95eb954aaba/propcache-0.5.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:f19bb891234d72535764d703bfed1153cc34f4214d5bd7150aee1eec9e8f4366", size = 66023, upload-time = "2026-05-08T21:02:00.228Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0e/05fd6990369477076e4e280bcb970de760fddf0161a46e988bc95f7940ec/propcache-0.5.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:32775082acd2d807ee3db715c7770d38767b817870acfa08c29e057f3c4d5b56", size = 64448, upload-time = "2026-05-08T21:02:01.888Z" }, + { url = "https://files.pythonhosted.org/packages/cd/86/5f8da315a4309c62c10c0b2516b17492d5d3bbe1bb862b96604db67e2a37/propcache-0.5.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9282fb1a3bccd038da9f768b927b24a0c753e466c086b7c4f3c6982851eefb2d", size = 67329, upload-time = "2026-05-08T21:02:03.484Z" }, + { url = "https://files.pythonhosted.org/packages/da/d3/3368efe79ab21f0cdf86ef49895811c9cc933131d4cde1f28a624e22e712/propcache-0.5.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc49723e2f60d6b32a0f0b08a3fd6d13203c07f1cd9566cfce0f12a917c967a2", size = 65172, upload-time = "2026-05-08T21:02:04.745Z" }, + { url = "https://files.pythonhosted.org/packages/d5/07/127e8b0bacfb325396196f9d976a22453049b89b9b2b08477cc3145faa44/propcache-0.5.2-cp314-cp314t-win32.whl", hash = "sha256:2d7aa89ebca5acc98cba9d1472d976e394782f587bad6661003602a619fd1821", size = 43813, upload-time = "2026-05-08T21:02:06.025Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/46dad6c0ae49ed230ab1b16c890c2b6314e2403e6c412976f4a72d64a527/propcache-0.5.2-cp314-cp314t-win_amd64.whl", hash = "sha256:d447bb0b3054be5818458fbb171208b1d9ff11eba14e18ca18b90cbb45767370", size = 47764, upload-time = "2026-05-08T21:02:07.353Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c4/a47d0a63aa309d10d59ede6e9d4cff03a344a79d1f0f4cd0cd74997b53e0/propcache-0.5.2-cp314-cp314t-win_arm64.whl", hash = "sha256:fe67a3d11cd9b4efabfa45c3d00ffba2b26811442a73a581a94b67c2b5faccf6", size = 41140, upload-time = "2026-05-08T21:02:09.065Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ed/1cdcab6ba3d6ab7feca11fc14f0eeea80755bb53ef4e892079f31b10a25f/propcache-0.5.2-py3-none-any.whl", hash = "sha256:be1ddfcbb376e3de5d2e2db1d58d6d67463e6b4f9f040c000de8e300295465fe", size = 14036, upload-time = "2026-05-08T21:02:10.673Z" }, +] + +[[package]] +name = "proto-plus" +version = "1.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/56/e647b0c675392d2da368da7b6f158f7368b18542fd6f7d7400a2f39de000/proto_plus-1.28.0.tar.gz", hash = "sha256:38e5696342835b08fc116f30a25665b29531cda9d5d5643e9b81fc312385abd9", size = 57221, upload-time = "2026-05-07T08:04:50.811Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/20/b122d4626976acb81132036d2ad1bb35a1a8775fceb837ec30964622516a/proto_plus-1.28.0-py3-none-any.whl", hash = "sha256:a630604310899e73c59ec302e5765c058d412b2f090b9c79c8822589f14955b8", size = 50410, upload-time = "2026-05-07T08:03:31.962Z" }, +] + +[[package]] +name = "protobuf" +version = "5.29.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/57/394a763c103e0edf87f0938dafcd918d53b4c011dfc5c8ae80f3b0452dbb/protobuf-5.29.6.tar.gz", hash = "sha256:da9ee6a5424b6b30fd5e45c5ea663aef540ca95f9ad99d1e887e819cdf9b8723", size = 425623, upload-time = "2026-02-04T22:54:40.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/88/9ee58ff7863c479d6f8346686d4636dd4c415b0cbeed7a6a7d0617639c2a/protobuf-5.29.6-cp310-abi3-win32.whl", hash = "sha256:62e8a3114992c7c647bce37dcc93647575fc52d50e48de30c6fcb28a6a291eb1", size = 423357, upload-time = "2026-02-04T22:54:25.805Z" }, + { url = "https://files.pythonhosted.org/packages/1c/66/2dc736a4d576847134fb6d80bd995c569b13cdc7b815d669050bf0ce2d2c/protobuf-5.29.6-cp310-abi3-win_amd64.whl", hash = "sha256:7e6ad413275be172f67fdee0f43484b6de5a904cc1c3ea9804cb6fe2ff366eda", size = 435175, upload-time = "2026-02-04T22:54:28.592Z" }, + { url = "https://files.pythonhosted.org/packages/06/db/49b05966fd208ae3f44dcd33837b6243b4915c57561d730a43f881f24dea/protobuf-5.29.6-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:b5a169e664b4057183a34bdc424540e86eea47560f3c123a0d64de4e137f9269", size = 418619, upload-time = "2026-02-04T22:54:30.266Z" }, + { url = "https://files.pythonhosted.org/packages/b7/d7/48cbf6b0c3c39761e47a99cb483405f0fde2be22cf00d71ef316ce52b458/protobuf-5.29.6-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:a8866b2cff111f0f863c1b3b9e7572dc7eaea23a7fae27f6fc613304046483e6", size = 320284, upload-time = "2026-02-04T22:54:31.782Z" }, + { url = "https://files.pythonhosted.org/packages/e3/dd/cadd6ec43069247d91f6345fa7a0d2858bef6af366dbd7ba8f05d2c77d3b/protobuf-5.29.6-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:e3387f44798ac1106af0233c04fb8abf543772ff241169946f698b3a9a3d3ab9", size = 320478, upload-time = "2026-02-04T22:54:32.909Z" }, + { url = "https://files.pythonhosted.org/packages/5a/cb/e3065b447186cb70aa65acc70c86baf482d82bf75625bf5a2c4f6919c6a3/protobuf-5.29.6-py3-none-any.whl", hash = "sha256:6b9edb641441b2da9fa8f428760fc136a49cf97a52076010cf22a2ff73438a86", size = 173126, upload-time = "2026-02-04T22:54:39.462Z" }, +] + +[[package]] +name = "pyarrow" +version = "24.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/13/13e1069b351bdc3881266e11147ffccf687505dbb0ea74036237f5d454a5/pyarrow-24.0.0.tar.gz", hash = "sha256:85fe721a14dd823aca09127acbb06c3ca723efbd436c004f16bca601b04dcc83", size = 1180261, upload-time = "2026-04-21T10:51:25.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/c9/a47ab7ece0d86cbe6678418a0fbd1ac4bb493b9184a3891dfa0e7f287ae0/pyarrow-24.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:b0e131f880cda8d04e076cee175a46fc0e8bc8b65c99c6c09dff6669335fde74", size = 35068898, upload-time = "2026-04-21T10:46:36.599Z" }, + { url = "https://files.pythonhosted.org/packages/d1/bc/8db86617a9a58008acf8913d6fed68ea2a46acb6de928db28d724c891a68/pyarrow-24.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:1b2fe7f9a5566401a0ef2571f197eb92358925c1f0c8dba305d6e43ea0871bb3", size = 36679915, upload-time = "2026-04-21T10:46:42.602Z" }, + { url = "https://files.pythonhosted.org/packages/eb/8e/fb178720400ef69db251eb4a9c3ccf4af269bc1feb5055529b8fc87170d1/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:0b3537c00fb8d384f15ac1e79b6eb6db04a16514c8c1d22e59a9b95c8ba42868", size = 45697931, upload-time = "2026-04-21T10:46:48.403Z" }, + { url = "https://files.pythonhosted.org/packages/f3/27/99c42abe8e21b44f4917f62631f3aa31404882a2c41d8a4cd5c110e13d52/pyarrow-24.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:14e31a3c9e35f1ab6356c6378f6f72830e6d2d5f1791df3774a7b097d18a6a1e", size = 48837449, upload-time = "2026-04-21T10:46:55.329Z" }, + { url = "https://files.pythonhosted.org/packages/36/b6/333749e2666e9032891125bf9c691146e92901bece62030ac1430e2e7c88/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b7d9a514e73bc42711e6a35aaccf3587c520024fe0a25d830a1a8a27c15f4f57", size = 49395949, upload-time = "2026-04-21T10:47:01.869Z" }, + { url = "https://files.pythonhosted.org/packages/17/25/c5201706a2dd374e8ba6ee3fd7a8c89fb7ffc16eed5217a91fd2bd7f7626/pyarrow-24.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b196eb3f931862af3fa84c2a253514d859c08e0d8fe020e07be12e75a5a9780c", size = 51912986, upload-time = "2026-04-21T10:47:09.872Z" }, + { url = "https://files.pythonhosted.org/packages/f8/d2/4d1bbba65320b21a49678d6fbdc6ff7c649251359fdcfc03568c4136231d/pyarrow-24.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:35405aecb474e683fb36af650618fd5340ee5471fc65a21b36076a18bbc6c981", size = 27255371, upload-time = "2026-04-21T10:47:15.943Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a9/9686d9f07837f91f775e8932659192e02c74f9d8920524b480b85212cc68/pyarrow-24.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:6233c9ed9ab9d1db47de57d9753256d9dcffbf42db341576099f0fd9f6bf4810", size = 34981559, upload-time = "2026-04-21T10:47:22.17Z" }, + { url = "https://files.pythonhosted.org/packages/80/b6/0ddf0e9b6ead3474ab087ae598c76b031fc45532bf6a63f3a553440fb258/pyarrow-24.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:f7616236ec1bc2b15bfdec22a71ab38851c86f8f05ff64f379e1278cf20c634a", size = 36663654, upload-time = "2026-04-21T10:47:28.315Z" }, + { url = "https://files.pythonhosted.org/packages/7c/3b/926382efe8ce27ba729071d3566ade6dfb86bdf112f366000196b2f5780a/pyarrow-24.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:1617043b99bd33e5318ae18eb2919af09c71322ef1ca46566cdafc6e6712fb66", size = 45679394, upload-time = "2026-04-21T10:47:34.821Z" }, + { url = "https://files.pythonhosted.org/packages/b3/7a/829f7d9dfd37c207206081d6dad474d81dde29952401f07f2ba507814818/pyarrow-24.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:6165461f55ef6314f026de6638d661188e3455d3ec49834556a0ebbdbace18bb", size = 48863122, upload-time = "2026-04-21T10:47:42.056Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e8/f88ce625fe8babaae64e8db2d417c7653adb3019b08aae85c5ed787dc816/pyarrow-24.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b13dedfe76a0ad2d1d859b0811b53827a4e9d93a0bcb05cf59333ab4980cc7e", size = 49376032, upload-time = "2026-04-21T10:47:48.967Z" }, + { url = "https://files.pythonhosted.org/packages/36/7a/82c363caa145fff88fb475da50d3bf52bb024f61917be5424c3392eaf878/pyarrow-24.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:25ea65d868eb04015cd18e6df2fbe98f07e5bda2abefabcb88fce39a947716f6", size = 51929490, upload-time = "2026-04-21T10:47:55.981Z" }, + { url = "https://files.pythonhosted.org/packages/66/1c/e3e72c8014ad2743ca64a701652c733cc5cbcee15c0463a32a8c55518d9e/pyarrow-24.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:295f0a7f2e242dabd513737cf076007dc5b2d59237e3eca37b05c0c6446f3826", size = 27355660, upload-time = "2026-04-21T10:48:01.718Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d3/a1abf004482026ddc17f4503db227787fa3cfe41ec5091ff20e4fea55e57/pyarrow-24.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:02b001b3ed4723caa44f6cd1af2d5c86aa2cf9971dacc2ffa55b21237713dfba", size = 34976759, upload-time = "2026-04-21T10:48:07.258Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4a/34f0a36d28a2dd32225301b79daad44e243dc1a2bb77d43b60749be255c4/pyarrow-24.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:04920d6a71aabd08a0417709efce97d45ea8e6fb733d9ca9ecffb13c67839f68", size = 36658471, upload-time = "2026-04-21T10:48:13.347Z" }, + { url = "https://files.pythonhosted.org/packages/1f/78/543b94712ae8bb1a6023bcc1acf1a740fbff8286747c289cd9468fced2a5/pyarrow-24.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:a964266397740257f16f7bb2e4f08a0c81454004beab8ff59dd531b73610e9f2", size = 45675981, upload-time = "2026-04-21T10:48:20.201Z" }, + { url = "https://files.pythonhosted.org/packages/84/9f/8fb7c222b100d314137fa40ec050de56cd8c6d957d1cfff685ce72f15b17/pyarrow-24.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6f066b179d68c413374294bc1735f68475457c933258df594443bb9d88ddc2a0", size = 48859172, upload-time = "2026-04-21T10:48:27.541Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/1ea72538e6c8b3b475ed78d1049a2c518e655761ea50fe1171fc855fcab7/pyarrow-24.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1183baeb14c5f587b1ec52831e665718ce632caab84b7cd6b85fd44f96114495", size = 49385733, upload-time = "2026-04-21T10:48:34.7Z" }, + { url = "https://files.pythonhosted.org/packages/c3/be/c3d8b06a1ba35f2260f8e1f771abbee7d5e345c0937aab90675706b1690a/pyarrow-24.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:806f24b4085453c197a5078218d1ee08783ebbba271badd153d1ae22a3ee804f", size = 51934335, upload-time = "2026-04-21T10:48:42.099Z" }, + { url = "https://files.pythonhosted.org/packages/9c/62/89e07a1e7329d2cde3e3c6994ba0839a24977a2beda8be6005ea3d860b99/pyarrow-24.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:e4505fc6583f7b05ab854934896bcac8253b04ac1171a77dfb73efef92076d91", size = 27271748, upload-time = "2026-04-21T10:49:42.532Z" }, + { url = "https://files.pythonhosted.org/packages/17/1a/cff3a59f80b5b1658549d46611b67163f65e0664431c076ad728bf9d5af4/pyarrow-24.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:1a4e45017efbf115032e4475ee876d525e0e36c742214fbe405332480ecd6275", size = 35238554, upload-time = "2026-04-21T10:48:48.526Z" }, + { url = "https://files.pythonhosted.org/packages/a8/99/cce0f42a327bfef2c420fb6078a3eb834826e5d6697bf3009fe11d2ad051/pyarrow-24.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:7986f1fa71cee060ad00758bcc79d3a93bab8559bf978fab9e53472a2e25a17b", size = 36782301, upload-time = "2026-04-21T10:48:55.181Z" }, + { url = "https://files.pythonhosted.org/packages/2a/66/8e560d5ff6793ca29aca213c53eec0dd482dd46cb93b2819e5aab52e4252/pyarrow-24.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:d3e0b61e8efb24ed38898e5cdc5fffa9124be480008d401a1f8071500494ae42", size = 45721929, upload-time = "2026-04-21T10:49:03.676Z" }, + { url = "https://files.pythonhosted.org/packages/27/0c/a26e25505d030716e078d9f16eb74973cbf0b33b672884e9f9da1c83b871/pyarrow-24.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:55a3bc1e3df3b5567b7d27ef551b2283f0c68a5e86f1cd56abc569da4f31335b", size = 48825365, upload-time = "2026-04-21T10:49:11.714Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/771f9ecb0c65e73fe9dccdd1717901b9594f08c4515d000c7c62df573811/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:641f795b361874ac9da5294f8f443dfdbee355cf2bd9e3b8d97aaac2306b9b37", size = 49451819, upload-time = "2026-04-21T10:49:21.474Z" }, + { url = "https://files.pythonhosted.org/packages/48/da/61ae89a88732f5a785646f3ec6125dbb640fa98a540eb2b9889caa561403/pyarrow-24.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8adc8e6ce5fccf5dc707046ae4914fd537def529709cc0d285d37a7f9cd442ca", size = 51909252, upload-time = "2026-04-21T10:49:31.164Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1a/8dd5cafab7b66573fa91c03d06d213356ad4edd71813aa75e08ce2b3a844/pyarrow-24.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:9b18371ad2f44044b81a8d23bc2d8a9b6a6226dca775e8e16cfee640473d6c5d", size = 27388127, upload-time = "2026-04-21T10:49:37.334Z" }, + { url = "https://files.pythonhosted.org/packages/ad/80/d022a34ff05d2cbedd8ccf841fc1f532ecfa9eb5ed1711b56d0e0ea71fc9/pyarrow-24.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:1cc9057f0319e26333b357e17f3c2c022f1a83739b48a88b25bfd5fa2dc18838", size = 35007997, upload-time = "2026-04-21T10:49:48.796Z" }, + { url = "https://files.pythonhosted.org/packages/1a/ff/f01485fda6f4e5d441afb8dd5e7681e4db18826c1e271852f5d3957d6a80/pyarrow-24.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:e6f1278ee4785b6db21229374a1c9e54ec7c549de5d1efc9630b6207de7e170b", size = 36678720, upload-time = "2026-04-21T10:49:55.858Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c2/2d2d5fea814237923f71b36495211f20b43a1576f9a4d6da7e751a64ec6f/pyarrow-24.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:adbbedc55506cbdabb830890444fb856bfb0060c46c6f8026c6c2f2cf86ae795", size = 45741852, upload-time = "2026-04-21T10:50:04.624Z" }, + { url = "https://files.pythonhosted.org/packages/8e/3a/28ba9c1c1ebdbb5f1b94dfebb46f207e52e6a554b7fe4132540fde29a3a0/pyarrow-24.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:ae8a1145af31d903fa9bb166824d7abe9b4681a000b0159c9fb99c11bc11ad26", size = 48889852, upload-time = "2026-04-21T10:50:12.293Z" }, + { url = "https://files.pythonhosted.org/packages/df/51/4a389acfd31dca009f8fb82d7f510bb4130f2b3a8e18cf00194d0687d8ac/pyarrow-24.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d7027eba1df3b2069e2e8d80f644fa0918b68c46432af3d088ddd390d063ecde", size = 49445207, upload-time = "2026-04-21T10:50:20.677Z" }, + { url = "https://files.pythonhosted.org/packages/19/4b/0bab2b23d2ae901b1b9a03c0efd4b2d070256f8ce3fc43f6e58c167b2081/pyarrow-24.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e56a1ffe9bf7b727432b89104cc0849c21582949dd7bdcb34f17b2001a351a76", size = 51954117, upload-time = "2026-04-21T10:50:29.14Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/f4e9145da0417b3d2c12035a8492b35ff4a3dbc653e614fcfb51d9dedb38/pyarrow-24.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:38be1808cdd068605b787e6ca9119b27eb275a0234e50212c3492331680c3b1e", size = 28001155, upload-time = "2026-04-21T10:51:22.337Z" }, + { url = "https://files.pythonhosted.org/packages/79/4f/46a49a63f43526da895b1a45bbb51d5baf8e4d77159f8528fc3e5490007f/pyarrow-24.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:418e48ce50a45a6a6c73c454677203a9c75c966cb1e92ca3370959185f197a05", size = 35250387, upload-time = "2026-04-21T10:50:35.552Z" }, + { url = "https://files.pythonhosted.org/packages/a0/da/d5e0cd5ef00796922404806d5f00325cdadc3441ce2c13fe7115f2df9a64/pyarrow-24.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:2f16197705a230a78270cdd4ea8a1d57e86b2fdcbc34a1f6aebc72e65c986f9a", size = 36797102, upload-time = "2026-04-21T10:50:42.417Z" }, + { url = "https://files.pythonhosted.org/packages/34/c7/5904145b0a593a05236c882933d439b5720f0a145381179063722fbfc123/pyarrow-24.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:fb24ac194bfc5e86839d7dcd52092ee31e5fe6733fe11f5e3b06ef0812b20072", size = 45745118, upload-time = "2026-04-21T10:50:49.324Z" }, + { url = "https://files.pythonhosted.org/packages/13/d3/cca42fe166d1c6e4d5b80e530b7949104d10e17508a90ae202dac205ce2a/pyarrow-24.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9700ebd9a51f5895ce75ff4ac4b3c47a7d4b42bc618be8e713e5d56bacf5f931", size = 48844765, upload-time = "2026-04-21T10:50:55.579Z" }, + { url = "https://files.pythonhosted.org/packages/b0/49/942c3b79878ba928324d1e17c274ed84581db8c0a749b24bcf4cbdf15bd3/pyarrow-24.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d8ddd2768da81d3ee08cfea9b597f4abb4e8e1dc8ae7e204b608d23a0d3ab699", size = 49471890, upload-time = "2026-04-21T10:51:02.439Z" }, + { url = "https://files.pythonhosted.org/packages/76/97/ff71431000a75d84135a1ace5ca4ba11726a231a8007bbb320a4c54075d5/pyarrow-24.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:61a3d7eaa97a14768b542f3d284dc6400dd2470d9f080708b13cd46b6ae18136", size = 51932250, upload-time = "2026-04-21T10:51:10.576Z" }, + { url = "https://files.pythonhosted.org/packages/51/be/6f79d55816d5c22557cf27533543d5d70dfe692adfbee4b99f2760674f38/pyarrow-24.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:c91d00057f23b8d353039520dc3a6c09d8608164c692e9f59a175a42b2ae0c19", size = 28131282, upload-time = "2026-04-21T10:51:16.815Z" }, +] + +[[package]] +name = "pyasn1" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" }, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, +] + +[[package]] +name = "pybase64" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/63/21e981e9d3f1f123e0b0ee2130112b1956cad9752309f574862c7ae77c08/pybase64-1.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:70b0d4a4d54e216ce42c2655315378b8903933ecfa32fced453989a92b4317b2", size = 38237, upload-time = "2025-12-06T13:22:52.159Z" }, + { url = "https://files.pythonhosted.org/packages/92/fb/3f448e139516404d2a3963915cc10dc9dde7d3a67de4edba2f827adfef17/pybase64-1.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8127f110cdee7a70e576c5c9c1d4e17e92e76c191869085efbc50419f4ae3c72", size = 31673, upload-time = "2025-12-06T13:22:53.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/bb06a5b9885e7d853ac1e801c4d8abfdb4c8506deee33e53d55aa6690e67/pybase64-1.4.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f9ef0388878bc15a084bd9bf73ec1b2b4ee513d11009b1506375e10a7aae5032", size = 68331, upload-time = "2025-12-06T13:22:54.197Z" }, + { url = "https://files.pythonhosted.org/packages/64/15/8d60b9ec5e658185fc2ee3333e01a6e30d717cf677b24f47cbb3a859d13c/pybase64-1.4.3-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95a57cccf106352a72ed8bc8198f6820b16cc7d55aa3867a16dea7011ae7c218", size = 71370, upload-time = "2025-12-06T13:22:55.517Z" }, + { url = "https://files.pythonhosted.org/packages/ac/29/a3e5c1667cc8c38d025a4636855de0fc117fc62e2afeb033a3c6f12c6a22/pybase64-1.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cd1c47dfceb9c7bd3de210fb4e65904053ed2d7c9dce6d107f041ff6fbd7e21", size = 59834, upload-time = "2025-12-06T13:22:56.682Z" }, + { url = "https://files.pythonhosted.org/packages/a9/00/8ffcf9810bd23f3984698be161cf7edba656fd639b818039a7be1d6405d4/pybase64-1.4.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9fe9922698f3e2f72874b26890d53a051c431d942701bb3a37aae94da0b12107", size = 56652, upload-time = "2025-12-06T13:22:57.724Z" }, + { url = "https://files.pythonhosted.org/packages/81/62/379e347797cdea4ab686375945bc77ad8d039c688c0d4d0cfb09d247beb9/pybase64-1.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:af5f4bd29c86b59bb4375e0491d16ec8a67548fa99c54763aaedaf0b4b5a6632", size = 59382, upload-time = "2025-12-06T13:22:58.758Z" }, + { url = "https://files.pythonhosted.org/packages/c6/f2/9338ffe2f487086f26a2c8ca175acb3baa86fce0a756ff5670a0822bb877/pybase64-1.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c302f6ca7465262908131411226e02100f488f531bb5e64cb901aa3f439bccd9", size = 59990, upload-time = "2025-12-06T13:23:01.007Z" }, + { url = "https://files.pythonhosted.org/packages/f9/a4/85a6142b65b4df8625b337727aa81dc199642de3d09677804141df6ee312/pybase64-1.4.3-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:2f3f439fa4d7fde164ebbbb41968db7d66b064450ab6017c6c95cef0afa2b349", size = 54923, upload-time = "2025-12-06T13:23:02.369Z" }, + { url = "https://files.pythonhosted.org/packages/ac/00/e40215d25624012bf5b7416ca37f168cb75f6dd15acdb91ea1f2ea4dc4e7/pybase64-1.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a23c6866551043f8b681a5e1e0d59469148b2920a3b4fc42b1275f25ea4217a", size = 58664, upload-time = "2025-12-06T13:23:03.378Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/d7e19a63e795c13837f2356268d95dc79d1180e756f57ced742a1e52fdeb/pybase64-1.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:56e6526f8565642abc5f84338cc131ce298a8ccab696b19bdf76fa6d7dc592ef", size = 52338, upload-time = "2025-12-06T13:23:04.458Z" }, + { url = "https://files.pythonhosted.org/packages/f2/32/3c746d7a310b69bdd9df77ffc85c41b80bce00a774717596f869b0d4a20e/pybase64-1.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6a792a8b9d866ffa413c9687d9b611553203753987a3a582d68cbc51cf23da45", size = 68993, upload-time = "2025-12-06T13:23:05.526Z" }, + { url = "https://files.pythonhosted.org/packages/5d/b3/63cec68f9d6f6e4c0b438d14e5f1ef536a5fe63ce14b70733ac5e31d7ab8/pybase64-1.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:62ad29a5026bb22cfcd1ca484ec34b0a5ced56ddba38ceecd9359b2818c9c4f9", size = 58055, upload-time = "2025-12-06T13:23:06.931Z" }, + { url = "https://files.pythonhosted.org/packages/d5/cb/7acf7c3c06f9692093c07f109668725dc37fb9a3df0fa912b50add645195/pybase64-1.4.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:11b9d1d2d32ec358c02214363b8fc3651f6be7dd84d880ecd597a6206a80e121", size = 54430, upload-time = "2025-12-06T13:23:07.936Z" }, + { url = "https://files.pythonhosted.org/packages/33/39/4eb33ff35d173bfff4002e184ce8907f5d0a42d958d61cd9058ef3570179/pybase64-1.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0aebaa7f238caa0a0d373616016e2040c6c879ebce3ba7ab3c59029920f13640", size = 56272, upload-time = "2025-12-06T13:23:09.253Z" }, + { url = "https://files.pythonhosted.org/packages/19/97/a76d65c375a254e65b730c6f56bf528feca91305da32eceab8bcc08591e6/pybase64-1.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e504682b20c63c2b0c000e5f98a80ea867f8d97642e042a5a39818e44ba4d599", size = 70904, upload-time = "2025-12-06T13:23:10.336Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2c/8338b6d3da3c265002839e92af0a80d6db88385c313c73f103dfb800c857/pybase64-1.4.3-cp311-cp311-win32.whl", hash = "sha256:e9a8b81984e3c6fb1db9e1614341b0a2d98c0033d693d90c726677db1ffa3a4c", size = 33639, upload-time = "2025-12-06T13:23:11.9Z" }, + { url = "https://files.pythonhosted.org/packages/39/dc/32efdf2f5927e5449cc341c266a1bbc5fecd5319a8807d9c5405f76e6d02/pybase64-1.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:a90a8fa16a901fabf20de824d7acce07586e6127dc2333f1de05f73b1f848319", size = 35797, upload-time = "2025-12-06T13:23:13.174Z" }, + { url = "https://files.pythonhosted.org/packages/da/59/eda4f9cb0cbce5a45f0cd06131e710674f8123a4d570772c5b9694f88559/pybase64-1.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:61d87de5bc94d143622e94390ec3e11b9c1d4644fe9be3a81068ab0f91056f59", size = 31160, upload-time = "2025-12-06T13:23:15.696Z" }, + { url = "https://files.pythonhosted.org/packages/86/a7/efcaa564f091a2af7f18a83c1c4875b1437db56ba39540451dc85d56f653/pybase64-1.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:18d85e5ab8b986bb32d8446aca6258ed80d1bafe3603c437690b352c648f5967", size = 38167, upload-time = "2025-12-06T13:23:16.821Z" }, + { url = "https://files.pythonhosted.org/packages/db/c7/c7ad35adff2d272bf2930132db2b3eea8c44bb1b1f64eb9b2b8e57cde7b4/pybase64-1.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3f5791a3491d116d0deaf4d83268f48792998519698f8751efb191eac84320e9", size = 31673, upload-time = "2025-12-06T13:23:17.835Z" }, + { url = "https://files.pythonhosted.org/packages/43/1b/9a8cab0042b464e9a876d5c65fe5127445a2436da36fda64899b119b1a1b/pybase64-1.4.3-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f0b3f200c3e06316f6bebabd458b4e4bcd4c2ca26af7c0c766614d91968dee27", size = 68210, upload-time = "2025-12-06T13:23:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/62/f7/965b79ff391ad208b50e412b5d3205ccce372a2d27b7218ae86d5295b105/pybase64-1.4.3-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb632edfd132b3eaf90c39c89aa314beec4e946e210099b57d40311f704e11d4", size = 71599, upload-time = "2025-12-06T13:23:20.195Z" }, + { url = "https://files.pythonhosted.org/packages/03/4b/a3b5175130b3810bbb8ccfa1edaadbd3afddb9992d877c8a1e2f274b476e/pybase64-1.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:356ef1d74648ce997f5a777cf8f1aefecc1c0b4fe6201e0ef3ec8a08170e1b54", size = 59922, upload-time = "2025-12-06T13:23:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/da/5d/c38d1572027fc601b62d7a407721688b04b4d065d60ca489912d6893e6cf/pybase64-1.4.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:c48361f90db32bacaa5518419d4eb9066ba558013aaf0c7781620279ecddaeb9", size = 56712, upload-time = "2025-12-06T13:23:22.77Z" }, + { url = "https://files.pythonhosted.org/packages/e7/d4/4e04472fef485caa8f561d904d4d69210a8f8fc1608ea15ebd9012b92655/pybase64-1.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:702bcaa16ae02139d881aeaef5b1c8ffb4a3fae062fe601d1e3835e10310a517", size = 59300, upload-time = "2025-12-06T13:23:24.543Z" }, + { url = "https://files.pythonhosted.org/packages/86/e7/16e29721b86734b881d09b7e23dfd7c8408ad01a4f4c7525f3b1088e25ec/pybase64-1.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:53d0ffe1847b16b647c6413d34d1de08942b7724273dd57e67dcbdb10c574045", size = 60278, upload-time = "2025-12-06T13:23:25.608Z" }, + { url = "https://files.pythonhosted.org/packages/b1/02/18515f211d7c046be32070709a8efeeef8a0203de4fd7521e6b56404731b/pybase64-1.4.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:9a1792e8b830a92736dae58f0c386062eb038dfe8004fb03ba33b6083d89cd43", size = 54817, upload-time = "2025-12-06T13:23:26.633Z" }, + { url = "https://files.pythonhosted.org/packages/e7/be/14e29d8e1a481dbff151324c96dd7b5d2688194bb65dc8a00ca0e1ad1e86/pybase64-1.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d468b1b1ac5ad84875a46eaa458663c3721e8be5f155ade356406848d3701f6", size = 58611, upload-time = "2025-12-06T13:23:27.684Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8a/a2588dfe24e1bbd742a554553778ab0d65fdf3d1c9a06d10b77047d142aa/pybase64-1.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e97b7bdbd62e71898cd542a6a9e320d9da754ff3ebd02cb802d69087ee94d468", size = 52404, upload-time = "2025-12-06T13:23:28.714Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/afcda7445bebe0cbc38cafdd7813234cdd4fc5573ff067f1abf317bb0cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b33aeaa780caaa08ffda87fc584d5eab61e3d3bbb5d86ead02161dc0c20d04bc", size = 68817, upload-time = "2025-12-06T13:23:30.079Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3a/87c3201e555ed71f73e961a787241a2438c2bbb2ca8809c29ddf938a3157/pybase64-1.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c0efcf78f11cf866bed49caa7b97552bc4855a892f9cc2372abcd3ed0056f0d", size = 57854, upload-time = "2025-12-06T13:23:31.17Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7d/931c2539b31a7b375e7d595b88401eeb5bd6c5ce1059c9123f9b608aaa14/pybase64-1.4.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:66e3791f2ed725a46593f8bd2761ff37d01e2cdad065b1dceb89066f476e50c6", size = 54333, upload-time = "2025-12-06T13:23:32.422Z" }, + { url = "https://files.pythonhosted.org/packages/de/5e/537601e02cc01f27e9d75f440f1a6095b8df44fc28b1eef2cd739aea8cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:72bb0b6bddadab26e1b069bb78e83092711a111a80a0d6b9edcb08199ad7299b", size = 56492, upload-time = "2025-12-06T13:23:33.515Z" }, + { url = "https://files.pythonhosted.org/packages/96/97/2a2e57acf8f5c9258d22aba52e71f8050e167b29ed2ee1113677c1b600c1/pybase64-1.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5b3365dbcbcdb0a294f0f50af0c0a16b27a232eddeeb0bceeefd844ef30d2a23", size = 70974, upload-time = "2025-12-06T13:23:36.27Z" }, + { url = "https://files.pythonhosted.org/packages/75/2e/a9e28941c6dab6f06e6d3f6783d3373044be9b0f9a9d3492c3d8d2260ac0/pybase64-1.4.3-cp312-cp312-win32.whl", hash = "sha256:7bca1ed3a5df53305c629ca94276966272eda33c0d71f862d2d3d043f1e1b91a", size = 33686, upload-time = "2025-12-06T13:23:37.848Z" }, + { url = "https://files.pythonhosted.org/packages/83/e3/507ab649d8c3512c258819c51d25c45d6e29d9ca33992593059e7b646a33/pybase64-1.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:9f2da8f56d9b891b18b4daf463a0640eae45a80af548ce435be86aa6eff3603b", size = 35833, upload-time = "2025-12-06T13:23:38.877Z" }, + { url = "https://files.pythonhosted.org/packages/bc/8a/6eba66cd549a2fc74bb4425fd61b839ba0ab3022d3c401b8a8dc2cc00c7a/pybase64-1.4.3-cp312-cp312-win_arm64.whl", hash = "sha256:0631d8a2d035de03aa9bded029b9513e1fee8ed80b7ddef6b8e9389ffc445da0", size = 31185, upload-time = "2025-12-06T13:23:39.908Z" }, + { url = "https://files.pythonhosted.org/packages/3a/50/b7170cb2c631944388fe2519507fe3835a4054a6a12a43f43781dae82be1/pybase64-1.4.3-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:ea4b785b0607d11950b66ce7c328f452614aefc9c6d3c9c28bae795dc7f072e1", size = 33901, upload-time = "2025-12-06T13:23:40.951Z" }, + { url = "https://files.pythonhosted.org/packages/48/8b/69f50578e49c25e0a26e3ee72c39884ff56363344b79fc3967f5af420ed6/pybase64-1.4.3-cp313-cp313-android_21_x86_64.whl", hash = "sha256:6a10b6330188c3026a8b9c10e6b9b3f2e445779cf16a4c453d51a072241c65a2", size = 40807, upload-time = "2025-12-06T13:23:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8d/20b68f11adfc4c22230e034b65c71392e3e338b413bf713c8945bd2ccfb3/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:27fdff227a0c0e182e0ba37a99109645188978b920dfb20d8b9c17eeee370d0d", size = 30932, upload-time = "2025-12-06T13:23:43.348Z" }, + { url = "https://files.pythonhosted.org/packages/f7/79/b1b550ac6bff51a4880bf6e089008b2e1ca16f2c98db5e039a08ac3ad157/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2a8204f1fdfec5aa4184249b51296c0de95445869920c88123978304aad42df1", size = 31394, upload-time = "2025-12-06T13:23:44.317Z" }, + { url = "https://files.pythonhosted.org/packages/82/70/b5d7c5932bf64ee1ec5da859fbac981930b6a55d432a603986c7f509c838/pybase64-1.4.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:874fc2a3777de6baf6aa921a7aa73b3be98295794bea31bd80568a963be30767", size = 38078, upload-time = "2025-12-06T13:23:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/56/fe/e66fe373bce717c6858427670736d54297938dad61c5907517ab4106bd90/pybase64-1.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2dc64a94a9d936b8e3449c66afabbaa521d3cc1a563d6bbaaa6ffa4535222e4b", size = 38158, upload-time = "2025-12-06T13:23:46.872Z" }, + { url = "https://files.pythonhosted.org/packages/80/a9/b806ed1dcc7aed2ea3dd4952286319e6f3a8b48615c8118f453948e01999/pybase64-1.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e48f86de1c145116ccf369a6e11720ce696c2ec02d285f440dfb57ceaa0a6cb4", size = 31672, upload-time = "2025-12-06T13:23:47.88Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c9/24b3b905cf75e23a9a4deaf203b35ffcb9f473ac0e6d8257f91a05dfce62/pybase64-1.4.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:1d45c8fe8fe82b65c36b227bb4a2cf623d9ada16bed602ce2d3e18c35285b72a", size = 68244, upload-time = "2025-12-06T13:23:49.026Z" }, + { url = "https://files.pythonhosted.org/packages/f8/cd/d15b0c3e25e5859fab0416dc5b96d34d6bd2603c1c96a07bb2202b68ab92/pybase64-1.4.3-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ad70c26ba091d8f5167e9d4e1e86a0483a5414805cdb598a813db635bd3be8b8", size = 71620, upload-time = "2025-12-06T13:23:50.081Z" }, + { url = "https://files.pythonhosted.org/packages/0d/31/4ca953cc3dcde2b3711d6bfd70a6f4ad2ca95a483c9698076ba605f1520f/pybase64-1.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e98310b7c43145221e7194ac9fa7fffc84763c87bfc5e2f59f9f92363475bdc1", size = 59930, upload-time = "2025-12-06T13:23:51.68Z" }, + { url = "https://files.pythonhosted.org/packages/60/55/e7f7bdcd0fd66e61dda08db158ffda5c89a306bbdaaf5a062fbe4e48f4a1/pybase64-1.4.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:398685a76034e91485a28aeebcb49e64cd663212fd697b2497ac6dfc1df5e671", size = 56425, upload-time = "2025-12-06T13:23:52.732Z" }, + { url = "https://files.pythonhosted.org/packages/cb/65/b592c7f921e51ca1aca3af5b0d201a98666d0a36b930ebb67e7c2ed27395/pybase64-1.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7e46400a6461187ccb52ed75b0045d937529e801a53a9cd770b350509f9e4d50", size = 59327, upload-time = "2025-12-06T13:23:53.856Z" }, + { url = "https://files.pythonhosted.org/packages/23/95/1613d2fb82dbb1548595ad4179f04e9a8451bfa18635efce18b631eabe3f/pybase64-1.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1b62b9f2f291d94f5e0b76ab499790b7dcc78a009d4ceea0b0428770267484b6", size = 60294, upload-time = "2025-12-06T13:23:54.937Z" }, + { url = "https://files.pythonhosted.org/packages/9d/73/40431f37f7d1b3eab4673e7946ff1e8f5d6bd425ec257e834dae8a6fc7b0/pybase64-1.4.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:f30ceb5fa4327809dede614be586efcbc55404406d71e1f902a6fdcf322b93b2", size = 54858, upload-time = "2025-12-06T13:23:56.031Z" }, + { url = "https://files.pythonhosted.org/packages/a7/84/f6368bcaf9f743732e002a9858646fd7a54f428490d427dd6847c5cfe89e/pybase64-1.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0d5f18ed53dfa1d4cf8b39ee542fdda8e66d365940e11f1710989b3cf4a2ed66", size = 58629, upload-time = "2025-12-06T13:23:57.12Z" }, + { url = "https://files.pythonhosted.org/packages/43/75/359532f9adb49c6b546cafc65c46ed75e2ccc220d514ba81c686fbd83965/pybase64-1.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:119d31aa4b58b85a8ebd12b63c07681a138c08dfc2fe5383459d42238665d3eb", size = 52448, upload-time = "2025-12-06T13:23:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/92/6c/ade2ba244c3f33ed920a7ed572ad772eb0b5f14480b72d629d0c9e739a40/pybase64-1.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3cf0218b0e2f7988cf7d738a73b6a1d14f3be6ce249d7c0f606e768366df2cce", size = 68841, upload-time = "2025-12-06T13:23:59.886Z" }, + { url = "https://files.pythonhosted.org/packages/a0/51/b345139cd236be382f2d4d4453c21ee6299e14d2f759b668e23080f8663f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:12f4ee5e988bc5c0c1106b0d8fc37fb0508f12dab76bac1b098cb500d148da9d", size = 57910, upload-time = "2025-12-06T13:24:00.994Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b8/9f84bdc4f1c4f0052489396403c04be2f9266a66b70c776001eaf0d78c1f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:937826bc7b6b95b594a45180e81dd4d99bd4dd4814a443170e399163f7ff3fb6", size = 54335, upload-time = "2025-12-06T13:24:02.046Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c7/be63b617d284de46578a366da77ede39c8f8e815ed0d82c7c2acca560fab/pybase64-1.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:88995d1460971ef80b13e3e007afbe4b27c62db0508bc7250a2ab0a0b4b91362", size = 56486, upload-time = "2025-12-06T13:24:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/5e/96/f252c8f9abd6ded3ef1ccd3cdbb8393a33798007f761b23df8de1a2480e6/pybase64-1.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:72326fe163385ed3e1e806dd579d47fde5d8a59e51297a60fc4e6cbc1b4fc4ed", size = 70978, upload-time = "2025-12-06T13:24:04.221Z" }, + { url = "https://files.pythonhosted.org/packages/af/51/0f5714af7aeef96e30f968e4371d75ad60558aaed3579d7c6c8f1c43c18a/pybase64-1.4.3-cp313-cp313-win32.whl", hash = "sha256:b1623730c7892cf5ed0d6355e375416be6ef8d53ab9b284f50890443175c0ac3", size = 33684, upload-time = "2025-12-06T13:24:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ad/0cea830a654eb08563fb8214150ef57546ece1cc421c09035f0e6b0b5ea9/pybase64-1.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:8369887590f1646a5182ca2fb29252509da7ae31d4923dbb55d3e09da8cc4749", size = 35832, upload-time = "2025-12-06T13:24:06.35Z" }, + { url = "https://files.pythonhosted.org/packages/b4/0d/eec2a8214989c751bc7b4cad1860eb2c6abf466e76b77508c0f488c96a37/pybase64-1.4.3-cp313-cp313-win_arm64.whl", hash = "sha256:860b86bca71e5f0237e2ab8b2d9c4c56681f3513b1bf3e2117290c1963488390", size = 31175, upload-time = "2025-12-06T13:24:07.419Z" }, + { url = "https://files.pythonhosted.org/packages/db/c9/e23463c1a2913686803ef76b1a5ae7e6fac868249a66e48253d17ad7232c/pybase64-1.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:eb51db4a9c93215135dccd1895dca078e8785c357fabd983c9f9a769f08989a9", size = 38497, upload-time = "2025-12-06T13:24:08.873Z" }, + { url = "https://files.pythonhosted.org/packages/71/83/343f446b4b7a7579bf6937d2d013d82f1a63057cf05558e391ab6039d7db/pybase64-1.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a03ef3f529d85fd46b89971dfb00c634d53598d20ad8908fb7482955c710329d", size = 32076, upload-time = "2025-12-06T13:24:09.975Z" }, + { url = "https://files.pythonhosted.org/packages/46/fc/cb64964c3b29b432f54d1bce5e7691d693e33bbf780555151969ffd95178/pybase64-1.4.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:2e745f2ce760c6cf04d8a72198ef892015ddb89f6ceba489e383518ecbdb13ab", size = 72317, upload-time = "2025-12-06T13:24:11.129Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b7/fab2240da6f4e1ad46f71fa56ec577613cf5df9dce2d5b4cfaa4edd0e365/pybase64-1.4.3-cp313-cp313t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fac217cd9de8581a854b0ac734c50fd1fa4b8d912396c1fc2fce7c230efe3a7", size = 75534, upload-time = "2025-12-06T13:24:12.433Z" }, + { url = "https://files.pythonhosted.org/packages/91/3b/3e2f2b6e68e3d83ddb9fa799f3548fb7449765daec9bbd005a9fbe296d7f/pybase64-1.4.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:da1ee8fa04b283873de2d6e8fa5653e827f55b86bdf1a929c5367aaeb8d26f8a", size = 65399, upload-time = "2025-12-06T13:24:13.928Z" }, + { url = "https://files.pythonhosted.org/packages/6b/08/476ac5914c3b32e0274a2524fc74f01cbf4f4af4513d054e41574eb018f6/pybase64-1.4.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:b0bf8e884ee822ca7b1448eeb97fa131628fe0ff42f60cae9962789bd562727f", size = 60487, upload-time = "2025-12-06T13:24:15.177Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/618a92915330cc9cba7880299b546a1d9dab1a21fd6c0292ee44a4fe608c/pybase64-1.4.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1bf749300382a6fd1f4f255b183146ef58f8e9cb2f44a077b3a9200dfb473a77", size = 63959, upload-time = "2025-12-06T13:24:16.854Z" }, + { url = "https://files.pythonhosted.org/packages/a5/52/af9d8d051652c3051862c442ec3861259c5cdb3fc69774bc701470bd2a59/pybase64-1.4.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:153a0e42329b92337664cfc356f2065248e6c9a1bd651bbcd6dcaf15145d3f06", size = 64874, upload-time = "2025-12-06T13:24:18.328Z" }, + { url = "https://files.pythonhosted.org/packages/e4/51/5381a7adf1f381bd184d33203692d3c57cf8ae9f250f380c3fecbdbe554b/pybase64-1.4.3-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:86ee56ac7f2184ca10217ed1c655c1a060273e233e692e9086da29d1ae1768db", size = 58572, upload-time = "2025-12-06T13:24:19.417Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f0/578ee4ffce5818017de4fdf544e066c225bc435e73eb4793cde28a689d0b/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0e71a4db76726bf830b47477e7d830a75c01b2e9b01842e787a0836b0ba741e3", size = 63636, upload-time = "2025-12-06T13:24:20.497Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ad/8ae94814bf20159ea06310b742433e53d5820aa564c9fdf65bf2d79f8799/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2ba7799ec88540acd9861b10551d24656ca3c2888ecf4dba2ee0a71544a8923f", size = 56193, upload-time = "2025-12-06T13:24:21.559Z" }, + { url = "https://files.pythonhosted.org/packages/d1/31/6438cfcc3d3f0fa84d229fa125c243d5094e72628e525dfefadf3bcc6761/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2860299e4c74315f5951f0cf3e72ba0f201c3356c8a68f95a3ab4e620baf44e9", size = 72655, upload-time = "2025-12-06T13:24:22.673Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0d/2bbc9e9c3fc12ba8a6e261482f03a544aca524f92eae0b4908c0a10ba481/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:bb06015db9151f0c66c10aae8e3603adab6b6cd7d1f7335a858161d92fc29618", size = 62471, upload-time = "2025-12-06T13:24:23.8Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0b/34d491e7f49c1dbdb322ea8da6adecda7c7cd70b6644557c6e4ca5c6f7c7/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:242512a070817272865d37c8909059f43003b81da31f616bb0c391ceadffe067", size = 58119, upload-time = "2025-12-06T13:24:24.994Z" }, + { url = "https://files.pythonhosted.org/packages/ce/17/c21d0cde2a6c766923ae388fc1f78291e1564b0d38c814b5ea8a0e5e081c/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5d8277554a12d3e3eed6180ebda62786bf9fc8d7bb1ee00244258f4a87ca8d20", size = 60791, upload-time = "2025-12-06T13:24:26.046Z" }, + { url = "https://files.pythonhosted.org/packages/92/b2/eaa67038916a48de12b16f4c384bcc1b84b7ec731b23613cb05f27673294/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f40b7ddd698fc1e13a4b64fbe405e4e0e1279e8197e37050e24154655f5f7c4e", size = 74701, upload-time = "2025-12-06T13:24:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/42/10/abb7757c330bb869ebb95dab0c57edf5961ffbd6c095c8209cbbf75d117d/pybase64-1.4.3-cp313-cp313t-win32.whl", hash = "sha256:46d75c9387f354c5172582a9eaae153b53a53afeb9c19fcf764ea7038be3bd8b", size = 33965, upload-time = "2025-12-06T13:24:28.548Z" }, + { url = "https://files.pythonhosted.org/packages/63/a0/2d4e5a59188e9e6aed0903d580541aaea72dcbbab7bf50fb8b83b490b6c3/pybase64-1.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:d7344625591d281bec54e85cbfdab9e970f6219cac1570f2aa140b8c942ccb81", size = 36207, upload-time = "2025-12-06T13:24:29.646Z" }, + { url = "https://files.pythonhosted.org/packages/1f/05/95b902e8f567b4d4b41df768ccc438af618f8d111e54deaf57d2df46bd76/pybase64-1.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:28a3c60c55138e0028313f2eccd321fec3c4a0be75e57a8d3eb883730b1b0880", size = 31505, upload-time = "2025-12-06T13:24:30.687Z" }, + { url = "https://files.pythonhosted.org/packages/e4/80/4bd3dff423e5a91f667ca41982dc0b79495b90ec0c0f5d59aca513e50f8c/pybase64-1.4.3-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:015bb586a1ea1467f69d57427abe587469392215f59db14f1f5c39b52fdafaf5", size = 33835, upload-time = "2025-12-06T13:24:31.767Z" }, + { url = "https://files.pythonhosted.org/packages/45/60/a94d94cc1e3057f602e0b483c9ebdaef40911d84a232647a2fe593ab77bb/pybase64-1.4.3-cp314-cp314-android_24_x86_64.whl", hash = "sha256:d101e3a516f837c3dcc0e5a0b7db09582ebf99ed670865223123fb2e5839c6c0", size = 40673, upload-time = "2025-12-06T13:24:32.82Z" }, + { url = "https://files.pythonhosted.org/packages/e3/71/cf62b261d431857e8e054537a5c3c24caafa331de30daede7b2c6c558501/pybase64-1.4.3-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8f183ac925a48046abe047360fe3a1b28327afb35309892132fe1915d62fb282", size = 30939, upload-time = "2025-12-06T13:24:34.001Z" }, + { url = "https://files.pythonhosted.org/packages/24/3e/d12f92a3c1f7c6ab5d53c155bff9f1084ba997a37a39a4f781ccba9455f3/pybase64-1.4.3-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30bf3558e24dcce4da5248dcf6d73792adfcf4f504246967e9db155be4c439ad", size = 31401, upload-time = "2025-12-06T13:24:35.11Z" }, + { url = "https://files.pythonhosted.org/packages/9b/3d/9c27440031fea0d05146f8b70a460feb95d8b4e3d9ca8f45c972efb4c3d3/pybase64-1.4.3-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:a674b419de318d2ce54387dd62646731efa32b4b590907800f0bd40675c1771d", size = 38075, upload-time = "2025-12-06T13:24:36.53Z" }, + { url = "https://files.pythonhosted.org/packages/4b/d4/6c0e0cf0efd53c254173fbcd84a3d8fcbf5e0f66622473da425becec32a5/pybase64-1.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:720104fd7303d07bac302be0ff8f7f9f126f2f45c1edb4f48fdb0ff267e69fe1", size = 38257, upload-time = "2025-12-06T13:24:38.049Z" }, + { url = "https://files.pythonhosted.org/packages/50/eb/27cb0b610d5cd70f5ad0d66c14ad21c04b8db930f7139818e8fbdc14df4d/pybase64-1.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:83f1067f73fa5afbc3efc0565cecc6ed53260eccddef2ebe43a8ce2b99ea0e0a", size = 31685, upload-time = "2025-12-06T13:24:40.327Z" }, + { url = "https://files.pythonhosted.org/packages/db/26/b136a4b65e5c94ff06217f7726478df3f31ab1c777c2c02cf698e748183f/pybase64-1.4.3-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:b51204d349a4b208287a8aa5b5422be3baa88abf6cc8ff97ccbda34919bbc857", size = 68460, upload-time = "2025-12-06T13:24:41.735Z" }, + { url = "https://files.pythonhosted.org/packages/68/6d/84ce50e7ee1ae79984d689e05a9937b2460d4efa1e5b202b46762fb9036c/pybase64-1.4.3-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:30f2fd53efecbdde4bdca73a872a68dcb0d1bf8a4560c70a3e7746df973e1ef3", size = 71688, upload-time = "2025-12-06T13:24:42.908Z" }, + { url = "https://files.pythonhosted.org/packages/e3/57/6743e420416c3ff1b004041c85eb0ebd9c50e9cf05624664bfa1dc8b5625/pybase64-1.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0932b0c5cfa617091fd74f17d24549ce5de3628791998c94ba57be808078eeaf", size = 60040, upload-time = "2025-12-06T13:24:44.37Z" }, + { url = "https://files.pythonhosted.org/packages/3b/68/733324e28068a89119af2921ce548e1c607cc5c17d354690fc51c302e326/pybase64-1.4.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:acb61f5ab72bec808eb0d4ce8b87ec9f38d7d750cb89b1371c35eb8052a29f11", size = 56478, upload-time = "2025-12-06T13:24:45.815Z" }, + { url = "https://files.pythonhosted.org/packages/b5/9e/f3f4aa8cfe3357a3cdb0535b78eb032b671519d3ecc08c58c4c6b72b5a91/pybase64-1.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:2bc2d5bc15168f5c04c53bdfe5a1e543b2155f456ed1e16d7edce9ce73842021", size = 59463, upload-time = "2025-12-06T13:24:46.938Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d1/53286038e1f0df1cf58abcf4a4a91b0f74ab44539c2547b6c31001ddd054/pybase64-1.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:8a7bc3cd23880bdca59758bcdd6f4ef0674f2393782763910a7466fab35ccb98", size = 60360, upload-time = "2025-12-06T13:24:48.039Z" }, + { url = "https://files.pythonhosted.org/packages/00/9a/5cc6ce95db2383d27ff4d790b8f8b46704d360d701ab77c4f655bcfaa6a7/pybase64-1.4.3-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ad15acf618880d99792d71e3905b0e2508e6e331b76a1b34212fa0f11e01ad28", size = 54999, upload-time = "2025-12-06T13:24:49.547Z" }, + { url = "https://files.pythonhosted.org/packages/64/e7/c3c1d09c3d7ae79e3aa1358c6d912d6b85f29281e47aa94fc0122a415a2f/pybase64-1.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:448158d417139cb4851200e5fee62677ae51f56a865d50cda9e0d61bda91b116", size = 58736, upload-time = "2025-12-06T13:24:50.641Z" }, + { url = "https://files.pythonhosted.org/packages/db/d5/0baa08e3d8119b15b588c39f0d39fd10472f0372e3c54ca44649cbefa256/pybase64-1.4.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9058c49b5a2f3e691b9db21d37eb349e62540f9f5fc4beabf8cbe3c732bead86", size = 52298, upload-time = "2025-12-06T13:24:51.791Z" }, + { url = "https://files.pythonhosted.org/packages/00/87/fc6f11474a1de7e27cd2acbb8d0d7508bda3efa73dfe91c63f968728b2a3/pybase64-1.4.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ce561724f6522907a66303aca27dce252d363fcd85884972d348f4403ba3011a", size = 69049, upload-time = "2025-12-06T13:24:53.253Z" }, + { url = "https://files.pythonhosted.org/packages/69/9d/7fb5566f669ac18b40aa5fc1c438e24df52b843c1bdc5da47d46d4c1c630/pybase64-1.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:63316560a94ac449fe86cb8b9e0a13714c659417e92e26a5cbf085cd0a0c838d", size = 57952, upload-time = "2025-12-06T13:24:54.342Z" }, + { url = "https://files.pythonhosted.org/packages/de/cc/ceb949232dbbd3ec4ee0190d1df4361296beceee9840390a63df8bc31784/pybase64-1.4.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7ecd796f2ac0be7b73e7e4e232b8c16422014de3295d43e71d2b19fd4a4f5368", size = 54484, upload-time = "2025-12-06T13:24:55.774Z" }, + { url = "https://files.pythonhosted.org/packages/a7/69/659f3c8e6a5d7b753b9c42a4bd9c42892a0f10044e9c7351a4148d413a33/pybase64-1.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d01e102a12fb2e1ed3dc11611c2818448626637857ec3994a9cf4809dfd23477", size = 56542, upload-time = "2025-12-06T13:24:57Z" }, + { url = "https://files.pythonhosted.org/packages/85/2c/29c9e6c9c82b72025f9676f9e82eb1fd2339ad038cbcbf8b9e2ac02798fc/pybase64-1.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ebff797a93c2345f22183f454fd8607a34d75eca5a3a4a969c1c75b304cee39d", size = 71045, upload-time = "2025-12-06T13:24:58.179Z" }, + { url = "https://files.pythonhosted.org/packages/b9/84/5a3dce8d7a0040a5c0c14f0fe1311cd8db872913fa04438071b26b0dac04/pybase64-1.4.3-cp314-cp314-win32.whl", hash = "sha256:28b2a1bb0828c0595dc1ea3336305cd97ff85b01c00d81cfce4f92a95fb88f56", size = 34200, upload-time = "2025-12-06T13:24:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/57/bc/ce7427c12384adee115b347b287f8f3cf65860b824d74fe2c43e37e81c1f/pybase64-1.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:33338d3888700ff68c3dedfcd49f99bfc3b887570206130926791e26b316b029", size = 36323, upload-time = "2025-12-06T13:25:01.708Z" }, + { url = "https://files.pythonhosted.org/packages/9a/1b/2b8ffbe9a96eef7e3f6a5a7be75995eebfb6faaedc85b6da6b233e50c778/pybase64-1.4.3-cp314-cp314-win_arm64.whl", hash = "sha256:62725669feb5acb186458da2f9353e88ae28ef66bb9c4c8d1568b12a790dfa94", size = 31584, upload-time = "2025-12-06T13:25:02.801Z" }, + { url = "https://files.pythonhosted.org/packages/ac/d8/6824c2e6fb45b8fa4e7d92e3c6805432d5edc7b855e3e8e1eedaaf6efb7c/pybase64-1.4.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:153fe29be038948d9372c3e77ae7d1cab44e4ba7d9aaf6f064dbeea36e45b092", size = 38601, upload-time = "2025-12-06T13:25:04.222Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e5/10d2b3a4ad3a4850be2704a2f70cd9c0cf55725c8885679872d3bc846c67/pybase64-1.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f7fe3decaa7c4a9e162327ec7bd81ce183d2b16f23c6d53b606649c6e0203e9e", size = 32078, upload-time = "2025-12-06T13:25:05.362Z" }, + { url = "https://files.pythonhosted.org/packages/43/04/8b15c34d3c2282f1c1b0850f1113a249401b618a382646a895170bc9b5e7/pybase64-1.4.3-cp314-cp314t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:a5ae04ea114c86eb1da1f6e18d75f19e3b5ae39cb1d8d3cd87c29751a6a22780", size = 72474, upload-time = "2025-12-06T13:25:06.434Z" }, + { url = "https://files.pythonhosted.org/packages/42/00/f34b4d11278f8fdc68bc38f694a91492aa318f7c6f1bd7396197ac0f8b12/pybase64-1.4.3-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1755b3dce3a2a5c7d17ff6d4115e8bee4a1d5aeae74469db02e47c8f477147da", size = 75706, upload-time = "2025-12-06T13:25:07.636Z" }, + { url = "https://files.pythonhosted.org/packages/bb/5d/71747d4ad7fe16df4c4c852bdbdeb1f2cf35677b48d7c34d3011a7a6ad3a/pybase64-1.4.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fb852f900e27ffc4ec1896817535a0fa19610ef8875a096b59f21d0aa42ff172", size = 65589, upload-time = "2025-12-06T13:25:08.809Z" }, + { url = "https://files.pythonhosted.org/packages/49/b1/d1e82bd58805bb5a3a662864800bab83a83a36ba56e7e3b1706c708002a5/pybase64-1.4.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:9cf21ea8c70c61eddab3421fbfce061fac4f2fb21f7031383005a1efdb13d0b9", size = 60670, upload-time = "2025-12-06T13:25:10.04Z" }, + { url = "https://files.pythonhosted.org/packages/15/67/16c609b7a13d1d9fc87eca12ba2dce5e67f949eeaab61a41bddff843cbb0/pybase64-1.4.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:afff11b331fdc27692fc75e85ae083340a35105cea1a3c4552139e2f0e0d174f", size = 64194, upload-time = "2025-12-06T13:25:11.48Z" }, + { url = "https://files.pythonhosted.org/packages/3c/11/37bc724e42960f0106c2d33dc957dcec8f760c91a908cc6c0df7718bc1a8/pybase64-1.4.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9a5143df542c1ce5c1f423874b948c4d689b3f05ec571f8792286197a39ba02", size = 64984, upload-time = "2025-12-06T13:25:12.645Z" }, + { url = "https://files.pythonhosted.org/packages/6e/66/b2b962a6a480dd5dae3029becf03ea1a650d326e39bf1c44ea3db78bb010/pybase64-1.4.3-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:d62e9861019ad63624b4a7914dff155af1cc5d6d79df3be14edcaedb5fdad6f9", size = 58750, upload-time = "2025-12-06T13:25:13.848Z" }, + { url = "https://files.pythonhosted.org/packages/2b/15/9b6d711035e29b18b2e1c03d47f41396d803d06ef15b6c97f45b75f73f04/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:84cfd4d92668ef5766cc42a9c9474b88960ac2b860767e6e7be255c6fddbd34a", size = 63816, upload-time = "2025-12-06T13:25:15.356Z" }, + { url = "https://files.pythonhosted.org/packages/b4/21/e2901381ed0df62e2308380f30d9c4d87d6b74e33a84faed3478d33a7197/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:60fc025437f9a7c2cc45e0c19ed68ed08ba672be2c5575fd9d98bdd8f01dd61f", size = 56348, upload-time = "2025-12-06T13:25:16.559Z" }, + { url = "https://files.pythonhosted.org/packages/c4/16/3d788388a178a0407aa814b976fe61bfa4af6760d9aac566e59da6e4a8b4/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:edc8446196f04b71d3af76c0bd1fe0a45066ac5bffecca88adb9626ee28c266f", size = 72842, upload-time = "2025-12-06T13:25:18.055Z" }, + { url = "https://files.pythonhosted.org/packages/a6/63/c15b1f8bd47ea48a5a2d52a4ec61f037062932ea6434ab916107b58e861e/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e99f6fa6509c037794da57f906ade271f52276c956d00f748e5b118462021d48", size = 62651, upload-time = "2025-12-06T13:25:19.191Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b8/f544a2e37c778d59208966d4ef19742a0be37c12fc8149ff34483c176616/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d94020ef09f624d841aa9a3a6029df8cf65d60d7a6d5c8687579fa68bd679b65", size = 58295, upload-time = "2025-12-06T13:25:20.822Z" }, + { url = "https://files.pythonhosted.org/packages/03/99/1fae8a3b7ac181e36f6e7864a62d42d5b1f4fa7edf408c6711e28fba6b4d/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:f64ce70d89942a23602dee910dec9b48e5edf94351e1b378186b74fcc00d7f66", size = 60960, upload-time = "2025-12-06T13:25:22.099Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9e/cd4c727742345ad8384569a4466f1a1428f4e5cc94d9c2ab2f53d30be3fe/pybase64-1.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8ea99f56e45c469818b9781903be86ba4153769f007ba0655fa3b46dc332803d", size = 74863, upload-time = "2025-12-06T13:25:23.442Z" }, + { url = "https://files.pythonhosted.org/packages/28/86/a236ecfc5b494e1e922da149689f690abc84248c7c1358f5605b8c9fdd60/pybase64-1.4.3-cp314-cp314t-win32.whl", hash = "sha256:343b1901103cc72362fd1f842524e3bb24978e31aea7ff11e033af7f373f66ab", size = 34513, upload-time = "2025-12-06T13:25:24.592Z" }, + { url = "https://files.pythonhosted.org/packages/56/ce/ca8675f8d1352e245eb012bfc75429ee9cf1f21c3256b98d9a329d44bf0f/pybase64-1.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:57aff6f7f9dea6705afac9d706432049642de5b01080d3718acc23af87c5af76", size = 36702, upload-time = "2025-12-06T13:25:25.72Z" }, + { url = "https://files.pythonhosted.org/packages/3b/30/4a675864877397179b09b720ee5fcb1cf772cf7bebc831989aff0a5f79c1/pybase64-1.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:e906aa08d4331e799400829e0f5e4177e76a3281e8a4bc82ba114c6b30e405c9", size = 31904, upload-time = "2025-12-06T13:25:26.826Z" }, + { url = "https://files.pythonhosted.org/packages/b2/7c/545fd4935a0e1ddd7147f557bf8157c73eecec9cffd523382fa7af2557de/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_10_9_x86_64.whl", hash = "sha256:d27c1dfdb0c59a5e758e7a98bd78eaca5983c22f4a811a36f4f980d245df4611", size = 38393, upload-time = "2025-12-06T13:26:19.535Z" }, + { url = "https://files.pythonhosted.org/packages/c3/ca/ae7a96be9ddc96030d4e9dffc43635d4e136b12058b387fd47eb8301b60f/pybase64-1.4.3-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0f1a0c51d6f159511e3431b73c25db31095ee36c394e26a4349e067c62f434e5", size = 32109, upload-time = "2025-12-06T13:26:20.72Z" }, + { url = "https://files.pythonhosted.org/packages/bf/44/d4b7adc7bf4fd5b52d8d099121760c450a52c390223806b873f0b6a2d551/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a492518f3078a4e3faaef310697d21df9c6bc71908cebc8c2f6fbfa16d7d6b1f", size = 43227, upload-time = "2025-12-06T13:26:21.845Z" }, + { url = "https://files.pythonhosted.org/packages/08/86/2ba2d8734ef7939debeb52cf9952e457ba7aa226cae5c0e6dd631f9b851f/pybase64-1.4.3-graalpy311-graalpy242_311_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae1a0f47784fd16df90d8acc32011c8d5fcdd9ab392c9ec49543e5f6a9c43a4", size = 35804, upload-time = "2025-12-06T13:26:23.149Z" }, + { url = "https://files.pythonhosted.org/packages/4f/5b/19c725dc3aaa6281f2ce3ea4c1628d154a40dd99657d1381995f8096768b/pybase64-1.4.3-graalpy311-graalpy242_311_native-win_amd64.whl", hash = "sha256:03cea70676ffbd39a1ab7930a2d24c625b416cacc9d401599b1d29415a43ab6a", size = 35880, upload-time = "2025-12-06T13:26:24.663Z" }, + { url = "https://files.pythonhosted.org/packages/17/45/92322aec1b6979e789b5710f73c59f2172bc37c8ce835305434796824b7b/pybase64-1.4.3-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:2baaa092f3475f3a9c87ac5198023918ea8b6c125f4c930752ab2cbe3cd1d520", size = 38746, upload-time = "2025-12-06T13:26:25.869Z" }, + { url = "https://files.pythonhosted.org/packages/11/94/f1a07402870388fdfc2ecec0c718111189732f7d0f2d7fe1386e19e8fad0/pybase64-1.4.3-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:cde13c0764b1af07a631729f26df019070dad759981d6975527b7e8ecb465b6c", size = 32573, upload-time = "2025-12-06T13:26:27.792Z" }, + { url = "https://files.pythonhosted.org/packages/fa/8f/43c3bb11ca9bacf81cb0b7a71500bb65b2eda6d5fe07433c09b543de97f3/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5c29a582b0ea3936d02bd6fe9bf674ab6059e6e45ab71c78404ab2c913224414", size = 43461, upload-time = "2025-12-06T13:26:28.906Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4c/2a5258329200be57497d3972b5308558c6de42e3749c6cc2aa1cbe34b25a/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6b664758c804fa919b4f1257aa8cf68e95db76fc331de5f70bfc3a34655afe1", size = 36058, upload-time = "2025-12-06T13:26:30.092Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6d/41faa414cde66ec023b0ca8402a8f11cb61731c3dc27c082909cbbd1f929/pybase64-1.4.3-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:f7537fa22ae56a0bf51e4b0ffc075926ad91c618e1416330939f7ef366b58e3b", size = 36231, upload-time = "2025-12-06T13:26:31.656Z" }, + { url = "https://files.pythonhosted.org/packages/b2/76/160dded493c00d3376d4ad0f38a2119c5345de4a6693419ad39c3565959b/pybase64-1.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:277de6e03cc9090fb359365c686a2a3036d23aee6cd20d45d22b8c89d1247f17", size = 37939, upload-time = "2025-12-06T13:26:41.014Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b8/a0f10be8d648d6f8f26e560d6e6955efa7df0ff1e009155717454d76f601/pybase64-1.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ab1dd8b1ed2d1d750260ed58ab40defaa5ba83f76a30e18b9ebd5646f6247ae5", size = 31466, upload-time = "2025-12-06T13:26:42.539Z" }, + { url = "https://files.pythonhosted.org/packages/d3/22/832a2f9e76cdf39b52e01e40d8feeb6a04cf105494f2c3e3126d0149717f/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:bd4d2293de9fd212e294c136cec85892460b17d24e8c18a6ba18750928037750", size = 40681, upload-time = "2025-12-06T13:26:43.782Z" }, + { url = "https://files.pythonhosted.org/packages/12/d7/6610f34a8972415fab3bb4704c174a1cc477bffbc3c36e526428d0f3957d/pybase64-1.4.3-pp311-pypy311_pp73-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af6d0d3a691911cc4c9a625f3ddcd3af720738c21be3d5c72de05629139d393", size = 41294, upload-time = "2025-12-06T13:26:44.936Z" }, + { url = "https://files.pythonhosted.org/packages/64/25/ed24400948a6c974ab1374a233cb7e8af0a5373cea0dd8a944627d17c34a/pybase64-1.4.3-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5cfc8c49a28322d82242088378f8542ce97459866ba73150b062a7073e82629d", size = 35447, upload-time = "2025-12-06T13:26:46.098Z" }, + { url = "https://files.pythonhosted.org/packages/ee/2b/e18ee7c5ee508a82897f021c1981533eca2940b5f072fc6ed0906c03a7a7/pybase64-1.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:debf737e09b8bf832ba86f5ecc3d3dbd0e3021d6cd86ba4abe962d6a5a77adb3", size = 36134, upload-time = "2025-12-06T13:26:47.35Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[package.optional-dependencies] +email = [ + { name = "email-validator" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/72/74a989dd9f2084b3d9530b0915fdda64ac48831c30dbf7c72a41a5232db8/pydantic_core-2.41.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", size = 2105873, upload-time = "2025-11-04T13:39:31.373Z" }, + { url = "https://files.pythonhosted.org/packages/12/44/37e403fd9455708b3b942949e1d7febc02167662bf1a7da5b78ee1ea2842/pydantic_core-2.41.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", size = 1899826, upload-time = "2025-11-04T13:39:32.897Z" }, + { url = "https://files.pythonhosted.org/packages/33/7f/1d5cab3ccf44c1935a359d51a8a2a9e1a654b744b5e7f80d41b88d501eec/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", size = 1917869, upload-time = "2025-11-04T13:39:34.469Z" }, + { url = "https://files.pythonhosted.org/packages/6e/6a/30d94a9674a7fe4f4744052ed6c5e083424510be1e93da5bc47569d11810/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", size = 2063890, upload-time = "2025-11-04T13:39:36.053Z" }, + { url = "https://files.pythonhosted.org/packages/50/be/76e5d46203fcb2750e542f32e6c371ffa9b8ad17364cf94bb0818dbfb50c/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", size = 2229740, upload-time = "2025-11-04T13:39:37.753Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ee/fed784df0144793489f87db310a6bbf8118d7b630ed07aa180d6067e653a/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", size = 2350021, upload-time = "2025-11-04T13:39:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/c8/be/8fed28dd0a180dca19e72c233cbf58efa36df055e5b9d90d64fd1740b828/pydantic_core-2.41.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", size = 2066378, upload-time = "2025-11-04T13:39:42.523Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/698cf8ae1d536a010e05121b4958b1257f0b5522085e335360e53a6b1c8b/pydantic_core-2.41.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", size = 2175761, upload-time = "2025-11-04T13:39:44.553Z" }, + { url = "https://files.pythonhosted.org/packages/b8/ba/15d537423939553116dea94ce02f9c31be0fa9d0b806d427e0308ec17145/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", size = 2146303, upload-time = "2025-11-04T13:39:46.238Z" }, + { url = "https://files.pythonhosted.org/packages/58/7f/0de669bf37d206723795f9c90c82966726a2ab06c336deba4735b55af431/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", size = 2340355, upload-time = "2025-11-04T13:39:48.002Z" }, + { url = "https://files.pythonhosted.org/packages/e5/de/e7482c435b83d7e3c3ee5ee4451f6e8973cff0eb6007d2872ce6383f6398/pydantic_core-2.41.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", size = 2319875, upload-time = "2025-11-04T13:39:49.705Z" }, + { url = "https://files.pythonhosted.org/packages/fe/e6/8c9e81bb6dd7560e33b9053351c29f30c8194b72f2d6932888581f503482/pydantic_core-2.41.5-cp311-cp311-win32.whl", hash = "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", size = 1987549, upload-time = "2025-11-04T13:39:51.842Z" }, + { url = "https://files.pythonhosted.org/packages/11/66/f14d1d978ea94d1bc21fc98fcf570f9542fe55bfcc40269d4e1a21c19bf7/pydantic_core-2.41.5-cp311-cp311-win_amd64.whl", hash = "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", size = 2011305, upload-time = "2025-11-04T13:39:53.485Z" }, + { url = "https://files.pythonhosted.org/packages/56/d8/0e271434e8efd03186c5386671328154ee349ff0354d83c74f5caaf096ed/pydantic_core-2.41.5-cp311-cp311-win_arm64.whl", hash = "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", size = 1972902, upload-time = "2025-11-04T13:39:56.488Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, + { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, + { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, + { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, + { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, + { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, + { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, + { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, + { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, + { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, + { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, + { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, + { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, + { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, + { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, + { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, + { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, + { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, + { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, + { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, + { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, + { url = "https://files.pythonhosted.org/packages/2e/1b/687711069de7efa6af934e74f601e2a4307365e8fdc404703afc453eab26/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", size = 2138905, upload-time = "2025-11-04T13:42:47.156Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9b/1b3f0e9f9305839d7e84912f9e8bfbd191ed1b1ef48083609f0dabde978c/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", size = 2101980, upload-time = "2025-11-04T13:43:25.97Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ed/d71fefcb4263df0da6a85b5d8a7508360f2f2e9b3bf5814be9c8bccdccc1/pydantic_core-2.41.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", size = 1923865, upload-time = "2025-11-04T13:43:28.763Z" }, + { url = "https://files.pythonhosted.org/packages/ce/3a/626b38db460d675f873e4444b4bb030453bbe7b4ba55df821d026a0493c4/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", size = 2134256, upload-time = "2025-11-04T13:43:31.71Z" }, + { url = "https://files.pythonhosted.org/packages/83/d9/8412d7f06f616bbc053d30cb4e5f76786af3221462ad5eee1f202021eb4e/pydantic_core-2.41.5-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", size = 2174762, upload-time = "2025-11-04T13:43:34.744Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/162d906b8e3ba3a99354e20faa1b49a85206c47de97a639510a0e673f5da/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", size = 2143141, upload-time = "2025-11-04T13:43:37.701Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f2/f11dd73284122713f5f89fc940f370d035fa8e1e078d446b3313955157fe/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", size = 2330317, upload-time = "2025-11-04T13:43:40.406Z" }, + { url = "https://files.pythonhosted.org/packages/88/9d/b06ca6acfe4abb296110fb1273a4d848a0bfb2ff65f3ee92127b3244e16b/pydantic_core-2.41.5-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", size = 2316992, upload-time = "2025-11-04T13:43:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/36/c7/cfc8e811f061c841d7990b0201912c3556bfeb99cdcb7ed24adc8d6f8704/pydantic_core-2.41.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", size = 2145302, upload-time = "2025-11-04T13:43:46.64Z" }, +] + +[[package]] +name = "pydantic-settings" +version = "2.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "python-dotenv" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/68/85/1ea668bbab3c50071ca613c6ab30047fb36ab0da1b92fa8f17bbc38fd36c/pydantic_settings-2.10.1.tar.gz", hash = "sha256:06f0062169818d0f5524420a360d632d5857b83cffd4d42fe29597807a1614ee", size = 172583, upload-time = "2025-06-24T13:26:46.841Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/58/f0/427018098906416f580e3cf1366d3b1abfb408a0652e9f31600c24a1903c/pydantic_settings-2.10.1-py3-none-any.whl", hash = "sha256:a60952460b99cf661dc25c29c0ef171721f98bfcb52ef8d9ea4c943d7c8cc796", size = 45235, upload-time = "2025-06-24T13:26:45.485Z" }, +] + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/81/58d0ac84e1ef3a3843791d6954d94c0b33d526c75eeb1efbce9d0a4c4077/pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423", size = 107515, upload-time = "2026-05-21T19:54:36.618Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/5e/ecf12fdb62546d64385c158514e9b2b671f7832108ef2ecd2020ce0af2d1/pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728", size = 31274, upload-time = "2026-05-21T19:54:35.362Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pymupdf" +version = "1.26.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/48/d6/09b28f027b510838559f7748807192149c419b30cb90e6d5f0cf916dc9dc/pymupdf-1.26.7.tar.gz", hash = "sha256:71add8bdc8eb1aaa207c69a13400693f06ad9b927bea976f5d5ab9df0bb489c3", size = 84327033, upload-time = "2025-12-11T21:48:50.694Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/35/cd74cea1787b2247702ef8522186bdef32e9cb30a099e6bb864627ef6045/pymupdf-1.26.7-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:07085718dfdae5ab83b05eb5eb397f863bcc538fe05135318a01ea353e7a1353", size = 23179369, upload-time = "2025-12-11T21:47:21.587Z" }, + { url = "https://files.pythonhosted.org/packages/72/74/448b6172927c829c6a3fba80078d7b0a016ebbe2c9ee528821f5ea21677a/pymupdf-1.26.7-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:31aa9c8377ea1eea02934b92f4dcf79fb2abba0bf41f8a46d64c3e31546a3c02", size = 22470101, upload-time = "2025-12-11T21:47:37.105Z" }, + { url = "https://files.pythonhosted.org/packages/65/e7/47af26f3ac76be7ac3dd4d6cc7ee105948a8355d774e5ca39857bf91c11c/pymupdf-1.26.7-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e419b609996434a14a80fa060adec72c434a1cca6a511ec54db9841bc5d51b3c", size = 23502486, upload-time = "2025-12-12T09:51:25.824Z" }, + { url = "https://files.pythonhosted.org/packages/2a/6b/3de1714d734ff949be1e90a22375d0598d3540b22ae73eb85c2d7d1f36a9/pymupdf-1.26.7-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:69dfc78f206a96e5b3ac22741263ebab945fdf51f0dbe7c5757c3511b23d9d72", size = 24115727, upload-time = "2025-12-11T21:47:51.274Z" }, + { url = "https://files.pythonhosted.org/packages/62/9b/f86224847949577a523be2207315ae0fd3155b5d909cd66c274d095349a3/pymupdf-1.26.7-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1d5106f46e1ca0d64d46bd51892372a4f82076bdc14a9678d33d630702abca36", size = 24324386, upload-time = "2025-12-12T14:58:45.483Z" }, + { url = "https://files.pythonhosted.org/packages/85/8e/a117d39092ca645fde8b903f4a941d9aa75b370a67b4f1f435f56393dc5a/pymupdf-1.26.7-cp310-abi3-win32.whl", hash = "sha256:7c9645b6f5452629c747690190350213d3e5bbdb6b2eca227d82702b327f6eee", size = 17203888, upload-time = "2025-12-12T13:59:57.613Z" }, + { url = "https://files.pythonhosted.org/packages/dd/c3/d0047678146c294469c33bae167c8ace337deafb736b0bf97b9bc481aa65/pymupdf-1.26.7-cp310-abi3-win_amd64.whl", hash = "sha256:425b1befe40d41b72eb0fe211711c7ae334db5eb60307e9dd09066ed060cceba", size = 18405952, upload-time = "2025-12-11T21:48:02.947Z" }, +] + +[[package]] +name = "pymysql" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/bc/1c6a92f385940f727daeecf3bacaf186e03875dff57197801046c583bcf0/pymysql-1.2.0.tar.gz", hash = "sha256:6c7b17ca686988104d7426c27895b455cdeea3e9d3ceb1270f0c3704fead8c33", size = 49021, upload-time = "2026-05-19T08:26:22.302Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/bd/2534e130295c8cfd4f0a2e31623baab7502278f1e97bcfe61db75656a77f/pymysql-1.2.0-py3-none-any.whl", hash = "sha256:62169ce6d5510f08e140c5e7990ee884a9764024e4a9a27b2cc11f1099322ae0", size = 45716, upload-time = "2026-05-19T08:26:20.974Z" }, +] + +[[package]] +name = "pyopenssl" +version = "26.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/b7/da07bae88f5a9506b4def6f2f4903cf4c3b8831e560dba8fa18ca08f758f/pyopenssl-26.3.0.tar.gz", hash = "sha256:589de7fae1c9ea670d18422ed00fc04da787bbde8e1454aea872aa57b49ad341", size = 182024, upload-time = "2026-06-12T20:28:07.458Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/18/1dd71c9b43192ab83f1d531ad6002dc81108ac36c475f79fb7a295abe2f4/pyopenssl-26.3.0-py3-none-any.whl", hash = "sha256:46367f8f66b92271e6d218da9c87607e1ef5a0bc5c8dea5bb3db82f395c385a3", size = 56008, upload-time = "2026-06-12T20:28:05.999Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, +] + +[[package]] +name = "pypdf" +version = "6.13.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/17/18/9947cc201af9ccf76720fd3347bf4f70eb882ce3fcf4cb05f7443e4cf871/pypdf-6.13.3.tar.gz", hash = "sha256:f3cb822769725f1bac658c406cfc9460399043f3750c2d3e4650e0a85eacabd7", size = 6484063, upload-time = "2026-06-17T15:22:00.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/56/2967e621598987905fb8cdfadd8f8de6b5c68c9351f0523c4df8409f28f1/pypdf-6.13.3-py3-none-any.whl", hash = "sha256:c6e3f86afb625791510b02ad5480e94b63970bb957df75d44657c282ecc52224", size = 347288, upload-time = "2026-06-17T15:21:59.512Z" }, +] + +[[package]] +name = "pypdfium2" +version = "5.10.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/78/d9b45abb97a3686643f7c6472a5f7688f2013a373226121dc76b9debbacf/pypdfium2-5.10.1.tar.gz", hash = "sha256:f257d2011eb43c846b7e9f5a802e28646b29732763e4a35dd6ca76f9be580538", size = 272963, upload-time = "2026-06-15T10:09:16.179Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/49/0b85fcc0d236582143a25cf275b0b4f5d786f51eb07a89ec9c79d43efe18/pypdfium2-5.10.1-py3-none-android_23_arm64_v8a.whl", hash = "sha256:13abf7a9f5e0ddebc8bbcccea5f13ae5abe8a298ea219e125b0fc24c1d2171b4", size = 3409176, upload-time = "2026-06-15T10:08:36.017Z" }, + { url = "https://files.pythonhosted.org/packages/20/d2/2f522c5b2ad5166edf256bb4dbab97de5d07b2573f8a5630ddfcd1f8d4ee/pypdfium2-5.10.1-py3-none-android_23_armeabi_v7a.whl", hash = "sha256:a0dc52b56631e2f7edcdb22bae3b155aa840bec32c5bd05781e90baaecee88e7", size = 2866175, upload-time = "2026-06-15T10:08:37.955Z" }, + { url = "https://files.pythonhosted.org/packages/a7/be/477548c026c2badfdbf4afc3358b7135121fb5bec2e2effcb67e3a674d0b/pypdfium2-5.10.1-py3-none-macosx_12_0_arm64.whl", hash = "sha256:ebb9e63f92d15fc41b359fe7a187233dfae37548800e1fa09cb2fc466ac89951", size = 3621427, upload-time = "2026-06-15T10:08:39.969Z" }, + { url = "https://files.pythonhosted.org/packages/8c/9b/0131c7f711b62c6edd6b200e9eb6340be6de4f6dc5baae625e3394d8d5fb/pypdfium2-5.10.1-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:d04f2050b6b32bb18624688b600543342a4ab3aacf64bf66521a5af72bbc7de1", size = 3682825, upload-time = "2026-06-15T10:08:42.181Z" }, + { url = "https://files.pythonhosted.org/packages/9d/3d/bddfceb6e67e54d6dd1ab6c0f1feff796a89596e40f6345a3b4cc6a3d408/pypdfium2-5.10.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de53d2710ca9509fc2812340acc57c3f043697609068592d87de654f8cabf44", size = 3682206, upload-time = "2026-06-15T10:08:44.087Z" }, + { url = "https://files.pythonhosted.org/packages/58/08/dedeb25c6645fc8a5eda24f54e0b1d083b7334ababf5f518bb939d729cc0/pypdfium2-5.10.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10a26ce04795f8ec079e81c707fcb5737061e8a78025babc3d6e36642e9c903a", size = 3413720, upload-time = "2026-06-15T10:08:45.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/48/69e1fc8b1216005243c6415183bbf6de1cda3f5a06758b3fa4a26a7385c6/pypdfium2-5.10.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:be6d2a8d1bcfd777188e7aa55a25c83f34d54e8350ad8810fb32017787d9b0d9", size = 3812913, upload-time = "2026-06-15T10:08:47.45Z" }, + { url = "https://files.pythonhosted.org/packages/72/7f/132455a58ad736d76815c6cd1307532c3f433299d945b9d2f8cc2387c309/pypdfium2-5.10.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cf4d2527f79f31c550490cc74c9f32e19385a944630a3ef4cd4d9b6f961fbf77", size = 4223220, upload-time = "2026-06-15T10:08:49.099Z" }, + { url = "https://files.pythonhosted.org/packages/bf/8c/4d5804eca598bbe894e0a9a510807e221c1623e7276ce6b68fa2660dc933/pypdfium2-5.10.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ba127750bc3f4161461538d532d74491cd976f584f1753a6cee9cb821338ec1", size = 3738950, upload-time = "2026-06-15T10:08:50.821Z" }, + { url = "https://files.pythonhosted.org/packages/d1/7f/baac59bf14ff914d97789ee0368c22ae233aa857aa9c0726bcb515dbc4d7/pypdfium2-5.10.1-py3-none-manylinux_2_27_s390x.manylinux_2_28_s390x.whl", hash = "sha256:80f30517ee089dfbbc6e9de6da365b6e8c0ce8f80c40b7d4025a3b1d3bbd8a70", size = 4029869, upload-time = "2026-06-15T10:08:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d7/a5d58a0bcba31a0e37ed636a76ef3d2d215733f28af61637287d061b0c54/pypdfium2-5.10.1-py3-none-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ad5f5de15febb788c6eb3853e58aceda9cd8c5187c92472abaeecf9558deb0cf", size = 3990927, upload-time = "2026-06-15T10:08:54.555Z" }, + { url = "https://files.pythonhosted.org/packages/da/1a/98eebd14b36812176297cf765d504ebeebc982f895c8a3a9fbd2717797de/pypdfium2-5.10.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8947fa3cd808da33960bdf8ff9e5247aa94ccd94f0b09bb3402e99498d83bcc9", size = 4989624, upload-time = "2026-06-15T10:08:56.284Z" }, + { url = "https://files.pythonhosted.org/packages/1c/20/f2e124d607b8bb90a9f1ce976afff38c70e215cd7ea86af784cb2e8a19dd/pypdfium2-5.10.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:139a6387a3a2652f288e53164268bb03af4fa221d78484ee18407053a60082a3", size = 4535124, upload-time = "2026-06-15T10:08:58.214Z" }, + { url = "https://files.pythonhosted.org/packages/59/ef/469ea87f668a32ff3280ea15e522e3a7858d2c80f1ecc320ece1244624c9/pypdfium2-5.10.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:172ff3e10358d66456e27fb0b8b5098e28ec24e51072eb4b5b86077d550e21bb", size = 5229373, upload-time = "2026-06-15T10:09:00.702Z" }, + { url = "https://files.pythonhosted.org/packages/c3/48/c7ed3001f0c5e28114c98bf918c8121e422a65ba7323e1e12f3f28e2d278/pypdfium2-5.10.1-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:09fda0609dc4749c9865a0315c447d6f2583a580693bcabd69980d3fbb22ad51", size = 5140010, upload-time = "2026-06-15T10:09:02.734Z" }, + { url = "https://files.pythonhosted.org/packages/b2/bc/00b731bfc1fdc0f3c7d91108fceb54978ff4f5a92336820e5ed6c12535ff/pypdfium2-5.10.1-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:6b01adcfe9aaf7a635a59bed5687fd4fd7b0da292664f050d4ebd2bfa5c70584", size = 4643310, upload-time = "2026-06-15T10:09:04.794Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e8/3ad242233f657c19092a8c83684c8154b8d02a826535a6a2591d91aa5dde/pypdfium2-5.10.1-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:610e14c37d2090b826dccc0604fc7e7612c0ce591190780ae228abdb9abb971e", size = 5087879, upload-time = "2026-06-15T10:09:06.861Z" }, + { url = "https://files.pythonhosted.org/packages/80/3f/9d0747a02ac3021ed3db7ac27c5187d97e78b0253a4bdfbf386666968474/pypdfium2-5.10.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f2803020952afa57e1e148adc19369b835154e1fa251a1ca85008ab6466a710f", size = 5047369, upload-time = "2026-06-15T10:09:08.883Z" }, + { url = "https://files.pythonhosted.org/packages/9e/41/7d5187e9527eae81890a3b13193442112ef788d61ddaa68a6d59ac447bec/pypdfium2-5.10.1-py3-none-win32.whl", hash = "sha256:8702bb4f01ddfc8e7757b41b4c2c8392ac17c9f0234476e1e69672ea7c6d6aa0", size = 3680056, upload-time = "2026-06-15T10:09:10.95Z" }, + { url = "https://files.pythonhosted.org/packages/16/1d/c62bd59dd8345cc4b640f942f465633f6b07b859d01ddb648610a7bf5c7c/pypdfium2-5.10.1-py3-none-win_amd64.whl", hash = "sha256:58da5b51fb7884c7d21a05062ab13edb011d1a08dfd9694f3d5d685df62796b9", size = 3812105, upload-time = "2026-06-15T10:09:12.684Z" }, + { url = "https://files.pythonhosted.org/packages/10/d5/21bac39125df8a93e99c04583486b58a62b5997d6b3541e3ad0f69053392/pypdfium2-5.10.1-py3-none-win_arm64.whl", hash = "sha256:e3301c2f7a66fb8cb57dba857d0c9e90215e178f6602a87c5a306cd98513dab8", size = 3600043, upload-time = "2026-06-15T10:09:14.606Z" }, +] + +[[package]] +name = "pypika" +version = "0.51.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/78/cbaebba88e05e2dcda13ca203131b38d3640219f20ebb49676d26714861b/pypika-0.51.1.tar.gz", hash = "sha256:c30c7c1048fbf056fd3920c5a2b88b0c29dd190a9b2bee971fd17e4abe4d0ebe", size = 80919, upload-time = "2026-02-04T11:27:48.304Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/83/c77dfeed04022e8930b08eedca2b6e5efed256ab3321396fde90066efb65/pypika-0.51.1-py2.py3-none-any.whl", hash = "sha256:77985b4d7ce71b9905255bf12468cf598349e98837c037541cfc240e528aec46", size = 60585, upload-time = "2026-02-04T11:27:46.251Z" }, +] + +[[package]] +name = "pyproject-hooks" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e7/82/28175b2414effca1cdac8dc99f76d660e7a4fb0ceefa4b4ab8f5f6742925/pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8", size = 19228, upload-time = "2024-09-29T09:24:13.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/0e/b5858858d74958632c49b72cb25a3976ff9f632397626715be71c89d3971/pytest-9.1.0.tar.gz", hash = "sha256:41dd9148c08072446394cefd3d79701701335a9f4cae69ba92e39f6c7f5c061c", size = 1634181, upload-time = "2026-06-13T18:52:45.983Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/5a/ba30a81239b909821b3153e303e7def45178bf353da4f72380e6c5e8793b/pytest-9.1.0-py3-none-any.whl", hash = "sha256:8ebb0e7888bdf2bdfc602ec51f8f62d50200af37356c74e503c79a94f5c81f32", size = 386453, upload-time = "2026-06-13T18:52:44.045Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514, upload-time = "2026-05-26T09:56:04.083Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930, upload-time = "2026-05-26T09:56:02.576Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-docx" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "lxml" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/f7/eddfe33871520adab45aaa1a71f0402a2252050c14c7e3009446c8f4701c/python_docx-1.2.0.tar.gz", hash = "sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce", size = 5723256, upload-time = "2025-06-16T20:46:27.921Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/00/1e03a4989fa5795da308cd774f05b704ace555a70f9bf9d3be057b680bcf/python_docx-1.2.0-py3-none-any.whl", hash = "sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7", size = 252987, upload-time = "2025-06-16T20:46:22.506Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, +] + +[[package]] +name = "python-jose" +version = "3.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ecdsa" }, + { name = "pyasn1" }, + { name = "rsa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/77/3a1c9039db7124eb039772b935f2244fbb73fc8ee65b9acf2375da1c07bf/python_jose-3.5.0.tar.gz", hash = "sha256:fb4eaa44dbeb1c26dcc69e4bd7ec54a1cb8dd64d3b4d81ef08d90ff453f2b01b", size = 92726, upload-time = "2025-05-28T17:31:54.288Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/c3/0bd11992072e6a1c513b16500a5d07f91a24017c5909b02c72c62d7ad024/python_jose-3.5.0-py2.py3-none-any.whl", hash = "sha256:abd1202f23d34dfad2c3d28cb8617b90acf34132c7afd60abd0b0b7d3cb55771", size = 34624, upload-time = "2025-05-28T17:31:52.802Z" }, +] + +[package.optional-dependencies] +cryptography = [ + { name = "cryptography" }, +] + +[[package]] +name = "python-multipart" +version = "0.0.32" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/42/55c32bb9b12693c092ad250a0e82edb5b31ddeda6eb772de5f308b3804ad/python_multipart-0.0.32.tar.gz", hash = "sha256:be54b7f3fa167bb83e4fcd936b887b708f4e57fe75911c02aebf53efaf8d938e", size = 46881, upload-time = "2026-06-04T16:18:58.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/04/e8135ebd1ad02c56ec633277529b2602ff99ff634be76cdba5744cf554fd/python_multipart-0.0.32-py3-none-any.whl", hash = "sha256:ff6d3f776f16878c894e52e107296ffc890e913c611b1a4ec6c44e2821fe2e23", size = 30042, upload-time = "2026-06-04T16:18:57.319Z" }, +] + +[[package]] +name = "pytube" +version = "15.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/e7/16fec46c8d255c4bbc4b185d89c91dc92cdb802836570d8004d0db169c91/pytube-15.0.0.tar.gz", hash = "sha256:076052efe76f390dfa24b1194ff821d4e86c17d41cb5562f3a276a8bcbfc9d1d", size = 67229, upload-time = "2023-05-07T19:39:01.903Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/64/bcf8632ed2b7a36bbf84a0544885ffa1d0b4bcf25cc0903dba66ec5fdad9/pytube-15.0.0-py3-none-any.whl", hash = "sha256:07b9904749e213485780d7eb606e5e5b8e4341aa4dccf699160876da00e12d78", size = 57594, upload-time = "2023-05-07T19:38:59.191Z" }, +] + +[[package]] +name = "pytz" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" }, +] + +[[package]] +name = "pywin32" +version = "312" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/f5/10a6e845a00fc5e7afd0a988b744f403d4d57162a28d160a093c4d9322f0/pywin32-312-cp311-cp311-win32.whl", hash = "sha256:17948aeadbdb091f0ced6ef0841620794e68327b94ee415571c1203594b7215c", size = 6362659, upload-time = "2026-06-04T07:49:21.349Z" }, + { url = "https://files.pythonhosted.org/packages/35/c4/dcd2d62b5944b6d5db53413a5899016ccd57ffcb7278f3f81655d25d2027/pywin32-312-cp311-cp311-win_amd64.whl", hash = "sha256:d11417d84412f859b722fad0841b3614459ed0047f7542d8362e77884f6b6e8a", size = 6928825, upload-time = "2026-06-04T07:49:23.934Z" }, + { url = "https://files.pythonhosted.org/packages/b7/56/3cbb433fe4501cdba2eb9040f56a4e1a8243faa4186b25295564d1a7a79d/pywin32-312-cp311-cp311-win_arm64.whl", hash = "sha256:b2200a054ca6d6625c4842fc56a4976a4b47f96b73dbe5538c3f813a80359f47", size = 6721875, upload-time = "2026-06-04T07:49:26.416Z" }, + { url = "https://files.pythonhosted.org/packages/83/ff/32aa7d2ed0ab12b323aaa64f9b75e6ad4f8fd09f9ccfc28c79414d46838d/pywin32-312-cp312-cp312-win32.whl", hash = "sha256:dab4f65ac9c4e48400a2a0530c46c3c579cd5905ecd11b80692373915269208b", size = 6371877, upload-time = "2026-06-04T07:49:28.836Z" }, + { url = "https://files.pythonhosted.org/packages/03/d9/77040d3b43df3f3be32ea289433d660d2727f5ba327bc73be835127d9d60/pywin32-312-cp312-cp312-win_amd64.whl", hash = "sha256:b457f6d628a47e8a7346ce22acb7e1a46a4a78b52e1d17e1af56871bd19a93bc", size = 6914841, upload-time = "2026-06-04T07:49:31.85Z" }, + { url = "https://files.pythonhosted.org/packages/e3/cc/7b1ec671775756020a0ee7f4feeaf3c568f0ab86bd3900088cf986937a92/pywin32-312-cp312-cp312-win_arm64.whl", hash = "sha256:6017c58e12f6809fbb0555b75df144c2922a9ffd18e4b9b5afa863b6c1a9d950", size = 6727901, upload-time = "2026-06-04T07:49:34.244Z" }, + { url = "https://files.pythonhosted.org/packages/2d/41/12fbfd7f36ed2146d8bc9de96c2741296bf0d490b98508496cff322e274c/pywin32-312-cp313-cp313-win32.whl", hash = "sha256:7a27df850933d16a8eabfbaeb73d52b273e2da667f80d70b01a89d1f6828d02c", size = 6370184, upload-time = "2026-06-04T07:49:36.253Z" }, + { url = "https://files.pythonhosted.org/packages/ba/db/36a78e3403099d31d9746d13fdcde5accc43c1155f375a34d15983a479a7/pywin32-312-cp313-cp313-win_amd64.whl", hash = "sha256:c53e878d15a1c44788082bfe712a905433473aa38f86375b7cf8b45e3acbaaf9", size = 6914298, upload-time = "2026-06-04T07:49:38.876Z" }, + { url = "https://files.pythonhosted.org/packages/84/37/c1697194092b76de9ed47ca124323f02c57ffc8a45c06f88a3d5acaf01eb/pywin32-312-cp313-cp313-win_arm64.whl", hash = "sha256:59aba5d5940842075343a5ddc6b11f1cdf0d1567fe745290359dfbcc7c2eb831", size = 6727640, upload-time = "2026-06-04T07:49:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2b/1f3cded5822fd49c02f40544cbb5f58c7cfd6b1694869fd476cb6170ee97/pywin32-312-cp314-cp314-win32.whl", hash = "sha256:a77a90fbb6881238d2ca9c6fd797b25817f3768fe78d214a90137ff055a75f5b", size = 6468928, upload-time = "2026-06-04T07:49:43.188Z" }, + { url = "https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl", hash = "sha256:a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e", size = 7024157, upload-time = "2026-06-04T07:49:45.34Z" }, + { url = "https://files.pythonhosted.org/packages/a4/0e/73f6d6800b4f27655abd9e9f6aaeaefcddb2b946e4674efa2bab184a7f7b/pywin32-312-cp314-cp314-win_arm64.whl", hash = "sha256:9fce94568364e0155e6dfb781ac5d95903be8baf28670632beab1b523f300daa", size = 6839598, upload-time = "2026-06-04T07:49:47.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/61/caa39686032d2ebdd04ff0ab5cbe163126c0066d98e00c9018646e42393b/pywin32-312-cp315-cp315-win32.whl", hash = "sha256:5c1fbe4a937a73ae9297384a3da38518cbc694c68ad8a809b2e19acd350f03ed", size = 6471159, upload-time = "2026-06-04T07:49:50.035Z" }, + { url = "https://files.pythonhosted.org/packages/0f/cd/7e1de64a4a6f69c04214169657ccab0d93a670ea50e35eb8f489d7378249/pywin32-312-cp315-cp315-win_amd64.whl", hash = "sha256:c2f03a0f73f804a13c2735b99392b0cd426bb4f2c4d0178e5ac966a0f21618d5", size = 7025293, upload-time = "2026-06-04T07:49:54.857Z" }, + { url = "https://files.pythonhosted.org/packages/23/ed/4532e9388e65fa16b46776ef47ad631a64eda1631884488af707666350ed/pywin32-312-cp315-cp315-win_arm64.whl", hash = "sha256:a8597d28f267b39074aef51fa593530082b39cbe5a074226096857b1fed2dfb9", size = 6840337, upload-time = "2026-06-04T07:49:57.531Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" }, + { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" }, + { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" }, + { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" }, + { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" }, + { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" }, + { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" }, + { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" }, + { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, + { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, + { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, + { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, + { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, + { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, + { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, + { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, + { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, + { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, + { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, + { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, + { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, + { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, + { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, + { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, + { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, + { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, + { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, + { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "regex" +version = "2026.1.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/86/07d5056945f9ec4590b518171c4254a5925832eb727b56d3c38a7476f316/regex-2026.1.15.tar.gz", hash = "sha256:164759aa25575cbc0651bef59a0b18353e54300d79ace8084c818ad8ac72b7d5", size = 414811, upload-time = "2026-01-14T23:18:02.775Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/c9/0c80c96eab96948363d270143138d671d5731c3a692b417629bf3492a9d6/regex-2026.1.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ae6020fb311f68d753b7efa9d4b9a5d47a5d6466ea0d5e3b5a471a960ea6e4a", size = 488168, upload-time = "2026-01-14T23:14:16.129Z" }, + { url = "https://files.pythonhosted.org/packages/17/f0/271c92f5389a552494c429e5cc38d76d1322eb142fb5db3c8ccc47751468/regex-2026.1.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eddf73f41225942c1f994914742afa53dc0d01a6e20fe14b878a1b1edc74151f", size = 290636, upload-time = "2026-01-14T23:14:17.715Z" }, + { url = "https://files.pythonhosted.org/packages/a0/f9/5f1fd077d106ca5655a0f9ff8f25a1ab55b92128b5713a91ed7134ff688e/regex-2026.1.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e8cd52557603f5c66a548f69421310886b28b7066853089e1a71ee710e1cdc1", size = 288496, upload-time = "2026-01-14T23:14:19.326Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e1/8f43b03a4968c748858ec77f746c286d81f896c2e437ccf050ebc5d3128c/regex-2026.1.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5170907244b14303edc5978f522f16c974f32d3aa92109fabc2af52411c9433b", size = 793503, upload-time = "2026-01-14T23:14:20.922Z" }, + { url = "https://files.pythonhosted.org/packages/8d/4e/a39a5e8edc5377a46a7c875c2f9a626ed3338cb3bb06931be461c3e1a34a/regex-2026.1.15-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2748c1ec0663580b4510bd89941a31560b4b439a0b428b49472a3d9944d11cd8", size = 860535, upload-time = "2026-01-14T23:14:22.405Z" }, + { url = "https://files.pythonhosted.org/packages/dc/1c/9dce667a32a9477f7a2869c1c767dc00727284a9fa3ff5c09a5c6c03575e/regex-2026.1.15-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2f2775843ca49360508d080eaa87f94fa248e2c946bbcd963bb3aae14f333413", size = 907225, upload-time = "2026-01-14T23:14:23.897Z" }, + { url = "https://files.pythonhosted.org/packages/a4/3c/87ca0a02736d16b6262921425e84b48984e77d8e4e572c9072ce96e66c30/regex-2026.1.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9ea2604370efc9a174c1b5dcc81784fb040044232150f7f33756049edfc9026", size = 800526, upload-time = "2026-01-14T23:14:26.039Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ff/647d5715aeea7c87bdcbd2f578f47b415f55c24e361e639fe8c0cc88878f/regex-2026.1.15-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0dcd31594264029b57bf16f37fd7248a70b3b764ed9e0839a8f271b2d22c0785", size = 773446, upload-time = "2026-01-14T23:14:28.109Z" }, + { url = "https://files.pythonhosted.org/packages/af/89/bf22cac25cb4ba0fe6bff52ebedbb65b77a179052a9d6037136ae93f42f4/regex-2026.1.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c08c1f3e34338256732bd6938747daa3c0d5b251e04b6e43b5813e94d503076e", size = 783051, upload-time = "2026-01-14T23:14:29.929Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f4/6ed03e71dca6348a5188363a34f5e26ffd5db1404780288ff0d79513bce4/regex-2026.1.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e43a55f378df1e7a4fa3547c88d9a5a9b7113f653a66821bcea4718fe6c58763", size = 854485, upload-time = "2026-01-14T23:14:31.366Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9a/8e8560bd78caded8eb137e3e47612430a05b9a772caf60876435192d670a/regex-2026.1.15-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:f82110ab962a541737bd0ce87978d4c658f06e7591ba899192e2712a517badbb", size = 762195, upload-time = "2026-01-14T23:14:32.802Z" }, + { url = "https://files.pythonhosted.org/packages/38/6b/61fc710f9aa8dfcd764fe27d37edfaa023b1a23305a0d84fccd5adb346ea/regex-2026.1.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:27618391db7bdaf87ac6c92b31e8f0dfb83a9de0075855152b720140bda177a2", size = 845986, upload-time = "2026-01-14T23:14:34.898Z" }, + { url = "https://files.pythonhosted.org/packages/fd/2e/fbee4cb93f9d686901a7ca8d94285b80405e8c34fe4107f63ffcbfb56379/regex-2026.1.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bfb0d6be01fbae8d6655c8ca21b3b72458606c4aec9bbc932db758d47aba6db1", size = 788992, upload-time = "2026-01-14T23:14:37.116Z" }, + { url = "https://files.pythonhosted.org/packages/ed/14/3076348f3f586de64b1ab75a3fbabdaab7684af7f308ad43be7ef1849e55/regex-2026.1.15-cp311-cp311-win32.whl", hash = "sha256:b10e42a6de0e32559a92f2f8dc908478cc0fa02838d7dbe764c44dca3fa13569", size = 265893, upload-time = "2026-01-14T23:14:38.426Z" }, + { url = "https://files.pythonhosted.org/packages/0f/19/772cf8b5fc803f5c89ba85d8b1870a1ca580dc482aa030383a9289c82e44/regex-2026.1.15-cp311-cp311-win_amd64.whl", hash = "sha256:e9bf3f0bbdb56633c07d7116ae60a576f846efdd86a8848f8d62b749e1209ca7", size = 277840, upload-time = "2026-01-14T23:14:39.785Z" }, + { url = "https://files.pythonhosted.org/packages/78/84/d05f61142709474da3c0853222d91086d3e1372bcdab516c6fd8d80f3297/regex-2026.1.15-cp311-cp311-win_arm64.whl", hash = "sha256:41aef6f953283291c4e4e6850607bd71502be67779586a61472beacb315c97ec", size = 270374, upload-time = "2026-01-14T23:14:41.592Z" }, + { url = "https://files.pythonhosted.org/packages/92/81/10d8cf43c807d0326efe874c1b79f22bfb0fb226027b0b19ebc26d301408/regex-2026.1.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4c8fcc5793dde01641a35905d6731ee1548f02b956815f8f1cab89e515a5bdf1", size = 489398, upload-time = "2026-01-14T23:14:43.741Z" }, + { url = "https://files.pythonhosted.org/packages/90/b0/7c2a74e74ef2a7c32de724658a69a862880e3e4155cba992ba04d1c70400/regex-2026.1.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bfd876041a956e6a90ad7cdb3f6a630c07d491280bfeed4544053cd434901681", size = 291339, upload-time = "2026-01-14T23:14:45.183Z" }, + { url = "https://files.pythonhosted.org/packages/19/4d/16d0773d0c818417f4cc20aa0da90064b966d22cd62a8c46765b5bd2d643/regex-2026.1.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9250d087bc92b7d4899ccd5539a1b2334e44eee85d848c4c1aef8e221d3f8c8f", size = 289003, upload-time = "2026-01-14T23:14:47.25Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e4/1fc4599450c9f0863d9406e944592d968b8d6dfd0d552a7d569e43bceada/regex-2026.1.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8a154cf6537ebbc110e24dabe53095e714245c272da9c1be05734bdad4a61aa", size = 798656, upload-time = "2026-01-14T23:14:48.77Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e6/59650d73a73fa8a60b3a590545bfcf1172b4384a7df2e7fe7b9aab4e2da9/regex-2026.1.15-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8050ba2e3ea1d8731a549e83c18d2f0999fbc99a5f6bd06b4c91449f55291804", size = 864252, upload-time = "2026-01-14T23:14:50.528Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ab/1d0f4d50a1638849a97d731364c9a80fa304fec46325e48330c170ee8e80/regex-2026.1.15-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf065240704cb8951cc04972cf107063917022511273e0969bdb34fc173456c", size = 912268, upload-time = "2026-01-14T23:14:52.952Z" }, + { url = "https://files.pythonhosted.org/packages/dd/df/0d722c030c82faa1d331d1921ee268a4e8fb55ca8b9042c9341c352f17fa/regex-2026.1.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c32bef3e7aeee75746748643667668ef941d28b003bfc89994ecf09a10f7a1b5", size = 803589, upload-time = "2026-01-14T23:14:55.182Z" }, + { url = "https://files.pythonhosted.org/packages/66/23/33289beba7ccb8b805c6610a8913d0131f834928afc555b241caabd422a9/regex-2026.1.15-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d5eaa4a4c5b1906bd0d2508d68927f15b81821f85092e06f1a34a4254b0e1af3", size = 775700, upload-time = "2026-01-14T23:14:56.707Z" }, + { url = "https://files.pythonhosted.org/packages/e7/65/bf3a42fa6897a0d3afa81acb25c42f4b71c274f698ceabd75523259f6688/regex-2026.1.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:86c1077a3cc60d453d4084d5b9649065f3bf1184e22992bd322e1f081d3117fb", size = 787928, upload-time = "2026-01-14T23:14:58.312Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f5/13bf65864fc314f68cdd6d8ca94adcab064d4d39dbd0b10fef29a9da48fc/regex-2026.1.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:2b091aefc05c78d286657cd4db95f2e6313375ff65dcf085e42e4c04d9c8d410", size = 858607, upload-time = "2026-01-14T23:15:00.657Z" }, + { url = "https://files.pythonhosted.org/packages/a3/31/040e589834d7a439ee43fb0e1e902bc81bd58a5ba81acffe586bb3321d35/regex-2026.1.15-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:57e7d17f59f9ebfa9667e6e5a1c0127b96b87cb9cede8335482451ed00788ba4", size = 763729, upload-time = "2026-01-14T23:15:02.248Z" }, + { url = "https://files.pythonhosted.org/packages/9b/84/6921e8129687a427edf25a34a5594b588b6d88f491320b9de5b6339a4fcb/regex-2026.1.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:c6c4dcdfff2c08509faa15d36ba7e5ef5fcfab25f1e8f85a0c8f45bc3a30725d", size = 850697, upload-time = "2026-01-14T23:15:03.878Z" }, + { url = "https://files.pythonhosted.org/packages/8a/87/3d06143d4b128f4229158f2de5de6c8f2485170c7221e61bf381313314b2/regex-2026.1.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf8ff04c642716a7f2048713ddc6278c5fd41faa3b9cab12607c7abecd012c22", size = 789849, upload-time = "2026-01-14T23:15:06.102Z" }, + { url = "https://files.pythonhosted.org/packages/77/69/c50a63842b6bd48850ebc7ab22d46e7a2a32d824ad6c605b218441814639/regex-2026.1.15-cp312-cp312-win32.whl", hash = "sha256:82345326b1d8d56afbe41d881fdf62f1926d7264b2fc1537f99ae5da9aad7913", size = 266279, upload-time = "2026-01-14T23:15:07.678Z" }, + { url = "https://files.pythonhosted.org/packages/f2/36/39d0b29d087e2b11fd8191e15e81cce1b635fcc845297c67f11d0d19274d/regex-2026.1.15-cp312-cp312-win_amd64.whl", hash = "sha256:4def140aa6156bc64ee9912383d4038f3fdd18fee03a6f222abd4de6357ce42a", size = 277166, upload-time = "2026-01-14T23:15:09.257Z" }, + { url = "https://files.pythonhosted.org/packages/28/32/5b8e476a12262748851fa8ab1b0be540360692325975b094e594dfebbb52/regex-2026.1.15-cp312-cp312-win_arm64.whl", hash = "sha256:c6c565d9a6e1a8d783c1948937ffc377dd5771e83bd56de8317c450a954d2056", size = 270415, upload-time = "2026-01-14T23:15:10.743Z" }, + { url = "https://files.pythonhosted.org/packages/f8/2e/6870bb16e982669b674cce3ee9ff2d1d46ab80528ee6bcc20fb2292efb60/regex-2026.1.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e69d0deeb977ffe7ed3d2e4439360089f9c3f217ada608f0f88ebd67afb6385e", size = 489164, upload-time = "2026-01-14T23:15:13.962Z" }, + { url = "https://files.pythonhosted.org/packages/dc/67/9774542e203849b0286badf67199970a44ebdb0cc5fb739f06e47ada72f8/regex-2026.1.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3601ffb5375de85a16f407854d11cca8fe3f5febbe3ac78fb2866bb220c74d10", size = 291218, upload-time = "2026-01-14T23:15:15.647Z" }, + { url = "https://files.pythonhosted.org/packages/b2/87/b0cda79f22b8dee05f774922a214da109f9a4c0eca5da2c9d72d77ea062c/regex-2026.1.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4c5ef43b5c2d4114eb8ea424bb8c9cec01d5d17f242af88b2448f5ee81caadbc", size = 288895, upload-time = "2026-01-14T23:15:17.788Z" }, + { url = "https://files.pythonhosted.org/packages/3b/6a/0041f0a2170d32be01ab981d6346c83a8934277d82c780d60b127331f264/regex-2026.1.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:968c14d4f03e10b2fd960f1d5168c1f0ac969381d3c1fcc973bc45fb06346599", size = 798680, upload-time = "2026-01-14T23:15:19.342Z" }, + { url = "https://files.pythonhosted.org/packages/58/de/30e1cfcdbe3e891324aa7568b7c968771f82190df5524fabc1138cb2d45a/regex-2026.1.15-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56a5595d0f892f214609c9f76b41b7428bed439d98dc961efafdd1354d42baae", size = 864210, upload-time = "2026-01-14T23:15:22.005Z" }, + { url = "https://files.pythonhosted.org/packages/64/44/4db2f5c5ca0ccd40ff052ae7b1e9731352fcdad946c2b812285a7505ca75/regex-2026.1.15-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0bf650f26087363434c4e560011f8e4e738f6f3e029b85d4904c50135b86cfa5", size = 912358, upload-time = "2026-01-14T23:15:24.569Z" }, + { url = "https://files.pythonhosted.org/packages/79/b6/e6a5665d43a7c42467138c8a2549be432bad22cbd206f5ec87162de74bd7/regex-2026.1.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18388a62989c72ac24de75f1449d0fb0b04dfccd0a1a7c1c43af5eb503d890f6", size = 803583, upload-time = "2026-01-14T23:15:26.526Z" }, + { url = "https://files.pythonhosted.org/packages/e7/53/7cd478222169d85d74d7437e74750005e993f52f335f7c04ff7adfda3310/regex-2026.1.15-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6d220a2517f5893f55daac983bfa9fe998a7dbcaee4f5d27a88500f8b7873788", size = 775782, upload-time = "2026-01-14T23:15:29.352Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b5/75f9a9ee4b03a7c009fe60500fe550b45df94f0955ca29af16333ef557c5/regex-2026.1.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9c08c2fbc6120e70abff5d7f28ffb4d969e14294fb2143b4b5c7d20e46d1714", size = 787978, upload-time = "2026-01-14T23:15:31.295Z" }, + { url = "https://files.pythonhosted.org/packages/72/b3/79821c826245bbe9ccbb54f6eadb7879c722fd3e0248c17bfc90bf54e123/regex-2026.1.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7ef7d5d4bd49ec7364315167a4134a015f61e8266c6d446fc116a9ac4456e10d", size = 858550, upload-time = "2026-01-14T23:15:33.558Z" }, + { url = "https://files.pythonhosted.org/packages/4a/85/2ab5f77a1c465745bfbfcb3ad63178a58337ae8d5274315e2cc623a822fa/regex-2026.1.15-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:6e42844ad64194fa08d5ccb75fe6a459b9b08e6d7296bd704460168d58a388f3", size = 763747, upload-time = "2026-01-14T23:15:35.206Z" }, + { url = "https://files.pythonhosted.org/packages/6d/84/c27df502d4bfe2873a3e3a7cf1bdb2b9cc10284d1a44797cf38bed790470/regex-2026.1.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cfecdaa4b19f9ca534746eb3b55a5195d5c95b88cac32a205e981ec0a22b7d31", size = 850615, upload-time = "2026-01-14T23:15:37.523Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b7/658a9782fb253680aa8ecb5ccbb51f69e088ed48142c46d9f0c99b46c575/regex-2026.1.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:08df9722d9b87834a3d701f3fca570b2be115654dbfd30179f30ab2f39d606d3", size = 789951, upload-time = "2026-01-14T23:15:39.582Z" }, + { url = "https://files.pythonhosted.org/packages/fc/2a/5928af114441e059f15b2f63e188bd00c6529b3051c974ade7444b85fcda/regex-2026.1.15-cp313-cp313-win32.whl", hash = "sha256:d426616dae0967ca225ab12c22274eb816558f2f99ccb4a1d52ca92e8baf180f", size = 266275, upload-time = "2026-01-14T23:15:42.108Z" }, + { url = "https://files.pythonhosted.org/packages/4f/16/5bfbb89e435897bff28cf0352a992ca719d9e55ebf8b629203c96b6ce4f7/regex-2026.1.15-cp313-cp313-win_amd64.whl", hash = "sha256:febd38857b09867d3ed3f4f1af7d241c5c50362e25ef43034995b77a50df494e", size = 277145, upload-time = "2026-01-14T23:15:44.244Z" }, + { url = "https://files.pythonhosted.org/packages/56/c1/a09ff7392ef4233296e821aec5f78c51be5e91ffde0d163059e50fd75835/regex-2026.1.15-cp313-cp313-win_arm64.whl", hash = "sha256:8e32f7896f83774f91499d239e24cebfadbc07639c1494bb7213983842348337", size = 270411, upload-time = "2026-01-14T23:15:45.858Z" }, + { url = "https://files.pythonhosted.org/packages/3c/38/0cfd5a78e5c6db00e6782fdae70458f89850ce95baa5e8694ab91d89744f/regex-2026.1.15-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:ec94c04149b6a7b8120f9f44565722c7ae31b7a6d2275569d2eefa76b83da3be", size = 492068, upload-time = "2026-01-14T23:15:47.616Z" }, + { url = "https://files.pythonhosted.org/packages/50/72/6c86acff16cb7c959c4355826bbf06aad670682d07c8f3998d9ef4fee7cd/regex-2026.1.15-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:40c86d8046915bb9aeb15d3f3f15b6fd500b8ea4485b30e1bbc799dab3fe29f8", size = 292756, upload-time = "2026-01-14T23:15:49.307Z" }, + { url = "https://files.pythonhosted.org/packages/4e/58/df7fb69eadfe76526ddfce28abdc0af09ffe65f20c2c90932e89d705153f/regex-2026.1.15-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:726ea4e727aba21643205edad8f2187ec682d3305d790f73b7a51c7587b64bdd", size = 291114, upload-time = "2026-01-14T23:15:51.484Z" }, + { url = "https://files.pythonhosted.org/packages/ed/6c/a4011cd1cf96b90d2cdc7e156f91efbd26531e822a7fbb82a43c1016678e/regex-2026.1.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1cb740d044aff31898804e7bf1181cc72c03d11dfd19932b9911ffc19a79070a", size = 807524, upload-time = "2026-01-14T23:15:53.102Z" }, + { url = "https://files.pythonhosted.org/packages/1d/25/a53ffb73183f69c3e9f4355c4922b76d2840aee160af6af5fac229b6201d/regex-2026.1.15-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:05d75a668e9ea16f832390d22131fe1e8acc8389a694c8febc3e340b0f810b93", size = 873455, upload-time = "2026-01-14T23:15:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/66/0b/8b47fc2e8f97d9b4a851736f3890a5f786443aa8901061c55f24c955f45b/regex-2026.1.15-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d991483606f3dbec93287b9f35596f41aa2e92b7c2ebbb935b63f409e243c9af", size = 915007, upload-time = "2026-01-14T23:15:57.041Z" }, + { url = "https://files.pythonhosted.org/packages/c2/fa/97de0d681e6d26fabe71968dbee06dd52819e9a22fdce5dac7256c31ed84/regex-2026.1.15-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:194312a14819d3e44628a44ed6fea6898fdbecb0550089d84c403475138d0a09", size = 812794, upload-time = "2026-01-14T23:15:58.916Z" }, + { url = "https://files.pythonhosted.org/packages/22/38/e752f94e860d429654aa2b1c51880bff8dfe8f084268258adf9151cf1f53/regex-2026.1.15-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe2fda4110a3d0bc163c2e0664be44657431440722c5c5315c65155cab92f9e5", size = 781159, upload-time = "2026-01-14T23:16:00.817Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a7/d739ffaef33c378fc888302a018d7f81080393d96c476b058b8c64fd2b0d/regex-2026.1.15-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:124dc36c85d34ef2d9164da41a53c1c8c122cfb1f6e1ec377a1f27ee81deb794", size = 795558, upload-time = "2026-01-14T23:16:03.267Z" }, + { url = "https://files.pythonhosted.org/packages/3e/c4/542876f9a0ac576100fc73e9c75b779f5c31e3527576cfc9cb3009dcc58a/regex-2026.1.15-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1774cd1981cd212506a23a14dba7fdeaee259f5deba2df6229966d9911e767a", size = 868427, upload-time = "2026-01-14T23:16:05.646Z" }, + { url = "https://files.pythonhosted.org/packages/fc/0f/d5655bea5b22069e32ae85a947aa564912f23758e112cdb74212848a1a1b/regex-2026.1.15-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:b5f7d8d2867152cdb625e72a530d2ccb48a3d199159144cbdd63870882fb6f80", size = 769939, upload-time = "2026-01-14T23:16:07.542Z" }, + { url = "https://files.pythonhosted.org/packages/20/06/7e18a4fa9d326daeda46d471a44ef94201c46eaa26dbbb780b5d92cbfdda/regex-2026.1.15-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:492534a0ab925d1db998defc3c302dae3616a2fc3fe2e08db1472348f096ddf2", size = 854753, upload-time = "2026-01-14T23:16:10.395Z" }, + { url = "https://files.pythonhosted.org/packages/3b/67/dc8946ef3965e166f558ef3b47f492bc364e96a265eb4a2bb3ca765c8e46/regex-2026.1.15-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c661fc820cfb33e166bf2450d3dadbda47c8d8981898adb9b6fe24e5e582ba60", size = 799559, upload-time = "2026-01-14T23:16:12.347Z" }, + { url = "https://files.pythonhosted.org/packages/a5/61/1bba81ff6d50c86c65d9fd84ce9699dd106438ee4cdb105bf60374ee8412/regex-2026.1.15-cp313-cp313t-win32.whl", hash = "sha256:99ad739c3686085e614bf77a508e26954ff1b8f14da0e3765ff7abbf7799f952", size = 268879, upload-time = "2026-01-14T23:16:14.049Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5e/cef7d4c5fb0ea3ac5c775fd37db5747f7378b29526cc83f572198924ff47/regex-2026.1.15-cp313-cp313t-win_amd64.whl", hash = "sha256:32655d17905e7ff8ba5c764c43cb124e34a9245e45b83c22e81041e1071aee10", size = 280317, upload-time = "2026-01-14T23:16:15.718Z" }, + { url = "https://files.pythonhosted.org/packages/b4/52/4317f7a5988544e34ab57b4bde0f04944c4786128c933fb09825924d3e82/regex-2026.1.15-cp313-cp313t-win_arm64.whl", hash = "sha256:b2a13dd6a95e95a489ca242319d18fc02e07ceb28fa9ad146385194d95b3c829", size = 271551, upload-time = "2026-01-14T23:16:17.533Z" }, + { url = "https://files.pythonhosted.org/packages/52/0a/47fa888ec7cbbc7d62c5f2a6a888878e76169170ead271a35239edd8f0e8/regex-2026.1.15-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:d920392a6b1f353f4aa54328c867fec3320fa50657e25f64abf17af054fc97ac", size = 489170, upload-time = "2026-01-14T23:16:19.835Z" }, + { url = "https://files.pythonhosted.org/packages/ac/c4/d000e9b7296c15737c9301708e9e7fbdea009f8e93541b6b43bdb8219646/regex-2026.1.15-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b5a28980a926fa810dbbed059547b02783952e2efd9c636412345232ddb87ff6", size = 291146, upload-time = "2026-01-14T23:16:21.541Z" }, + { url = "https://files.pythonhosted.org/packages/f9/b6/921cc61982e538682bdf3bdf5b2c6ab6b34368da1f8e98a6c1ddc503c9cf/regex-2026.1.15-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:621f73a07595d83f28952d7bd1e91e9d1ed7625fb7af0064d3516674ec93a2a2", size = 288986, upload-time = "2026-01-14T23:16:23.381Z" }, + { url = "https://files.pythonhosted.org/packages/ca/33/eb7383dde0bbc93f4fb9d03453aab97e18ad4024ac7e26cef8d1f0a2cff0/regex-2026.1.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3d7d92495f47567a9b1669c51fc8d6d809821849063d168121ef801bbc213846", size = 799098, upload-time = "2026-01-14T23:16:25.088Z" }, + { url = "https://files.pythonhosted.org/packages/27/56/b664dccae898fc8d8b4c23accd853f723bde0f026c747b6f6262b688029c/regex-2026.1.15-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8dd16fba2758db7a3780a051f245539c4451ca20910f5a5e6ea1c08d06d4a76b", size = 864980, upload-time = "2026-01-14T23:16:27.297Z" }, + { url = "https://files.pythonhosted.org/packages/16/40/0999e064a170eddd237bae9ccfcd8f28b3aa98a38bf727a086425542a4fc/regex-2026.1.15-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1e1808471fbe44c1a63e5f577a1d5f02fe5d66031dcbdf12f093ffc1305a858e", size = 911607, upload-time = "2026-01-14T23:16:29.235Z" }, + { url = "https://files.pythonhosted.org/packages/07/78/c77f644b68ab054e5a674fb4da40ff7bffb2c88df58afa82dbf86573092d/regex-2026.1.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0751a26ad39d4f2ade8fe16c59b2bf5cb19eb3d2cd543e709e583d559bd9efde", size = 803358, upload-time = "2026-01-14T23:16:31.369Z" }, + { url = "https://files.pythonhosted.org/packages/27/31/d4292ea8566eaa551fafc07797961c5963cf5235c797cc2ae19b85dfd04d/regex-2026.1.15-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0f0c7684c7f9ca241344ff95a1de964f257a5251968484270e91c25a755532c5", size = 775833, upload-time = "2026-01-14T23:16:33.141Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b2/cff3bf2fea4133aa6fb0d1e370b37544d18c8350a2fa118c7e11d1db0e14/regex-2026.1.15-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:74f45d170a21df41508cb67165456538425185baaf686281fa210d7e729abc34", size = 788045, upload-time = "2026-01-14T23:16:35.005Z" }, + { url = "https://files.pythonhosted.org/packages/8d/99/2cb9b69045372ec877b6f5124bda4eb4253bc58b8fe5848c973f752bc52c/regex-2026.1.15-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f1862739a1ffb50615c0fde6bae6569b5efbe08d98e59ce009f68a336f64da75", size = 859374, upload-time = "2026-01-14T23:16:36.919Z" }, + { url = "https://files.pythonhosted.org/packages/09/16/710b0a5abe8e077b1729a562d2f297224ad079f3a66dce46844c193416c8/regex-2026.1.15-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:453078802f1b9e2b7303fb79222c054cb18e76f7bdc220f7530fdc85d319f99e", size = 763940, upload-time = "2026-01-14T23:16:38.685Z" }, + { url = "https://files.pythonhosted.org/packages/dd/d1/7585c8e744e40eb3d32f119191969b91de04c073fca98ec14299041f6e7e/regex-2026.1.15-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:a30a68e89e5a218b8b23a52292924c1f4b245cb0c68d1cce9aec9bbda6e2c160", size = 850112, upload-time = "2026-01-14T23:16:40.646Z" }, + { url = "https://files.pythonhosted.org/packages/af/d6/43e1dd85df86c49a347aa57c1f69d12c652c7b60e37ec162e3096194a278/regex-2026.1.15-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9479cae874c81bf610d72b85bb681a94c95722c127b55445285fb0e2c82db8e1", size = 789586, upload-time = "2026-01-14T23:16:42.799Z" }, + { url = "https://files.pythonhosted.org/packages/93/38/77142422f631e013f316aaae83234c629555729a9fbc952b8a63ac91462a/regex-2026.1.15-cp314-cp314-win32.whl", hash = "sha256:d639a750223132afbfb8f429c60d9d318aeba03281a5f1ab49f877456448dcf1", size = 271691, upload-time = "2026-01-14T23:16:44.671Z" }, + { url = "https://files.pythonhosted.org/packages/4a/a9/ab16b4649524ca9e05213c1cdbb7faa85cc2aa90a0230d2f796cbaf22736/regex-2026.1.15-cp314-cp314-win_amd64.whl", hash = "sha256:4161d87f85fa831e31469bfd82c186923070fc970b9de75339b68f0c75b51903", size = 280422, upload-time = "2026-01-14T23:16:46.607Z" }, + { url = "https://files.pythonhosted.org/packages/be/2a/20fd057bf3521cb4791f69f869635f73e0aaf2b9ad2d260f728144f9047c/regex-2026.1.15-cp314-cp314-win_arm64.whl", hash = "sha256:91c5036ebb62663a6b3999bdd2e559fd8456d17e2b485bf509784cd31a8b1705", size = 273467, upload-time = "2026-01-14T23:16:48.967Z" }, + { url = "https://files.pythonhosted.org/packages/ad/77/0b1e81857060b92b9cad239104c46507dd481b3ff1fa79f8e7f865aae38a/regex-2026.1.15-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:ee6854c9000a10938c79238de2379bea30c82e4925a371711af45387df35cab8", size = 492073, upload-time = "2026-01-14T23:16:51.154Z" }, + { url = "https://files.pythonhosted.org/packages/70/f3/f8302b0c208b22c1e4f423147e1913fd475ddd6230565b299925353de644/regex-2026.1.15-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c2b80399a422348ce5de4fe40c418d6299a0fa2803dd61dc0b1a2f28e280fcf", size = 292757, upload-time = "2026-01-14T23:16:53.08Z" }, + { url = "https://files.pythonhosted.org/packages/bf/f0/ef55de2460f3b4a6da9d9e7daacd0cb79d4ef75c64a2af316e68447f0df0/regex-2026.1.15-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:dca3582bca82596609959ac39e12b7dad98385b4fefccb1151b937383cec547d", size = 291122, upload-time = "2026-01-14T23:16:55.383Z" }, + { url = "https://files.pythonhosted.org/packages/cf/55/bb8ccbacabbc3a11d863ee62a9f18b160a83084ea95cdfc5d207bfc3dd75/regex-2026.1.15-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef71d476caa6692eea743ae5ea23cde3260677f70122c4d258ca952e5c2d4e84", size = 807761, upload-time = "2026-01-14T23:16:57.251Z" }, + { url = "https://files.pythonhosted.org/packages/8f/84/f75d937f17f81e55679a0509e86176e29caa7298c38bd1db7ce9c0bf6075/regex-2026.1.15-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c243da3436354f4af6c3058a3f81a97d47ea52c9bd874b52fd30274853a1d5df", size = 873538, upload-time = "2026-01-14T23:16:59.349Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d9/0da86327df70349aa8d86390da91171bd3ca4f0e7c1d1d453a9c10344da3/regex-2026.1.15-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8355ad842a7c7e9e5e55653eade3b7d1885ba86f124dd8ab1f722f9be6627434", size = 915066, upload-time = "2026-01-14T23:17:01.607Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5e/f660fb23fc77baa2a61aa1f1fe3a4eea2bbb8a286ddec148030672e18834/regex-2026.1.15-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f192a831d9575271a22d804ff1a5355355723f94f31d9eef25f0d45a152fdc1a", size = 812938, upload-time = "2026-01-14T23:17:04.366Z" }, + { url = "https://files.pythonhosted.org/packages/69/33/a47a29bfecebbbfd1e5cd3f26b28020a97e4820f1c5148e66e3b7d4b4992/regex-2026.1.15-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:166551807ec20d47ceaeec380081f843e88c8949780cd42c40f18d16168bed10", size = 781314, upload-time = "2026-01-14T23:17:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/65/ec/7ec2bbfd4c3f4e494a24dec4c6943a668e2030426b1b8b949a6462d2c17b/regex-2026.1.15-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f9ca1cbdc0fbfe5e6e6f8221ef2309988db5bcede52443aeaee9a4ad555e0dac", size = 795652, upload-time = "2026-01-14T23:17:08.521Z" }, + { url = "https://files.pythonhosted.org/packages/46/79/a5d8651ae131fe27d7c521ad300aa7f1c7be1dbeee4d446498af5411b8a9/regex-2026.1.15-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b30bcbd1e1221783c721483953d9e4f3ab9c5d165aa709693d3f3946747b1aea", size = 868550, upload-time = "2026-01-14T23:17:10.573Z" }, + { url = "https://files.pythonhosted.org/packages/06/b7/25635d2809664b79f183070786a5552dd4e627e5aedb0065f4e3cf8ee37d/regex-2026.1.15-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2a8d7b50c34578d0d3bf7ad58cde9652b7d683691876f83aedc002862a35dc5e", size = 769981, upload-time = "2026-01-14T23:17:12.871Z" }, + { url = "https://files.pythonhosted.org/packages/16/8b/fc3fcbb2393dcfa4a6c5ffad92dc498e842df4581ea9d14309fcd3c55fb9/regex-2026.1.15-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9d787e3310c6a6425eb346be4ff2ccf6eece63017916fd77fe8328c57be83521", size = 854780, upload-time = "2026-01-14T23:17:14.837Z" }, + { url = "https://files.pythonhosted.org/packages/d0/38/dde117c76c624713c8a2842530be9c93ca8b606c0f6102d86e8cd1ce8bea/regex-2026.1.15-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:619843841e220adca114118533a574a9cd183ed8a28b85627d2844c500a2b0db", size = 799778, upload-time = "2026-01-14T23:17:17.369Z" }, + { url = "https://files.pythonhosted.org/packages/e3/0d/3a6cfa9ae99606afb612d8fb7a66b245a9d5ff0f29bb347c8a30b6ad561b/regex-2026.1.15-cp314-cp314t-win32.whl", hash = "sha256:e90b8db97f6f2c97eb045b51a6b2c5ed69cedd8392459e0642d4199b94fabd7e", size = 274667, upload-time = "2026-01-14T23:17:19.301Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b2/297293bb0742fd06b8d8e2572db41a855cdf1cae0bf009b1cb74fe07e196/regex-2026.1.15-cp314-cp314t-win_amd64.whl", hash = "sha256:5ef19071f4ac9f0834793af85bd04a920b4407715624e40cb7a0631a11137cdf", size = 284386, upload-time = "2026-01-14T23:17:21.231Z" }, + { url = "https://files.pythonhosted.org/packages/95/e4/a3b9480c78cf8ee86626cb06f8d931d74d775897d44201ccb813097ae697/regex-2026.1.15-cp314-cp314t-win_arm64.whl", hash = "sha256:ca89c5e596fc05b015f27561b3793dc2fa0917ea0d7507eebb448efd35274a70", size = 274837, upload-time = "2026-01-14T23:17:23.146Z" }, +] + +[[package]] +name = "requests" +version = "2.34.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" }, +] + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, +] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", size = 206888, upload-time = "2023-05-01T04:11:33.229Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481, upload-time = "2023-05-01T04:11:28.427Z" }, +] + +[[package]] +name = "rich" +version = "14.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/67/cae617f1351490c25a4b8ac3b8b63a4dda609295d8222bad12242dfdc629/rich-14.3.4.tar.gz", hash = "sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9", size = 230524, upload-time = "2026-04-11T02:57:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/76/6d163cfac87b632216f71879e6b2cf17163f773ff59c00b5ff4900a80fa3/rich-14.3.4-py3-none-any.whl", hash = "sha256:07e7adb4690f68864777b1450859253bed81a99a31ac321ac1817b2313558952", size = 310480, upload-time = "2026-04-11T02:57:47.484Z" }, +] + +[[package]] +name = "rpds-py" +version = "2026.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" }, + { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" }, + { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" }, + { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" }, + { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" }, + { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" }, + { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" }, + { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" }, + { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" }, + { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" }, + { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" }, + { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" }, + { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" }, + { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" }, + { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" }, + { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" }, + { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" }, + { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" }, + { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" }, + { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" }, + { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" }, + { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" }, + { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" }, + { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" }, + { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" }, + { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" }, + { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" }, + { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" }, + { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" }, + { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" }, + { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" }, + { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" }, + { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" }, + { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" }, + { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" }, + { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" }, + { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" }, + { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" }, + { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" }, + { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" }, + { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" }, + { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" }, + { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" }, + { url = "https://files.pythonhosted.org/packages/d4/6f/19c1918a4b590d8de87e712e4abe4b3875771eff60216fb6153cf6665c68/rpds_py-2026.5.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:1f2c391c3059798093b65df23aca2cac150460ae9c630d99dec83d703d9485b9", size = 349756, upload-time = "2026-05-28T12:00:20.217Z" }, + { url = "https://files.pythonhosted.org/packages/e5/60/a06fe7da34eca79dacbf958a2ba0c6eea85bc2b29de20080bf40f72f66fa/rpds_py-2026.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:413b424f7c4ee65ab5e5be91f5731be0f8b41a1ee2b12dfe810d716312e95a78", size = 343831, upload-time = "2026-05-28T12:00:21.711Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ec/b2333b97b90e2a6ef6ca8ad386ee284968e74bcfe113b3f1a8d9036429a9/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c595a1d9255dce0599e13130d1440ab2506654f2b50294226ee06402f8fef63", size = 375127, upload-time = "2026-05-28T12:00:23.326Z" }, + { url = "https://files.pythonhosted.org/packages/14/7f/e00aae54067f2b488c4637961d5f58204d470795fc791085fa3f15060d2e/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c27c5f6102eac8c03e7595a00827a53b271ba40a53b59ff8709170e0855ea4a", size = 379034, upload-time = "2026-05-28T12:00:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/be/cc/423999bbb8ae8dc93c77fc1d5e984ade5eb89d237d3bb884ccfa72ae2890/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c7fcf61d44cacecaf3aea542b0e053db77972a4573e7ceda16fb2b399161195", size = 490823, upload-time = "2026-05-28T12:00:26.676Z" }, + { url = "https://files.pythonhosted.org/packages/0f/aa/c671bf660f12e68d3c52ff86c7066ed1372df5a0f4f2ff584e419b8207e7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c817a189d4ee14290420e5ff051e4dd6baa13f3edf84685071dee07a6d538ee", size = 388144, upload-time = "2026-05-28T12:00:28.577Z" }, + { url = "https://files.pythonhosted.org/packages/19/c8/d63bb75b68afe77b229e3021c6031bcaf01da5db5b0e69d0d10f9ba679a7/rpds_py-2026.5.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21846aac0ed2e0589f38c12dc44e77bb64e494b771eadbcf169cba00566ba7ba", size = 371959, upload-time = "2026-05-28T12:00:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/82/35/c51122014d8274ff37dc606d60049c3db7d83da02b5b282511e5a906a9a6/rpds_py-2026.5.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b317c87a13f769a4e787819bd508aaa5d69aa09b0880de9af6d3a8a54571cdec", size = 383558, upload-time = "2026-05-28T12:00:31.764Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f9/2790cb99c136a5363acdeacf5c27c56f3de0d4118a1f48fca83404c99c89/rpds_py-2026.5.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce87129d9f2c14fa6c4a8601fb80eb4488c80d38a20cd13758ef11123e14995d", size = 402789, upload-time = "2026-05-28T12:00:33.247Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1b/e4fb584f8c75d35c38150ff6a332cda949e6f97acba1f4fd123b14ab56fe/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9cdddb6c1207d284d94fd1530adf57fbd797fe7c4b8704ba85f49414f2557e7d", size = 551405, upload-time = "2026-05-28T12:00:34.819Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f7/a6731b4216cb3793ea1af5391da240f5683dacc0d13e034fe5fc3503f240/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:4e237e139f94d3c036fd28eb9f564c99055476ff4ff05cd42be55ce349b5aa02", size = 616975, upload-time = "2026-05-28T12:00:36.268Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/2e051a81d95d8e63f4b35a1c463a87e8766bc3d083c067c5dfb6bf220747/rpds_py-2026.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ed0954b524873214369184a9c82b0eaa45a3fbb9a798cd95b17e0d98499e7ea0", size = 578701, upload-time = "2026-05-28T12:00:37.82Z" }, + { url = "https://files.pythonhosted.org/packages/65/56/b5f6fdb2083e32bca8a8993d89e70db114b4756c9e2c38421328126689d2/rpds_py-2026.5.1-cp314-cp314-win32.whl", hash = "sha256:2d88621d6a7d4dfa633d21abe90f280bb205274e16b1d1e61c6ad4640b2453b7", size = 209806, upload-time = "2026-05-28T12:00:39.492Z" }, + { url = "https://files.pythonhosted.org/packages/fb/80/65a5aa96c155e611d1ed844e4e1f57f3e36b021f396d9f8585d756e6b90d/rpds_py-2026.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:cef8ac28d26f4dda3533060c20fbf80a325458fa9fd23ea72a73cdfa8e978838", size = 225985, upload-time = "2026-05-28T12:00:40.94Z" }, + { url = "https://files.pythonhosted.org/packages/27/7c/ad185212e87b05f196daef92bc5f3caf07298eb47c295b5585c3dd3093ac/rpds_py-2026.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:eaaea962c68cdc68d4a533ba985ab8e9484277910bbfaa2ab3ef7732667bfed8", size = 221219, upload-time = "2026-05-28T12:00:43.15Z" }, + { url = "https://files.pythonhosted.org/packages/23/58/e14ae18759020334646b031e708ab4158d653a938822bfb7b95ef2e93aa3/rpds_py-2026.5.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:21942f52dbbd5f8758bf021213d28bd45c39e873e65e2407faf5f1846f5761ad", size = 352148, upload-time = "2026-05-28T12:00:44.638Z" }, + { url = "https://files.pythonhosted.org/packages/31/9b/5f4a1e2f960bca3ac5d052b139dd31eed97b259f9d909173821760d542e8/rpds_py-2026.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f414556f6e3958300ff941e40c9f97e3dc9774ddd1b3434c475d73dd354bbed3", size = 345196, upload-time = "2026-05-28T12:00:46.14Z" }, + { url = "https://files.pythonhosted.org/packages/1a/71/1d9574d6a2fa20ab60eaa55c7467f5aa20cbc770f341a05f09c0876f59e2/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef1013a8625c74043210190b246f5b1551e09757c1f356c6e4160ef96c5bc081", size = 374981, upload-time = "2026-05-28T12:00:47.531Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9a/37e99f4915a80aa71670263c1267f7ae0af95f53a3f61e6c3bdc016d4515/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cc68e231a77a5f0d774ae278a1f8e55c0456501820847c1e4efb3829f3441df6", size = 379961, upload-time = "2026-05-28T12:00:49.216Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ff/6e73f74b89d2e0715e0fc86b7dde893f9a61ae2f9b256ff3bdfe41ac4e94/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9baffb505aff33acc69b422a19f77806680f3c8632227d79f48de8a810d1c2c5", size = 495965, upload-time = "2026-05-28T12:00:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e0/425faba25f59d74d4638b267f7c7a80e8649d2ef4db10a19b0c4a71e6e6f/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b8d2f912928d426e8cfa396f7f3f8d29a59e6689c86dcca3c420730c1096322b", size = 389526, upload-time = "2026-05-28T12:00:52.77Z" }, + { url = "https://files.pythonhosted.org/packages/c6/76/7a41960e3fddae47fab43a28684d5da981401dffd88253de0944148654cb/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90f628283be835db980c941767d41c9a27b5239e54ba0a9c1335247e82406964", size = 376190, upload-time = "2026-05-28T12:00:54.215Z" }, + { url = "https://files.pythonhosted.org/packages/27/60/5f38dc70824fc6951b51d35377e577a3a3a4c81a6769cc5a2de25ebe0ad1/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:1ebb2f0ab7e16132995a72de805170e0203df0c3dd22e1ef1cd1fdd90bd7a131", size = 383921, upload-time = "2026-05-28T12:00:55.673Z" }, + { url = "https://files.pythonhosted.org/packages/60/1a/d60a38caa1505f4b9483c3fbbde12c94e1079154f4f401a6da96f7e77621/rpds_py-2026.5.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3df3d16ded76f1f8c9cdebd0e1ea55fdf4c23b812de189814da7cf229c22a81", size = 404766, upload-time = "2026-05-28T12:00:57.518Z" }, + { url = "https://files.pythonhosted.org/packages/87/ff/602fd3f174d6425f0bce05ad0dfbec0e96b38d0f7d08a79af5aa20083885/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9af8905b8f854990e40d5206aa5ac58d9b0fe0b7f351ff2bb086c20f6c8c6a47", size = 551343, upload-time = "2026-05-28T12:00:58.978Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c1/1be13327acdbead3eca1fde03b6a34dbb011f1e864e217f0d32cc1779a7f/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:036a36a87fb1cd3b214d11c4b3c4f7d2ddad933625dca1c900b56a057c07740a", size = 618502, upload-time = "2026-05-28T12:01:00.656Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" }, + { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" }, + { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" }, + { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576, upload-time = "2026-05-28T12:01:06.722Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640, upload-time = "2026-05-28T12:01:08.441Z" }, + { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322, upload-time = "2026-05-28T12:01:09.934Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066, upload-time = "2026-05-28T12:01:11.48Z" }, + { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586, upload-time = "2026-05-28T12:01:13.051Z" }, + { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415, upload-time = "2026-05-28T12:01:14.631Z" }, + { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427, upload-time = "2026-05-28T12:01:16.153Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615, upload-time = "2026-05-28T12:01:17.809Z" }, + { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786, upload-time = "2026-05-28T12:01:19.419Z" }, + { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583, upload-time = "2026-05-28T12:01:21.013Z" }, + { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941, upload-time = "2026-05-28T12:01:22.548Z" }, + { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349, upload-time = "2026-05-28T12:01:24.118Z" }, + { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922, upload-time = "2026-05-28T12:01:25.522Z" }, + { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003, upload-time = "2026-05-28T12:01:27.062Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245, upload-time = "2026-05-28T12:01:28.51Z" }, + { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015, upload-time = "2026-05-28T12:01:30.214Z" }, + { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016, upload-time = "2026-05-28T12:01:31.656Z" }, + { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775, upload-time = "2026-05-28T12:01:33.136Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270, upload-time = "2026-05-28T12:01:34.574Z" }, + { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285, upload-time = "2026-05-28T12:01:36.127Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581, upload-time = "2026-05-28T12:01:37.635Z" }, + { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041, upload-time = "2026-05-28T12:01:39.307Z" }, + { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946, upload-time = "2026-05-28T12:01:41.043Z" }, + { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526, upload-time = "2026-05-28T12:01:43.032Z" }, + { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165, upload-time = "2026-05-28T12:01:44.648Z" }, + { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778, upload-time = "2026-05-28T12:01:46.337Z" }, + { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839, upload-time = "2026-05-28T12:01:48.109Z" }, + { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866, upload-time = "2026-05-28T12:01:49.648Z" }, + { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" }, + { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" }, + { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" }, + { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" }, + { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" }, + { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" }, + { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" }, + { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" }, + { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, +] + +[[package]] +name = "rsa" +version = "4.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/8a/22b7beea3ee0d44b1916c0c1cb0ee3af23b700b6da9f04991899d0c555d4/rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75", size = 29034, upload-time = "2025-04-16T09:51:18.218Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762", size = 34696, upload-time = "2025-04-16T09:51:17.142Z" }, +] + +[[package]] +name = "shellingham" +version = "1.5.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.51" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/02/f1/a7a892f18d4d224e6b26f706531eafccc41e37594d37d304786969ee13cb/sqlalchemy-2.0.51.tar.gz", hash = "sha256:804dccd8a4a6242c4e30ad961e540e18a588f6527202f2d6791b01845d59fdc9", size = 9912201, upload-time = "2026-06-15T15:41:20.012Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/69/a67c69e5f28fc9c99d6f7bd60bd50e91f2fed2423e3b30fb228fa00e51f3/sqlalchemy-2.0.51-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1aa10c0daee6705294d181daadaa793221e1a59ed55000a3fab1d42b088ce4ba", size = 2161838, upload-time = "2026-06-15T16:05:17.144Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a4/c8c22b8438bddc0a030157c6ec0f6ef97b3c38effa444bdab2a27af04090/sqlalchemy-2.0.51-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5b2ed6d828f1f09bd812861f4f59ca3bc3803f9df871f4555187f0faf018604", size = 3319402, upload-time = "2026-06-15T16:10:40.002Z" }, + { url = "https://files.pythonhosted.org/packages/90/54/44012d32fd77d991256d2ff793ba3807c51d40cb27a85b4796224f6744df/sqlalchemy-2.0.51-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:436728ce18a80f6951a1e11cc6112c2ede9faf20766f1a26195a7c441ca12dbd", size = 3319675, upload-time = "2026-06-15T16:12:25.658Z" }, + { url = "https://files.pythonhosted.org/packages/29/a5/de0592acaf5906cd7430874392d6f7e8b4a7c8437610953ee2d1501c0b44/sqlalchemy-2.0.51-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dc261707bf5739aea8a541593f3cc1d463c2701fb05fbcbba0ce031b69a21260", size = 3270777, upload-time = "2026-06-15T16:10:42.125Z" }, + { url = "https://files.pythonhosted.org/packages/cb/14/a44c90739c780b362238e4ac3cb19dd0ca40d13e6ddc5daa112166ddab4f/sqlalchemy-2.0.51-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a6d26094615306d116dd5e4a51b0304c99dd2356fc569eed6922a80a6bd3b265", size = 3293940, upload-time = "2026-06-15T16:12:27.156Z" }, + { url = "https://files.pythonhosted.org/packages/65/eb/fbd0f206a330e66f8c602a99c37c4e731f107faed62954b41b01f16dd9d9/sqlalchemy-2.0.51-cp311-cp311-win32.whl", hash = "sha256:ca8435d13829b92f4a97362d91975154a4015db3a2634154e1754e9a915e6b86", size = 2121183, upload-time = "2026-06-15T16:13:29.905Z" }, + { url = "https://files.pythonhosted.org/packages/ad/fd/005bf80f3cf6e5c62b5dd68616280f51cd012c60840fa74781b3ed7b1623/sqlalchemy-2.0.51-cp311-cp311-win_amd64.whl", hash = "sha256:4a011ea4510683319ce4ed274b56ee05194b39b6da9d09ca7a39388f0fa84dcc", size = 2145796, upload-time = "2026-06-15T16:13:31.283Z" }, + { url = "https://files.pythonhosted.org/packages/d5/70/e868bc5412acd101a8280f25c95f10eeae0771c4eb806b02491142810ee8/sqlalchemy-2.0.51-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d78702b26ba1c18b2d0fb2ea940ba7f17a9581b42e8361ff93920ebbee1235a", size = 2160291, upload-time = "2026-06-15T16:08:48.918Z" }, + { url = "https://files.pythonhosted.org/packages/e5/1c/71ee0f8a6b9d7316a1ccd30430b4c62b6c2e36adc96017a4e3a72dce49d6/sqlalchemy-2.0.51-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581921d849d6e6f994d560389192955e80e2950e18fcdfe2ccea863e01158e6e", size = 3343835, upload-time = "2026-06-15T16:19:42.613Z" }, + { url = "https://files.pythonhosted.org/packages/2b/7c/7ab9f9aadc5944fdd06612484ed7918fe376ad871a5f50404dc1536e0194/sqlalchemy-2.0.51-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1d21ce524ab86c23046e992a5b81cb54c21079c6df6e78b8fc77d77cac70a6b9", size = 3358470, upload-time = "2026-06-15T16:26:38.011Z" }, + { url = "https://files.pythonhosted.org/packages/d0/7d/ff77169fee6186de145a7f2b87006c39638391130abbab2b1f63ac6ea583/sqlalchemy-2.0.51-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c5d98a2709840027f5a347c3af0a7c3d5f6c1ff93af2ca1c54494e23cba8f389", size = 3289874, upload-time = "2026-06-15T16:19:45.212Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3b/6c505903710d781b55bc3141ee34a062bf9745a6b5bc7333305b9ed63b33/sqlalchemy-2.0.51-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1181256e0f16479691b5616d36375dc2620ad8332b25978763c3d206ad3f3f1d", size = 3321692, upload-time = "2026-06-15T16:26:39.747Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b7/c5ffe50aa2f4d947c9250e1519d939260329a07fe6272edfccd784b3d007/sqlalchemy-2.0.51-cp312-cp312-win32.whl", hash = "sha256:9f380393be5abeb6815f68fd39271b95127173511b6706b0a630a9995d53f8f5", size = 2119674, upload-time = "2026-06-15T16:23:09.543Z" }, + { url = "https://files.pythonhosted.org/packages/25/dc/46a65916af68a06ef6b972c6050ba4c8f97070fe3fb33097d34229d9bef6/sqlalchemy-2.0.51-cp312-cp312-win_amd64.whl", hash = "sha256:2cf39aabdf48e87c1c2c2ed6d20d33ffa0733b3071ce9c5f66357947dd009080", size = 2146670, upload-time = "2026-06-15T16:23:11.048Z" }, + { url = "https://files.pythonhosted.org/packages/54/fe/a210d52fd1a90ecfae8a78e9d8b27e18d733d60818a8bf250ff690b75120/sqlalchemy-2.0.51-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c2056838b6685b72fdb36c99996cf862753461a62f2e84f4196371d3b2d6a07", size = 2157184, upload-time = "2026-06-15T16:08:50.374Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/2dce8369b199cb855110e056032f94a9f66dacc2237d3d39c115a86eac56/sqlalchemy-2.0.51-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:483b11bd46bf35fc14c52faf338b04300c9e6ce554bce9b11be85bfec3bc3195", size = 3284735, upload-time = "2026-06-15T16:19:46.934Z" }, + { url = "https://files.pythonhosted.org/packages/53/ff/dbc495b8a14da840faffb353857a72d4190113cac33727906fb997047f0f/sqlalchemy-2.0.51-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1bed1ee8b01da6088210aa9412023326fb98a599ba502e6118308601dcbef77f", size = 3302756, upload-time = "2026-06-15T16:26:41.336Z" }, + { url = "https://files.pythonhosted.org/packages/cf/d5/fde8f4dddcf518ee15ab35a7c6a28acc32c8ba548d1d2aa451f96e6dbb0b/sqlalchemy-2.0.51-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:72ca54c952107ba5cd58854b67a5a6268631289d21651a1235396f3b98b47400", size = 3232055, upload-time = "2026-06-15T16:19:49.286Z" }, + { url = "https://files.pythonhosted.org/packages/67/d1/43d3a0ac955a58601c24fa23038b1c55ee3a1ec02c0f96ebb1eae2bcf614/sqlalchemy-2.0.51-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b3e693d15533a45cd5906f0589f9c35090bef6ef45bf1e8195c424aa0ae06a8d", size = 3269850, upload-time = "2026-06-15T16:26:43.017Z" }, + { url = "https://files.pythonhosted.org/packages/94/df/de669c7054cd47c4439ac34b1b2ee8b804a794791fbb10720e997a2c87c7/sqlalchemy-2.0.51-cp313-cp313-win32.whl", hash = "sha256:b93ab07b5292dbe7e6b8da89475275e7042744283921344b56105f3eeb0f828b", size = 2117721, upload-time = "2026-06-15T16:23:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/d0/8a/403c51d064196bae20a0bc2476577f83a3f8dd299719a97417086b7f2ec5/sqlalchemy-2.0.51-cp313-cp313-win_amd64.whl", hash = "sha256:0f053118c30e53161857a953e4de667d90e274980dccbe5dd3829bbbeece72a5", size = 2143615, upload-time = "2026-06-15T16:23:13.906Z" }, + { url = "https://files.pythonhosted.org/packages/b1/49/a739be2e1d02a96a658eb71ab45d921c874249252358ad24a5bffdd02525/sqlalchemy-2.0.51-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6ea306caaae6bd5afd0a46050003c88f6bf33227377a49298c498c3cb88ff491", size = 2158999, upload-time = "2026-06-15T16:08:51.759Z" }, + { url = "https://files.pythonhosted.org/packages/23/6b/2e0e38cf75c8780eca78d9b2e78164f8bcfd70125e5caa588ff5cbb9c9f4/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c45a496d6bc05dec41dcd4c3a2b183723f47473255c159cd80b503c8f246424d", size = 3282539, upload-time = "2026-06-15T16:19:51.065Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a1/e77854cb5336fd37dc3c6ae3b71de242c98caac5725120be0b526b31cbd0/sqlalchemy-2.0.51-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4004ada0aafe8ae1991b2cd1d99c6d9146126e123bd6f883c260d974aa012e54", size = 3287545, upload-time = "2026-06-15T16:26:44.735Z" }, + { url = "https://files.pythonhosted.org/packages/f6/ab/9e17272fd4dac8df3b83c4fbe52b998a1c9d89a843c8c35ff29b74ff7364/sqlalchemy-2.0.51-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0f6bcad487aee1c638d707235682fc96f741de00663619881ab235400d03289e", size = 3230929, upload-time = "2026-06-15T16:19:52.625Z" }, + { url = "https://files.pythonhosted.org/packages/02/3c/52f408ea701781caee975606beccc48845f2aee8711ac29843d612c0306c/sqlalchemy-2.0.51-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:39a76529db6305693d8d4affa58ad5b5e2e18edd62daea628b29b97930b3513d", size = 3252888, upload-time = "2026-06-15T16:26:46.454Z" }, + { url = "https://files.pythonhosted.org/packages/24/16/3efd2ee6bc4ca4693a30a1dd17a91b606cae15d517d2a4746611d9b73ce8/sqlalchemy-2.0.51-cp314-cp314-win32.whl", hash = "sha256:08a204d8b5638717c26a24df18fcf40af45a6b22e35b70b1d62f0113c2e278e8", size = 2120551, upload-time = "2026-06-15T16:23:15.629Z" }, + { url = "https://files.pythonhosted.org/packages/7b/78/55b12e70f45bccc40d9e483925c065027b3b98ea4cbbdf6f8c2546feaf6c/sqlalchemy-2.0.51-cp314-cp314-win_amd64.whl", hash = "sha256:96747bfbadb055466e5b46d572618170046b45ce5a4879167f50d70a5319a499", size = 2146318, upload-time = "2026-06-15T16:23:17.108Z" }, + { url = "https://files.pythonhosted.org/packages/21/db/a9574ed40fed418924b1b1a3e54f47ee3963053b3d3d325a0d36b41f2c08/sqlalchemy-2.0.51-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1a213be1fcd5e49d9904c3b9939211ded90bc2a64e93f4c01963474285de", size = 2178920, upload-time = "2026-06-15T15:59:56.285Z" }, + { url = "https://files.pythonhosted.org/packages/bf/90/a1bb5c7cbba76b7bc1fbd586d0a5479a7bc9c27b4a8298f22ec9423b2bb3/sqlalchemy-2.0.51-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7c6b36ed71f41942bdcd2ad2522be46bfce09d5705be5640ecf19bbc7660e4b7", size = 3566534, upload-time = "2026-06-15T15:58:35.024Z" }, + { url = "https://files.pythonhosted.org/packages/15/4b/481f1fed30e0e9e8dd24aecbb49f29eb57fe7657ece5cf06ee9b84bb97d8/sqlalchemy-2.0.51-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c2c62877097e1a0db401fba5cb4debee33265e5b2a55c4ccb489c02c53b4f72", size = 3535844, upload-time = "2026-06-15T16:02:43.973Z" }, + { url = "https://files.pythonhosted.org/packages/02/71/0aa64aeda645510af0a43f7d9ee70932f0d1dc4263aed34c50ee891d9df3/sqlalchemy-2.0.51-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0378d055e9e8cd6ce4d8dff683bdd3d7d413533c4ee51d67a2b1e0f9eacc0f23", size = 3475355, upload-time = "2026-06-15T15:58:36.592Z" }, + { url = "https://files.pythonhosted.org/packages/05/db/6061db32316446135a3abae5f308d144ab988a34234726042da3e58b1c63/sqlalchemy-2.0.51-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6e46fc36029eff666391e0531e5387b62ce6c4f1d8e50b3fb3099eaca1b42522", size = 3486591, upload-time = "2026-06-15T16:02:45.346Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c9/f14fdf71bb8957e0c7e39db69bbdf12b5c80f4ef775fdfa127bf4e0d6760/sqlalchemy-2.0.51-cp314-cp314t-win32.whl", hash = "sha256:9161cfc9efce70d1715f47d6ff40f79c6778c00d53be4fbc09d70301e4b83ba7", size = 2151313, upload-time = "2026-06-15T16:03:39.127Z" }, + { url = "https://files.pythonhosted.org/packages/6a/c6/673e618e6f4f297e126d9b56ea2f6478708f6c1af4e3223835c22e2c3697/sqlalchemy-2.0.51-cp314-cp314t-win_amd64.whl", hash = "sha256:159bb6ba32059f57ad7375a8f50d844dd2f19d14954ecf820cd33e20debd46b2", size = 2186280, upload-time = "2026-06-15T16:03:40.569Z" }, + { url = "https://files.pythonhosted.org/packages/e2/22/dbf013a12ec759e54a34a119e9e217435b3f71b2dd5c61a7ade0a25dae87/sqlalchemy-2.0.51-py3-none-any.whl", hash = "sha256:bb024d8b621d0be75f4f44ecc7c950450026e76d66dc8f791bb5331d7fed59d5", size = 1944334, upload-time = "2026-06-15T16:09:22.418Z" }, +] + +[package.optional-dependencies] +asyncio = [ + { name = "greenlet" }, +] + +[[package]] +name = "sse-starlette" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/db/3c/fa6517610dc641262b77cc7bf994ecd17465812c1b0585fe33e11be758ab/sse_starlette-3.0.3.tar.gz", hash = "sha256:88cfb08747e16200ea990c8ca876b03910a23b547ab3bd764c0d8eb81019b971", size = 21943, upload-time = "2025-10-30T18:44:20.117Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/a0/984525d19ca5c8a6c33911a0c164b11490dd0f90ff7fd689f704f84e9a11/sse_starlette-3.0.3-py3-none-any.whl", hash = "sha256:af5bf5a6f3933df1d9c7f8539633dc8444ca6a97ab2e2a7cd3b6e431ac03a431", size = 11765, upload-time = "2025-10-30T18:44:18.834Z" }, +] + +[[package]] +name = "starlette" +version = "0.46.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/20/08dfcd9c983f6a6f4a1000d934b9e6d626cff8d2eeb77a89a68eef20a2b7/starlette-0.46.2.tar.gz", hash = "sha256:7f7361f34eed179294600af672f565727419830b54b7b084efe44bb82d2fccd5", size = 2580846, upload-time = "2025-04-13T13:56:17.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/0c/9d30a4ebeb6db2b25a841afbb80f6ef9a854fc3b41be131d249a977b4959/starlette-0.46.2-py3-none-any.whl", hash = "sha256:595633ce89f8ffa71a015caed34a5b2dc1c0cdb3f0f1fbd1e69339cf2abeec35", size = 72037, upload-time = "2025-04-13T13:56:16.21Z" }, +] + +[[package]] +name = "tenacity" +version = "9.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/c6/ee486fd809e357697ee8a44d3d69222b344920433d3b6666ccd9b374630c/tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a", size = 49413, upload-time = "2026-02-07T10:45:33.841Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" }, +] + +[[package]] +name = "textual" +version = "8.2.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py", extra = ["linkify"] }, + { name = "mdit-py-plugins" }, + { name = "platformdirs" }, + { name = "pygments" }, + { name = "rich" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/7a/c519db0aba5024f86e71e9631810bfdd6866ed2c8695bd7fa34b90e7ef59/textual-8.2.7.tar.gz", hash = "sha256:658f568ff81e30ed43890c3e07520390e5cf1b4763822006e060656b0a88f105", size = 1859249, upload-time = "2026-05-19T10:52:49.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/f5/c1e18bc0707300a0e90204343abbf7d7acd6fb7ebe03a6d4893b99a234b8/textual-8.2.7-py3-none-any.whl", hash = "sha256:4caaa13a90bc4cf9c6c862c067ccd34fe84e9c161710a2a907a8026313b6bd73", size = 731129, upload-time = "2026-05-19T10:52:51.773Z" }, +] + +[[package]] +name = "tiktoken" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/46/21ea696b21f1d6d1efec8639c204bdf20fde8bafb351e1355c72c5d7de52/tiktoken-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6e227c7f96925003487c33b1b32265fad2fbcec2b7cf4817afb76d416f40f6bb", size = 1051565, upload-time = "2025-10-06T20:21:44.566Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d9/35c5d2d9e22bb2a5f74ba48266fb56c63d76ae6f66e02feb628671c0283e/tiktoken-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c06cf0fcc24c2cb2adb5e185c7082a82cba29c17575e828518c2f11a01f445aa", size = 995284, upload-time = "2025-10-06T20:21:45.622Z" }, + { url = "https://files.pythonhosted.org/packages/01/84/961106c37b8e49b9fdcf33fe007bb3a8fdcc380c528b20cc7fbba80578b8/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:f18f249b041851954217e9fd8e5c00b024ab2315ffda5ed77665a05fa91f42dc", size = 1129201, upload-time = "2025-10-06T20:21:47.074Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/3d9275198e067f8b65076a68894bb52fd253875f3644f0a321a720277b8a/tiktoken-0.12.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:47a5bc270b8c3db00bb46ece01ef34ad050e364b51d406b6f9730b64ac28eded", size = 1152444, upload-time = "2025-10-06T20:21:48.139Z" }, + { url = "https://files.pythonhosted.org/packages/78/db/a58e09687c1698a7c592e1038e01c206569b86a0377828d51635561f8ebf/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:508fa71810c0efdcd1b898fda574889ee62852989f7c1667414736bcb2b9a4bd", size = 1195080, upload-time = "2025-10-06T20:21:49.246Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/a9e4d2bf91d515c0f74afc526fd773a812232dd6cda33ebea7f531202325/tiktoken-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1af81a6c44f008cba48494089dd98cccb8b313f55e961a52f5b222d1e507967", size = 1255240, upload-time = "2025-10-06T20:21:50.274Z" }, + { url = "https://files.pythonhosted.org/packages/9d/15/963819345f1b1fb0809070a79e9dd96938d4ca41297367d471733e79c76c/tiktoken-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e68e3e593637b53e56f7237be560f7a394451cb8c11079755e80ae64b9e6def", size = 879422, upload-time = "2025-10-06T20:21:51.734Z" }, + { url = "https://files.pythonhosted.org/packages/a4/85/be65d39d6b647c79800fd9d29241d081d4eeb06271f383bb87200d74cf76/tiktoken-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b97f74aca0d78a1ff21b8cd9e9925714c15a9236d6ceacf5c7327c117e6e21e8", size = 1050728, upload-time = "2025-10-06T20:21:52.756Z" }, + { url = "https://files.pythonhosted.org/packages/4a/42/6573e9129bc55c9bf7300b3a35bef2c6b9117018acca0dc760ac2d93dffe/tiktoken-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2b90f5ad190a4bb7c3eb30c5fa32e1e182ca1ca79f05e49b448438c3e225a49b", size = 994049, upload-time = "2025-10-06T20:21:53.782Z" }, + { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" }, + { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, + { url = "https://files.pythonhosted.org/packages/81/10/b8523105c590c5b8349f2587e2fdfe51a69544bd5a76295fc20f2374f470/tiktoken-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffc5288f34a8bc02e1ea7047b8d041104791d2ddbf42d1e5fa07822cbffe16bd", size = 878694, upload-time = "2025-10-06T20:21:59.876Z" }, + { url = "https://files.pythonhosted.org/packages/00/61/441588ee21e6b5cdf59d6870f86beb9789e532ee9718c251b391b70c68d6/tiktoken-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:775c2c55de2310cc1bc9a3ad8826761cbdc87770e586fd7b6da7d4589e13dab3", size = 1050802, upload-time = "2025-10-06T20:22:00.96Z" }, + { url = "https://files.pythonhosted.org/packages/1f/05/dcf94486d5c5c8d34496abe271ac76c5b785507c8eae71b3708f1ad9b45a/tiktoken-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a01b12f69052fbe4b080a2cfb867c4de12c704b56178edf1d1d7b273561db160", size = 993995, upload-time = "2025-10-06T20:22:02.788Z" }, + { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, + { url = "https://files.pythonhosted.org/packages/8e/32/45d02e2e0ea2be3a9ed22afc47d93741247e75018aac967b713b2941f8ea/tiktoken-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:b8a0cd0c789a61f31bf44851defbd609e8dd1e2c8589c614cc1060940ef1f697", size = 879117, upload-time = "2025-10-06T20:22:08.418Z" }, + { url = "https://files.pythonhosted.org/packages/ce/76/994fc868f88e016e6d05b0da5ac24582a14c47893f4474c3e9744283f1d5/tiktoken-0.12.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d5f89ea5680066b68bcb797ae85219c72916c922ef0fcdd3480c7d2315ffff16", size = 1050309, upload-time = "2025-10-06T20:22:10.939Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/57ef1456504c43a849821920d582a738a461b76a047f352f18c0b26c6516/tiktoken-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b4e7ed1c6a7a8a60a3230965bdedba8cc58f68926b835e519341413370e0399a", size = 993712, upload-time = "2025-10-06T20:22:12.115Z" }, + { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, + { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, + { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, + { url = "https://files.pythonhosted.org/packages/93/e0/6cc82a562bc6365785a3ff0af27a2a092d57c47d7a81d9e2295d8c36f011/tiktoken-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dc2dd125a62cb2b3d858484d6c614d136b5b848976794edfb63688d539b8b93f", size = 878777, upload-time = "2025-10-06T20:22:18.036Z" }, + { url = "https://files.pythonhosted.org/packages/72/05/3abc1db5d2c9aadc4d2c76fa5640134e475e58d9fbb82b5c535dc0de9b01/tiktoken-0.12.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a90388128df3b3abeb2bfd1895b0681412a8d7dc644142519e6f0a97c2111646", size = 1050188, upload-time = "2025-10-06T20:22:19.563Z" }, + { url = "https://files.pythonhosted.org/packages/e3/7b/50c2f060412202d6c95f32b20755c7a6273543b125c0985d6fa9465105af/tiktoken-0.12.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:da900aa0ad52247d8794e307d6446bd3cdea8e192769b56276695d34d2c9aa88", size = 993978, upload-time = "2025-10-06T20:22:20.702Z" }, + { url = "https://files.pythonhosted.org/packages/14/27/bf795595a2b897e271771cd31cb847d479073497344c637966bdf2853da1/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:285ba9d73ea0d6171e7f9407039a290ca77efcdb026be7769dccc01d2c8d7fff", size = 1129271, upload-time = "2025-10-06T20:22:22.06Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/9341a6d7a8f1b448573bbf3425fa57669ac58258a667eb48a25dfe916d70/tiktoken-0.12.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:d186a5c60c6a0213f04a7a802264083dea1bbde92a2d4c7069e1a56630aef830", size = 1151216, upload-time = "2025-10-06T20:22:23.085Z" }, + { url = "https://files.pythonhosted.org/packages/75/0d/881866647b8d1be4d67cb24e50d0c26f9f807f994aa1510cb9ba2fe5f612/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:604831189bd05480f2b885ecd2d1986dc7686f609de48208ebbbddeea071fc0b", size = 1194860, upload-time = "2025-10-06T20:22:24.602Z" }, + { url = "https://files.pythonhosted.org/packages/b3/1e/b651ec3059474dab649b8d5b69f5c65cd8fcd8918568c1935bd4136c9392/tiktoken-0.12.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8f317e8530bb3a222547b85a58583238c8f74fd7a7408305f9f63246d1a0958b", size = 1254567, upload-time = "2025-10-06T20:22:25.671Z" }, + { url = "https://files.pythonhosted.org/packages/80/57/ce64fd16ac390fafde001268c364d559447ba09b509181b2808622420eec/tiktoken-0.12.0-cp314-cp314-win_amd64.whl", hash = "sha256:399c3dd672a6406719d84442299a490420b458c44d3ae65516302a99675888f3", size = 921067, upload-time = "2025-10-06T20:22:26.753Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a4/72eed53e8976a099539cdd5eb36f241987212c29629d0a52c305173e0a68/tiktoken-0.12.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2c714c72bc00a38ca969dae79e8266ddec999c7ceccd603cc4f0d04ccd76365", size = 1050473, upload-time = "2025-10-06T20:22:27.775Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d7/0110b8f54c008466b19672c615f2168896b83706a6611ba6e47313dbc6e9/tiktoken-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cbb9a3ba275165a2cb0f9a83f5d7025afe6b9d0ab01a22b50f0e74fee2ad253e", size = 993855, upload-time = "2025-10-06T20:22:28.799Z" }, + { url = "https://files.pythonhosted.org/packages/5f/77/4f268c41a3957c418b084dd576ea2fad2e95da0d8e1ab705372892c2ca22/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:dfdfaa5ffff8993a3af94d1125870b1d27aed7cb97aa7eb8c1cefdbc87dbee63", size = 1129022, upload-time = "2025-10-06T20:22:29.981Z" }, + { url = "https://files.pythonhosted.org/packages/4e/2b/fc46c90fe5028bd094cd6ee25a7db321cb91d45dc87531e2bdbb26b4867a/tiktoken-0.12.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:584c3ad3d0c74f5269906eb8a659c8bfc6144a52895d9261cdaf90a0ae5f4de0", size = 1150736, upload-time = "2025-10-06T20:22:30.996Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/3c7a39ff68022ddfd7d93f3337ad90389a342f761c4d71de99a3ccc57857/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54c891b416a0e36b8e2045b12b33dd66fb34a4fe7965565f1b482da50da3e86a", size = 1194908, upload-time = "2025-10-06T20:22:32.073Z" }, + { url = "https://files.pythonhosted.org/packages/ab/0d/c1ad6f4016a3968c048545f5d9b8ffebf577774b2ede3e2e352553b685fe/tiktoken-0.12.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5edb8743b88d5be814b1a8a8854494719080c28faaa1ccbef02e87354fe71ef0", size = 1253706, upload-time = "2025-10-06T20:22:33.385Z" }, + { url = "https://files.pythonhosted.org/packages/af/df/c7891ef9d2712ad774777271d39fdef63941ffba0a9d59b7ad1fd2765e57/tiktoken-0.12.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f61c0aea5565ac82e2ec50a05e02a6c44734e91b51c10510b084ea1b8e633a71", size = 920667, upload-time = "2025-10-06T20:22:34.444Z" }, +] + +[[package]] +name = "tokenizers" +version = "0.23.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/60/21f715d9faba5f5407ff759472ade058ec4a507ad62bcea47cb847239a73/tokenizers-0.23.1.tar.gz", hash = "sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa", size = 365748, upload-time = "2026-04-27T14:43:25.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/39/b87a87d5bb9470610b80a2d31df42fcffeaf35118b8b97952b2aff598cc7/tokenizers-0.23.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224", size = 3146732, upload-time = "2026-04-27T14:43:15.427Z" }, + { url = "https://files.pythonhosted.org/packages/e2/6a/068ed9f6e444c9d7e9d55ce134181325700f3d7f30410721bdc8f848d727/tokenizers-0.23.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e", size = 3054954, upload-time = "2026-04-27T14:43:13.745Z" }, + { url = "https://files.pythonhosted.org/packages/6c/36/e006edf031154cba92b8416057d92c3abe3635e4c4b0aa0b5b9bb39dde70/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3", size = 3374081, upload-time = "2026-04-27T14:43:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ef/7735d226f9c7f874a6bee5e3f27fb25ecabdf207d37b8cf45286d0795893/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6", size = 3247641, upload-time = "2026-04-27T14:43:03.856Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d9/24827036f6e21297bfffda0768e58eb6096a4f411e932964a01707857931/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959", size = 3585624, upload-time = "2026-04-27T14:43:10.664Z" }, + { url = "https://files.pythonhosted.org/packages/0c/9a/22f3582b3a4f49358293a5206e25317621ee4526bfe9cdaa0f07a12e770e/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51", size = 3844062, upload-time = "2026-04-27T14:43:05.643Z" }, + { url = "https://files.pythonhosted.org/packages/7e/65/b8f8814eef95800f20721384136d9a1d22241d50b2874357cb70542c392f/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a", size = 3460098, upload-time = "2026-04-27T14:43:08.854Z" }, + { url = "https://files.pythonhosted.org/packages/0d/d5/1353e5f677ec27c2494fb6a6725e82d56c985f53e90ec511369e7e4f02c6/tokenizers-0.23.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4", size = 3346235, upload-time = "2026-04-27T14:43:12.377Z" }, + { url = "https://files.pythonhosted.org/packages/71/89/39b6b8fc073fb6d413d0147aa333dc7eff7be65639ac9d19930a0b21bf33/tokenizers-0.23.1-cp310-abi3-manylinux_2_31_riscv64.whl", hash = "sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a", size = 3426398, upload-time = "2026-04-27T14:43:07.264Z" }, + { url = "https://files.pythonhosted.org/packages/0f/80/127c854da64827e5b79264ce524993a90dddcb320e5cd42412c5c02f9e8a/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e", size = 9823279, upload-time = "2026-04-27T14:43:17.222Z" }, + { url = "https://files.pythonhosted.org/packages/fe/ba/44c2502feb1a058f096ddfb4e0996ef3225a01a388e1a9b094e91689fe93/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288", size = 9644986, upload-time = "2026-04-27T14:43:19.45Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c1/464019a9fb059870bfe4eebb4ba12208f3042035e258bf5e782906bd3847/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_i686.whl", hash = "sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4", size = 9976181, upload-time = "2026-04-27T14:43:21.463Z" }, + { url = "https://files.pythonhosted.org/packages/79/94/3ac1432bda31626071e9b6a12709b97ae05131c804b94c8f3ac622c5da32/tokenizers-0.23.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96", size = 10113853, upload-time = "2026-04-27T14:43:23.617Z" }, + { url = "https://files.pythonhosted.org/packages/6a/dd/631b21433c771b1382535326f0eca80b9c9cee2e64961dd993bc9ac4669e/tokenizers-0.23.1-cp310-abi3-win32.whl", hash = "sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948", size = 2536263, upload-time = "2026-04-27T14:43:29.888Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/2553f72aaf65a2797d4229e37fa7fbe38ffbf3e32912d31bdd78b3323e59/tokenizers-0.23.1-cp310-abi3-win_amd64.whl", hash = "sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7", size = 2798223, upload-time = "2026-04-27T14:43:28.51Z" }, + { url = "https://files.pythonhosted.org/packages/cd/2b/2be299bab55fc595e3d38567edb1a87f86e594842968fa9515a07bdcf422/tokenizers-0.23.1-cp310-abi3-win_arm64.whl", hash = "sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9", size = 2664127, upload-time = "2026-04-27T14:43:26.949Z" }, +] + +[[package]] +name = "tomli" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed", size = 16096, upload-time = "2024-10-02T10:46:13.208Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/db/ce8eda256fa131af12e0a76d481711abe4681b6923c27efb9a255c9e4594/tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38", size = 13237, upload-time = "2024-10-02T10:46:11.806Z" }, +] + +[[package]] +name = "tomli-w" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/19/b65f1a088ee23e37cdea415b357843eca8b1422a7b11a9eee6e35d4ec273/tomli_w-1.1.0.tar.gz", hash = "sha256:49e847a3a304d516a169a601184932ef0f6b61623fe680f836a2aa7128ed0d33", size = 6929, upload-time = "2024-10-08T11:13:29.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/ac/ce90573ba446a9bbe65838ded066a805234d159b4446ae9f8ec5bbd36cbd/tomli_w-1.1.0-py3-none-any.whl", hash = "sha256:1403179c78193e3184bfaade390ddbd071cba48a32a2e62ba11aae47490c63f7", size = 6440, upload-time = "2024-10-08T11:13:27.897Z" }, +] + +[[package]] +name = "tqdm" +version = "4.68.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/d7/0535a28b1f5f24f6612fb3ff1e89fb1a8d160fee0f976e0aa6803862134b/tqdm-4.68.3.tar.gz", hash = "sha256:00dfa48452b6b6cfae3dd9885636c23d3422d1ec97c66d96818cbd5e0821d482", size = 170596, upload-time = "2026-06-17T07:36:52.105Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/8e/bb97bb0c71802080bfc8952937d174e49cfc50de5c951dd47b2496f0dcdb/tqdm-4.68.3-py3-none-any.whl", hash = "sha256:39832cc2def2789a6f29df83f172db7416cea70052c0907a57801c5f2fdccb03", size = 78337, upload-time = "2026-06-17T07:36:50.132Z" }, +] + +[[package]] +name = "typer" +version = "0.26.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "rich" }, + { name = "shellingham" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/ed/ef06584ccdd5c410df0837951ecd7e15d9a6144ea1bd4c73cecab1a89891/typer-0.26.7.tar.gz", hash = "sha256:e314a34c617e419c091b2830dda3ea1f257134ff593061a8f5b9717ab8dddb3a", size = 201709, upload-time = "2026-06-03T07:18:06.843Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/2201973529af2c954de0bb725323c3aaed6d7f0ceee8f550dec9185df013/typer-0.26.7-py3-none-any.whl", hash = "sha256:5c87cfbc5d34491c5346ebf49c23e18d56ccb863268d3a8d592b26087c2f5e58", size = 122456, upload-time = "2026-06-03T07:18:05.732Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2026.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z" }, +] + +[[package]] +name = "uc-micro-py" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/78/67/9a363818028526e2d4579334460df777115bdec1bb77c08f9db88f6389f2/uc_micro_py-2.0.0.tar.gz", hash = "sha256:c53691e495c8db60e16ffc4861a35469b0ba0821fe409a8a7a0a71864d33a811", size = 6611, upload-time = "2026-03-01T06:31:27.526Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/73/d21edf5b204d1467e06500080a50f79d49ef2b997c79123a536d4a17d97c/uc_micro_py-2.0.0-py3-none-any.whl", hash = "sha256:3603a3859af53e5a39bc7677713c78ea6589ff188d70f4fee165db88e22b242c", size = 6383, upload-time = "2026-03-01T06:31:26.257Z" }, +] + +[[package]] +name = "uritemplate" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/60/f174043244c5306c9988380d2cb10009f91563fc4b31293d27e17201af56/uritemplate-4.2.0.tar.gz", hash = "sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e", size = 33267, upload-time = "2025-06-02T15:12:06.318Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686", size = 11488, upload-time = "2025-06-02T15:12:03.405Z" }, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, +] + +[[package]] +name = "uuid-utils" +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/8a/4ef2cd407871a21f948ad447a2754294a4fbe0fdb6cc96f4575490ae8df0/uuid_utils-0.16.1.tar.gz", hash = "sha256:60add5671aaf99cb2fe03359d9f04da27443eadd03ce523e3c64635acd3123fb", size = 42864, upload-time = "2026-06-16T07:28:05.734Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/7e/db2b282dd614670879470ae949b5ee7e140ec0f64387b0e566555807575f/uuid_utils-0.16.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:05a98f47805dce1658dd143503e85a3eb4aed9d9638c8138948a72c626850a55", size = 570304, upload-time = "2026-06-16T07:26:11.107Z" }, + { url = "https://files.pythonhosted.org/packages/98/ba/b165cc8eaf8b9b03b625e318923110cafdf5cbdc0281e5a788b52dc8de48/uuid_utils-0.16.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6703961c037c783c88b2770a7fe8e4027b85144f5625da51a16eb4141903627d", size = 289933, upload-time = "2026-06-16T07:26:12.545Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/f15c76d0650af4e88bb8d6df3bb6d5179b1288b6308c2f592ae7c5baad72/uuid_utils-0.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2d57530d894e8bbb04c9a81f1cc577a71d373f1303c69382ad1d486fe3b4780", size = 329985, upload-time = "2026-06-16T07:26:13.816Z" }, + { url = "https://files.pythonhosted.org/packages/13/2c/a999a850e01ecec4ba47f1e6de022a595e1d09a7b4b6d2abb70812fcb28b/uuid_utils-0.16.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b05bebcd4f428b6a4a43c94e85bb65522714a99f4ef62ecb8991fab9a349c52d", size = 336140, upload-time = "2026-06-16T07:26:15.172Z" }, + { url = "https://files.pythonhosted.org/packages/8c/fe/0fecf9c99ad19e6392aadf7d1f41936217c7625ef248f79a3d3bb7cf9ae2/uuid_utils-0.16.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21a39b304540400c3398fff922cbb240f402c0e15f68057f83e2bb80d98e30ef", size = 453027, upload-time = "2026-06-16T07:26:16.593Z" }, + { url = "https://files.pythonhosted.org/packages/f7/4e/932015dafc1b2eb1c85dc7702f5dabc7af921384e82d08100602d06a476d/uuid_utils-0.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72085b587d100e8e724addea0c3c20274f1e3ebfd04dfabd239cb60db6818554", size = 329471, upload-time = "2026-06-16T07:26:18.12Z" }, + { url = "https://files.pythonhosted.org/packages/0c/05/7be32c6836a712f728630a44915b94bfe036bc6310d7b0a8506ae0374747/uuid_utils-0.16.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:de2172b3a22653127643903e4293cda737a79f6dc902e0dc56be2d297c1a1ecb", size = 356198, upload-time = "2026-06-16T07:26:19.421Z" }, + { url = "https://files.pythonhosted.org/packages/72/58/15be0a25f6a750b384e67428f716c9adb15eae3adccb8e693f4b71072d4b/uuid_utils-0.16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a3d345bc9df1767d7c3ab772af320579c22d9a87ee04bd22f5c6590c50ca7282", size = 506398, upload-time = "2026-06-16T07:26:20.678Z" }, + { url = "https://files.pythonhosted.org/packages/fe/87/a1fe4a893640f7116e1fa047002238bc98ac9f2747dbea68fe207baac484/uuid_utils-0.16.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:0fa88f567c5bd4a6d9a69833b36351fb7922f29d763e52e0c6b0d1d5689e1c6b", size = 611353, upload-time = "2026-06-16T07:26:22.002Z" }, + { url = "https://files.pythonhosted.org/packages/cb/5a/481a12602d8e7909e8f4463c3572c034eab5f559f0b92ac995cba2407723/uuid_utils-0.16.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:33e17731701cfa5f4625d0050eba9bc7cdec652baeeabf0e3f162f42ac4f248e", size = 571489, upload-time = "2026-06-16T07:26:23.517Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8b/d87fa2650f1e6500c7bfce9d54be39ecb0943aacc85a40ba3413e77f68c6/uuid_utils-0.16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:957cde5afdc85a59708e533d8e1194d2d3224fc1b5013008868864657aa73cdf", size = 535741, upload-time = "2026-06-16T07:26:24.898Z" }, + { url = "https://files.pythonhosted.org/packages/7f/ba/acf90a984f0648461c1b984d8ca8dc753d2041dec8e5e5e1c02299da7988/uuid_utils-0.16.1-cp311-cp311-win32.whl", hash = "sha256:2f30ffeecde5c57903b03f526225131dadf7fd14b7134f12ff65234e3769668a", size = 170239, upload-time = "2026-06-16T07:26:26.461Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f5/bb0b948d166c4537eca089e1177d3f4200a01ad9cf6a5d57c6068de0794f/uuid_utils-0.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:9f5eef68f0c8bd341bff3ad6e8a05c13f153113b8d8c71f724bf224ba7bbfd21", size = 177048, upload-time = "2026-06-16T07:26:27.956Z" }, + { url = "https://files.pythonhosted.org/packages/7d/57/637d3d921eced7bc3ad39934dfd9d05c44e1aedbcb08eebc66fe8c49faa9/uuid_utils-0.16.1-cp311-cp311-win_arm64.whl", hash = "sha256:9fa28ac6ec2210c49b4359b0e061473b8d6c79cff8612668ed7f092b73a81976", size = 176582, upload-time = "2026-06-16T07:26:29.135Z" }, + { url = "https://files.pythonhosted.org/packages/2e/2d/9f330dabb97aa14de667e908996f2733b4a3be94ff3dd8f9b46c366a2a5e/uuid_utils-0.16.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:c9bad1c6e47bb9ac56faea8c23c3214eb7be55612e12ea3c05b0c01aa824083c", size = 562690, upload-time = "2026-06-16T07:26:30.589Z" }, + { url = "https://files.pythonhosted.org/packages/a4/69/ad75eb984999305cbcc808dd1c53f84bde0f0b11942aaa29f14150673ce1/uuid_utils-0.16.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1653e4d45fdd2159e242b8fe382cb48c1955a3eb6a3f25009357b1e7d910f374", size = 289077, upload-time = "2026-06-16T07:26:32.272Z" }, + { url = "https://files.pythonhosted.org/packages/85/cf/41119860ec2c8de904c848739861b16ab92defd4fda0b86d7ee8ed724aa2/uuid_utils-0.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcc71914c555cd11d88d3f3a9c5e971b9aa5921423d5495b286cec4f09f6ba12", size = 325421, upload-time = "2026-06-16T07:26:33.774Z" }, + { url = "https://files.pythonhosted.org/packages/a6/64/2a6ef4ad23dbf87056655c2388d406475f0de13ee408114f62583a25065d/uuid_utils-0.16.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0e4a28ed6eca38ce71423c27d13ba16d0da77f04315a2ed391a4f0565abecc6", size = 331937, upload-time = "2026-06-16T07:26:35.997Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e9/860d7601a1f4fc8499fc9897fde9567267499f0dcc5ecb7a23decdd60302/uuid_utils-0.16.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:82b0a3abf892aa0c7c7657f81359e2388cf8b20e64e7f897934720198e9d3975", size = 446542, upload-time = "2026-06-16T07:26:37.358Z" }, + { url = "https://files.pythonhosted.org/packages/57/2c/37735ada185956ec01474e10c0e4bebe486add2de2e31b3175e19c7970cc/uuid_utils-0.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47ea8f2544a301f6cbd81377d638f4ac1f6f860f21133f4d18a450bb4baf9d42", size = 325128, upload-time = "2026-06-16T07:26:38.844Z" }, + { url = "https://files.pythonhosted.org/packages/1d/9a/7aed02b66a6cb7d43d5bed2ca484d70ea8e023f381f25936c51cc4c05798/uuid_utils-0.16.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:75bfa6af766bc73b1a36e49ebb3c35b61fe9f1e5e584c26a2ad32ba01c5b8513", size = 349471, upload-time = "2026-06-16T07:26:40.21Z" }, + { url = "https://files.pythonhosted.org/packages/b0/a3/82da5920558739cbf126bb414b6a9569e042390693bfa54eadd99f338f2a/uuid_utils-0.16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:463e7fb4ad94d8ef9fc32bd118c39cab45e2ba7e14c61b7d0e859c0767323bdc", size = 501665, upload-time = "2026-06-16T07:26:41.71Z" }, + { url = "https://files.pythonhosted.org/packages/ae/ca/d34022617cd27ecdde3829cc6bc066e47fb9d280692a311ec5634cf1682d/uuid_utils-0.16.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:59f9ccb7b0d022cb184be56e0c7bd908f1b1129ba946c8e4b1ea0e39784597c8", size = 607482, upload-time = "2026-06-16T07:26:43.303Z" }, + { url = "https://files.pythonhosted.org/packages/fe/aa/9f462d087d21163f2fee1edc548e82306299f70c7eac6757477bff7264ee/uuid_utils-0.16.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c3c4f3d5d22deaab29d17c5def41d45733d043dc667492cbb5c85b1bd8301ad5", size = 566818, upload-time = "2026-06-16T07:26:44.665Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/f1d5cbfc48675405831f998b3caef87234aa1cab5f9abc257b3127f476ea/uuid_utils-0.16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:931732efbcece3399ea5250732c0a75f91c2f5172b74641bbf707cdcaf58bd1b", size = 530700, upload-time = "2026-06-16T07:26:46.068Z" }, + { url = "https://files.pythonhosted.org/packages/06/df/a3786abf57b67578921c6cb48b84803ef15d8e42fce6077e3eb2ea691a65/uuid_utils-0.16.1-cp312-cp312-win32.whl", hash = "sha256:89a160cb85331b271f73903bbc4a6d47c668497d3c10abfbcdd670329fcec218", size = 167321, upload-time = "2026-06-16T07:26:47.502Z" }, + { url = "https://files.pythonhosted.org/packages/25/c3/bcd053c8480c8b03c2c610391cb74a141b37644dcac6bc70773c0af45aa1/uuid_utils-0.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:4f57d1d08e8b304a44e350d873b8343780b83b111d85ebac11db2661ca68b701", size = 174623, upload-time = "2026-06-16T07:26:48.753Z" }, + { url = "https://files.pythonhosted.org/packages/56/ea/1d6ce69fde3c5e051f68d1727296d12e44f6b2b21f29d64f8bb7fbe4b17e/uuid_utils-0.16.1-cp312-cp312-win_arm64.whl", hash = "sha256:7e77476788e1db2b5a7c53fa7437a259af7d872c910e379ee4b6e3f780785dc8", size = 173239, upload-time = "2026-06-16T07:26:49.981Z" }, + { url = "https://files.pythonhosted.org/packages/8c/0e/5be838a04c609ff6c62664eee5e0b590fcc38f70bd0c8f10438b83e92988/uuid_utils-0.16.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:1808d4453c0d0469092c7d84c90e695229e26275287f10d1717d1be8f6c08acf", size = 562651, upload-time = "2026-06-16T07:26:51.26Z" }, + { url = "https://files.pythonhosted.org/packages/fc/19/bd2964d8562b4d2e7554f0e42a08901da924b459b1b7ab4b3f99319ebb6c/uuid_utils-0.16.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6c1af7d68f53b4c91dc8c291a347a74bf2b0a25c9a28a66a24197c2c593ce024", size = 289002, upload-time = "2026-06-16T07:26:52.82Z" }, + { url = "https://files.pythonhosted.org/packages/15/9a/23faa0390415789a3a0e3cbaf73f643ec668d5f8fe96c10bb4f326e3280f/uuid_utils-0.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e82e709fb3f260a2680fa8a4918b600de153357fb5c9f69463a8c28b5a737e00", size = 325747, upload-time = "2026-06-16T07:26:54.318Z" }, + { url = "https://files.pythonhosted.org/packages/93/ed/7694ba36f2f424f5e311752ce0861e71e6959bc62c2dd3a1e8587c2b6984/uuid_utils-0.16.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2dd909678ee21a77d21c81b394c99f9a40ec11ec8b60a7074f1b01a765e70b97", size = 332541, upload-time = "2026-06-16T07:26:55.768Z" }, + { url = "https://files.pythonhosted.org/packages/ca/b5/5cbb166d77554f4d0aaa2c728014e4011f58509ecf4d0bf62272abc8b650/uuid_utils-0.16.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c6cc68b3e08164b09bdcec302fd597584739dc45e701b2a0473fcf2406ae5ba", size = 446733, upload-time = "2026-06-16T07:26:57.094Z" }, + { url = "https://files.pythonhosted.org/packages/da/7f/d9f9881fc980acc2db6c7b51afb29e674ba9375d96eedb1b3ad9f14680c5/uuid_utils-0.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2be8a39895ddc1f4b1814c7f08178755e77e53197f609232f19ef0798bcb68bf", size = 325006, upload-time = "2026-06-16T07:26:58.754Z" }, + { url = "https://files.pythonhosted.org/packages/e8/b0/7e30e090bbb1c66bab4b2b7ab70ee843bfd0d20638d4e814d060ee6c822a/uuid_utils-0.16.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5069e78a05010bd7e8ee1add95ca030d1365014f68de5fbbcb6dc1a313ec19a4", size = 349415, upload-time = "2026-06-16T07:27:00.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/b0/3c41dc45c2695080f8d92f6cea9faf1935bfb2d0ceddbe77036aa5f5decb/uuid_utils-0.16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6c95a339679edca5908b0769c404f103ab4c39b20eb424059b1219709d75d56b", size = 501896, upload-time = "2026-06-16T07:27:01.627Z" }, + { url = "https://files.pythonhosted.org/packages/0a/46/77f97e71718b4fe8b167da2316205cc07c47b44547683bb6609adf0ee82e/uuid_utils-0.16.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:1f547598a5afc1456768a6b7eb2952e9db936d730fdf2b3e60740d4417e1eecd", size = 608180, upload-time = "2026-06-16T07:27:03.321Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e3/86cde5a431df2c7a0f58e4399d277d591c5bc841e107de7f989ae380808d/uuid_utils-0.16.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:07a9c972f7e22e3a937671415cc006999ebe6e243051bf8f22e553e2a089bcc5", size = 566688, upload-time = "2026-06-16T07:27:04.981Z" }, + { url = "https://files.pythonhosted.org/packages/aa/45/0339e76cacff0d69a384813e41a38d5bc6dbf69a20ce9b453d803d527cba/uuid_utils-0.16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:327ec607b6386c99c50486bd0f2a7d0c5996e6085764a923425327f3fa8c8787", size = 530675, upload-time = "2026-06-16T07:27:06.448Z" }, + { url = "https://files.pythonhosted.org/packages/16/d4/a66fc1d1d20df8d164f6821a132457c91dab26596486db04f0cbc191100b/uuid_utils-0.16.1-cp313-cp313-pyemscripten_2025_0_wasm32.whl", hash = "sha256:c8188ffd368ab005833e51b304b0f5f2967fa97bb10b01a4c91ab2ea01d4f33c", size = 98702, upload-time = "2026-06-16T07:27:07.849Z" }, + { url = "https://files.pythonhosted.org/packages/05/af/b09772d65dc09d4123766f3048992c644820fc647af90635b913c7f746b3/uuid_utils-0.16.1-cp313-cp313-win32.whl", hash = "sha256:717696c17f1d15f577bcf90464163d39f7b36d8925b3cbbd044032855c59050b", size = 167333, upload-time = "2026-06-16T07:27:09.045Z" }, + { url = "https://files.pythonhosted.org/packages/15/02/589d2b5a2fbc75e8a6cda982b42455bae8e49ea8d849dce5e24c044a764b/uuid_utils-0.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:4702353d3ca02d36db089af40ab963a0b7231c496f5012433e8deda1027a4d6b", size = 174327, upload-time = "2026-06-16T07:27:10.28Z" }, + { url = "https://files.pythonhosted.org/packages/bf/7f/b000e716d77ab1a275bfaf16cc58e97ac6bfc69a7df41d11797800ed6e3f/uuid_utils-0.16.1-cp313-cp313-win_arm64.whl", hash = "sha256:5915ed4face0439d566360db0040aa91236be8f1d717dffd92e312da52f14434", size = 173166, upload-time = "2026-06-16T07:27:11.509Z" }, + { url = "https://files.pythonhosted.org/packages/2e/c5/2cfe257f5e3d988234bb476cb5bffaf4b58ed7955b9547bef1fab9c6ee07/uuid_utils-0.16.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:f3fa8c13516ecb3f8fdc6d454f2aa82412ea155071d003ef592522f7248eff2e", size = 568057, upload-time = "2026-06-16T07:27:12.903Z" }, + { url = "https://files.pythonhosted.org/packages/04/11/bb14b73b42e733945b015ef6374676e6c50ebe26f5a506440087a8357f4e/uuid_utils-0.16.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:647f53c992ae2799924c870065f2615a0e1e3dd1394273b7b64de1d965ffe251", size = 291621, upload-time = "2026-06-16T07:27:14.355Z" }, + { url = "https://files.pythonhosted.org/packages/e1/ad/3a84dac53f45d6f5e9eb7bd5732ebd30cc32194e972ed19cab4842cd7737/uuid_utils-0.16.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4e72deb0c4fc48ffceec4b5776460734ccfdd26cdc4f466e6b525db528cf3c9", size = 327397, upload-time = "2026-06-16T07:27:15.674Z" }, + { url = "https://files.pythonhosted.org/packages/cc/c0/bdd42425146679e3d62236b29c4a59ae5c774a2c57c7ee4cc32f9dfa0725/uuid_utils-0.16.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:554379de42217d21fa4cb141877df317d015bc75e6f80cc86d87054dd8c63aa2", size = 333715, upload-time = "2026-06-16T07:27:17.338Z" }, + { url = "https://files.pythonhosted.org/packages/4e/1f/24feb9df2298982ae58eb750e3a2836170149292a7d80d30c7c4e2c9863c/uuid_utils-0.16.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec209a454806b34e2d6fd41706d62a77c2f671192388369f65947b50f8dce14b", size = 449442, upload-time = "2026-06-16T07:27:18.838Z" }, + { url = "https://files.pythonhosted.org/packages/90/f2/f3ee2c3b08eceb2e1718d2d5f31f4968fb807444f6e28ec5b2d257b009e5/uuid_utils-0.16.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e1f5958466456ba330273320baa9a1e78a0773f3c4af22bfdcbf3ea49b77277", size = 326917, upload-time = "2026-06-16T07:27:20.329Z" }, + { url = "https://files.pythonhosted.org/packages/29/58/71334bae33eec0730abbf5c5bd021757b9766d26724744c635c73915d2d9/uuid_utils-0.16.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bc891f047c29e4e5947942fa386eab642fed082bccb932e4b1f29fb98c760f5", size = 352474, upload-time = "2026-06-16T07:27:21.665Z" }, + { url = "https://files.pythonhosted.org/packages/90/3c/de5e5d26866cf6da46399a74f07c60f8a79a9366a1391e084f1edc5caf2d/uuid_utils-0.16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f74c53f01aa5a0d5f69d44f9c18b4ae676b9456ff914340c7c37032547c36553", size = 504007, upload-time = "2026-06-16T07:27:23.022Z" }, + { url = "https://files.pythonhosted.org/packages/55/93/fe2afc29b32af5a6bc1f362785f5be161cf98a823b5a4e3b46a7a1c8f859/uuid_utils-0.16.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:1168f364da715143e58c1cf3f0533fc62be18cb08d89ff934faa0b3911b07f4b", size = 609178, upload-time = "2026-06-16T07:27:24.456Z" }, + { url = "https://files.pythonhosted.org/packages/cf/64/902551df2ff562212e80d11055789749e3bc015f63418291047fe255d978/uuid_utils-0.16.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e13d6f28174ff47cc2c956d1b1ced15ecb41b485dc567f0868c242fef767d6ab", size = 568997, upload-time = "2026-06-16T07:27:26.066Z" }, + { url = "https://files.pythonhosted.org/packages/32/d7/c4501cb4fb09b7cf31cef630def234bbd07b89e69828e53777b0e2322c74/uuid_utils-0.16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3474a0aa88a59451bfe1053e59c342ce9c57efaca864d26106ffe40f1d18ad2e", size = 532417, upload-time = "2026-06-16T07:27:27.524Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a8/24e10e7a2d8da2b74fff7dae4fc3f05ce57908008a8cbc4362843b4e75e2/uuid_utils-0.16.1-cp314-cp314-win32.whl", hash = "sha256:3823a2aa06b912ff119d2ed1da19f549ffb2b0ac3187560d1afd5d5e0f905e21", size = 169368, upload-time = "2026-06-16T07:27:28.95Z" }, + { url = "https://files.pythonhosted.org/packages/8e/c7/e2934ccb5a81e7ca01aa76a747aadafaf011f209b5c2aacb9226ac1b6b17/uuid_utils-0.16.1-cp314-cp314-win_amd64.whl", hash = "sha256:8c29a69b1710716ef356e3e4adf557f122381cf0622bd8034900f33f3621ad10", size = 175886, upload-time = "2026-06-16T07:27:30.483Z" }, + { url = "https://files.pythonhosted.org/packages/97/8b/e92640d2dd21da3a5f719af234ecf3595a9eb4594f8e7561fd625c91f7ac/uuid_utils-0.16.1-cp314-cp314-win_arm64.whl", hash = "sha256:793ce3c40cb6690de63ba5859ba1a7d324dd317368a6d941a9a069cc3121f80e", size = 174527, upload-time = "2026-06-16T07:27:31.908Z" }, + { url = "https://files.pythonhosted.org/packages/82/6c/8599d326903aa36f6df377af5704f4c8dd09f91b63dbc5af629ad970516f/uuid_utils-0.16.1-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:a60cec7b6b0a8fa6048f386b50fa3741ec31e4a4c64682d9d4a6cc809381d655", size = 570237, upload-time = "2026-06-16T07:27:33.465Z" }, + { url = "https://files.pythonhosted.org/packages/f2/18/69b97093bfb26281d8ac539186af343ec9ab7a43bf2e45871d5e5c3ff9f5/uuid_utils-0.16.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:856507775e45660a00e603622108ad07be666ea2f0c333c51d8d857c490d25e7", size = 292799, upload-time = "2026-06-16T07:27:34.944Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b0/718e9df18b6214b64d063b652ff5801001783942a8527ccac28dabd81ecf/uuid_utils-0.16.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d41154865431e6e9b3bf28c8ecead4af3653f24029f64561dc0968537ebd890c", size = 327278, upload-time = "2026-06-16T07:27:36.258Z" }, + { url = "https://files.pythonhosted.org/packages/4e/90/72feb2f35deeebbbb87342943e1041290133f46594c37351e9fda4104486/uuid_utils-0.16.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9ca3ab4579e7335b1e7cf0be5a889cd2f9561150377e88264663235ed94f0c44", size = 333903, upload-time = "2026-06-16T07:27:37.66Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d4/64b5fa6f42da85d8f4cf2d838c152ff9eb2b5e14d24e3784fb3836fd7ae5/uuid_utils-0.16.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43e981840285825ece6a861c600b3e0da93575a67aac20fcf77d185e615a6ef6", size = 449100, upload-time = "2026-06-16T07:27:38.989Z" }, + { url = "https://files.pythonhosted.org/packages/88/45/347f0f28a0f2a6c7b078c50624838b5060fce62ad0c512750cba18bd3745/uuid_utils-0.16.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79b42065d01244c04c92ba252e6cf877edf845cf5a55ed7d5a14e1ad3f3efee3", size = 327961, upload-time = "2026-06-16T07:27:40.426Z" }, + { url = "https://files.pythonhosted.org/packages/79/32/ef685e83e4560d4be94878691853142e3c100a571c5fcd6e9af029ae8bc7/uuid_utils-0.16.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d6c492464bccfab7872bbd6a7257841f70259bf9eb16f98e1b78648ed40ea2dc", size = 353327, upload-time = "2026-06-16T07:27:41.825Z" }, + { url = "https://files.pythonhosted.org/packages/00/b8/3ba75dc9bc5c0dae3bb590ff8cff661077c2fd79b81163c56dc0ed0090eb/uuid_utils-0.16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8c0bedc59f321b299ff6626ef76c163e4731614066103708c0158054b7fee184", size = 503853, upload-time = "2026-06-16T07:27:43.149Z" }, + { url = "https://files.pythonhosted.org/packages/05/08/a70888d1eb780bb20b7236482bbcd89b734bb261a5ae9301b4c1579b29b6/uuid_utils-0.16.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:a99383f696d5f8b3621a8d5f8501e8760539276f05ae341b26b842b414f25c28", size = 609392, upload-time = "2026-06-16T07:27:44.859Z" }, + { url = "https://files.pythonhosted.org/packages/36/6b/9f9265911697a27fa0436ca9eca41a65907b0f74ca56240fad9d3d235248/uuid_utils-0.16.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:684efe2e5980a516f369d393b87d30ddfcc1d30ab9d50d47881d86b719f07e30", size = 569730, upload-time = "2026-06-16T07:27:46.339Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0a/b4c45682b4fcf69304c2069491b11819637d4bc56d3af8fb061042b0689c/uuid_utils-0.16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5480507adc72cda50a4d923c68c7f82f39e7833a92379298743efdb084646bda", size = 533883, upload-time = "2026-06-16T07:27:47.805Z" }, + { url = "https://files.pythonhosted.org/packages/a7/bc/08199e799f2d2f29c6d7266d6484aa4ca92830e2839e24013dba652c9c5f/uuid_utils-0.16.1-cp314-cp314t-win32.whl", hash = "sha256:f330f1ab05ad26a6bdd4717136c2a4e417b853688ceb40b1a537130cf542cf0c", size = 169760, upload-time = "2026-06-16T07:27:49.161Z" }, + { url = "https://files.pythonhosted.org/packages/7f/08/4c0deed2973b4069a888407f1eeec1f0e7a9792ebb033f995f239129caa9/uuid_utils-0.16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:8f29c7afeff321567b47cd5ce26560bef2528f317f398f127ac5d1c3c8b864f7", size = 176469, upload-time = "2026-06-16T07:27:50.444Z" }, + { url = "https://files.pythonhosted.org/packages/ae/86/3b2c2369de084276f31af6e4c26d41a88d48b842305a8fd999fb7a1a6b78/uuid_utils-0.16.1-cp314-cp314t-win_arm64.whl", hash = "sha256:702559aad80d8be2ff31a425004654153b2d7ed9448dceea32cf7e83ecc5e403", size = 174144, upload-time = "2026-06-16T07:27:51.645Z" }, + { url = "https://files.pythonhosted.org/packages/8e/c7/b9d7328b44a1c38b88e70ca9d81460885e1e5c29a06aed01f3cda91b7999/uuid_utils-0.16.1-pp311-pypy311_pp73-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:67c7381a5673d8227dbe205f130b425af9f47dafd844e6fe65be0cd7c0ad4c32", size = 573213, upload-time = "2026-06-16T07:27:53.077Z" }, + { url = "https://files.pythonhosted.org/packages/97/11/a410b13c2260ddf8cdd46f28fc123fb6e595b794ef18909c7eecdec25a4d/uuid_utils-0.16.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4f97514417941797014c4a29280be571586a8e29b6e0e467a13c9738e124247a", size = 291499, upload-time = "2026-06-16T07:27:54.515Z" }, + { url = "https://files.pythonhosted.org/packages/df/a4/8c0d354a3dcd2a9c6c092aa030a05d89cd140e53cc46e4b8aeee27921ce7/uuid_utils-0.16.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f666ec673f6722de62619dbfc5fa4ff4518674caba8a2bb0e5a99d720b9d9af", size = 332139, upload-time = "2026-06-16T07:27:55.874Z" }, + { url = "https://files.pythonhosted.org/packages/34/76/d5271c9782e2bd24a203118a2fd3f16606fa24d2499f255870f8b08da744/uuid_utils-0.16.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6abcd34ef51ff5ede64c565fc19bca662b529990edf22172fa15f7e7a7598085", size = 337695, upload-time = "2026-06-16T07:27:57.255Z" }, + { url = "https://files.pythonhosted.org/packages/cb/2e/cc15fc357ef524ee6534652fa2009ac2dd111738a5a12d8cf2ec1c1fd93d/uuid_utils-0.16.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85fb3d570e0fb939c480a932e7e7abea88f45d5e9dd1175ea52382d8a6db0106", size = 453505, upload-time = "2026-06-16T07:27:58.791Z" }, + { url = "https://files.pythonhosted.org/packages/7d/b2/ae6694b800250bcba1b991d3789b38240df99cebfdb22f4f3fb0b6813702/uuid_utils-0.16.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec1e7c073113f80137c12f76003b8100c2b8509c8462eb4bde9f4d9ead4ff372", size = 329964, upload-time = "2026-06-16T07:28:00.489Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d3/683d1f3154ec1cce704bdef61ed3a5ea36c2afe63f4a0b4eff719aacbbed/uuid_utils-0.16.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65b41989f392087b78c1bc5bf2edc79cff7d277a1284d60cb1c901b6c52ba3fe", size = 357408, upload-time = "2026-06-16T07:28:02.609Z" }, + { url = "https://files.pythonhosted.org/packages/d3/1d/df986ff2ace560581fa9ef242c72f913fc00e33942e0b5c96ad63c982f4c/uuid_utils-0.16.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c509fa21729f9400eaea60d7891e6b20ec9193799794e1f0acfad5324fb7d9ee", size = 178746, upload-time = "2026-06-16T07:28:04.195Z" }, +] + +[[package]] +name = "uv" +version = "0.11.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/f9/f45bb1c251962ee614afd58ccd3dc06ada7869d04987efc2858a81cc4e0f/uv-0.11.21.tar.gz", hash = "sha256:083882c73373a16de4c136d54e3386a52388dead5048a07505e25578b157182f", size = 4259001, upload-time = "2026-06-11T18:18:26.468Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/a5/1c863b931f3aba6e07547929b8cb45875038de00678bfd2fbabcd76faeef/uv-0.11.21-py3-none-linux_armv6l.whl", hash = "sha256:48c36eb170a5e7a668c1d13d2c8edeb017a3e6484c224f1521b540a6bda9e50b", size = 23747368, upload-time = "2026-06-11T18:19:21.724Z" }, + { url = "https://files.pythonhosted.org/packages/9b/8c/66d22f9152a014fbb17b1308394efe274e860b8beb4933f051396f96dd9f/uv-0.11.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:88d8283f6ea9f0cdbb7717e6e08e916c32a8b8b7e11c72fcc6426a4c4eeb89e0", size = 22992460, upload-time = "2026-06-11T18:18:33.543Z" }, + { url = "https://files.pythonhosted.org/packages/a5/f7/31d62c17837c9ae79cc6d5351fc5d54e8926e78b0315b4b6c187e0d1d50d/uv-0.11.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9c11169a049ec8bf9ddc6a9f55fba9a240942ec8005faaaf4393f00ff7a4c16e", size = 21762931, upload-time = "2026-06-11T18:18:41.155Z" }, + { url = "https://files.pythonhosted.org/packages/3c/04/c5503fc1015095db71c280526f45537f3bb06855ce281ff1761b85d149bf/uv-0.11.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:00193e4e077c27ee3d66da356744dbf0b3aa59356dfbd9a9efb1dc8469af8ad7", size = 23716032, upload-time = "2026-06-11T18:19:17.03Z" }, + { url = "https://files.pythonhosted.org/packages/13/ac/46132335772fcdc38e5b5ec76701a8df8e3707605909b5fed46783689501/uv-0.11.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:870f48082df673016f465b068f40ad5aa7d2d3cfbcfb4e73724630684003a2ab", size = 23330010, upload-time = "2026-06-11T18:19:00.825Z" }, + { url = "https://files.pythonhosted.org/packages/8c/d4/cfa1ea36706c32006dea9bf0a819b56c22af8270ea3a2b57562ce96c2d45/uv-0.11.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:af08e0d8f43da43bc68930aee56ca5f38ccfbc79d45b6e8a7d5051f1e975684f", size = 23339731, upload-time = "2026-06-11T18:18:52.395Z" }, + { url = "https://files.pythonhosted.org/packages/96/c5/b34d3cdf05a069c583ef368e6db90242f842d7eb26b246981b3ca8799c27/uv-0.11.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4530761c565f3a519a68f36628ee51f2b467b66573e2023e9073641219b60d23", size = 24657820, upload-time = "2026-06-11T18:19:25.62Z" }, + { url = "https://files.pythonhosted.org/packages/be/b9/89b4e3909111c14311d4a1551afb37f0669587dc1f4ae7e26ec5baea6c09/uv-0.11.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66906cfa7c29c2cf4ea5117cf5614b0b83078ff669e664e2187071fcb24c85c1", size = 25744586, upload-time = "2026-06-11T18:19:09.311Z" }, + { url = "https://files.pythonhosted.org/packages/1c/7b/51d53d9fb1aaf38a613c2d20b40583ee2aa47fc000724a00aecbd5e61431/uv-0.11.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:525ef0eb56ff982357a321eca953307d824ab6f58473630c69521e8085f12b0a", size = 24990030, upload-time = "2026-06-11T18:18:29.618Z" }, + { url = "https://files.pythonhosted.org/packages/de/70/3347f736911b73df1f31c0823d6502891f3c49fdeb157fe8060b18c08d1c/uv-0.11.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9ecdefa81db7e966d1655988cad6f840316228381dd69131ebc4ae9362bbccd", size = 25110133, upload-time = "2026-06-11T18:19:13.307Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/b92538042d78550626ec7ac98b525bcb81ded8605c7ca9d6e35a1454ba71/uv-0.11.21-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:4ed98ff3165bf7b339692d0df918b87e6d36eb0bed5183466330d27d5730d57b", size = 23755172, upload-time = "2026-06-11T18:18:19.189Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1a/5c8993f95d4384baeaf00b96df0111af3c941a34e4466cde0d52b0b6ad99/uv-0.11.21-py3-none-manylinux_2_31_riscv64.musllinux_1_1_riscv64.whl", hash = "sha256:0e7916874f125a6f6af4cddd95f892ef19a4bb65c146afea7e544b0f98c63d02", size = 24468447, upload-time = "2026-06-11T18:19:04.572Z" }, + { url = "https://files.pythonhosted.org/packages/66/2c/d4db24f9aeab8fce106633cd0388df4c0cf9f0991a2b5d9f58d061a031f7/uv-0.11.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:05e2f2e0fbf7c423f8287011ba0d2d69464f26a5f13b33df05cd491fbe5a910a", size = 24564716, upload-time = "2026-06-11T18:19:29.559Z" }, + { url = "https://files.pythonhosted.org/packages/f6/53/c61711e81f9f8d34dd020340ace968499b2539d3bb4ac09d39339df54a9d/uv-0.11.21-py3-none-musllinux_1_1_i686.whl", hash = "sha256:b756dd2b368d7cc4aeb48249d06e1250bfcf81f0313ff7d7ec2ccafcd3ee4c93", size = 23917742, upload-time = "2026-06-11T18:18:57.187Z" }, + { url = "https://files.pythonhosted.org/packages/84/21/210a5562a6a0eddfbe4890eb48e67f167be0307e75f029ca46b8f6386e5d/uv-0.11.21-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:88668a27959df9188ff72b0314f6b14f6acf6090964bb0748974239183ecb51c", size = 25330418, upload-time = "2026-06-11T18:18:37.383Z" }, + { url = "https://files.pythonhosted.org/packages/f8/3c/81979463de0278facaa59ed3940b9c62f25a68d737d1a6f11cc3f922fba3/uv-0.11.21-py3-none-win32.whl", hash = "sha256:a00c78f3eea6db7967d98a505b01b7d80354517c7ff34f51701949f39c7b53e6", size = 22633520, upload-time = "2026-06-11T18:18:44.992Z" }, + { url = "https://files.pythonhosted.org/packages/3d/51/e682e060813424467f14ae964dd7022f8fc537fea5803b5aab0ba1eca9cc/uv-0.11.21-py3-none-win_amd64.whl", hash = "sha256:d956ba9470d5267cc0ea3d7572cac3bf045bc78adad5b031b5558c6df13d2e19", size = 25291878, upload-time = "2026-06-11T18:18:23.832Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ef/8b1d92f9501963ef8694bb17ad80ba9926d049240d2da0a4f879aa37f3e2/uv-0.11.21-py3-none-win_arm64.whl", hash = "sha256:f64a851e429e6afb96f3a0b688995757ed3697bf1078509e2da8220ffc9805cd", size = 23715885, upload-time = "2026-06-11T18:18:48.596Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.49.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c4/1f/fa18009dea8469069cca78a4e877a008ab78f08b064bfc9ab891579077ff/uvicorn-0.49.0.tar.gz", hash = "sha256:ebf4271aa580d9de97f93192d4595176df6e91f9aae919ca73e4fc07df1e66a3", size = 91284, upload-time = "2026-06-03T22:01:30.448Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/fa/e1388bbcf24ef3274f45c0c1c7b501fd14971037c1b6ee23610553307497/uvicorn-0.49.0-py3-none-any.whl", hash = "sha256:ba3d14c3ee7e41c6c654c46c9eb489d33213cdd30aa1696eab1374337c13f68f", size = 71376, upload-time = "2026-06-03T22:01:29.037Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "httptools" }, + { name = "python-dotenv" }, + { name = "pyyaml" }, + { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32'" }, + { name = "watchfiles" }, + { name = "websockets" }, +] + +[[package]] +name = "uvloop" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, + { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/86/94/9fb7fad2f824d25f8ecac0d70b94d0d48107ad5ece03769a9c543444f78a/uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21", size = 3753819, upload-time = "2025-10-16T22:16:23.903Z" }, + { url = "https://files.pythonhosted.org/packages/74/4f/256aca690709e9b008b7108bc85fba619a2bc37c6d80743d18abad16ee09/uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702", size = 3804529, upload-time = "2025-10-16T22:16:25.246Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/03c05ae4737e871923d21a76fe28b6aad57f5c03b6e6bfcfa5ad616013e4/uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733", size = 3621267, upload-time = "2025-10-16T22:16:26.819Z" }, + { url = "https://files.pythonhosted.org/packages/75/be/f8e590fe61d18b4a92070905497aec4c0e64ae1761498cad09023f3f4b3e/uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473", size = 3723105, upload-time = "2025-10-16T22:16:28.252Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ff/7f72e8170be527b4977b033239a83a68d5c881cc4775fca255c677f7ac5d/uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42", size = 1359936, upload-time = "2025-10-16T22:16:29.436Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c6/e5d433f88fd54d81ef4be58b2b7b0cea13c442454a1db703a1eea0db1a59/uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6", size = 752769, upload-time = "2025-10-16T22:16:30.493Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/a6ac446820273e71aa762fa21cdcc09861edd3536ff47c5cd3b7afb10eeb/uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370", size = 4317413, upload-time = "2025-10-16T22:16:31.644Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4", size = 4426307, upload-time = "2025-10-16T22:16:32.917Z" }, + { url = "https://files.pythonhosted.org/packages/90/60/97362554ac21e20e81bcef1150cb2a7e4ffdaf8ea1e5b2e8bf7a053caa18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2", size = 4131970, upload-time = "2025-10-16T22:16:34.015Z" }, + { url = "https://files.pythonhosted.org/packages/99/39/6b3f7d234ba3964c428a6e40006340f53ba37993f46ed6e111c6e9141d18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0", size = 4296343, upload-time = "2025-10-16T22:16:35.149Z" }, + { url = "https://files.pythonhosted.org/packages/89/8c/182a2a593195bfd39842ea68ebc084e20c850806117213f5a299dfc513d9/uvloop-0.22.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:561577354eb94200d75aca23fbde86ee11be36b00e52a4eaf8f50fb0c86b7705", size = 1358611, upload-time = "2025-10-16T22:16:36.833Z" }, + { url = "https://files.pythonhosted.org/packages/d2/14/e301ee96a6dc95224b6f1162cd3312f6d1217be3907b79173b06785f2fe7/uvloop-0.22.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cdf5192ab3e674ca26da2eada35b288d2fa49fdd0f357a19f0e7c4e7d5077c8", size = 751811, upload-time = "2025-10-16T22:16:38.275Z" }, + { url = "https://files.pythonhosted.org/packages/b7/02/654426ce265ac19e2980bfd9ea6590ca96a56f10c76e63801a2df01c0486/uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d", size = 4288562, upload-time = "2025-10-16T22:16:39.375Z" }, + { url = "https://files.pythonhosted.org/packages/15/c0/0be24758891ef825f2065cd5db8741aaddabe3e248ee6acc5e8a80f04005/uvloop-0.22.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0530a5fbad9c9e4ee3f2b33b148c6a64d47bbad8000ea63704fa8260f4cf728e", size = 4366890, upload-time = "2025-10-16T22:16:40.547Z" }, + { url = "https://files.pythonhosted.org/packages/d2/53/8369e5219a5855869bcee5f4d317f6da0e2c669aecf0ef7d371e3d084449/uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e", size = 4119472, upload-time = "2025-10-16T22:16:41.694Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ba/d69adbe699b768f6b29a5eec7b47dd610bd17a69de51b251126a801369ea/uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad", size = 4239051, upload-time = "2025-10-16T22:16:43.224Z" }, + { url = "https://files.pythonhosted.org/packages/90/cd/b62bdeaa429758aee8de8b00ac0dd26593a9de93d302bff3d21439e9791d/uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142", size = 1362067, upload-time = "2025-10-16T22:16:44.503Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f8/a132124dfda0777e489ca86732e85e69afcd1ff7686647000050ba670689/uvloop-0.22.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4baa86acedf1d62115c1dc6ad1e17134476688f08c6efd8a2ab076e815665c74", size = 752423, upload-time = "2025-10-16T22:16:45.968Z" }, + { url = "https://files.pythonhosted.org/packages/a3/94/94af78c156f88da4b3a733773ad5ba0b164393e357cc4bd0ab2e2677a7d6/uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35", size = 4272437, upload-time = "2025-10-16T22:16:47.451Z" }, + { url = "https://files.pythonhosted.org/packages/b5/35/60249e9fd07b32c665192cec7af29e06c7cd96fa1d08b84f012a56a0b38e/uvloop-0.22.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1955d5a1dd43198244d47664a5858082a3239766a839b2102a269aaff7a4e25", size = 4292101, upload-time = "2025-10-16T22:16:49.318Z" }, + { url = "https://files.pythonhosted.org/packages/02/62/67d382dfcb25d0a98ce73c11ed1a6fba5037a1a1d533dcbb7cab033a2636/uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6", size = 4114158, upload-time = "2025-10-16T22:16:50.517Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/f1171b4a882a5d13c8b7576f348acfe6074d72eaf52cccef752f748d4a9f/uvloop-0.22.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:93f617675b2d03af4e72a5333ef89450dfaa5321303ede6e67ba9c9d26878079", size = 4177360, upload-time = "2025-10-16T22:16:52.646Z" }, + { url = "https://files.pythonhosted.org/packages/79/7b/b01414f31546caf0919da80ad57cbfe24c56b151d12af68cee1b04922ca8/uvloop-0.22.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:37554f70528f60cad66945b885eb01f1bb514f132d92b6eeed1c90fd54ed6289", size = 1454790, upload-time = "2025-10-16T22:16:54.355Z" }, + { url = "https://files.pythonhosted.org/packages/d4/31/0bb232318dd838cad3fa8fb0c68c8b40e1145b32025581975e18b11fab40/uvloop-0.22.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b76324e2dc033a0b2f435f33eb88ff9913c156ef78e153fb210e03c13da746b3", size = 796783, upload-time = "2025-10-16T22:16:55.906Z" }, + { url = "https://files.pythonhosted.org/packages/42/38/c9b09f3271a7a723a5de69f8e237ab8e7803183131bc57c890db0b6bb872/uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c", size = 4647548, upload-time = "2025-10-16T22:16:57.008Z" }, + { url = "https://files.pythonhosted.org/packages/c1/37/945b4ca0ac27e3dc4952642d4c900edd030b3da6c9634875af6e13ae80e5/uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21", size = 4467065, upload-time = "2025-10-16T22:16:58.206Z" }, + { url = "https://files.pythonhosted.org/packages/97/cc/48d232f33d60e2e2e0b42f4e73455b146b76ebe216487e862700457fbf3c/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88", size = 4328384, upload-time = "2025-10-16T22:16:59.36Z" }, + { url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cd/41/5e1a4bb12aac5f1493fa1bdc11154eca3b258ca4eba65d39c473fe19d8e9/watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838", size = 108252, upload-time = "2026-05-18T04:32:04.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/3d/8024c801df84d1587740d0359e7fdd80afeae3d159011f3d5376dd82f18e/watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201", size = 400242, upload-time = "2026-05-18T04:31:19.014Z" }, + { url = "https://files.pythonhosted.org/packages/87/5b/f4dfd45323e949984a3a7f9dc31d1cbb049921e7d98253488dda72ccdaa9/watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5", size = 394562, upload-time = "2026-05-18T04:30:08.46Z" }, + { url = "https://files.pythonhosted.org/packages/98/d8/19483ef075d601c409bce8bcbb5c0f81a10876fff870400568f08ce484a1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a", size = 456611, upload-time = "2026-05-18T04:30:45.723Z" }, + { url = "https://files.pythonhosted.org/packages/b1/6a/cc81fbe7ee42f2f22e661a6e12def7807e01b14b2f39e0ff83fd373fd307/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1", size = 461379, upload-time = "2026-05-18T04:31:29.292Z" }, + { url = "https://files.pythonhosted.org/packages/b1/57/7e669002082c0a0f4fb5113bb70125f7110124b846b0a11bc5ae8e90eac1/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717", size = 493556, upload-time = "2026-05-18T04:30:05.44Z" }, + { url = "https://files.pythonhosted.org/packages/45/7d/f60a2b19807b21fe8281f3a8da4f59eef0d5f96825ac4680ba2d4f2ebf91/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b", size = 575255, upload-time = "2026-05-18T04:30:40.568Z" }, + { url = "https://files.pythonhosted.org/packages/bd/49/77f5b5e6efbcd57482f74948ebb1b97e5c0046d6b61475042d830c84b3ff/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5", size = 467052, upload-time = "2026-05-18T04:31:17.942Z" }, + { url = "https://files.pythonhosted.org/packages/ee/5a/73e2959af1b97fd5d556f9a8bdba017be23ceeef731869d5eaa0a753d5a3/watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e", size = 456858, upload-time = "2026-05-18T04:30:30.182Z" }, + { url = "https://files.pythonhosted.org/packages/50/57/1bc8c27fad7e6c19bddee15d276dbb6ab72480ec01c127afff1673aee417/watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165", size = 467579, upload-time = "2026-05-18T04:32:15.897Z" }, + { url = "https://files.pythonhosted.org/packages/09/6c/3c2e44edba3553c5e3c3b8c8a2a6dee6b9e12ae2cf4bd2378bebf9dc3038/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6", size = 633253, upload-time = "2026-05-18T04:31:37.123Z" }, + { url = "https://files.pythonhosted.org/packages/30/c2/d8c84a882ab39bbefcc4915ab3e91830b7a7e990c5570b0b69075aba3faf/watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5", size = 660713, upload-time = "2026-05-18T04:31:24.62Z" }, + { url = "https://files.pythonhosted.org/packages/a9/07/f97736a5fc605364fe67b25e9fa4a6965dfd4840d50c406ada507e9d735f/watchfiles-1.2.0-cp311-cp311-win32.whl", hash = "sha256:9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8", size = 277222, upload-time = "2026-05-18T04:31:21.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/99/2b04981977fc2608afd60360d928c6aecf6b950292ca221d98f4005f6694/watchfiles-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22", size = 290274, upload-time = "2026-05-18T04:31:45.966Z" }, + { url = "https://files.pythonhosted.org/packages/3c/74/f7f58a7075ee9cf612b0cfcddb78b8cd8234f0742d6f0075cf0da2dde1c6/watchfiles-1.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7", size = 283460, upload-time = "2026-05-18T04:31:39.126Z" }, + { url = "https://files.pythonhosted.org/packages/b8/2f/e42c992d2afda3108ea1c02acecc991b9f31d05c14adc2a7cee9ee211fc4/watchfiles-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26", size = 400115, upload-time = "2026-05-18T04:32:02.06Z" }, + { url = "https://files.pythonhosted.org/packages/5f/8f/6af2ea19065c91d8b0ea3516fdfc8c0d349f407e8e9fbf4e5a17360de8ad/watchfiles-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c", size = 393659, upload-time = "2026-05-18T04:30:50.951Z" }, + { url = "https://files.pythonhosted.org/packages/13/01/b32a967c56fb3e3e5be3db52c3d3b87fa4513aa367d8ed1ad96d42952e5f/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc", size = 453207, upload-time = "2026-05-18T04:31:04.231Z" }, + { url = "https://files.pythonhosted.org/packages/04/98/97557a812180338cb1abd32e1cffcc4588f59b5f23e0cb006b2ba95ba64a/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0", size = 459273, upload-time = "2026-05-18T04:31:50.377Z" }, + { url = "https://files.pythonhosted.org/packages/e8/a8/b4b08dcb7653b8087c6586f7ce649505900e866bbcfe40dc9587af02e686/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c", size = 489927, upload-time = "2026-05-18T04:31:42.485Z" }, + { url = "https://files.pythonhosted.org/packages/50/94/3dceea03545d2e5ddfd839f0ddd5e1cecbf1697b5a428d5ba11cef6af95d/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01", size = 570476, upload-time = "2026-05-18T04:31:03.071Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f2/d39a5450c3532092b91f81d274360e613c2371bc874a89c7a1a3c5e8d138/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8", size = 465650, upload-time = "2026-05-18T04:30:12.701Z" }, + { url = "https://files.pythonhosted.org/packages/22/24/ed72f68cbc1333ca9b9f2200aa048bb6658ae41709bc1caad4310f4bdffd/watchfiles-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5", size = 456398, upload-time = "2026-05-18T04:30:13.784Z" }, + { url = "https://files.pythonhosted.org/packages/0d/64/982ef4a4e5bab5b6e5b6becc8cd5e732f6130a78b855f0abec6439a9a135/watchfiles-1.2.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d", size = 465140, upload-time = "2026-05-18T04:31:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/a0/0c/95282abf4ed680b6096010bcfc30c5fa7a041fc5aa5a2ad17a2cc6c75bba/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c", size = 630259, upload-time = "2026-05-18T04:31:25.676Z" }, + { url = "https://files.pythonhosted.org/packages/30/45/607c1de1530c4bdcf2cf1d1ecc2505ddba5d96bd43ba9f2b0e79876f850f/watchfiles-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906", size = 659859, upload-time = "2026-05-18T04:30:24.333Z" }, + { url = "https://files.pythonhosted.org/packages/fa/08/d9e2e0f9e8e6791d33aefc694ad7eefa7f901f63caff84a81ded38692f9c/watchfiles-1.2.0-cp312-cp312-win32.whl", hash = "sha256:7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898", size = 275480, upload-time = "2026-05-18T04:30:31.307Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e6/9d42569c0102645cc8cea5d8c7d8a1e9d4ada2cb7f05f75e554b8aa2202a/watchfiles-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379", size = 288718, upload-time = "2026-05-18T04:32:10.745Z" }, + { url = "https://files.pythonhosted.org/packages/0a/26/88e0dc6ee3898169d7fa22bb6a69cabf2502d2ee25cb8c876d1262d204f8/watchfiles-1.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5", size = 281026, upload-time = "2026-05-18T04:30:22.23Z" }, + { url = "https://files.pythonhosted.org/packages/d1/4d/70a7feced9f87e2ff26dba42667290f41694fc64646c67261fbb8cab5d5c/watchfiles-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98", size = 399730, upload-time = "2026-05-18T04:31:38.162Z" }, + { url = "https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44", size = 392842, upload-time = "2026-05-18T04:30:27.051Z" }, + { url = "https://files.pythonhosted.org/packages/db/ef/d5bdb705c224dbc256aa0c1ec47bf4e61ec52558f2afb44a71a1fe4d7015/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658", size = 452989, upload-time = "2026-05-18T04:31:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/71/29/5495f2c1661949ef7a35e4d71111d129cfe7606414a26887a919d0a55406/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb", size = 458978, upload-time = "2026-05-18T04:30:52.606Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8c/7f9c07c433811c2fffd93e13fdfb7135de9aab5f2ae41be08960fa0047dc/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f", size = 490248, upload-time = "2026-05-18T04:31:36.003Z" }, + { url = "https://files.pythonhosted.org/packages/3c/11/d93632febc52fbc21be90231bb7c17fd5387f46c9076fd40a5f9c2ae6910/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0", size = 571847, upload-time = "2026-05-18T04:31:10.862Z" }, + { url = "https://files.pythonhosted.org/packages/55/b4/383173e73aabb07ad1d9c7aa859d95437ac46a6d6a1e11005facda0c9d19/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5", size = 465974, upload-time = "2026-05-18T04:30:17.006Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71", size = 454782, upload-time = "2026-05-18T04:30:35.656Z" }, + { url = "https://files.pythonhosted.org/packages/24/62/1732118367cfff0a9fce3bf62ff4bfded09ef5df21d9d446b858b3f70a96/watchfiles-1.2.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3", size = 465182, upload-time = "2026-05-18T04:30:20.846Z" }, + { url = "https://files.pythonhosted.org/packages/28/96/716f7e5f51339bf22963f3345f9f27d7f3b30e2eadc597e257c881dd3c53/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0", size = 629841, upload-time = "2026-05-18T04:31:05.397Z" }, + { url = "https://files.pythonhosted.org/packages/4c/fe/c40783950fd771ccf66ab3ec2722d188a9af1c7f96c6e811f36e40c6e03f/watchfiles-1.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427", size = 658028, upload-time = "2026-05-18T04:31:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/71/72/4508db1856d1d87fcbb3b63f4839bab1b5682cb0e8d224d122263c09654a/watchfiles-1.2.0-cp313-cp313-win32.whl", hash = "sha256:eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799", size = 275183, upload-time = "2026-05-18T04:30:59.57Z" }, + { url = "https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9", size = 288059, upload-time = "2026-05-18T04:32:07.937Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8d/0a85e395398d8d20fadfe5c5d32c726eee17a519e78fb356f2cf7531bffe/watchfiles-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077", size = 280186, upload-time = "2026-05-18T04:31:54.484Z" }, + { url = "https://files.pythonhosted.org/packages/37/68/36db056f1fdcc5f07302f56e631774d6835bcd6fa3ace402304621d5f9e5/watchfiles-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08", size = 399031, upload-time = "2026-05-18T04:30:44.576Z" }, + { url = "https://files.pythonhosted.org/packages/c1/64/01a9d6f66a82a5c101ce939274106cc72759d62427e153f01edd2b9f87c2/watchfiles-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9", size = 391205, upload-time = "2026-05-18T04:30:25.413Z" }, + { url = "https://files.pythonhosted.org/packages/84/2c/0a44fe058cb4bb7b8ede6b6670698bbb7c0400740e378d00022189b7b31d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4", size = 451892, upload-time = "2026-05-18T04:32:14.005Z" }, + { url = "https://files.pythonhosted.org/packages/67/a1/351e0d56cd35e6488b5c8b4fb11a809a5bc923e8fe8fed9faf8920be0c89/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55", size = 458867, upload-time = "2026-05-18T04:31:22.279Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/9d09605187f1b838998624049fcf8bf47b73c1a3b76901fcac1782f62277/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925", size = 490217, upload-time = "2026-05-18T04:31:43.657Z" }, + { url = "https://files.pythonhosted.org/packages/60/5d/a17a16eccb182f04188cd308ec24b1a71a9b5c4e7098269cf35d9fa56d02/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4", size = 571458, upload-time = "2026-05-18T04:32:11.875Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3d/4dd457062083ab1938e5dfd45032eb425cee2ac817287ca8ff4356183e5d/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2", size = 464707, upload-time = "2026-05-18T04:30:43.492Z" }, + { url = "https://files.pythonhosted.org/packages/c6/71/ea8c57b128f5383de74d0c7d2d9c57ad7c9a65a930c451bd25d524b295b7/watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9", size = 454663, upload-time = "2026-05-18T04:30:16.061Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/2e812bf938406d7db351f0703ddd3fc6c061cf30d96153a77bc79a943a44/watchfiles-1.2.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa", size = 463537, upload-time = "2026-05-18T04:31:44.9Z" }, + { url = "https://files.pythonhosted.org/packages/86/56/d17a7f1dd1bc3035f1072694a551301272f1739c2d8e319c927cb9e29b38/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44", size = 629194, upload-time = "2026-05-18T04:31:14.141Z" }, + { url = "https://files.pythonhosted.org/packages/be/06/f1ff66bf5cae50aa4062779a0ecd0bbaf15e466195719074078947d9a17d/watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72", size = 656194, upload-time = "2026-05-18T04:31:47.14Z" }, + { url = "https://files.pythonhosted.org/packages/e7/54/a9c7ea9a82a4ac65e7004c0a03920b5cdd2f9c3b678757d9cd425aa51d53/watchfiles-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4", size = 400205, upload-time = "2026-05-18T04:32:05.153Z" }, + { url = "https://files.pythonhosted.org/packages/aa/5d/c9ab3534374a4a67450696905d6ef16a04405448b8dc52bd752ae50423d4/watchfiles-1.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281", size = 392508, upload-time = "2026-05-18T04:30:54.849Z" }, + { url = "https://files.pythonhosted.org/packages/26/ca/1ad30103535cf0cecd7b993e8d50edc5351b1820e38f2d22e3df58962feb/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d", size = 452448, upload-time = "2026-05-18T04:30:53.727Z" }, + { url = "https://files.pythonhosted.org/packages/37/a1/ceee2cdf2afbd715fa07758d39c9859513eae411b23196f7fd039e5feedd/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e", size = 459605, upload-time = "2026-05-18T04:30:23.312Z" }, + { url = "https://files.pythonhosted.org/packages/e8/f6/421e30fd1cb3907a84ed92ab3f1983e37ba2dca015e9a894a048418417a2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242", size = 490757, upload-time = "2026-05-18T04:30:47.358Z" }, + { url = "https://files.pythonhosted.org/packages/41/b0/55ed1b97ed08be7bba6f9a541cac15f2a858e1d74d2b07b6da70a82aab00/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add", size = 568672, upload-time = "2026-05-18T04:30:38.915Z" }, + { url = "https://files.pythonhosted.org/packages/d1/cf/d8ae8a80dd7bafab395ea7681c10237311bbf34d37704a8c744e7cf31fc7/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f", size = 464197, upload-time = "2026-05-18T04:30:09.914Z" }, + { url = "https://files.pythonhosted.org/packages/7c/8a/3076c496ca8dafe0e8cd03fcebdfc47be4b1174b4e5b24ff6e396e6b3af2/watchfiles-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7", size = 453181, upload-time = "2026-05-18T04:30:14.829Z" }, + { url = "https://files.pythonhosted.org/packages/e5/10/9745e17c98e7b8a86454df0a3c7b5686bd650383f1e9f26e4ebcbd6cc0c0/watchfiles-1.2.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e", size = 465109, upload-time = "2026-05-18T04:30:28.123Z" }, + { url = "https://files.pythonhosted.org/packages/8f/95/8ef4a95481d3e0cb52d62a06fa6e972e81424be2d9698b91a2fecca9904c/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06", size = 630653, upload-time = "2026-05-18T04:31:49.304Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e4/3b3bf36b0f829b50c6ebcb8d031583863c59f923d6a6af3d485e470d0fac/watchfiles-1.2.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba", size = 657838, upload-time = "2026-05-18T04:31:06.497Z" }, + { url = "https://files.pythonhosted.org/packages/21/b1/6cbbb50c1f3002ab568777d44aa21206dfb8807a840990c4037523b51812/watchfiles-1.2.0-cp314-cp314-win32.whl", hash = "sha256:c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7", size = 275108, upload-time = "2026-05-18T04:30:06.891Z" }, + { url = "https://files.pythonhosted.org/packages/92/45/190ce6db8dcb4536682cf75d3889ff1a27182a58cb519d343cb6d9ea63d8/watchfiles-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103", size = 288441, upload-time = "2026-05-18T04:32:12.901Z" }, + { url = "https://files.pythonhosted.org/packages/74/0d/3eae1c2313ab08378431d907c3f8095ecca00f3eda33111cf4f0f2591799/watchfiles-1.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3", size = 280684, upload-time = "2026-05-18T04:31:26.902Z" }, + { url = "https://files.pythonhosted.org/packages/b1/75/fb64e6c25d6b5ca636d03df34ffb1c6e9873303e76d27967e045f8df088f/watchfiles-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2", size = 398857, upload-time = "2026-05-18T04:32:17.108Z" }, + { url = "https://files.pythonhosted.org/packages/73/4e/9f7adf01754cbf81843722ccfec169d8f26c69778281a302855cecd2ee08/watchfiles-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28", size = 392413, upload-time = "2026-05-18T04:31:07.911Z" }, + { url = "https://files.pythonhosted.org/packages/47/c8/bec626bcc2d69f44b9acb24ce7d60ed7b16b73628eea747fcbd169d8edda/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831", size = 452409, upload-time = "2026-05-18T04:31:20.142Z" }, + { url = "https://files.pythonhosted.org/packages/00/b7/b6362068e81e7c556d155a34c35d40ac3ef42d747b06d7f6e5bf58e359c2/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33", size = 458827, upload-time = "2026-05-18T04:32:06.219Z" }, + { url = "https://files.pythonhosted.org/packages/67/f8/9a813fa42afb1e0b4625e75f0479826644d3ee8dc287e093799bc01f390c/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4", size = 490104, upload-time = "2026-05-18T04:31:56.034Z" }, + { url = "https://files.pythonhosted.org/packages/2f/bf/27dfb6094ca4c9aad21298b5525b6c53cb36121ee454331d05161e58d130/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b", size = 571360, upload-time = "2026-05-18T04:31:57.133Z" }, + { url = "https://files.pythonhosted.org/packages/fb/39/44a096d67270ea93df91d33877dbe91fbda3aa4f8ec2edf799d93eda8736/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666", size = 464644, upload-time = "2026-05-18T04:30:57.33Z" }, + { url = "https://files.pythonhosted.org/packages/0e/80/c7472203bad6268e3ef1ad260739704847898938ad7ea8b63a5131f46b50/watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925", size = 454771, upload-time = "2026-05-18T04:30:48.736Z" }, + { url = "https://files.pythonhosted.org/packages/51/cf/3b10b268b4b7f0fc26e9debb5eef1998b515887840f444cd3ec80c688755/watchfiles-1.2.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b", size = 463494, upload-time = "2026-05-18T04:31:33.826Z" }, + { url = "https://files.pythonhosted.org/packages/3d/3e/a4302545cd589262a0dc7d140e86f7688eba3f9c72776c27f7e23b8864c4/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30", size = 629383, upload-time = "2026-05-18T04:31:15.596Z" }, + { url = "https://files.pythonhosted.org/packages/db/99/d5649df0a9a410d45b7c882304d0b790903ac9b6e8f2cfd12114e0c6b9f2/watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5", size = 656093, upload-time = "2026-05-18T04:31:58.707Z" }, + { url = "https://files.pythonhosted.org/packages/92/b9/362702539275019a54dd2e94511b31a9b89c5f9e6a21966de7eb692549fc/watchfiles-1.2.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:37a6721cdf3f65dbb13aa9503510ccb4451603ac837e44d265d7992a597e1374", size = 400109, upload-time = "2026-05-18T04:31:16.879Z" }, + { url = "https://files.pythonhosted.org/packages/8f/75/71d5ba62db781e5587bded1d944c675374bc4aa37ff33d5018d98e8b6538/watchfiles-1.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2b37d10b5a63bd4d87e18472d80fa525bd670586fae62e5dd580452764879b65", size = 392167, upload-time = "2026-05-18T04:31:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/3c/01/c66dd95d0423fe30d31820e2d1d5bda773764131bbb6ac0cb1cf303ac328/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a105bc2283f67e8fbec74253ec2d94925de92ed72c0393f1206bf326b7b7b69", size = 452372, upload-time = "2026-05-18T04:31:00.836Z" }, + { url = "https://files.pythonhosted.org/packages/91/15/2fe99557e72f85627c6a8eed50d889e8d101623e060a22ad75b875cb932d/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5327989a465505f05cfe06f04fa9d0c2fd5432bb243e10e6f012b1bdca3c8579", size = 459596, upload-time = "2026-05-18T04:31:34.96Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/d4acfa0023367428ed48351b3b9b267893037b6cadae55620c61c24bcfd4/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb47f183a8025b2aa18b546725c3657e542112ae9c0613a2af79b4fa8d04ad7", size = 490869, upload-time = "2026-05-18T04:31:59.923Z" }, + { url = "https://files.pythonhosted.org/packages/a4/5f/3164cbdce06c9fb95c4f7b9e2f9760b5e2797af43a9ecc317ef42a23a278/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8520a4ab0e37f770afc34459c4f8f7019e153f9124dc101c15538365875d1ab2", size = 571641, upload-time = "2026-05-18T04:32:00.948Z" }, + { url = "https://files.pythonhosted.org/packages/41/e6/85d3731c55e65cd7690f3f803d24c139588aaf863e4bf2148fe7a7fa1a19/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71cd71740ed2c15211ebb237ced4e39a1cdf6f80566e5fe95428da1626f4fde6", size = 464444, upload-time = "2026-05-18T04:30:34.298Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7d/562641012b8b09872742c3b8adf9629ec479fd78f8d68ae4a0c13da8add6/watchfiles-1.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f88af53d6ddaf72179ef613ddc905e6f4785f712b49b80b3bef9f3525e6194b4", size = 453593, upload-time = "2026-05-18T04:31:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/56/fe/cb8ef3d6f929d14158fdaaad9925985b7310abc9384dcd4d82dd0016fb59/watchfiles-1.2.0-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:cee9d5efd929efdac5f7e58f72b3376f676b64050a91c5b99a7094c5b2317488", size = 465096, upload-time = "2026-05-18T04:31:30.384Z" }, + { url = "https://files.pythonhosted.org/packages/25/91/80908e835e100527a9267147b08c0eee1fa6ab0ffec15edc04d1d44885f7/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b718bf356bbc15e559bd8ef41782b573b8ae0e3f177ab244b440568d7ea02cfb", size = 630638, upload-time = "2026-05-18T04:30:49.89Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/95ab2f256bb4af3cb2eb23b9317bda984ee6e0f11733a5c004a6c95b06e3/watchfiles-1.2.0-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:922c0e019fe68b3ae392965a766b02a71ba1168c932cebc3733cd52c5fe5b377", size = 657684, upload-time = "2026-05-18T04:31:32.027Z" }, + { url = "https://files.pythonhosted.org/packages/23/f4/7513ef1e85fc4c6331b59479d6d72661fc391fbe543678052ac72c8b6c19/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2", size = 403050, upload-time = "2026-05-18T04:30:36.753Z" }, + { url = "https://files.pythonhosted.org/packages/27/0b/a54103cfd732bb703c7a749222011a0483ef3705948dae3b203158601119/watchfiles-1.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db", size = 396629, upload-time = "2026-05-18T04:32:03.268Z" }, + { url = "https://files.pythonhosted.org/packages/5e/2c/73f31a3b893886206c3f54d73e8ad8dee58cdb2f69ad2622e0a8a9e07f4e/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7", size = 457318, upload-time = "2026-05-18T04:31:01.932Z" }, + { url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + +[[package]] +name = "xxhash" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/24/2f/e183a1b407002f5af81822bee18b61cdb94b8670208ef34734d8d2b8ebe9/xxhash-3.7.0.tar.gz", hash = "sha256:6cc4eefbb542a5d6ffd6d70ea9c502957c925e800f998c5630ecc809d6702bae", size = 82022, upload-time = "2026-04-25T11:10:32.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/f4/7bd35089ff1f8e2c96baa2dce05775a122aacd2e3830a73165e27a4d0848/xxhash-3.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fdc7d06929ae28dda98297a18eef7b0fd38991a3b405d8d7b55c9ef24c296958", size = 33423, upload-time = "2026-04-25T11:05:47.628Z" }, + { url = "https://files.pythonhosted.org/packages/a3/26/4e00c88a6a2c8a759cfb77d2a9a405f901e8aa66e60ef1fd0aeb35edda48/xxhash-3.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ea6daa712f4e094a30830cf01e9b47d03b24d05cc9dab8609f0d9a9db8454712", size = 30857, upload-time = "2026-04-25T11:05:49.189Z" }, + { url = "https://files.pythonhosted.org/packages/82/2f/eeb942c17a5a761a8f01cb9180a0b76bfb62a2c39e6f46b1f9001899027a/xxhash-3.7.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9e6c0d843f1daf85ea23aeb053579135552bde575b7b98af20bfc667b6e4548d", size = 194702, upload-time = "2026-04-25T11:05:50.457Z" }, + { url = "https://files.pythonhosted.org/packages/0e/fd/96f132c08b1e5951c68691d3b9ec351ec2edc028f6a01fcd294f46b9d9f0/xxhash-3.7.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:363c139bf15e1ac5f136b981d3c077eb551299b1effede7f12faa010b8590a60", size = 213613, upload-time = "2026-04-25T11:05:52.571Z" }, + { url = "https://files.pythonhosted.org/packages/82/89/d4e92b796c5ed052d29ed324dbfc1dc1188e0c4bf64bebbf0f8fc20698df/xxhash-3.7.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a778b25874cb0f862eaab5986bff4ca49ffb0def7c0a34c237b948b3c6c775b2", size = 236726, upload-time = "2026-04-25T11:05:54.395Z" }, + { url = "https://files.pythonhosted.org/packages/40/f1/81fc4361921dc6e557a9c60cb3712f36d244d06eeeb71cd2f4252ac42678/xxhash-3.7.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e1860f1e43d40e9d904cf22d93e587ea42e010ebce4160877e46bcab4bc232a", size = 212443, upload-time = "2026-04-25T11:05:56.334Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d0/afeddd4cff50a332f50d4b8a2e8857673153ab0564ef472fcdeb0b5430df/xxhash-3.7.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9122ad6f867c4a0f5e655f5c3bdf89103852009dbb442a3d23e688b9e699e800", size = 445793, upload-time = "2026-04-25T11:05:58.953Z" }, + { url = "https://files.pythonhosted.org/packages/f7/d0/3c91e4e6a05ca4d7df8e39ec3a75b713609258ec84705ab34be6430826a1/xxhash-3.7.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d7d9110d0c3fb02679972837a033251fd186c529aa62f19c132fc909c74052b8", size = 193937, upload-time = "2026-04-25T11:06:00.546Z" }, + { url = "https://files.pythonhosted.org/packages/4e/3a/a6b0772d9801dd4bea4ca4fd34734d6e9b51a711c8a611a24a79de26a878/xxhash-3.7.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:347a93f2b4ce67ce61959665e32a7447c380f8347e55e100daa23766baacf0e5", size = 285188, upload-time = "2026-04-25T11:06:01.96Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f8/cf8e31fd7282230fe7367cd501a2e75b4b67b222bfc7eacccfc20d2652cb/xxhash-3.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:acbb48679ddf3852c45280c10ff10d52ca2cd1da2e552fb81db1ff786c75d0e4", size = 210966, upload-time = "2026-04-25T11:06:03.453Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f0/fd36cc4a81bf52ee5633275daae2b93dd958aace67fd4f5d466ec83b5f35/xxhash-3.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:fe14c356f8b23ad811dc026077a6d4abccdaa7bce5ca98579605550657b6fcfb", size = 241994, upload-time = "2026-04-25T11:06:05.264Z" }, + { url = "https://files.pythonhosted.org/packages/08/e1/67f5d9c9369be42eaf99ba02c01bf14c5ecd67087b02567960bfcee43b63/xxhash-3.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f420ad3d41e38194353a498bbc9561fd5a9973a27b536ce46d8583479cf44335", size = 198707, upload-time = "2026-04-25T11:06:07.044Z" }, + { url = "https://files.pythonhosted.org/packages/50/17/a4c865ca22d2da6b1bc7d739bf88cab209533cf52ba06ca9da27c3039bee/xxhash-3.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:693d02c6dc7d1aa0a45921d54cd8c1ff629e09dfdc2238471507af1f7a1c6f04", size = 210917, upload-time = "2026-04-25T11:06:08.853Z" }, + { url = "https://files.pythonhosted.org/packages/49/8b/453b35810d697abac3c96bde3528bece685869227da274eb80a4a4d4a119/xxhash-3.7.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:14bf7a54e43825ec131ee7fe3c60e142e7c2c1e676ad0f93fc893432d15414af", size = 275772, upload-time = "2026-04-25T11:06:10.645Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ad/4eed7eab07fd3ee6678f416190f0413d097ab5d7c1278906bf1e9549d789/xxhash-3.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:ae3a39a4d96bdb6f8d154fd7f490c4ad06f0532fcd2bb656052a9a7762cf5d31", size = 414068, upload-time = "2026-04-25T11:06:12.511Z" }, + { url = "https://files.pythonhosted.org/packages/d3/4e/fd6f8a680ba248fdb83054fa71a8bfa3891225200de1708b888ef2c49829/xxhash-3.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1cc07c639e3a77ef1d32987464d3e408565b8a3be57b545d3542b191054d9923", size = 191459, upload-time = "2026-04-25T11:06:14.07Z" }, + { url = "https://files.pythonhosted.org/packages/50/7c/8cb34b3bed4f44ca6827a534d50833f9bc6c006e83b0eb410ac9fa0793bd/xxhash-3.7.0-cp311-cp311-win32.whl", hash = "sha256:3281ba1d1e60ee7a382a7b958513ba03c2c0d5fcbd9a6f7517c0a81251a23422", size = 30628, upload-time = "2026-04-25T11:06:15.802Z" }, + { url = "https://files.pythonhosted.org/packages/0b/47/a49767bd7b40782bedae9ff0721bfe1d7e4dd9dc1585dea684e57ba67c20/xxhash-3.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:a7f25baec4c5d851d40718d6fae52285b31683093d4ff5207e63ab306ccf14a5", size = 31461, upload-time = "2026-04-25T11:06:17.104Z" }, + { url = "https://files.pythonhosted.org/packages/7c/c6/3957bfacfb706bd687be246dfa8dd60f8df97c44186d229f7fd6e26c4b7e/xxhash-3.7.0-cp311-cp311-win_arm64.whl", hash = "sha256:4c2454448ce847c72635827bb75c15c5a3434b03ee1afd28cb6dc6fb2597d830", size = 27746, upload-time = "2026-04-25T11:06:18.716Z" }, + { url = "https://files.pythonhosted.org/packages/f2/8a/51a14cdef4728c6c2337db8a7d8704422cc65676d9199d77215464c880af/xxhash-3.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:082c87bfdd2b9f457606c7a4a53457f4c4b48b0cdc48de0277f4349d79bb3d7a", size = 33357, upload-time = "2026-04-25T11:06:20.44Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1b/0c2c933809421ffd9bf42b59315552c143c755db5d9a816b2f1ae273e884/xxhash-3.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5e7ce913b61f35b0c1c839a49ac9c8e75dd8d860150688aed353b0ce1bf409d8", size = 30869, upload-time = "2026-04-25T11:06:21.989Z" }, + { url = "https://files.pythonhosted.org/packages/03/a8/89d5fdd6ee12d70ba99451de46dd0e8010167468dcd913ec855653f4dd50/xxhash-3.7.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3beb1de3b1e9694fcdd853e570ee64c631c7062435d2f8c69c1adf809bc086f0", size = 194100, upload-time = "2026-04-25T11:06:23.586Z" }, + { url = "https://files.pythonhosted.org/packages/87/ee/2f9f2ed993e77206d1e66991290a1ebe22e843351ca3ebec8e49e01ba186/xxhash-3.7.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3e7b689c3bce16699efcf736066f5c6cc4472c3840fe4b22bd8279daf4abdac", size = 212977, upload-time = "2026-04-25T11:06:25.019Z" }, + { url = "https://files.pythonhosted.org/packages/de/60/5a91644615a9e9d4e42c2e9925f1908e3a24e4e691d9de7340d565bea024/xxhash-3.7.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a6545e6b409e3d5cbafc850fb84c55a1ca26ed15a6b11e3bf07a0e0cd84517c8", size = 236373, upload-time = "2026-04-25T11:06:26.482Z" }, + { url = "https://files.pythonhosted.org/packages/22/c0/f3a9384eaaed9d14d4d062a5d953aa0da489bfe9747877aa994caa87cd0b/xxhash-3.7.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:31ab1461c77a11461d703c88eb949e132a1c6515933cf675d97ec680f4bd18de", size = 212229, upload-time = "2026-04-25T11:06:28.065Z" }, + { url = "https://files.pythonhosted.org/packages/2e/67/02f07a9fd79726804190f2172c4894c3ed9a4ebccaca05653c84beb58025/xxhash-3.7.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7c4d596b7676f811172687ec567cbafb9e4dea2f9be1bbb4f622410cb7f40f40", size = 445462, upload-time = "2026-04-25T11:06:30.048Z" }, + { url = "https://files.pythonhosted.org/packages/40/37/558f5a90c0672fc9b4402dc25d87ac5b7406616e8969430c9ca4e52ee74d/xxhash-3.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13805f0461cba0a857924e70ff91ae6d52d2598f79a884e788db80532614a4a1", size = 193932, upload-time = "2026-04-25T11:06:31.857Z" }, + { url = "https://files.pythonhosted.org/packages/d5/90/aaa09cd58661d32044dbbad7df55bbe22a623032b810e7ed3b8c569a2a6f/xxhash-3.7.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d398f372496152f1c6933a33566373f8d1b37b98b8c9d608fa6edc0976f23b2", size = 284807, upload-time = "2026-04-25T11:06:33.697Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f3/53df3719ab127a02c174f0c1c74924fcd110866e89c966bc7909cfa8fa84/xxhash-3.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d610aa62cdb7d4d497740741772a24a794903bf3e79eaa51d2e800082abe11e5", size = 210445, upload-time = "2026-04-25T11:06:35.488Z" }, + { url = "https://files.pythonhosted.org/packages/72/33/d219975c0e8b6fa2eb9ccd486fe47e21bf1847985b878dd2fbc3126e0d5c/xxhash-3.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:073c23900a9fbf3d26616c17c830db28af9803677cd5b33aea3224d824111514", size = 241273, upload-time = "2026-04-25T11:06:37.24Z" }, + { url = "https://files.pythonhosted.org/packages/3e/50/49b1afe610eb3964cedcb90a4d4c3d46a261ee8669cbd4f060652619ae3c/xxhash-3.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:418a463c3e6a590c0cdc890f8be19adb44a8c8acd175ca5b2a6de77e61d0b386", size = 197950, upload-time = "2026-04-25T11:06:39.148Z" }, + { url = "https://files.pythonhosted.org/packages/c6/75/5f42a1a4c78717d906a4b6a140c6dbf837ab1f547a54d23c4e2903310936/xxhash-3.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:03f8ff4474ee61c845758ce00711d7087a770d77efb36f7e74a6e867301000b8", size = 210709, upload-time = "2026-04-25T11:06:40.958Z" }, + { url = "https://files.pythonhosted.org/packages/8a/85/237e446c25abced71e9c53d269f2cef5bab8a82b3f88a12e00c5368e7368/xxhash-3.7.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:44fba4a5f1d179b7ddc7b3dc40f56f9209046421679b57025d4d8821b376fd8d", size = 275345, upload-time = "2026-04-25T11:06:42.525Z" }, + { url = "https://files.pythonhosted.org/packages/62/34/c2c26c0a6a9cc739bc2a5f0ae03ba8b87deb12b8bce35f7ac495e790dc6d/xxhash-3.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:31e3516a0f829d06ded4a2c0f3c7c5561993256bfa1c493975fb9dc7bfa828a1", size = 414056, upload-time = "2026-04-25T11:06:44.343Z" }, + { url = "https://files.pythonhosted.org/packages/a0/aa/5c58e9bc8071b8afd8dcf297ff362f723c4892168faba149f19904132bf4/xxhash-3.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b59ee2ac81de57771a09ecad09191e840a1d2fae1ef684208320591055768f83", size = 191485, upload-time = "2026-04-25T11:06:46.262Z" }, + { url = "https://files.pythonhosted.org/packages/d4/69/a929cf9d1e2e65a48b818cdce72cb6b69eab2e6877f21436d0a1942aff43/xxhash-3.7.0-cp312-cp312-win32.whl", hash = "sha256:74bbd92f8c7fcc397ba0a11bfdc106bc72ad7f11e3a60277753f87e7532b4d81", size = 30671, upload-time = "2026-04-25T11:06:48.039Z" }, + { url = "https://files.pythonhosted.org/packages/b9/1b/104b41a8947f4e1d4a66ce1e628eea752f37d1890bfd7453559ca7a3d950/xxhash-3.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:7bd7bc82dd4f185f28f35193c2e968ef46131628e3cac62f639dadf321cba4d1", size = 31514, upload-time = "2026-04-25T11:06:49.279Z" }, + { url = "https://files.pythonhosted.org/packages/98/a0/1fd0ea1f1b886d9e7c73f0397571e22333a7d79e31da6d7127c2a4a71d75/xxhash-3.7.0-cp312-cp312-win_arm64.whl", hash = "sha256:7d7148180ec99ba36585b42c8c5de25e9b40191613bc4be68909b4d25a77a852", size = 27761, upload-time = "2026-04-25T11:06:50.448Z" }, + { url = "https://files.pythonhosted.org/packages/c1/ca/d5174b4c36d10f64d4ca7050563138c5a599efb01a765858ddefc9c1202a/xxhash-3.7.0-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:4b6d6b33f141158692bd4eafbb96edbc5aa0dabdb593a962db01a91983d4f8fa", size = 36813, upload-time = "2026-04-25T11:06:51.73Z" }, + { url = "https://files.pythonhosted.org/packages/41/d0/abc6c9d347ba1f1e1e1d98125d0881a0452c7f9a76a9dd03a7b5d2197f23/xxhash-3.7.0-cp313-cp313-android_21_x86_64.whl", hash = "sha256:845d347df254d6c619f616afa921331bada8614b8d373d58725c663ba97c3605", size = 35121, upload-time = "2026-04-25T11:06:53.048Z" }, + { url = "https://files.pythonhosted.org/packages/bf/11/4cc834eb3d79f2f2b3a6ef7324195208bcdfbdcf7534d2b17267aa5f3a8f/xxhash-3.7.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:fddbbb69a6fff4f421e7a0d1fa28f894b20112e9e3fab306af451e2dfd0e459b", size = 29624, upload-time = "2026-04-25T11:06:54.311Z" }, + { url = "https://files.pythonhosted.org/packages/23/83/e97d3e7b635fe73a1dfb1e91f805324dd6d930bb42041cbf18f183bc0b6d/xxhash-3.7.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:54876a4e45101cec2bf8f31a973cda073a23e2e108538dad224ba07f85f22487", size = 30638, upload-time = "2026-04-25T11:06:55.864Z" }, + { url = "https://files.pythonhosted.org/packages/f4/40/d84951d80c35db1f4c40a29a64a8520eea5d56e764c603906b4fe763580f/xxhash-3.7.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:0c72fe9c7e3d6dfd7f1e21e224a877917fa09c465694ba4e06464b9511b65544", size = 33323, upload-time = "2026-04-25T11:06:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/89/cc/c7dc6558d97e9ab023f663d69ab28b340ed9bf4d2d94f2c259cf896bb354/xxhash-3.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a6d73a830b17ef49bc04e00182bd839164c1b3c59c127cd7c54fcb10c7ed8ee8", size = 33362, upload-time = "2026-04-25T11:06:58.656Z" }, + { url = "https://files.pythonhosted.org/packages/2a/6e/46b84017b1301d54091430353d4ad5901654a3e0871649877a416f7f1644/xxhash-3.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:91c3b07cf3362086d8f126c6aecd8e5e9396ad8b2f2219ea7e49a8250c318acd", size = 30874, upload-time = "2026-04-25T11:06:59.834Z" }, + { url = "https://files.pythonhosted.org/packages/df/5e/8f9158e3ab906ad3fec51e09b5ea0093e769f12207bfa42a368ca204e7ab/xxhash-3.7.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:50e879ebbac351c81565ca108db766d7832f5b8b6a5b14b8c0151f7190028e3d", size = 194185, upload-time = "2026-04-25T11:07:01.658Z" }, + { url = "https://files.pythonhosted.org/packages/f3/29/a804ded9f5d3d3758292678d23e7528b08fda7b7e750688d08b052322475/xxhash-3.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:921c14e93817842dd0dd9f372890a0f0c72e534650b6ab13c5be5cd0db11d47e", size = 213033, upload-time = "2026-04-25T11:07:03.606Z" }, + { url = "https://files.pythonhosted.org/packages/8b/91/1ce5a7d2fdc975267320e2c78fc1cecfe7ab735ccbcf6993ec5dd541cb2c/xxhash-3.7.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e64a7c9d7dfca3e0fafcbc5e455519090706a3e36e95d655cec3e04e79f95aaa", size = 236140, upload-time = "2026-04-25T11:07:05.396Z" }, + { url = "https://files.pythonhosted.org/packages/34/04/fd595a4fd8617b05fa27bd9b684ecb4985bfed27917848eea85d54036d06/xxhash-3.7.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2220af08163baf5fa36c2b8af079dc2cbe6e66ae061385267f9472362dfd53c6", size = 212291, upload-time = "2026-04-25T11:07:06.966Z" }, + { url = "https://files.pythonhosted.org/packages/03/fb/f1a379cbc372ae5b9f4ab36154c48a849ca6ebe3ac477067a57865bf3bc6/xxhash-3.7.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f14bb8b22a4a91325813e3d553b8963c10cf8c756cff65ee50c194431296c655", size = 445532, upload-time = "2026-04-25T11:07:08.525Z" }, + { url = "https://files.pythonhosted.org/packages/65/59/172424b79f8cfd4b6d8a122b2193e6b8ad4b11f7159bb3b6f9b3191329bb/xxhash-3.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:496736f86a9bedaf64b0dc70e3539d0766df01c71ea22032698e88f3f04a1ce9", size = 193990, upload-time = "2026-04-25T11:07:10.315Z" }, + { url = "https://files.pythonhosted.org/packages/b9/19/aeac22161d953f139f07ba5586cb4a17c5b7b6dff985122803bb12933500/xxhash-3.7.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0ff71596bd79816975b3de7130ab1ff4541410285a3c084584eeb1c8239996fd", size = 284876, upload-time = "2026-04-25T11:07:12.15Z" }, + { url = "https://files.pythonhosted.org/packages/77/d5/4fd0b59e7a02242953da05ff679fbb961b0a4368eac97a217e11dae110c1/xxhash-3.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1ad86695c19b1d46fe106925db3c7a37f16be37669dcf58dcc70a9dd6e324676", size = 210495, upload-time = "2026-04-25T11:07:13.952Z" }, + { url = "https://files.pythonhosted.org/packages/aa/fb/976a3165c728c7faf74aa1b5ab3cf6a85e6d731612894741840524c7d28c/xxhash-3.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:970f9f8c50961d639cbd0d988c96f80ddf66006de93641719282c4fe7a87c5e6", size = 241331, upload-time = "2026-04-25T11:07:15.557Z" }, + { url = "https://files.pythonhosted.org/packages/4a/2c/6763d5901d53ac9e6ba296e5717ae599025c9d268396e8faa8b4b0a8e0ac/xxhash-3.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5886ad85e9e347911783760a1d16cb6b393e8f9e3b52c982568226cb56927bdc", size = 198037, upload-time = "2026-04-25T11:07:17.563Z" }, + { url = "https://files.pythonhosted.org/packages/61/2b/876e722d533833f5f9a83473e6ba993e48745701096944e77bbecf29b2c3/xxhash-3.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6e934bbae1e0ec74e27d5f0d7f37ef547ce5ff9f0a7e63fb39e559fc99526734", size = 210744, upload-time = "2026-04-25T11:07:19.055Z" }, + { url = "https://files.pythonhosted.org/packages/21/e6/d7e7baef7ce24166b4668d3c48557bb35a23b92ecadcac7e7718d099ab69/xxhash-3.7.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:3b6b3d28228af044ebcded71c4a3dd86e1dbd7e2f4645bf40f7b5da65bb5fb5a", size = 275406, upload-time = "2026-04-25T11:07:20.908Z" }, + { url = "https://files.pythonhosted.org/packages/92/fe/198b3763b2e01ca908f2154969a2352ec99bda892b574a11a9a151c5ede4/xxhash-3.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:6be4d70d9ab76c9f324ead9c01af6ff52c324745ea0c3731682a0cf99720f1fe", size = 414125, upload-time = "2026-04-25T11:07:23.037Z" }, + { url = "https://files.pythonhosted.org/packages/3a/6d/019a11affd5a5499137cacca53808659964785439855b5aa40dfd3412916/xxhash-3.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:151d7520838d4465461a0b7f4ae488b3b00de16183dd3214c1a6b14bf89d7fb6", size = 191555, upload-time = "2026-04-25T11:07:24.991Z" }, + { url = "https://files.pythonhosted.org/packages/76/21/b96d58568df2d01533244c3e0e5cbdd0c8b2b25c4bec4d72f19259a292d7/xxhash-3.7.0-cp313-cp313-win32.whl", hash = "sha256:d798c1e291bffb8e37b5bbe0dda77fc767cd19e89cadaf66e6ed5d0ff88c9fe6", size = 30668, upload-time = "2026-04-25T11:07:26.665Z" }, + { url = "https://files.pythonhosted.org/packages/99/57/d849a8d3afa1f8f4bc6a831cd89f49f9706fbbad94d2975d6140a171988c/xxhash-3.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:875811ba23c543b1a1c3143c926e43996eb27ebb8f52d3500744aa608c275aed", size = 31524, upload-time = "2026-04-25T11:07:27.92Z" }, + { url = "https://files.pythonhosted.org/packages/81/52/bacc753e92dee78b058af8dcef0a50815f5f860986c664a92d75f965b6a5/xxhash-3.7.0-cp313-cp313-win_arm64.whl", hash = "sha256:54a675cb300dda83d71daae2a599389d22db8021a0f8db0dd659e14626eb3ecc", size = 27768, upload-time = "2026-04-25T11:07:29.113Z" }, + { url = "https://files.pythonhosted.org/packages/1c/47/ddbd683b7fc7e592c1a8d9d65f73ce9ab513f082b3967eee2baf549b8fc6/xxhash-3.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a3b19a42111c4057c1547a4a1396a53961dca576a0f6b82bfa88a2d1561764b2", size = 33576, upload-time = "2026-04-25T11:07:30.469Z" }, + { url = "https://files.pythonhosted.org/packages/07/f2/36d3310161db7f72efb4562aadde0ed429f1d0531782dd6345b12d2da527/xxhash-3.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8f4608a06e4d61b7a3425665a46d00e0579122e1a2fae97a0c52953a3aad9aa3", size = 31123, upload-time = "2026-04-25T11:07:31.989Z" }, + { url = "https://files.pythonhosted.org/packages/0d/3f/75937a5c69556ed213021e43cbedd84c8e0279d0d74e7d41a255d84ba4b1/xxhash-3.7.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ad37c7792479e49cf96c1ab25517d7003fe0d93687a772ba19a097d235bbe41e", size = 196491, upload-time = "2026-04-25T11:07:33.358Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/f10d7ff8c7a733d4403a43b9de18c8fabc005f98cec054644f04418659ee/xxhash-3.7.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc026e3b89d98e30a8288c95cb696e77d150b3f0fb7a51f73dcd49ee6b5577fa", size = 215793, upload-time = "2026-04-25T11:07:34.919Z" }, + { url = "https://files.pythonhosted.org/packages/8b/fd/778f60aa295f58907938f030a8b514611f391405614a525cccd2ffc00eb5/xxhash-3.7.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c9b31ab1f28b078a6a1ac1a54eb35e7d5390deddd56870d0be3a0a733d1c321c", size = 237993, upload-time = "2026-04-25T11:07:36.638Z" }, + { url = "https://files.pythonhosted.org/packages/70/f5/736db5de387b4a540e37a05b84b40dc58a1ce974bfd2b4e5754ce29b68c3/xxhash-3.7.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3bb5fd680c038fd5229e44e9c493782f90df9bef632fd0499d442374688ff70b", size = 214887, upload-time = "2026-04-25T11:07:38.564Z" }, + { url = "https://files.pythonhosted.org/packages/4d/aa/09a095f22fdb9a27fbb716841fbff52119721f9ca4261952d07a912f7839/xxhash-3.7.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:030c0fd688fce3569fbb49a2feefd4110cbb0b650186fb4610759ecfac677548", size = 448407, upload-time = "2026-04-25T11:07:40.552Z" }, + { url = "https://files.pythonhosted.org/packages/74/8a/b745efeeca9e34a91c26fdc97ad8514c43d5a81ac78565cba80a1353870a/xxhash-3.7.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5b1bde10324f4c31812ae0d0502e92d916ae8917cad7209353f122b8b8f610c3", size = 196119, upload-time = "2026-04-25T11:07:42.101Z" }, + { url = "https://files.pythonhosted.org/packages/8a/5c/0cfceb024af90c191f665c7933b1f318ee234f4797858383bebd1881d52f/xxhash-3.7.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:503722d52a615f2604f5e7611de7d43878df010dc0053094ef91cb9a9ac3d987", size = 286751, upload-time = "2026-04-25T11:07:43.568Z" }, + { url = "https://files.pythonhosted.org/packages/0b/0a/0793e405dc3cf8f4ebe2c1acec1e4e4608cd9e7e50ea691dabbc2a95ccbb/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c72500a3b6d6c30ebfc135035bcace9eb5884f2dc220804efcaaba43e9f611dd", size = 212961, upload-time = "2026-04-25T11:07:45.388Z" }, + { url = "https://files.pythonhosted.org/packages/0c/7e/721118ffc63bfff94aa565bcf2555a820f9f4bdb0f001e0d609bdfad70de/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:43475925a766d01ca8cd9a857fd87f3d50406983c8506a4c07c4df12adcc867f", size = 243703, upload-time = "2026-04-25T11:07:47.053Z" }, + { url = "https://files.pythonhosted.org/packages/6e/18/16f6267160488b8276fd3d449d425712512add292ba545c1b6946bfdb7dd/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8d09dfd2ab135b985daf868b594315ebe11ad86cd9fea46e6c69f19b28f7d25a", size = 200894, upload-time = "2026-04-25T11:07:48.657Z" }, + { url = "https://files.pythonhosted.org/packages/2d/94/80ba841287fd97e3e9cac1d228788c8ef623746f570404961eec748ecb5c/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c50269d0055ac1faecfd559886d2cbe4b730de236585aba0e873f9d9dadbe585", size = 213357, upload-time = "2026-04-25T11:07:50.257Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7e/106d4067130c59f1e18a55ffadcd876d8c68534883a1e02685b29d3d8153/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:1910df4756a5ab58cfad8744fc2d0f23926e3efcc346ee76e87b974abab922f4", size = 277600, upload-time = "2026-04-25T11:07:51.745Z" }, + { url = "https://files.pythonhosted.org/packages/c5/86/a081dd30da71d720b2612a792bfd55e45fa9a07ac76a0507f60487473c25/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d006faf3b491957efcb433489be3c149efe4787b7063d5cddb8ddaefdc60e0c1", size = 416980, upload-time = "2026-04-25T11:07:53.504Z" }, + { url = "https://files.pythonhosted.org/packages/35/29/1a95221a029a3c1293773869e1ab47b07cbbdd82444a42809e8c60156626/xxhash-3.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:abb65b4e947e958f7b3b0d71db3ce447d1bc5f37f5eab871ce7223bda8768a04", size = 193840, upload-time = "2026-04-25T11:07:55.103Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/db909dd0823285de2286f67e10ee4d81e96ad35d7d8e964ecb07fccd8af9/xxhash-3.7.0-cp313-cp313t-win32.whl", hash = "sha256:178959906cb1716a1ce08e0d69c82886c70a15a6f2790fc084fdd146ca30cd49", size = 30966, upload-time = "2026-04-25T11:07:56.524Z" }, + { url = "https://files.pythonhosted.org/packages/7b/ff/d705b15b22f21ee106adce239cb65d35067a158c630b240270f09b17c2e6/xxhash-3.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2524a1e20d4c231d13b50f7cf39e44265b055669a64a7a4b9a2a44faa03f19b6", size = 31784, upload-time = "2026-04-25T11:07:57.758Z" }, + { url = "https://files.pythonhosted.org/packages/a2/1f/b2cf83c3638fd0588e0b17f22e5a9400bdfb1a3e3755324ac0aee2250b88/xxhash-3.7.0-cp313-cp313t-win_arm64.whl", hash = "sha256:37d994d0ffe81ef087bb330d392caa809bb5853c77e22ea3f71db024a0543dba", size = 27932, upload-time = "2026-04-25T11:07:59.109Z" }, + { url = "https://files.pythonhosted.org/packages/0e/cc/431db584f6fbb9312e40a173af027644e5580d39df1f73603cbb9dca4d6b/xxhash-3.7.0-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:8c5fcfd806c335bfa2adf1cd0b3110a44fc7b6995c3a648c27489bae85801465", size = 36644, upload-time = "2026-04-25T11:08:00.658Z" }, + { url = "https://files.pythonhosted.org/packages/bc/01/255ec513e0a705d1f9a61413e78dfce4e3235203f0ed525a24c2b4b56345/xxhash-3.7.0-cp314-cp314-android_24_x86_64.whl", hash = "sha256:506a0b488f190f0a06769575e30caf71615c898ed93ab18b0dbcb6dec5c3713c", size = 35003, upload-time = "2026-04-25T11:08:02.338Z" }, + { url = "https://files.pythonhosted.org/packages/68/70/c55fc33c93445b44d8fc5a17b41ed99e3cebe92bcf8396809e63fc9a1165/xxhash-3.7.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:ec68dbba21532c0173a9872298e65c89749f7c9d21538c3a78b5bb6105871568", size = 29655, upload-time = "2026-04-25T11:08:03.701Z" }, + { url = "https://files.pythonhosted.org/packages/c2/72/ff8de73df000d74467d12a59ce6d6e2b2a368b978d41ab7b1fba5ed442be/xxhash-3.7.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:fa77e7ec1450d415d20129961814787c9abd9a07f98872f070b1fe96c5084611", size = 30664, upload-time = "2026-04-25T11:08:05.011Z" }, + { url = "https://files.pythonhosted.org/packages/b6/91/08416d9bd9bc3bf39d831abe8a5631ac2db5141dfd6fe81c3fe59a1f9264/xxhash-3.7.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:fe32736295ea38e43e7d9424053c8c47c9f64fecfc7c895fb3da9b30b131c9ee", size = 33317, upload-time = "2026-04-25T11:08:06.413Z" }, + { url = "https://files.pythonhosted.org/packages/0e/3b/86b1caa4dee10a99f4bf9521e623359341c5e50d05158fa10c275b2bd079/xxhash-3.7.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ab9dd2c83c4bbd63e422181a76f13502d049d3ddcac9a1bdc29196263d692bb8", size = 33457, upload-time = "2026-04-25T11:08:08.099Z" }, + { url = "https://files.pythonhosted.org/packages/ed/38/98ea14ad1517e1461292a65906951458d520689782bfbae111050145bdba/xxhash-3.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3afec3a336a2286601a437cb07562ab0227685e6fbb9ec17e8c18457ff348ecf", size = 30894, upload-time = "2026-04-25T11:08:09.429Z" }, + { url = "https://files.pythonhosted.org/packages/61/a2/074654d0b893606541199993c7db70067d9fc63b748e0d60020a52a1bd36/xxhash-3.7.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:565df64437a9390f84465dcca33e7377114c7ede8d05cd2cf20081f831ea788e", size = 194409, upload-time = "2026-04-25T11:08:10.91Z" }, + { url = "https://files.pythonhosted.org/packages/e2/26/6d2a1afc468189f77ca28c32e1c83e1b9da1178231e05641dbc1b350e332/xxhash-3.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:12eca820a5d558633d423bf8bb78ce72a55394823f64089247f788a7e0ae691e", size = 213135, upload-time = "2026-04-25T11:08:12.575Z" }, + { url = "https://files.pythonhosted.org/packages/8e/0e/d8aecf95e09c42547453137be74d2f7b8b14e08f5177fa2fab6144a19061/xxhash-3.7.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f262b8f7599516567e070abf607b9af649052b2c4bd6f9be02b0cb41b7024805", size = 236379, upload-time = "2026-04-25T11:08:14.206Z" }, + { url = "https://files.pythonhosted.org/packages/f2/74/8140e8210536b3dd0cc816c4faaeb5ba6e63e8125ab25af4bcddd6a037b3/xxhash-3.7.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1598916cb197681e03e601901e4ab96a9a963de398c59d0964f8a6f44a2b361", size = 212447, upload-time = "2026-04-25T11:08:15.79Z" }, + { url = "https://files.pythonhosted.org/packages/a0/d2/462001d2903b4bee5a5689598a0a55e5e7cd1ac7f4247a5545cff10d3ebb/xxhash-3.7.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:322b2f0622230f526aeb1738149948a7ae357a9e2ceb1383c6fd1fdaecdafa16", size = 445660, upload-time = "2026-04-25T11:08:17.441Z" }, + { url = "https://files.pythonhosted.org/packages/23/09/2bd1ed7f8689b20e51727952cac8329d50c694dc32b2eba06ba5bc742b37/xxhash-3.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24cc22070880cc57b830a65cde4e65fa884c6d9b28ae4803b5ee05911e7bafba", size = 194076, upload-time = "2026-04-25T11:08:19.134Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6e/692302cd0a5f4ac4e6289f37fa888dc2e1e07750b68fe3e4bfe939b8cea3/xxhash-3.7.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb5a888a968b2434abf9ecda357b5d43f10d7b5a6da6fdbbe036208473aff0e2", size = 284990, upload-time = "2026-04-25T11:08:20.618Z" }, + { url = "https://files.pythonhosted.org/packages/05/d9/e54b159b3d9df7999d2a7c676ce7b323d1b5588a64f8f51ed8172567bd87/xxhash-3.7.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a999771ff97bec27d18341be4f3a36b163bb1ac41ec17bef6d2dabd84acd33c7", size = 210590, upload-time = "2026-04-25T11:08:22.24Z" }, + { url = "https://files.pythonhosted.org/packages/50/93/0e0df1a3a196ced4ca71de76d65ead25d8e87bbfb87b64306ea47a40c00d/xxhash-3.7.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ed4a6efe2dee1655adb73e7ad40c6aa955a6892422b1e3b95de6a34de56e3cbb", size = 241442, upload-time = "2026-04-25T11:08:23.844Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a9/d917a7a814e90b218f8a0d37967105eea91bf752c3303683c99a1f7bfc1f/xxhash-3.7.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9fd17f14ac0faa12126c2f9ca774a8cf342957265ec3c8669c144e5e6cdb478c", size = 198356, upload-time = "2026-04-25T11:08:25.99Z" }, + { url = "https://files.pythonhosted.org/packages/89/5e/f2ba1877c39469abbefc72991d6ebdcbd4c0880db01ae8cb1f553b0c537d/xxhash-3.7.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:05fd1254268c59b5cb2a029dfc204275e9fc52de2913f1e53aa8d01442c96b4d", size = 210898, upload-time = "2026-04-25T11:08:27.608Z" }, + { url = "https://files.pythonhosted.org/packages/90/c6/be56b58e73de531f39a10de1355bb77ceb663900dc4bf2d6d3002a9c3f9e/xxhash-3.7.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a2eae53197c6276d5b317f75a1be226bbf440c20b58bf525f36b5d0e1f657ca6", size = 275519, upload-time = "2026-04-25T11:08:29.301Z" }, + { url = "https://files.pythonhosted.org/packages/92/e2/17ddc85d5765b9c709f192009ed8f5a1fc876f4eb35bba7c307b5b1169f9/xxhash-3.7.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:bfe6f92e3522dcbe8c4281efd74fa7542a336cb00b0e3272c4ec0edabeaeaf67", size = 414191, upload-time = "2026-04-25T11:08:31.16Z" }, + { url = "https://files.pythonhosted.org/packages/9c/42/85f5b79f4bf1ec7ba052491164adfd4f4e9519f5dc7246de4fbd64a1bd56/xxhash-3.7.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7ab9a49c410d8c6c786ab99e79c529938d894c01433130353dd0fe999111077a", size = 191604, upload-time = "2026-04-25T11:08:32.862Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d0/6127b623aa4cca18d8b7743592b048d689fd6c6e37ff26a22cddf6cd9d7f/xxhash-3.7.0-cp314-cp314-win32.whl", hash = "sha256:040ea63668f9185b92bc74942df09c7e65703deed71431333678fc6e739a9955", size = 31271, upload-time = "2026-04-25T11:08:34.651Z" }, + { url = "https://files.pythonhosted.org/packages/64/4f/44fc4788568004c43921701cbc127f48218a1eede2c9aea231115323564d/xxhash-3.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:2a61e2a3fb23c892496d587b470dee7fa1b58b248a187719c65ea8e94ec13257", size = 32284, upload-time = "2026-04-25T11:08:35.987Z" }, + { url = "https://files.pythonhosted.org/packages/6d/77/18bb895eb60a49453d16e17d67990e5caff557c78eafc90ad4e2eabf4570/xxhash-3.7.0-cp314-cp314-win_arm64.whl", hash = "sha256:c7741c7524961d8c0cb4d4c21b28957ff731a3fd5b5cd8b856dc80a40e9e5acc", size = 28701, upload-time = "2026-04-25T11:08:37.767Z" }, + { url = "https://files.pythonhosted.org/packages/45/a0/46f72244570c550fbbb7db1ef554183dd5ebe9136385f30e032b781ae8f6/xxhash-3.7.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:fc84bf7aa7592f31ec63a3e7b11d624f468a3f19f5238cec7282a42e838ab1d7", size = 33646, upload-time = "2026-04-25T11:08:39.109Z" }, + { url = "https://files.pythonhosted.org/packages/4a/3a/453846a7eceea11e75def361eed01ec6a0205b9822c19927ed364ccae7cc/xxhash-3.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9f1563fdc8abfc389748e6932c7e4e99c89a53e4ec37d4563c24fc06f5e5644b", size = 31125, upload-time = "2026-04-25T11:08:40.467Z" }, + { url = "https://files.pythonhosted.org/packages/bd/3e/49434aba738885d512f9e486db1bdd19db28dfa40372b56da26ef7a4e738/xxhash-3.7.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2d415f18becf6f153046ab6adc97da77e3643a0ee205dae61c4012604113a020", size = 196633, upload-time = "2026-04-25T11:08:41.943Z" }, + { url = "https://files.pythonhosted.org/packages/a4/e9/006cb6127baeb9f8abe6d15e62faa01349f09b34e2bfd65175b2422d026b/xxhash-3.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bb16aa13ed175bc9be5c2491ba031b85a9b51c4ed90e0b3d4ebe63cf3fb54f8e", size = 215899, upload-time = "2026-04-25T11:08:43.645Z" }, + { url = "https://files.pythonhosted.org/packages/27/e4/cc57d72e66df0ae29b914335f1c6dcf61e8f3746ddf0ae3c471aa4f15e00/xxhash-3.7.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f9fd595f1e5941b3d7863e4774e4b30caa6731fc34b9277da032295aa5656ee5", size = 238116, upload-time = "2026-04-25T11:08:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/af/78/3531d4a3fd8a0038cc6be1f265a69c1b3587f557a10b677dd736de2202c1/xxhash-3.7.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1295325c5a98d552333fa53dc2b026b0ef0ec9c8e73ca3a952990b4c7d65d459", size = 215012, upload-time = "2026-04-25T11:08:47.355Z" }, + { url = "https://files.pythonhosted.org/packages/b4/f6/259fb1eaaec921f59b17203b0daee69829761226d3b980d5191d7723dd83/xxhash-3.7.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3573a651d146912da9daa9e29e5fbc45994420daaa9ef1e2fa5823e1dc485513", size = 448534, upload-time = "2026-04-25T11:08:49.149Z" }, + { url = "https://files.pythonhosted.org/packages/7b/16/a66d0eaf6a7e68532c07714361ddc904c663ec940f3b028c1ae4a21a7b9d/xxhash-3.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ec1e080a3d02d94ea9335bfab0e3374b877e25411422c18f51a943fa4b46381", size = 196217, upload-time = "2026-04-25T11:08:50.805Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ef/d2efc7fc51756dc52509109d1a25cefc859d74bc4b19a167b12dbd8c2786/xxhash-3.7.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84415265192072d8638a3afc3c1bc5995e310570cd9acb54dc46d3939e364fe0", size = 286906, upload-time = "2026-04-25T11:08:52.418Z" }, + { url = "https://files.pythonhosted.org/packages/fc/67/25decd1d4a4018582ec4db2a868a2b7e40640f4adb20dfeb19ac923aa825/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d4dea659b57443989ef32f4295104fd6912c73d0bf26d1d148bb88a9f159b02", size = 213057, upload-time = "2026-04-25T11:08:54.105Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5d/17651eb29d06786cdc40c60ae3d27d645aa5d61d2eca6237a7ba0b94789b/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:05ece0fe4d9c9c2728912d1981ae1566cfc83a011571b24732cbf76e1fb70dca", size = 243886, upload-time = "2026-04-25T11:08:56.109Z" }, + { url = "https://files.pythonhosted.org/packages/8a/d4/174d9cf7502243d586e6a9ae842b1ae23026620995114f85f1380e588bc9/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fd880353cf1ffaf321bc18dd663e111976dbd0d3bbd8a66d58d2b470dfa7f396", size = 201015, upload-time = "2026-04-25T11:08:57.777Z" }, + { url = "https://files.pythonhosted.org/packages/91/8c/2254e2d06c3ac5e6fe22eaf3da791b87ea823ae9f2c17b4af66755c5752d/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4e15cc9e2817f6481160f930c62842b3ff419e20e13072bcbab12230943092bc", size = 213457, upload-time = "2026-04-25T11:08:59.826Z" }, + { url = "https://files.pythonhosted.org/packages/79/a2/e3daa762545921173e3360f3b4ff7fc63c2d27359f7230ec1a7a74e117f6/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:90b9d1a8bd37d768ffc92a1f651ec69afc532a96fa1ac2ea7abbed5d630b3237", size = 277738, upload-time = "2026-04-25T11:09:01.423Z" }, + { url = "https://files.pythonhosted.org/packages/e1/4c/e186da2c46b87f5204640e008d42730bf3c1ee9f0efb71ae1ebcdfeac681/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:157c49475b34ecea8809e51123d9769a534e139d1247942f7a4bc67710bb2533", size = 417127, upload-time = "2026-04-25T11:09:03.592Z" }, + { url = "https://files.pythonhosted.org/packages/17/28/3798e15007a3712d0da3d3fe70f8e11916569858b5cc371053bc26270832/xxhash-3.7.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5a6ddec83325685e729ca119d1f5c518ec39294212ecd770e60693cdc5f7eb79", size = 193962, upload-time = "2026-04-25T11:09:06.228Z" }, + { url = "https://files.pythonhosted.org/packages/ad/95/a26baa93b5241fd7630998816a4ec47a5a0bad193b3f8fc8f3593e1a4a67/xxhash-3.7.0-cp314-cp314t-win32.whl", hash = "sha256:a04a6cab47e2166435aaf5b9e5ee41d1532cc8300efdef87f2a4d0acb7db19ed", size = 31643, upload-time = "2026-04-25T11:09:08.153Z" }, + { url = "https://files.pythonhosted.org/packages/44/36/5454f13c447e395f9b06a3e91274c59f503d31fad84e1836efe3bdb71f6a/xxhash-3.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8653dd7c2eda020545bb2c71c7f7039b53fe7434d0fc1a0a9deb79ab3f1a4fc1", size = 32522, upload-time = "2026-04-25T11:09:09.534Z" }, + { url = "https://files.pythonhosted.org/packages/74/35/698e7e3ff38e22992ea24870a511d8762474fb6783627a2910ff22a185c2/xxhash-3.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:468f0fc114faaa4b36699f8e328bbc3bb11dc418ba94ac52c26dd736d4b6c637", size = 28807, upload-time = "2026-04-25T11:09:11.234Z" }, + { url = "https://files.pythonhosted.org/packages/54/c1/e57ac7317b1f58a92bab692da6d497e2a7ce44735b224e296347a7ecc754/xxhash-3.7.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad3aa71e12ee634f22b39a0ff439357583706e50765f17f05550f92dbf128a23", size = 31232, upload-time = "2026-04-25T11:10:21.51Z" }, + { url = "https://files.pythonhosted.org/packages/4f/4e/075559bd712bc62e84915ea46bbee859f935d285659082c129bdbff679dd/xxhash-3.7.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5de686e73690cdaf72b96d4fa083c230ec9020bcc2627ce6316138e2cf2fe2d1", size = 28553, upload-time = "2026-04-25T11:10:23.1Z" }, + { url = "https://files.pythonhosted.org/packages/92/ca/a9c78cb384d4b033b0c58196bd5c8509873cabe76389e195127b0302a741/xxhash-3.7.0-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7fbec49f5341bbdea0c471f7d1e2fb41ae8925af9b6f28025c28defd8eb94274", size = 41109, upload-time = "2026-04-25T11:10:25.022Z" }, + { url = "https://files.pythonhosted.org/packages/bd/b1/dfe2629f7c77eb2fa234c72ff537cdd64939763df704e256446ed364a16d/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48b542c347c2089f43dc5a6db31d2a6f3cdb04ee33505ec6e9f653834dbb0bde", size = 36307, upload-time = "2026-04-25T11:10:26.949Z" }, + { url = "https://files.pythonhosted.org/packages/e7/f7/5a484afce0f48dd8083208b42e4911f290a82c7b52458ef2927e4d421a45/xxhash-3.7.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a169a036bed0995e090d1493b283cc2cc8a6f5046821086b843abefff80643bc", size = 32534, upload-time = "2026-04-25T11:10:29.01Z" }, + { url = "https://files.pythonhosted.org/packages/0f/5f/4acfcd490db9780cf36c58534d828003c564cde5350220a1c783c4d10776/xxhash-3.7.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:ec101643395d7f21405b640f728f6f627e6986557027d740f2f9b220955edafe", size = 31552, upload-time = "2026-04-25T11:10:30.727Z" }, +] + +[[package]] +name = "yarl" +version = "1.24.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/12/1e8f37460ea0f7eb59c221fdaf0ed75e7ac43e97f8093b9c6f411df50a78/yarl-1.24.2.tar.gz", hash = "sha256:9ac374123c6fd7abf64d1fec93962b0bd4ee2c19751755a762a72dd96c0378f8", size = 210798, upload-time = "2026-05-19T21:31:05.599Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/c5/1ce244152ff2839645e7cae92f90e7bafcb2c52bea7ff586ac714f14f5df/yarl-1.24.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:36348bebb147b83818b9d7e673ea4debc75970afc6ffdc7e3975ad05ce5a58c1", size = 128971, upload-time = "2026-05-19T21:28:20.543Z" }, + { url = "https://files.pythonhosted.org/packages/87/5a/00f36967203ed89cb3acd2c8ed526cc3fed9418eb70ce128160a911c8499/yarl-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a97e42c8a2233f2f279ecadd9e4a037bcb5d813b78435e8eedd4db5a9e9708c", size = 91507, upload-time = "2026-05-19T21:28:22.556Z" }, + { url = "https://files.pythonhosted.org/packages/31/d0/1fb0c1cd27288f39f6974da4318c32768d72c9890984541fdf1e2e32a51d/yarl-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d027d56f1035e339d1001ac33eceab5b2ec8e42e449787bb75e289fb9a5cd1d", size = 91343, upload-time = "2026-05-19T21:28:24.092Z" }, + { url = "https://files.pythonhosted.org/packages/03/ce/d4a646508bed2f8dec6435b40166fe9308dd191262033d3f307b2bbcaecd/yarl-1.24.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a6377060e7927187a42b7eb202090cbe2b34933a4eeaf90e3bd9e33432e5cae", size = 105704, upload-time = "2026-05-19T21:28:25.872Z" }, + { url = "https://files.pythonhosted.org/packages/4b/07/b3278e82d8bc41485bcf6d856cd0433262593de615b1d3dc43bd3f5bead4/yarl-1.24.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:17076578bce0049a5ce57d14ad1bded391b68a3b213e9b81b0097b090244999a", size = 97281, upload-time = "2026-05-19T21:28:27.352Z" }, + { url = "https://files.pythonhosted.org/packages/17/5b/4cee6e7c92e487bebe7afc797da0aa54a248ab4e776a68fe369ec29665a5/yarl-1.24.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:50713f1d4d6be6375bb178bb43d140ee1acb8abe589cd723320b7925a275be1e", size = 114020, upload-time = "2026-05-19T21:28:29.458Z" }, + { url = "https://files.pythonhosted.org/packages/5c/82/111076571545a7d4f9cca3fbd5c6f40615af58642be09f12328f48022468/yarl-1.24.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:34263e2fa8fb5bb63a0d97706cda38edbad62fddb58c7f12d6acbc092812aa50", size = 111450, upload-time = "2026-05-19T21:28:31.262Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ec/08f671f69a444d704aeecebf92af659b67b97a869942411d0a578b08c334/yarl-1.24.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49016d82f032b1bd1e10b01078a7d29ae71bf468eeae0ea22df8bab691e60003", size = 106384, upload-time = "2026-05-19T21:28:32.856Z" }, + { url = "https://files.pythonhosted.org/packages/e5/86/ce41e7a7a199340b2330d52b60f25c4074b6636dd0e60b1a80d31a9db042/yarl-1.24.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3f6d2c216318f8f32038ca3f72501ba08536f0fd18a36e858836b121b2deed9f", size = 106153, upload-time = "2026-05-19T21:28:35.222Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5d/31be8a729531ab3e55ac3e7e5c800be8c89ea98947f418b2f6ea259fb6ee/yarl-1.24.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:08d3a33218e0c64393e7610284e770409a9c31c429b078bcb24096ed0a783b8f", size = 105322, upload-time = "2026-05-19T21:28:36.642Z" }, + { url = "https://files.pythonhosted.org/packages/47/9b/b57afb22b386ae87ac9940f09878b98d8c333f89113e6fc96fcf4ca9eb64/yarl-1.24.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5d699376c4ca3cba49bbfae3a05b5b70ded572937171ce1e0b8d87118e2ba294", size = 99057, upload-time = "2026-05-19T21:28:38.386Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4f/06348c27c8389256c313e8a57d796808fc0264c915dd5e7cfd3c0e314dc7/yarl-1.24.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a1cab588b4fa14bea2e55ebea27478adfb05372f47573738e1acc4a36c0b05d2", size = 113502, upload-time = "2026-05-19T21:28:40.091Z" }, + { url = "https://files.pythonhosted.org/packages/5f/1c/284f307b298e4a17b7943b07d9d7ecc4151537f8d137ba51f3bb6c31ca20/yarl-1.24.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:ec87ccc31bd21db7ad009d8572c127c1000f268517618a4cc09adba3c2a7f21c", size = 105253, upload-time = "2026-05-19T21:28:41.987Z" }, + { url = "https://files.pythonhosted.org/packages/c8/bf/0de123bec8619e45c80cbded9085f61b5b4a9eddb8abe6d25d28ee1ec866/yarl-1.24.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d1dd47a22843b212baa8d74f37796815d43bd046b42a0f41e9da433386c3136b", size = 111345, upload-time = "2026-05-19T21:28:43.93Z" }, + { url = "https://files.pythonhosted.org/packages/90/af/0248eb065e51129d2a9b2436cd1b5c772c19a6b04e5b6a186955671e3319/yarl-1.24.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7b54b9c67c2b06bd7b9a77253d242124b9c95d2c02def5a1144001ee547dd9d5", size = 106558, upload-time = "2026-05-19T21:28:45.806Z" }, + { url = "https://files.pythonhosted.org/packages/21/3c/f960d7a65ef97d8ba9b424fb5128796a4bc710fc6df2ddbbd7dfdc3bbd20/yarl-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:f8fdbcff8b2c7c9284e60c196f693588598ddcee31e11c18e14949ce44519d45", size = 92808, upload-time = "2026-05-19T21:28:48.465Z" }, + { url = "https://files.pythonhosted.org/packages/03/1a/49fb03750e4de4d2284cd5b885a383133c34eef45bd59631b2bb8b7e81e8/yarl-1.24.2-cp311-cp311-win_arm64.whl", hash = "sha256:b32c37a7a337e90822c45797bf3d79d60875cfcccd3ecc80e9f453d87026c122", size = 87610, upload-time = "2026-05-19T21:28:50.07Z" }, + { url = "https://files.pythonhosted.org/packages/f0/da/866bcb01076ba49d2b42b309867bed3826421f1c479655eb7a607b44f20b/yarl-1.24.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b975866c184564c827e0877380f0dae57dcca7e52782128381b72feff6dfceb8", size = 129957, upload-time = "2026-05-19T21:28:51.695Z" }, + { url = "https://files.pythonhosted.org/packages/bf/1d/fcefb70922ea2268a8971d8e5874d9a8218644200fb8465f1dcad55e6851/yarl-1.24.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3b075301a2836a0e297b1b658cb6d6135df535d62efefdd60366bd589c2c82f2", size = 92164, upload-time = "2026-05-19T21:28:53.242Z" }, + { url = "https://files.pythonhosted.org/packages/29/b6/170e2b8d4e3bc30e6bfdcca53556537f5bf595e938632dfcb059311f3ff6/yarl-1.24.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ae44649b00947634ab0dab2a374a638f52923a6e67083f2c156cd5cbd1a881d", size = 91688, upload-time = "2026-05-19T21:28:54.865Z" }, + { url = "https://files.pythonhosted.org/packages/fe/a5/c9f655d5553ea0b99fdac9d6a99ad3f9b3e73b8e5758bb46f58c9831f74c/yarl-1.24.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:507cc19f0b45454e2d6dcd62ff7d062b9f77a2812404e62dbdaec05b50faa035", size = 102902, upload-time = "2026-05-19T21:28:56.963Z" }, + { url = "https://files.pythonhosted.org/packages/5d/bc/6b9664d815d79af4ee553337f9d606c56bbf269186ada9172de45f1b5f60/yarl-1.24.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4c17bad5a530912d2111825d3f05e89bab2dd376aaa8cbc77e449e6db63e576", size = 97931, upload-time = "2026-05-19T21:28:58.56Z" }, + { url = "https://files.pythonhosted.org/packages/98/ec/32ba48acae30fecd60928f5791188b80a9d6ee3840507ffda29fecd37b71/yarl-1.24.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5f0cbb112838a4a293985b6ed73948a547dadcc1ba6d2089938e7abdedceef8", size = 111030, upload-time = "2026-05-19T21:29:00.148Z" }, + { url = "https://files.pythonhosted.org/packages/82/5a/6f4cd081e5f4934d2ae3a8ef4abe3afacc010d26f0035ee91b35cd7d7c37/yarl-1.24.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ec8356b8a6afcf81fc7aeeef13b1ff7a49dec00f313394bbb9e83830d32ccd7", size = 110392, upload-time = "2026-05-19T21:29:02.155Z" }, + { url = "https://files.pythonhosted.org/packages/7a/da/323a01c349bd5fb01bb6652e314d9bb218cee630a736bdb810ad50e4013f/yarl-1.24.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e7ebcdef69dec6c6451e616f32b622a6d4a2e92b445c992f7c8e5274a6bbc4c", size = 105612, upload-time = "2026-05-19T21:29:04.247Z" }, + { url = "https://files.pythonhosted.org/packages/7c/80/264ab684f181e1a876389374519ff05d10248725535ae2ac4e8ac4e563d6/yarl-1.24.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:47a55d6cf6db2f401017a9e96e5288844e5051911fb4e0c8311a3980f5e59a7d", size = 104487, upload-time = "2026-05-19T21:29:06.491Z" }, + { url = "https://files.pythonhosted.org/packages/41/07/efabe5df87e96d7ad5959760b888344be48cd6884db127b407c6b5503adc/yarl-1.24.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3065657c80a2321225e804048597ad55658a7e76b32d6f5ee4074d04c50401db", size = 102333, upload-time = "2026-05-19T21:29:08.267Z" }, + { url = "https://files.pythonhosted.org/packages/44/0c/bcf7c42603e1009295f586d8890f2ba032c8b53310e815adf0a202c73d9f/yarl-1.24.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cb84b80d88e19ede158619b80813968713d8d008b0e2497a576e6a0557d50712", size = 99025, upload-time = "2026-05-19T21:29:10.682Z" }, + { url = "https://files.pythonhosted.org/packages/4f/82/84482ab1a57a0f21a08afe6a7004c61d741f8f2ecc3b05c321577c612164/yarl-1.24.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:990de4f680b1c217e77ff0d6aa0029f9eb79889c11fb3e9a3942c7eba29c1996", size = 110507, upload-time = "2026-05-19T21:29:12.954Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8d/a546ba1dfe1b0f290e05fef145cd07614c0f15df1a707195e512d1e39d1d/yarl-1.24.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:abb8ec0323b80161e3802da3150ef660b41d0e9be2048b76a363d93eee992c2b", size = 103719, upload-time = "2026-05-19T21:29:14.893Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b6/267f2a09213138473adfce6b8a6e17791d7fee70bd4d9003218e4dec58b0/yarl-1.24.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e7977781f83638a4c73e0f88425563d70173e0dfd90ac006a45c65036293ee3c", size = 110438, upload-time = "2026-05-19T21:29:16.485Z" }, + { url = "https://files.pythonhosted.org/packages/48/2d/1c8d89c7c5f9cad9fb2902445d94e2ab1d7aa35de029afbb8ae95c42d00f/yarl-1.24.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e30dd55825dc554ec5b66a94953b8eda8745926514c5089dfcacecb9c99b5bd1", size = 105719, upload-time = "2026-05-19T21:29:18.367Z" }, + { url = "https://files.pythonhosted.org/packages/a7/25/722e3b93bd687009afb2d59a35e13d30ddd8f80571445bb0c4e4ce26ec66/yarl-1.24.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dafe10c12ddd4d120d528c4b5599c953bd7b12845347d507b95451195bb6cad", size = 92901, upload-time = "2026-05-19T21:29:20.014Z" }, + { url = "https://files.pythonhosted.org/packages/39/47/4486ccfb674c04854a1ef8aa77868b6a6f765feaf69633409d7ca4f02cb8/yarl-1.24.2-cp312-cp312-win_arm64.whl", hash = "sha256:044a09d8401fcf8681977faef6d286b8ade1e2d2e9dceda175d1cfa5ca496f30", size = 87229, upload-time = "2026-05-19T21:29:22.1Z" }, + { url = "https://files.pythonhosted.org/packages/82/62/fcf0ce677f17e5c471c06311dd25964be38a4c586993632910d2e75278bc/yarl-1.24.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:491ac9141decf49ee8030199e1ee251cdff0e131f25678817ff6aa5f837a3536", size = 128978, upload-time = "2026-05-19T21:29:23.83Z" }, + { url = "https://files.pythonhosted.org/packages/d3/58/8e63299bb71ed61a834121d9d3fe6c9fcf2a6a5d09754ff4f20f2d20baf5/yarl-1.24.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e89418f65eda18f99030386305bd44d7d504e328a7945db1ead514fbe03a0607", size = 91733, upload-time = "2026-05-19T21:29:25.375Z" }, + { url = "https://files.pythonhosted.org/packages/c1/24/16748d5dab6daec8b0ed81ccec639a1cded0f18dcc62a4f696b4fe366c37/yarl-1.24.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cdfcce633b4a4bb8281913c57fcafd4b5933fbc19111a5e3930bbd299d6102f1", size = 91113, upload-time = "2026-05-19T21:29:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/1b/66/b63fff7b71211e866624b21432d5943cbb633eb0c2872d9ee3070648f22c/yarl-1.24.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:863297ddede92ee49024e9a9b11ecb59f310ca85b60d8537f56bed9bbb5b1986", size = 103899, upload-time = "2026-05-19T21:29:28.842Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ac/ba1974b8533909636f7733fe86cf677e3619527c3c2fa913e0ea89c48757/yarl-1.24.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:374423f70754a2c96942ede36a29d37dc6b0cb8f92f8d009ddf3ed78d3da5488", size = 97862, upload-time = "2026-05-19T21:29:31.086Z" }, + { url = "https://files.pythonhosted.org/packages/1b/a5/123ac993b5c2ba6f554a140305620cb8f150fa543711bbc49be3ec0a65a4/yarl-1.24.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:33a29b5d00ccbf3219bb3e351d7875739c19481e030779f48cc46a7a71681a9b", size = 111060, upload-time = "2026-05-19T21:29:32.657Z" }, + { url = "https://files.pythonhosted.org/packages/23/37/c472d3af3509688392134a88a825276770a187f1daa4de3f6dc0a327a751/yarl-1.24.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a9532c57211730c515341af11fef6e9b61d157487272a096d0c04da445642592", size = 110613, upload-time = "2026-05-19T21:29:34.379Z" }, + { url = "https://files.pythonhosted.org/packages/df/88/09c28dad91e662ccfaa1b78f1c57badde74fc9d0b23e74aef644750ecd73/yarl-1.24.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:91e72cf093fd833483a97ee648e0c053c7c629f51ff4a0e7edd84f806b0c5617", size = 107012, upload-time = "2026-05-19T21:29:36.216Z" }, + { url = "https://files.pythonhosted.org/packages/07/ab/9d4f69d571a94f4d112fa7e2e007200f5a54d319f58c82ac7b7baa61f5c6/yarl-1.24.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b3177bc0a768ef3bacceb4f272632990b7bea352f1b2f1eee9d6d6ff16516f92", size = 105887, upload-time = "2026-05-19T21:29:38.746Z" }, + { url = "https://files.pythonhosted.org/packages/8e/9a/000b2b66c0d772a499fc531d21dab92dfeb73b640a12eed6ba89f49bb2d0/yarl-1.24.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e196952aacaf3b232e265ff02980b64d483dc0972bd49bcb061171ff22ac203a", size = 103620, upload-time = "2026-05-19T21:29:40.368Z" }, + { url = "https://files.pythonhosted.org/packages/41/7c/7c1050f73450fbdaa3f0c72017059f00ce5e13366692f3dba25275a1083d/yarl-1.24.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:204e7a61ce99919c0de1bf904ab5d7aa188a129ea8f690a8f76cfb6e2844dc44", size = 100599, upload-time = "2026-05-19T21:29:42.66Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b1/29e5756b3926705f5f6089bd5b9f50a56eaac550da6e260bf713ead44d04/yarl-1.24.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4b156914620f0b9d78dc1adb3751141daee561cfec796088abb89ed49d220f1a", size = 110604, upload-time = "2026-05-19T21:29:44.632Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4b/8415bc96e9b150cde942fbac9a8182985e58f40ce5c54c34ed015407d3ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:8372a2b976cf70654b2be6619ab6068acabb35f724c0fda7b277fbf53d66a5cf", size = 105161, upload-time = "2026-05-19T21:29:46.755Z" }, + { url = "https://files.pythonhosted.org/packages/8b/d4/cde059abfa229553b7298a2eadde2752e723d50aeedaef86ce59da2718ee/yarl-1.24.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f9a1e9b622ca284143aab5d885848686dcd85453bb1ca9abcdb7503e64dc0056", size = 110619, upload-time = "2026-05-19T21:29:48.972Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2c/d6a6c9a61549f7b6c7e6dc6937d195bcf069582b47b7200dcd0e7b256acf/yarl-1.24.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:810e19b685c8c3c5862f6a38160a1f4e4c0916c9390024ec347b6157a45a0992", size = 107362, upload-time = "2026-05-19T21:29:51Z" }, + { url = "https://files.pythonhosted.org/packages/92/dd/3ae5fe417e9d1c353a548553326eb9935e76b6b727161563b424cc296df3/yarl-1.24.2-cp313-cp313-win_amd64.whl", hash = "sha256:7d37fb7c38f2b6edab0f845c4f85148d4c44204f52bc127021bd2bc9fdbf1656", size = 92667, upload-time = "2026-05-19T21:29:52.743Z" }, + { url = "https://files.pythonhosted.org/packages/10/cc/a7beb239f78f27fca1b053c8e8595e4179c02e62249b4687ec218c370c50/yarl-1.24.2-cp313-cp313-win_arm64.whl", hash = "sha256:1e831894be7c2954240e49791fa4b50c05a0dc881de2552cfe3ffd8631c7f461", size = 87069, upload-time = "2026-05-19T21:29:54.442Z" }, + { url = "https://files.pythonhosted.org/packages/40/0e/e08087695fc12789263821c5dc0f8dc52b5b17efd0887cacf419f8a43ba3/yarl-1.24.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f9312b3c02d9b3d23840f67952913c9c8721d7f1b7db305289faefa878f364c2", size = 129670, upload-time = "2026-05-19T21:29:56.631Z" }, + { url = "https://files.pythonhosted.org/packages/3a/98/ab4b5ed1b1b5cd973c8a3eb994c3a6aefb6ce6d399e21bb5f0316c33815c/yarl-1.24.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a4f4d6cd615823bfc7fb7e9b5987c3f41666371d870d51058f77e2680fbe9630", size = 91916, upload-time = "2026-05-19T21:29:58.645Z" }, + { url = "https://files.pythonhosted.org/packages/ba/b1/5297bb6a7df4782f7605bffc43b31f5044070935fbbcaa6c705a07e6ac65/yarl-1.24.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0c3063e5c0a8e8e62fae6c2596fa01da1561e4cd1da6fec5789f5cf99a8aefd8", size = 91625, upload-time = "2026-05-19T21:30:00.412Z" }, + { url = "https://files.pythonhosted.org/packages/02/a7/45baabfff76829264e623b185cff0c340d7e11bf3e1cd9ea37e7d17934bd/yarl-1.24.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecd17873a096036c1c87ab3486f1aef7f269ada7f23f7f856f93b1cc7744f14", size = 104574, upload-time = "2026-05-19T21:30:02.544Z" }, + { url = "https://files.pythonhosted.org/packages/f3/40/3a5ab144d3d650ca37d4f4b57e56169be8af3ca34c448793e064b30baaed/yarl-1.24.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a46d1ab4ba4d32e6dc80daf8a28ce0bd83d08df52fbc32f3e288663427734535", size = 97534, upload-time = "2026-05-19T21:30:04.319Z" }, + { url = "https://files.pythonhosted.org/packages/9c/b5/5658fef3681fb5776b4513b052bec750009f47b3a592251c705d75375798/yarl-1.24.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73e68edf6dfd5f73f9ca127d84e2a6f9213c65bdffb736bda19524c0564fcd14", size = 111481, upload-time = "2026-05-19T21:30:05.988Z" }, + { url = "https://files.pythonhosted.org/packages/4c/06/fdcd7dde037f00866dce123ed4ba23dba94beb56fc4cf561668d27be37f2/yarl-1.24.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a296ca617f2d25fbceafb962b88750d627e5984e75732c712154d058ae8d79a3", size = 111529, upload-time = "2026-05-19T21:30:07.738Z" }, + { url = "https://files.pythonhosted.org/packages/c2/53/d81269aaafccea0d33396c03035de997b743f11e648e6e27a0df99c72980/yarl-1.24.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51b2cf5ec89a8b8470177641ed62a3ba22d74e1e898e06ad53aa77972487208", size = 107338, upload-time = "2026-05-19T21:30:09.713Z" }, + { url = "https://files.pythonhosted.org/packages/ae/04/23049463f729bd899df203a7960505a75333edd499cda8aa1d5a82b64df5/yarl-1.24.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:310fc687f7b2044ec54e372c8cbe923bb88f5c37bded0d3079e5791c2fc3cf50", size = 106147, upload-time = "2026-05-19T21:30:11.365Z" }, + { url = "https://files.pythonhosted.org/packages/14/18/04a4b5830b43ed5e4c5015b40e9f6241ad91487d71611061b4e111d6ac80/yarl-1.24.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:297a2fe352ecf858b30a98f87948746ec16f001d279f84aebdbd3bd965e2f1bd", size = 104272, upload-time = "2026-05-19T21:30:12.978Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f7/8cffdf319aee7a7c1dbd07b61d91c3e3fda460c7a93b5f93e445f3806c4c/yarl-1.24.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2a263e76b97bc42bdcd7c5f4953dec1f7cd62a1112fa7f869e57255229390d67", size = 99962, upload-time = "2026-05-19T21:30:15.001Z" }, + { url = "https://files.pythonhosted.org/packages/d7/39/b3cce3b7dbef64ac700ad4cea156a207d01bede0f507587616c364b5468e/yarl-1.24.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:822519b64cf0b474f1a0aaef1dc621438ea46bb77c94df97a5b4d213a7d8a8b1", size = 111063, upload-time = "2026-05-19T21:30:16.683Z" }, + { url = "https://files.pythonhosted.org/packages/a1/ea/100818505e7ebf165c7242ff17fdf7d9fee79e27234aeca871c1082920d7/yarl-1.24.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b6067060d9dc594899ba83e6db6c48c68d1e494a6dab158156ed86977ca7bcb1", size = 105438, upload-time = "2026-05-19T21:30:18.769Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d2/e075a0b32aa6625087de9e653087df0759fed5de4a435fef594181102a77/yarl-1.24.2-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:0063adad533e57171b79db3943b229d40dfafeeee579767f96541f106bac5f1b", size = 111458, upload-time = "2026-05-19T21:30:21.024Z" }, + { url = "https://files.pythonhosted.org/packages/e6/5c/ceea7ba98b65c8eb8d947fdc52f9bedfcd43c6a57c9e3c90c17be8f324a3/yarl-1.24.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee8e3fb34513e8dc082b586ef4910c98335d43a6fab688cd44d4851bacfce3e8", size = 107589, upload-time = "2026-05-19T21:30:23.412Z" }, + { url = "https://files.pythonhosted.org/packages/fa/d9/5582d57e2b2db9b85eb6663a22efdd78e08805f3f5389566e9fcad254d1b/yarl-1.24.2-cp314-cp314-win_amd64.whl", hash = "sha256:afb00d7fd8e0f285ca29a44cc50df2d622ff2f7a6d933fa641577b5f9d5f3db0", size = 94424, upload-time = "2026-05-19T21:30:25.425Z" }, + { url = "https://files.pythonhosted.org/packages/92/10/7dc07a0e22806a9280f42a57361395506e800c64e22737cd7b0886feab42/yarl-1.24.2-cp314-cp314-win_arm64.whl", hash = "sha256:68cf6eacd6028ef1142bc4b48376b81566385ca6f9e7dde3b0fa91be08ffcb57", size = 88690, upload-time = "2026-05-19T21:30:27.623Z" }, + { url = "https://files.pythonhosted.org/packages/9e/13/d5b8e2c8667db955bcb3de233f18798fefe7edf1d7429c2c9d4f9c401114/yarl-1.24.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:221ce1dd921ac4f603957f17d7c18c5cc0797fbb52f156941f92e04605d1d67b", size = 136248, upload-time = "2026-05-19T21:30:29.297Z" }, + { url = "https://files.pythonhosted.org/packages/de/46/a4a97c05c9c9b8fd266bb2a0df12992c7fbd02391eb9640583411b6dab32/yarl-1.24.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5f3224db28173a00d7afacdee07045cc4673dfab2b15492c7ae10deddbece761", size = 95084, upload-time = "2026-05-19T21:30:31.031Z" }, + { url = "https://files.pythonhosted.org/packages/95/b2/845cf2074a015e6fe0d0808cf1a2d9e868386c4220d657ebd8302b199043/yarl-1.24.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c557165320d6244ebe3a02431b2a201a20080e02f41f0cfa0ccc47a183765da8", size = 95272, upload-time = "2026-05-19T21:30:33.062Z" }, + { url = "https://files.pythonhosted.org/packages/fe/16/e69d4aa244aef45235ddfebc0e04036a6829842bc5a6a795aedc6c998d23/yarl-1.24.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:904065e6e85b1fa54d0d87438bd58c14c0bad97aad654ad1077fd9d87e8478ed", size = 101497, upload-time = "2026-05-19T21:30:34.842Z" }, + { url = "https://files.pythonhosted.org/packages/15/94/c07107715d621076863ee88b3ddf183fa5e9d4aba5769623c9979828410a/yarl-1.24.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cec2a38d70edc10e0e856ceda886af5327a017ccbde8e1de1bd44d300357543", size = 94002, upload-time = "2026-05-19T21:30:37.724Z" }, + { url = "https://files.pythonhosted.org/packages/a9/35/fc1bbdd895b5e4010b8fdd037f7ed3aa289d3863e08231b30231ca9a0815/yarl-1.24.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e7484b9361ed222ee1ca5b4337aa4cbdcc4618ce5aff57d9ef1582fd95893fc0", size = 106524, upload-time = "2026-05-19T21:30:40.196Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f2/32b66d0a4ba47c296cf86d03e2c67bff58399fe6d6d84d5205c04c66cc6d/yarl-1.24.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:84f9670b89f34db07f81e53aee83e0b938a3412329d51c8f922488be7fcc4024", size = 106165, upload-time = "2026-05-19T21:30:41.888Z" }, + { url = "https://files.pythonhosted.org/packages/95/47/37cb5ff50c5e825d4d38e81bb04d1b7e96bf960f7ab89f9850b162f3f114/yarl-1.24.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:abb2759733d63a28b4956500a5dd57140f26486c92b2caedfb964ab7d9b79dbf", size = 103010, upload-time = "2026-05-19T21:30:43.985Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d2/4597912315096f7bb359e46e13bf8b60994fcbb2db29b804c0902ef4eff5/yarl-1.24.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:081c2bf54efe03774d0311172bc04fedf9ca01e644d4cd8c805688e527209bdc", size = 101128, upload-time = "2026-05-19T21:30:46.291Z" }, + { url = "https://files.pythonhosted.org/packages/b9/d5/c8e86e120521e646013d02a8e3b8884392e28494be8f392366e50d208efc/yarl-1.24.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:86746bef442aa479107fe28132e1277237f9c24c2f00b0b0cf22b3ee0904f2bb", size = 101382, upload-time = "2026-05-19T21:30:48.085Z" }, + { url = "https://files.pythonhosted.org/packages/fa/98/70b229236118f89dbeb739b76f10225bbf53b5497725502594c9a01d699a/yarl-1.24.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2d07d21d0bc4b17558e8de0b02fbfdf1e347d3bb3699edd00bb92e7c57925420", size = 95964, upload-time = "2026-05-19T21:30:49.785Z" }, + { url = "https://files.pythonhosted.org/packages/87/f8/56c386981e3c8648d279fdef2397ffec577e8320fd5649745e34d54faeb7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:4fb1ac3fc5fecd8ae7453ea237e4d22b49befa70266dfe1629924245c21a0c7f", size = 106204, upload-time = "2026-05-19T21:30:51.862Z" }, + { url = "https://files.pythonhosted.org/packages/1a/1e/765afe97811ca35933e2a7de70ac57b1997ea2e4ee895719ee7a231fb7e5/yarl-1.24.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:4da31a5512ed1729ca8d8aacde3f7faeb8843cde3165d6bcf7f88f74f17bb8aa", size = 101510, upload-time = "2026-05-19T21:30:53.62Z" }, + { url = "https://files.pythonhosted.org/packages/ee/78/393913f4b9039e1edd09ae8a9bbb9d539be909a8abf6d8a2084585bed4b7/yarl-1.24.2-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:533ded4dceb5f1f3da7906244f4e82cf46cfd40d84c69a1faf5ac506aa65ecbe", size = 105584, upload-time = "2026-05-19T21:30:55.962Z" }, + { url = "https://files.pythonhosted.org/packages/78/87/deb17b7049bbe74ea11a713b86f8f27800cc1c8648b0b797243ebb4830ba/yarl-1.24.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7b3a85525f6e7eeabcfdd372862b21ee1915db1b498a04e8bf0e389b607ff0bd", size = 103410, upload-time = "2026-05-19T21:30:57.962Z" }, + { url = "https://files.pythonhosted.org/packages/8f/be/f9f7594e23b5b93affff0318e4593c1920331bcaefda326cabcad94296a1/yarl-1.24.2-cp314-cp314t-win_amd64.whl", hash = "sha256:a7624b1ca46ca5d7b864ef0d2f8efe3091454085ee1855b4e992314529972215", size = 102980, upload-time = "2026-05-19T21:30:59.735Z" }, + { url = "https://files.pythonhosted.org/packages/65/a4/ba80dccd3593ff1f01051a818694d07b58cb8232677ee9a22a5a1f93a9fc/yarl-1.24.2-cp314-cp314t-win_arm64.whl", hash = "sha256:e434a45ce2e7a947f951fc5a8944c8cc080b7e59f9c50ae80fd39107cf88126d", size = 91219, upload-time = "2026-05-19T21:31:01.934Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4d/4b880086bd0d3e034d25647be1d830afc3e3f610e98c4ab3490af6b1b6d5/yarl-1.24.2-py3-none-any.whl", hash = "sha256:2783d9226db8797636cd6896e4de81feed252d1db72265686c9558d97a4d94b9", size = 53576, upload-time = "2026-05-19T21:31:03.909Z" }, +] + +[[package]] +name = "youtube-transcript-api" +version = "1.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/43/4104185a2eaa839daa693b30e15c37e7e58795e8e09ec414f22b3db54bec/youtube_transcript_api-1.2.4.tar.gz", hash = "sha256:b72d0e96a335df599d67cee51d49e143cff4f45b84bcafc202ff51291603ddcd", size = 469839, upload-time = "2026-01-29T09:09:17.088Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/95/129ea37efd6cd6ed00f62baae6543345c677810b8a3bf0026756e1d3cf3c/youtube_transcript_api-1.2.4-py3-none-any.whl", hash = "sha256:03878759356da5caf5edac77431780b91448fb3d8c21d4496015bdc8a7bc43ff", size = 485227, upload-time = "2026-01-29T09:09:15.427Z" }, +] + +[[package]] +name = "zipp" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, +] + +[[package]] +name = "zstandard" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/83/c3ca27c363d104980f1c9cee1101cc8ba724ac8c28a033ede6aab89585b1/zstandard-0.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", size = 795254, upload-time = "2025-09-14T22:16:26.137Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4d/e66465c5411a7cf4866aeadc7d108081d8ceba9bc7abe6b14aa21c671ec3/zstandard-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", size = 640559, upload-time = "2025-09-14T22:16:27.973Z" }, + { url = "https://files.pythonhosted.org/packages/12/56/354fe655905f290d3b147b33fe946b0f27e791e4b50a5f004c802cb3eb7b/zstandard-0.25.0-cp311-cp311-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", size = 5348020, upload-time = "2025-09-14T22:16:29.523Z" }, + { url = "https://files.pythonhosted.org/packages/3b/13/2b7ed68bd85e69a2069bcc72141d378f22cae5a0f3b353a2c8f50ef30c1b/zstandard-0.25.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a", size = 5058126, upload-time = "2025-09-14T22:16:31.811Z" }, + { url = "https://files.pythonhosted.org/packages/c9/dd/fdaf0674f4b10d92cb120ccff58bbb6626bf8368f00ebfd2a41ba4a0dc99/zstandard-0.25.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc", size = 5405390, upload-time = "2025-09-14T22:16:33.486Z" }, + { url = "https://files.pythonhosted.org/packages/0f/67/354d1555575bc2490435f90d67ca4dd65238ff2f119f30f72d5cde09c2ad/zstandard-0.25.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6", size = 5452914, upload-time = "2025-09-14T22:16:35.277Z" }, + { url = "https://files.pythonhosted.org/packages/bb/1f/e9cfd801a3f9190bf3e759c422bbfd2247db9d7f3d54a56ecde70137791a/zstandard-0.25.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", size = 5559635, upload-time = "2025-09-14T22:16:37.141Z" }, + { url = "https://files.pythonhosted.org/packages/21/88/5ba550f797ca953a52d708c8e4f380959e7e3280af029e38fbf47b55916e/zstandard-0.25.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277", size = 5048277, upload-time = "2025-09-14T22:16:38.807Z" }, + { url = "https://files.pythonhosted.org/packages/46/c0/ca3e533b4fa03112facbe7fbe7779cb1ebec215688e5df576fe5429172e0/zstandard-0.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", size = 5574377, upload-time = "2025-09-14T22:16:40.523Z" }, + { url = "https://files.pythonhosted.org/packages/12/9b/3fb626390113f272abd0799fd677ea33d5fc3ec185e62e6be534493c4b60/zstandard-0.25.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097", size = 4961493, upload-time = "2025-09-14T22:16:43.3Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d3/23094a6b6a4b1343b27ae68249daa17ae0651fcfec9ed4de09d14b940285/zstandard-0.25.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778", size = 5269018, upload-time = "2025-09-14T22:16:45.292Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a7/bb5a0c1c0f3f4b5e9d5b55198e39de91e04ba7c205cc46fcb0f95f0383c1/zstandard-0.25.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065", size = 5443672, upload-time = "2025-09-14T22:16:47.076Z" }, + { url = "https://files.pythonhosted.org/packages/27/22/503347aa08d073993f25109c36c8d9f029c7d5949198050962cb568dfa5e/zstandard-0.25.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa", size = 5822753, upload-time = "2025-09-14T22:16:49.316Z" }, + { url = "https://files.pythonhosted.org/packages/e2/be/94267dc6ee64f0f8ba2b2ae7c7a2df934a816baaa7291db9e1aa77394c3c/zstandard-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", size = 5366047, upload-time = "2025-09-14T22:16:51.328Z" }, + { url = "https://files.pythonhosted.org/packages/7b/a3/732893eab0a3a7aecff8b99052fecf9f605cf0fb5fb6d0290e36beee47a4/zstandard-0.25.0-cp311-cp311-win32.whl", hash = "sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4", size = 436484, upload-time = "2025-09-14T22:16:55.005Z" }, + { url = "https://files.pythonhosted.org/packages/43/a3/c6155f5c1cce691cb80dfd38627046e50af3ee9ddc5d0b45b9b063bfb8c9/zstandard-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2", size = 506183, upload-time = "2025-09-14T22:16:52.753Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3e/8945ab86a0820cc0e0cdbf38086a92868a9172020fdab8a03ac19662b0e5/zstandard-0.25.0-cp311-cp311-win_arm64.whl", hash = "sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137", size = 462533, upload-time = "2025-09-14T22:16:53.878Z" }, + { url = "https://files.pythonhosted.org/packages/82/fc/f26eb6ef91ae723a03e16eddb198abcfce2bc5a42e224d44cc8b6765e57e/zstandard-0.25.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", size = 795738, upload-time = "2025-09-14T22:16:56.237Z" }, + { url = "https://files.pythonhosted.org/packages/aa/1c/d920d64b22f8dd028a8b90e2d756e431a5d86194caa78e3819c7bf53b4b3/zstandard-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", size = 640436, upload-time = "2025-09-14T22:16:57.774Z" }, + { url = "https://files.pythonhosted.org/packages/53/6c/288c3f0bd9fcfe9ca41e2c2fbfd17b2097f6af57b62a81161941f09afa76/zstandard-0.25.0-cp312-cp312-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", size = 5343019, upload-time = "2025-09-14T22:16:59.302Z" }, + { url = "https://files.pythonhosted.org/packages/1e/15/efef5a2f204a64bdb5571e6161d49f7ef0fffdbca953a615efbec045f60f/zstandard-0.25.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", size = 5063012, upload-time = "2025-09-14T22:17:01.156Z" }, + { url = "https://files.pythonhosted.org/packages/b7/37/a6ce629ffdb43959e92e87ebdaeebb5ac81c944b6a75c9c47e300f85abdf/zstandard-0.25.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", size = 5394148, upload-time = "2025-09-14T22:17:03.091Z" }, + { url = "https://files.pythonhosted.org/packages/e3/79/2bf870b3abeb5c070fe2d670a5a8d1057a8270f125ef7676d29ea900f496/zstandard-0.25.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", size = 5451652, upload-time = "2025-09-14T22:17:04.979Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/7be26e610767316c028a2cbedb9a3beabdbe33e2182c373f71a1c0b88f36/zstandard-0.25.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", size = 5546993, upload-time = "2025-09-14T22:17:06.781Z" }, + { url = "https://files.pythonhosted.org/packages/85/c7/3483ad9ff0662623f3648479b0380d2de5510abf00990468c286c6b04017/zstandard-0.25.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", size = 5046806, upload-time = "2025-09-14T22:17:08.415Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/206883dd25b8d1591a1caa44b54c2aad84badccf2f1de9e2d60a446f9a25/zstandard-0.25.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", size = 5576659, upload-time = "2025-09-14T22:17:10.164Z" }, + { url = "https://files.pythonhosted.org/packages/9d/31/76c0779101453e6c117b0ff22565865c54f48f8bd807df2b00c2c404b8e0/zstandard-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", size = 4953933, upload-time = "2025-09-14T22:17:11.857Z" }, + { url = "https://files.pythonhosted.org/packages/18/e1/97680c664a1bf9a247a280a053d98e251424af51f1b196c6d52f117c9720/zstandard-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", size = 5268008, upload-time = "2025-09-14T22:17:13.627Z" }, + { url = "https://files.pythonhosted.org/packages/1e/73/316e4010de585ac798e154e88fd81bb16afc5c5cb1a72eeb16dd37e8024a/zstandard-0.25.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", size = 5433517, upload-time = "2025-09-14T22:17:16.103Z" }, + { url = "https://files.pythonhosted.org/packages/5b/60/dd0f8cfa8129c5a0ce3ea6b7f70be5b33d2618013a161e1ff26c2b39787c/zstandard-0.25.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", size = 5814292, upload-time = "2025-09-14T22:17:17.827Z" }, + { url = "https://files.pythonhosted.org/packages/fc/5f/75aafd4b9d11b5407b641b8e41a57864097663699f23e9ad4dbb91dc6bfe/zstandard-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", size = 5360237, upload-time = "2025-09-14T22:17:19.954Z" }, + { url = "https://files.pythonhosted.org/packages/ff/8d/0309daffea4fcac7981021dbf21cdb2e3427a9e76bafbcdbdf5392ff99a4/zstandard-0.25.0-cp312-cp312-win32.whl", hash = "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", size = 436922, upload-time = "2025-09-14T22:17:24.398Z" }, + { url = "https://files.pythonhosted.org/packages/79/3b/fa54d9015f945330510cb5d0b0501e8253c127cca7ebe8ba46a965df18c5/zstandard-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01", size = 506276, upload-time = "2025-09-14T22:17:21.429Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6b/8b51697e5319b1f9ac71087b0af9a40d8a6288ff8025c36486e0c12abcc4/zstandard-0.25.0-cp312-cp312-win_arm64.whl", hash = "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", size = 462679, upload-time = "2025-09-14T22:17:23.147Z" }, + { url = "https://files.pythonhosted.org/packages/35/0b/8df9c4ad06af91d39e94fa96cc010a24ac4ef1378d3efab9223cc8593d40/zstandard-0.25.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", size = 795735, upload-time = "2025-09-14T22:17:26.042Z" }, + { url = "https://files.pythonhosted.org/packages/3f/06/9ae96a3e5dcfd119377ba33d4c42a7d89da1efabd5cb3e366b156c45ff4d/zstandard-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", size = 640440, upload-time = "2025-09-14T22:17:27.366Z" }, + { url = "https://files.pythonhosted.org/packages/d9/14/933d27204c2bd404229c69f445862454dcc101cd69ef8c6068f15aaec12c/zstandard-0.25.0-cp313-cp313-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", size = 5343070, upload-time = "2025-09-14T22:17:28.896Z" }, + { url = "https://files.pythonhosted.org/packages/6d/db/ddb11011826ed7db9d0e485d13df79b58586bfdec56e5c84a928a9a78c1c/zstandard-0.25.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", size = 5063001, upload-time = "2025-09-14T22:17:31.044Z" }, + { url = "https://files.pythonhosted.org/packages/db/00/87466ea3f99599d02a5238498b87bf84a6348290c19571051839ca943777/zstandard-0.25.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e", size = 5394120, upload-time = "2025-09-14T22:17:32.711Z" }, + { url = "https://files.pythonhosted.org/packages/2b/95/fc5531d9c618a679a20ff6c29e2b3ef1d1f4ad66c5e161ae6ff847d102a9/zstandard-0.25.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551", size = 5451230, upload-time = "2025-09-14T22:17:34.41Z" }, + { url = "https://files.pythonhosted.org/packages/63/4b/e3678b4e776db00f9f7b2fe58e547e8928ef32727d7a1ff01dea010f3f13/zstandard-0.25.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", size = 5547173, upload-time = "2025-09-14T22:17:36.084Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d5/ba05ed95c6b8ec30bd468dfeab20589f2cf709b5c940483e31d991f2ca58/zstandard-0.25.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", size = 5046736, upload-time = "2025-09-14T22:17:37.891Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/870aa06b3a76c73eced65c044b92286a3c4e00554005ff51962deef28e28/zstandard-0.25.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", size = 5576368, upload-time = "2025-09-14T22:17:40.206Z" }, + { url = "https://files.pythonhosted.org/packages/5d/35/398dc2ffc89d304d59bc12f0fdd931b4ce455bddf7038a0a67733a25f550/zstandard-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", size = 4954022, upload-time = "2025-09-14T22:17:41.879Z" }, + { url = "https://files.pythonhosted.org/packages/9a/5c/36ba1e5507d56d2213202ec2b05e8541734af5f2ce378c5d1ceaf4d88dc4/zstandard-0.25.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851", size = 5267889, upload-time = "2025-09-14T22:17:43.577Z" }, + { url = "https://files.pythonhosted.org/packages/70/e8/2ec6b6fb7358b2ec0113ae202647ca7c0e9d15b61c005ae5225ad0995df5/zstandard-0.25.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250", size = 5433952, upload-time = "2025-09-14T22:17:45.271Z" }, + { url = "https://files.pythonhosted.org/packages/7b/01/b5f4d4dbc59ef193e870495c6f1275f5b2928e01ff5a81fecb22a06e22fb/zstandard-0.25.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98", size = 5814054, upload-time = "2025-09-14T22:17:47.08Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e5/fbd822d5c6f427cf158316d012c5a12f233473c2f9c5fe5ab1ae5d21f3d8/zstandard-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", size = 5360113, upload-time = "2025-09-14T22:17:48.893Z" }, + { url = "https://files.pythonhosted.org/packages/8e/e0/69a553d2047f9a2c7347caa225bb3a63b6d7704ad74610cb7823baa08ed7/zstandard-0.25.0-cp313-cp313-win32.whl", hash = "sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09", size = 436936, upload-time = "2025-09-14T22:17:52.658Z" }, + { url = "https://files.pythonhosted.org/packages/d9/82/b9c06c870f3bd8767c201f1edbdf9e8dc34be5b0fbc5682c4f80fe948475/zstandard-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5", size = 506232, upload-time = "2025-09-14T22:17:50.402Z" }, + { url = "https://files.pythonhosted.org/packages/d4/57/60c3c01243bb81d381c9916e2a6d9e149ab8627c0c7d7abb2d73384b3c0c/zstandard-0.25.0-cp313-cp313-win_arm64.whl", hash = "sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049", size = 462671, upload-time = "2025-09-14T22:17:51.533Z" }, + { url = "https://files.pythonhosted.org/packages/3d/5c/f8923b595b55fe49e30612987ad8bf053aef555c14f05bb659dd5dbe3e8a/zstandard-0.25.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3", size = 795887, upload-time = "2025-09-14T22:17:54.198Z" }, + { url = "https://files.pythonhosted.org/packages/8d/09/d0a2a14fc3439c5f874042dca72a79c70a532090b7ba0003be73fee37ae2/zstandard-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", size = 640658, upload-time = "2025-09-14T22:17:55.423Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7c/8b6b71b1ddd517f68ffb55e10834388d4f793c49c6b83effaaa05785b0b4/zstandard-0.25.0-cp314-cp314-manylinux2010_i686.manylinux_2_12_i686.manylinux_2_28_i686.whl", hash = "sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c", size = 5379849, upload-time = "2025-09-14T22:17:57.372Z" }, + { url = "https://files.pythonhosted.org/packages/a4/86/a48e56320d0a17189ab7a42645387334fba2200e904ee47fc5a26c1fd8ca/zstandard-0.25.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", size = 5058095, upload-time = "2025-09-14T22:17:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ad/eb659984ee2c0a779f9d06dbfe45e2dc39d99ff40a319895df2d3d9a48e5/zstandard-0.25.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043", size = 5551751, upload-time = "2025-09-14T22:18:01.618Z" }, + { url = "https://files.pythonhosted.org/packages/61/b3/b637faea43677eb7bd42ab204dfb7053bd5c4582bfe6b1baefa80ac0c47b/zstandard-0.25.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859", size = 6364818, upload-time = "2025-09-14T22:18:03.769Z" }, + { url = "https://files.pythonhosted.org/packages/31/dc/cc50210e11e465c975462439a492516a73300ab8caa8f5e0902544fd748b/zstandard-0.25.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", size = 5560402, upload-time = "2025-09-14T22:18:05.954Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ae/56523ae9c142f0c08efd5e868a6da613ae76614eca1305259c3bf6a0ed43/zstandard-0.25.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", size = 4955108, upload-time = "2025-09-14T22:18:07.68Z" }, + { url = "https://files.pythonhosted.org/packages/98/cf/c899f2d6df0840d5e384cf4c4121458c72802e8bda19691f3b16619f51e9/zstandard-0.25.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2", size = 5269248, upload-time = "2025-09-14T22:18:09.753Z" }, + { url = "https://files.pythonhosted.org/packages/1b/c0/59e912a531d91e1c192d3085fc0f6fb2852753c301a812d856d857ea03c6/zstandard-0.25.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344", size = 5430330, upload-time = "2025-09-14T22:18:11.966Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/7e31db1240de2df22a58e2ea9a93fc6e38cc29353e660c0272b6735d6669/zstandard-0.25.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c", size = 5811123, upload-time = "2025-09-14T22:18:13.907Z" }, + { url = "https://files.pythonhosted.org/packages/f6/49/fac46df5ad353d50535e118d6983069df68ca5908d4d65b8c466150a4ff1/zstandard-0.25.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088", size = 5359591, upload-time = "2025-09-14T22:18:16.465Z" }, + { url = "https://files.pythonhosted.org/packages/c2/38/f249a2050ad1eea0bb364046153942e34abba95dd5520af199aed86fbb49/zstandard-0.25.0-cp314-cp314-win32.whl", hash = "sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12", size = 444513, upload-time = "2025-09-14T22:18:20.61Z" }, + { url = "https://files.pythonhosted.org/packages/3a/43/241f9615bcf8ba8903b3f0432da069e857fc4fd1783bd26183db53c4804b/zstandard-0.25.0-cp314-cp314-win_amd64.whl", hash = "sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2", size = 516118, upload-time = "2025-09-14T22:18:17.849Z" }, + { url = "https://files.pythonhosted.org/packages/f0/ef/da163ce2450ed4febf6467d77ccb4cd52c4c30ab45624bad26ca0a27260c/zstandard-0.25.0-cp314-cp314-win_arm64.whl", hash = "sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d", size = 476940, upload-time = "2025-09-14T22:18:19.088Z" }, +] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/frontend/.env.example b/frontend/.env.example new file mode 100644 index 0000000..b40bd54 --- /dev/null +++ b/frontend/.env.example @@ -0,0 +1,11 @@ +# ────────────────────────────────────────────────────────────────────────── +# Frontend environment — copy to `frontend/.env` and fill in real values. +# Only variables prefixed with VITE_ are exposed to the client bundle. +# ────────────────────────────────────────────────────────────────────────── + +# Base URL for the backend API. In dev, Vite proxies /api → http://localhost:8000 +# (see vite.config.js), so this can stay as the relative default. +VITE_API_BASE_URL=/api + +# Google OAuth client ID (for "Sign in with Google") +VITE_GOOGLE_OAUTH_CLIENT_ID= diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/frontend/README.md b/frontend/README.md index a36934d..aca47a8 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,16 +1,47 @@ -# React + Vite +# Job Application Agent — Frontend -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. +React + Vite (JavaScript) single-page app. Authenticates against the FastAPI +backend, lets users link a GitHub profile and upload a resume, kicks off the +CrewAI tailoring pipeline, and streams live progress via Server-Sent Events. -Currently, two official plugins are available: +## Layout -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) +``` +frontend/ +├── src/ +│ ├── assets/ # Static media (images, icons) +│ ├── components/ # Reusable UI components +│ ├── pages/ # Route-level views +│ ├── context/ # React context providers (AuthContext) +│ ├── hooks/ # Custom React hooks +│ ├── services/ # API client (api.js — axios instance + interceptors) +│ ├── App.jsx # Route layout +│ └── main.jsx # Entry point +├── public/ +├── .env.example +├── package.json +└── vite.config.js # Dev server proxies /api → http://localhost:8000 +``` -## React Compiler +## Setup -The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). +```bash +cp .env.example .env +npm install +``` -## Expanding the ESLint configuration +## Develop -If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project. +```bash +npm run dev # http://localhost:5173 +``` + +The dev server proxies `/api/*` to the backend at `http://localhost:8000` +(see `vite.config.js`), so run the backend alongside it. + +## Build + +```bash +npm run build # outputs to dist/ +npm run preview +``` diff --git a/frontend/src/components/GithubProfileAdd.jsx b/frontend/src/components/GithubProfileAdd.jsx index 2d44baa..3ddcd12 100644 --- a/frontend/src/components/GithubProfileAdd.jsx +++ b/frontend/src/components/GithubProfileAdd.jsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import api from '../api/client'; +import api from '../services/api'; import { FiGithub, FiTrash2, FiPlus } from 'react-icons/fi'; export default function GithubProfileAdd({ profiles, onRefresh }) { diff --git a/frontend/src/components/LoginSection.jsx b/frontend/src/components/LoginSection.jsx index 3aecd77..2ee3752 100644 --- a/frontend/src/components/LoginSection.jsx +++ b/frontend/src/components/LoginSection.jsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import api from '../api/client'; +import api from '../services/api'; import { useAuth } from '../context/AuthContext'; import { FiMail, FiLock } from 'react-icons/fi'; diff --git a/frontend/src/components/ResumePreviewModal.jsx b/frontend/src/components/ResumePreviewModal.jsx index 00f0029..e0bcd15 100644 --- a/frontend/src/components/ResumePreviewModal.jsx +++ b/frontend/src/components/ResumePreviewModal.jsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; -import api from '../api/client'; +import api from '../services/api'; import { FiX } from 'react-icons/fi'; export default function ResumePreviewModal({ jobId, resumeId, onClose }) { diff --git a/frontend/src/components/ResumeReadyModal.jsx b/frontend/src/components/ResumeReadyModal.jsx index 03246aa..c9b9e3c 100644 --- a/frontend/src/components/ResumeReadyModal.jsx +++ b/frontend/src/components/ResumeReadyModal.jsx @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom'; import { FiEye, FiDownload, FiBookOpen, FiX } from 'react-icons/fi'; -import api from '../api/client'; +import api from '../services/api'; export default function ResumeReadyModal({ job, onClose, onPreviewResume }) { const navigate = useNavigate(); diff --git a/frontend/src/components/ResumeUpload.jsx b/frontend/src/components/ResumeUpload.jsx index 5fa8b93..0081908 100644 --- a/frontend/src/components/ResumeUpload.jsx +++ b/frontend/src/components/ResumeUpload.jsx @@ -1,5 +1,5 @@ import { useState, useRef } from 'react'; -import api from '../api/client'; +import api from '../services/api'; import { FiUploadCloud, FiFile, FiTrash2, FiExternalLink } from 'react-icons/fi'; export default function ResumeUpload({ resumes, onRefresh }) { diff --git a/frontend/src/components/TailorResumeForm.jsx b/frontend/src/components/TailorResumeForm.jsx index f409645..0b0a5d9 100644 --- a/frontend/src/components/TailorResumeForm.jsx +++ b/frontend/src/components/TailorResumeForm.jsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import api from '../api/client'; +import api from '../services/api'; import { FiLink, FiSend, FiEye } from 'react-icons/fi'; export default function TailorResumeForm({ githubProfiles, resumes, onJobCreated, onPreviewUploadedResume }) { diff --git a/frontend/src/components/TailoredResumeList.jsx b/frontend/src/components/TailoredResumeList.jsx index cc3cd71..e988d03 100644 --- a/frontend/src/components/TailoredResumeList.jsx +++ b/frontend/src/components/TailoredResumeList.jsx @@ -1,6 +1,6 @@ import { useNavigate } from 'react-router-dom'; import { FiEye, FiDownload, FiBookOpen } from 'react-icons/fi'; -import api from '../api/client'; +import api from '../services/api'; export default function TailoredResumeList({ jobs, onPreviewResume }) { const navigate = useNavigate(); diff --git a/frontend/src/context/AuthContext.jsx b/frontend/src/context/AuthContext.jsx index f6f09ec..c8b995a 100644 --- a/frontend/src/context/AuthContext.jsx +++ b/frontend/src/context/AuthContext.jsx @@ -1,5 +1,5 @@ import { createContext, useContext, useState, useEffect, useCallback } from 'react'; -import api from '../api/client'; +import api from '../services/api'; const AuthContext = createContext(null); diff --git a/frontend/src/hooks/.gitkeep b/frontend/src/hooks/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx index dbb102c..769c324 100644 --- a/frontend/src/pages/HomePage.jsx +++ b/frontend/src/pages/HomePage.jsx @@ -1,6 +1,6 @@ import { useState, useEffect, useCallback } from 'react'; import { useAuth } from '../context/AuthContext'; -import api from '../api/client'; +import api from '../services/api'; import Navbar from '../components/Navbar'; import ResumeUpload from '../components/ResumeUpload'; import GithubProfileAdd from '../components/GithubProfileAdd'; diff --git a/frontend/src/pages/InterviewMaterialsPage.jsx b/frontend/src/pages/InterviewMaterialsPage.jsx index e585012..436faca 100644 --- a/frontend/src/pages/InterviewMaterialsPage.jsx +++ b/frontend/src/pages/InterviewMaterialsPage.jsx @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react'; import { useParams, Link } from 'react-router-dom'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; -import api from '../api/client'; +import api from '../services/api'; import Navbar from '../components/Navbar'; import { FiArrowLeft, FiDownload } from 'react-icons/fi'; diff --git a/frontend/src/pages/RegisterPage.jsx b/frontend/src/pages/RegisterPage.jsx index 0d66cac..f847438 100644 --- a/frontend/src/pages/RegisterPage.jsx +++ b/frontend/src/pages/RegisterPage.jsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; -import api from '../api/client'; +import api from '../services/api'; import { useAuth } from '../context/AuthContext'; import { FiUser, FiMail, FiLock, FiArrowLeft } from 'react-icons/fi'; diff --git a/frontend/src/api/client.js b/frontend/src/services/api.js similarity index 100% rename from frontend/src/api/client.js rename to frontend/src/services/api.js From 5bdf766b7002f2f67169581581d1b5e3d3b9df83 Mon Sep 17 00:00:00 2001 From: Arijit De Date: Thu, 18 Jun 2026 16:31:06 +0000 Subject: [PATCH 06/11] feat: optional GitHub profile, resume view/download/delete, UI fixes GitHub profile is now optional for resume tailoring and interview prep. Also adds resume view/download/delete and fixes UI overlap issues. GitHub optional: - crew tasks.py: replace module-level Task singletons with a build_tasks( include_github) factory returning fresh tasks per run. Without GitHub, the summarizer task is omitted and the profiler/strategist tasks get explicit grounding rules so agents do not fabricate projects, skills, or metrics beyond the resume + job details. Fresh per-request tasks also fix a race where concurrent jobs overwrote each other's output_file. - crew.py: build_crew(include_github=True) conditionally wires in the GitHub agent + task; return type stays Crew (CLI/runner unchanged). - crew_runner.py: GitHub params default to None; derive include_github from github_url; stamp output paths on per-request crew.tasks[-1]/[-2]; null-guard github_profile access; skip the searching_projects step. - jobs.py: POST /tailor looks up a GitHub profile only when one is given. - schemas: github_profile_id is now Optional[int] = None. - models: Job.github_profile_id is nullable with ON DELETE SET NULL. - frontend: GitHub select optional ("None / no GitHub"); omit github_profile_id when unset; ProgressTracker hides the GitHub step. - migrations.md: documents the one-time manual ALTER for existing DBs (no Alembic; create_all does not alter existing columns). Resume management & UI: - Add view & download buttons for uploaded resumes, reusing the existing /resumes/{id}/content endpoint. - Render ResumePreviewModal via a portal to document.body so it escapes the glass-card's backdrop-filter containing block (full-width, centered). - Add DELETE /api/jobs/{job_id} to remove tailored resumes: cleans up GCS artifacts and the DB record, with a confirm-guarded delete button in TailoredResumeList. - Fix LandingPage upload UI overlap. Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/app/api/v1/jobs.py | 55 +++- backend/app/models/__init__.py | 4 +- backend/app/schemas/__init__.py | 2 +- backend/app/services/crew/crew.py | 46 +-- backend/app/services/crew/tasks.py | 261 +++++++++++------- backend/app/services/crew_runner.py | 48 +++- backend/docs/migrations.md | 41 +++ frontend/src/components/ProgressTracker.jsx | 9 +- .../src/components/ResumePreviewModal.jsx | 6 +- frontend/src/components/ResumeUpload.jsx | 45 ++- frontend/src/components/TailorResumeForm.jsx | 21 +- .../src/components/TailoredResumeList.jsx | 67 +++-- frontend/src/pages/HomePage.jsx | 8 +- frontend/src/pages/LandingPage.jsx | 8 +- 14 files changed, 432 insertions(+), 189 deletions(-) create mode 100644 backend/docs/migrations.md diff --git a/backend/app/api/v1/jobs.py b/backend/app/api/v1/jobs.py index 49adece..86b4c73 100644 --- a/backend/app/api/v1/jobs.py +++ b/backend/app/api/v1/jobs.py @@ -15,7 +15,7 @@ from app.models import User, Job, GithubProfile, Resume from app.schemas import TailorJobRequest, JobResponse, JobDetailResponse from app.api.deps import get_current_user -from app.services.gcs_service import download_file +from app.services.gcs_service import download_file, delete_file from app.services.crew_runner import run_crew_for_job, progress_store router = APIRouter(prefix="/api/jobs", tags=["jobs"]) @@ -27,16 +27,22 @@ async def tailor_resume( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): - """Start a crew execution to tailor a resume for a job posting.""" - gh_result = await db.execute( - select(GithubProfile).where( - GithubProfile.id == req.github_profile_id, - GithubProfile.user_id == current_user.id, + """Start a crew execution to tailor a resume for a job posting. + + A GitHub profile is optional — when ``github_profile_id`` is omitted the + resume is tailored from the job description + uploaded resume alone. + """ + github_profile = None + if req.github_profile_id is not None: + gh_result = await db.execute( + select(GithubProfile).where( + GithubProfile.id == req.github_profile_id, + GithubProfile.user_id == current_user.id, + ) ) - ) - github_profile = gh_result.scalar_one_or_none() - if not github_profile: - raise HTTPException(status_code=404, detail="GitHub profile not found.") + github_profile = gh_result.scalar_one_or_none() + if not github_profile: + raise HTTPException(status_code=404, detail="GitHub profile not found.") resume_result = await db.execute( select(Resume).where(Resume.id == req.resume_id, Resume.user_id == current_user.id) @@ -93,6 +99,35 @@ async def get_job_detail( return job +@router.delete("/{job_id}", status_code=status.HTTP_204_NO_CONTENT) +async def delete_job( + job_id: int, current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """ + Delete a generated/tailored resume job. Removes the tailored resume and + interview materials from GCS, then deletes the DB record. + """ + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + job = result.scalar_one_or_none() + if not job: + raise HTTPException(status_code=404, detail="Job not found.") + + # Best-effort cleanup of GCS artifacts; missing files should not block deletion. + for gcs_path in (job.tailored_resume_gcs_path, job.interview_materials_gcs_path): + if gcs_path: + try: + delete_file(gcs_path) + except Exception: + pass + + await db.delete(job) + await db.commit() + return Response(status_code=status.HTTP_204_NO_CONTENT) + + @router.get("/{job_id}/progress") async def stream_job_progress( job_id: int, current_user: User = Depends(get_current_user), diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index bc5c1b2..31ec2cb 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -77,7 +77,9 @@ class Job(Base): id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) - github_profile_id = Column(Integer, ForeignKey("github_profiles.id", ondelete="RESTRICT"), nullable=False) + # Optional: a user may tailor a resume without a GitHub profile. + # ON DELETE SET NULL so deleting a profile leaves historical jobs intact. + github_profile_id = Column(Integer, ForeignKey("github_profiles.id", ondelete="SET NULL"), nullable=True) resume_id = Column(Integer, ForeignKey("resumes.id", ondelete="RESTRICT"), nullable=False) linkedin_job_url = Column(String(500), nullable=False) diff --git a/backend/app/schemas/__init__.py b/backend/app/schemas/__init__.py index 6e595a6..ec8eece 100644 --- a/backend/app/schemas/__init__.py +++ b/backend/app/schemas/__init__.py @@ -73,7 +73,7 @@ class ResumeResponse(BaseModel): class TailorJobRequest(BaseModel): linkedin_job_url: str = Field(..., description="LinkedIn job posting URL") - github_profile_id: int = Field(..., description="ID of the GitHub profile to use") + github_profile_id: Optional[int] = Field(None, description="ID of the GitHub profile to use (optional)") resume_id: int = Field(..., description="ID of the uploaded resume to use") diff --git a/backend/app/services/crew/crew.py b/backend/app/services/crew/crew.py index bbb3e3c..b0624c4 100644 --- a/backend/app/services/crew/crew.py +++ b/backend/app/services/crew/crew.py @@ -3,9 +3,14 @@ ----------------------- Crew assembly for the job-application pipeline. -``build_crew()`` wires the four agents and their tasks into a CrewAI ``Crew``. +``build_crew()`` wires the agents and their tasks into a CrewAI ``Crew``. The web app (``app.services.crew_runner``) and the standalone CLI (``python -m app.services.crew``) both construct the crew through this factory. + +When ``include_github`` is False (the applicant has no GitHub profile) the +GitHub summarizer agent and task are omitted, and the remaining agents work +from the resume + job details alone with explicit grounding rules (see +``app.services.crew.tasks``). """ from crewai import Crew @@ -17,17 +22,17 @@ resume_strategist, interview_preparer, ) -from app.services.crew.tasks import ( - github_summary_task, - profile_task, - resume_strategy_task, - interview_preparation_task, -) +from app.services.crew.tasks import build_tasks logger = get_logger(__name__) -def build_crew(output_log_file: str = "crew_log.txt", verbose: bool = True, tracing: bool = True) -> Crew: +def build_crew( + output_log_file: str = "crew_log.txt", + verbose: bool = True, + tracing: bool = True, + include_github: bool = True, +) -> Crew: """ Construct the job-application :class:`crewai.Crew`. @@ -38,23 +43,24 @@ def build_crew(output_log_file: str = "crew_log.txt", verbose: bool = True, trac output_log_file: Path for CrewAI's verbose execution log. verbose: Enable verbose agent/task logging. tracing: Enable CrewAI tracing. + include_github: When True, include the GitHub summarizer agent/task and + require the ``github_url`` / ``bq_dataset_name`` crew inputs. When + False, skip GitHub entirely and tailor from the resume + job details. Returns: A configured :class:`crewai.Crew` ready for ``kickoff(inputs=...)``. + The task list order is stable: the interview task is always last and the + resume task always second-to-last (``crew.tasks[-1]`` / ``[-2]``). """ + tasks = build_tasks(include_github=include_github) + + agents = [profiler, resume_strategist, interview_preparer] + if include_github: + agents.insert(0, github_project_summarizer) + return Crew( - agents=[ - github_project_summarizer, - profiler, - resume_strategist, - interview_preparer, - ], - tasks=[ - github_summary_task, - profile_task, - resume_strategy_task, - interview_preparation_task, - ], + agents=agents, + tasks=tasks, output_log_file=output_log_file, tracing=tracing, verbose=verbose, diff --git a/backend/app/services/crew/tasks.py b/backend/app/services/crew/tasks.py index f626ba2..45fb352 100644 --- a/backend/app/services/crew/tasks.py +++ b/backend/app/services/crew/tasks.py @@ -8,114 +8,181 @@ repo_content_searcher, read_resume, semantic_search_resume, - scrape_tool, - search_tool, ) # --------------------------------------------------------------------------- # NOTE: The researcher agent and research_task have been removed. # Job details (job_description, requirements, seniority_level, etc.) are -# pre-fetched by Job_Applier.py using extract_linkedin_job_details() and +# pre-fetched by the crew_runner using extract_linkedin_job_details() and # injected into every task via the {job_details_json} crew input variable. # This avoids a redundant MCP web scrape during crew execution. +# +# Tasks are built per crew run by build_tasks(include_github). When the +# applicant has NOT provided a GitHub profile, the GitHub summarizer task is +# omitted entirely (no scraping / BigQuery indexing) and the remaining tasks +# are given explicit grounding rules so the agents do NOT fabricate any +# GitHub projects, skills, or experience that is not in the resume. +# +# Building fresh Task objects per call (rather than reusing module-level +# singletons) also makes per-request output_file overrides thread-safe under +# the crew_runner's ThreadPoolExecutor. # --------------------------------------------------------------------------- -# Task 1: GitHub Project Summarizer — index repos and find relevant projects -github_summary_task = Task( - description=( - "You have been given structured job details in JSON format:\n\n" - "{job_details_json}\n\n" - "Step 1 — Index the applicant's GitHub repositories:\n" - " Use the extract_github_repos_tool with the GitHub URL: {github_url}\n\n" - "Step 2 — Build a search query:\n" - " From the job_description and requirements fields in the job details above, " - "identify the key tech stacks, programming languages, frameworks, tools, and " - "cloud technologies required. Formulate a concise search query from these.\n\n" - "Step 3 — Search the vector store:\n" - " Use the repo_content_searcher tool with your query (input argument 'query') " - "and pass the job_description as the 'job_description' argument.\n\n" - "Step 4 — Summarise:\n" - " Analyse the returned repository content and identify the applicant's most " - "relevant projects. Highlight tech stacks, languages, frameworks, tools, and " - "cloud technologies that match the job requirements." - ), - expected_output=( - "A concise summary of the applicant's most relevant GitHub projects, including " - "project names, tech stacks, programming languages, frameworks, tools, and cloud " - "technologies used. The summary should clearly connect the applicant's project " - "experience to the specific job requirements." - ), - tools=[extract_github_repos_tool, repo_content_searcher], - agent=github_project_summarizer, - async_execution=False, -) - +# Description fragments toggled by include_github ------------------------------- -# Task 2: Profiler — build a comprehensive applicant profile -profile_task = Task( - description=( - "Compile a detailed personal and professional profile for the applicant.\n\n" - "Job details (for context):\n{job_details_json}\n\n" - "Steps:\n" - " 1. Read and semantically understand the resume from: {resume_path}\n" - " 2. Use the job_description and requirements from the job details above " - "to understand what the employer is looking for.\n" - " 3. Use the GitHub projects summary from the previous task as additional context.\n" - " 4. Synthesise all three sources into a comprehensive applicant profile." - ), - context=[github_summary_task], - expected_output=( - "A comprehensive profile document that includes the applicant's skills, " - "project experiences, contributions, interests, and communication style, " - "grounded in the resume, GitHub work, and aligned to the job requirements." - ), - tools=[read_resume, semantic_search_resume], - agent=profiler, - async_execution=False, +# Profiler — step list ending differs depending on whether GitHub data exists. +_PROFILE_GITHUB_STEPS = ( + " 3. Use the GitHub projects summary from the previous task as additional context.\n" + " 4. Synthesise all three sources into a comprehensive applicant profile." ) - -# Task 3: Resume Strategist — tailor the resume to the job -resume_strategy_task = Task( - description=( - "Tailor the applicant's resume to maximise its fit for the target role.\n\n" - "Job details (use for ATS keyword alignment):\n{job_details_json}\n\n" - "Use the applicant profile and GitHub projects summary from previous tasks, " - "together with the job_description and requirements above, to:\n" - " - Update every resume section (summary, work experience, skills, education).\n" - " - Embed relevant keywords from the job description for ATS optimisation.\n" - " - Quantify achievements with practical, believable numbers where appropriate.\n" - " - Ensure the resume catches the recruiter's eye at first glance." - ), - expected_output=( - "An updated resume in Markdown format that effectively highlights the candidate's " - "qualifications and experiences most relevant to the target role." - ), - output_file="{applicant_name}_{company_name}_{job_name}_resume.md", - context=[profile_task], - agent=resume_strategist, - tools=[read_resume, semantic_search_resume], - markdown=True, - async_execution=False, +_PROFILE_NO_GITHUB_STEPS = ( + " 3. Synthesise the resume and job details into a comprehensive applicant profile.\n\n" + "IMPORTANT GROUNDING RULES:\n" + " - No GitHub profile was provided for this applicant.\n" + " - Use ONLY information that appears in the resume and the job details above.\n" + " - Do NOT invent, assume, or fabricate any projects, repositories, GitHub " + "activity, employers, dates, metrics, or skills that are not present in the resume." ) -# Task 4: Interview Preparer — generate interview questions and talking points -interview_preparation_task = Task( - description=( - "Create targeted interview questions and talking points for the applicant.\n\n" - "Job details:\n{job_details_json}\n\n" - "Use the tailored resume from the resume strategy task and the profile from " - "the profile task to:\n" - " - Generate likely interview questions based on the job_description and requirements.\n" - " - Prepare concise talking points that highlight how the applicant's experience " - "matches each key requirement.\n" - " - Help the candidate confidently address all aspects of the role." - ), - expected_output=( - "A document containing key interview questions and tailored talking points that " - "help the candidate demonstrate how their skills and experience match the role." - ), - output_file="interview_materials.md", - context=[profile_task, resume_strategy_task], - agent=interview_preparer, - async_execution=False, +# Resume Strategist — clause naming the inputs differs depending on GitHub data. +_RESUME_GITHUB_CLAUSE = ( + "Use the applicant profile and GitHub projects summary from previous tasks, " + "together with the job_description and requirements above, to:\n" ) +_RESUME_NO_GITHUB_CLAUSE = ( + "Use the applicant profile from the previous task, together with the " + "job_description and requirements above, to:\n" + "DO NOT add any experience, projects, or skills that are not already present " + "in the applicant profile / original resume. Rephrase and reorder for fit only.\n" +) + + +def _github_summary_task() -> Task: + """Task 1 — index GitHub repos and summarise the most relevant projects.""" + return Task( + description=( + "You have been given structured job details in JSON format:\n\n" + "{job_details_json}\n\n" + "Step 1 — Index the applicant's GitHub repositories:\n" + " Use the extract_github_repos_tool with the GitHub URL: {github_url}\n\n" + "Step 2 — Build a search query:\n" + " From the job_description and requirements fields in the job details above, " + "identify the key tech stacks, programming languages, frameworks, tools, and " + "cloud technologies required. Formulate a concise search query from these.\n\n" + "Step 3 — Search the vector store:\n" + " Use the repo_content_searcher tool with your query (input argument 'query') " + "and pass the job_description as the 'job_description' argument.\n\n" + "Step 4 — Summarise:\n" + " Analyse the returned repository content and identify the applicant's most " + "relevant projects. Highlight tech stacks, languages, frameworks, tools, and " + "cloud technologies that match the job requirements." + ), + expected_output=( + "A concise summary of the applicant's most relevant GitHub projects, including " + "project names, tech stacks, programming languages, frameworks, tools, and cloud " + "technologies used. The summary should clearly connect the applicant's project " + "experience to the specific job requirements." + ), + tools=[extract_github_repos_tool, repo_content_searcher], + agent=github_project_summarizer, + async_execution=False, + ) + + +def _profile_task(include_github: bool, github_task: Task | None) -> Task: + """Task 2 — build a comprehensive applicant profile.""" + steps = _PROFILE_GITHUB_STEPS if include_github else _PROFILE_NO_GITHUB_STEPS + grounded_in = "the resume, GitHub work, and" if include_github else "the resume and" + return Task( + description=( + "Compile a detailed personal and professional profile for the applicant.\n\n" + "Job details (for context):\n{job_details_json}\n\n" + "Steps:\n" + " 1. Read and semantically understand the resume from: {resume_path}\n" + " 2. Use the job_description and requirements from the job details above " + "to understand what the employer is looking for.\n" + + steps + ), + context=[github_task] if include_github else [], + expected_output=( + "A comprehensive profile document that includes the applicant's skills, " + "project experiences, contributions, interests, and communication style, " + f"grounded in {grounded_in} aligned to the job requirements." + ), + tools=[read_resume, semantic_search_resume], + agent=profiler, + async_execution=False, + ) + + +def _resume_strategy_task(include_github: bool, profile_task: Task) -> Task: + """Task 3 — tailor the resume to the job.""" + clause = _RESUME_GITHUB_CLAUSE if include_github else _RESUME_NO_GITHUB_CLAUSE + return Task( + description=( + "Tailor the applicant's resume to maximise its fit for the target role.\n\n" + "Job details (use for ATS keyword alignment):\n{job_details_json}\n\n" + + clause + + " - Update every resume section (summary, work experience, skills, education).\n" + " - Embed relevant keywords from the job description for ATS optimisation.\n" + " - Quantify achievements with practical, believable numbers where appropriate.\n" + " - Ensure the resume catches the recruiter's eye at first glance." + ), + expected_output=( + "An updated resume in Markdown format that effectively highlights the candidate's " + "qualifications and experiences most relevant to the target role." + ), + output_file="{applicant_name}_{company_name}_{job_name}_resume.md", + context=[profile_task], + agent=resume_strategist, + tools=[read_resume, semantic_search_resume], + markdown=True, + async_execution=False, + ) + + +def _interview_preparation_task(profile_task: Task, resume_task: Task) -> Task: + """Task 4 — generate interview questions and talking points.""" + return Task( + description=( + "Create targeted interview questions and talking points for the applicant.\n\n" + "Job details:\n{job_details_json}\n\n" + "Use the tailored resume from the resume strategy task and the profile from " + "the profile task to:\n" + " - Generate likely interview questions based on the job_description and requirements.\n" + " - Prepare concise talking points that highlight how the applicant's experience " + "matches each key requirement.\n" + " - Help the candidate confidently address all aspects of the role." + ), + expected_output=( + "A document containing key interview questions and tailored talking points that " + "help the candidate demonstrate how their skills and experience match the role." + ), + output_file="interview_materials.md", + context=[profile_task, resume_task], + agent=interview_preparer, + async_execution=False, + ) + + +def build_tasks(include_github: bool = True) -> list[Task]: + """ + Construct a fresh, correctly-wired task list for one crew run. + + When ``include_github`` is False the GitHub summarizer task is omitted and + the profile/resume tasks are given grounding rules so the agents do not + fabricate GitHub-derived content. + + Return order is stable across both modes: the interview task is always the + last element and the resume task always the second-to-last, so the runner + can stamp per-request ``output_file`` paths via ``crew.tasks[-1]/[-2]``. + """ + github_task = _github_summary_task() if include_github else None + profile = _profile_task(include_github, github_task) + resume = _resume_strategy_task(include_github, profile) + interview = _interview_preparation_task(profile, resume) + + tasks = [profile, resume, interview] + if include_github: + tasks.insert(0, github_task) + return tasks diff --git a/backend/app/services/crew_runner.py b/backend/app/services/crew_runner.py index 77a28de..335029c 100644 --- a/backend/app/services/crew_runner.py +++ b/backend/app/services/crew_runner.py @@ -44,16 +44,22 @@ def _update_progress(job_id: int, step: str, error: str = None): def _run_crew_sync( job_id: int, user_id: int, user_email: str, - github_username: str, github_url: str, bq_dataset_name: str, - resume_content: str, job_url: str, + github_username: str = None, github_url: str = None, bq_dataset_name: str = None, + resume_content: str = None, job_url: str = None, ): """ Synchronous crew execution — runs in a thread. This imports and uses the existing crew pipeline. + + When no GitHub URL is supplied the crew is built without the GitHub + summarizer agent/task and tailors the resume from the resume + job + details alone. """ from dotenv import load_dotenv load_dotenv() + include_github = bool(github_url) + # Step 1: Extract job details _update_progress(job_id, "extracting_job_info") try: @@ -68,7 +74,9 @@ def _run_crew_sync( # Step 2: Write resume to temp file for crew to read - _update_progress(job_id, "searching_projects") + # The "searching_projects" step only applies when GitHub repos are indexed; + # without GitHub we advance straight to building the profile. + _update_progress(job_id, "searching_projects" if include_github else "building_profile") with tempfile.NamedTemporaryFile(mode="w", suffix=".md", delete=False, prefix="resume_") as f: f.write(resume_content) resume_path = f.name @@ -78,9 +86,6 @@ def _run_crew_sync( _update_progress(job_id, "building_profile") from app.services.crew.crew import build_crew - from app.services.crew.tasks import ( - resume_strategy_task, interview_preparation_task, - ) applicant_name = user_email.split("@")[0].replace(".", "_") @@ -88,17 +93,21 @@ def _run_crew_sync( resume_output = tempfile.mktemp(suffix="_resume.md", prefix=f"job{job_id}_") interview_output = tempfile.mktemp(suffix="_interview.md", prefix=f"job{job_id}_") - # Override output_file dynamically - resume_strategy_task.output_file = resume_output - interview_preparation_task.output_file = interview_output - _LOG_DIR.mkdir(parents=True, exist_ok=True) ts = datetime.now().strftime("%Y%m%d_%H%M%S") crew_log_path = str(_LOG_DIR / f"{ts}_crew") - crew = build_crew(output_log_file=crew_log_path, verbose=True, tracing=False) + crew = build_crew( + output_log_file=crew_log_path, verbose=True, tracing=False, + include_github=include_github, + ) logger.info("crew_runner: Crew verbose log → %s", crew_log_path) + # Stamp per-request output paths on this run's fresh task objects. + # build_tasks() guarantees interview is last and resume second-to-last. + crew.tasks[-1].output_file = interview_output + crew.tasks[-2].output_file = resume_output + _update_progress(job_id, "tailoring_resume") job_application_inputs = { @@ -106,11 +115,12 @@ def _run_crew_sync( "job_posting_url": job_url, "job_name": job_details.job_name, "company_name": job_details.company_name, - "github_url": github_url, "resume_path": resume_path, "job_details_json": job_details_json, - "bq_dataset_name": bq_dataset_name, } + if include_github: + job_application_inputs["github_url"] = github_url + job_application_inputs["bq_dataset_name"] = bq_dataset_name result = crew.kickoff(inputs=job_application_inputs) logger.info("crew_runner: Crew execution completed for job %d. Log saved to %s", job_id, crew_log_path) @@ -150,6 +160,9 @@ async def run_crew_for_job( """ Async entry point for crew execution. Updates job status in DB. Runs the synchronous crew pipeline in a thread pool executor. + + ``github_profile`` may be ``None`` when the user tailors a resume without a + GitHub profile; the crew then runs without the GitHub summarizer. """ _update_progress(job_id, "pending") @@ -166,13 +179,18 @@ async def run_crew_for_job( ) await db.commit() + # github_profile may be None when the user tailors without GitHub. + gh_username = github_profile.github_username if github_profile else None + gh_url = github_profile.github_url if github_profile else None + gh_dataset = github_profile.bq_dataset_name if github_profile else None + # Run crew in thread pool loop = asyncio.get_event_loop() result = await loop.run_in_executor( _executor, _run_crew_sync, job_id, user_id, user_email, - github_profile.github_username, github_profile.github_url, - github_profile.bq_dataset_name, resume_content, job_url, + gh_username, gh_url, gh_dataset, + resume_content, job_url, ) # Save extracted job details to DB on the correct async event loop diff --git a/backend/docs/migrations.md b/backend/docs/migrations.md new file mode 100644 index 0000000..42e46a4 --- /dev/null +++ b/backend/docs/migrations.md @@ -0,0 +1,41 @@ +# Database Migrations (manual) + +This project has **no Alembic**. Tables are auto-created on startup via +`Base.metadata.create_all` (`app/main.py`), which only creates **missing** +tables — it does **not** alter columns on tables that already exist. + +When a model change alters an existing column, you must apply the change by +hand against the running MySQL database (e.g. Cloud SQL). Fresh databases pick +up the new schema automatically via `create_all`. + +--- + +## 2026-06-18 — Make `jobs.github_profile_id` optional + +**Why:** A GitHub profile is now optional when tailoring a resume. The column +was `NOT NULL` with `ON DELETE RESTRICT`; it becomes nullable with +`ON DELETE SET NULL` so that (a) jobs can be created without a GitHub profile, +and (b) deleting a GitHub profile leaves historical jobs intact (link cleared). + +**Apply once to any existing (non-fresh) database:** + +```sql +-- 1) Find the existing foreign-key constraint name on the column. +SELECT CONSTRAINT_NAME + FROM information_schema.KEY_COLUMN_USAGE + WHERE TABLE_NAME = 'jobs' + AND COLUMN_NAME = 'github_profile_id' + AND REFERENCED_TABLE_NAME IS NOT NULL; + +-- 2) Drop the old RESTRICT FK, relax the column, re-add as SET NULL. +-- Replace with the value from step 1 (often jobs_ibfk_2). +ALTER TABLE jobs DROP FOREIGN KEY ; +ALTER TABLE jobs MODIFY COLUMN github_profile_id INT NULL; +ALTER TABLE jobs + ADD CONSTRAINT fk_jobs_github_profile + FOREIGN KEY (github_profile_id) REFERENCES github_profiles(id) + ON DELETE SET NULL; +``` + +**Fresh databases:** no action needed — `create_all` builds the `jobs` table +with the nullable column and `SET NULL` FK directly from the updated model. diff --git a/frontend/src/components/ProgressTracker.jsx b/frontend/src/components/ProgressTracker.jsx index 419a93a..72c39fd 100644 --- a/frontend/src/components/ProgressTracker.jsx +++ b/frontend/src/components/ProgressTracker.jsx @@ -9,10 +9,13 @@ const STEPS = [ { key: 'uploading_results', label: 'Uploading results' }, ]; -export default function ProgressTracker({ jobId, onComplete }) { +export default function ProgressTracker({ jobId, includeGithub = true, onComplete }) { const [currentStep, setCurrentStep] = useState('pending'); const [error, setError] = useState(null); + // Without GitHub, the backend never emits the 'searching_projects' step. + const steps = includeGithub ? STEPS : STEPS.filter((s) => s.key !== 'searching_projects'); + useEffect(() => { if (!jobId) return; @@ -36,7 +39,7 @@ export default function ProgressTracker({ jobId, onComplete }) { return () => eventSource.close(); }, [jobId, onComplete]); - const getStepIndex = () => STEPS.findIndex((s) => s.key === currentStep); + const getStepIndex = () => steps.findIndex((s) => s.key === currentStep); const activeIdx = getStepIndex(); return ( @@ -51,7 +54,7 @@ export default function ProgressTracker({ jobId, onComplete }) {
- {STEPS.map((step, idx) => { + {steps.map((step, idx) => { let status = 'pending'; if (currentStep === 'completed') status = 'done'; else if (currentStep === 'failed' && idx <= activeIdx) status = idx === activeIdx ? 'failed' : 'done'; diff --git a/frontend/src/components/ResumePreviewModal.jsx b/frontend/src/components/ResumePreviewModal.jsx index e0bcd15..6f82e40 100644 --- a/frontend/src/components/ResumePreviewModal.jsx +++ b/frontend/src/components/ResumePreviewModal.jsx @@ -1,4 +1,5 @@ import { useState, useEffect } from 'react'; +import { createPortal } from 'react-dom'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import api from '../services/api'; @@ -33,7 +34,7 @@ export default function ResumePreviewModal({ jobId, resumeId, onClose }) { fetchContent(); }, [jobId, resumeId]); - return ( + return createPortal(
e.stopPropagation()}>
@@ -50,6 +51,7 @@ export default function ResumePreviewModal({ jobId, resumeId, onClose }) {
)}
-
+
, + document.body ); } diff --git a/frontend/src/components/ResumeUpload.jsx b/frontend/src/components/ResumeUpload.jsx index 0081908..5e8978a 100644 --- a/frontend/src/components/ResumeUpload.jsx +++ b/frontend/src/components/ResumeUpload.jsx @@ -1,11 +1,13 @@ import { useState, useRef } from 'react'; import api from '../services/api'; -import { FiUploadCloud, FiFile, FiTrash2, FiExternalLink } from 'react-icons/fi'; +import { FiUploadCloud, FiFile, FiTrash2, FiExternalLink, FiEye, FiDownload } from 'react-icons/fi'; +import ResumePreviewModal from './ResumePreviewModal'; export default function ResumeUpload({ resumes, onRefresh }) { const [uploading, setUploading] = useState(false); const [dragActive, setDragActive] = useState(false); const [error, setError] = useState(''); + const [previewId, setPreviewId] = useState(null); const fileInputRef = useRef(null); const handleUpload = async (file) => { @@ -39,6 +41,24 @@ export default function ResumeUpload({ resumes, onRefresh }) { } }; + const handleDownload = async (resume) => { + setError(''); + try { + const res = await api.get(`/resumes/${resume.id}/content`); + const blob = new Blob([res.data.content], { type: 'text/markdown' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = res.data.filename || resume.original_filename || 'resume.md'; + document.body.appendChild(a); + a.click(); + a.remove(); + URL.revokeObjectURL(url); + } catch (err) { + setError(err.response?.data?.detail || 'Download failed.'); + } + }; + const handleDrop = (e) => { e.preventDefault(); setDragActive(false); @@ -98,16 +118,29 @@ export default function ResumeUpload({ resumes, onRefresh }) { padding: 'var(--space-3) var(--space-4)', background: 'var(--bg-secondary)', borderRadius: 'var(--radius-sm)', fontSize: 'var(--font-size-sm)', }}> - - {r.original_filename} + + + {r.original_filename} + + + + + -
))}
)} + + {previewId && ( + setPreviewId(null)} /> + )}
); } diff --git a/frontend/src/components/TailorResumeForm.jsx b/frontend/src/components/TailorResumeForm.jsx index 0b0a5d9..32f4945 100644 --- a/frontend/src/components/TailorResumeForm.jsx +++ b/frontend/src/components/TailorResumeForm.jsx @@ -11,20 +11,21 @@ export default function TailorResumeForm({ githubProfiles, resumes, onJobCreated const handleSubmit = async (e) => { e.preventDefault(); - if (!jobUrl || !githubId || !resumeId) { - setError('All fields are required.'); + if (!jobUrl || !resumeId) { + setError('Job URL and resume are required.'); return; } setError(''); setLoading(true); try { - const res = await api.post('/jobs/tailor', { + const payload = { linkedin_job_url: jobUrl, - github_profile_id: parseInt(githubId), resume_id: parseInt(resumeId), - }); + }; + if (githubId) payload.github_profile_id = parseInt(githubId); + const res = await api.post('/jobs/tailor', payload); setJobUrl(''); - onJobCreated(res.data); + onJobCreated(res.data, !!githubId); } catch (err) { setError(err.response?.data?.detail || 'Failed to start tailoring.'); } finally { @@ -48,9 +49,9 @@ export default function TailorResumeForm({ githubProfiles, resumes, onJobCreated
- - setGithubId(e.target.value)}> + {githubProfiles.map((p) => ( ))} @@ -76,7 +77,7 @@ export default function TailorResumeForm({ githubProfiles, resumes, onJobCreated {error &&

{error}

} - diff --git a/frontend/src/components/TailoredResumeList.jsx b/frontend/src/components/TailoredResumeList.jsx index e988d03..2aee95d 100644 --- a/frontend/src/components/TailoredResumeList.jsx +++ b/frontend/src/components/TailoredResumeList.jsx @@ -1,9 +1,28 @@ +import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { FiEye, FiDownload, FiBookOpen } from 'react-icons/fi'; +import { FiEye, FiDownload, FiBookOpen, FiTrash2 } from 'react-icons/fi'; import api from '../services/api'; -export default function TailoredResumeList({ jobs, onPreviewResume }) { +export default function TailoredResumeList({ jobs, onPreviewResume, onRefresh }) { const navigate = useNavigate(); + const [deletingId, setDeletingId] = useState(null); + + const handleDelete = async (job) => { + const label = job.job_name + ? `"${job.job_name}"${job.company_name ? ` at ${job.company_name}` : ''}` + : 'this entry'; + if (!window.confirm(`Delete the tailored resume for ${label}? This cannot be undone.`)) return; + setDeletingId(job.id); + try { + await api.delete(`/jobs/${job.id}`); + onRefresh?.(); + } catch (err) { + console.error('Delete failed:', err); + alert(err.response?.data?.detail || 'Failed to delete. Please try again.'); + } finally { + setDeletingId(null); + } + }; const downloadFile = async (jobId, type) => { try { @@ -48,22 +67,36 @@ export default function TailoredResumeList({ jobs, onPreviewResume }) {
{job.status} - {job.status === 'completed' && ( -
- - + + + + + )} + {job.status !== 'pending' && job.status !== 'processing' && ( + - - -
- )} + )} + {job.status === 'failed' && job.error_message && (

{job.error_message} diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx index 769c324..1670adf 100644 --- a/frontend/src/pages/HomePage.jsx +++ b/frontend/src/pages/HomePage.jsx @@ -17,6 +17,7 @@ export default function HomePage() { const [resumes, setResumes] = useState([]); const [githubProfiles, setGithubProfiles] = useState([]); const [activeJobId, setActiveJobId] = useState(null); + const [activeJobHasGithub, setActiveJobHasGithub] = useState(true); const [completedJob, setCompletedJob] = useState(null); const [previewJobId, setPreviewJobId] = useState(null); const [previewResumeId, setPreviewResumeId] = useState(null); @@ -32,8 +33,9 @@ export default function HomePage() { useEffect(() => { fetchData(); }, [fetchData]); - const handleJobCreated = (job) => { + const handleJobCreated = (job, hasGithub = true) => { setActiveJobId(job.id); + setActiveJobHasGithub(hasGithub); setJobs((prev) => [job, ...prev]); }; @@ -62,7 +64,7 @@ export default function HomePage() {

Previously Tailored Resumes

- setPreviewJobId(id)} /> + setPreviewJobId(id)} onRefresh={fetchData} />
@@ -87,7 +89,7 @@ export default function HomePage() { {activeJobId && (
- +
)} diff --git a/frontend/src/pages/LandingPage.jsx b/frontend/src/pages/LandingPage.jsx index 9956289..3cf6f63 100644 --- a/frontend/src/pages/LandingPage.jsx +++ b/frontend/src/pages/LandingPage.jsx @@ -90,7 +90,10 @@ export default function LandingPage() {

{STEPS.map((s, i) => ( -
+
+ + STEP {s.num} + {s.icon} - - STEP {s.num} -

{s.title}

{s.desc}

From 14d5fb6cbfdcd791474fa68491935500a164100d Mon Sep 17 00:00:00 2001 From: Arijit De Date: Fri, 19 Jun 2026 05:08:47 +0000 Subject: [PATCH 07/11] fix: update crewai-tools dependency to include optional mcp extras --- backend/pyproject.toml | 2 +- backend/uv.lock | 56 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 00c0ca9..130c70f 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -31,7 +31,7 @@ dependencies = [ "google-cloud-bigquery>=3.0.0", # ── LLM / Agent pipeline (CrewAI) ────────────────────────────────────── "crewai[anthropic]", - "crewai-tools", + "crewai-tools[mcp]", # ── RAG / embeddings ─────────────────────────────────────────────────── "langchain-community", "langchain-google-genai", diff --git a/backend/uv.lock b/backend/uv.lock index 16ca2de..7c51ca3 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -723,6 +723,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/57/2ceb2cfec8845e3d9e358c441cb382f82c9b3b8b964384d665e290e565b0/crewai_tools-1.14.7-py3-none-any.whl", hash = "sha256:e6f1b0a36b40a43ba57c42519cf9320c59a937cfd1a5c110246ae0c7bc99d595", size = 809653, upload-time = "2026-06-11T17:14:49.845Z" }, ] +[package.optional-dependencies] +mcp = [ + { name = "mcp" }, + { name = "mcpadapt", version = "0.1.19", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" }, + { name = "mcpadapt", version = "0.1.20", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" }, +] + [[package]] name = "cryptography" version = "49.0.0" @@ -1791,7 +1798,7 @@ dependencies = [ { name = "asyncmy" }, { name = "beautifulsoup4" }, { name = "crewai", extra = ["anthropic"] }, - { name = "crewai-tools" }, + { name = "crewai-tools", extra = ["mcp"] }, { name = "fastapi" }, { name = "google-auth" }, { name = "google-cloud-bigquery" }, @@ -1829,7 +1836,7 @@ requires-dist = [ { name = "asyncmy", specifier = ">=0.2.9" }, { name = "beautifulsoup4" }, { name = "crewai", extras = ["anthropic"] }, - { name = "crewai-tools" }, + { name = "crewai-tools", extras = ["mcp"] }, { name = "fastapi", specifier = ">=0.115.0,<0.116" }, { name = "google-auth", specifier = ">=2.25.0" }, { name = "google-cloud-bigquery", specifier = ">=3.0.0" }, @@ -2461,6 +2468,51 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/d9/eaa1f80170d2b7c5ba23f3b59f766f3a0bb41155fbc32a69adfa1adaaef9/mcp-1.26.0-py3-none-any.whl", hash = "sha256:904a21c33c25aa98ddbeb47273033c435e595bbacfdb177f4bd87f6dceebe1ca", size = 233615, upload-time = "2026-01-24T19:40:30.652Z" }, ] +[package.optional-dependencies] +ws = [ + { name = "websockets" }, +] + +[[package]] +name = "mcpadapt" +version = "0.1.19" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.12'", +] +dependencies = [ + { name = "jsonref", marker = "python_full_version < '3.12'" }, + { name = "mcp", extra = ["ws"], marker = "python_full_version < '3.12'" }, + { name = "pydantic", marker = "python_full_version < '3.12'" }, + { name = "python-dotenv", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d0/28/64fc666fa5d86bb1b048c167975d4ea19210f9f8571b64b26563739774ac/mcpadapt-0.1.19.tar.gz", hash = "sha256:dfab84fc75cc84a49a40bd61079773b1faf840227b74b82c71a7755b9c1957c5", size = 4227721, upload-time = "2025-10-16T07:11:56.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/21/703a79103273b5dd268457ffb94dc8b7d6efcc7fe54413e9723cf2caa8c9/mcpadapt-0.1.19-py3-none-any.whl", hash = "sha256:052e91dea8b6f530770d6fd45a1640a8c34816d18d060918dc752c5221083525", size = 19454, upload-time = "2025-10-16T07:11:55.487Z" }, +] + +[[package]] +name = "mcpadapt" +version = "0.1.20" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.14' and sys_platform == 'win32'", + "python_full_version >= '3.14' and sys_platform == 'emscripten'", + "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version == '3.13.*'", + "python_full_version == '3.12.*'", +] +dependencies = [ + { name = "jsonref", marker = "python_full_version >= '3.12'" }, + { name = "mcp", extra = ["ws"], marker = "python_full_version >= '3.12'" }, + { name = "pydantic", marker = "python_full_version >= '3.12'" }, + { name = "python-dotenv", marker = "python_full_version >= '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e3/71/1bbbe157e55d30ab4a74fa878f6942cc0586e9820f03e03451a3d2297e9b/mcpadapt-0.1.20.tar.gz", hash = "sha256:4047c0da61e481dd0673a48936a427da9e6547c6cf0d580ff4e4761dcf058ed1", size = 4203656, upload-time = "2025-10-24T15:35:02.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/d8/5b6c8cf2070d765904fcb9066f8d7956cb9d399807d86c7fb7f7503b80bf/mcpadapt-0.1.20-py3-none-any.whl", hash = "sha256:117a661eb536dfb0b2a73e5730c2f5ad4e611263e014fb1cebaaff9e78a18f78", size = 19481, upload-time = "2025-10-24T15:35:00.159Z" }, +] + [[package]] name = "mdit-py-plugins" version = "0.6.1" From fa9d6c773dc18c512f81f08b1ab60fd52fee42d6 Mon Sep 17 00:00:00 2001 From: Arijit De Date: Fri, 19 Jun 2026 14:38:12 +0000 Subject: [PATCH 08/11] feat: add retry endpoint for jobs, update frontend to support retry functionality --- backend/app/api/v1/jobs.py | 62 ++++++++++++++++++- backend/app/cli.py | 8 +++ backend/app/main.py | 28 ++++++++- backend/app/schemas/__init__.py | 1 + .../src/components/TailoredResumeList.jsx | 30 ++++++++- frontend/src/pages/HomePage.jsx | 8 ++- 6 files changed, 132 insertions(+), 5 deletions(-) diff --git a/backend/app/api/v1/jobs.py b/backend/app/api/v1/jobs.py index 86b4c73..31b988d 100644 --- a/backend/app/api/v1/jobs.py +++ b/backend/app/api/v1/jobs.py @@ -8,7 +8,7 @@ import asyncio from fastapi import APIRouter, Depends, HTTPException, status from fastapi.responses import StreamingResponse, Response -from sqlalchemy import select +from sqlalchemy import select, update from sqlalchemy.ext.asyncio import AsyncSession from app.api.deps import get_db @@ -128,6 +128,66 @@ async def delete_job( return Response(status_code=status.HTTP_204_NO_CONTENT) +@router.post("/{job_id}/retry", response_model=JobResponse) +async def retry_job( + job_id: int, + current_user: User = Depends(get_current_user), + db: AsyncSession = Depends(get_db), +): + """Re-run a failed or stuck job: reset to pending, clear error, relaunch crew.""" + result = await db.execute( + select(Job).where(Job.id == job_id, Job.user_id == current_user.id) + ) + job = result.scalar_one_or_none() + if not job: + raise HTTPException(status_code=404, detail="Job not found.") + if job.status == "completed": + raise HTTPException(status_code=409, detail="Completed jobs cannot be retried.") + if job.status == "processing": + raise HTTPException(status_code=409, detail="Job is already running.") + + # Re-fetch GitHub profile (optional; FK is SET NULL so it may be None already). + github_profile = None + if job.github_profile_id is not None: + gh_result = await db.execute( + select(GithubProfile).where( + GithubProfile.id == job.github_profile_id, + GithubProfile.user_id == current_user.id, + ) + ) + github_profile = gh_result.scalar_one_or_none() # gone → run without GitHub + + # Resume must still exist. + resume_result = await db.execute( + select(Resume).where(Resume.id == job.resume_id, Resume.user_id == current_user.id) + ) + resume = resume_result.scalar_one_or_none() + if not resume: + raise HTTPException( + status_code=409, + detail="The resume for this job no longer exists. Cannot retry.", + ) + + await db.execute( + update(Job).where(Job.id == job_id).values(status="pending", error_message=None) + ) + await db.commit() + await db.refresh(job) + + # Pre-seed progress so a re-attaching SSE stream doesn't see the stale + # terminal 'failed' step and close instantly. + progress_store[job_id] = {"current_step": "pending", "error": None} + + asyncio.create_task( + run_crew_for_job( + job_id=job.id, user_id=current_user.id, user_email=current_user.email, + github_profile=github_profile, resume_gcs_path=resume.gcs_path, + job_url=job.linkedin_job_url, + ) + ) + return job + + @router.get("/{job_id}/progress") async def stream_job_progress( job_id: int, current_user: User = Depends(get_current_user), diff --git a/backend/app/cli.py b/backend/app/cli.py index 3786d0e..7ab8202 100644 --- a/backend/app/cli.py +++ b/backend/app/cli.py @@ -106,11 +106,15 @@ def api() -> None: """Start the FastAPI app with autoreload (development).""" import uvicorn + # uvicorn excludes whole directory trees only when given absolute paths + # (it matches them against each changed file's absolute parents). Relative + # globs like ".venv/*" do NOT work. "*.log" still matches by filename. uvicorn.run( "app.main:app", host=DEFAULT_API_HOST, port=int(DEFAULT_API_PORT), reload=True, + reload_excludes=[str(BACKEND_DIR / ".venv"), str(BACKEND_DIR / "logs"), "*.log"], ) @@ -225,6 +229,10 @@ def dev() -> None: [ sys.executable, "-m", "uvicorn", "app.main:app", "--host", DEFAULT_API_HOST, "--port", DEFAULT_API_PORT, "--reload", + # Absolute dir paths so uvicorn excludes the whole tree (see api()). + "--reload-exclude", str(BACKEND_DIR / ".venv"), + "--reload-exclude", str(BACKEND_DIR / "logs"), + "--reload-exclude", "*.log", ], BACKEND_DIR, ) diff --git a/backend/app/main.py b/backend/app/main.py index 085a75e..0801ddc 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -5,22 +5,48 @@ """ from contextlib import asynccontextmanager +from datetime import datetime, timedelta from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware +from sqlalchemy import update from app.core.config import get_settings from app.core.database import engine, Base +from app.core.logging import get_logger from app.api.v1 import auth, github, resumes, jobs settings = get_settings() +logger = get_logger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): - """Create database tables on startup and dispose the engine on shutdown.""" + """Create tables; best-effort fail jobs stuck >3h; dispose engine on shutdown.""" async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) + + # Best-effort: fail jobs left pending/processing for >3h (orphaned by a + # prior restart). Reuses THIS connection — no new session/checkout — and + # swallows all errors so it can never abort startup or kill the proxy. + try: + from app.models import Job + cutoff = datetime.utcnow() - timedelta(hours=3) + await conn.execute( + update(Job) + .where( + Job.status.in_(("pending", "processing")), + Job.created_at < cutoff, + ) + .values( + status="failed", + error_message="Job was stuck in progress for over 3 hours " + "(likely a server restart). Please retry.", + ) + ) + except Exception as exc: # noqa: BLE001 — never let cleanup break startup + logger.warning("Startup stuck-job cleanup skipped: %s", exc) + yield await engine.dispose() diff --git a/backend/app/schemas/__init__.py b/backend/app/schemas/__init__.py index ec8eece..0654a88 100644 --- a/backend/app/schemas/__init__.py +++ b/backend/app/schemas/__init__.py @@ -79,6 +79,7 @@ class TailorJobRequest(BaseModel): class JobResponse(BaseModel): id: int + github_profile_id: Optional[int] = None linkedin_job_url: str job_name: Optional[str] = None company_name: Optional[str] = None diff --git a/frontend/src/components/TailoredResumeList.jsx b/frontend/src/components/TailoredResumeList.jsx index 2aee95d..6252958 100644 --- a/frontend/src/components/TailoredResumeList.jsx +++ b/frontend/src/components/TailoredResumeList.jsx @@ -1,11 +1,25 @@ import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import { FiEye, FiDownload, FiBookOpen, FiTrash2 } from 'react-icons/fi'; +import { FiEye, FiDownload, FiBookOpen, FiTrash2, FiRefreshCw } from 'react-icons/fi'; import api from '../services/api'; -export default function TailoredResumeList({ jobs, onPreviewResume, onRefresh }) { +export default function TailoredResumeList({ jobs, onPreviewResume, onRefresh, onRetry }) { const navigate = useNavigate(); const [deletingId, setDeletingId] = useState(null); + const [retryingId, setRetryingId] = useState(null); + + const handleRetry = async (job) => { + setRetryingId(job.id); + try { + const res = await api.post(`/jobs/${job.id}/retry`); + onRetry?.(res.data); + } catch (err) { + console.error('Retry failed:', err); + alert(err.response?.data?.detail || 'Failed to retry. Please try again.'); + } finally { + setRetryingId(null); + } + }; const handleDelete = async (job) => { const label = job.job_name @@ -84,6 +98,18 @@ export default function TailoredResumeList({ jobs, onPreviewResume, onRefresh }) )} + {(job.status === 'failed' || job.status === 'pending') && ( + + )} {job.status !== 'pending' && job.status !== 'processing' && (
From 985ab62f278ac0529f72a4ab09f31100be08f65a Mon Sep 17 00:00:00 2001 From: Arijit De Date: Thu, 25 Jun 2026 13:02:22 +0000 Subject: [PATCH 09/11] feat: add polling mechanism for in-flight jobs to refresh status automatically --- frontend/src/pages/HomePage.jsx | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/frontend/src/pages/HomePage.jsx b/frontend/src/pages/HomePage.jsx index 3c873d3..1d2dde6 100644 --- a/frontend/src/pages/HomePage.jsx +++ b/frontend/src/pages/HomePage.jsx @@ -33,6 +33,19 @@ export default function HomePage() { useEffect(() => { fetchData(); }, [fetchData]); + // Jobs that were in-flight before this page mounted (e.g. after a reload or + // from a previous session) have no SSE tracker attached, so the list would + // sit at PENDING/PROCESSING until a manual refresh. Poll while any job is in + // a non-terminal state; stop once everything has settled. + useEffect(() => { + const hasInFlight = jobs.some( + (job) => job.status === 'pending' || job.status === 'processing' + ); + if (!hasInFlight) return; + const id = setInterval(fetchData, 5000); + return () => clearInterval(id); + }, [jobs, fetchData]); + const handleJobCreated = (job, hasGithub = true) => { setActiveJobId(job.id); setActiveJobHasGithub(hasGithub); From 602167f67fb0a866b568b5f5bab63d2c328f74de Mon Sep 17 00:00:00 2001 From: Arijit De Date: Mon, 6 Jul 2026 06:01:19 +0000 Subject: [PATCH 10/11] Changed the file logging level to INFO --- backend/app/core/logging.py | 2 +- backend/app/services/crew/agents.py | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/backend/app/core/logging.py b/backend/app/core/logging.py index 20f849d..0995cc9 100644 --- a/backend/app/core/logging.py +++ b/backend/app/core/logging.py @@ -79,7 +79,7 @@ def _setup_root_logger() -> None: backupCount=BACKUP_COUNT, encoding="utf-8", ) - file_handler.setLevel(logging.DEBUG) + file_handler.setLevel(getattr(logging, LOG_LEVEL_ENV, logging.INFO)) file_handler.setFormatter(file_fmt) # ── Console handler ─────────────────────────────────────────────────────── diff --git a/backend/app/services/crew/agents.py b/backend/app/services/crew/agents.py index acfe032..972360b 100644 --- a/backend/app/services/crew/agents.py +++ b/backend/app/services/crew/agents.py @@ -148,10 +148,11 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = } for content, metadata in results ] -# Agent 1: GitHub Project Summarizer # NOTE: The Researcher agent has been removed. Job extraction is done # directly in Job_Applier.py via extract_linkedin_job_details() and the # structured JobDetails are passed into every task via crew input variables. + +# Agent 1: GitHub Project Summarizer github_project_summarizer = Agent( role="GitHub Project Summarizer", goal="Summarize the user's most relevant GitHub projects for a job application, highlighting tech stacks, languages, frameworks, tools, and cloud technologies used.", @@ -170,7 +171,7 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) -# Agent 3: Profiler +# Agent 2: Profiler profiler = Agent( role="Personal Profiler for Engineers", goal="Do incredible analytical research on job applicants to help them stand out in the job market", @@ -187,7 +188,7 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) ) -# Agent 4: Resume Strategist +# Agent 3: Resume Strategist resume_strategist = Agent( role="Resume Strategist for Engineers", goal="Find all the best ways to make a resume stand out in the job market.", @@ -205,7 +206,7 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) ) -# Agent 5: Interview Preparer +# Agent 4: Interview Preparer interview_preparer = Agent( role="Engineering Interview Preparer", goal="Create interview questions and talking points " From 562faa640a6da7da996ecc25ebc6fa89698d877a Mon Sep 17 00:00:00 2001 From: Arijit De Date: Sat, 11 Jul 2026 12:56:30 +0000 Subject: [PATCH 11/11] feat: add resume_analyzer CrewAI agent with structured parsing Adds a resume_analyzer agent that extracts .pdf/.docx/.md resumes into a fixed JSON schema, uploads to GCS, and records parsed_resume_path on the Resume table. Runs in parallel with the GitHub task; output feeds the profiler. Includes hallucination + URL guardrails, computed years_of_experience, category-keyed skills, PDF/DOCX upload support, and an isolation test script. --- .gitignore | 4 +- backend/app/api/v1/jobs.py | 6 + backend/app/api/v1/resumes.py | 19 +- backend/app/core/database.py | 23 + backend/app/main.py | 17 + backend/app/models/__init__.py | 6 +- backend/app/schemas/__init__.py | 1 + backend/app/services/crew/agents.py | 47 +- backend/app/services/crew/crew.py | 15 +- backend/app/services/crew/resume_tools.py | 357 ++++++++++++++ backend/app/services/crew/tasks.py | 167 ++++++- backend/app/services/crew_runner.py | 67 ++- backend/app/services/gcs_service.py | 40 +- backend/app/services/resume_parser.py | 454 ++++++++++++++++++ .../resume_analyzer_agent_creation_prompt.txt | 370 ++++++++++++++ .../skill_extractor_agent_creation_prompt.txt | 173 +++++++ backend/pyproject.toml | 1 + .../sample_data/Arijit De Resume 2026.docx | Bin 0 -> 465216 bytes backend/sample_data/Arijit De Resume 2026.md | 55 +++ backend/sample_data/Arijit De Resume 2026.pdf | Bin 0 -> 106237 bytes backend/sample_data/Arijit_De_Resume.md | 80 --- backend/sample_data/Yash_Pal_Resume.pdf | Bin 0 -> 173386 bytes .../sample_data/Yash_Raj_Singh_Oct_Resume.pdf | Bin 0 -> 181452 bytes backend/sample_data/interview_materials.md | 112 ----- backend/tests/run_resume_analyzer_test.py | 177 +++++++ backend/uv.lock | 237 ++++++--- frontend/src/components/ProgressTracker.jsx | 1 + frontend/src/components/ResumeUpload.jsx | 45 +- 28 files changed, 2174 insertions(+), 300 deletions(-) create mode 100644 backend/app/services/crew/resume_tools.py create mode 100644 backend/app/services/resume_parser.py create mode 100644 backend/docs/resume_analyzer_agent_creation_prompt.txt create mode 100644 backend/docs/skill_extractor_agent_creation_prompt.txt create mode 100644 backend/sample_data/Arijit De Resume 2026.docx create mode 100644 backend/sample_data/Arijit De Resume 2026.md create mode 100644 backend/sample_data/Arijit De Resume 2026.pdf delete mode 100644 backend/sample_data/Arijit_De_Resume.md create mode 100644 backend/sample_data/Yash_Pal_Resume.pdf create mode 100644 backend/sample_data/Yash_Raj_Singh_Oct_Resume.pdf delete mode 100644 backend/sample_data/interview_materials.md create mode 100644 backend/tests/run_resume_analyzer_test.py diff --git a/.gitignore b/.gitignore index 1701bca..109e226 100644 --- a/.gitignore +++ b/.gitignore @@ -181,4 +181,6 @@ logs/ client_secret_*.json *-service-account*.json project-*.json -backend/credentials/ \ No newline at end of file +backend/credentials/ +**:Zone.Identifier +backend/tests/output/ \ No newline at end of file diff --git a/backend/app/api/v1/jobs.py b/backend/app/api/v1/jobs.py index 31b988d..e93a724 100644 --- a/backend/app/api/v1/jobs.py +++ b/backend/app/api/v1/jobs.py @@ -67,6 +67,9 @@ async def tailor_resume( job_id=job.id, user_id=current_user.id, user_email=current_user.email, github_profile=github_profile, resume_gcs_path=resume.gcs_path, job_url=req.linkedin_job_url, + resume_id=resume.id, + user_name=f"{current_user.first_name} {current_user.last_name}", + resume_filename=resume.original_filename, ) ) return job @@ -183,6 +186,9 @@ async def retry_job( job_id=job.id, user_id=current_user.id, user_email=current_user.email, github_profile=github_profile, resume_gcs_path=resume.gcs_path, job_url=job.linkedin_job_url, + resume_id=resume.id, + user_name=f"{current_user.first_name} {current_user.last_name}", + resume_filename=resume.original_filename, ) ) return job diff --git a/backend/app/api/v1/resumes.py b/backend/app/api/v1/resumes.py index c6a0616..0f022f5 100644 --- a/backend/app/api/v1/resumes.py +++ b/backend/app/api/v1/resumes.py @@ -4,6 +4,8 @@ Endpoints for uploading, listing, previewing, and deleting resumes. """ +from pathlib import Path + from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, status from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession @@ -18,6 +20,8 @@ settings = get_settings() router = APIRouter(prefix="/api/resumes", tags=["resumes"]) +ALLOWED_RESUME_EXTENSIONS = {".md", ".pdf", ".docx"} + @router.post("/upload", response_model=ResumeResponse, status_code=status.HTTP_201_CREATED) async def upload_resume_file( @@ -25,12 +29,12 @@ async def upload_resume_file( current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): - """Upload a .md resume file to GCS.""" + """Upload a resume file (.md, .pdf or .docx) to GCS.""" # Validate file extension - if not file.filename or not file.filename.endswith(".md"): + if not file.filename or Path(file.filename).suffix.lower() not in ALLOWED_RESUME_EXTENSIONS: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, - detail="Only Markdown (.md) files are accepted.", + detail="Only Markdown (.md), PDF (.pdf) or Word (.docx) files are accepted.", ) # Read file content @@ -120,6 +124,15 @@ async def get_resume_content( if not resume: raise HTTPException(status_code=404, detail="Resume not found.") + # Binary resumes (.pdf/.docx) cannot be rendered as markdown text — + # the /preview signed-URL endpoint handles those. + if Path(resume.original_filename or "").suffix.lower() != ".md": + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="In-browser text preview is only available for Markdown resumes. " + "Use the preview endpoint for PDF/DOCX files.", + ) + try: content_bytes = download_file(resume.gcs_path) return {"content": content_bytes.decode("utf-8"), "filename": resume.original_filename} diff --git a/backend/app/core/database.py b/backend/app/core/database.py index a80cade..6b4d1f7 100644 --- a/backend/app/core/database.py +++ b/backend/app/core/database.py @@ -5,6 +5,8 @@ Uses asyncmy driver for Cloud SQL MySQL connectivity. """ +from sqlalchemy import create_engine +from sqlalchemy.engine import Engine from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession from sqlalchemy.orm import DeclarativeBase @@ -42,6 +44,27 @@ def _patched_ping(self, reconnect: bool = False) -> None: ) +# ── Sync engine (lazy) ──────────────────────────────────────────────────────── +# The async engine's pooled connections are bound to the main event loop, so +# synchronous code running in worker threads (e.g. CrewAI tools inside the +# crew_runner's ThreadPoolExecutor) must not use it. They get a small pymysql +# engine instead, created on first use. +_sync_engine: Engine | None = None + + +def get_sync_engine() -> Engine: + """Return the lazily-created synchronous engine (pymysql driver).""" + global _sync_engine + if _sync_engine is None: + _sync_engine = create_engine( + settings.mysql_url_sync, + pool_pre_ping=True, + pool_size=2, + max_overflow=2, + ) + return _sync_engine + + # ── Declarative Base ────────────────────────────────────────────────────────── class Base(DeclarativeBase): pass diff --git a/backend/app/main.py b/backend/app/main.py index 0801ddc..8094bf7 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -26,6 +26,23 @@ async def lifespan(app: FastAPI): async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) + # Lightweight migration: create_all only creates missing tables, it + # never alters existing ones. Add resumes.parsed_resume_path (written + # by the resume_analyzer agent) if the column is missing. Idempotent + # and best-effort, same policy as the cleanup below. + try: + def _add_parsed_resume_column(sync_conn): + from sqlalchemy import inspect, text + columns = {c["name"] for c in inspect(sync_conn).get_columns("resumes")} + if "parsed_resume_path" not in columns: + sync_conn.execute(text( + "ALTER TABLE resumes ADD COLUMN parsed_resume_path VARCHAR(500) NULL" + )) + logger.info("Added resumes.parsed_resume_path column") + await conn.run_sync(_add_parsed_resume_column) + except Exception as exc: # noqa: BLE001 — never let migration break startup + logger.warning("Startup parsed_resume_path migration skipped: %s", exc) + # Best-effort: fail jobs left pending/processing for >3h (orphaned by a # prior restart). Reuses THIS connection — no new session/checkout — and # swallows all errors so it can never abort startup or kill the proxy. diff --git a/backend/app/models/__init__.py b/backend/app/models/__init__.py index 31ec2cb..81a1498 100644 --- a/backend/app/models/__init__.py +++ b/backend/app/models/__init__.py @@ -64,7 +64,11 @@ class Resume(Base): id = Column(Integer, primary_key=True, autoincrement=True) user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) original_filename = Column(String(255), nullable=False) - gcs_path = Column(String(500), nullable=False) # gs://bucket/uploads//.md + gcs_path = Column(String(500), nullable=False) # gs://bucket/uploads// + # gs://bucket/parsed//___parsed_resume.json + # Set by the resume_analyzer agent only after the JSON is written and + # uploaded to GCS successfully. + parsed_resume_path = Column(String(500), nullable=True) uploaded_at = Column(DateTime, default=datetime.utcnow) # Relationships diff --git a/backend/app/schemas/__init__.py b/backend/app/schemas/__init__.py index 0654a88..5066889 100644 --- a/backend/app/schemas/__init__.py +++ b/backend/app/schemas/__init__.py @@ -64,6 +64,7 @@ class ResumeResponse(BaseModel): id: int original_filename: str gcs_path: str + parsed_resume_path: Optional[str] = None uploaded_at: datetime model_config = {"from_attributes": True} diff --git a/backend/app/services/crew/agents.py b/backend/app/services/crew/agents.py index 972360b..75b3e72 100644 --- a/backend/app/services/crew/agents.py +++ b/backend/app/services/crew/agents.py @@ -19,7 +19,7 @@ load_dotenv() logger = get_logger(__name__) -# LLM configuration — Claude Sonnet 4 +# LLM configuration — Gemini gemini_llm = LLM( model="gemini/gemini-2.5-flash", api_key=os.environ.get("GEMINI_API_KEY"), @@ -27,6 +27,15 @@ max_tokens=8000 ) +# Low-temperature variant for structured extraction (resume_analyzer): the +# parsed-resume JSON must be reproduced verbatim and can exceed 8k tokens. +gemini_llm_extraction = LLM( + model="gemini/gemini-2.5-flash", + api_key=os.environ.get("GEMINI_API_KEY"), + temperature=0.1, + max_tokens=16000 +) + search_tool = SerperDevTool() scrape_tool = ScrapeWebsiteTool() read_resume = FileReadTool() @@ -171,7 +180,37 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) -# Agent 2: Profiler +# Agent 2: Resume Analyzer +# No agent-level tools: the per-run save_parsed_resume tool (closured over +# user/resume IDs) is attached at the Task level by build_tasks(), which keeps +# this module-level singleton thread-safe across concurrent crew runs. +resume_analyzer = Agent( + role="Resume Analyzer", + goal=( + "Carefully scan a resume and extract every piece of relevant applicant " + "information into a strictly valid JSON document matching the required schema." + ), + llm=gemini_llm_extraction, + verbose=True, + max_iter=8, + max_rpm=10, + respect_context_window=True, + backstory=( + "You are a meticulous structured-data extraction specialist for resumes. " + "You read every line of a resume and map each fact to the correct field of " + "a fixed JSON schema. You never invent, guess, or embellish information: " + "every value you output must be traceable to explicit text in the resume, " + "and anything the resume does not state is left as an empty string, null, an " + "empty list, or false, exactly as the schema prescribes. When the resume " + "groups skills under category headings you preserve those headings verbatim; " + "when it does not, you place the skills under a single \"Default\" category. " + "You always produce strictly valid JSON — no comments, no trailing commas, " + "no markdown fences — and you always persist your work with the " + "save_parsed_resume tool before finishing." + ) +) + +# Agent 3: Profiler profiler = Agent( role="Personal Profiler for Engineers", goal="Do incredible analytical research on job applicants to help them stand out in the job market", @@ -188,7 +227,7 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) ) -# Agent 3: Resume Strategist +# Agent 4: Resume Strategist resume_strategist = Agent( role="Resume Strategist for Engineers", goal="Find all the best ways to make a resume stand out in the job market.", @@ -206,7 +245,7 @@ def repo_content_searcher(query: str, job_description: str = None, top_k: int = ) ) -# Agent 4: Interview Preparer +# Agent 5: Interview Preparer interview_preparer = Agent( role="Engineering Interview Preparer", goal="Create interview questions and talking points " diff --git a/backend/app/services/crew/crew.py b/backend/app/services/crew/crew.py index b0624c4..3f9764a 100644 --- a/backend/app/services/crew/crew.py +++ b/backend/app/services/crew/crew.py @@ -18,10 +18,12 @@ from app.core.logging import get_logger from app.services.crew.agents import ( github_project_summarizer, + resume_analyzer, profiler, resume_strategist, interview_preparer, ) +from app.services.crew.resume_tools import ResumeAnalysisContext from app.services.crew.tasks import build_tasks logger = get_logger(__name__) @@ -32,6 +34,7 @@ def build_crew( verbose: bool = True, tracing: bool = True, include_github: bool = True, + resume_ctx: ResumeAnalysisContext | None = None, ) -> Crew: """ Construct the job-application :class:`crewai.Crew`. @@ -39,6 +42,11 @@ def build_crew( Job details are extracted once by the caller and injected into every task via the ``job_details_json`` crew input variable, so no researcher agent is needed. + The resume analysis task and the GitHub summary task run in parallel + (``async_execution=True``); the profile task waits for both via its + ``context``. If resume analysis fails, ``kickoff()`` raises before any + downstream task runs. + Args: output_log_file: Path for CrewAI's verbose execution log. verbose: Enable verbose agent/task logging. @@ -46,15 +54,18 @@ def build_crew( include_github: When True, include the GitHub summarizer agent/task and require the ``github_url`` / ``bq_dataset_name`` crew inputs. When False, skip GitHub entirely and tailor from the resume + job details. + resume_ctx: Identity/state context for the resume analysis task's save + tool. When None (standalone CLI), the parsed resume JSON is written + to temp storage only — no GCS upload, no database write. Returns: A configured :class:`crewai.Crew` ready for ``kickoff(inputs=...)``. The task list order is stable: the interview task is always last and the resume task always second-to-last (``crew.tasks[-1]`` / ``[-2]``). """ - tasks = build_tasks(include_github=include_github) + tasks = build_tasks(include_github=include_github, resume_ctx=resume_ctx) - agents = [profiler, resume_strategist, interview_preparer] + agents = [resume_analyzer, profiler, resume_strategist, interview_preparer] if include_github: agents.insert(0, github_project_summarizer) diff --git a/backend/app/services/crew/resume_tools.py b/backend/app/services/crew/resume_tools.py new file mode 100644 index 0000000..d6cefcc --- /dev/null +++ b/backend/app/services/crew/resume_tools.py @@ -0,0 +1,357 @@ +""" +app.services.crew.resume_tools +------------------------------ +Per-run tool and guardrail factories for the resume_analyzer agent. + +The save tool is built fresh for every crew run (like the Task objects in +``app.services.crew.tasks``) so that user_id / resume_id / user_name are +closured into the tool rather than supplied by the LLM, and so a shared +``ResumeAnalysisContext.state`` dict can carry the outcome to the task +guardrail. The tool enforces the required ordering in code: + + validate JSON → write temp file → upload to GCS → update database + +The database is only touched after the file write and the GCS upload have +both succeeded. With ``local_only=True`` (isolation test script, CLI) the +tool stops after the temp-file write — no GCS, no database. + +CrewAI converts tool exceptions into error messages fed back to the LLM, so +this tool never relies on raising: every failure returns an "ERROR: ..." +string the agent can react to, and the task guardrail aborts the crew if no +successful save happened after the retry budget. +""" + +import json +import os +import tempfile +from dataclasses import dataclass, field +from typing import Any, Callable, Dict + +from crewai import TaskOutput +from crewai.tools import tool +from pydantic import ValidationError + +from app.core.logging import get_logger +from app.services.resume_parser import ( + ParsedResume, + build_parsed_resume_filename, + compute_years_of_experience, + find_invalid_url_fields, +) + +logger = get_logger(__name__) + + +@dataclass +class ResumeAnalysisContext: + """Per-run identity and shared state for the resume-analysis task.""" + + user_id: int + resume_id: int + user_name: str + local_only: bool = False + # The extracted resume text, used as the reference context for the + # hallucination guardrail so the agent cannot invent skills/positions/etc. + resume_text: str = "" + state: Dict[str, Any] = field(default_factory=dict) + + +def _strip_code_fences(text: str) -> str: + """Remove a surrounding ```json ... ``` / ``` ... ``` fence if present.""" + stripped = text.strip() + if stripped.startswith("```"): + first_newline = stripped.find("\n") + if first_newline != -1: + stripped = stripped[first_newline + 1:] + if stripped.rstrip().endswith("```"): + stripped = stripped.rstrip()[:-3] + return stripped.strip() + + +def make_save_parsed_resume_tool(ctx: ResumeAnalysisContext): + """Build the save_parsed_resume tool bound to one run's ``ctx``.""" + + @tool("save_parsed_resume") + def save_parsed_resume(parsed_resume_json: str) -> str: + """ + Persist the parsed resume JSON. Validates the JSON against the required + schema, writes it to a local file, uploads it to cloud storage, and + records the storage path in the database. Call this exactly once with + the COMPLETE parsed resume JSON string (the full {"id": ..., "result": + {...}} document). If the response starts with "ERROR:", fix the + reported problem and call the tool again with the corrected JSON. + + Args: + parsed_resume_json (str): The complete parsed resume JSON string. + + Returns: + str: "SUCCESS: ..." when everything was persisted, otherwise + "ERROR: ". + """ + raw = _strip_code_fences(parsed_resume_json) + + # 1. Validate against the required schema. + try: + parsed = ParsedResume.model_validate_json(raw) + except ValidationError as e: + logger.warning( + "resume_tools: invalid parsed-resume JSON for resume %d: %s", + ctx.resume_id, e, + ) + return ( + "ERROR: The JSON is invalid or does not match the required schema: " + f"{e}. Fix the JSON and call save_parsed_resume again with the " + "complete corrected document." + ) + + # 2. The id is not the LLM's to choose. + parsed.id = ctx.resume_id + + # 2a. Reject invalid URL fields so the agent re-extracts (or blanks them). + invalid_urls = find_invalid_url_fields(parsed.result) + if invalid_urls: + logger.warning( + "resume_tools: invalid URL field(s) %s for resume %d", + invalid_urls, ctx.resume_id, + ) + details = ", ".join( + f"{field}={getattr(parsed.result, field)!r}" for field in invalid_urls + ) + return ( + f"ERROR: These URL fields are not valid URLs: {details}. Every " + "*_url field must be a complete http(s) URL (e.g. " + "'https://www.linkedin.com/in/username') or an empty string \"\". " + "If the resume only shows the link's label/anchor text (like " + "'LinkedIn', 'Portfolio', 'Kaggle', or a name) and not the actual " + "URL, set that field to \"\". Fix these and call save_parsed_resume " + "again." + ) + + # 2b. Compute years_of_experience from position dates when the agent did + # not extract a value from the summary/objective (left it at 0). + if not parsed.result.years_of_experience: + computed = compute_years_of_experience(parsed.result) + if computed: + logger.info( + "resume_tools: computed years_of_experience=%d from positions " + "for resume %d", computed, ctx.resume_id, + ) + parsed.result.years_of_experience = computed + + normalized = parsed.model_dump_json(indent=2) + + # 3. Write to local temp storage. + filename = build_parsed_resume_filename(ctx.user_name, ctx.user_id, ctx.resume_id) + local_path = os.path.join(tempfile.gettempdir(), filename) + try: + with open(local_path, "w", encoding="utf-8") as f: + f.write(normalized) + except OSError as e: + logger.error( + "resume_tools: failed to write parsed resume to '%s': %s", + local_path, e, exc_info=True, + ) + return f"ERROR: Could not write the parsed resume file locally: {e}." + logger.info( + "resume_tools: parsed resume written to '%s' (%d bytes)", + local_path, len(normalized.encode("utf-8")), + ) + + if ctx.local_only: + ctx.state.update({"saved": True, "local_path": local_path, "json": normalized}) + logger.info( + "resume_tools: local_only run — skipping GCS upload and DB update " + "for resume %d", ctx.resume_id, + ) + return f"SUCCESS: Parsed resume saved locally to {local_path}." + + # 4. Upload to GCS. The database is not touched unless this succeeds. + try: + from app.services.gcs_service import upload_parsed_resume + + gcs_path = upload_parsed_resume(ctx.user_id, filename, normalized) + except Exception as e: # noqa: BLE001 — surface any GCS failure to the agent + logger.error( + "resume_tools: GCS upload of parsed resume for resume %d failed: %s", + ctx.resume_id, e, exc_info=True, + ) + return ( + "ERROR: The parsed resume file was created but the upload to cloud " + f"storage failed: {e}. Call save_parsed_resume again to retry." + ) + logger.info("resume_tools: parsed resume uploaded to %s", gcs_path) + + # 5. Record the GCS path on the Resume row (only after upload success). + try: + from sqlalchemy import update + from sqlalchemy.orm import Session + + from app.core.database import get_sync_engine + from app.models import Resume + + with Session(get_sync_engine()) as session: + session.execute( + update(Resume) + .where(Resume.id == ctx.resume_id) + .values(parsed_resume_path=gcs_path) + ) + session.commit() + except Exception as e: # noqa: BLE001 — surface any DB failure to the agent + logger.error( + "resume_tools: DB update of parsed_resume_path for resume %d failed: %s", + ctx.resume_id, e, exc_info=True, + ) + return ( + "ERROR: The parsed resume was uploaded but recording it in the " + f"database failed: {e}. Call save_parsed_resume again to retry." + ) + logger.info( + "resume_tools: resumes.parsed_resume_path set to '%s' for resume %d", + gcs_path, ctx.resume_id, + ) + + ctx.state.update({ + "saved": True, + "local_path": local_path, + "gcs_path": gcs_path, + "json": normalized, + }) + return ( + f"SUCCESS: Parsed resume saved to {gcs_path} and recorded in the database." + ) + + return save_parsed_resume + + +# Faithfulness score (0-10) the parsed JSON must meet against the resume text. +_HALLUCINATION_THRESHOLD = 7 + + +def _make_hallucination_guardrail(ctx: ResumeAnalysisContext): + """ + Build a CrewAI HallucinationGuardrail bound to this run's resume text, or + ``None`` when no reference text / LLM is available (e.g. the CLI path). + + The guardrail scores the parsed JSON's faithfulness against the extracted + resume text so the agent cannot invent skills, positions, or other facts. + + NOTE: in the open-source crewai package this guardrail is a pass-through + (it logs a notice and returns the output unchanged) — real faithfulness + scoring runs only on the CrewAI enterprise platform (app.crewai.com). The + wiring here is intentionally forward-compatible: it activates automatically + when running against enterprise, and never rejects a correctly-saved resume + on open source. + """ + if not ctx.resume_text: + return None + try: + from crewai.tasks.hallucination_guardrail import HallucinationGuardrail + + from app.services.crew.agents import gemini_llm_extraction + + return HallucinationGuardrail( + context=ctx.resume_text, + llm=gemini_llm_extraction, + threshold=_HALLUCINATION_THRESHOLD, + ) + except Exception as e: # noqa: BLE001 — never let guardrail setup break the run + logger.warning( + "resume_tools: could not build hallucination guardrail for resume %d: %s", + ctx.resume_id, e, + ) + return None + + +def make_parsed_resume_guardrail( + ctx: ResumeAnalysisContext, +) -> Callable[[TaskOutput], tuple[bool, Any]]: + """ + Build the resume-analysis task guardrail bound to one run's ``ctx``. + + A task's ``guardrail`` accepts a single value, so this composes three checks: + + 1. The save-tool invariant — the task passes only when save_parsed_resume + reported success. This replaces the task output with the normalized + JSON so downstream tasks (profiler) receive the exact persisted + document, and — on failure — is what aborts the crew after the retry + budget is exhausted (CrewAI raises, ``kickoff()`` propagates it). + 2. A URL-format check — every *_url field on the saved JSON must be a + valid http(s) URL or empty. (The save tool blocks invalid URLs before + it marks the run saved, so this is a secondary net.) + 3. A CrewAI HallucinationGuardrail — once the save is confirmed, the + normalized JSON is scored for faithfulness against the extracted + resume text so the agent cannot invent skills, positions, or other + facts. A failed check returns feedback for a retry; a guardrail + *error* (e.g. LLM unavailable) fails open so a transient outage does + not block a correctly-saved resume. + """ + hallucination_guardrail = _make_hallucination_guardrail(ctx) + + def parsed_resume_guardrail(task_output: TaskOutput) -> tuple[bool, Any]: + # 1. Save-tool invariant (load-bearing — aborts the crew on failure). + if not (ctx.state.get("saved") and ctx.state.get("json")): + logger.warning( + "resume_tools: guardrail rejected resume-analysis output for resume " + "%d — no successful save recorded", ctx.resume_id, + ) + return ( + False, + "The parsed resume was NOT saved. You MUST call the save_parsed_resume " + "tool with the complete parsed resume JSON and get a SUCCESS response " + "before producing your final answer. Fix any ERROR the tool reports " + "and try again.", + ) + + normalized = ctx.state["json"] + + # 2. URL-format check on the saved JSON (secondary net; the save tool + # already blocks invalid URLs). + try: + saved = ParsedResume.model_validate_json(normalized) + invalid_urls = find_invalid_url_fields(saved.result) + except ValidationError: + invalid_urls = [] + if invalid_urls: + logger.warning( + "resume_tools: guardrail found invalid URL field(s) %s for resume %d", + invalid_urls, ctx.resume_id, + ) + return ( + False, + f"These URL fields are not valid URLs: {', '.join(invalid_urls)}. " + "Every *_url field must be a complete http(s) URL or an empty " + "string \"\". If only the link's label/anchor text is visible (not " + "the actual URL), set that field to \"\". Fix these and call " + "save_parsed_resume again.", + ) + + # 3. Hallucination check against the resume text. + if hallucination_guardrail is not None: + try: + validated_output = TaskOutput( + description=task_output.description, + raw=normalized, + agent=task_output.agent, + ) + is_faithful, feedback = hallucination_guardrail(validated_output) + except Exception as e: # noqa: BLE001 — fail open on guardrail errors + logger.warning( + "resume_tools: hallucination guardrail errored for resume %d " + "(passing the saved output through): %s", ctx.resume_id, e, + ) + return True, normalized + if not is_faithful: + logger.warning( + "resume_tools: hallucination guardrail flagged resume %d: %s", + ctx.resume_id, feedback, + ) + return ( + False, + "The extracted data was not fully grounded in the resume. " + f"{feedback} Re-extract using ONLY facts present in the resume, " + "then call save_parsed_resume again with the corrected JSON.", + ) + + return True, normalized + + return parsed_resume_guardrail diff --git a/backend/app/services/crew/tasks.py b/backend/app/services/crew/tasks.py index 45fb352..f85b19c 100644 --- a/backend/app/services/crew/tasks.py +++ b/backend/app/services/crew/tasks.py @@ -1,6 +1,7 @@ from crewai import Task from app.services.crew.agents import ( github_project_summarizer, + resume_analyzer, profiler, resume_strategist, interview_preparer, @@ -9,6 +10,12 @@ read_resume, semantic_search_resume, ) +from app.services.crew.resume_tools import ( + ResumeAnalysisContext, + make_save_parsed_resume_tool, + make_parsed_resume_guardrail, +) +from app.services.resume_parser import PARSED_RESUME_SCHEMA # --------------------------------------------------------------------------- # NOTE: The researcher agent and research_task have been removed. @@ -26,20 +33,30 @@ # Building fresh Task objects per call (rather than reusing module-level # singletons) also makes per-request output_file overrides thread-safe under # the crew_runner's ThreadPoolExecutor. +# +# Parallelism: the GitHub summary task and the resume analysis task both run +# with async_execution=True. The (sync) profile task lists them in its +# ``context``, so CrewAI drains their futures — waiting for both and +# re-raising any failure — before profiling starts. A resume-analysis failure +# (guardrail retries exhausted) therefore aborts kickoff() before any +# downstream task runs. CrewAI validators require that the crew not END with +# more than one async task and that async tasks not reference each other in +# ``context``; the ordering below satisfies both. # --------------------------------------------------------------------------- # Description fragments toggled by include_github ------------------------------- # Profiler — step list ending differs depending on whether GitHub data exists. _PROFILE_GITHUB_STEPS = ( - " 3. Use the GitHub projects summary from the previous task as additional context.\n" - " 4. Synthesise all three sources into a comprehensive applicant profile." + " 4. Use the GitHub projects summary from the GitHub summary task as additional context.\n" + " 5. Synthesise all three sources into a comprehensive applicant profile." ) _PROFILE_NO_GITHUB_STEPS = ( - " 3. Synthesise the resume and job details into a comprehensive applicant profile.\n\n" + " 4. Synthesise the parsed resume and job details into a comprehensive applicant profile.\n\n" "IMPORTANT GROUNDING RULES:\n" " - No GitHub profile was provided for this applicant.\n" - " - Use ONLY information that appears in the resume and the job details above.\n" + " - Use ONLY information that appears in the parsed resume JSON, the raw resume, " + "and the job details above.\n" " - Do NOT invent, assume, or fabricate any projects, repositories, GitHub " "activity, employers, dates, metrics, or skills that are not present in the resume." ) @@ -57,8 +74,95 @@ ) +def _resume_analysis_task(ctx: ResumeAnalysisContext, *, run_async: bool = True) -> Task: + """ + Resume analysis task — extract the resume into the parsed-resume JSON and + persist it via the per-run save_parsed_resume tool. + + Runs with ``async_execution=True`` in the full crew so it executes in + parallel with the GitHub summary task; the isolation test script passes + ``run_async=False`` to run it standalone. + """ + schema = PARSED_RESUME_SCHEMA.replace("", str(ctx.resume_id)) + return Task( + # NOTE: this description embeds a JSON template. CrewAI interpolates + # bare {identifier} tokens in descriptions — the template's braces are + # all followed by quoted keys/whitespace so they are safe, but never + # add a bare {word} token here unless it is a real crew input. + description=( + "Carefully scan and analyze the applicant's resume and extract every " + "piece of relevant information into a structured JSON document.\n\n" + "Step 1 — Read the resume:\n" + " Read the full resume text from: {resume_path}\n\n" + "Step 2 — Extract the information into EXACTLY this JSON structure. " + "Keep every key. When the resume does not state a value, keep the " + "empty default shown (\"\", null, [], false or 0). Do not add keys.\n\n" + + schema + + "\n\nExtraction rules:\n" + f" - \"id\" MUST be {ctx.resume_id}.\n" + " - Dates use the YYYY-MM-DD format. When the resume gives only a month " + "or year, use the first day of that month/year. A position's end_date is " + "null when it is the applicant's current job.\n" + " - Do NOT invent, guess, or embellish anything that is not in the resume.\n" + " - Every *_url field (linkedin_url, github_url, twitter_url, " + "website_url, kaggle_url) MUST be a complete, valid URL — it must start " + "with 'http://' or 'https://' and contain a domain (e.g. " + "'https://www.linkedin.com/in/username'). Resumes often show only the " + "clickable link text (e.g. 'LinkedIn', 'Portfolio', 'Kaggle', or a " + "person's name) while the real URL is hidden in the hyperlink. If you " + "can only see such link text and NOT the actual URL, leave that field " + "as an empty string \"\". NEVER put link labels, names, or partial " + "fragments in a URL field.\n" + " - For years_of_experience: if the summary/objective explicitly states " + "a number of years of professional experience (e.g. 'over 2 years of " + "experience'), use that number (rounded down to a whole number). " + "Otherwise leave years_of_experience as 0 — it will be computed from the " + "position dates automatically; do NOT estimate it yourself.\n" + " - Derive has_remote_work_experience, remote_work_type, " + "has_management_experience and management_level from the positions and " + "their descriptions.\n" + " - Write a concise 2-4 sentence brief_summary of the applicant.\n" + " - \"skills\" is a dictionary. If the resume groups its skills under " + "category headings (e.g. \"Languages\", \"Frameworks / Libraries\", " + "\"Cloud & Ops\"), use each heading VERBATIM as a key and list that " + "category's skills as an array of strings. Split parenthetical or " + "comma-separated groupings into individual skill strings (e.g. " + "\"Multi Agent Orchestration (Crew AI, Google ADK)\" -> \"Crew AI\", " + "\"Google ADK\"). If the resume lists skills with NO category headings, " + "put them all under a single \"Default\" key. Only include skills that " + "actually appear in the resume.\n" + " Examples:\n" + " Resume text: 'Languages: Python, C++, SQL\\nCloud & Ops: GCP, AWS, " + "Docker' -> \"skills\": {\"Languages\": [\"Python\", \"C++\", \"SQL\"], " + "\"Cloud & Ops\": [\"GCP\", \"AWS\", \"Docker\"]}\n" + " Resume text: 'Programming: Python, C, C++\\nTools & Technologies: " + "PyTorch, Git' -> \"skills\": {\"Programming\": [\"Python\", \"C\", " + "\"C++\"], \"Tools & Technologies\": [\"PyTorch\", \"Git\"]}\n" + " Resume text: 'Python, HTML, CSS, JavaScript, React, AWS' -> " + "\"skills\": {\"Default\": [\"Python\", \"HTML\", \"CSS\", " + "\"JavaScript\", \"React\", \"AWS\"]}\n" + " - The JSON must be strictly valid: no comments, no trailing commas, " + "no markdown fences.\n\n" + "Step 3 — MANDATORY FINAL STEP:\n" + " Call the save_parsed_resume tool with the COMPLETE JSON string. If it " + "returns an ERROR, fix the reported problem and call it again with the " + "corrected JSON. Only after it returns SUCCESS, output that same JSON as " + "your final answer." + ), + expected_output=( + "The complete parsed-resume JSON document, exactly as successfully " + "persisted via the save_parsed_resume tool." + ), + tools=[read_resume, make_save_parsed_resume_tool(ctx)], + agent=resume_analyzer, + async_execution=run_async, + guardrail=make_parsed_resume_guardrail(ctx), + guardrail_max_retries=3, + ) + + def _github_summary_task() -> Task: - """Task 1 — index GitHub repos and summarise the most relevant projects.""" + """GitHub task — index GitHub repos and summarise the most relevant projects.""" return Task( description=( "You have been given structured job details in JSON format:\n\n" @@ -85,12 +189,16 @@ def _github_summary_task() -> Task: ), tools=[extract_github_repos_tool, repo_content_searcher], agent=github_project_summarizer, - async_execution=False, + # Runs in parallel with the resume analysis task; the profile task's + # context drains both before profiling starts. + async_execution=True, ) -def _profile_task(include_github: bool, github_task: Task | None) -> Task: - """Task 2 — build a comprehensive applicant profile.""" +def _profile_task( + include_github: bool, github_task: Task | None, resume_analysis_task: Task +) -> Task: + """Profile task — build a comprehensive applicant profile.""" steps = _PROFILE_GITHUB_STEPS if include_github else _PROFILE_NO_GITHUB_STEPS grounded_in = "the resume, GitHub work, and" if include_github else "the resume and" return Task( @@ -98,12 +206,21 @@ def _profile_task(include_github: bool, github_task: Task | None) -> Task: "Compile a detailed personal and professional profile for the applicant.\n\n" "Job details (for context):\n{job_details_json}\n\n" "Steps:\n" - " 1. Read and semantically understand the resume from: {resume_path}\n" + " 1. Use the structured parsed-resume JSON from the resume analysis task " + "(provided in your context) as the PRIMARY source of the applicant's " + "details: contact info, positions, skills, education, projects, " + "publications, certifications, and experience summary.\n" " 2. Use the job_description and requirements from the job details above " "to understand what the employer is looking for.\n" + " 3. Only if a detail is missing or unclear in the parsed JSON, consult " + "the raw resume at: {resume_path}\n" + steps ), - context=[github_task] if include_github else [], + context=( + [github_task, resume_analysis_task] + if include_github + else [resume_analysis_task] + ), expected_output=( "A comprehensive profile document that includes the applicant's skills, " "project experiences, contributions, interests, and communication style, " @@ -116,7 +233,7 @@ def _profile_task(include_github: bool, github_task: Task | None) -> Task: def _resume_strategy_task(include_github: bool, profile_task: Task) -> Task: - """Task 3 — tailor the resume to the job.""" + """Resume strategy task — tailor the resume to the job.""" clause = _RESUME_GITHUB_CLAUSE if include_github else _RESUME_NO_GITHUB_CLAUSE return Task( description=( @@ -142,7 +259,7 @@ def _resume_strategy_task(include_github: bool, profile_task: Task) -> Task: def _interview_preparation_task(profile_task: Task, resume_task: Task) -> Task: - """Task 4 — generate interview questions and talking points.""" + """Interview task — generate interview questions and talking points.""" return Task( description=( "Create targeted interview questions and talking points for the applicant.\n\n" @@ -165,24 +282,44 @@ def _interview_preparation_task(profile_task: Task, resume_task: Task) -> Task: ) -def build_tasks(include_github: bool = True) -> list[Task]: +def build_tasks( + include_github: bool = True, + resume_ctx: ResumeAnalysisContext | None = None, +) -> list[Task]: """ Construct a fresh, correctly-wired task list for one crew run. + Task order: [github?, resume_analysis, profile, resume, interview]. The + GitHub summary and resume analysis tasks run with ``async_execution=True`` + (in parallel); the profile task lists them in its ``context`` and starts + only after both succeed. If the resume analysis fails (guardrail retries + exhausted), ``kickoff()`` raises before the profile task runs. + When ``include_github`` is False the GitHub summarizer task is omitted and the profile/resume tasks are given grounding rules so the agents do not fabricate GitHub-derived content. + ``resume_ctx`` carries the user/resume identity for the resume analysis + task's save tool. When None (standalone CLI), a local-only context is used: + the parsed JSON is written to temp storage but never uploaded to GCS or + recorded in the database. + Return order is stable across both modes: the interview task is always the last element and the resume task always the second-to-last, so the runner can stamp per-request ``output_file`` paths via ``crew.tasks[-1]/[-2]``. """ + if resume_ctx is None: + resume_ctx = ResumeAnalysisContext( + user_id=0, resume_id=0, user_name="cli_user", local_only=True + ) + github_task = _github_summary_task() if include_github else None - profile = _profile_task(include_github, github_task) + analysis = _resume_analysis_task(resume_ctx) + profile = _profile_task(include_github, github_task, analysis) resume = _resume_strategy_task(include_github, profile) interview = _interview_preparation_task(profile, resume) - tasks = [profile, resume, interview] + tasks = [analysis, profile, resume, interview] if include_github: tasks.insert(0, github_task) return tasks diff --git a/backend/app/services/crew_runner.py b/backend/app/services/crew_runner.py index 335029c..7e1427b 100644 --- a/backend/app/services/crew_runner.py +++ b/backend/app/services/crew_runner.py @@ -45,12 +45,17 @@ def _update_progress(job_id: int, step: str, error: str = None): def _run_crew_sync( job_id: int, user_id: int, user_email: str, github_username: str = None, github_url: str = None, bq_dataset_name: str = None, - resume_content: str = None, job_url: str = None, + resume_bytes: bytes = None, resume_filename: str = None, job_url: str = None, + resume_id: int = None, user_name: str = None, ): """ Synchronous crew execution — runs in a thread. This imports and uses the existing crew pipeline. + The raw resume file bytes (.pdf/.docx/.md) are parsed to text BEFORE the + crew is built; a ResumeParsingError aborts the run so the crew never + starts and the job is marked failed (the UI offers a retry). + When no GitHub URL is supplied the crew is built without the GitHub summarizer agent/task and tailors the resume from the resume + job details alone. @@ -72,20 +77,42 @@ def _run_crew_sync( logger.error("crew_runner: Failed to extract job details for job %d: %s", job_id, e) raise RuntimeError(f"Failed to extract job details: {e}") + # Step 2: Parse the resume document (.pdf/.docx/.md) into text. + # Failure here must stop everything — no crew, no LLM tokens. + _update_progress(job_id, "parsing_resume") + from app.services.resume_parser import ResumeParsingError, extract_resume_text + + suffix = Path(resume_filename).suffix.lower() if resume_filename else ".md" + with tempfile.NamedTemporaryFile(mode="wb", suffix=suffix, delete=False, prefix="resume_raw_") as f: + f.write(resume_bytes) + raw_resume_path = f.name + + try: + resume_text = extract_resume_text(raw_resume_path) + except ResumeParsingError as e: + logger.error( + "crew_runner: Resume parsing failed for job %d (resume %s, file '%s'): %s", + job_id, resume_id, resume_filename, e, exc_info=True, + ) + if os.path.exists(raw_resume_path): + os.unlink(raw_resume_path) + raise RuntimeError(f"Resume parsing failed: {e}") - # Step 2: Write resume to temp file for crew to read + # Step 3: Write extracted text to a temp .md for the crew to read + # (FileReadTool / MDXSearchTool operate on this file). # The "searching_projects" step only applies when GitHub repos are indexed; # without GitHub we advance straight to building the profile. _update_progress(job_id, "searching_projects" if include_github else "building_profile") with tempfile.NamedTemporaryFile(mode="w", suffix=".md", delete=False, prefix="resume_") as f: - f.write(resume_content) + f.write(resume_text) resume_path = f.name try: - # Step 3: Build crew and run + # Step 4: Build crew and run _update_progress(job_id, "building_profile") from app.services.crew.crew import build_crew + from app.services.crew.resume_tools import ResumeAnalysisContext applicant_name = user_email.split("@")[0].replace(".", "_") @@ -97,9 +124,20 @@ def _run_crew_sync( ts = datetime.now().strftime("%Y%m%d_%H%M%S") crew_log_path = str(_LOG_DIR / f"{ts}_crew") + # Identity context for the resume_analyzer's save tool: the parsed + # JSON is uploaded to GCS and recorded on resumes.parsed_resume_path. + # resume_text is passed as the hallucination-guardrail reference context. + resume_ctx = ResumeAnalysisContext( + user_id=user_id, + resume_id=resume_id, + user_name=user_name or applicant_name, + local_only=False, + resume_text=resume_text, + ) + crew = build_crew( output_log_file=crew_log_path, verbose=True, tracing=False, - include_github=include_github, + include_github=include_github, resume_ctx=resume_ctx, ) logger.info("crew_runner: Crew verbose log → %s", crew_log_path) @@ -124,6 +162,11 @@ def _run_crew_sync( result = crew.kickoff(inputs=job_application_inputs) logger.info("crew_runner: Crew execution completed for job %d. Log saved to %s", job_id, crew_log_path) + if resume_ctx.state.get("gcs_path"): + logger.info( + "crew_runner: Parsed resume for job %d stored at %s", + job_id, resume_ctx.state["gcs_path"], + ) # Read output files tailored_resume_content = "" @@ -147,7 +190,7 @@ def _run_crew_sync( finally: # Clean up temp files - for path in [resume_path]: + for path in [resume_path, raw_resume_path]: if os.path.exists(path): os.unlink(path) @@ -156,6 +199,7 @@ def _run_crew_sync( async def run_crew_for_job( job_id: int, user_id: int, user_email: str, github_profile, resume_gcs_path: str, job_url: str, + resume_id: int = None, user_name: str = None, resume_filename: str = None, ): """ Async entry point for crew execution. Updates job status in DB. @@ -163,13 +207,17 @@ async def run_crew_for_job( ``github_profile`` may be ``None`` when the user tailors a resume without a GitHub profile; the crew then runs without the GitHub summarizer. + + ``resume_id`` / ``user_name`` / ``resume_filename`` identify the resume for + the resume_analyzer agent (parsed-resume filename, GCS blob, and the + resumes.parsed_resume_path DB update). The raw bytes are kept binary — + PDF/DOCX resumes must not be utf-8 decoded. """ _update_progress(job_id, "pending") try: - # Download resume from GCS + # Download resume from GCS (raw bytes — may be a binary .pdf/.docx) resume_bytes = download_file(resume_gcs_path) - resume_content = resume_bytes.decode("utf-8") # Update status to processing async with AsyncSessionLocal() as db: @@ -190,7 +238,8 @@ async def run_crew_for_job( _executor, _run_crew_sync, job_id, user_id, user_email, gh_username, gh_url, gh_dataset, - resume_content, job_url, + resume_bytes, resume_filename, job_url, + resume_id, user_name, ) # Save extracted job details to DB on the correct async event loop diff --git a/backend/app/services/gcs_service.py b/backend/app/services/gcs_service.py index 86130e4..e4d7718 100644 --- a/backend/app/services/gcs_service.py +++ b/backend/app/services/gcs_service.py @@ -5,18 +5,27 @@ signed URLs for resume and interview material files. Bucket structure: - gs:///uploads//.md — User-uploaded original resumes + gs:///uploads// — User-uploaded original resumes (.md/.pdf/.docx) + gs:///parsed//___parsed_resume.json — Agent-parsed resume JSON gs:///tailored//_resume.md — Agent-generated tailored resumes gs:///tailored//_interview.md — Agent-generated interview materials """ import datetime +from pathlib import Path + from google.cloud import storage from app.core.config import get_settings settings = get_settings() +_RESUME_CONTENT_TYPES = { + ".md": "text/markdown", + ".pdf": "application/pdf", + ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", +} + def _get_client() -> storage.Client: """Return a GCS client.""" @@ -52,14 +61,41 @@ def upload_resume(user_id: int, file_bytes: bytes, filename: str) -> str: ) blob_path = f"uploads/{user_id}/{filename}" + content_type = _RESUME_CONTENT_TYPES.get( + Path(filename).suffix.lower(), "application/octet-stream" + ) bucket = _get_bucket() blob = bucket.blob(blob_path) - blob.upload_from_string(file_bytes, content_type="text/markdown") + blob.upload_from_string(file_bytes, content_type=content_type) gcs_path = f"gs://{settings.GCS_BUCKET_NAME}/{blob_path}" return gcs_path +def upload_parsed_resume(user_id: int, filename: str, content: str) -> str: + """ + Upload the resume_analyzer agent's parsed-resume JSON to GCS. + + The blob path is deterministic (parsed//), so a retried + job simply overwrites the previous upload. + + Args: + user_id: The user's database ID. + filename: Parsed-resume filename + (___parsed_resume.json). + content: JSON content of the parsed resume. + + Returns: + The GCS path (gs://bucket/parsed//). + """ + blob_path = f"parsed/{user_id}/{filename}" + bucket = _get_bucket() + blob = bucket.blob(blob_path) + blob.upload_from_string(content.encode("utf-8"), content_type="application/json") + + return f"gs://{settings.GCS_BUCKET_NAME}/{blob_path}" + + def upload_tailored_resume(user_id: int, job_id: int, content: str, filename: str) -> str: """ Upload an agent-generated tailored resume to GCS. diff --git a/backend/app/services/resume_parser.py b/backend/app/services/resume_parser.py new file mode 100644 index 0000000..5d663d4 --- /dev/null +++ b/backend/app/services/resume_parser.py @@ -0,0 +1,454 @@ +""" +app.services.resume_parser +-------------------------- +Document-type detection and text extraction for user-uploaded resumes +(.pdf / .docx / .md), plus the Pydantic models and JSON schema template +used by the resume_analyzer agent. + +Extraction strategy: + .pdf — pypdf first; if it errors or yields near-empty text (e.g. a + scanned PDF), fall back to pdfplumber; if that also fails, + raise ResumeParsingError. + .docx — python-docx (paragraphs + table cells); failures raise + ResumeParsingError. + .md — file content used as-is. +""" + +from pathlib import Path +from typing import Dict, List, Optional + +from pydantic import BaseModel, Field + +from app.core.logging import get_logger + +logger = get_logger(__name__) + +# A pypdf result with fewer non-whitespace characters than this is treated as +# a failed extraction (typically a scanned/image-only PDF) and retried with +# pdfplumber. +_MIN_EXTRACTED_CHARS = 50 + +SUPPORTED_EXTENSIONS = {".pdf": "pdf", ".docx": "docx", ".md": "md"} + + +class ResumeParsingError(Exception): + """Raised when a resume file cannot be parsed into text.""" + + +# ── Document type detection ─────────────────────────────────────────────────── + +def detect_document_type(file_path: str) -> str: + """ + Return the document type ("pdf" | "docx" | "md") for ``file_path``. + + Raises: + ResumeParsingError: If the extension is not one of .pdf/.docx/.md. + """ + suffix = Path(file_path).suffix.lower() + doc_type = SUPPORTED_EXTENSIONS.get(suffix) + if doc_type is None: + raise ResumeParsingError( + f"Unsupported resume document type '{suffix}' for file '{file_path}'. " + f"Supported types: {', '.join(sorted(SUPPORTED_EXTENSIONS))}." + ) + return doc_type + + +# ── Per-type extractors ─────────────────────────────────────────────────────── + +def _non_whitespace_len(text: str) -> int: + return len("".join(text.split())) + + +def extract_pdf_text(file_path: str) -> str: + """ + Extract text from a PDF resume. + + Tries pypdf first; on any exception or a near-empty result falls back to + pdfplumber. If both fail, raises ResumeParsingError. + """ + pypdf_error: Exception | None = None + try: + from pypdf import PdfReader + + reader = PdfReader(file_path) + text = "\n".join((page.extract_text() or "") for page in reader.pages) + if _non_whitespace_len(text) >= _MIN_EXTRACTED_CHARS: + logger.info( + "resume_parser: pypdf extracted %d chars from '%s' (%d pages)", + len(text), file_path, len(reader.pages), + ) + return text + logger.warning( + "resume_parser: pypdf returned near-empty text (%d non-ws chars) for '%s'; " + "falling back to pdfplumber", + _non_whitespace_len(text), file_path, + ) + except Exception as e: # noqa: BLE001 — any pypdf failure triggers the fallback + pypdf_error = e + logger.warning( + "resume_parser: pypdf failed for '%s' (%s); falling back to pdfplumber", + file_path, e, + ) + + try: + import pdfplumber + + with pdfplumber.open(file_path) as pdf: + text = "\n".join((page.extract_text() or "") for page in pdf.pages) + if _non_whitespace_len(text) < _MIN_EXTRACTED_CHARS: + raise ResumeParsingError( + f"pdfplumber extracted no meaningful text from '{file_path}' " + "(possibly a scanned/image-only PDF)." + ) + logger.info( + "resume_parser: pdfplumber extracted %d chars from '%s'", len(text), file_path + ) + return text + except ResumeParsingError: + logger.error( + "resume_parser: PDF extraction failed for '%s' — pypdf%s and pdfplumber " + "both produced no usable text", + file_path, f" ({pypdf_error})" if pypdf_error else "", + exc_info=True, + ) + raise + except Exception as e: + logger.error( + "resume_parser: PDF extraction failed for '%s' — pypdf error: %s; " + "pdfplumber error: %s", + file_path, pypdf_error, e, exc_info=True, + ) + raise ResumeParsingError( + f"Failed to parse PDF '{file_path}': pypdf error: {pypdf_error}; " + f"pdfplumber error: {e}" + ) from e + + +def extract_docx_text(file_path: str) -> str: + """ + Extract text from a DOCX resume (paragraphs and table cells). + + Raises: + ResumeParsingError: If python-docx cannot read the file or the file + contains no meaningful text. + """ + try: + from docx import Document + + document = Document(file_path) + parts = [para.text for para in document.paragraphs] + for table in document.tables: + for row in table.rows: + parts.extend(cell.text for cell in row.cells) + text = "\n".join(part for part in parts if part and part.strip()) + except Exception as e: + logger.error( + "resume_parser: python-docx failed for '%s': %s", file_path, e, exc_info=True + ) + raise ResumeParsingError(f"Failed to parse DOCX '{file_path}': {e}") from e + + if _non_whitespace_len(text) < _MIN_EXTRACTED_CHARS: + logger.error( + "resume_parser: DOCX '%s' contains no meaningful text (%d non-ws chars)", + file_path, _non_whitespace_len(text), + ) + raise ResumeParsingError( + f"DOCX '{file_path}' contains no meaningful text." + ) + logger.info( + "resume_parser: python-docx extracted %d chars from '%s'", len(text), file_path + ) + return text + + +def extract_md_text(file_path: str) -> str: + """Return a Markdown resume's content as-is.""" + try: + text = Path(file_path).read_text(encoding="utf-8") + except UnicodeDecodeError: + logger.warning( + "resume_parser: '%s' is not valid utf-8; re-reading with errors='replace'", + file_path, + ) + text = Path(file_path).read_text(encoding="utf-8", errors="replace") + except Exception as e: + logger.error( + "resume_parser: failed to read markdown '%s': %s", file_path, e, exc_info=True + ) + raise ResumeParsingError(f"Failed to read Markdown '{file_path}': {e}") from e + logger.info("resume_parser: read %d chars from markdown '%s'", len(text), file_path) + return text + + +def extract_resume_text(file_path: str) -> str: + """ + Detect the document type of ``file_path`` and extract its text. + + Raises: + ResumeParsingError: If the type is unsupported or extraction fails. + """ + doc_type = detect_document_type(file_path) + logger.info("resume_parser: extracting '%s' as %s", file_path, doc_type) + if doc_type == "pdf": + return extract_pdf_text(file_path) + if doc_type == "docx": + return extract_docx_text(file_path) + return extract_md_text(file_path) + + +# ── Parsed-resume filename helpers ──────────────────────────────────────────── + +def sanitize_user_name(name: str) -> str: + """Lowercase ``name`` and collapse every non-alphanumeric run to a single '_'.""" + sanitized = "".join(c if c.isalnum() else "_" for c in name.lower()) + while "__" in sanitized: + sanitized = sanitized.replace("__", "_") + return sanitized.strip("_") or "user" + + +def build_parsed_resume_filename(user_name: str, user_id: int, resume_id: int) -> str: + """Return '___parsed_resume.json'.""" + return f"{sanitize_user_name(user_name)}_{user_id}_{resume_id}_parsed_resume.json" + + +# ── Structured output models (guardrail validation) ────────────────────────── + +class ProjectItem(BaseModel): + project_name: str = "" + description: str = "" + url: str = "" + + +class PublicationItem(BaseModel): + title: str = "" + publisher: str = "" + date: str = "" + url: str = "" + + +class PositionItem(BaseModel): + position_name: str = "" + company_name: str = "" + country: str = "" + start_date: str = "" + end_date: Optional[str] = None + skills: List[str] = Field(default_factory=list) + job_type: str = "" + job_details: str = "" + + +class EducationItem(BaseModel): + school_name: str = "" + school_type: str = "" + degree_type: str = "" + faculty_department: str = "" + specialization_subjects: str = "" + country: str = "" + start_date: str = "" + end_date: str = "" + learning_mode: str = "" + education_details: str = "" + + +class ParsedResumeResult(BaseModel): + name: str = "" + email: str = "" + phone: str = "" + address: str = "" + city: str = "" + country: str = "" + language: str = "" + spoken_languages: List[str] = Field(default_factory=list) + honors_and_awards: List[str] = Field(default_factory=list) + courses_and_certifications: List[str] = Field(default_factory=list) + linkedin_url: str = "" + github_url: str = "" + twitter_url: str = "" + website_url: str = "" + kaggle_url: str = "" + date_of_birth: Optional[str] = None + nationality: str = "" + summary_objective: str = "" + work_authorization: str = "" + years_of_experience: int = 0 + has_remote_work_experience: bool = False + remote_work_type: str = "" + has_management_experience: bool = False + management_level: str = "" + approximate_age: Optional[int] = None + brief_summary: str = "" + drivers_licenses: List[str] = Field(default_factory=list) + interests_hobbies: List[str] = Field(default_factory=list) + projects: List[ProjectItem] = Field(default_factory=list) + volunteer_experience: List[str] = Field(default_factory=list) + publications: List[PublicationItem] = Field(default_factory=list) + positions: List[PositionItem] = Field(default_factory=list) + # Skills grouped by the category headings used in the resume (e.g. + # "Languages", "Frameworks / Libraries"). When the resume lists skills + # without any category headings, all skills go under a single "Default" key. + skills: Dict[str, List[str]] = Field(default_factory=dict) + education_qualifications: List[EducationItem] = Field(default_factory=list) + + +class ParsedResume(BaseModel): + id: int + result: ParsedResumeResult + + +# ── URL validation & years-of-experience computation ───────────────────────── + +# The *_url fields that must hold a valid URL or an empty string. +URL_FIELDS = ( + "linkedin_url", "github_url", "twitter_url", "website_url", "kaggle_url", +) + + +def is_valid_url(value: str) -> bool: + """ + Return True if ``value`` is a syntactically valid http(s) URL. + + An empty string is considered valid (a URL that could not be extracted is + intentionally left blank). Bare link labels ("LinkedIn", "Portfolio", + "Kaggle", a person's name) are rejected. + """ + if value == "": + return True + from urllib.parse import urlparse + + try: + parsed = urlparse(value.strip()) + except Exception: # noqa: BLE001 — any parse failure is an invalid URL + return False + return parsed.scheme in ("http", "https") and bool(parsed.netloc) and "." in parsed.netloc + + +def find_invalid_url_fields(result: "ParsedResumeResult") -> List[str]: + """Return the names of *_url fields on ``result`` that are not valid URLs.""" + return [field for field in URL_FIELDS if not is_valid_url(getattr(result, field, ""))] + + +def _parse_iso_date(value: Optional[str]): + """Parse a YYYY-MM-DD string into a ``date``; return None on any failure.""" + if not value: + return None + from datetime import date + + try: + return date.fromisoformat(value.strip()[:10]) + except (ValueError, TypeError): + return None + + +def compute_years_of_experience(result: "ParsedResumeResult") -> int: + """ + Compute total years of professional experience from the position dates. + + The span runs from the earliest position start_date to the latest end_date + (a missing/blank end_date is treated as today, i.e. a current position), + and is floored to whole years. Returns 0 when no usable dates exist. + """ + from datetime import date + + starts, ends = [], [] + for pos in result.positions: + start = _parse_iso_date(pos.start_date) + if start is None: + continue + starts.append(start) + # A blank/missing end_date means the position is current → use today. + end = _parse_iso_date(pos.end_date) or date.today() + ends.append(end) + + if not starts: + return 0 + + earliest, latest = min(starts), max(ends) + if latest <= earliest: + return 0 + return (latest - earliest).days // 365 + + +# JSON template embedded verbatim in the resume-analysis task description. +# Safe for CrewAI description interpolation: interpolation only replaces bare +# {identifier} tokens, and every brace here is followed by a quoted key or +# whitespace. Never add a bare {word} token to this literal — CrewAI would +# raise a KeyError for a missing crew input. +PARSED_RESUME_SCHEMA: str = """{ + "id": , + "result": { + "name": "", + "email": "", + "phone": "", + "address": "", + "city": "", + "country": "", + "language": "", + "spoken_languages": [], + "honors_and_awards": [], + "courses_and_certifications": [], + "linkedin_url": "", + "github_url": "", + "twitter_url": "", + "kaggle_url": "", + "website_url": "", + "date_of_birth": null, + "nationality": "", + "summary_objective": "", + "work_authorization": "", + "years_of_experience": 0, + "has_remote_work_experience": false, + "remote_work_type": "", + "has_management_experience": false, + "management_level": "", + "approximate_age": null, + "brief_summary": "", + "drivers_licenses": [], + "interests_hobbies": [], + "projects": [ + { + "project_name": "", + "description": "", + "url": "" + } + ], + "volunteer_experience": [], + "publications": [ + { + "title": "", + "publisher": "", + "date": "", + "url": "" + } + ], + "positions": [ + { + "position_name": "", + "company_name": "", + "country": "", + "start_date": "", + "end_date": null, + "skills": [], + "job_type": "", + "job_details": "" + } + ], + "skills": { + "Default": [] + }, + "education_qualifications": [ + { + "school_name": "", + "school_type": "", + "degree_type": "", + "faculty_department": "", + "specialization_subjects": "", + "country": "", + "start_date": "", + "end_date": "", + "learning_mode": "", + "education_details": "" + } + ] + } +}""" diff --git a/backend/docs/resume_analyzer_agent_creation_prompt.txt b/backend/docs/resume_analyzer_agent_creation_prompt.txt new file mode 100644 index 0000000..54930f1 --- /dev/null +++ b/backend/docs/resume_analyzer_agent_creation_prompt.txt @@ -0,0 +1,370 @@ +Create a new CrewAI agent called "resume_analyzer" that carefully scans and analyzes the given resume to extract all the relevant information it can find and produce them as output in the JSON format given below. It should create a file called "___parsed_resume.json" in local temp storage and then upload it to the GCS storage. It should store the GCS path of the uploaded file in the database table "Resume" under field "parsed_resume_path". Create this field if the current Database table does not have it. Modify "backend/app/models/__init__.py" which contains the Database table details accordingly. Also update the schema if necessary present in "backend/app/schemas/__init__.py". The agent should only write to the database if the file creation and the subsequent upload of the file to GCS is successful. + +Use existing tools or create new tools that this agent can use to write, upload files or update database. + +Create helper functions to first check the document type (.pdf, .docx or .md), then create three helper functions to extract data from each document type. +For PDF use "PyPDF" package initially and if it fails to properly parse the document, use "pdfplumber" package. If that even fails, raise proper Error. +For .docx type, use "python-docx" package to extract the data and implemenent proper failure resolution. +For .md file use the file as is. + +If the parsing fails, the Crew should not continue further and notify the user that resume parsing failed and all related logs should be carefully written. +The user will have the option to try again from the UI interface which is already implemented. Carefully think and create the relevant CrewAI task for the same. +The Resume analyzing task should be done in parallel to the "github_task". Modify crew in "backend/app/services/crew/crew.py" and build_tasks in "backend/app/services/crew/tasks.py" accordingly. +Always follow the official documentation guides while implementing CrewAI related code. You can use Context7 MCP to get latest documentation. + +The contents of this JSON file should be passed to the "profiler" agent. So also modify the task description of "_profile_task" and the task build order in "backend/app/services/crew/tasks.py". + +Create a python script in "backend/tests" to run this agent and task in isolation to check the output quality. +Let the agent create the output file in local temp storage but it should not upload to gcs or write to database. +It should copy the file from temp folder to an "output" folder inside "backend/tests". +The filename should be "test_parsed_resume_.json" as the usual filename mentioned above cannot be used due to lack of user_name, user_id and resume_id information. + +Output JSON format: +""" +{ "id": + "result": { + "name": "", + "email": "", + "phone": "", + "address": "", + "city": "", + "country": "", + "language": "", + "spoken_languages": [], + "honors_and_awards": [], + "courses_and_certifications": [], + "linkedin_url": "", + "github_url": "", + "twitter_url": "", + "website_url": "", + "date_of_birth": null, + "nationality": "", + "summary_objective": "", + "work_authorization": "", + "years_of_experience": 0, + "has_remote_work_experience": false, + "remote_work_type": "", + "has_management_experience": false, + "management_level": "", + "approximate_age": null, + "brief_summary": "", + "drivers_licenses": [], + "interests_hobbies": [], + "projects": [ + { + "project_name": "", + "description": "", + "url": "" + } + ], + "volunteer_experience": [], + "publications": [ + { + "title": "", + "publisher": "", + "date": "", + "url": "" + } + ], + "positions": [ + { + "position_name": "", + "company_name": "", + "country": "", + "start_date": "", + "end_date": null, + "skills": [], + "job_type": "", + "job_details": "" + } + ], + "education_qualifications": [ + { + "school_name": "", + "school_type": "", + "degree_type": "", + "faculty_department": "", + "specialization_subjects": "", + "country": "", + "start_date": "", + "end_date": "", + "learning_mode": "", + "education_details": "" + } + ] + } +} +""" + +Example Output: +Source file present in "/home/arijit/Job_Application_Agent/backend/sample_data/Arijit De Resume 2026.pdf" +""" +{ + "id": 2 + "result": { + "name": "Arijit De", + "email": "arijitde2050@gmail.com", + "phone": "+918981800329", + "address": "", + "city": "Kolkata", + "country": "India", + "language": "", + "spoken_languages": [], + "honors_and_awards": [], + "courses_and_certifications": [ + "Deep Learning, a 5-course specialization, by Deeplearning.ai. Verify here.", + "MCPS: Microsoft Certified Professional, Microsoft Certification No.: 1042C4-5DHF30" + ], + "linkedin": "https://www.linkedin.com/in/de-arijit/", + "github": "https://github.com/arijitde92", + "twitter": "", + "website": "", + "date_of_birth": null, + "nationality": "", + "summary_objective": "", + "work_authorization": "", + "years_of_experience": 8, + "has_remote_work_experience": true, + "remote_work_type": "fully_remote", + "has_management_experience": true, + "management_level": "team_lead", + "approximate_age": null, + "brief_summary": "Machine Learning Engineer and Computer Vision Engineer with experience in multi-agent AI systems, RAG pipelines, MLOps, backend engineering, and 3D computer vision. Strong background in Python, PyTorch, FastAPI, cloud platforms, and applied AI research, with industry and academic experience across construction tech, neuroimaging, ADAS, and enterprise systems.", + "drivers_licenses": [], + "interests_hobbies": [], + "projects": [ + { + "project_name": "Doctor Appointment Scheduler", + "description": "Architected and deployed a scalable, production-level Multi-Agent System for appointment scheduling. Designed the Agent Orchestration and multi agent delegation and coordination using Google ADK, integrating intelligent doctor matching and calendar scheduling (task hand-off/execution). Implemented robust Tool Calling and Execution using Composio for calendar actions and Google Maps MCP. The scalable Backend Engineering architecture utilizes Google Cloud Run for containerized deployment, integrating Google Cloud SQL and Gemini Enterprise.", + "url": "https://doctor-appointment-app-173427564927.asia-south1.run.app/" + }, + { + "project_name": "Job Application Agent", + "description": "Developed a real-world Multi-Agent System for automation, utilizing Crew AI for advanced workflow orchestration of specialized agents. Engineered Shared State/Memory by integrating Google BigQuery (vector store) and Vertex AI (embeddings) for consistent, scalable semantic search and storage across agents. Implemented custom tools (LinkedIn/GitHub scrapers) and leveraged LangChain for core system logic, all built in Python.", + "url": "" + } + ], + "volunteer_experience": [], + "publications": [ + { + "title": "Predicting Genetic Markers for Brain Tumors Using a Composite Loss", + "publisher": "IEEE Transactions on Computational Biology and Bioinformatics (TCBB)", + "date": "2025-07-01", + "url": "" + }, + { + "title": "Shape Induced Multi-class Deep Graph Cut for Hippocampus Subfield Segmentation", + "publisher": "Springer, Cham", + "date": "2025-01-01", + "url": "https://doi.org/10.1007/978-3-031-78201-5_16" + }, + { + "title": "3D Hippocampus Segmentation Using a Hog Based Loss Function with Majority Pooling", + "publisher": "2023 IEEE International Conference on Image Processing (ICIP)", + "date": "2023-10-01", + "url": "" + }, + { + "title": "Brain Tumor Classification from Radiology and Histopathology using Deep Features and Graph Convolutional Network", + "publisher": "2022 26th International Conference on Pattern Recognition (ICPR 2022)", + "date": "2022-01-01", + "url": "" + }, + { + "title": "A Deep Graph Cut Model for 3D Brain Tumor Segmentation", + "publisher": "44th Annual International Conference of the IEEE Engineering in Medicine & Biology Society (EMBC 2022)", + "date": "2022-01-01", + "url": "" + }, + { + "title": "DTI based Alzheimer's Disease Classification with Rank Modulated Fusion of CNNs and Random Forest", + "publisher": "Expert Syst. Appl.", + "date": "2021-01-01", + "url": "" + } + ], + "references": [], + "positions": [ + { + "position_name": "Computer Vision Engineer", + "company_name": "Synerjix", + "country": "USA", + "start_date": "2025-06-01", + "end_date": "2025-12-01", + "skills": [ + "DinoV3", + "Python", + "FastAPI", + "MySQL", + "AWS", + "Sagemaker", + "EC2", + "EKS", + "CI/CD", + "Docker" + ], + "job_type": "Remote", + "job_details": "Smart Moving Assistant Created a Smart Moving Assistant, helping users estimate shifting cost of items using room photos. Used DinoV3 for object detection, python and FastAPI for backend development, MySQL as the Database and AWS (Sagemaker, EC2, EKS) as the deployment platform along with CI/CD and Docker. Automation improved moving estimation by 70% and improved stakeholder business efficiency by 50%." + }, + { + "position_name": "Machine Learning Engineer", + "company_name": "mVizn Pte. Ltd.", + "country": "Singapore", + "start_date": "2024-01-01", + "end_date": null, + "skills": [ + "CrewAI", + "Retrieval-Augmented Generation (RAG)", + "Pinecone", + "LoRA", + "Gemini", + "Python", + "PyTorch", + "MLflow", + "FastAPI", + "Pydantic", + "asyncio", + "ONNX", + "Docker", + "Google Cloud Platform (GCP)" + ], + "job_type": "Remote", + "job_details": "Smart Property Manager Project Singapore (Remote) Developed a multi-agent platform for the construction domain using CrewAI enabling Autonomous Project Management & Scheduling (APMS), Automated Estimation & Procurement (AEP), and intelligent project information retrieval increasing overall business efficiency by 50%. Conceptualized the orchestration layer for governing through intelligent state & memory management, context propagation, and dynamic routing of user intent. Designed robust multi-agent workflows by balancing technical trade-offs and ensuring model observability, tracing and performance monitoring. Built multi-modal Retrieval-Augmented Generation (RAG) pipelines optimizing for performance and accurate retrieval with hybrid search and reranking techniques across massive datasets of text, images and CAD files leveraging multiple types of embeddings stored in Pinecone. Applied LoRA fine-tuning to adapt Gemini LLMs for domain understanding & structured output formatting. 3D Scan-to-BIM Project Led the development of a scalable end-to-end machine learning pipeline from training to deployment for 3D semantic segmentation of indoor point clouds extracted from LiDAR scans using Python and PyTorch reducing Building Information Modeling (BIM) creation time by 60%. Implemented MLflow-based experiment tracking, model versioning, model registry, and reproducible training workflows to support scalable MLOps practices. Designed and implemented scalable, robust backend architectures using FastAPI, Pydantic, asyncio and multi threaded programming. Optimized models through ONNX and deployed services using Docker and Google Cloud Platform (GCP), including Cloud Storage, Compute Engine VMs, IAM and Cloud SQL services." + }, + { + "position_name": "Computer Vision Engineer", + "company_name": "Institute of Neurosciences", + "country": "India", + "start_date": "2022-01-01", + "end_date": "2023-12-01", + "skills": [ + "PyTorch", + "Python", + "OpenCV", + "Numpy", + "ETL", + "Matplotlib", + "Streamlit", + "Docker" + ], + "job_type": "Onsite", + "job_details": "AI Assisted Neuroimaging Kolkata, India Designed and implemented custom 3D Computer Vision solutions related to various Neurological disorders using PyTorch, Python, OpenCV and Numpy improving diagnosis speed by 40%. Created custom data processing and ingestion (ETL) pipelines for handling massive MRI, CT images. Converted raw patient data into valuable information with innovative data analysis and interactive dashboards for stakeholders using Matplotlib, Streamlit, Docker." + }, + { + "position_name": "Machine Learning Engineer", + "company_name": "Mercedes-Benz Research and Development India", + "country": "India", + "start_date": "2018-08-01", + "end_date": "2019-08-01", + "skills": [ + "Computer Vision", + "YOLOv3", + "AWS", + "Python", + "QA" + ], + "job_type": "Onsite", + "job_details": "Advanced driver-assistance system (ADAS) Bengaluru, India Developed and optimized a computer vision pipeline for Vulnerable Road User (VRU) detection using YOLOv3 and large-scale annotated datasets. Designed & deployed model training, evaluation, and validation workflows in AWS. Built automated quality assurance (QA) and evaluation frameworks using Python, improving annotation throughput by 20% and data quality by 25%." + }, + { + "position_name": "Systems Engineer", + "company_name": "Tata Consultancy Services", + "country": "India", + "start_date": "2014-08-01", + "end_date": "2015-08-01", + "skills": [ + "Java", + "MySQL" + ], + "job_type": "Onsite", + "job_details": "Ultimatix Team Kolkata, India Maintained and enhanced high-availability backend systems (Java, MySQL) for TCS’s internal website, ensuring seamless functionality for over 100,000 users. Streamlined feature release cycle, reducing deployment time by 20%." + } + ], + "education_qualifications": [ + { + "school_name": "Jadavpur University", + "school_type": "University or equivalent", + "degree_type": "Doctorate/PhD or equivalent", + "faculty_department": "", + "specialization_subjects": "", + "country": "India", + "start_date": "2019-01-01", + "end_date": "2024-01-01", + "learning_mode": "In-person learning", + "education_details": "PhD, Jadavpur University, Kolkata, India." + }, + { + "school_name": "Jadavpur University", + "school_type": "University or equivalent", + "degree_type": "Master's Degree or equivalent", + "faculty_department": "", + "specialization_subjects": "Computer Science & Engineering", + "country": "India", + "start_date": "2016-01-01", + "end_date": "2018-01-01", + "learning_mode": "In-person learning", + "education_details": "M.Tech. Computer Science & Engineering, Jadavpur University, Kolkata, India. GPA - 8.83" + }, + { + "school_name": "Techno India", + "school_type": "College or equivalent", + "degree_type": "Bachelor's Degree or equivalent", + "faculty_department": "", + "specialization_subjects": "Computer Science & Engineering", + "country": "India", + "start_date": "2010-01-01", + "end_date": "2014-01-01", + "learning_mode": "In-person learning", + "education_details": "B.Tech. Computer Science & Engineering, Techno India, Kolkata, India. GPA - 8.81" + } + ] + } +} +""" + +Modify "PARSED_RESUME_SCHEMA" to add a skills key after "positions". It should be like a dictionary with skills category as the keys based on the categories given in the resume. If there are no categories, then it should have a "default" category. The skills should a list of strings for each category. +Below are three examples - + +1. Extracted text: +""" +Languages: Python, C++, SQL +LLM/Agent Systems: Multi Agent Orchestration (Crew AI, Google ADK, LangGraph), Agentic Memory, + LangChain, LLM, APIs (OpenAI, Gemini, Claude), DeepEval +Frameworks / Libraries: FastAPI, Flask, PyTorch, Scikit-learn, OpenCV, Open3D, PyTest, +Cloud & Ops: Google Cloud Platform (GCP), Amazon Web Services (AWS), Git, Docker, + MLFlow, Github Actions +""" + +Desired skill section: +"skills":{ + "Languages": ["Python", "C++", "SQL"], + "LLM/Agent Systems": ["Crew AI", "Google ADK", "LangGraph", "Agentic Memory", "LangChain", "LLM", "OpenAI", "Gemini", "Claude", "DeepEval"], + "Frameworks / Libraries": ["FastAPI", "Flask", "Pytorch", "Scikit-learn", "OpenCV", "Open3D", "PyTest"], + "Cloud & Ops": ["Google Cloud Platform (GCP)", "Amazon Web Services (AWS)", "Git", "Docker", "MLFlow", "Github Actions"] +} + +2. Extracted Text: +""" +Programming: Python, C, C++, SQL, Core Java +Tools & Technologies: TensorFlow, PyTorch, Scikit-learn, NumPy, Pandas, Matplotlib, Seaborn, NLTK, spaCy, Transformers, Git, Docker, Linux, PostgreSQL, Elasticsearch, GitHub Actions, Azure, DigitalOcean +""" + +Desired skill section: +"skills":{ + "Programming": ["Python", "C", "C++", "SQL", "Core Java"], + "Tools & Technologies": ["TensorFlow", "PyTorch", "Scikit-learn", "NumPy", "Pandas", "Matplotlib", "Seaborn", "NLTK", "spaCy", "Transformers", "Git", "Docker", "Linux", "PostgreSQL", "Elasticsearch", "GitHub Actions", "Azure", "DigitalOcean"] +} + +3. Extracted Text: +""" +Python, HTML, CSS, JavaScript, React, Node.js, AWS, GCP +""" + +Desired skill section: +"skills":{ + "Default": ["Python", "HTML", "CSS", "JavaScript", "React", "Node.js", "AWS", "GCP"] +} + +Also Modify "_resume_analysis_task" and "resume_analyzer" descriptions if necessary. + +Also apply a guardrail to make sure Agent does not hallucinate. See the documentation given by CrewAI here - "https://docs.crewai.com/v1.15.1/en/enterprise/features/hallucination-guardrail.md" \ No newline at end of file diff --git a/backend/docs/skill_extractor_agent_creation_prompt.txt b/backend/docs/skill_extractor_agent_creation_prompt.txt new file mode 100644 index 0000000..60d0e98 --- /dev/null +++ b/backend/docs/skill_extractor_agent_creation_prompt.txt @@ -0,0 +1,173 @@ +Create a new Crew AI Agent called "skill_extractor" that can extract skills and certifications from a given text like resume, job description or a github profile. It should carefully scan the entire text and find out keywords that match to a skill or certification. Keep in mind that certifications can only be extracted from resumes and not job description or github profiles. Also soft skills can only be extracted from resumes and job_descriptions but not github profiles. It needs to produce the output in a json format as shown below - +""" +{ + "data_source": "resume" or "job description" or "github profile" + "skills": { + "programming_languages": [], + "frameworks": [], + "operating_systems": [], + "cloud_services": [], + "tools": [], + "libraries": [], + "soft_skills": [], + "tech_skills": [], + }, + "certifications": { + "certificate_1": { + "title": "", + "issuer": "", + "issue_date": "", + "expiry_date": "", or "N/A" if it does not expire + "verify_link": "" or "N/A" if not found + }, + "certificate_2": { + "title": + "issuer": + "issue_date": + "expiry_date": + "verify_link": + }, + ... + "certificate_n": { + "title": + "issuer": + "issue_date": + "expiry_date": + "verify_link": + }, + } +} +""" + +Below are examples of complete sample JSONs. +1. +{ + "data_source": "resume", + "skills": { + "programming_languages": ["Python", "C++", "SQL"], + "frameworks": ["TensorFlow", "PyTorch", "Keras"], + "operating_systems": ["Ubuntu Linux", "macOS"], + "cloud_services": ["AWS SageMaker", "Google Cloud AI Platform"], + "tools": ["Docker", "Git", "MLflow", "Jupyter"], + "libraries": ["Scikit-learn", "Pandas", "NumPy", "Matplotlib"], + "soft_skills": ["Problem Solving", "Cross-functional Communication", "Adaptability"], + "tech_skills": ["Model Deployment", "Deep Learning", "Computer Vision", "NLP"] + }, + "certifications": { + "certificate_1": { + "title": "AWS Certified Machine Learning - Specialty", + "issuer": "Amazon Web Services", + "issue_date": "2023-05-15", + "expiry_date": "2026-05-15", + "verify_link": "https://www.credly.com/badges/example-badge-id-ml" + }, + "certificate_2": { + "title": "Deep Learning Specialization", + "issuer": "Coursera (DeepLearning.AI)", + "issue_date": "2022-08-10", + "expiry_date": "N/A", + "verify_link": "https://www.coursera.org/account/accomplishments/specialization/example" + } + } +} + +2. +{ + "data_source": "resume", + "skills": { + "programming_languages": ["Python", "Bash"], + "frameworks": ["Ansible"], + "operating_systems": ["Cisco IOS", "Junos OS", "CentOS"], + "cloud_services": ["AWS VPC", "Azure Virtual Network"], + "tools": ["Wireshark", "SolarWinds", "Cisco Packet Tracer", "Putty"], + "libraries": ["Netmiko", "NAPALM"], + "soft_skills": ["Critical Thinking", "Under Pressure Troubleshooting", "Team Leadership"], + "tech_skills": ["BGP/OSPF Routing", "VLAN/STP Switching", "Firewall Configuration", "Network Automation"] + }, + "certifications": { + "certificate_1": { + "title": "Cisco Certified Network Professional (CCNP) Enterprise", + "issuer": "Cisco", + "issue_date": "2022-11-20", + "expiry_date": "2025-11-20", + "verify_link": "https://www.credly.com/badges/example-badge-id-ccnp" + }, + "certificate_2": { + "title": "CompTIA Network+", + "issuer": "CompTIA", + "issue_date": "2019-04-12", + "expiry_date": "2022-04-12", + "verify_link": "N/A" + } + } +} + +3. +{ + "data_source": "job description", + "skills": { + "programming_languages": ["Python", "R", "Scala", "SQL"], + "frameworks": ["Apache Spark", "Hadoop"], + "operating_systems": ["Linux", "Windows"], + "cloud_services": ["AWS", "GCP BigQuery"], + "tools": ["Tableau", "PowerBI", "Git", "Airflow"], + "libraries": ["SciPy", "Statsmodels", "Seaborn", "NLTK"], + "soft_skills": ["Storytelling", "Business Acumen", "Analytical Thinking"], + "tech_skills": ["Statistical Modeling", "A/B Testing", "Data Mining", "Predictive Analytics"] + }, + "certifications": "N/A" +} + +4. +{ + "data_source": "job description", + "skills": { + "programming_languages": ["Python", "Go", "PowerShell", "C"], + "frameworks": ["Metasploit Framework", "MITRE ATT&CK"], + "operating_systems": ["Kali Linux", "Windows Server", "Debian"], + "cloud_services": ["Azure Security Center", "AWS Shield"], + "tools": ["Burp Suite", "Nessus", "Splunk", "Wireshark"], + "libraries": ["OpenSSL", "Cryptography"], + "soft_skills": ["Attention to Detail", "Ethics and Integrity", "Clear Reporting"], + "tech_skills": ["Penetration Testing", "Incident Response", "Vulnerability Assessment", "Cryptography"] + }, + "certifications": "N/A" +} + +5. +{ + "data_source": "github profile", + "skills": { + "programming_languages": ["JavaScript", "TypeScript", "HTML5", "CSS3"], + "frameworks": ["React.js", "Vue.js", "Next.js"], + "operating_systems": ["macOS", "Windows"], + "cloud_services": ["Vercel", "Netlify", "Firebase"], + "tools": ["Webpack", "Vite", "Figma", "Git"], + "libraries": ["Redux", "Tailwind CSS", "Framer Motion", "React Query"], + "soft_skills": "N/A", + "tech_skills": ["Responsive Web Design", "Web Accessibility (a11y)", "State Management", "SEO Optimization"] + }, + "certifications": "N/A" +} + +6. +{ + "data_source": "github profile", + "skills": { + "programming_languages": ["JavaScript", "Python", "Java", "SQL"], + "frameworks": ["Node.js", "Express.js", "Django", "Spring Boot", "React"], + "operating_systems": ["Ubuntu", "macOS"], + "cloud_services": ["AWS EC2", "AWS S3", "Heroku"], + "tools": ["Docker", "Jenkins", "Postman", "Git"], + "libraries": ["Mongoose", "Axios", "Bcrypt", "Jest"], + "soft_skills": "N/A", + "tech_skills": ["RESTful APIs", "Microservices Architecture", "CI/CD Pipelines", "Database Design (SQL/NoSQL)"] + }, + "certifications": "N/A" +} + + + +Create a well defined task for the same. + +Now instruct the \ No newline at end of file diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 130c70f..c3d3ff4 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -41,6 +41,7 @@ dependencies = [ "beautifulsoup4", "openpyxl", "pandas", + "pdfplumber", "pypdf", "python-docx", "requests", diff --git a/backend/sample_data/Arijit De Resume 2026.docx b/backend/sample_data/Arijit De Resume 2026.docx new file mode 100644 index 0000000000000000000000000000000000000000..e2fa6c7713f3b9d999beca8c3ce0dcbb923d5ada GIT binary patch literal 465216 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

L0b9a-${WDDtux zk6{$8gHg8r`rn8V!h)mry2Dwf@@X#Asr3;+Dkte71}0QgkW1R15qI zn!853#)jEpZdfs_999jF4sRYF8y?@R*sR>F+B~{>^X9P~^Css#Iq!+_i}T)@7bxMv zim)maDrydohHohuqaB<>;ZRvZ)@H{T$+9e`R47zjNYShqqbz%eGiX_$;*Q2Z^Bs63 z669+gwc%Q5#zhwg3*u9azYg>0?kipxBw**>S=Wlzwz1=>XoT)CE zDa}-8D(*@tPg!`t zcW-P>@&STrY}`HJkofBXhM59W&+VUWx0WUoUXy1FObkYIGYfCd=*=eeX3aiYmS3r7 zHXLb#fxu{MqqeoRv3ujjF`m)#JoCR+WXTtT=GbUn+sVnh32D)$8?B@oG1o_$tAgfp zbKZE&j!GS*dW~FFm8Lej<${bn!xx&nEXky(h4CQY(W1X0?BIh`daZ~_v{eptHwv?} z(}SB#I-#V}!4XD}0|hjxP#bR1Q>21xJi>$G!lkzldG34M{A*qR!dhzx_t)Q2eLTT( zloGHiTW5hu(ZCJ8-nvlbGrQY9)v*|*@%0HufP+V~S6?nP5|p4(D;Sbw0197;vIK{}DV8s!=||5Oij0!6>Adx9 zcyn-Q8>B=v*Z&ib5QWG*J$#@2V#fG?s3A;e+BJDY7r0UOX@>=>=+3pRoYMsY8m7T`f0uA zice}u;hj1$62*P7{Pu`L1pAg%KN@N)jll-p=zbHh*g`h3m>BH+R7r_Oj7hHIe?MgY*$VK!Y zhz9*fGR~sWnd(ek(@Y{$M>Czi&RAz#=iQw@?<5VKU_VQr+g?|1*8+q4y?B$ToeOuPxTr(srPY^tZ*~ z#*(&l+rhR6+a7CszwP6;&)T@Qw&ep%o1twW$AINljBzLV;qYi%r?#!F^Tv9c{ke_}y__7CZ?bfSgKCK88{z!9 zSed&?A~u)J&n1v3`Hwesw#&ugg1LoZqCiJzjHOHbJ)7EBFIH)46sp=+BZ6MkusBBR z)nLi?jeQmY$COsOsRKtzPFJT&_(>ci=Jl8!`;=tMYE*^-k+K&oFT(Ba*KX}<7u7Ud zPyuYHlz($!}fX63%kVV@Kb%&#lA3RX)eZpS3waR zifR~w!weKbl|GVP^~M5kqR3V3sHV)_ckCYqt-sk=)X3mCtvFFh8O_zQPSe;6(Wu-pd<}7`&!U9Vjvc)D=P99NXt?nDPE@=?MP`mbOjx$4qb|`D~j@055Dx^S1YYH2P#g^+Xp!XsJ!ewb3q)LjsbcM`2^7qo%Kk0$ZuOjnLv$gA#3Ls}kpNXaW|Zjfw%(n)?Suac6G)^g030bwkN zLeUJ7UnkdCQ28ZN3ke)hO&tD6!&wKUA@%=-_{G?FM2lEuZY^Pzs9u4Nt#*5Wp_;E= z(ypsLq9r(ueV)l)Q`#XI%c@-Va-m#Xudn&UWO#C(A?vrWXSGt51t>8L=*+wI1Qabe zih@E4U#nb%-19X`D4QXlA&`mpNj z=S8E%9H&8$)e~nlfjd5s3H?_C55c4J;Jy#eE5yfZb zO-!siQ>;BRvF%K;#^D$}|C08+!+riG$HdF$HO2E5uHE$jH~1_+^Xd${8Kj`az%9HX zU7D^p^HLObg^xlSsr{FZZt z%6KlJoOhvkH0NsY$vlclEXgmgzyXQw++;|<1&!5#crFP40_aPO#)6Y^&H=D8yNy<% z1f)b1MFY3W;pDB6t?&b#EN`sQsvsAP=@U%{Xp$A|-C>}j-L>a*mUX1cYE)Wb;AHDS z8L1+}J-$Vi*=sJ1R!yP;uEHPTOSu}8T~vWZdn%MPu5#!#oVzRF+Zo2X9O2ip-|zdhbFK#y`}k` z&79UL1|2F-?M}VM5AGbwczGk_?oPRQgA!(fPjgIGHBur~ zT8cnMl#Uq+l^Sp?s0FB=d^BNGy#DB|YQA72p@^)p zQcr~_6BxWzYf*M@aq-a~wXR$2jw+*ieb59@&qGT}egc5al=SE=!yBD!-y`1*s?`Mz zIuRq3q((iSP(M+u@DfT^DMr2bxhGcQsz}JhvBQl|ws&}a42pXQj6gA-Qek?QXXp@{ z{q-$D=85BXd07psS5u52c^2@qD|rpuu-VKk_*89*jitX#Qv@#1!m$I5YHCNs9S zeM8bPCR(eRAQZ4A1!;dt#-9nI$~3)o2BD#`;%HZT$*T0qC7G3(0eWohhW4bvT1{_9 z*4`f2uvRb_)-q!yprm9wg51umT|0$ddkH=o*4}<|qew_ziwk0P$RytA6_Ehln3!v{ z%@^ALM{}*GI+=9H2?uY>0*dx_aaZRZ-; z<@C+{0_WI&>p79+2y{}1m9~~To4?l;s*5kt7H#D8fH3Y`Thkcw0l;xWi`#A}6xq7u zQ1&x|QYzGpjv+O?t;6mYP`q^6JiApaInhs=sn-Njr7EgYxNfgC)(ISguL-G9!V543 z0|c624HQq(tB!14u<_02;`;JMUcJHuKZ51~L0~GHqc9ZH3I=sZVCyQEXRm7=j zzCvwFZGl27^{5b}0>`C(6}z3Fg!q|%wpM+%J+RxL#!&%-@d;X43PA`Zp-0+~(@DO) zzALdHi7}uUDKIg0Q)ust#c4#F(o3@(oLt(JvRhDuZfs1{fx0V+dQfjNX|L!(F;jpe z^;1Cef?a>nK861Eg@{~rt3%p_&jzL1u$0l5t_ll-*9PUqk7_SZ%Q{#suZNlkJdPJwP!9jmTT`?)>Ega_$pcOz6>;N-!ADChrpZ@BpVx4LKa=l`t zd~;zHXA1BomH<}7WWU=v`PTP>s6sytyl9E7&Y&R~N-4&=AxdHkLib61!yL`9K2`Sb zww8S#yneCF^8Zox9)NAsci;H^Zb^3^LN3 z6DO1enwCJ>v;{h#l$MncFrh8!+d=zuKnpETftL1p45bCrQUWb4mfyRRWSh3{|9Sr4 zShD<+eD@pQ{r!9Z3J?XR#&{R7Cxc4lf49Lx_3%V7g!}@7APLmLc?EO;4BJvd3qtRP zM*xhC;CDl6e!F5QiV_g?p_EumxrxeTUa;TFSdbttfS)h`lQ{T)6W}l4q^$V$q6-Yl zidFav!1v)1*vtRXsp4D6+5exYolF9_rdGkvt`OKV-Oz|cjYx2ufZ-X?``EJU7SK-li_R}zHoyLf>KKyt0F3|lOF0+ zf#XHC81Mo76bOP31N?=bK`4~O)OBNSCoo8ZVFJn$fG~ig z*bMmTIsTUThYNQ8MsbNjh}Ptc^TJN#1z0Ys&cx#);)b+>zAF`wGzcIefDi5hml}&F ziqm;)-TWIV@RMR9#ozno1qhWdO!D(bKLKsyC+%A({dyFN&R54I4y{9u>i_ZPU6T+1 zXOYL?U!!k8GRSg4@*^N(fjJ+aMp0fQ@Ylg#20zIHV3x~W2BuTx}}Eh zp}IZY-fmyFzbnug>mBM{AxCIMts;ZKW+rOoWx*C7C8LxI8A>qzP}SfNgu_09VJ3XA z#^-~phDVT1tH+*i0WB>!zUf?wj0vcp@H<>scg{uf9y_A(xqUHTvv1J1$#<3Sr0*u* zeZI$i-}Sxdd*7#|ebYYJ=bHf=IW;jcPC#{_*;W^=%hw@wuT1jtU|nI|TS3{cv=Wa`m*S&3u*|VoLNPC8rgVuo{8ti@%gqWEjbI2VZ3^Zi3@WR#4Nx*tPMSZF z3b{N7TL+Rc~uOVKz_-Yb5`@rZrU_H@|PLU-&O%4;F?(P!n{4 zYuiK~j$R+VK88BTZew?}yLtc_AjXk#LaH>%qq3N+S{9cjXq6q2`jt`+MO}U=$35us zYg{hBOUWU%HopeB2ndLGYdMt^s@<)@!(%owHLkbmfqn*TuQGW9;^5Cf!9HK}&y zW9?*{te@#OwmFHj%o)R3BVuP`EX+O)#vn6P1s>z{k})4npEJueZ=DtRUxLAye4Mib z`%~a76ctpfAW@@JrMct{uu8#6QxSus_qO$|(Lk`#rd7ZvwmSHYw`SobRD(4_9JB%;+;$t(7Ho^O#Za5YX0thLPMeF(vVBn>|GB|% zC=?D?g(9J7AeOh}ZFxuDnRj&ux`S=~ddw`B2e5EEgmg99%npaiXwdVkFHxKM*8qZH z0kc{FLO{L0UBCjo><+<&i4!7KJIfaaTX* z(%8esL${tzha9@%fIl_ywbr=Svo-6ut|~>sRbBllPql@ydV0GF zSG%{mE8|$9Jlt<@@zm=Z>`tx8)6kLtTh|m?0%n3q4kzI~JDOwp-LX?uZ4G+{q*mKd zLwdWRM&hvnqcTAEt_WMawwmJ;5Ga0f{ypRn=HhMe`?zRpZEL1~6=G><$olnqi=wl= zwWS%$b}4BUgIW~XuC9W@!n=um1U z%mYPcK+}1@e-+9VfPYYL!HtQrv^4HG326VZa?zl54iK@R_`>a7UlsJM+Q9m674 zaT(Y_OiO@MD?A)Q8<%wP#NB-gk$5JZznsU{@x z0)lAuH-&3mjqz4TlIyc;i~)j|QT(UaJjS|K)U*ya0Q^43umn@1UDXpEsXA}{aAR?r zh-egsSo$YdfkB(+?J?e=GV5S~-F%|Aug1oI}^pe;CfBQUz!SZ>R4_?HJ2!t6R@Y z`qZ8s8Emt(hu_KrxCtooh4j($a?S{I#Lx)ur%9y!Xb!NUGG7pt75EIct z=@^Iw5T*JCA>jy0h;z$8DGO{REiA@G7u!`!09O^n;Znt1MY~p#MncU(DI)|*))QE) zge=3=R?5{yM54tgPsxmWx<@C~4z87X>~alb>JOOx4WUHB5mH47DUC>I2^(c7^Rw5q z`{^WCb7x;JR^$Fs_jUEVul8sIb>OQ>w`zb1rvl-jE91rcYYVhe9mGpF>qbX}fY?TRbyI;GA)%psjgDiXx@_jMidU zp*62*ZOzvtsHK%UOHe-A{EjIV zf0dO~sa~L*Fj_jwaK&OMxhNF^suG=;&@@m6&lC}=%eX|~F7zR{OpBT7l!nOWFm1SD zyfL5X-21uRRX&Z?Zq(=vDjDNw9Bi~2mFk+Sud|*pDD)Z~LwDd9Fa>D2%8!v+1~AQE z@ebTFcShs>kFNO0=-%QF|4*&f=AcX}4;>nL_n8efUc&T=Zw8CMthcLaO65JTP$2$& zVOp+01pMNjg*V}q=!cLT%0pk}(s>QgFtmo&nyj`gmgRqBVwy)amo$h*ldX-oqtQmQ z+g+&5YHDk<$Fm_`7inE~xjD$cPu9Ra*lZRZq$b4ju`3*1>VQj5>Pb(|W48acGq zSi8OU%e822?VB7?>9s1IUD0+BR%3oPS}4pd3R;2PK@5RJ3z-5`F&2^)tY-m4xr7!6 zmeFo52aV&8VPeVGDcQl`t2J(C%&Lyr!#*t;)m8bkz2B%|*; zG7==7pu9?&sT>9oW_58=%OESuk*GnbVliHV;uFdtD)myLPbm6={7}&zgGy*miz`n5q)g85Q zol7f6KV^&htaiWm?>>p6ksy@u#`r6(J_l%?vTgH|3X^w>M3KMFsZ}U97oWF#uRLG; z$EP<^EJ>Lty(mmQ|g-UDkP~1Fe)7-#>lZ1k7l2# ze^&9`?2oxubHAzoRl~x>yIYl}oT=W_V9HxZjT3fbG#9OpHiRbfxqN-TA)n`roQX4Y zmL@A_>l@{^vJi_H5fkrvSRgB8gY43gzSbsAM(~2GU?kg7^udun&B#b!K}IOhEu3-v zm|pKvL4v_81CJso*s@!N2a*?IFYmmxKj9jyBRk3Ji{K&13*t}I*6y5qSE#s|<5W8c zUViogqVL{5xUcV(9gBx$Dw-(worqvna{^5I#R@}piO{im+ES5@!uVQ|eTCYk{4Jno2^Cdk%W{Ixyans${$;*nD(jWQgr)mqo~96YzWIz!t~4?C_? zn$%XTm8!Shnd2G=jhl^Sd|x^|+Tw6a4TM)fBFhYmFWtH+o|6!EM)eex2or&iGGF3?Y*mt})%z0(wt(vkQ_ zf2YEZRbG`*=iAHAe&@pL@WWUFib9{`ysuRQ{&S3QkOp=z0QLYB0C!NU)a$D;rSd^{ zP~&z7#f2upC<@W6op)0ONf=X|vy;johOlmrJLcxx1MYG6KKCcwx4OUNe$@R-_n+Mg z$o;$U*nGg-tB1RAWjrp`1W36z|>m z+^Y4C8Y7Ja>(-*6Gt$9?SxT*pf?d1M{{6+31WqYve#+ttvseNNL)U?~xrJ6=Q*Be0 zt8ZP?y0-I_#MPdarP`a?uUFhqe{J)%ZP&IFE88dAuUNbFz^(1r^}188>rX$p?!n3L zH~gUg*}^aDexLp0z}rJ_Ui;=L<(31-TaULLZ$Hv=r1wbQk;6wmapc;=r%q|)8E?iH z%jR2?{n@Sk-Ti%Ad|TE|7OvPLr?q}vv^ClmX^-?odLw<_HJ*JnnmV_f>ZH1;Zh^Iy z>MJ#$(!9EpJy8cz>$K~%5`pK6IDInK_Dt(DZO=77*YaHJb8W9Rzt-|v>uYT?-rqpl z>azWVH7im{X?>5^w-#})JE+%Pg=&xVY_e@22YY%7^(jq#eToZj+GgJNpnDy^GuE9x zd2-^2R&(TtR;Ry;e;3}V8rdDi_w2Uec}c$nmI%Q^6*#BD+w85eR<3oR^~P4LRoFn< z#&g||c9O@*O_#_GWL?kMo?Cj5o*6{?WZkAUo6c@RHu29nRqe@+ldDf|K6&j)?9P+m zYJ)*%+3z6JBlTPSlMa(cab*ObjH>L)l^2pa zCo0v$E31uh50jN(_Qv(L*soS;DXIDXQ%0|nRO+(5cMKdK(;9VJyB0CTUTh)|5+`U| zWW|l@BRQmQnhg#xAUyU!u;Pf<&fQ^;T>Veit0v@#>*dc8@X-Q2O(a+tjbR%9D(T=^TA_*n#jomCQ8G$yAN=C_JHPDHBe*)y z3qEniA(N}*gjzp(Cwun+sy%6#1^wv+v2u_x!%^`=}gKKovrd#`wIJnZFASJ0xvh{bXMD% zwyu$`Ywg%w&~1j>>JXW%tpjd^ut$kY1WXXna4c-Aj#lTZ5ne1-SFZ`1EC#)<3uk(K z;qZfXjhec;My97{Vi?j44@0Jwv`qpe7ePCOz+R4`@Rr?9e1QCU46KZSn6Ss4k#lLX zF}$V+Vh~eZsIIQ=NZs{ych>!&PNJ`i@=uYv8Td`kMGxDDtB1Ma!QqMFJ;T=w-!gpf z@GpknAC}|8y5Z^J=ZDc@Ap|le#H40<0a_v#oS)r0l@}-mXN5idZz=>UZv0fCVrYsQ z6Pglg)~7(Jid0}MfS1THO8kPA7`a$SNWnsIon4Z;AG4vB^;?zbYQQ#Ff+cs!FkGo! zzdc4PFj9?4t;&psk>Z7y+TvACFDi*mZbBusdjhuhbl&CH>k~KCGE$|C)^?3f2e@E*e$kw@G;$f>lvN21@6%Gur0P0J4UjE z9=GB)Gi%UmtQwp2v+QT}x7cp6qn&189#i6Nyw5R)kX;5~xPhP`&@Oyy7QSVLZ#6Nf zAG!xxfKUqB1Hlxu8+sH%AR&_OY*hi(cofg$FhSwMdvM|1xbQ|C)NnY!h5g_xrBoKb zrsk&RdHuTlrMW4g-I4zidmX2Qu(}2+vrv?U7AUpbs23L$eyRBT+XpxGH7M1o&-Ap7 z&;KnHi^fL29yHZ)JNr4f_RZoQhfb{e?{1a8b>05?^O1057~FMLu)1~MkMHN5g4gE% zfwZAcXft#IdXB5N@3rqc3!U9`cJrm?pKg(Oy>`2o>^yw%%2Wc6bjuX9n$fauDY6k9Y3B2kl+)~z;AKXYb5v)`41A7k=-Or5+VK+>=oVPDZxK36=w?erD#-^xP3on zj)-1HMO9>?5vUvpTg)yqOZC-@ky}w>S9FCCtS+4n;Rg|-N2?JU4+Vo07Z5N?UCSaE zzksGMw1b3zFA0_~!$qvqO5K96OvTqdIh%r3DsdUTQOn3JFpd_mHm#~XCDV8asS2j6 zpNx?dBUdQRDioIC3Zo=U(RM7A9qdYOyDoLWYim1AL8EmL9v*4fM=u-SilwE2#^x2uCRJy`r8l~58w-583{7!Ct5j6lFgCx0=J zNSbwag%=W3?<}0`OWlMBm=cWYoK3n>8=!47)v5%bHB>w13q7*p>3!` zB1crwSOV#fAS$!!!AQR*66sGRs{7H7p|K_$!u9+nIcFUW2z$lq8MRX#yX#0*KZ58Y zZISWFm67Slr3gMPRK*DC06#H09&G^Y8+JDwZ#dg+E&Qa5xT-#-6{Gq${q*|$7qgxxinYx+2S#^v0Hr*ZU=Yw~J&Z*9;pVm?td~;wjh>R;X zDaWZz^fujYcB_78U}x}s>V0~FT?o7%QsOEFs|dEzEvja958J8l40HzDLM`Fm^t57H zIZd6QPpF<(JWoAO|6HY0sZ{DAdO(fF)3q7I>Sxp%jZW_mVAeQ_Vd;1kO&8K}O*$R7 zVR`Hx48eGl_dIltbk2asIQc#NCf#ksqa=xYgs6sPk9FD#L)Pc5@E#!{UtbfSjNcMp zh@*-)hzmkJN53&uMi&&E;QZWP5f*+aZX~kbl(OSX+~6X<2$O$$~@aIdZjmUO7oZsry)BOgE$D~bwm5(_?TB_ zn1QpLU87Mt$4SyQexnk6Rr!?ihsqC?D5(r6GfG6Mtb&F0A@2zQC;$S1s&EONzXbQY zcP_J(I1xg5g%VL^rj+qp9&DdVS286vCHCOuc@eP_OU-M6G85F5aXU>Z*^tlbj2%6d zX>n-7ZF0H692(DG+cvzy`L$lJT;aDi#KzC`UwN(}Z1t>^;4$Z5@wI`(*3OQ&)x*zV zKR<(yqEV;;dX`IL)u5jP%5W&i|J`aNQWZwB5l<|}dFpcYkd(ybSvRX?P_@TX$SO72 ztWrIy9HnOv{rMVJYUTCqdGn|gm37%8z} zTIaaj-)JWi()*1~xWeQg?N=!_4_&Qb^#*-)=ynVI5`c9U6p2|HM=g2;qnRJFdJMo0 zEebHKcrZePmT z3YJyL8LrSniY+YQj3eiBvNAh;*MQH?m{o|p>ck#k3}4esc=mQztuQmJT${b9!Xy%7 z)~8n3V|(*%g;pK-G!ColZ+z~6#jIo`bl_`k4E(Ax?{FJQiS@n+Yo@hs+`RRp|Fqz! zcXv18yJ~0S*AO~?wit8sc3QH=pv2Z}&*F?KJ`OrbQq%UprB+&_ruB(_FnFs~DFCSN zSoj@6AWgjZIn5c3!C;Wrm}v-x(@B!o6v?zEnM`|xr0t`R*MASkb;3c5l60Cxk`6KK zP5S}mxB2`1h~Ga0COMLTlXQ|xBFUssPSZ#%b&!e4o+%;4P+F+`KPicl$;yaFsgn1` zOYOx1C(~kK_Qx0|%X6<@ib*_VC$bx&Ri?1UJLZ=tbrKoYc+lR^@6}PPUaipvI^w@Q zl55hKjryG{C_+N$OmUcnKRXeP2EuDLzP?WDPit@uW-GY3oyn%EaPm;prcYK+-?6>; zL6=9S(+BDR`DWOnmJ_Ze87^XRtHWo$jvXCLX3AF+XB? z#QJdCMfw@@GnS{VPX(T8x!CsO<`+9yQcZfJEr^W4TCgspP1WGEfP#6HR|SKdtnfV) zXTRsf<9I-bRg zf^T_!RC!%%7MTc3hpI$9xXh7X+5>`Wddz6tmhz=m?@xDc?{ZJb7#VNWE7Y2##p8(7 zFae!w=jb;+cNJ`7jrNIsgGaj`&tMWYMz5KqRy0q1W2KLfqp+vhma%B$Qi=}49kMm2 zTSnIx|N47PP4DX9S8R1@BSlK(rj^uC6=yU0*RLsl{c}T4oOxK%=*-)#>)$*xF<3p! z2nZ>sU#vUDt-UfKmnvmw%hB%ZclXDwG#TdihkD^{bRQChwm|Q5+(pOV9q{PbSV1l) zl@ztgEhkA&w3U6GRP9+xe?%hdT+e}6>#?j92`nIapLFV)=eS_D85 zdn6V?B9X1oGwAqh8^Olt-uYP(Z;^ix%m^{Fv6Q$fef`_+&QcSHL}=;|p9lZPE(NRiy zXtu#%+oDy;#sI4j7rI( zutI8}WpRTcS|eTOp<18p&jkF*Znyj?r6fuzb-4B?joHM*R+&UO%`l9sCUJ$Y{`X$R z!$-mliFxd!5jkGN&`Ly#xiW1h|76qCdRa4px${iI6>#(@?yXlgKbCM;d#d^&P;4(M z;h*xh9o+!keRUq}JOi#StXLtHyVpWOzxC!$W<-0vnOB z4rO=u5UZCPjYIO=4^N=eE^*;u8WCbF&=t5Crh&PCjHDiXj9VKf>teJifMZ_m4<2UlA)W*b$U zU=?-t(0KBTe;rMpS>HxUHKBvB>>4{~peVTeit~ei&I~dbIlj7SW+K~aQ0uX3gVJn| zJyZPKjjuegcWb>(W1$3=?1S@vLuQc#v>$qhv-BST;Z$nJ6r`D&f_Qsd7uDr;i0-d6 zy%iI}HBUZcf6o4z9kC0Ri_GW4cAN3c#;vK%ye@ov>iw;<&WqqKXpsMy^gvZqigu&F7BiSSa% z%_1?w;+af~Y~a})n~t|;YP(bl0wo+ey%Qyq&T!+MlZBsEDb*^eT*;UXUdA}YHh4o< ztluTaM+j}5HBM-i@^D|RmO>>pxZH0c&sT_y&auF(mDkE zA$S!!675Ks9Y89#7=2NPr!zPFse5&lx|`Oyv~H8PS<~S4ty;H6f>cSEE4DnS52@4% zB|%FSxLV2|0XHUzdNOSa-Nt6qoVn3L`*U7{J&P(jfy@m7U@EpDo!AYK7aF`^C1t$Q zp8>&hvh^hYz?rq{H7YAA1KJNIM;!ONkD#bZdBk+T{)p;B*;DWUM{*}t>u zmYZ+9y=rH1tBd{JbzR@AZ9B%hh)3Jg-|9O3Upklhcvto0I(NWC#x7YcbR`WN_i8tMM!73y9 zyA*DkTrU%D+QiQRf74{;M#&G+Bkue8`~MJV%lDkSEL5WkcmB_JoT}UuyL6vR_gO1l2N9992M{2A@@YTKSPtsM-`FVNi6IKUuTFOq9xs#A73I zm24KVd<^|{2syJkQkDDl=eYK9O-OQTO}J{yH|}cfot>> z!mGt7cok`dIN1&Aj^=F z6(5ur;Xqd(^cif80Z-a2lM;x^sUc{!*%>uz{5m%gKcO3=DlzkFbPwZT2 zi*MX`=~Ft|tx`H~1jC_>g}={t7o_lWXgd^us-Z7&HL_3;K#*K*w)z7KMIf*Pl56;% zgJx?e04d~hg&K0xZu??RevkV`H{lj4%l(iZJjOXfW3o{-ZaoJ^{W66-p$)`PDDHa8 z?bd1&v2pa1alu^|ip%-$r6#R}*tjFMi5CQb0^WyQRsnrF$D1WN(N@87ynP}`FVz?_ z2~pxzB%0SJDOKv1US>e4N}W0st*Hw?I@Q*6Ls&`(0x{~=yLD>W>i5l*ZEJNjzO8@k z&~dOL+qnMjzrCYg)jl>o@p5}u0@NCnfAa<=>#}$wF4@swK{Q z(YJ5`Bc?GLv0X!bQ|OMKmS$|cC+;ySWx4DuGoreWJJWoIn3c&q<11%C_S}(?9W&sW zb9?vq%z)2x)#IMC;q^Ayh>w#~eY=LxwWv(dVvKVrKSygZ#i8TJv1`^I8Qrw`Wv3Iv zK5-3EVm^&WFN>{lQPE;7(>auI>gR+w%KWVO+cyL-nKyFc>WKB8{|}6i#ay=-U#X5U zi}ku*m%wpa2jZ3T-9;C@ta?guWW0=*DCjJ4&76Y%5{TJ^!D7q4jx80|lwsb)h-2AY zDPa$l4oA890Q`i+EHaN#g6Xci28VTw<4jwIZ6PtG)cx41ro$7xEw^>~=`tya7h|v#!G3Ahg)9@4k&>>|YI6F6`oSuxQWx7;rJ?j@TEkLCbHgY5s#EnF zrs9-?G14?UYGzb&=V0+2396Q#UgI&1$SFdGqVEm-+9q?Gu6{4#O4}TMDc(iW+P=P2 z=hXuSQ}GX5Ls?9sRO1Q++1_>mmt%;UQuI-r3q!Ui?W>eVmX;|qa&2piy`$BT9?g=Z z(csOtQZmMvZH8c=hMq)!f=)p$C<;w+EUAIbs6{3x)LN4jLZp-hoN=Fa%)k$Gw%}=s zk)7dRkufM~7Jg00)mo{(Y7=<~K7`M}4{@Y#lje~5kX~OM6Ss%ZML9cHL0O0jJ>~Pf z0#q-e_odmAev_~gUuiKUzLNY;`_imvsYsk9H$qrF6u-LjSfZ*bajf&|wv+vR(`{FG zU!4qxlUH|L-F>XL@A!|;KKp|kKK+Adk@v3dIo2`V-+Oh(v94o@NF;u=>!|p1*U_G1 z$xt}|EI;fApT6N)F?~OW{RuNe)8G;A9{Zqu$iBipY(HQ>h}R)?@z3-j4f~>znx<4L z5(%BaCypJ(u%ky;?}OB|`cXBaR`Uj}&2`-Mj0<(SLK73KJ39KCni_K1Ol>leXy_j_ z3_g))&?E*|CmMK5^NCPG6AC2;53b&aw$&t37&03liQb1xN2*4k2pxeV5zjGbBz51> zgCn&gRE@1BT9dEoufb|+>}`8yz%`t5=fTPGyEh)3gd6W}KG-9?l<7Fw27B&y(Rb@c zj0ar@?XsiCFdQ8`8HuJcXw!++2lv(X4>mLn4u*(FmjnL-UMJeS2_gQPS$Y;(tVHF{x}Bv&5XYrraES;- z$L}PUPqOH}IJIlecy8l&{!CW+dR6ZnDUc zX|RJKCfc-8Hns-@ynClN)&saJ$4HLsSECz%OzU>*4E7a9tKZI?VuFpV&Y)M4Dxcrf zWdGTo&w$PrR!wG$(-L^IGV~1WN5PFuP;XRf5rC7pgpj~M0ti^AA|P=&osF@>TWZkLdmI4E)O{+&>ELw<6wW-~{A= zw?I{poPUPHTR0oTUez?sB(BO#SKVHJN89ZX)6eW-rkO_>jA1%D#c&4y_dgIYze_la zycNnzpgB;|NKom4zrH0%dJ#EPlr}K`f_iz&NJ-z6Hkw)tUTG(rfBV5Io5`=!v96jv95FQ8~cLQN$TUBr!z3N89e zKg|i5Mt-*m!DRaF%X5I{rIgrc2;!))PN>W2=2uDWW}PT+$f?mp+|92X>}DBPMfaB? zRV+URP$~(PTM25?$oBJK_?d4MAD)>hKJtxc!0@>*760SmuYu$P4}jFy9xndJ(;A=q z^Sg$o16KbNw|-~8=gj3F6h8#|mm~Fk205*hVcVZ9e(kB5;=@lr4Tff(0xO@af1voo zuRc)x@z=l3f67-u`hiQuHxKM@$%Jm`fANQ3WPSvYr!E0XZj`Fb5DdM5xZt-j6BL3t zeu@(ijoH;2jm%<=Cz2`t^qFNey~+$UW|}brYYNEFuw(=o!Jyjpfj}73(CUkz8=`p? zLFvP%^dt7)VF-}Xh}k>?MlTQzSGhiFBeRUU&}8achk z=?OE3?yM!v#h=qu$e+^1A`D~9n0D8w&<{vPsLJ4F@pSFMR=2A~rf3Y=35mimahul{ z9S@!uM2b75dQY{nb{k8n9rW};vzp}t&&>`OQ*fR;*F zoxUA!XAj^9w5RdY>7qE-`t2i7!4++o|a0oIA{j>9Bxiw!BUU`1b#czUj{lObz+-@&#E_>36l94MZ zb-l5IEzG!fs5SuII!|${1RpTzEN9oh&xRS>8*O?jZUnb7!*heh^(NI^XBz-toS4;x zC{TQNg^4Nd641=R6edR=gD^^b9*WNMCya6MQr+<~8ejF1 z2YGD%68JrYeoQJfK|RoUF0~{Ve9bYR-+x6Us)5 zvT4$8*VA7SC4xr(6)90wWp?|b)$M!TZgcXzp6VGm&dG93P3iY?xsM5nHmJ8EBrXdK zrMX$LwM9%$hyp_t7Q(M{^SPWDlcUw$zeN78t9yQKRyHAcmmolhqe0={^{e?e&Qp&xJ0~|5jGH5rghk5Wp!+R|(M-}}|VE0`SX1h!(m@sFP%Yrs22HU9&6d%k*vro$wPF&C8LSxG0GPku1`M zj3I}SPx1mrdJ*{#qK`~gycZca{|qG7~7wmEOlA!$}A5 zQv&;v!*4TLEE>n%1Ez7)9us0R`5DdKsu}PH&g?&h!lXxUvk73$`b`RjXOrZ=IEJ@l z0VCXMP@uz@7YkZM_oN&_6e8Wx!rWq4+LUmFOTeO_l6NeHOhsQl9j{cgm#gE&AHdNt zv#GJUCAqaBvis$uDzo(IsX?!`rd>n&>$W-_W>Y(QN}X!X_?)>qb;jHH`7OXXHQ4L& zXO(KJHSO^PbO!zyy^B18)T6IM3ds6|^haO>f@C6w3ILQ+#88^2tw(eS@<(YYt30g>9mGo`GmBEW#}2$dm+lOcqS#3R@ien_gJQdM3o`h zV95qTAQ6foP#(ncm-294gUrBTP9}UnUW0QIAQ6BB=AzNUUN%t(@hT@V$9wJ3d?Gg| z_OpflHGspL1EElLEGsu#0b6Rk|`YSuTV?m989t2MDEwV5y^Uc{7Js!U(n<_Tyr zkM!-He6slJDVL=I-m;k+*?dqgf0Ai=%1SYA$JPINZL?))_m6)TI$ZCBsm=pMnGf62 z%={%7oJ?-`6hG~MDYhYB!g?Sz)btpPUxc6JO{=%g(TJLNt{+#aXasL0z-b8MEm4?% zRD-)A0DtwI?DGu${`{<9Q|EKM#-Zmg3(}I8AHx3;Sd1_x99qQM@pR`i-`o_+e*1Ia zPnh<@YW%qmt5HU}^08gJ+Qv7g`Q4O)6)*<>ftO}ljzI1r@M92E!s6i#_PLLn>mbz_ z3TEp=!3OwnRZ~MWmKQ1#V#PFw^0LqgWgkP(8TbTepf2fdGp?r~iG@L4KvB!5IeBrK zVcf0~#*cBn)VR&>)A?B=Js+=*32r7Io6vlMn@vaC< ztEF<4+hR{t8!+So9l9QvI?W0~U)|lkL8V~TI@($5%evK46cV`Acfw=5D3L-NI7T9s zZY)7c0UW&>L8MYhkPZe34oiUqArYuYU^OL(GZ0u);%{ajBT5Ba27&uYEa?$IngmhE z3-OXxUqpri3@+ghegXlSbL-b3-&~XXHUH$8t;S|bT&Ypm+>M*i8$R=&ef`z#sZ}PAx2O1dJ*yAD z-=#OWxL0{6`HhA55Fe7`cLoDp^ImHDb%_ypZ3z zJYTX?qe7-RU-&?T0a&zCu^Qk-ygruUWr3$A4Uhyc`zf9hY~&rkUWMFYGQY2!tE6Lce|akyMhe=WFxNv?tIF_7&XU>~AmUpwe&rhqzOfxXcF|xZ5+)>XD_1K_e_)E6v zTh&6k*QR}oV|g8M{!-%&wi&SXao-K;&o|TW^NLN_N_082CMI@^{7V`BO!5zJ{8Rbn zQpt>v-6+2kuDmE^b<3IFv=|Q;YttTX@VOEWoyA~CO~@Iy)7I`#(|B{g z)znj6we$TUE4gbh%PD+1gNgd|o}D+)+M%wmZ3!9SXKUNDwYmm5m3zynU~>a75nt<# ztV&iLJ^WBtozBH=2q-*#$mV@F@2L-D$CG!otGYg+Jj&{JXG|7fujBphlz~ z{03q;8JzpVy=p^(hQDBk@~KcLRUZ5TKiDe{mOy)v+rVp(?kRpy-#iA2jBa#!4ez3b#ZVExfh%(4SwVc;*~u7@lXCgc-P{UY(XZ# zV-U+J5E#1uf-o9^zbXtD##i2;!bcWAJp%s?Tp_#xMxYCih#!x96|TI2zoBm~yoX=L zjL;tFYFNUJgb#)fHPh>RQ6KN&xYtkZ+gF&{zkmJsp{uUiz}tkpfy6NM>h-I4^9Q@Y zHROC=%-ytpYA>>{uwner0raX(?xvTJEcR?P4rd!ny_iSaNNJIK&Sp- zOGcCVB$9kD`iFAY8h;Rua74SUH`<%;MS2DD2|LtIx7*ue?Ogjn`*{1F_UZN;+wX0E zwEa^1^XRO~s@G2w`2r{uX29$@0_Uy#{1eBC z0$Vs}}n{LHv4UW?lLwxk#CAoz7NkLzUZ=dFW`CSQ}J1x{t(K*p} zmsCg*D*p?ZOf?R>Kt1a!HQd;Rd{>2BMdYOQeXMO$3|@(W7>Q7NRc@gxeH?>{6q_Zo z4XsDuGh%AeQGkeVOV>05)-x1vV4F{WW-{Xn4FqCWx?v{_fe&pksj(^ui88Xe_?>2j ztlzJC^NOyNC9l-gn-y+6{^XUo_9)s`|<=6SwR@`QZG(0dLMr44}W~acwPOTK^2L3 z0MK(M4zM(;)CO9MLx7a31JmfspKpP?J!zN3;{U;KdRXU)+YyPm|G*f45e$(cRyi(H zy#)4x?qKm7_IkHMOQMJq!vXvZsQ+pm4j0edYUh0`ULo9AjAM6WVgBH{MFDjc2rc}B zKe$Q&4R#p<2^vsMph*Vh3uV#p_k}-Un?#A`ElD(>C`mK`ef~~C=zzPH;K*0o5iayefSnA&R@M=y!wV-11~NC+*P`IAj(Uqm6w+gW`*jZHPCms z)gv4rxQ0<=Wm679Pzgq4$HqKaiXs5WCKB0|O{S)uSwfS|5~FYfd@}&1D*2>prD5fY zNmJ`&Rq~zK$|@6FC2b;BX4m?OEZw&^UnU?uM`W`zaK{sCi7cC4`*C?v0?jtpB-`4M4 zzp?nU<4>()ugn<0m3~T!$&@w){7j0m)L$nX+;i~@$IQtqZ!5mPvC#=z_yh190UwG0 zweovvlakhAK%$WHD+CK{DhNmy22wZHU0M9w?8^FHm_KAL1ujJis_nMbs@IF}^zN(; z1r*HiCoc_tX2XFWZE+Fm<2#DqjPRRSRH89+CELfyshf*Y6ijL7aO zZpc{q;DNF!;jhcq1o;hL_x~Qe7lca(4~FVm|NY?CD}(ui*Hf`0vUzcE_MZoDT^t+( z2P<|&N1Zsh{htSSEndbJU@4zc1mgO|(Ma>+DdoK(1#}zw3c8Uu`S0SwW0Gx>qmoZb z?v!9KhT}jcl}I2=N)RY4BT3#A5twWwq%hgwY4{|BK{EIxXCz1<1q8r>gqPiz1V>Qb z{~}~4iGGV8B<26vArc;dGR4MSy9V^xPir<8o3rG`y zEuqo!S6mMs1P|61SAqK)iff9i8^BjkcfPn1e2xEBT+;yVFOD^U`yhm$jMuQuSPJs+ zlhFj-$E~HkK9}1~LDh=5$D^bb-ng&Y1xXRDf{uHueUMA)Alx3Mas%boP?VdhyzC(z zO2QpH;XqQ81VJsn)9sOK^LrtLLttbEe(yqbZ@(63g#d9g{lV1S{8XvDc`iSfP$kNi zwZN4PEf&Ozx0q9wZdJV5l3iV@4iYL9%5Z&)s0#dHCB$BJk#&{e$1f*j^?A{kT02GR z)wQDygNIy4oE~Cc+(1jftB|{ptgIn0yk^AcOz?8>(Nj5 zfB#OAhSh8Ayuo^-=en&eYXy?l;~|lx^_tVRe|#G`)4fXMVtoMq?MDYEn$cxMt?ldi zeJIitiN~R)e0HK0rL|^^@$m<3&C;g*=fQiyhKkZ!v-#f-e!Vi7KRbsjVt;JCIC$)z z2X`%g@)mGjJ~#r`WJZ0dhSLCe;pwPnr{gjz;GU8bDn z_br@ioGAP=ZEU937vCV8JORszL{1|x#Gz; z)HYJInt3vXA z|M!0X^ZY+%ckf=EJv%#dW==onvn5&?_d{p_%g~*m0Tz#Dvpu@vP;>-E4+Zx1jG%8E z*3H`I96?6~jZA0Lg>`khT{=#u8$sTKDn$TUK&HQ`VALQnjhrn>2WL)E%RT*nQmr*= z+Lj8fm8`|3nuWAu<5*=-St)s1io!0}J}kwyO(=6nEsztOt~?@jippt-;$IzRR|qnk zAw9*LP(3i`qSiIZ12Y$&n{5amv{n0?D~*wmb#^4xma39FZB+(^+vRmODNQO_lg?mm zu`K$=Od+-QS8o=zv4+<93(oEB75C|*5sg8{WZQ>&(D~5)(WRTRb5``$Ew6Dc*Lw?r z#3M83ChLYXu3DR+;8R;GLb-~H>Ohk>nXi6!im%F-5G>tm)+Mu@Pl|5w)B11zQvAoF zMa@1ZJ_SgX@f+Cp@hMQ0PA~8T020gHuwkhJpBk(DV`mHj-p9UI0!CodtP<$z;r|4> zf&Et*6jql(htH#+!;?W@WuF`aO_f0}Ttz`IoDBL8_Kva9t^&8>(Mq<1wc7|ZgVy^e z9CEaXI(vEyccQNZ9^JP2>)@D;){UNIU5o(opc4#$<3e&u0diVhNR!aj;+q}ZjCM`C zzSAI>dJ{su(AhCVS2bm}vJSNMc-?MCJt z?e(@)MY`%uO4cGDK|_KjqT6>*3v6jwWEqmGrz;eFL-!ES zfEoAd$arKbRehY$oi}epf6!KF$R5$J%mteJZ~b1gR%uM$)NfGf6^^|(ch}@B*Id(@ zsvp=mcgwE2uqixcc`@TQSNL<+yKS~;ru&9j`Syt05ns?2%3O^;bte(h%51Guy9zy* z3{JVJ(`C>sT4`3x<+ayN&xNC1mrrZ!TJ*Ea7B6lP&*Q5a7PfbL0`3Hf3UN3B`!@I9 zm-SaUQr(f|P>E&VPsKc`!HrkFgVO1iXMn`mrZ=k1n6YJ5V-!US7e7wvzl(yly)F@7 zQ%f@nVd87?PXuKQl=>ymO>dOww6z)4{u?Oz8>Rj(iTX=eL35E}ZJvy^mXfrDb=B)- zf^P38ung*&Owgy$S~}j7(s=imep)=HRN|i&pSW30p`X+7N}!v@L4E%L^oMl3C#CV; zT>`DElglw^Y7!_Tr{k5du6l@$7hk0Xjwi}x?f8yDVC(36%xW$G+*mOEiLmKh%U;Xf z%w294nJpIRwplR_i)F19n5|Y|g}}*HSS-2cAIC!c2wd}|XJ1m) zszNGKWg$())lC}*Nsc9rd?aqqY?gLk#5)J?Dk=WDEWz&9N?CYKv^t$lM$#PDql;7m+vU|6-edVf3RJX%>u1Y0io2M`T z7ha0N(Lb?M>A~46sY~D`P+GUu=KvzXtsY-DQv2u(C7eEqaBL-#4Ehbkgc_Ix%FLyN zBY|$Rmp}vm5j0N;r%xiBGH6W=u{0q6WYAmbXeH28c>qbjwi1J;CWCIJG$svTm94xd zqIm+#pxDGy`?ugBPR%Z)F$)!-u}uRMs1h*fLK3L}bokYQUrhk35l8up^eezc))9yf z>AtGee}3lV*^?(hk|fo9-5=<)_{ttAau*#6I-P-l!x0vvZ029Dpt&K3GZ=I_Laf*3 z4>~G>5%K)m9K@+6`8d$!Y*#ZP;WEW8MP%upv@cZPqE9 z4K*1O};8wozWsR^-XDB)ja2$l@@PI zZCC4G4BQ8E(FkL4#GhEc3$7Nwf1g1Sjfb{Ni8)BZcAy$?4&fGb(!+7t^ zop|QG&wPh&2nlr4>M_un{{i$Kx*_IC8=?$4e}SHW&Y2AQ0;O^Z>#9|ylQcT8hN4A- z6Hb1T;z}YTF!+Epi1J>a)9=h<=-K|VwkFl#!b15fa3y$DNJpbyZ&W$$(o42(&gZge zMQTR5_EuOCRW4XCV|ZAZnlWQg88s`F(FCBix2%4@ZS&SkF1?K38O&dBsDYohbD&2x zS1P_WBvpW2xo}8#-q4OV*w!|JJ~~KhZH?8T{`Wdtt&^*4ja%);t8D!r*Vy|1x5`#+ ztzDrtY1Fz3T4&2yll%X!&ejXpwgsE5rAk}Yu8V&0|FY7SL|N!Bln^D#TD7Ol(ig0< z)DuEHX96Kof80XeJLbS!$5f(}bd*2zNDYgR@^5=5N$l^kYcX(90tWYkOMyjDBCu|~ zb`b_%Jp$)Vat4dY;US$7%UpdG}(7x>39 zizoP*oPP{+lC8(Us-p;e|NiEhER-;cCzwka#~8*W9L7NEClT1ZCTh&;rSH9d^j+>- z{4-;IjZLT>{*La&CZR_U@PxIF50dnQ5$U#-WYJA!Su~wgM<?j~B+uSs_^_T7{`0g=v$nT zYs1X2lK`Vts7+Gc(2_+v7NNf`f{V}+09tY|Ik<7$3q!~(T%w$>Br=2G-fzpM;i25= zog_t1p=3s+XdbLnUn&ixqsvJI?$&Waknrv;~Ceg!`b|858E_P3uc2KUf<}a`~jW}p-LJrd<>O{@!(PQYK-^b_&m_o3^FYSo+1H* zG%`uf#_6*o5pUJ@4n^! zWOeo4D{ud1V_Vx5OBc?Yw|t0HZL^z567`0t0c`T}_s<|vef+itty{^B=__nb}^ z8;iBIGcK6dw)~1}`(C+x3M$@EylmZRaMRZHTW>C2fZWA!aY}L4X>Tz&ZRS?r4Ea;l zFIJ=T_Fl91j=c}>{qK&MbKRQ+@{s(xzTi}TQV%l9t-=JH3D|9UxxF*CjR z?+2^rC9@}O*}=i&AbkO?O=p^#h!{*d&o?!Zu-%g-u6*+Sv!r=#G8Q9grzgw(pyhV^ zhU&d$JV95qwXK`C+>EE^-$EEkJ5S8#2Z;$bHdx9&%Vh91y`oNf;-PP%etPP#Z-S(m zm02cLD3GfHx zM#s#cM$YP?5}$7otICcNsWo>Zxm|HL&x&Vm6uMdE_Ml&FNO_fk1&cK+cC_|YC5uVE zR--GK<(o;Evrjd0`2^77VH+kCq5o!E*mthTzLBvHa+LE=t*C7PHWAn7R+H0TP1_& zt3z^~l0`NLBUdmw6Q^cmp1FU$VJ%omQn_n>P#L}($s6(NpjIhgOrdW(b30LW$Uv-c20I__SWpd z?CaSxSp~?xnniuY8vXX1Nd@R9G)mD=?36-ttIsw~5K%Gh5<;aGHi=l}`e!*}27sis z5s^r#mQ$|G#E(~L$!3fsQkQfmq=IXyQwpsZQkTahEx8jg5t9m_7zhQ6JB-ybqmg~P zA>(b?e`I#9d;3evs!~3OKVVemUv1F#uKQt~Dd#YUs;rGlIfP+XwM);d)7_p9SGn`QU;D7mAPmChyW!*6ESrnnl%HMt4RxHD^4A+znP6 z`Y*^LqY1&EYOTCNZBZaOEfXcNQ|J?{ z+lQ%9hyZUaYbS*SLpWA?{8%TLGnBDcON@Q=vod3EZljnBlQ1(f%GggzjQzz+CD2qY z#alBOZP}xw5YL`4*#%bLh^!!KmP6zVLFt(NcNAwpfL4(;lBru0y-mL zY(|x}GxD1FdBAOz1r|0kwb%5x40C?*d52ePQ!40evD{(K1Inu#LpNhmP(A^@EqFYM zL1M6(DFU{OeFLa~6|4ro6(Vz@!Dv-5l4^du`FJza++3Skv}DO(Fk%h{Bki4?gPB@$ zCR6Jnq4^bhQz6q?+a6pJStL&gh9dtDb&(`SVTp(InW;nJC*~Ig-a!g^d7$da6}oAM z63SIt(z8cxUS-Cg<49`?hTPCA6a*K?W-OTpGE62z{7Y-b{7bfM@>FsoeJ&N+J4xEk zoRsQ3{fDr9sle}U(%@SA?Brw|E;F7DI_^?xg%z|{sScKG@FuChTDkp?#mtnta%DlR9t*zCZoQzp?m6EJ(k#0 zS2LW#c5cMrGA}$*lYGBcr_{=P`&af?)pQFHqupMmfr}R|xTInKEbSL^F7LepPbo^Bq2zYvtiJ6~^TaJ##;v|paalTYS%=9zq6tL^TR662-PPk8yA zXHUNG)R)7EX#uyd2N3^Xw;Lj^66H zcCWO+&P?~hh>bC$ghkafOIuVF=N6}vdSA*}vWjATv26ryf5L-h+?Elf6XM}wliU`u zBoNnGdBFUX8JQWiQdzlP4b_4gqvARRx4+OS7|n%FEPCSYH<%?w3K|BJrP2x1YD-$3 zounIaaFS&yLwaRrlUP{Q^kZR_L1?YTY_?d;iAZG7hIf+9^6$bbiAs?Z-d^qr9Lf2{ zESj9vST2LW2c)ulrKeI;E~)kjmO%Z~i3UyMb=>m4QZEGvFAVMe+*Mnthfao3CxVW( z;-8vdhzQ&lp64XhLwQZ_v>r>dpQrb!2+H@U2Y5@4v&H^oi> zN590MK8Mp`arHA{N6_K$X|-|yW`}~Ia1b&K?+^HW0Tc`b;M}Q^aLCX4qO$?Ra=c6? z??-?M`Gb4_`l8Vd{c>}EzdV4@EihED0?qP>^Snt@X-)crv zwidT`$>mWWGq-f|!e>0qBV9E)3m2+_|vxR%|dpM-eXtlZAkypycf)J7<*9}G->r_XtY4YLQKaB z6@zJPhIs3%b6*zM+-C5pjSvN@D^sQcnT81(-*#FV5`x4-4$3tK6{FB-%~#^n?O{w@ zm6#F=;00j{0EI{>5)DC4CR6wW0Y+s~%RqstS9$%BXf+piXEJg9M<$bs2?W-Lpg9zR zs`~oDxZ50$yWOflh=K8Xd7Wtl4jfh=s>l%Qcm;>mk2+960<8maRXtPZhIN5}+uhVy zD*2SfN9tI6fYw&(8u` z%IjpaCfST=FQB{G_b_lTRRT5*fpW~;0%DUqXWR-W;r(+NFO0#*%C@sBc2T_Fn1q*| zO>Jkr5-`|VK8^+!&nK9N#xTRe=%2WHE(ao@7d}mffmYpc280AV)Grg3p=F?V9@Nhh z=B=N%VIDgVt|Vs@mUlPih|CK|zZiW7A5b>X4ek}(Mx*URwb~V_t81*Oi4=>?&E1Vm zglT)Iy}hgG9YH}M$RM5bA)P`IFXm4ti?v(R^5#apYf~$~1FtV%7isS18k2-Il8|Z8 zN;qO`_EfU<)R~Nw#*F!&yKjM@$3qQAy1OHh)s4;O#>VDyB85zgsb=BV0;$htNVuF4 z%Q8lT9*p@uiC=|=e;5tav&}LzV$Nd5Y)}V@g4=@frV`J~+VXhE-u>D|H~yFSy;s-m zS=E`!v|ndiH}|1GZMiDGVAk48s;9borp4~etXbtsKh}^B4Tc8u6^kEtGAp3`QSnpp zEAbi8dHs$>`|B$UIaP&gXgz!hE;{@>Z^vyX)`<7)b60lAbY`-tS%c1B_w*t7qwhE5 zof@;1RkB2M5e>{#W;w`#n*=k+dA&hYu*_Oew%BdvQ7Kn(LC5bJ`iE<(&4%9k8=Kp+8-FoyTgjIGr|YczEfz_dBf%Me#n3CYW(QXE)?l_@{p- z5rG>Yg43ov@YPix&bRxufuOGSEw~&0s3+7R9v7eX`6{)u5GNRn_usrH5+4huCOUaa z(#c^**{9Rm4)j?)Y8u}*#67>7>g0WrP97^6+aoa^V9?;W?kwTmTgD6Hu&3qieuXdI#}734 z6lQltFdc975isY~R2oVWZOIXer5Prh36?@$X>vJ9^rcn1q?lPLn~7>S#16|*m6cTU zDEVWv-h2>dO5rc0yoXhGmgTo6m0X?qyToSJ?| z?De`Txv^l>Oc&yu!VXQzMhf|K<5mvn*{_Gdh{tyG(pxnV_g% zy_rSt4Jde4xfycTUk{VNYv{uQwCrE#X;gUZ&g-8OS08@!Bfx;Qm>mDkq_9BQ1g3(^ z1+~kp2i?t9z1gf+5e{FiYlh9uPNse!wy=AE;q`}{3)2HWWwWYXV}8qO)$se;+oyx} z+y|PcP$h7oO@|Wuf+X}}8mZWE_I(m~lsqMc^p&D7h|j!K2~O&8U#|3s&y5M@9KIZk zS1Jrd11`prrR&PM(qp~7P^eUcT6*{N{5hd;OHX&;(K??!l+k-T!J%Q1avt$%V% zU!#~{Q(P7DQ@jj5`W_wqN6EA@rH#1td*oxlyqG7wcrfrBDPr+4%xWPEg{4# z*m8HDGV2Lp-DIXxuVajk;L`h>>`NHMz*Ys{GS7LP_z$^ad%cHSblVS*otr!DzN#9e zPrkBd`c%%&_iLht{&|u9bEhtwv!>-lO3UTM_c^$EmQf+@zF&^y$YIB-j3{?iDE%fM zqf}O^wX&20DOgm+vmZdbLtM?nc$VMJ*C4FZvn-3`J~W|G&_ZxPh|G`!y|Fo$i3S2~ zcH?>{bUJ&C#=$_F8Q%yP+j>}Ur@j~^K|nfC%w)XHeVwp#ezBpL!}pH#7dsny`%~~R zu%fU~;Z?>P@MkzS5DMf1oq^2(Zb<+J0-p|){VwIczgQeP`~G`U^~sZy+aHi}CxfKM z1oa0}cOY@IL~OLANvZT%fHp9}ryeP^u7i?ag(bYJjw}Z0dl13GsHEbwPKbRTZy%(C zei^)Sxh$M>1sSbgW-*!Fq2cC!xwh@QCe`q)UR|~-Z9>(qf!2siuXbC!HLi%uIM3tN zLH$0LUuU})5 zV9OhjVL}{9=sTyq4nk;gv&;-{OOw~aa2nQl!fxXr3K<|osk*bY#5GoTaXpdGtg`T~^v*%jeG|@g+;gcbJ6NTgHopybH^YmnF+7-bIt~ z{+;By8Das(&F)PYmt3BHR41=W>eHln4N zjWvVjK-p?UqJr*Wa^#W4y~MDH%ap>Woi))Q7FYh)R#HL#h0C1#K0GiVU{{!P|O1o zhq$+d*E_$Gn(n@icWN0gSOx3GQpR@dGrGxiT`_TX@mb4hC<|;XDed+$3!FNKvcRe1 zKaqBZpe*nli3QFt4P@)(4sx1r9Uln6o917~T%u88DR6Pw7%*i9Ab4j^!pkNpOF2hk zDT_*Yw_Qr{ZYygEP`u{s-s)AY(OU4EvR=bm6yopO}vKPQssuCiV z+%}Ha)~5VJ1!YRAF^k_Zsr*h~{L&>+m1>#R6!zE7d~;=Ym&aN#sH=jjdoLac4*coX zTg07;L}B#YiZGm&oN>#l`=RnrodIXCE4k+PVyF1hh2rbtTLS?AN5!*$XHRhfJe!XQ z$@=;!-JKondA@$CR;M?ZT)amk2+?}G-J{VAPOUdjom$^=u(;59&~BdrZG<#ZEz`tbdXZRU;IRZ6+O#<%lSC1wE%PG{veh_BgoN&Bfihq|+NeJ&Iz#WxPhK9y>jfPhrX zgoF?>UPcWvf}aJ)ezM1vWl*WK37b5&=7G_VnAsHbQRxh^mhg7=V%b2?bdK$H*vnkac-VgdHP|Rr0R$L5(lcJ< zWl|``2uNW1P#-gdhM0|L1EW_d6^xph$Bw|C2{!dSo?(y)ngF9x0seJPVE)2gjQ{qF zqsP@)VAX0UDVKbJ_>!h`C(oQcS?cpM$%O}dC%faAZ+y+O21RBU^Ex{U6rk_~k~8xF z9>q~P;+WS3`la&Y@O5x8Hv;Pp%jGI%X&*WDXPu`Ew5k}@2D7$MmWGr-(L4jr^@!X2 zay??jzkVX_L6Fpqet?caE~VHL}+QCH-mmOMux_`f1Kn81WfW zRVrKRS=2~9(g~D<4|rvZ`+C-RVQz61!q!hD-?u%~IA%fw;hbpkU2{ZAfO zU#HMrC-C_C=yA(+<$BAd@s>-4O-S0Xl`4c1{TRNow6kOB(vHrh4`#c2GMVl!wySFy zzPD_swmXyU>CR@mNe3hG1hN7>{+Bwekdr2Eiv;CyezO|rpqwGqJD*^-=|4I~vJpDpR(<<39Hl7{7-jh(j6C3SPx>ude(%ae|V=(!!U@M?52e_?j8PnJ5T z7)j@p{FAoLS{~djz+>i6?$(i`=m}aeO2YM`Yz=;tJcd^^>~I~X1>p=Xl2C;&?9K9@|Se;fYzY{ zD(JxTD`da?Rkm#g7w6)D zcAHty8VhFcHmCG8X6bvJJUJaW{*xw{7Q0Xe{;GgE-;Taw_moaS2CCK2u7(K~bxHSHF3Oru=_zC>+;6YR%U#{2c3k3+C z2Jmsb?NQ5^gC>`t%;we6GkhBt0TI{>XO=#HAO1XX@w74!G(w^AlSb4CbkX(ESEHXq z*{C!#8*>;FM(~T#fAY6+F^u3W*ef9zO<)8*!2E$de!t42VJjI%e!8aWG^pNMgG|NB)7GMMt3&QdMExFp z1^WiWfC`OY1vt;h=og30_5zK*QmVBDkHTZ~BqZlFmKumOOai3JP*uq{n<>? zK;2N`z6FO=8qElN=!nN}_IUhdk#NlWME4Z$f`J4HnN&gPShZPYd=dsYQtO)t#&KPmfbG0Xo_bF%+^tA%4_Xmh)3u^We3&0tYj#xKs0sy=@NebnYM8x1<%Drd`~_naM1VVF)S)p$57e&0yn z(~xw|h2K}DP zPS+3*pE29eAae}^#xg8ZV7_K9_=sMjz!$Z4t+h}^-UaYQDqC9>ZQ|3BNILCvZ1OTo zm>qa^7!R|a*~ze^9E)J~ZQ8H=zVc}$)2rOCyhq8jDxs28XK5xie+N&IE~B)_KT%ik zf3#8y32nlQ6pJ+_V@;&mEIw-tv_v;Bl+*k2bquv4Q`UnlW;X+wKqNuzFT^mGmGRa_ zXsydLyN|%=5%JJ-FN(j42x<5F==WMyK6>Df_s)3qysN)>EL@zu1OEBC5MqP%fAgPL zwJcwcm~d{z&0QHTExsVWf2VloS8xinuUYXxcg^`#3l#c){{CHf=Z)w8ZO`|_{sTh~ zoi`)R^oWZFa(0L;`+xVs9Jh&y4VH^zaUQ%R)pUtmqo=v^I46D|C%a&D!RX((W1I(c zfy)Fv=4o!(xFRL2ksx)cyj)!?Vqa-`@RhX>PJ1g|(|!rd?W*p+IBT)m z7;ar_bBE9YzYj0DX`sMCxkaJU7@#|st>R{F_1v&cYef}_Wz|LtuhMDRmErrIS^8+l ztJ%1rlGod`YB_^~yqpbmx3|JO;f5PmnN#&M#qTXRa+UZiwL&IShx8hbHL7K-!X&_H z=PY^QS9qiReDpUmBNxZBoFKC<`Q7O%BJK&bALcb6&!loNR|?!bMdQX!N!4Sr6JE(7MUE$|z-N;08z$`o zVj-5%ibO=q4B+JnnRrU_WJR!=NvOVD3Y6%qBt9&};hS#g%Sg@_ZnsOXS2*{a{OcV9 zo$@Mgqa4}a_Ou6#nu@xMlGpb+hNIn)yf(2#TYvs}s~hjl7Odh-@lEl{DYhE@e7O6I zYo|@AG^;ti_!UBHd?ZFVc^*6Sn1vUM>&2JmpjEMK(XuetYY`pX-HkP7Gw3NwM9!Yf!D>DmN(mHM=R`Y z&3a27gEJ|6ryW`B3jA@Vd1Uls!HOA1w7I+a;btapZ&uiC%{F`UY{ES7i4#l0Y<4ha z%aRMSW`v1QHgcR~rH~EPbn+zSDEhMoX;V#ZKVFXaD=`tg7AlgiK}!9QT_%h8`2gNP z70{TE1URXo8C^RM#KIfhWPxxqB(b#_W8PFp>hLf>Y z((5GVpgRl;0`0RF2x_eX>(jTmf!XZ_ctNGpaUs3hEvJ1JN$L&E`|uJ55|EQ&y`Q+9 zgQV6jUO`_3py!lb;th!D*A9A(9j}YuSp@fP5SOm*(!LF~OBc?r3gu;AP34gnoscbr zFFVzLW3OB$V?<4#xa2ApZ^D`AqQ`g#no@Q|M5L8zW-MBSgy_IbhKfg}yesASD8{OxQuBim zj48mh9ue_lxlxvv`NPyt5-F9?ZiS@P1}Py=0(>lHv|uspxGvg}ibXp#(I0;pk;|0E z2RTL+-D_=sV94d*t#`z&G%n=D=K0xeOFD&TNQg&+D{9CVB00Z<4iy>hihWC$*+fp~p`QmSzv*+vHX7 zVTCZei79OAt$-CKQw9D?hR1@2-QGfuEPJyg?9x@Ei#ABeo&Gmi7JIX2&YV4&jNuat zUy>|=7}gah`?xN(C+&DOGqgah_F1lp8fUzl)3EE!04_&RgIs6Kl)jwQ&_7mY&1I5!6u3p02OmT8DJD(*~>6 z)aL4n7Tc08y^pMJ-e@Xd6pYXY+aezXV8E`k7BJoj>$75HR$m+cg$ugWm{Yl2-Cc?{ zo6CkVOx&v_n?Gh$gGnM>#K!ql5?|mo|D0@MEK|qI$z-H({$vNIwDkX}(*vOgnguCQ z0;z1TB?{3*S_lw>I3@=ZsY!;naS~?m2DX?v65@f`r_GwzGBTzG88ON5&Ftdt#mhc9 zoUQF@X;h-C7j1jJl2r;>d7--FFRwNYqmME$yEm{Jh5i}7g6FTYnRkrbGOMqC`ARMp zQC}eju3h=N`4N}iq$bg`9+`|+)WeMRuAApWt1w`wc(6-+z3DACx_O?-Y4q?&UMVxx z44=JRCR_#|-q)%ApVy(qpP)xC@4_l@FD)#;3fvB_Dg|lmpsKOt(#otVSwvEKV|;Su zn5h_4M?n`$pua0QhcXRL!{m5_K~c{1QP3d?w5J4G+vp*FqzUDmux^e9#&mO{*7uja zbuJf;=WvY!UyXYQ<;5M)}her;{yu5qQY^=9XjMj%IE#isxmVhe2@FS@G+Ruk3XqW7kvI9A4g0s zHR%F*6%-Yb0^kG=ahT)8FrSWL`Xx!fR6!>V&L)44bC1n;FY0=yk*ht8Y z_UtXSbj#I-CPWxvapZ!x?rEEP*V(n_1l2lgz-3ni?@GH`oWo0Jiw`tZ)jxkjKGXBW zwXjxvV#n-VuyLffGN89;?Tf`wTej7_Z&_h}=Zs&#o*qx}TJcx3%d?DmgbRQQEZW?B z3{;K&QK&OJu*v}Nd9hZbHET55zeHh7Q>|sAPIsk0XsH|s2A$CX1E?8rDtT>6kKt28 zHZlzsqqP8R&=wxDwVI$w6Vq0kIIKF?9gz!eZ$X}nox(eOBc7kZ*eTMYMbeM4{PLXs zxyd;uBr}w3)I5@r^edX=VR91BA3lmnURJ;_1t;K{t25LF{D_eEG8J{Z}!&XUmcAil6^>L1VHxwd;wWz{lZI7}@rQ zIJ%|f&Bw%Fpg#n|)tWU>bM4vn;=}L4^t}i0iQ6yo%mRkwH7q^^K#26H(HI!MLM!vx zl~Aixk_0D}$!C|z>{fR{#*M(M55a%~-#%grJnn{swI0@J3vNsvSv(2ZvkfuQ@cESf zIV_=Mv#qU7G&I;0p+8e5RZyXZXi`;fEPIUvmg@ulRk|CN&&j;MSAjabM#`kQsoLKJ92w)vTJ5f!R{hCOk!0l610F%ED|kFeYjzBnwOIQ;1duXRJ%S2PkbY5CLJHat@ED+> za!6G(WKeNQvcOa~#!n~7@{(3Wr>Ju_hS!}?d^#24eg5&z@e}$(2mIyWL$daPQu|K) z9^JZK{PLW2M{Zu7e(W2Y*4KElMs3!vTc+g3F_ zFtmG0)>bnmZ{0qv(27{M3!&SWZny`Jdz1J&JBSIO9$YTe*rFA#f|Wcu1Sb|4H3JA` zjEVud+?v87oYe@hSboS~dBC4hI*F*^!FPeq#+c=D)ey&-L!r9lkjMFv$6O~koQ1k% zEL&RJBn^4Ts%4B$119&@6R}dg*;5Va6u<%iEZNcX7U_3N@z}hKC5xON&*~iO=M#|m zDU(JQ6m!Ly7jD0NeeKM*2ZH(aw~8mkD}S}}u3uabXsr%={8hHhz_QsJ2V4Kj8Y+Z% z!vz+5e93(8V~M)-jM#B;<|7BuhAq$dD=Vr^*2SqTtlhNnDY%JrSH`?+DpLSi@C{;e zJTBOK8z2;5j z-U!l6>7bG3u_9Vi70-*wNF&=J|AO!tNpq_ zM3{HYX5Z9T#otvs7*5XlKg=fJZ0!ROUV2Z&y>Ba4UKWWjh$~+oY@ON)5!Osa-#&eTM-}R{Ic=lhf1SBwQqWHj{~Mj3oy* zl8e|xTPt7w`@6g z-81WEZRY~wlOKs1@nbmWHxNtwXJ2`H*8^{gFEe5B#&6#bz3^rZlLnSm;L}VLRDx>3 zrsuKjF~BOig*41VGwb^swFW1C@wHCR{lOiw+Ocu)syi3ry zJXkyOSWGSt5B&J&KY=M;tt7LeSL>7}j|M`Qpn)2V#YOEiv^qe;*ilc~ostP)$p+S+ zpf;BXbt*eyxo2+}<#@mcXijUsju!HRa>Grt8tj}blnJL+8}`jj#Tft}*UAcetV%w;hPfff@(zg-+ zC@i30^(#p@82wq2y**TCl$MQhFFlD2r8jt4>0pu}sQmane`TF(L3=uN_S$B5bh+KT zL>0*Fu5Hfsx8Dz2&ua@;teaUYJ|}M4eIr~|thzU(yY`v|9nXocmAKR*yh78!w}fFi z;Z5?C%~6nh&GUngN?F%}gC=?QCU0Bo;g5t2p3GD?63& zYUR}qglB?-TxZWvXHof4u^|}DC5GINkK9}XlS|sloGVL791}b~YsQ#YwyDg!h_nV` zrT^d<&now@8hiV{;b8g@x!L+P{)dhqz9Lya^MrU#W6V&|wk(snV83|r^XGnztDV23 z6)s#jV|z_UO=Caif$P%jl)b&VXm8VNOM@BS8LdgyFuPy5Z!(8VZ=MfT_l5g21N|OL zOQOUPOA?_M(~J@y=d%Up#i~6jq#6MDKh9$gHgY9>#PI;VpaxuV3{>OqOxvA>cK>Go)qchr z^$lowSa|^Q(E;A9vXBL^2QJpBJHNdvwW7%Q-mi0k)E5E!w- zF;z$agqWh~5YY3E0lD&$N(dNhBcN=MnLE( zd-n58lBkIIq_LK@gBFyvWjHeFk}}BrUgaKLBffj+y!FeDKl8|zI`O;P#eX(8UieQY zSl!ChUiky@u5Fu!-+s0mE)`dQ09Qb$zoXCxZ`pedp4eOPSeuzDEYmC$ymF`9iATFs zt21l0I;7={F1H7;m6f^!Mk|liJfaB7R7#Tx=>RKep_ZPTB|d=X*+%)oBzrR%xC~8X zg{IPx>46!{6(h0;>N@9&mck`Bm7pc2iSooo(6{!8?>s+uIMJq(r@UQ**G_NR_h}82 z?R(%Q@xsODG+lM{>SejUj{E+4Ze26n_27zmm;&~TJgdQ@3gF$l=@^LPedur%!dRI& zj77dm@`{J%A@dontc(q@yj}}z;Q@uR%8mho$|@TW)Wq9js(PDuyZvuFu2woCgM3@+`xzv2`;aJl&TyW)K?|I^)t>X)_;0Hp7-hdUYbXx0(M5A^9 z(viwYv=V9@4!cwB3`4k9?KG>^&S+Yz9kfTyc6-zrRzo(Rh^FmYHf|^?hds8fGQ;d8 z@kHFZLVP`x>@Ytxu<|>|ANJJ@8*vG|uK`gPl955eqBH;Ok| zHA?f5<(Iv^1ID`hw0pXX;vEN|?w5ULt%m4&zR2HD^Y?bMES{X+(jF4eIH$DgvuLqq=(5`OLq8k7$B$OP*6Xh8?FruguYbUv zCmS0JjydOT5O4ZIzUs5y!ql3Lm+XpsoVxJV%Z*0DXhuI^_hZV9fJ+6R*KTqZ&h-tW2l%GoO+JPFUgXT{b{FD5Q~s&UQF?t-(QyndnW()WKXzIo)x zMHfB;FNoXIKM}tiys2c4ex1FeY>o!2MmK?SnoA%GJZkH-tKV82()*yu{$!s*q!-X$u8~-sWGTz=pIY8WcO3h z4U!QZd{#E1$5J-ZkRbZ?BCY?YE%=DrR{W5=oXdk=@S0G8KVmeQdYw*FZ|{a^2&f?`;%8$rP*5T7Y_jlg4qqIp^|KHS_{%#EOb3Xx{yEc#DZ6un#J zZh5E=Bhag@_@Gzo4aR~(5mIj&!XkP%u>#nvu0nTLXV&Y*U%_QNWg$h#7V0a-$5Fo# zKGR}J8h{mxjrj{dKY8{&8izvuZ8Vula)ayr7n6Kq3mg-#o z_Zf=W@w7+u2~=D=e5<%k{L`;te7L`1-{lJ!#o`Gmit`tEBDO{UyVOKmIp0xNgH}It z*8}30qQ9b|03ZF!_KR8;i}NO=C@M6Wqn9J@zspW6r8pYI%kZ*)G5SyTOa2I^k=>8l8b>RaO4=Ujea8NOqPOD&>IUh!dFS%9}XHp42{DW z->}lF@6+$pGkSe6o|gWqDx?d;={TdSfEBjkilAZ_fD5D0OdN+6wWgqYL&?6ODMP<0vOGk5>XO8lp$7Q8f;XGF^UaR&XpV_Pm=36OFM&SlO$@A zu>BD6$kP%!V~s{FW|kI(vq>dT@#zsHP8i@LwRTW#sj-w7z=QC>HFG+ms%)J>;Zi0a zeB*~H$nHA$((IrUDx4lJ|ATiQ6i=ToB0HS@{oQuKQ-r z2Iq%UcFWblu?LQBB0r4J@7?M9QuB_1!QDsxqcC#k>x zA@uHl?DCW9ztMQg7(NWp=z`HtWan}o&;WYCA)yx(T3Yhqu%~+%A$6UlCGBAy21mXQ zwG|D;a4~UOUepz%#hR_EVzs$RQ+C6=q3wCGwE;98x^txpNFxao)Rf3f!_;B8gczWCW^l8)x#NJpbJS%WQGk|kNP^QMwCr<3d*hw6d zgqS!^LJTw^Wl9*sJeHwAnc6ahp@FuL2Q5Qyd!d)MKq;4AYG|Offi|TB`1rr~Ig;%# zw7u`Xd%y4hy+^R7b95x_z4ltawf0)S_2Jnog!IAQM&ajn!$*&8`>IHm{Gn_k<;1>< zT@9A=7i3KUJABnu`%g6)ja!GEUhn$YZm@gz#KhLNw)$8<=|Y!a?aGJy!z2Y zS6=vvc^JoE#c}!@SKKemD&!Jlu^L?RfcziP6@N4eZul~y;y=6=p&1ztE*ps^jk3X)c=_{ENcdq~-Y;E@+N0}etwF^bLbj)8%74yVKF?8mUuQfI_j z)lViXj2m|R6=1&66f(!FuRh6$q%N~o^i>D&^jVk42NFOkrARAekgP{S_^iiyYKt{?K0 zL^?zfS0HKp4CnwTvGSh*9Ry9FiWvloWoGK2;!S^hn_3PCYbmdA8Pm?TjBn^WcyH&) zIOMiO_Mbx`TnQZu{%L!3WOAE)O6Q;3|jvo zDybActr7(Lh1S#hwg{WkcG1RtNF5R(%H?8`$|P6|AqtK?3eiXfoy9t^wb)Pi9*@Tk zAJQFuyT>zu(a0oVw7)u&xwga4c69icE$i!BGq%F*q3!-^ipg}eVVJtMv9WEemWhS( zraUtn%~$3%dBs#jjd!g+3XHt7YvoF&xuM!0EiaGKc1Evf1~8DpJPk~g?m)3al_uK} z4I=}$ked!~U(}0`q?l6s&O3Fvf=h#vHMtCWmWVDm)$)RDNd7bw2~>AW;HY6b;{TIW z41^{~7+hlCOR+yDoMyy0=NG*}WXu*Bu_cD96i9H=OHxD+|2AP|G*@)S2Ez0m7p~jw zfD2RQ(yh;wsS~X>)&7h6zHzC|Lj=4R09wv)U3I69ym|X;U+En_r?xB_H7ZN|<*V^l zxw`MV-ob{Lm5Zzxri&w?8;{Os;aU;zKrjXchPcR6+XLiwr;j+7R&c#^NFd|HMmusZ_WE=b$Ra;o40!8 z9fAH(S4UYu$DtJ;)j6}A(;0y8CaODHI#zc)*gK+5GB4tcLgq&ef(>}uE~*HT5jCCQ5-5AxET+n%H=5J_IMNehGj3?9 zIQj-$mYy`qFIZM~v6EJqqT9QgKaJ;cpFD<}FB3iy-X`tiQUCH0HESD+nFwO9y{anu zwGo24%)!#Pr21|H4-7V1 zmEr8HR+}GFOsVD8u8_;BYeir+(+cA6RaI5CPFBhc26zb>Wfen><}A7wtF5ezm9uu8 zRBa`0{X}Pm7JSJQC>W7TphRNH)tFi8N*<(sASKG9`K$#6wBbbK{_#X>d&!i?WJcPr*ASXVk8};pf8J!Z$-V2P*&FLgKBO9vf?_Yu1_F zeZxitxjgZ=`v;C}lru8YPv@F9?#wsZw0$dFYg#UN^t!9gO*P?fKx=>Z;X8%j>U6Xc zsG*%#q&EQz*w{4qg3TNxl{Si@NxVC<(J(#$b#w9*p-tHJb)VhU`1+ZbPLQ9kdXs!e z$^l)JJ9vxLs*gkhTD^Y47hrw9fKMOLlAa0@%}^DbAyN*FGnS7`kyW@k@0qpbT~j4; zUv((p(^2n{5D(fx0qa%6)deSp{3}TjvS2z>ml-rAMz7p{imdWdFI*|H{N`HW zUh?~9XWwdN-Dm4S&|b?&jb56YER18LEsDmcbcqFxUE9n9pM zr82cfrGqm7#r^DgmRb$nunMdJ+snt5dOb~JI6hHX#a32U;eiZMS%p>Ln!LSo%x;!f z=@jZL4qqWFZBA!ph6o^(@*>KY6@B1o=wC_d2zge@iYjOZ0~JsUiFxdz8zrhCs*n#0 z-wTIE2?~_UMFODe2<~yC$AJRRED~Li!g7E}r42?2*kWh^J#MPA!EJRWXq`=^Vknsr z$6fCTb93)aZK?Jc2uG<}p;)h(2Kmb++9SZMm-rE$5h0i_r(Aj72Eh(`E z{Qe0m2UQE#(bYAvc7R>Gb|8G{(D>dwyLWGXpkr;9HNeTbTTQ26p?oV8;oZBdr&Re< zwfR#wp~8eTogXLi;k}2*hV%1h&7PazH+2Aa^CgRE7p%D01bAB@xJol>n{;FHm>~y)rxyL_E1HY9i+= zdh1e8PgK-}UJy-K;Rq_Az(nHx2*3;JO%k>#0S0(!sYDXJkVf@;@T~++-um{_kMWb0 zp%smZI;$mIzvGI>c3gGM>22{-CapAQc|F*C^X=F8GWOfmjAPx_a>oUnNhepi=!Q<} zJd1PP&hrn)uW&bcR9EG!=J4SOFnIoDyvsJeX|z1Zsmyg1nVyFFG4HC(=-ICJ#10ic zcz6DG!m_5^$a?GXhxm(uzl*QVR5q{Qc=S*&tKId^Rjmml$*5GgN(H|5EO(_aJEY92 z2!w{AOQkTss5Hzp~AhCdJWijR+jXRgPLkjW2&O6GrwH;CLWi#af!%EolNsDaK!m5tW|HtDNXIAwyb?MRh1CQ99*-}v; zZSWr0j<9M}fCT+`(LE~E_zg*ESBaU0w8ohXQnt{aA*4WCu)tCvChU@)lW{7VO7Nmt ze)SE9SMS{P@s-{R=aGB9^+VzMcZCOqx!b=TiB*Oe^}60Wem8Ugzc)(YhOVnt4o?c& z%Ntf*ewHwkX@2WpXTGwcqAS7ocfIqy(@$gJuo&h)q@Sfquo2+pw>j-juf4Cw+tcS= zHZnpE4)&>3^73+TTiY_8&pMrszMh_Iy-wEKv%>34dwa6W?D9S*sYqh^fwp{Zb|gR8 zn&+oZX~tESP;yq2H<#z*5NJl^Y5RsypFNw_ndN@^O0~Yq!JS z<8>~Z$fntBHeF1`S%jFPZ-J`3KC^no|3x1Zky)dibLd?tfS9cSO(Db}-Y7yVQpF|E zh{p4~}&FP9o;&!N`hvY|Gv{8m%w*Hcxqol#Ovoz^V zRnz!hP|-{U54dT2^Ux)`MoEEIyM?fD>4{jmR>2sx(4~~)dbO3X#)!v-3-+G-T1S+1 zm}E*Nha65huGX_m=z79@XNl27kbX)|kkDGuD%%IQ32zARneiOZF869Vjw~L8kVF(G zI)ja1J3s?}=6_0{c5K=QKqca}E7a!HIzph;I4;cmi7m zC4g0HvawisPtWSk&SorBUcNd|3U&59yh8#ux$@@KWN&SNvl3oYXbi&=-6|E@mE!|6 z(VOp>?a8m0>c;K)SiW}FlP}H3^QkFsJ|WMo2{q?*PR&ugfj5cRg(>CyPKL79)WB<6 zsaz4D=a?LqTT=w+g&Hm~g{}zEr7eJWBotB%i---7mpIUh^3|)yn{#Y)^Fj~XfdwFf zdV?<&vA=^rjG`135l93C39*C#K@cQyGH)TFrPwq@Vk>&-2Bz%Q!j;R!um#O>%Oyhp0SGMFI350zui1pCTB>aVXV?|u!P|9 zHRS*TglFF(jKi(9LHwcQ4ZyLwp*>Ymy?*0^7q2y`_X~f$WEERP2lcP^7=#^tT-dEd z@BqpN{GU}2y6n05ftyXc*h(KQBarc@I5ngH{+s`gXyJc`XyIfAlK)rc|9@ebf3X9x zC={jQ^UoHsi@|8hiFIIq;}r{`=xU@ERjf1Xx9E)7Cusn!_pf=o-kAN8Aaxr8=26a? z{lX}<%k0d4K2+U&bpD}7xOlc1p>%^8-5=*2YJK*9CvYvo_=Tu-_~fv4_;V3!fVSz1 zVQcVzEN=aOB2fKb4^3kP_O$oZZy4m_`o7_$H`JNk8JFi3&p-FG`g%SGiJ4B$A)P@$MU7K75U(ls|;7>&9k&Y zZpotp`ua(?lt;~5^@c2-o^-G*yp{u}pSJ)DDvi%CardJrFL~!e^eeFt{2GGp*No_d zEe%U6Wbycf+rqltmPJCSaCmXC7t7=e4PxPxk|;&ew@`NnSG6qIK!_!3m|v=phiaaK ztK1|;t^;tcbreUUBGsUbxDY%i{7CquURAcz?*5}0oQ3SsOBA!NFa^2 z7}Dwb6)QRlyA704t5vC}qw_DL8HH=*HFRHJcpiYy`8sqU1AMtaeVeRq-X|Z%$;>3&&&VK>S zPm5rFsJJU3qp0zYHmGOX>T|hqDLz{i1j~|b39*17E=C1W@{D8!7WXHlZ3ZY0@R1o+ zD3YZz3h}xBZ){E6K~PtFRTp%wIM1R}GlX7mz;zn$CgFk8g%dwLXYVNK7>^WpCRl8Ys(;t1|&IA;h>mbbDMR~AJK=74yc8et!2zVorIK-wHrc&i}7F#yzg3ueF zBngW=M|l$7xEz>jj^cmfE1XV!1;{t$qX8%%&5?XrSz85;h%+>KE23RI)fT(2OhomU@NdfS>I^DZjx<6ExK#6i&Jee?gQAZXr*<*xn#vPv%S-Pdjv} z51P6Ml`>hn`Lff-$kwXTmf%(E>nF#x@<7P7yD(`Eu* zoTj0xWm3fcbHuTZI*wrOLs5eMl?7H|N z1E5CO2@?FX8Vytcj|0Wyb9)~MBU@=p6i;Te(TkCUGpBCAokvU?;t^qWCP5N$>m@Fcukp$ zOK)bAaju6T&<-cmBTNI-BR^_0+N2#$2qsC0A#faO5lT~X-M7JRaAm-)HUX$5WO@zB zx+9;yDg4!IG~?{fv+<8Ea_B4y4KV5$s9}t>GX{^o4<(f#9cy+2EAH8-<6J6uShPww zBZo3L1-kj4b9%i>MPu0R-Q(-lZRqds&Sv>kDn^w+^E8fbHlUksbi-TVO$^;oG(En3 zoZY^Ce8a|#<6YfsS64UR*f?GpgZ^NwvN6VYZS3B#ogSxDHD!2ycYY|psxF^|GI_?j z{F*HE^QQ)CaMh{#_A$32UpDK2*hJ-)!}AGjyK8%HJF#7*)MU3K0o;zRMDFN1rwi{w zFLt39yF&0Yh^|m2Vs)uRQd!At=eoE`ZhKedng38K6Ou22EZ0eL`Ndlj3xZiFw)?Db zih4`h(~{&+XH2F?>Fup!et{(CDhjvHAkVSuBb>S z!@ZKI?z#8gL7W^(g_v8CD{eor#_zJlb%pR@v96Aj=4Q_Hfp}_i(yc%Umizu%K4lnsB(7pw}!7d1_MsK7F;*12A>%5T2 zE{H1*QSpb=d6XZ^Vy)OSd{2MvbMVF5y1GoDqQaR>wvG{mCT^>9W=J*_3c1JPohgu- zP3EIhah%Vyvx>ZSN+Y+mg`75Bv&CS_Hc!T6KxQz&x5y}4Vbj-Ej49a|8)s|#%%<zy@#r7v4 zm8KG0Dk0Ml(%!MOLGQu;!*x#W+M9nNyemA=d3h-IriCDywB2r}GCf$cb$Ms5v!s#I zEASGX60F#A#n0Vx?jp|aZ0_}Z=c30h72Xv$=I_1c4q-;8gFX$VByq*c6d=JfKpxH! zIBrU8S13sNnKc%xHvXe%Ul-PoAd5SvpaNcnlCek!p&TOi@K7GHxq@Q&h4zMLUaW za{G!|n_oUjMyY|YH<$xd+63*(l6eXEz&jYGp-*QB& zq5a^@tH|?m?*1P8!(V;;hHqUV&c$`N-7UPom?V)L!gn-1_!W+qE9}sMxq#kqy|7i- zb!l~d?w4nscP7;0gY)lE`{4w1VQ)Nv(QtIMdPKwpeQhU#bjSE0)RPt^uhVChA|tkv z7_<0LlCF7D*9J9b--POa?^;tk8+HzGq_IGpW^lmkT=k z?OmWNST>nKZ_yZx(8UCq$a_2DAl`~T+3v}<7Iu?c(dJzy&Wm42o8?7H4&+Oq%% zd?;MZqhBammzcQ1VTr3V8ZMA!1re?*qzEi_jYycKswEV1_jB>Is1V)7lRRz%oI3I( zKi_Rkkq=gMpSphQaJx>aQ;;&;>ePGSy-cB1qg+*24N%p|4fdxl72djEMbjEn#chB9 zvQLCx3oDNO%k$#CplbC2@bIr)_)R!YfT~eWsiusXrn=o8)}eq9U+$dwX!-a=0QC^S_bjsVb}=+YG#XdCmx`mD#n`!_A}Q z9@{T^@E)7X)jbjbfj}pk!OqU^9eI$?XS)mQK;*rvh7V*4P~*yWlgUPIY}KlY)>Fn5 zL|49XwlhD~imw^dGo{e(mP0?WLS8c#%GT&MiUAwFH9KfQH-oD;;)9cJ^{^UOo3V|P zYBna$F8t6Kye<)AU#I~!#Z_0s)NnOp#Z@;{^a~SnnGBrTp~dnS(KDElxDRI*{DPuy zsBm?6k7sMxY_{fep#hXj9Y&ed3u|!*8-kd>*ee8+C^is1`P0ad~?TvzkTbBhwz6wf7ib;n0CuG!t=s!uM=(&=D?p>mZ8?|eNZ zqck*Gh!^TmxX}6|qIXEAAqX4=3>gxqY-$}v&;18M1AJ~h-tf{H?_7Sru>8J9-|dI$ z_m25bs9ws7<)8xzp1_*mRGtd`#Ig{EkvbjI*$Fy*9uFT3g(hNEY%EqqGR%aBhi(}k z3snWl%7kyM9Vv-+q$Jvrl4x%?*YKo=A)WcL8hkc4RfAW~mTU9QS=KsLo;S%o%R;zYQ$THP%w?U;^ zd1=MA?7y!L3a`^U+RpmraNA!_fE%vfXV%gxqww_x?Q2gzaZY&&`4!j+GHNqp~IL??=z5^h?+tT~+g&!;NH2K3b_nm=D zy9^+d^ z0zSlyz!)9cIhh!G5ovT(If2~%okcR7+)_q0G!q!a;fQaAkckD)QgydY+_nMULhU4q z;t>x7wCg5zoO;n@?y(yl5N2)}UHSdr+%nNpAw2HiaM|d}eX|fkui3@OD=vBY4xsz= zH^MbH4&McS1}cVW!YttVH-xv>ti#pk2dgmx+dcm-K1(Dq9cIP+*lAB-B~bXR&Mamu zMOh}iSEHp()nqDuxTg+~XEdq!e7z|AALR*wv!*5b^L>4Dzn7|~)<&AMp9 zM4p`)={N5~T|Q@^fa+d+F)Wp^(+doH@ChaM=k$3c=Rm^mxb=dcUa@9!&xeQFT7~@S zYnSI*FTJ*5^QNns;&JeX;_&&etz5MQtoUP3;>J}bo$s`oHNwoD8F{u?z>hFSM{C8{^;!3`u2(Q zmXEnwplEN0Kkv_!56+zp`^qD{6ixFj{#;G)Tn6VAgurx#%RnVZX!mE5XT6T(2wv8Al_mCyknwBiqTKZz#06B z$nP+dL)l7Q_?i%3+yhBe@-G!CE?5y_Qrmfmh4R zIenFPWFiWpPI%6Dlu@2Lz~NkhMQ#R>KBEjQ1hb(4WHJ(S9->`>I9oR@ZrkJ%)6;cg zKv>k&Vh_lL%|4`_55hmxQzjr$twXG4gvi<_E67i=RhUHUvq&%|OQelyA}ukq!KH*8 zUolZ#VzDT+_=N5fanu{s+hX~YPv`X?HdOpA)X4O_BbW|+7wkhF zM-WCfWc^45>6PlN-)~axfO>^KB3IHj#EqqL51JGhX3_XYbRvDBS*^?R24EmZ4CiPb z)I6;rH1gvNnyVuk#9HzSf8qT!c1a?VKYI3-YB6*Defq6k4RXsIR1aX#;~;>t~p zgQvJIxiH!E)V`;#<5#C`R#szjv`kDo!Qpb{1zjy?+n;RVukZJqyXRPYq^Tt4XU{qN z9QcFJoqwOWmB?c)*gd?Sb!qh31Y4~mkIUtl?^RLhmYY0K={m8TGdEPNW2>ummF49_ zP8;iV+H951avfHklXF2|P2P=oqTIe9O;LDW9X+Dv6z~}FvJU7NbRwyP3V@L|r=X$& zD6~`HJw==npNr-!>@|nQc6KPC6qWWD$PT%sUbhSrxoM2Zu?Q|QN=e!qD>@;?Jx7Q` z@hd1r@^l3y(+pjua+{nRb!MGLc=7A))rZ{GToI-6Q z# zDW^2&SR)+~4^)+C%>RWv7moQV?8z?~_4wZz^|rR|?!LiJ?-z`|^Q6&lZ(qLLhNeI# z4!;d~cNSaLCT4qyRV%1??K4xbSbp?BG7-klR3ZIW=H(lVy6?Ka0kQgM;J-3S_|3}Q z4Watl8bt0m|7YST!DF3pu4=0}izQk4bR^;@SflZNl3*dsOj;~MK0oX8`ICN&k1VNT z2_s2rFmABAx}>T+pKm=@ zuXA`VXYnV=sE_yIzQS@rx*{wk+?+rbPvoYLO4MRYSXdTj44Hay#->pm3o7x2d~1|l zBX({?rGRvSD@2T!d{&PW2n;NyO-Z#zH2Aj?TX~DQel-bKwJzlD@^m+8eenS+OUkq% zI2A3=s^a5_JhI_?N!R(dWtFy_mo&xeV)mF>Wvn=*Cj>5(xdyJaq*M$|%K%OSKwof| zpPNp=ck3w`t-A;OyiyG(?~GghWx_YT@i!-{!=<6Ld-CQkXnbFpf0vknD!Kx@ksr7? zcvBEZSSnP;hC*fALZHkNvXU;7^0Ra;cEyN_x!={EWm2rFbSkKZ8_Oz658!$5P2qvNw`U?ED+M@`PGIerw^@}WecwJsR+9w{%cYixv~t#HO1cCwO(K)jNPCk$97 z+b+vhqIW&U!grZ-(S$V`MkOa%c;l|3P$L$T3@5z$4N)1PXNng~qQ))fmm37>MFPAqJHya%rUuX-pPO!qtEW z6$^7CT2}Z5@Q3gwz^D-^Xba``D%51P7BBf$N8f!rh4*A6<5(47Jh6M~qwJ@ixsUQD zno_vDmtTKry16Op&>Fa!)|N;Ep;jnlB&{IPmH`QC6{g9k%VpS9~UZtRW zzgcB&#k=^qLsx>5D)&~<^q{ao_yL+%yXNfg?!8&mL({}}i8?Haz54_fMqS*j*)TE{ zKD9oZw3}EKtAg4osy?pa?T+lz8lXWj0gXoHKVF8;i|8HMvNAU*lMS&L3r~+)EE`JP zY)OgRJQ$B#DoZTxC@aHAxxNA~^C4X0!t-Snv|4dQuUA_X@DTA33qmYl8FVU%XsW*h zKOYdWEtgx(fb;r*S@>;X`jkVe)VFNL~7gmY@lSd;qrT( zM3mB9C=_`DlE7v7rtglHvEmEubA_$CM@zfC0J^JejRe14ir5GYM-g?PT$8=8p2 z=YwLCCfVF4l$VNNajYKez@FptSR%Cx;Kj&pR&dV|0I2lk?@Cs$Nq9QgJ z!0PgYxQli}n5AO}Rho4Bpv7;~4HkiJgrW>dgR2abWxtDuuriE94WJy( z>@gCM8gxxc#{sVOC?4XK9OiI4c*lf;bVw)_Ss;mqTZ#dr9t&{w4iz7qM3w_B&JXHP zO27{aEtn;;L#fYlLG|S%$bgA-_V`IQhA2iCd|n_igo-Z^qhq^Y5MFt5BEI)$*I!fX zwt2#-Gg|sj-|{?Ye0)tUml?UXzoW@z&Kgv~)M*#qI&sslcJC6dxOu~-r?#ASE-p0w z@h8IWUf~DAANu)7?VcaJyXxK7z~zm(8-IGR%gy>*qqhrjp|NoTSo^En=Y9?qdZt{Cl zdDjt-pYCE>McAN>98qFjCIx_p(QJk7Aq}ZR`5#3z4I~~x(Z9Z~4bC?m!U&rnglk zI8|17$Zc|0ZFM?sC3z=sftw}N4irZ^B(u1c{Mswh3PRqq|{}7KBuTYtDyR<3YC{{kTwr(<<1bv zv9c-NhYxU^-tToE!Sh}}(w}O*0v;u_EXU$3!=m$f=nNsl$|$n7Vjpv9HVa!U z(^9dNh%P>h?-q2YIF&<-Q~AY8Q)2F1!kb*&je)Nb6*hAT<4ithGW3UnT{l)&++O6mkrF+ zr=J%RB0K*3)G~IjmmDh8L1+31B)HU@sY^!C>mAHmPPlE!_^Uu2E+}E%^GKR ztQ8E7jBJp1vvPTNYg5xu1Isovur<}yLjgA%2)Nxffoit3p-Dc{J*aZVBi;Fid?Zd| zqxsH!?GZ|kITi2-aXWO+896+Ul(S`QD@(vZhwmiajJQ;atEMp8b#-&o(_%d2^G@hz za$Ukph8>MM+66BjB2$o8l zYem#jNJv2c3R6WsVl+m7*csmwA`Fe$O?R%S-4&t9>}?ZQRI{be#Y4JUnX+D0+2Zp2 zY7?g}z56*!6ZpfhCRk=5^)BJJ@r=Lc4p6E{E2>%c=Z5AXeWO z^1suq&@borOeNR+e2tFicywY-X~_;y)15c>spS=NcTQgSb+x`$m=T^#+VIqiIIiK! z=H_=A0zpuD|K9+iAY}%|<7@xP17&p?TD>iZ`W|!&4~Y_S2KHxOzeFOo9zX50kqDgp z$28jPmrKUhe?~HPeTisnEsDmjtxm;mcx*TMpO6kosh%t!pYIy5<8dg=mLm6{C?5{0VEB;%ghXKUlQB&EL+L{VC z>&9@b9qMl@k-#EYEw+nyRHJs$RaL4=47*ao<~zEY1X4sQw8W}GW;0r3q=Vw4(kh!(TJm+Ym%o(nc5np)q!|LLEVy1U0aBP=v?RwF|wjZUQ}-M1p` zG1=DKV{MKMKfE&aEXbTzy{`VyOBYRot6OviwWrrdY1*w0d0Nad#a8S+Ocd-nXd^g^W+8e_WglFOJz_Spcz`ajkUI^l$ z@8=y1YRkg=zwjF9g<>jRwMO-!ic~QRiK&I%nBsVg%?hPL0{Mc4 z`w7A-aNrBWUT9iTv}MJf7PRc7ac+d;+}Pgy%)zIoa`oo$1(xl5BF*_0Pn$Hf>1RRR z_Ud&F{I%y^R1dhlyUgaVT6TBTM=w0wc5OITC5|W5Th{rH@NICUg4m^eH8lu zwyc5|xecMxlDG{OE{l<8v{|E3J7}T3{z0!xfuUw7c2rXhPZJ9>wGe<)lm}C&Msjvw z7wN?<&aD0@xbYE_-Q+?0t22n1G9H(PcbQr=5H_7Yn?e-3*r2Cs(Bt)1FoecU zk^zeWd7V~^GoKm^&}8i(S)u4?01Y}ggsmAMrn!XSm5@XgdII|Eu6H5$HC#jubiJU(-b0R(?D)VAqOZX%#*o?IORrmQxzE3DFlFy2|1#;l^LE z*8SkL{FpF%>*&gGAQ+6}-MfTOdcX2P06aQz;j5_GiV@VkSBUN6HCy7P6dj%o*|;ON zP>F&~DhZE28i(21o zKBSh9cDHW7=D0gj#eib&u~;8;^H?nf=TfO?rCDR>Er zv=;2!kjQwBlnR=d+%$T6A|BO2bu%r+Xy77P*!~kEF>tE%sJ~jF&@Uw=15m+~4M^Q` z3Xy*}3s5J?(g~3nCkVYp5wfJ?X_=n}HD~;C^KRh|;n#|bfA!r+=0`8PVywT+lTrbu zoE>IwtaVm6$kP=`pUS+c$Z~pDvbA$FgAi;AxG9L&(Za%%r#jV)q z#os6J&?80@&8SQaE(fo*0;-anfir_P*>5G^!2{qPiLrKmLy^_kTOl(gbinIfV62^- ze+z#ZA_+fs`Qz9i0OX+P2kH^21ybv!rFw3{0URDU*pE0kS|ggYKvujrn8bUYQ>wEX z=7>hGz%bUPIis!3)ppREd(jzvE1+0{Y5S^SUcC->T5nKpM_Whu)NBUhB z^cL+|I$qqb$BMhDViuIlj05!(IzvOGEWOX+Vmyzosp|phyBnHngHE-{QZ}^Z5O^&> zfd`j0_8nY_Pds?`*nQwf?Nxk>%edl)01j65{49RA7=KzN#;3aGkK?P!zryF8;`0^r zGlX0e^Jz)U?-9iuKC0p=8nMSFm+({z%>skBk-vm*UnZuOzB2zl`ER1}Ok&UTu@~IH zjdZ@-)20W(C1_1=Fl?79O)wP^)OhtC1I_s3NWvWuylDshw9Qs>#FVdu=q)BU*|IU@ zK6sHaFhXFV_j(MZMHL$vp|60r4uTUmuf;S$nvANBsa{qQD#n4r`6^2kZK5EHP)w1K z+CiNVJ1-UipFXqb0LqI2W|VOn9$G{plGJ}uNFN2WxRXF1QF*~A1S7w>|EUd^oE+J& zTzAPelV4pHYx=#lwPNJq-c$jW9DMoW*584iCBgmPw?91GAfNkYIF_guu?ddi!Q>!O zi`B!~`ZwOyjF^_wT9v9M$(qdxz8=GdR5juV*94D?fnvR$%Z9^Vb0RT>xF@{MCXrUz z?98e#!fEy<>M16sA512hSUVj3@4&&21#9wR|3Y6dMsrPr9HVHpz&Esx&{$198sP&f zTm|2%BArDwBhm^L(?q9>NP2N}KWk|h5VmLqioF6(8fj=`eNj{mD*FdE7}2XDM$D5Y z0Dt^~(RjWMqHc5CQg9jeBL0-0AoO$zl@=T@F}3d3QG5YFp4nb>w_YO%+LRZ*b23OEA}IP6NS~) z(MF5aYS1Zxk|30{*=(q@hF*m@hRv3hxxC){qj5GGjT@}i`&($XrG=&)1~W$x9G15X zQhBq{=ujRrJfy;`Epb=WOE);^hEU*0sG&mPjk|~_no||TNKwX08=_=O(WjL*UPQZ` z6ZxG)YV7H`Y1H8%T1fr)Y%5$8=MdBLP*!~*J}=JC=d?W`Dtn?3iWm34xCOJFHWnsJ ziWSmuGQBcrGai-ne@VEg|F=l$fBL@P_qA6aY%hcgJF5~`^;*JPx7}AQV}o7;#aU%K zwTJlK$!0)!8<~N*)BZ4<58fjD^j?Odm8wE?5Y#^!b8Or8ajU9&OA~<;xP5~d!T&RH zR5TY4h)n#G=7O>4>MzYf1=m$H7Pu6wC(p%JVk6iMyq#zTJMy3@8YgN3y}j$!4G;Ev zTjVrBge^xw7q2z`&`a0R;T1=S!FJ86A!H4#s|E&^E$ihhDx0lWRWqW^xpL85E=T5$ z;)tLn92h}960TBh+JA!oG0S=}VvFV=B~e?Xq|OoPLV^ii*bpwZpZW|(sPK--<*z>MxOGg{7vt1=oTB+iX{}xXa3f>0Su-p8_J3pIqk*ZlC9K1xCEj7w zeb+A^mNx2z4V=2x9Ue*E@#lf$CBv;+IUAnBmFKy6t5%CI+w#cD4>K!`lwxFU{^*8m zi`8JEs;nA^JNC5jmn+`5cXDgJi*;({)Gw90Ys1o>eTndpnANfhJI33VqmCZS%RB0i zH=^CpM&vOxHfGGPa$*v^BP({KO=`_qj?=|6nGGG~Y=^U>-0gG@>D18uRjb`PXGf+y zE@y1enarDQG{AgE80gHP;5=5}ssQjP(ZQhe0Hsr>)NN`){kh;g;)RUp&W|O)Qk(cW|Ce=biNTem%l8rjEUh~{7b?#zpKHa)Z8?yb==@n8)erayT zn^TeNP;`F&Z}Wd6e@Js!1TL~_t(Nioolcsuk(vlOSmvD#Ohw9YP2MtV$eX83a$6Kt z2}Rx;hI4MQFisjnl_wv5zVamcxdNeL;`_T|S^SJn%#tkTyVDHwxw@c5l1Mm&{s6te z4arK}kP=f&svZ>Tzz{hnN(J_-WWr-d9g{ocv9mlDJleFmUbvUUUp7>H%|%!aRnX-6 z`#XE?yMAO?MzgPXvLsnH_v^V20vd;oEMX8UB&&9N{}unqWhS>)V^o=Ba?-WzdYzb3 zIzt>H?uD-THogu!j*l|NERM%?I%Q=nHpD1dhEXyxWhF_O?7=~^c2GBEH`7?+2u3Na zuST7~2@g6+X2C%ySnWUkUN>`+gf48b&!J9W3kjrR+ZmDXJdut|;>Q-;WFM-F5<6o^ z4jgz;Z*Koqqs=?{Xj_FsS$QaSS7%Elt03i8qsmItX1TXr&B|)Bn;$OG1TXrS*mse` zu<9kyT;n#YX`NDqd%Jy(Zt%SIz&GHqlSPH)IPx^w-7jzVFN}&G74-weZ~wwhfKS zpmg$ly7=Audo=-ga^Hg2G=BmNkSg#vMqunC*fs(`3Qim$ZXtDln!%z_JP41;qarPz z90!jNNoUJXIvfAh=gyW}{=9fLEuC%V8FV^M5dXIn2JF0tNB+-&_O@lC7JPS~w>8(~D9)AUb*)fk0$p-!J_a1<=( z_0*_(AI9?R0rq8-WjtYZ^C0}{86tphppuvc+scP` zfnE46!+GF5{5-?e;A;G8!=2zx{7!?)2#mPVU^4oR)kfNhdQm@#cVQG*{iupCGZ^{> zEH$dzhcP^JfO(lAk1>E@Y*vxLap#=$E9OoVf5akm5J@*tTo$UuDEu}ZoAjikwuLpu z-NDuFhO7Z68mq_sYPo?8N9zXz1M#X;#%yti2DQi43h#n6b^?C);s5k^SHbU2DGJ|R ziM~6(_?3&_c&7M`jbHYSwV(gO^H^%URL$s3;Yj_u;6PQ?@Mc@Wj=nHhM!4_`C?jUV zTAzRdd+ZUDISZtWUrja&9t1cr7&Heg&a8&la)`k7u}1+zDA}VR^{|qb5L{v|9F9i| zt;-7@jg*8hr9hZiu%DL6)P}oyT3f3Pc9XoB2*{|WQXcPOsH>JyoISmhZA^m-!lMUH*7i z^8wz|Y0zA@T%(d#Da_{jDvu|+V#`n9U{w-!;?GnVGh!j^9NxC3WKAjVG&qB=(nPx+ z*f2YbV=QOv4}BL37KfI_5mi6@>8l_05JtHuVG0sTnEX?J$jOR}g&Xzn!<@YHfb(T1 z*#m8a8ygG*A^#9qeFPQ?An=Agsr zwE3?+B=ns+VD-wBA)CWxEB)FzL~UnF+^jHk`m*s-Uwql{k6YZ0drM4qzmBuU<8EJ7 z*XYYx49C>MqxhTHv+&0UurqlNoGgMh7)&~|&fl(YFO{#+uJPh_X$-8!{s5f%BUZHw z{`$x1eyhT$Sp5BpPkjNq`1{q|sBa%;f7y=P?V;e}l3V!Q({ptTzZ;tbJEfm3{l-EA z`{K`D`lG>p<8i+^Kq{(3j>gNb6Z%eHV~Lg7>`sgS)(eDJo12pky(P>T_0iGQ%ho-+ z(vzF=8f~diGU@fi8@K-~1J%O=f{qZVAl3prd>QFr9i@(>quH^_G3wauINx!N<1U9% z8w}nR!q`vnUClePoN@^M6Gg?q7vrs;X5!FNMQ+l2XDn{b+zu=SS?@MQ#(?7 zMeXgi57jCT)PmY40Ee~eKHfQWVs5$^TiGea4<*$%1T5%9u@UWw>95RLb`DKTt?}lj zttj78Buf-iRk0zFLZdh%P$i0OYoxeK6!ob=3lqBYgv^){8|fiCCGB?>d_=Tr6ZkR% z*`Dwx%MU6ImB%8Xn!0kU@yrcAg~C6vwd|(SvubKUo5!qUJhk~v@jxaUv$4!&wo(t# z&$pY_X?Cp7l>3JttFB9Wd^J?qT^?B8@{I6{U4k2cd!7NU+nAD-6=fwZjV)O1E=`ko zB}GH^`^MbIaH8w5?byHbc7L!s*b-bFB!2{5m}!#SS~smwY}JnpfPtg zjYat=6^)+0>^Hfw?lF99Y#aiToyf!6IW#jQC3Fu>&+HuHGP>z#o%En?TAa>z(VtXM zOQEGBEud6-Dc`loVw$QBE-b0V=?fNGm~m2R7kBcpFeuVpAQkLgbo$K+(5NjP4Q1HV zy{hU>4gS(-%;(OHRw>O^&{SqCJKt9Spr<5S>Gf}Jj?iX}x84=0HEoP$A9a*gL`og? zTXRMe0Zm8DQGUL~+jzdUEEWqn@5uDVgN^*~;QpxyKfK>#u5^_|xl*F3r(^xvN>BYW zZP|#+RpGS|>2O_LHqv%)Z>Fy6ikh&?UBUYD2Tu)VDt!EtZR+w0w=0Y?xqb@n$Db!| z$CMZc(J+L!G)92ejxe99p!vbXKze+kVkQNCyyfbvw`{rkD&lr@hyEaTdw+gL#$i81 z*T8&OjMotMe$`Eeex~1}r1wF^_isl^_F3TFquPC@PfMY8ga2lbU7MS(gU(QLVMqi1 zB_BpDd7b8S6_q*k_lYTz<0~t2IedGrva%spQNgc`!n?|bh8y6M9QxZ{A)d-ZM0@4@ z_hlZ+0KZuoR*NmihOwR4dDuO?jWL-{Mf`y92b(!!nMp=F7}IsjDu;td!F#+qJ?!Xb z@Nf936Ro%^7^t+s9Un*1exN zgLl1stbEk+1fImshhu1)v&~4if_Ph?bw_#yg)($=Vxx-_GjlV#Y3UeOj3QRWIFY~; zq@g@5q^ZaVZ;(h9BD+$e3LK!cSh!m-4^olAKXDHAPn`2FtAb@MzXCTYDk)*GRwmbz znplZad0Z9BpLs`5*SZpOZJ=gjblKL;WxhmtLtVtG_tx&J3V_!OhwJ>A4JRG;Wzpd` zzU8STEg5}&FX|ZapJPEKW{nhjI}FkHu*D^XN5bfD;pob zxGU{4?Z0hm?%=5(Z~d}^s=sp#!csNi!#V0SOo6$eBSK+>8&wor)VeGogPJITxEs+O zToOjKLxCbkK@y@vuNN0#D z9etUdLoz_5jUWVWyvq5Wz^TEV;2S^~5Y}TPHa7nraW^>!fxQo_!P0~4rO}SwQczl&+m}g_&15e*hHoHuk(ZHIl5(6hs7NKI?C3?DY4&~pA9HU4 z9#xSw3|G}%df&U#>7=uCI-Nb~B%Pf=ngp`Y3HuHKWDBx`vMB)t5l~Q36mbC+aTFII zv>05*ZE!{%6h}ly$5CgZqoZ+V-jCNAmcIE;)vXS}ao(B#f1l@n{=luer@HFYsZ*y; zow~Q~sp>QrMlP!>-Bs)gyJop$fL;5WsnN2sw6~f%jbPu*1P9!+P31~$U9G!%;8ub5 z0q-N&LJpR4FvRWg-4<+@0Ljpl4Vc@qvjYD<%Rdqvp}9VDMq*l4t*+dh-89Q`e?yM1 zCY&2cGFS!tn}75B;G2gW!k^bCyV9L?H@fc5o&DH<_2h&H=M^?28G?rY{vUq@d6WBI zA`gLbPe5g1lg{akEA)v@YKIy$6J;G;lE}J5TZq1dr;b-+=lZp)<_hh~pZI2EUl^a2 z+ej5&0Vup0jm~CM^5 z3POj;=roy(aH}!>MN0@>6?_wRNFvc2C6j=NWFf?ikcFskEP}LOtLY0r*0a??8rZ70 z@)JAxCT8kwi60h14`1|E;*b!cKDQhgSA~`DW&BlW=T6%l;lzo`XJpB1LEHtJ{IwVs zl}jLNOUYH_UCDzo(ImRb47iA$bc;T6`nz%Ma|sDJWuMpJfcvn+;KhdYxdx9DJHTjw zJRUDqT=ab-a!QR)RsF zl%$c4)2VUsxSZ!~NS4FP{zWAd^FfoaxRo(WwmeTV3Xy;=nNjpTdId#Kv;a zc*L$7q?|w5Tw>9?Y~!#6%%;O+26;!afR0LmMdh{O9GAgpOhKtxSvUn}Wz8|BH~}^S zBziLTSv~u#5}~duO!TQdy-yIQVzbG+;015xtEK@Lr%X(>KIs z{tEK)I4jkB`*?Tbm&cEbOEH59q%F^jvrIB~++wuZFj;=$uHLBYsVSpJejj-j*q;8IT&XelPj_a&{#ficE>psWq**#k)#$sQwg<}6nW!7`Obu{Yfwf6Sb^|DNz zJ&C>6_s*zM(NYBYs2uND=N3K5pM-vrqfdaG=u7j^W~3Q2n;mFM+}rD8^7FUD1@r z-;Svch-QiA`~%J9O*#Ig6lWkUiI{9wTe0#(gUgVb?AEu`XP6v?4bGxv0hcqO!DQ80 z(sgE0GDt>wL4_fK2u{5&*M(@Ey~WR2GM zG$u^2UI1gjZI&^XiR4Hejt@LDdCw!637H0sHUknd)?xS)O|sRxU2+LUInXW{>+Qc( zz7Yt7XTa;d z(Yj~%?nCMUrw?!2cIZa0^Tr#!wc#-JX=9x@-8pgM^oil=wPM@il9CYhjbY5oYg^p$ z{lca73)fb6=t(st=2Sk6OnJbZP(O=*_aeuhtm`Y*Jn=-LWZk_-aySzAl$1=YSh?om8@H|5BY8(b z&0Yx>b?%8z4mb%O{?k+7sTvJYJsPa;pNx>|3oBIH8&toJ=k5dPl3Z1^b-naxVm7Es z|A)^;m`C*f?Q~b1OEK_43sYKl)i~i_2jFsgvasJQ(2)eAr~fo+I@Qx}2&ms}7%mxE zbT>tL{CL<(^%XHai&*2Av&-12!?db2oJ#0v#HEml?b)D*7=!Mt6u2h|Iz;_2GBp_* z=99gYeoi2rs-9ds)aNY9^jUqWd2=3FwAa+qo>OYjH}CP8>#SpMKBzG*cZ#)HH}&p) zJJ)A$PAyL+_FKH7JS22-+B~9}Tb8BG3FsTeLRs(kl_c0SZlmSxmNA>;hQ*HNx(dH0 z(dfwXCD;<&iOH@+ajID=&w8n_GB>w*Y)!H`knFSR`jD)zf68bL3Ht21-1N-COk2p; zrhGPf>dtG+>vBy=N!kbS>@hix5lwcRMm8DcGfz(VjW%PcA}f2mH7Nm;!DG~FuxQMM z#gf+ReeUTxyf^#J!J<(sN(5Fh8AfB8KD(@KUP*4kcSUDo&G-0u8k>*ilA73b3fiR){0O}ThaE+)efeimV2E8S(6;LZ|rm+5DX zm_>xg2V*j8!uUFI@ZuC*>9Qpqi`OjvaIt_E7nj~JttEHm;9&3XeqlXZdUj^}$x`dt zUr;fe**kqt>M*=1$#wB0VMwFOnD``KC6?5S>cdBtG*k|k7!St`}|<)I-0 z+h?L~M4$(IfS~2$Y)yttH2Ao8dSSL>#yTsgYgnEQKC&#k-tID&_e>9^5Th{INwD$w zWAfV#3tI9ViB1zXHeG#n;l4wntj#YWSp6e26MR-zYleo9$8Gc0-r1VAD}94y`jj@w zN6d1S&19{t`R>yKFj0w2Ot9QB)AOtAT8K!@P8(=JxoD`eanMyWvxsw9gGN&pbf5d< zkR$?fK?L{%yoCCR-XWTedVp&lzG;EqoG0l0A8Cj+dx%e)k}is?73C%*;)1@Hq)f0# z-3Ux})Pn90+e}X9Vx$ARR0oE>fDDFiVtKac4nOw$Ucd%e<>its$BIfzy`UD46%iDE z5mE<{EoeBvs7#wijV6c1R@3~+;D%2IS2%TGZu`H^PU-^BCv7OFy>EaEEuzy`?9+pW<|2SzhLUBJ4x8v zDn~~AQ(Zh%V>UWkh9}}zf2k$zR3)#>l9K2B%Hnk57L(0vtJ$4WJ=LTUv{$bf{p{{Z znOZ#K#tzNIMQgj;hCY_tbZ>**VNYMykxTv#ijClycVa@QIbYciz4M(W#iM*Xwdgv6 zkImbN{X@zxHa)ocTJ53-Z~Y8^s(dy#h|5Nmz$BFl3+GkR0x(H4(d*$_Oh;3yH^rNr zVn|H|wx<|Prc4kTKM}jT|ds7XP7C9bsra$J?BBV75nNm`ap9nj^1y{c_Ja_1d zIf9*e1s1Iq{+Vmzcl5vvdQta3j`$}9@ePfYZuNVyI;_EnZK+G`nb8tm(l$f+^w4To zbLp-dGWY&w!a7&e3wRsec-6*w{M!d{^ZBDQhHh5AS)nX#%C2wzFSGLA%8tQJ-*@6h z?09;{=SV~=`##i8feF3=jY3nl;1u_yscmDYwly`)?Z!L8>C3flZAx&6WXP(js=cRF$oxLPKCqT#5u43*j{z0X z-R)Um&KL@?Zo!0E3x-V{J!{z1{Uh**eC$TSAtS^Bvss%$3M6+>Js*lr%*?G7e|H+n zuMM&p`CLzL9iMvHJ~-fcd@JeY)1V~PRmA1pJCa{rF!K-Z_#^ZRN1edmPGwh0%xwg9 z>ii?`CkFZz2#!DFg`fIeixGjJe_E=Z)~kLHrpadBR-~c%%FM)!U}<^%%q^3{t8%<$ z#i@ao?Va}O3@?n9Wg({)ONrVneIoAIRkUE#)+r4ubCb&oe1XzcQ=gL)vdK3O&K%nG zz@)+Bl@AJQXJuC`eqS^jBtc3TotbT4o>!S@vFi*81(BSl)ZCO@@sp~JPw#o^A)vS9vGV?|gUN zl-qx~TzPFYPF)yL-cfS(NiMT&gms`Oh>ac)1QC`%piR*R641IN`oeT5MqP;>4}G?j zRaoRK^duD)C3!p@1^LbbPhvs7$DCh;-2SZcDua1nprEkQ)Qy*RA;H~^9}FkTj=vyp zc;C>WNr?z076y~@(!Bfq`_sGef#+fI;msNVWR&kxk!*$@2f7{EQTo*vJ+ z#8@oJ6RS<^NdmBzzd5U|t+mGJ|8q2eKNi&5*hgwq(4>Jo#9_4h-2Nh*k8RW{^OX<5 z{Z+8@wip9_q&cseP!!7{)`Uw03}kU%{V+rX?Vzl(g7kfEP2Cz4aI+%nYPI&-uo zL!6IoV5+;DaKm4k8}%Bgha*OD$PH&c11D%+ktLTY`pd3fxl@r6QWrkp>P467UY zX6zTFHb8 z4n}%=Z*T>jy67W-P;YyXf%){o;16Fx7nGI;^Ly%ggFUhQFWJ@!M~Jep4rkiR?3tlb zk$#$@p`K^e?`1W9DLX^sD5dW$Vf2c`WpxYLQf0-T3rTRD`{q>T^>^@$*FM4;FRmAxksWzZ ze%Rr#+jR*R7`_&r?2zq=*lrAlKCKOgPO-;Or-H##)VU#;Xf~$v>4E^U4?vJ3+eTLa zHav7~m$I{Y^&hYMTKN#?e{~iY8~(KZ$l-Owq3m4uL;j(Kc9YaO#v9(4ZX z{8=MEd-{Z4I3#3761rm}?CPMT?FlbG(4C`3K0KD{t466-9 zIkPeZ>LDxJ=C{e3y;yE4niP9?{=8cc3Hy4Fy!=_)%=s6FNUyCN^W!E6#Gr*b3$sL2ZKl3u$oWd6*y&t5*lTCfjVuoUKva5&v) z!br4hM7_&mu`jb@yIzwZxI__K^j4h?8{_!<+q8mi=?m8KP46yQppAmAA<#7r+EH2A zA-m?tvtNuJ-g)6qox?|ee*F07a4&h_{tMzQ9Hl5v-FoX&n2ahMg#~)6#DJ=Ml?g(J z^qfkSkRZBTNN>?uk=2B-$tcPWt4k*c@-i9AF2|L0peu-^@{%CY&IDG7z={B6jI1fo z#NR-TY`kln#0elks!Mf!GZfzS=Ns)ECE(e=%y<1}SL+5DTi~-q>zVRWceG z&YhKvlM^o!XGMuZoIH=!mH5vD0)?DJ_W%-ur&jzARD!7g3rhPCITZ{2OM3tD-?N!3 z*e^tjbQ|)aAdsxfKm~!DQ&I|a-S}WwXS`h^1vfkOFhf^_bvm6p1C~E~tljvpUAf!b zCrCajrZ4bfHr0nIbJly#R!tw&(C&_ZZ||q3St@o}1;UPtR+pIciC^4DID2L-aD49T(7)&|H|t(J%&i%>ArK)3@Ht?xgWK4B{`k+ zG)=Qnb{dVcOp=@?qmV&oMhB7V(ORN4Ivoqlrh5BYvsniA(?|8}0TcC=U0bcb6Hz_K zNm)Kg_Gi&ol zNYTg(qzn{5Gmh(IU+O+h+VcdIDXuy0aM|}ch;OJJx1j*;LQaTN;YuQ}fnw0W9f4H( zs}{E%Gnulpm@_x^s1^uO9hgtOF=jVG&-rZhxD+sW=(8ppeFjkObJ53M1JlKiE`2#- za%SvF|K!MsDSo-eKY7H6$$kot5YL=HH?BD=t7*KncU(&#&^-P^hYCYG@)fPL1KQz2 z-7f-dW03(F@T=XfY<@qTcV2^}n%|MU+G3I^c-|tVq8Pj7I7}x6&=OUiggc ziCrx!$vM{Rm&UxLGl68nZhDren2_AeND`F>5XK^tOZ)&#>Zr|WF$|} zUDwajZPfP*C!m`|Ad&5&cEAAtSS-Ex4tZh<ew#@se8aIeY2}zkDV%$5Zetv$q4qI zi~SHg*URUP0p|f{57_+Vh(8Nu`$sfPnQ&b~-W&GFj)#B$(UvK@I>PrZzT=nO*H6Fk z@upp~u0Qz9;^7^6iKj|7Oka5W&M7lnf`a~mwO@BX*Sqw{`X%oiIQZ5q<;dOFblrW| zD@|<$&gl&FV5ZU&yBkBCDys*4xS6(79NC-z;O zHy66=6$An&*_bKm$#d2?uXEnw6rCEA2Ak_l*i;O8Oc)TX2)3UBM4;^3ONxDdo0V?E zNF^TZx0Mya^4CmUxM*q8h6}gdasK+0C5f}%Ua|7+_C)+!to!KKx9)iTW94s3HvatU zw+^hlcHgP55$=oiWs*Wo6DmQ?QQJMH`!wC;)377`zTA7V3^>7Abmr$T*) zqpr_S+U2|y*O;u*NO`tD*KM=8bpf+vafaIp%j!efIWP%;fKX-vL?^2^u^RwyKEh-pRURV+K`tnBJ{`z@f{3qy~WDq5gvLL!PY|9K3dJ{c4 zKBLJgB5c*=3^fxk^5I%k2(cH>MIyv5WW`&Nj(Wgw$!I6Wi90&r7i%;v1=|2fX?YF(J&pJh{0OMEYFfU!;ql6brX^lq~vWZ@6)$ zBdED$X0Ui39zA@-T-}d;m=O$i;4#BS%oT;3?@OCnH*wZ&cbZdn%~BR^-8%pTq4}t9 zq-2(kA_rO*P8Bs;gV88pyUlD8jK)bO;sjIHY|v|MR#``%JQ^$(lU*Z=7|9ZalN_?q zBoGt*qML4$p$KIC{SM0|r}YO=iF6EtHB#5h-lFvOKZm4;f6=!iwY6*&?FiA2JlN%T zfU)ZEeMBamoqQH=RVMEu)v<%`O?gk*fDhggdt11J_+p<;R<=)xeMOR{;5DEx-bS0n zi{ka{lMn+6gsmD;GzdtG3`Euo8a)``%qC(Z?39fyv#36_@#}4|_~PmQ>-s6mc8VWF z$O({XCh5 zG{7RgUM~^d8d(%jw_to$zlPvT24GIlC1`yQed-YVp&h0U?g=OE=TwbKieY-dE*$|X zCH=+s#Negj!V5qoC~~|4|8f*QIZL@#S*gtUF}Z8Qg)%6cNsyNdj>SFo$78 zfEGrsKppOfh0%f}#L3kGxftnyN}%>RJ)@h^TT3bKvHe?u9oU6oQlp*ui5R^2p76q@ z;h54ZwJO!4ltHub4t(3i;gsIJ2#ICljYvc~wBiVgYBgG&CK{o1Mg^kPX`>ol1e2%} zV{$&K#o7pg6anKXks^rZY$dvA1h;C*(a4zPCr~RswftyX#`0h-d&>>_pW5hf#oD*> zsaWhkqda8OVOzil;a+?SzjNt0Ij?M1ZX(waP3(N^<}pNrpHwE$FSqat$tWB}O=ywy z6+*AzFm;WP5sL|@YEK(S2|SC_YFyqUL_}C*rZ2E1mo6Yf<(llk;BWazqbAwxJeS0 zqdH{mWp;{Bdi6q%^btuo42|CqyGtn4G_#_h_FILc5kw0Hd!bnDE+}>awP~7{*U{%0 zAsg9nIChur*&iZmQRy|PRYF-&DMH%Xx=BKp*xK41yDKV0M5Iv(2=)S!<#n`f7^Hri z^jd7uVRG{D#ZIY|(hdX^a4bN(ibYbfh!Kg%|Ad8p2IeQ7vBg5eVQ9pKcPK5uf!ClJ z63T_TQ5%l7LL?sPrvX|6tzfMIX4IixwLLx;w20gdrAse%9#&Z?6fi^s$f1qWG)EB# z^iPu$5(+N8M0Qhh#LaQm02U1@??NL-o`~IrglI&TRdiTICuo4eE}e=mR?84VAH`Ws zRT?8MwurJE$h+7X=NCgA>PLMn&VAt93Hn8dL}^7jYY7RhNc!#W6Xe5u!Sxu{GX$hSGrQqlS@y6qE^W6Qiw?J|ad98WSjc$G${9&LgzYa-B_hz-CWC`W36 z$y^@b5(XcRo#7*J;3x$8bf`3nBVt5*EFw{1&~yP#DjiZ(7ePR#K_xRTX}t;?0?>Gu zDrv&7*dkTfq`w|Mb@|^fc}~Ot!FwC^uaiBwl+sK5#grWT*-AQKRY7sf^OXsL{!! zOV4YGkDGXpmiH?jvYRO%JQ?_O!OC%e%lH%m^`jwN(vjTCv}hNK!0ZN%6IA2_*u=S1 z9_NyhD-y~j7?&5`QMsgI=Ul1*{DkpCtFp~b)48y+5_+vI%)i$tdRP`y; zUV2(2u`@~@*#hz;4TW|Hpp$n{i2{kI%1dpG96`q-8kJF4RWC4igXYrySfUUYsSp<` zuDrw)9DwEku?H zV=wlR0(>@h{b5b>g_jSr#)#L_ZpV|EF4m#4ABmJ!Fb%|n zN;t`XpnxHVw~#dQ#t39@a;tfp9M~FwFVOu(`pR2 z$|fp1pms!+O&ZQ7$~*#MYY>h9f=wYRQLMwuh1$ax6=9sR`Ecxd;F9$)UN4-yxa07E z$zvR}bK8f87pNKbOT~Q2DIodh1T%^;-ZY(_&t^KPEn#}7RH^P`@ z$L%oT7Q1YpQr;S9O`Nw{k&hE05~XSiv=Z2rtg2u4>)Bdrt6rgKRfCmDFFxC^ zY*pU!Mp1Q3d21jM8Al_gh?(t!D=s*JW2VgaKM;lp;|pj#vn5zvifx)1oum>HOsYT3j-54xokY zr{F7q5F1ukYK^#(9;iLy+B&X9;u?D(S)-33t2(ZYS^?CjjcXH0r*=GO6WIa$v4A~g zHM#`nWn-Vy!G)fZrw;G|-7{bW@LuX42Jya%4+pWIDB5K<@t;slSu+?6_Rk|m6A0j0r;p0uJa35)zWK>uQBiP~Yd__Kf|;wSye zX30+$g(9pdtevhX3heuMKp)bgu>5W%KT)e%Q~+^x({kzphL$8Bu#zci$)mJj@Tbd> z@A@A zgd%7Z8iyvKX=o;zgF4V6v32wI2*f62WU+)q7Tb`O#X6*Au?smN z?nYW`H%dI+jdT!uAQmC^LM%a?0x^O(9bycz4`L_8nGm}m4nS;$I0s@I#JLa~AufQ} z1aToRU(CywaQtN)fB9*({wiL7HOF7e@ek(s!yNxmj(-@(Kb+%l=J;DU{#K5^jpHB9 z@sHu<$Mf^j@1pn7hv*aZ8Tupo6Z#hYMYBcKjUJT9zOXAi&2-4%Y#>Tn7|z9Z<;Y zAE+CtE(x9f_d1f|ujTlEN=G{R_@KIl>c~W^sv~KAExeu)yxvw`UmLG)G_P+AuWvlB zZvwAxGOuq6uWvf9ubtzc#qnOn>zQ-wSRN`yj{j5U1;5 zPVb|KuiqmnL)A1gs_Y9}=15WpcygeWB-+#-~Kj!&<$MJm1 z@qEtf`GVKe!|C{v)A2Q@^BYd*cf1|Fr{i#VA}xDMhC9KM0Wn>c(Ehi~TaHV)sy z;T;^l4dPu^RXyAZ@jV>Am&5mQ_yG>@U5aXAx?+)t5$V5zXtIe9R3xD-{SDEIs6WXPjmP;96rP0vk?E*st(tWA^tsw zKj-itINZbGuQ>cQhyTps?>PKDH--P$aEouC9rw@os;#$v zfW`N}&yR}w`eHkzvtTU_MnlnX(57u@44QzZpmxxt^U&3>>{)?Ufp+agH=-?QJK71F z_inToJ%}Dg2hkJgX>=4li%y`IKvSPYZ=zG^J@f%+@lVkg=u7ks>P3Ik`&EnZGh}C~ z`7;pFPhqI#!j%tKAzVSYO5h5?RSs7rT-Co*EyildPflM}=@h0aovLQd>C38}rt5jS z;q+w{Pt(mj-E#V}s;6{N6>qnyDxSi0bxvnI4^L0x>0X|m!qZcEdOA<{@$?Lyp2^dx zW%{XAof2sMRlNQhPFF2YAI!@Q;pOUhIjZvM%8go@xmH#6=Rn*5alTcZ0`jb?CS%Al5LF~kvwLsoUlpi>C7NXxD2)KLcUD2OYq>J(C8RV`FX z?^vEbj;D|3^iSaBCvv=#INr$|-xOZ|R8H44PSsi90H6-U&-mchPU%t z-p*CL{i}I<*Kj_q<$PMl>%WfEbv>tRJ*TIW)3brovyszt1E=RkPR}Mz&t^`~O`M)B zoSvIGJzF_F+c-VjIX$;^pVRvQr}sfl?>p#Tnf0EPx6sP}b-o9se`wsK=9O3Ob%G=Y$+jETbC(8NrEa%^G&cEmQ z@7?_O6TJNMy!;Cs|BD>|OT7M{^ZH-r^u5CAdzI7w8mIqt-o9V(_MPPIe}lLGmz+Pp z;{17&^Y1Orzqk4CzvjQ6;^p7r<=^G_Pjme5@%n$m>wllqcZSpV0jK{gr~gCVzK?kO ze#_hcF>n7ToG-uQeEOWjU+{c?;Q9W@@$_&!U-Ejs;`RKA)A2Q@;~P%rpE;f1@^*a3 z+tJJ0`8{vvUpOEB%K7lO)986*MK-pUs6m5RY(yp&XCfbq6OoI>TBKt!by`K^bdRrA$NdvzP?lazkdD2jLXoK3x@OkKU})Evp)~y$EzU|U8t<@9Dryb z^y4(?H_9#Rm0LR1a6Mkt0GvQ$zX>?{!^?l?JAWFuyvR8JFERt#pUOTkdBB!&# z4l0Q80#}Y)P?>;B@K93lpU6v4U6utrAMU zC@p3sftCNdN*$43jMckaIyx!Sl-J(O5SKOdxCC*1tY!Ne;+9o+ik1ln%D z4!d=PEX9u~GnOgq@YZVODLfu`NVml*V}r;^^5#{sdt-Y^2ehpVZ5RE*1+YnyQ7~!- zad$;qHJXu$(N?j|-g-nIm-rRHo>=eEk=s>4iZP$s^zaPCJQ57S?hNLKjD4L|gvp|% zXI3l9@#hp}^_gYu&&)o%XU_+-pAjysJhKwgFnR8p_gA*gI5K0;*|U2ff`M|G6#5Px zXy_8#^zo|W6~}&D?G+VWi5{AF19aVZ;S7kf1?5CBv`HUrMMA6TSQ~29&{2|3TZebE zEz&3$qZ^Ir9vGa_e{Nvb4Z;~EVf^YfoI7iiAi)Yt-C^BHE*^-lLK2%Li~%>HXn*TI2T+#p|RTq`n;}2Q{pj z>W3UdaGtn1_VZ=$ug2u~bC|4tf7!Idvp?8#?+3HlZWG$>YmU=)AHU`du=Vh)Js*6q zXV&2vz=GxY5Sg#~Mu#3YwuVs~XpUAp^mABfd!5X2 zh~i4^k8~jG+jt!#n%eWh(S+Uf9Q?7@S_qN`=PxS#?lYe z2@`FaXm>e@=+DR`ul-gVXNJH?w0 zDyJSh2xXtZ!Gn+C(82bd%7xo@DzQ86z{1Yku)I@=vhqHT2V!ML<{fur&YU|Ji31p% zjIvP(Z9a-nG^Z#O6r%|xjrozNHY1_g8@0BgCT&zZq9_=MriF4mj%ZqQS^!4_EuyD6 zYIR^oOBZnVO1_>zEx4+mv%QS7Pf#V${*@K3%kB|jP{wM1041gTBx8jEa^o8)L+S~I z+4L)@e`4f#-e&yEj3B#-{i5{F*;n0FS~qg<-ckR|H)Ya4vk6!<6Ica9z}n~2G|CfD z5Qu#}nwJmyIf{b01=^@27H6eI)15ZaAFWDFbJ(L|lE;`8ZM69PNm0~X+(@Fqrm99y zwAq~mzd}i~CF-OC#Qj*`?95vQ9TAHGn&1H>Q zNBl<{TN!8fK-i2&FAvuC_QZPWcYgH4k}KS(G6xN{J-so=^3y-Fz0#@J4gaW@1E0$$ zYp@2JvBu`N72$072cfUrHw0J0Kl@8RRFmuGLDZ^jgr+iw9lbWlI%3(alGGwsw=MYXE|LDTu3-^!5Y1PVCjf1r< zH~pO!-v&tjeiQV}Ii*E1NPmPSZZ?_{O=@&B`9K30402Q^x<(@Nb1qX3dT`4v7@lH6 zf=h}zJn4(=3H#}!Q%U&%aBeVcOM?t5=J zPn(THpNyQ07sURQm_DHS@_1`(zJ&~rp@_0;+xc6e@xR5T$%3H#y*zgO3Kn4WJT&EI z@m=Ic)1q3B$6+))bYRjWDX3yv@eOBMCy_;>v3+3@7yq{Y}Z;)bbX zn=67i^5}NWrLQ&JZ;ORn#!cOnUifzLhz9Z9#fL6#9X|7h>bz-pJv~Pk2z>a#%$b{} zj2JZTv5Ik?Ht`-9f8=0QMvku^*;1N&Q&Wx$TeIrn z;p1(|8FTM?_}aE>O8sTxl<7kr&hTf1eznw^wtnR!tFPTpNN9L-?lliSxNP$597+4& zwQCPxu_hFly#K`D+%#au#=ft`SAiK`SRz?04nq@kXN$J+D6*VDjl|DH^x0__ndh!7*!-9-Oy-wfLL+p8i$G$j^`8 zQ8s+-e*df2e6SB{3-o;=d?JlQsi+~E>P^t=qh4DJ@?VpYqiLAMmT;# z2$A=sp~#7HPas4+oSLmQ=vJG}fRI)Y!e(qfuMPIDs190Bp*nh|ICcLs;0!+|M{tjy zxHF#};FmM_&_X*A+Llf+Yi+LlU`_kH)_HG~nz4v*-;GL>@UdV+Rp`mE(~NRZMMj3v zB$(4Z-zFv1SnPJ{s9Kk9cBZF80g*zc3goP)Kp8n2gw2*0$fGELipZ8{HOm5ll%#Il z6m>02(TBQm{j&uH71inK-DKPGN?k?8*VVfG>#ToZ-q)?n{krPPDAr>IgQ=If6SV!v zwK_WxJ<-OGNvDi2Dxxm#;*LM5f60MRD6Z^O{}5&}z{$F!vTyz7v>~O<;i-dj^G0<( zU<;%M(o0iweA^>+qxH2fO&i?i^mtO8Nd?I{I?=aslwPnY6^lwr>q>^NXx)V!u|L+7 zWoCN|#$2;@?68!Qc^hjRM{l^86Us?R@LGoa4ww5u^sYfjPLvj*VzfSNOAqG2^3&^0 zwEiqd&}ux1-J~j8wa0f$aoEChoE>4|P3Ev+E%GL9k#If)7& zHj-vkqB?A;4l*whs^e6c_ISj6>(tiP(PJ8FnacrKL^(o~D}!()RW#HSAflG2g&CS5 z!N-mZQ9Zg)w@_~3nt1{9@W$UKKK#~ec*U>2#f5h&JvZlkarM>S%sH{Y-Y~0S-VG=2 zxaGpW&bcG-B)_MmZcfJepB=0H%1OL+n>b`G9~2XDLm`Tfe{&#ryQ zsdRw_kOb4;Tfh^7Bs4yp!=4EI9uX%(M1+OEGzk;x!9XN}v=C#YmqaWOf==L-2nWCN zR0nCB=o0`ClHg^hK~le`f?TW<#J4VvCfDN8$_k}fT6E!0!Y?mXgNUQpMbRNuphega z9+z=d`BfvchF>+|D#yI+cj3FMq{;_jUh{^UORQlqzPj+#!`9A^TdLTfLmWQ#X7|z2a|DfH{KQX zO?9IB=W!FNC0Sj~`h_sbg_FgpbIqNy|Gd#i??VDDB>O?T51 z3i$jB2-vv=RCUv2febhcFPi4H=-rWpUzJsP9ira3bK1O(4=h~Za~YDXhSq#nsB~z- zkX)@C)+Ck&mX1wx*+qvbaqUH33Js~5DMGUGMoc@G8LE~_o$z@O*5C=w#2cvdN*^70G0X}*-CEJT!;ViA+25Sj`y zv^xB#VT@}~LTzBs{Wa%GWvLW<8@$83!*g@H?Pie@jpL-_zOwQ@t)A?r#&J>;w z{0dNrx00$Gah>#8$Mp#qsMP91AmJsnRk z&E5uUsE$#BK6}Z833_RG^6*u|h2g`y1#MWbbLxldSLp@4z8l|ubTQT9|3#%yJw&6O zdF}@xYzGmHOJ{psFHBA#c6Bjzp>~CANkO$= zOH$qT`zD9nR*Rk#)OPr1m&_byYQV5AnBC5zA(vx>>M{ZGr@PP+Go<4 z_4=&`uy3V7&QxNt{mM(Zz9f@V+<+rZnIT)koVj<*5MZ`uzDd6q0`j#agFc(X0xs-( zH+~HG&_RZbkQEQ%2VR42p4RuFcs1A_4QL`d9v&>G<`bMh-kp$OGaB>dq7e;3+c00M z-=C7~Npv}6TPh?WL6qhERGaOPobQCY1aj1kah;(X>z*?nu}v`}zwdeSJxU{4VPp1` zVJFMajJq1E zZq@ASvzH>K*?g70_(2bq%waVZhmgiEFtKn`gIm6Q#x6hXk)5?VL|{^cL8u7#bY`YA zqfn>Z;J}?JE>m*Yr9D(-G@8xzCgE8}*DRCHWV=ns+-=p4>lhKxn&n}pycW|+g6`1d|JG)-fl9uEV9>)#UZa`8;X@vS=lwE z$|PAnpfPl|Rf;-I>c=IXnq|#p-u#hQb=19a*HEV^E4DT;?2FG`={03_{@*{8pH~cB zybw<#+4wagBQtwn{-`ufd{KH83CQy@%&$H~J^Vk91l)*3b^;`Kb@wPej$C?mJ{X;C z#7k1hKj=pdbVC`eRt5F~zPJPrII$784b9K18JwRtgxpe4KO`6o4~6RQ==)sSCnu6D zl*zo!7UEa%4XT7S4Mld4uwj>vgP+s)XA%|fh0Mbsvy2O){6O`pQez%uEl=yuI=t`y z$Vf_sX59vMa9`hrzQ0IwhtvNQUa#WaxUO_E;9cL3x36B&2u6mtS!qh8UmP>(K;a85D&`G0<;(`mH&$GUS=!DqTS$j^oA$+5u!?)@ zjSTlqmvN^k4bmbh39=V3+`EA12pONl=-&IToe{FCx$2b$(Ie$Tu2#whvTGyFL(r0C zjjnhe5ire{ERd&=W9sIZ#*Wuk@?3o{C=KKpDFnIN)Lea|d9IRBAUU4vJEcMHm0+l& zpqh(R@m!m?Xvf5BY*!kDb;2OXHA>=Lj zw@lohdUA8~caQ!=!ndI!aEUxZr!}Xk5?b4U|e| z-`Ao|$ORd>>)A|~E7O_U-S_pegp?YH{~FG-*=xM1sf+UpoOyZl#pGhW0W1@P9;XVT zxu6gU-g?6!vqSd#x?vtj%FgzS`qToi(4NQDWe5M~+&fp%LlO`Qsy3DzB>9SG5;GEQrz^jcLM~xSQsTs9Bl@pT>hHo8utGUM!*6C{;j+~~R zhKYuQkz3ntMLi-tCqQSY5yhN&)4D-Q)=XT~jbH9szG^%@^I_1uoZAa#W{^~Qo_^Vc zrIW-NVy8SRH5e9aH@39Y*3RDOa>?tiyKd9Q+1JmQyWnF>AT2-wfsGqCZ_?#cYX}3! z&#C9tohxMzSVH`Ou4?99v<}R3>$%=o56hDO6+7x7e)m-me~)!V|4`?&%=l_&K}m6d z9?ZqfXOP9LD?xUu?Paf}W(*Q)0qd)jKWmi09Aozuk`2pEP4$4pBrnIRLG{m3w_)iW%$6o3TV@gZsH3o?(~yMD@q^ki>&bM1%`6DtHso9?L5 zl$hk!6)cE;;;mLZYG>&Itgrlo{B5?yKD!rXUnEvu-0WKLRU zMq<+R1Y6quKBLF#XpjWKsuQ%LnA|J~M6|H`+dFV$=ikPaW+oSv483aSDXlek{n(Fu zvW!KeQ#J{SL)o1}#G{gqX*DTRs=eOi1y$)qxn^f!z5kl`yk&Pe(*_M4>~T(<kIBBcSZ>U#{?P;HlPpQ#&H9+yyJN?HwqarYcf%nZ~>SfE;0pYE@*K1L6rXO7nC z$wt9Yes6w|I*@f&CeU+<%FFmkF6CvfIv;v-sM}!63KSI|n^Lm;I^A++?(hcJWPSN7cpVHK1O0DgMEiKTCbFdOpEhtLA} zvmt*7!g`k8$Wq!Me>NJ;?#Hok6U(!ig^#eD2Ur+|UvrQNCjJ~`0mCRCFy9BE1!&7h z$t=YSzve?NG`+s>UI-i6ucKKwk%d!%&U~na=Gn}`M_A4SER3=|&qG)MljoNZ7PD|F zw7mfBhWkR6UI^)@AS?%}3K_2ofe#)CtDwDwz=sfoQ(5|M7E^%R5_;9e=Cq!i_Xgp@+-=zS&2L;JUs^=}9`aEkT=q=XnB zpd7m|2O2`a4Vs5aU5H6t2ujiWdcYY1dx(aUSU8!5Q(4*FEa!c!>?17w01N4tj%BRh z%UHjc0c{(>XrufohnAj#koJB#>-}<||4RsSpl#*A6%T}^EG$R!;i_k)hOw}bg(De; z(d>R4yC2W)C$js=ES$>1X)Jvc!@rq@yBX#KkY2&0u>$C!VFn8~v5?AGCHu9K{aT5< zP_`2CAPDJbtz>jovT;$##ziF?5tTp>%|DUdQyMA(CoQ#^g}YfP+JjY0mZ}&xs(>3F z2x;$EG5l2we-+@L58-eYHiEQQp%z5*j9?+Hu?lMJf^Z_kN&BUWNlO)zmMT_b6&oql zAOl?x=0J_rAOrM%H-!JUvFiYDDjU z<9tu`!8Z1}54H>5!JhQNw9qBtTo!sj^c*^(>P%HvzvR4M?x23?XCL}`wNX@!Zj`ld zBa8~2<;oe5RdGN@2W50nqy}MF=r-vOM|W}05U;wAFeR?5A+FE0Ow}DU1ZhzHgVHl3 zJ<7@us?UE7;gd{mgi-dS0~kTi0O#T$R_b&v-mU0 zxq5`@xKOp8kMaukhGc&?7BRn(0Gb21RG7B>> z!a8TzAB7J}e<*dBdv@|_@FY{kKP#)stmI)<^vufWY&1G3bXe%P(1St`2|dhomss2- z_tY-2xQnAGFjcmet>lHGYp=5a~(q?Sc$S)`Ul zYFVU~MQT~3mPP7->>3AT*Ek@%#sS$i4#=+YfUHpmrIro}JuFpmSgPW%stSBetx-&u zgz}oh6^ziqbl^yV>6Rm-OnHrBIw^Qc@HErM@p0DhglKp|G&~_1o@5Q9d~RuhTja}v z09NCCc#h$pHPD9YKO|yf6JH&~2P4d*G#FumR*f4VN82OZ2&d8w5$2N@#j;86e<;GM z=_z_N!fW87#KV(i%TE_wCrFnKKRsufPTIEersJE1bl|3kT(@MK=@BR2mNuM1nwf*L znVvW7nlZ-%RnM)OUa**Ui|H+{;|7aW=B^ke%PA>=cGpW=fuHtk)v9fop5K<<>DIh- z%{P@upsX*LbD;-}^X|OqvFVyqFg-C9m|n$Kyo*XM@@K;I=GjX>ZInFIte8$9deaqS zG0je-S%u{Xo;6ns%yq1^x~Qnbx`TD;id(RX?6Jpe+{2!j4*P40!6+MT>2cdMc!;F} zBOj~;S7bTESxoP(nSNloj?Y?3hF4GlPje)LEa3O0%Rx}>Yj0mzSZGuF{Iva2aWpZnBJ1^d} z@ye`xv6(B+GCot2wHAaY%{tS(2N+_pBKA}S^)mnW=nm22*ZJDUJNo+nC3W6WQYr_Q z_*;~5m6tM)s-8L4Xo{|oS7ATOY{1;gUzdMNJZ_3N4s)rD7?FRW<{--RyjZQtcTI#6 zRrbu4oO_b}G+z~;c1A|ne?#WiVH#U#ml;aStSd`CYp?RJ@;A(e@@6M<)r7Am{>N4V z9s2_J&K;G5uwPZpyl4ueuGP&~991CK72yx{E^2#6=Vv0ShA@}DL{SpmCd->*dBxwf zM67ZWW+EMVp*#zu*5;T?SzlLI-!XO~zXRz}bFUQ=UypVc@AT)ux%>pWj(uojf7Z+QyQpWMPJWi?=F@ktd z!-wI1_$k}~cfhUi3V0(t2)7{dx#C{<9sC|{hnK)j*Z|*$-@+^5P4Gwf1N@244{wFf z!DrxYoU=UK#dG`x&fjO@^YA73BAv;OjhNzkpxD z&9IwiWDn1b&Dnl6=X|fM9KO{5JkQ3@VIQygi*Pwy30J`T;Wd1kyb7*?YvC#Q6?_mI zF@Z@;;VNu`f5N}88C&280=D96RPSLOi^t*dcmke?C*d>jneZ3*E1ryN@mY8ZJ{zBd zr{Zat#?$e+cm{kE&&229^YJV^8_&UW@ddaJ&%-u&9DaoDxE?c@#SYA2Cw5^s_Fyl( z1Kx>!_(D7%UnGC7{sPhcVAifq~ zhp)#s;2ZHx_-1?yz7^kwZ^w7wJMmrkZaj?d!S~|(@csA!{2+b^AHomgNARQgG5k1w z0zZkL!cXJF_!;~xehxp6U%)S_KU0EV!Y|`j@W1h^_%-}GegnUW-@qxc>CE`ATc zk3Yc2@P~Y|{1HBZPvVd9C-_tR8U7r9fluKt@mKh3{0;sVe}})vKj0tnPxxp23;q@V zhJVL@;6L$Sc!YqE)SpFbqy#15UGQ#7(JFW^ybnG_O?>Ko4}6->-=BaR;mzddg6iIw(h-)J5IY zL%q~TFQoJ7Mf4x^V!D7f(1p}b8)<+BX^4htgf`J;8l^3?mBwhCw$XN)ph=pd9W+fd zw3B9O7hOab(+~*H~tf90@GDU?weTQX`QMR^-D-=z|sdFcSG-g)NP2B5QZcraBwDS8(edb-s6O zev+{A$x$QE=lP@^Hlv~Qwls~S1vhB4nIyM{!%o<24Y`~!M8~MQ{9NEx%VxuXQ)=LY ze`+jp*NxmA3*B|YW_zf{3!CksHZN=@!cJeBmWjF${JII644H$_&q!ZI=c&XcxN46tn+6!^m@NE3EOo_e)9&U zSvr~x4O1Hi!qzau2*-Te@XH}~S8yWWXCr@gfgkTopC7x_Rr3bBS~dhW8T{mA+NNc+ z4pe=M4NCW_fgl-YiKflI(t97K#gJU9w_`2E9fw!9V;hJ%{Rvhk$wWCGDU_`!gP6bm^!6XW%9T=%d zSL1#ak{S#oB&95|M?$j0kenLrv$&Wgo(8Y%CVdr5CLv8jz%fO38>$>no?m>Ka8-g^ z>vMa||8TF>t)HD*{p`4UcAAW$Wo6c{&vwM9Gow*fqm|K|Mx7dUY1FMzk4C*Q>RPXn zw$T;a$mF!XjMkFTS~6NoR%^*>Em`epR{NLL`m)-;tk#^>nzLGSht}MoHFs#u9Xbac z+D3=A(V=a0Xd4~cMu)bM(>8M2Mo!zvX&X6hV zR1V^+WYzT5sy9&cT(RGk$wn2+D4M~pOb4$t>dm=|5txN0-Xujyxiu*BVIstSi?SKv zRxue}G#Q@fF4$%&eDF*_bCA>*_2mPS8-P zWg5oHl~f@-sy6w>pvrXoX%l$fj<%9{mFfU&9+gUvD6 z6NAwh*fH1|11ADaW9(PBR=F`+wLRwYVlWwlAeNibaR-VRfLo0ecL;E^NH@NZB{2MC~GkNIoC0RY&V z0sv4;0|XQR2nYxO$r9>Z000000000000000A^-pYcW-iJFJ^CUbaO99VRB(@Z*F8Q zVsC6@NpxXsX=5&QbY{H034B%6wLiYkaL+tXcQ|(*a+BO7Hzbe{jOG$X0TC1t)X1P9 z;)LQ@tB4bV0}2&wOVw6deYVv&qtzB$XX{wCwFMOwr;4?GKL33RH@~&cy$R^+`~9B3 z&*%T!EBg%loU_l~Ykk*R-+eHVP=pWzHY_2B9$xO)Gxneh38Ail)`iENvS`J*ue>;) zkV={mX4!FPpP9}++q#F4Lt5aTx0kLs;gl0j`yxTe1h}8O@`ObzSCBLj34QeUu-6k# zK5yxo6N}RbnKPD9@4m9^_*2e(tWYO`TmEY}xz7)8>YZ){c5xoJ< zC&GDt*(qn9d*_~OTsZ%b5NYN~OU^j;u-*Zc&|~3#F@N%D$1Pg?=l4VyIh==@Pg!*C z3Xzq62KO(6=hLSyI%UcA*WP{>p~ttw_+D9Y+R8JpSa9MKgq{kswXa!m#*!5S-3R}W zkZBIg&m*V{sF$sHZt()W_dkd)5G;>xdtiKR|IVE1w7pk}okEx}Fi(oq3hcREdv_5c zd=A$ihU>#KiTC5P*vD{%_Kn=_BpTW@ zv?f#{bf}LUANpiy4;&NrF=D|uF5&JV2K@<%(yvu_g_e^7v^(5uLz}n~Q9_@PjqGcn zp-+Z3!LP%+S&>XgplE15lHEmI_0*kh@;V1E>h=}Ky6p!>t% zIWRQIgjSQ=p?zs^&!(YiFt%LiOVUlRCg*@%CZoE+}m=w}z`ae2KS1-5x2(D%QnsMo*-p#S}Ap#S|U+Gtq+|E10&gTWqc zuzv*`psmxNCL)wHR^x=8t8w&3VQD!(f>Cpynjvo`kei1U<0rf?s2a8 zzW=g^xg!St+da&i{U>P+_J9-A4UX^sxCa~~mj1gvVjOWcybtt@bN$zQGJFotM_IrH z`bL0H@DIc&>kmDLeu7x7?T0qvo{@&ngS`ap&!HVrm*3n6$7Sf>Kzoyofo{LC=kFj_ zgH5NR?;-wc`=PbN=je~<6aU>FeU+X&^a}2o1nH}tlN90wZT3Ii2YwE|h8PR%JM8b^ zbKl&fU$dn8<*>~W^N73poch7e_kb^1P|tz-F4RrXCc)l^Iuq(#s0DnUdW;NmW5~7q zIpi>AJ(!#kO?$T8T){AB3YfV~8BN9{Vj z1=`>qrkflS-1h*)!sVsPg`e9poAOJpK<9^nGL^aSU0 z@a*QH#n_hsov|B9f_nm$WWCNV4TlGuB+!BsK-E^1AQL~@$>uN*x!hi z`5bh%iFAhU11vy(LrlW)82&YCd1xEiMvo#Av~@yF)vq5A)aS|fgY(zuEc+T23jKWO zqtMUk3u|@wc>n!3E48h54fk00zxHk0|8FY&dg$k5DI9+sdTnS3aJ>O5{W`e>D=^48 z{9mbdsOjN7=&B9wxu;$)g4zuCu7GyW7zC#Guo}3n{kcXjmLtO>+HPCed+K&JX z9Lw&4n2&L>uZo=GSg>ycyLqS^uAPUR4Q)+7Miz1fGMPIJ{Bro-J~9RF?-*Je5KrLD z^o_D25{BXUkRUNE%kd1HghmR(@H`(91)j$rk!5*a6a+X4K^5T|%ds5ChC;AsLLA)A z2=F+^vd|091?|u!3wLuNR$xMKJ!pW37$zhL0#+#47xV_Db`I|dwtRgs9A1J);GtRz zAL5|Efe;AK)&!p8hL7Q_epTc|c;B!Ha10&uFj%-L7%~dnQ@dN{Yfp#jQoF5oQ%zvB zA^ZVhIP6{su_HyGMF~_U(lxD#FkwL)o+6BolTfRm2ni<1OQ0PQj3WrxjJ64& z$$@GBJOU%)bD&Z#1n32DhM-FX8;_cU6ESE&T(Tii6uH{CrC^I@6>B9hB|KFh2%sde zBlKGDw)Um?W1jfbs*7m1U&eZUdXSV9e#A>1NtMUE5eqVTo8xVi{vW_EvE zN`XHGhYX&=OZUSiBg!F3l$e@xNg|6IL6p!oun%wv%HmL8fG92iBEAT5$)n=|{J_7U zFIkalx`AgEUcwV8=m^v!iK;3pf~bNj0D2)QP)$w!Flo@7B!LcCfvbBpP8#39N&<=y z;uLWhm+&@40aXC(Xm}MThExS~2}R*hpff~(A~J!q1rGOZ3iuP^Qo$0S8V+SKurVjr za0xG`!TNPvs=9=@1bZl;BwmDg@-js6q~b*T|q932qlf>=$v#Bgz1F9NL?e z(47E6;0JI7*F_ABFf5J*&510;5*FhwLJT{vjav?eh}e^AMU-musSifjhs#=v7|f0v zK@(dO7#qJIF6&oiUgkq1@lQk-5o+K=z`>AFaKoX1tphZ3brI3b^&nFd8QfZ|;gSW_ z$->uQ&qxYDLSjTj59kZrPlox(H825Ipi`#iROrsZO9EWNmdAj^Ar?i%tD?eFfo?=W zgpekX0 z4Bp5C5HY&)JPoe`o#`r!0gB3_@Bjjsxhi7Dr@3S<(v6FQJUv$6`P5mmss3?`H$6)Kutz?_B_0`Q2e zg6Rt&Bn0^fqX{TQ1TgaV2jw3l_1!|3j=rxwSkDCdKhN; zT1yZ#gy0~MP)%TLLJeIgh({DvP=$TCltr9}5CAyelHC$r1pc=F{7+DDN1!jCmMi5OP#^JC)TY$un!pWF7L?ks3)P>r(wP1*d zJ*8HL;aMMuI7}z&d=&h>MqBur^UI-{z}WV~rNY+)&A^SsKgeDo=op|@1Kd7b)2 zw4(x?6vU;BF#|awECm9r$>59vl2?cd5LIz;gt&yeA@6}l!*#%B2(mXQNFmp_*C?OGntP1t0+TE61<5a_JQo*>(fj5qbp#Xks5DiJ7A35N7 z^`f%6CFq*YsuyS}5RL;1;s_?Fu>qZ(|7<034c{ zhDMjP5MmbW5n^~9>=5A6jTnGSMH6)gOfPFeJQ*p#aDZH!02M=1K;68iScah*kOy?l z0`#Eykt0GnDpYGbM!|#$}y&20;UYo>&8w#@7VKCTqg5=weMQ*^>9IrggwSbQ}O#z^x&p z;6_4m)LLJ4<_dub`r>qXpI9p3w+2y8)+J1*`#8BCG91w~OdxC+-7J`}ZozykunlO= z5LBeY$hdK>B>>e0uqgNp594jZnj zhryKiiNxZO#%ajRc|+78T0>|8mFi%GV2Q{FZVsBaR1{5=T|=(pQk8kv!F9JRGn(oF znT@!HiY9Pn6d6IF=&sITh*B_W=-;MjI^91L+HhyD0~u-E;#mVj#3^3yWc4v!ScCJfH=^ zAI&ZY!5=^rgi}aw3QCOy83K$=si6x6dJn`=9d+Mo+SDMp=t=-S5x2IAqS^}L*OJ4! zA)?52F~H0QZ>sym(Ln*ag2KbgUComBaUU~ed$MiWArn+)=#C{CrfZv)qw5A}&H~8b zha|v_j9)i^>f(|TIRT(kg@6Pc-moAlf-=0Qts6F|A9{*tj-#8d105M?58I6Sc0@OQ z6S{(|%ZED>d;nPusVewjqL8Ca@9^3Ae6>0zZgf zM~xYlgfg79EdkIf*xEh`o0ekLAS!6K8UR{ArN1@+_9MmS+^FI?9tU``P1AEE%MQD? z!fP69nQ`#Zr0*DL0$)Rc7z!q|V>V=3Kp41%VSl>y4Fg-2($=b1U%l2fK!@L4|MBjwqr*C zHxRc>$fBC0!?Il$L`(1>>p*4^bjV;pDhwIAlmKO54Np{U!BcEl#^?rcLr@%GAt=#c z?1(+r3xd5Jz!P*)8;B_lJ6hCqwSC;j;ljQe_QITFn=pZh zE5r0W$BkIv%O1p1OOsR%MlP$tY8{qD0LQ=uAOM?q#k4)s#?KvoG7LTo>W7{ZW;AL$ z(Fk+|s`3Eq>2x?@xoHQ`28lQdlt_al1`3iq)rECHIIK9b>}ax%tU(ZM1S=$ih=pRS zdcxB&1)-bkQX-D)Ze3>`D+#0_o$yRFL_$Z=wFu;0H|_$@g8U0{#&W++aa`B3Bq@PK zLo~vn?|Eo+-Qz9fb0*KTk{1S2EJ=i<^HCxQmaB!6BDjqUtlQd03j_iB)O~;o3@hv_ zvS<6zh#dhFdae(zQy_3)PLmA?nWiW?V$_5*1I*9V97skGQCy&{j_1P4G9qcN7*SnV z#y|oWB~V;g_k!XFqsNRLi3Y*mjbO8jISh*(q-_jGx*3ej4e|)kEYCoxu^?BDI1ytQ zjjkHjYT{$E8(B?Qj0}mJdECR9Y3PL^r9XRCP)Plh^3Ap>pWyaRmc3vgL46O#}^@Kv~l5Q zyAfEA!fGd(iMehJ)DJzSE#G%N--nJ|v_~wQ%SF>pI2Q&8N}B3}Qgs*{a3(pbK>{+O zQPoov4~!6eK9pP+NFrn<-$8LTBONgUSJyPhl+!85H$aS8&&lXvEuW6qV4rZ>KrxJ1 z*tNo`un2$z2XpP<;{UjK;V_1sG?pOJ!eIie48@2D4#2^HG|I|Rumhwd+dm`uxacKcAb-xWsT&$E7!n%dmk`Ly{*0 zp3Qx@tl=!8`<8Dh(y&BqMFKx@L=Y9XbzH{G+TCf#Q&9A}co2R(sh0d|5_f?axCV-7 zhK=~wa2e)fDLoeTd0;$Y*F{{0k$fSRaU+EQm%17UTpB>GYPgJmN5^8Srz+t9m$;aPm<7nU z@lMPC<|)G?K~ zVn(I79);z#?I@CL0@*NQK}iQ-#02dp0umDSu{rA1Rza2*kYzNxX$K>Vn&@@Fb7B@s zjh#mnKa9a^1dnD-QclXLeY8XIT~&#Ofh~h*xJ}q7@Kd`x=S5YN;Z;sVj%X1%X77_! zIBG=07K&uYth5K=c%;OHM9xUYlR_-w#UkO9uSH|&MAT1t;RpaU4xvmn1z6YVrV1Qf z06&H$CB6tUqz#GEG~7tsiva0Tvkl2eBnj$=o(gU%6^W%&&=IIA9!>g9O^HI-Z;C-^ zgp`$1Fx`WmZA(cQJ}i(D2|cQ5G2n$Va0OWAL~xbhD5)??)UXS28&eRdGwi5^oa9Q9 zZHJ=a2Gcj13ULn&QLs^LD;bMAvAizMjP$^f3C}YJUmW#nflJ!_39=5fVYR8q78HeSy7lt(p z5ci}LP>w`Cjygc>rP3)Z@f0@4qcyhaMuN2=njKvgO5DNOK~71yC~>VOsaVP#Mx$>g z?V9AgoTrb(zhnf0OU#SPAO>#J9*UQC5x*&?F&fuVhS_9Xi5qbx;q8-LEN;bp7e#@W z=OY07k&+NIMLV0$iU~goK9)=A@kBnINadojcq|=H>oK6fq6HKM=$>tg;Kzm&#^n^u z#)E+5SP?%Rjl=p~FP5^tpM_qar{+jL?_j%Sl?<&r>vwkhab|0UuAfnUZQ*k(8{;F>j>EGC;&@NGFroq@QUpjg()^W#ieD zmrN&%sZ;`kRag&uIs^eXqG|~x7XdC|7;3~x#GJ4dwNkQTBmm5=p4Hrxnzd4@sz;(g zt3YuXFQ6RhVlaBdUN)D-lFDLpDjun20bj?ciMiYhh^H3>jffL=(qWXOUXyGh8%|oo zl5uO&5NU|)`^uAv8CoglF0(7A9`ww6^qGqu>m>)RpnBJOlN1lEs^O=17QF%Uo;@B zM$^D#!+OriK&Z~=t(0Y^!&XGo@#9W15%C<*d@+HNa>8x7aIn;b)lI}`Yf)oBqrzM& zQT8%UXIn0gS+^~W5)LkL{wcTq+@K6sA@dp<;xnlO-9j__&!n)FoJM%E}a48+Wi!5K77Q<=6`Tw#uVcQc z>0Umc2l9@kltCCG_6o%y*k=mZoPq2Sl!S>v63rft1tZIZF+D&&$wg6WEGT0ZQUzEG z3`^dtNweSVTl%o%6PA%p#gZC`joV@jC02|U!YJ*@tc4P;OGeMw8NC){YSNs_c$st* zMT3`@Af4{xJ~_Eq_8J=+9R3_DsX|PgJD=d4_FnBHGPZ`KN zEGdz;0y<*}8JK$_-H^w9En)2P<#g0_II~NVR zy5}?lC5rf2KOBpiMK2$ZMH?HPtYhUM|LXYp&`76&jm3PUIfat(q8$xUOhM@8zSYqV z`9_OH`D|)*IPZ?_Xh?#6@*Po>XtXJx@$;kdn(t?PKbZl~_;w|qOj=gQC@4XswK_W5 z8X6F?(FP?2d@h<$6y9uT^nFN;gmm>b6HQCzBgIbLb>n$eS5wiEqN*^mXlp|**O*He zTOGTQZfkDLG!~+{hFn`dpLJ6%Oeq$#d{>Vo3^S`Y$AL=#^NUBa$%v0xPSxyeA)km? zjb9FE^eFSDDh^$F^V!eQ{z<8y5tP# z%V>!2leTO=lF#}my5A6MOEpHVk8)DHgu&FjH9*-spiD*1#HAjlcgkLJTdDm%(xpBk7k2|?sA{qhB zw`EcC5x=X+#}ovKC!4UlMnk^Q<33-=j*S+>yR-OV=^(=oeb#fnBLT!iIyG6idv7?2Gh?^rq-Fi0ZyO06X<#S%6b zfz<>h8+?|)aO5Y0krjRPIsj=?9HqgoNhy!PYgn3NHEB<^r(APbnlr8iO3oS}9&THc zD9P4D$wwKRE4nCtT^h^=SP3*G_sOVyFe)Vydzuk_kBQaQd_%XZ7pTBsgP|d z6xvH}v8kiAvDBW+H{@E1Ep9I1#?)vc7WQ2`7FPWTtgX}dm#PGFf1LxkPhAA`>gbS`9PO+}2u1dL3@E)$Z_H zZQIM`J=;mPx3{OtLFs8hFd}8_7~O%TwF8@5A%_K}7_1F3o~Cla$XZi4yF?~Y&Y-k- zHR)(ZkPJ(EvL<8mWAhPbSlSyRZfkS4(E^F$c61IUH#*yqLa8*iMo?09X>nR&ElxSN zPkNdm0+%u5|}L=niJdMciXrV6-1PGsY`qMk@4ilvUmmJ}%Cpov|jQdhYJdz#SD(^D$y+Y4gVZW&12sfHML$FDU@m0VF;_7^W^QNxjrkSx2=fA~ zu!pk8unXAhl9wg_9kOFGolQ5S+tZ!tap~UlLFtL=Zy|S)tuU7_=_g?>e}cJO3Uj%JxfSMe2h8PBmSQz_HhV04ZStbzKhicVtJ1+- zI?_EObGh}u%;o6JwIg#eVJ^{ZvObrE+2ez`r2m__%o>@?wS`*>cZ|&CS(wY8U@qfE z=CY(=`Df&_&{x#Z(9koD^U&TW z_HNv}VefT&uid-w-80_hc7Cw){hhmZzO(ankQt-j5^&Aj!&TQ9x!!do4072fi8jNQ?_ zqisiNN8^sdj_eM9hqFW7!EOKd?Qd`2vHj26|G53t?N4vtw*6Pz@7sRw_FrtjZTpt( zo3~%P{lM+xw)bq0Z;x${ZuhKf2;ncO|BZzw$^VOT#{X|U*Z%gx8nS|%4sTgW&ZMs( zXVYszn(2$_4fMv!*zT?|qdPlBwU^skTT0DMjm3sSK9|j;Q^`c!k3}Q+l^XxWS=ZFy zzwgA~h+}Aqv`~YQ3G?ob@+Bld^IPlZv9F&GG6mxwnL%QG?I!;l55>Q6p7_Rja^!sG zAaMpK=O#?Vj_)Ru-ybCQAmt1ad<$hC0&l86H0k)|xk)DuMkgGB1ze%Lgl0 zE`)>JMCb{w*!!+*9olx){+9?mHhg5)j;KLy!XO{KH+|w@WzitHGJSW;wslu+HOS(H zCFS_s@r#ZD%`Jj4-c6Xoq-AqZkCU)2T$UbWq4QwlLrZ$nvh=zfs$$W^9L>1PZ~5!gHzy+Dc^a|XVy)MoS4Sbb?ero2XC1@Z~v#kf9jPro*E1l zAds&64>CwC%n)4wEnLC)4}yo2bCVaYTQ@nEp1f}1x-r5sjWi~U+E7{zH0uUv2YnR4s?$Qn0(m0K0jm5A3mKmd`bXP04zC}4rl>> z4zBM&%Vf^HOd1q*#Ju@F=xH7v&w=CG9)SeF9Sb(Ds||IuWbBA~Ce#lz8ARumTPtKS zoD5zxdtU84O&0t2kV?4(_E?Blwhdo#kH9Mz4PO~~d|?jWa$gW;-9e#Y zt#^2C`s}0Tr6;W$K|!shHq)(Sa?A9sM4UD6Zi>2Q{#I(}vaMud;vpguX2G#=c}hz< zJ?X@WU~f2?+5!#D88|w)B|W)jrQH1Vy7an(k6)LboL;u*c(6mThYL&A%`byR4xe{o z%`StL`Toe^lKJz;K|j;5A2#S`-F)a_dA*0_K@ZTuUbty`%XENi!>oDWt`|Wxs7#y> zg9lt}0|0G@PSmQXlgnFy3iqecbG@}Z%OG7t$66|hnTnSr>=dFy7@tB+kiqC9_h0-qM(Qa*dN(dv$N> z>NUrw9{*i$YSV_^6hOZ+ena!9u8ZO1k~OnZzk`c|Yp6A=6REc^=uKU)x;HgzHFfA} z>Nl&Y%4$jJN}lT_&hg@Bd;VEo>`X7Z(p%we6-XtLIQcX$96$NAuz&Jt(UVT~{F6>y zbw+HtgBOPqOHXv%_|g+yf9Z+QCCeOt$+F8%k9~i_mzf)&ZiIRr)T^Oh33V;hHBc{u zdI{9kP**{{0BXngj}cNg3<#;~p>BlZ>!4nJq>#E2>RPC4<_W3Gpk4xXHJq=4dI8kq z773}vP&)>W7E;GRoi|rV9SL>O5khJq)Q+QJGZ(7g?MAv>cZ_R|cJ)qI>2SqSF4yid zWtX(MEvm21DAf)thLW=1TQe>=V^EvyZ0-D5qwjB?c{C|=W+aD z{iT&>o`tXd=A+mEmtZt22?<3>lo0kG!S*rS?q8T(t!3zgueVpD-)#B6FG9Wkzb+JC zKlp+iLEa_jkk82!@;f+wiTpZf-%fh#cN|O(gY6EHA|2#MaP1y)3VE5Lpx-;mT5=?rKt3itN zeDA`Y2a-ADIr0FxiQG;3WHog?xtLr@#*_O=Gu)Ni`vv}$G@^w_V7;b5P9(QcN77?p z^>-)p8XIEAvUjn62`QmW=#bD^p;x(1?iSwU&*2{unuXIuQ@mJwN^+%Bq-&*}@>$AC zwO!q#Eze`-8sF0{_DzOYYp7CJAv4|`{Oe+^$5xg@$g`hM(ee~kY~d}rc~WQ?P&ZMWL-^-krc|Lo3_V2mx=FciDEqvUtq&TH`XX6)5?>5gYrAjZi9M$r- z)&*^SZNDt9XrI^q@Tk*9{j)>uxTNFhj;A~2&b6c4Mt?TuFJp$fHgvtxy`=l)v7KWN z9eZR?vFGHTTYLUGZsE9#4p?!(-~pfa9@e|A_uby=f#Cx?4t(^$R}cL3pwL0_gT@>* zvu{-;UFojOtSqTqSh=BcXXS~?o8!Mbe&hH%#y>Xx&*T5zFZCbLzpH=G1bagBgb5Rl zny62_W8z~I|1|M$lekH#Nn>b>B@WBUvHcgn8nl@(IjA@IfA3tN%jHxq@opJVzt7dGO z@$ih7XM8ZDdWdt#Ju`nW^X{2X&3tp_=ZDINW@dHG`gC?^c6|2e+0$k(ntjgf^|OCE z`=Qw{&;IZ*a`*{zrp{R~=d3xa=Ug@C);SLyaq--#a~I5g?8tvR^4CYcKJS=$E9PA~ z|C;$fo&U)Em*&4a|I4GSqY6j$9QEnZ*B*V_(Z4?Wm80K3dhapLF)hb@JaG5G(*th~ z{Kv8KvH4?r7nlovwBWu4&n|d#!QU4O3zG}SES$b@@xpT#u3NZy;k^r=S-5@S-xhI; z;)|YKe8l3D7hkgY2aE4s{Pg0t7XR}&^SI{YCLDj*l9QKQvg8L#?q2frlATNbxl~`; zu(WsS;Y*h<{qTgdPq_SqO()!W!jmWLIN|eU#btArty=b@W&eI+!->b9_=6L-E~l4! z%jYaVaruSIH!iRJ zQwL6)dfKeh-a74r71y7B*Xa+Q@!}aDuB28*R<^I4vT|VMIcFMYK6+NySv$|(a8Bbn zubsQ_+!xO~<-EUrXT|wl=O1+b;CCiO3kam~lq{NtK0*VF5Fum6wrd#?>$d&hN;U-$bBA8p)y{i01D-0;ASd%yqt zAFTP|b(>diKL1D3kJjC!+_d_pwKsq7mc%WETY7(7{_%T1dGpqv-+J$@zq<8zw?234 zA8!52mN&NS{OO*bJ#pKs|0ez0gLnM;=ktF4>@P0=<@8@3cW3*ZQ|^4?&gbuZ?atkI z{>NR<4*v4)YwrH(J>`3g_x|v{hWie>?}+J@od&#={ppeBHy3{OYMke)Q|k zU%&U8t=q;wcJgnFzkTj^{^Nxw4t%ozsWDG2ed>m%o_Xp&pPu;i`lmm7X5g9Ip3Ofy z_Sp-cOFuX6xpSX;>-TehKlu9{&o@1P*7MIizv~6>g()vAdEt^5e)hsMFMRr<`C{LT zC%<_8i@$mCpD(3fI{2k?U%LIJH(yp>KH%k*FaPA_S6&fc8T-o8S2n-$>K~Lp%>Kg_ zf7teF=+y&XJ>%5}Uj5{?%xgS+$9R21Q?>+L~tMBdI zmD)9T*Gaps*!9z0zuooL`z`OE@&4xbpZ_5F!7(4IAO85GQ$PC4#{(Zf{@3Y$UH{i7 zKk+_U`N^Mld%Kgn8+ISG`>;=`PfMSk_vx0uiGRENZiUJ_+xr$xYVTdbZ2ok8 z$?M;K0hy?F%t3(xwGD2+FrfgeL!U81-JXNG)cj&qh2^EP?Qe=1KDnV9s!{9^llx3P6Zx~OToC8N}B56AgL&fmF zM4}nTdD^8NIFjT2iT>DTA;dmSQQfF3+Er4?=w{uri(a=!d!A>QrsMJ)$IvVv23<}S zX>tWe(T&_#jvh;2LDS4spCZ9;L8+|ihrJhao&J)+&

_?osztqG2UZSUiw+U<aG;TH>xr=`-Zc4ee|eMCPxv(7 z&R6(Z_{Ukqet{_#Q>1_Nrfh#Ioynx^;Qlz97DOhK$+O*$-yFXy{$l*C_}}88RGf;( z?Pu1jl-lw5ES6$bw&j_8d3S(o_~|L1KCm0r8tyc$a1ZGND;V$Xeb4MH_q_-AfPcdw zUaG5mjRrbiqg?<8sCc0_^my+YP`>au9QO9|f)P{=Fk7(OC~%TKD$FM-@RJ<+OdC~X zk~Ey@RIWQ;_aV-8C|iSjn2xS7ql+9(HLY1++IELM#X0BfQH4y4*qK=>{%F)2&ySkg zQT@*`EtwXH>YqDn-l+K(9cLY1rv5p2PWhaNg=zE*?W8Gf6FO7Vn;O{axyo;^8FSTJ z!o$C=JTPk7sKg=iarAa-YG}>@2k+Uqdfu{gx~gmNPo*9^^hRiPs0FC6Lz2MTMw1^_ zWI|ETg?J|v;tN}cKC6hD)15M4qvP3hI1ury^jM+L{#eS6Jtm6oW4hj_FVIiZ*XtoY z1f-S~SX*E{zK37VujARaXS3PPXB*)H6KV`8iDxY<@~i^JDDO7GAm9Ob2-xofeFx!Z zcOPzWr2u*_g+TwK+C>U9StQ+E6zbCoA^~k@L8qM^)|k=%x;3==t1B|%e4UlAn)}tg zbC$fme)fV_QO;7>ddKq)Rtp#YMl5MizydW*jiqU$VjG`SsC^Ps=klbqSJ zC#{N6u~`1;?r!<%^r%tkiHFaoSmwx03;I{}zu3?8_ovgnGg#(_z4pYz51UPej+#s+ z9eVJ=haTG3^LxTk9G4i~);2mE)_(uD1eHisioYK{df=!_`cP@*-BwLe0Z8%C?18Xp z_4L%xyt@w?p?R+v?txnjxN|Q=a#W^PSEkpQCfyBXsv(yJ7ba=}z(XkkwlK!`@i+g$Du3_#*4cl>9gw;Dcq;)GZKa>nYRNU4O{{Q-s%yE_QTvTc+{EDC#t77QW@S zs^3a=({EDk_?GHlsvqt>0A}$s>L#`|)Cw!S6_tYThtp{dKv!WXh7mPQWbwb_5fc?R z+?}XMT6bcNzjbKa{i4?G`!XEe3vIZsNN|U|Mx-b)i}a!VUa9omo^mMyZfxQJQLPA7 zGuWAdjtgDgNjhwGdtr_#c;OJ7aD18K_=cj58>(7;W9+0k^AC^|Y1H@BrBo%{SiOgB zeJ*!8x9S2;SUK~ArLX4`%vn!Po^j+U-Jtu0Tw+vp=jPt;%%XGW7p~^kp7-Tq%cKtJ zI^pbowAmUmhJBH}fXJj+v1pp5HuI7s;$QxHnvx_L#t9j>qfCYmFprv@Cge{uXJ*z= zuiZqwRxRCBEz!5v52)9m-=RCI&rwYjAqHuzcxlpw|GX;?vNp>KglKoA0B1Fa?Eyu= z9#|DK<{%0a!-#jyJ!PSK$dSEW6P~L+H=}iFlc_a!j9)o_+}d3@@_wpB7pYGm=j!)U zKO{7bVFv9K(-=C#^SD;#d^BCOe4DFy=DFx=(az8OLjolo^ZW9j%i7np6RG5kv z?Pkg)Di$#g0iFjo8r2@&&(YU(j9)ZmRAotS;-~{J7~eGI!r-s5S68xYA<{9Vvy!A} z`e}wZ3`1y!BJ8>3M&PLoPmstl3ZUj6Et*%#fpc+O>8#uoo}*B0vCH$J{|b9HLjfcTx~#Qxp%8 zo9_c^-feT#Dc0u4r&a&L%{)e0zWLd6wZjf}tdHh0yDG&izxqj(iuOtvKB=U%Eqcmb<=*AK=&~2N+g#dp_0Kqpa24(%j^SWp5DiWrDDNI?0PTV) z4V2I<9p%3F-`@?VB?_=t;2Sboehh((gVV~@LoY{oCNp+X^_?4Tr{4SZ!pT?nPUv{% zoC|K>Q0+VEzUN^^bo`@}4nOwZf4lkSl><*zFIWyU>j6})g_)(ucON35p%3rX^=`z` zy@u5-ZXNota*!x>hr{lTqR8kQG@Dcuy_=BajSMgP6ty5iMIxMTt(9@ovh1%-VX!sy zcDXT8a`7^Q%?Pfs3jnDwO;~ z7U?uic#7wx5N8vK3#o*e%H7Dl!ZA8bROZBB@ds!`DE8J?9>u~`+*&=E`rak< z2YY*H6XWI^Fqb>otwbXeD=oqX-d5=!Y8+Af#6v}fr72aV<+X>h3s{h1!LQnZ;n%hey;P`$nSJ^Kl&c-l&K>*E_=f2w-= zF_nX;zL)O17#G_VnG9q20`%EL7Cl7r;09^c>L!LHcgJoZc_UBf^E^f*WfN~GN;l7& z2&1U1bZ0WAET_WdFdbe?iiZ~IV$od7Ae|l9JrD$YfO=_nUyZIIFlu3l)Z!4&5jx;r zRt+2bb1gz$uQ7$50dZyjWz5EE`@M(*<_cSI6Ueu@gpuaR*l%jpW&iJIk6Z5{e2I&lbFPY{)ExK(CD`Auu|4|H0$W1B+! zWPzG2%oXU{>8&*FP@^?}{Mt0AGBjtM0=2^J@9=m-e?fdOj7a-n@R zx=?d^h}TS=WWz#b%hhlF?DA`?FaF@8d#``+R_fv{)7!g`i#&J8L6sHsF^{df=9iZp z`>UJ(c}J(Qd**=wQdE} z?YabM9bPJzAeteN2THiWDAm&GaFoL^HxM3^C&3(RK<*CLW=>EO2AN6qQ!5Va`p*50 z>F(T^X}?&wn40wB`S(}n6=$4Ezw*n`ld5+dlN>$E`Qyb)eoOV=_T%c8dml$;01So} zn0{a|Vbc2$v2cPwUz8Ct6NZC;+K@qr)q@JM8pgd#4_1=FC`+{g?*F}N|KnrJeT%2I zjz6jTah>VV)`a%)->tMx`R?B5Mo15hyskcyIH^2DICyt%|97XAE`XO39yD+Wh5@mb ziQVM{Um8GV!C*jtHHP)I5qy*V;gF7*(l+I!syf00aZnS!GrncYclSK>Um4*VG8MS& zDTE`JSLRY&hay>6$-)nnb6(j1acc;&VdddB>x{_ z=K**76Ja9Ykhcf_JWWXL4}rtlq8H|YU!w>tj!qvq{fv%ixu*vLKP)w2wN!I}dP0CK zPK}{lkz!x`YAZW+&(+MzsnoOAQqSE{y`g#|Sal7RVqau7246N)6^(3W78@3UZH2cBOd*I> zh&(t5mRhxs0f@i7=)V}Z%EKQ42FU67X}3Wt-UpM39}VcoxW z^PSb=`3w8ToZ2xhaq*!itUH4`|9dA)f8gzw@rx$3R+h4*6EC}UMRo6YQvGd>eW%m& zkGyR0;TzT-Id#m8ubkf2>F4ydPCW;`Ji7NY9{*1sU9h%^R??SesCJWz>CHaf)!koe z2{n`8E8_Fb#A$9OHgY&vw&1>UfNpfFh868@YM{~{<#`Rwr3!$68n>xDni@S?t^BZ! z-_+1hZll`T()OlUT-}srxdXie>0Irz7OZ3i=)}NY?I`X)x!1IU^GX+7m5gY#TXHO~ zTa*q?&@d3DxjA>>Q=>-Z5}xG!J{*>Q@8zgmZldu-SAse;K_!5P1hgGv&{!mgyMqsm z1NDFO9vF_E1HHy>qecnvD~;KM-)IH~>R-DAB>QMNShWlgNG#p;+(AqOzrED9b|<~> z1h;6V?jnt*Gw|aKzb`0T?7Yt(inpaNqB^QSsqUzrQ+23cQ?n?BdS=;yr&U|3F98J= z=oEDuG_I=NS^aY9k|=xEZL^Q0PP^d(tK5{C{Y*AGbtf}b+I!{7QlgzY37%D{<$K?T z2XCz&OvNa@`d0NZYB#l-`W~IFuByIWeX}}$$&^Wx+3FLkkD=n!vzuGHr&SxTYv`gb zhq$_C=pUhJA%o<>M|R$if1#3oMOq^l z*ZjRT4bQZu!G^6=_)+^&xAD=IN8Jt0%~YE2R}=l&4H>at>Cf~hAC=P#Jy<|uTq=oFr=6ry_+cX#>JC-_MKF(!D>*M* zZv@BVF@-Wzj$VJvRcvh3BAtC_cJ)Q+y0)m&x%wA#Z=O^>$v$;n^&@HhMrwVii%^UhQU>cNROosZHR7DY2`lE&L%I%~JP3)T4*~!G6hp z3G1U0B!j_P+1k>?WJ+ zk;$=Shb5431{DF381Mi@Edm0fMZ|~^FEp4))e2Rr)LNxj6}72YvEGWc*7~+q+ZU*B z-=<<8f4?)EfPLTh_xISHnLV=ee4pp@+|PG+0ww9!!-9q3wO+k41DNf zL9x=(BYKtu{fkw`j#s|W1PQH29~31wQn*^k-m2$AG!KQ>gQTrcoPZt0NGLb8G! zXNYhOc&S(jktl>o=mr`x*vx2Uw6k!8IB@^H>Jcb6d)4>p=%8QRPiC&-z2L{-j>BWO zPOpnUJhE}!+3CJn+?HRDs4vCwpOJwdee3&wHX12&qsePsN$ikBk7zR33go@3{sXkB zTge-*>)jX_`$S!PrgO@R*MEw%`Gw;jPzRyb@L-oH(|=$9w>v<$2rgl-X7Sr;kaB_t z%}^~kEf(`2FH(a}(q`G$V+D;?$T$0-WskWzcgU@{_qr*!+qgw~3dKPR8Z(a~WGZOz zqfw)`SGQRqyntu}9)$>^8E*xGhQ|;;!g(i6Et$bfGvn&7)YO{~ebPT~>JvxR*VG^3 zSA%^IZ}$)%F5W1qQT5fm@1IcrQ3BqtKmmN2UIlS|{3Mj^-$4!wV~tq9a@IiOU5z*{ zie{2DMxxPeMzdrzns+waBUbR||1=WjfvKsAY~xoK7@Gkk;|C6acHsS;`j~ok{TfGj z8j!)c>UmSU3sz`QJ59mVufRf3e?hxHz)}pGF_NVEmlxku_r6&m2FCV&TkyNUi~j(( z*?*`-(jbMpp>y5=T9nA5Bp?=>f!RzfMlX@|k%n-18%0VKMW&ENj%rtx9mo?3lMQ6i zyBm5+sei=5K>V&a9*@@#x*{MIxiNwpBd$nGq&u=IvO7XYBGzdpk0*OXG{VMmQ2R?B@(0@ zVr{a#uT^P9zs3bowAH>(YLylV023OhaHL+K$tNncmC=~47GBICO<2f5I|{BBsvCnx zn5#1P3(sG<(c|ddmE&KIq8x=5P+7ZfwC39LnwvGTph!!)wD55+T2%X_0E1|=OvRzs zMcaUO4wsNH5TRzs&q*ZDVYIqhK0}6lZ3xFB!grJWKGHMD+Kk{k;A&uRa>i#9;Xd_! zv9VxvL$BqL8NoRV<{1~L+vXU2eTznaH9eMfRmc9S?%B)C5kt#}t%AiVS(}11gA;~} z?;ul=ZixjXwceoioM+i5DKqzGJZ1Uh{k0&u`aLA4> z$4bX02gPF!hq19Rn9mM2DEX0wkw(FyxV*B_;9n*b8e%SPY= zyTN{N2vEDB;eQBu1R%6881(G(+V-(t)|>=(Gl@OXtSzdxq@xpYRc-x7_4PYXKRT1<|#o{88X0?|F1#E_o3Wg2=={xw(LzCm#Dw!&YrUk2;SuUDAfBn@V0%?H;Y+# zF?s6)s(Pkr#iAF9SihJhTzMMD)%OU(Vz^-{sXB1GXNzUu@16L?nV?y{xWKoVZSfFI zPv^DRP(MWF7a=Ogu_u*{t3y|X@Ee0*yAMc`%kAFAS|rx(VJ&h5B)#u>aR4GN3(xS5 zL7Nnma7l`|S!U2Hl7kWQHx@wLWqHW*l;tH0iLWvMf_Gb7JjsH6GS-DHLJkRwp?Fg$ zro_lt%&=uKREJL`xG#HaI1UjHWlJYCAjG_U9*N8tsu0kP$Vm$4QMeezC8AJ3CIB8u z0~Cp{WQfo@))$4C2KJk~Q|`;uAE=kVcjTh;bITU9c&FuxVCf&fS6@^gI00Sc~EkQBL}3z(nr##5-CY+HPuwDRKZ}nnpLoo zOtmV6d{t|e84Onama2IqP-Tf<7r~9r-#GCu=OX7O=S$A_oK(UIx~at!ZlrFc_ER5I zBM;1XjGZ_*Ri9QbKD{Y=KDEsR;#&+V?`o80pf=u`f;>J~npz z*x|~tFAwWSnlSXbzC6s0eR-m0n@pAyOsJ_|-9|yOQnOYH`cW;P3)j&(fp&=`loV}1 zH$ml3y8yWDgKaaU{HX*SF- zGBX@}Lx*}ZNrInpX1C4MNt2znY0sQ|%WbF3(;3!?X9x?1_&BT7CUJY z3?ITzqo`)D9?|>aD6%Et13$Sw`nsUVa&0Z3AZb{IsGV;vX!J(3HN>e7;rh1tJIS zfCzS_GAj_kTrQ{tux$b_2?Eap0VADciUAnISO-aO2;QsL8yN8si-eT|KEMOQ$tU?P zei2XN1_OG#%x~s#KG$1A3CNURmZ8^z?7qI<)A;X{c?1Xsd?V*SX%)j8m8}H6{_d$? zzp?h}X$_sTeBO2?@&sGB)I@_>XFW@pSCq-z$?fVE^$+J%a@FDR-dD)z%=)xjFt9GK z(U^CNSxD+Q)Ow%7yKDy;<#2awRSd@sBIt^&jJy;f!0P&|>T$wV5Ac<-mty!u(HEmQ z(Igc3mB{dP_456T|Dq|zrYMT(Qx*!yo218XJbPE}X1!lt844f=5)&p!ey`Mfr6ZlOu zFw(!FaiTt*azjQ~9oat>8pCNxjYJY&M__KJ4JM#v%oET< zhLC_GeoW**B+hP$@$(kk%6ti?>TI!)pykk zpY}V9Q;jAH)B%FacB=oKFeSQhlGL)#pOG&@{10GPC^KeYGdL*70BzI-tQ0+=R&>8V$zV0ORp`wwW2pY-R|8^m%>P;e>?aL|a>{Kj7bnx51OP zreGlWT&_vV<(hKArU35sm>ClhH4IYCgKbo`b%bame11PybylNQTNVu_sAPMxRCbWJ z$I~NXH7WE&`=Yqn%Me~q+=F{OBwmLv!Pnp9uTQ34nw2jW(Et=L?uaW_O7xtVg{ACwfl1kUclP1gpfea6C8_N@hrkI~eoM$3I; zTl)^FC+(f9apU^)<429#a=FK@m2PCnsh~4SJfeQ6K21EzR7saJc=Do>-_82FST^VI zi(SN;f4xh5a`K}&E)N$C7>#6sjAb{1--A_Eo^cz@GR>}q?8uJ)iGCFFYytbVvZIxs z&EqUxkOC2Rid%jb-V}-Xfe)1hEBz$R4SfIr{d}BNTY=Ij!PR; zycjjG`B+@Us*RwU8*CiO3yx~2$_@rSRqKeq$`KHw2%Hb`3crlMoWGXe%OB=H;!Ql3 zP8oTMBLSIP2Vq=G#2)+nSQ&y#<@1v#xMP*_#4>51Lg`Uy6r7$g{Jv>MXlWW~4?xL4 zdB$W>CJR8+51UH`4N8!tL_s2{drEe+My%!H)_UVqa(?k!G>A;a_f73y=cR>nx~{q9 z;Z)?&jbrQFfnnM=%uU(c$9D0y?Duku?>ginH}QAz5Ajd&LGTMO4a}(srWcA}b`B#Vj2;%(3Ptco|E~V#0J!B( zDsZcbX}kY^^WeAle0kFYQBeBh)8O)dsE7YUeMFVXzp9_Av$s8b5HR4WyYAnQ0M7_@ zAPFs=dhAJ*V-7veFmmkB_)%pwJa8*km+W@O&1R@2$+|jS)#)~Gj3VP?UBo-+aM-e- zZV;lblrE8`$;Mo1i>wsxJ<;wI298~@`;9t zcv|hoQS_|x#R<)M$c>)PQ{c3?Sx&2Fz%r*S&>Rj;13BcdOXP&%P^)bq^l)Z8V&t!y zZoZ!t8y4b5u9uj>UW(Lv?jd zr-hS%)bI0Rw$h+QY=Au1%88=fioQFK@&$sZJu4=7At}L+GU#lI)hZJl{51pzkN9k) zOkz`aC6k107l!5C?$-Z{HS>@)XPm~GC?%j*dGdOmS?j<hfaXii z{pbqN%AYxY)54$0Cvf53U31RA2H$RxQePcSe^nEr9vyPr#ZnBoX`7 zc5-QYzVA^GVxM{>@3{;&Ze7qi>wI69YW$|4d|ls^4Eh5oH{^%%aw|mSMyw4;Ph)vV z-%FfM+2H^|*9K{4foO?0C7`gdES|N8qi>((?|XPRvDi-dojIm$Zll#ij+Q_A)e6y%9RGmip!7zuo0O_#1}2u><_kzZUmy_x z?LJ`h0UsMMkrB?}a1C-I0MuZF4ERhe8T9t|S%AfY5&Hm85R&$54b3*jA|HSl=h!C& zF^LegGICU?fJ_}d4L6bf)S}*c{RW~fsh1=60u*l2c;2by1)`B83J}(k0JtV3B-i9B zN-s>iXgGYKI{x~|_w2p~Pxi-)2d2FA=HVyFH^woX{Q8{fYd&fCc+p*dQTlJizq;YP z`L~0m>o)xc{??t4i{Gcx5VeMsV$hXyHM-`zNSBKjgl&V zkf}0E%5oirRSgD;&~lYfEy&O@WcHa%hJD5W*oR@6eZefq3Q;~AFw$Hk6u~2!&!?px zbG6EPRC`p&9pg|L>#@q0C&rGS=Kmq{t*KEgK$kC!0{_tlkO2|82H}z+saF^3-e5EW z?Sp9Zhcf~NH*xPdmhNdYjO~LP>cXbIg1mtlsPDb`=j_cP>PdXs`fIO`&Ph_~44YP; z8Ep0DPVQa7J4KhFO5@D*xY19%YxE|K7tDD8X~mbuKcF$F^NQGSl}08q19~$~uMGu3 zZ8oN<3Cm^^KCkyW#w0O}2?JnTEFr~Wi4a0rtq!COf_w~^d7{ghCuyZk)Gd|2vX@Vjmb%aW)6rK{+iGKcddUh6 z?s}Xa@{k49_GZHk10#RJ>2S1Rfh`h)ChQFVS(m8HO}~ERg@@aD_lj z10%CS_nC))V#04)KIU05&u=CV&S4p6$?f-@+>bwadD+`Oi=-=N@z#I6LC9dr62yz= zkAGn3g}m4Tc0N($;GH%im@z@~ERO1=By?tlXPjcO!Uy;UR41iufCrq!dAUF%3PE}~ zF3;u*Y*S+>5W23uQL3+RZ1M)Y+t?C9`ejFMh=vi3;S-Vig z%wBWG+-@d2&7FY-=I6}hYbdvb<(nF@Kzm?8;I#mGAOK>4VgL^W^7WxqJf2HcQg|iR zm%>x2JX0bw`C@)wp2+7((uRe!62N>e57&;@lQ3(0^%ZP|mr!}H-k$~!kbJl*$Bun* z;uzFwNVB1ZE$d55)%;4bwzQLLJb7R+p30tsQ)Z2bB2flZp90q&={s~z*Dk>S^nAJu ztpg-c(6fiGW|U~a&$j?J`MG6vfnEldxg+N>fX)0FH(b&{&u72(%&4Br{`M!p+&yE8 z`r?N8=8fu`BRPPnzO#e4EQ8 zxm>1VGVYR1X1kLqC0NNDs@CNPeZg#Q#NQxDRT~9mQ-BOaK(^r_)41Z^pxrFklEub4 zQ!_?D&$g~H81#Atn@!M)i>?)J7Y++Y1%o00L1?V2Ys_gtrmuHSPtetb_tgIr!7l`f zQ*;D*cqN_ z#F;Ld7nmZrRJ}KsaMcBk#z-#)BlXNPDIM>Qsrg!V?YS*|01 zL=XTeFMmMt1Kc05qWyoi`TWrS@%wCkD+pkO#T1sRoM)0d;CLRyF{Z?Dp4H$#R7xK0FX8D%* zKJ?K(O_jj~%w;AQQCDflzR<?l{ad-^4p6;qlbV^%lrCk@e){PL*yq`K&xh+ShNjZ(v}p^u zP+bg+j|A&1oishee}!65H>Wdhmu)t~%ydo#kArvTE9P#RPDJW?NcnasY3PYLyCHu^oSWMKF=RNp3~}4@~AWx zW#Lf74D_PhO$h@r2udOqHvlI}OVfsUJN^)0)c$v?vlin#I6|MCw-W^3@0#D}P@~rA zL=JSD&e{V?G%5dUJK6VxfA$#>vg}jC#9QQNm=&9&L@X8@HyRATK*?i(S%xt$IjjJJ z0s!8K!3f10u?@6*uv`Z4&VrtH_soTU&CHi~ zJJc}!wzD1t;{Wpg(QNmaDyX7dT~EHH^#bJ;KMpU{N-qJ95hSYZ*$t_V;d(1j?o=yK zt$s2J{-X5)p;jRJK@6y$!#fLVceX%jYJ^{d8!%+{8=>I*!eErp&gupWISjn;Mu}!4 zl*%>(07i^R7=S^GY3jiosG@3p3gEPQ0TT#oVMw4S%!uIF73y+I{Prvh^$t6W*c`)e>Uw;8Ah`{7p2rLTNj#(v-vr{AIm9V->ZVIz$nW-AEdBUjPCp zDFbmA@h1qcQ0!@n!g3SEqR!m{vxDrPVfH$;Zm4n|MfBH8pl>ZdTk~S;$M?r!T049J54wU z+=lnzYv8ZO0sMi`y+#GzP$S_rAV9^pnp+9iC5(SPOML}6h=X7Ts?i*OpZJ)VkHxSY z_K*^<3z;o4!{Cg^F43s4)}R!Ch`c09vAJhhDa6d{T3egV`PXL zvRG0>cF|uy>{TR(?Dd8?LG)udW#oB2#1lNv#Y1sC-v68na4z6F+{AspR%@lu!l2Nk z9&N3RLMhYxT2B>+Xzm@aw@78cM9{yvP^)FF6-H`ZtF_i5pp{f2-v%d+Z{1?IwVWYl zXZ)xqR`in3yglneu;=X#+2w0o+%P7k+*bi+*4C3mMm?Y&^0^b2;@92P+LFJRR6kwW z^EP-k*zTsSrm;2A9Qe&8iaHHNFjhgzy#yu10lnVG6<;&iV@(f$V&@KZfVS{kBFbSD>(6W<|FhkQEohuo*c+mkq=+F5p{)_#j zzdy)4$9xC@i;yA=De%+zi})*fay}1uv>MQZl@w74< z)M^%!31_VtMWdbCMWBHvtAUTbNzG zgmuVnPYn4)tp5232k1eg5qh+!`z8ljzzj@;(dBT3T*MmJ0oQ+^a1ts6!DIbB!N-En z1>XvO5~R2w2p(?azO0D^@<}I_u_hKmYhgkxChLg#8p;FR`)rouK&L@oiwYv?m~7er zNN)6QB%I*-sq{sR4Qy9mTqAW3%)!qYU%$ACeC5fu9&pVcd(>iE$8$Giv+F-2Xt0uH zf;LMise?07JNK*;jBkN^WyXrRYH=HhU*=N>utyU*!_y> zh#A;Wgw2HdeCo0?B+73T37SwCMmV0g*-X+9A$sBZI}l+ZE3>sqaP66w^yk`j#Rf&= zG4LFC3w#Jj0Nh%&8t<0f*RyQUVdMKBqo1SSqCccb`fvc1*5vaj(wadWGZ|;C)oyG4 zM{m4UCPoNs$PeNy~E{pIo;YYXd>m7q!)-3 z)TgOtA8@C9ghbn2Rcy#k*dmemu+PV`{4kBBSV@voETmnJ37EiE$R0sLasw0XNIeIg zIXxzX1S2yU2&+H?53-3CNvxqKvcR=s<(kTbtdgt%q4{*Ff!2Z3hP2yciy8u0;C{k? z@RCpNKIh7Erf!OhcO@5eL>~7Zd~KQfx1qi(mF(;p*;rQ|e-U4bgYY|xXXIL@oFBOM zwdME{d~B8a!XM{OsVm>R`ulLD#}`1V{DJ7i(pV9j3L2lr{NqO-x7%f8{3;8ez-$;4ELY|gwPjXXm`p6juT{Df=8S;h{{X@3K_zwdP52G;w?(PU2ahXx7>35 z&cvPsZc6}EtBm&tQRh^>q2u~c$YHexp@&?7K6C$3xS$C~egAWYk5H#&$bcKPHhD%i zAP7e78Eb3JfqDn&C~~4vm%MJ0YpP6d7dV05jNWmaFBB?zPsc=*1c^7+i`;sBYM&D= zi>$4UQ_kzN8c^%06_Ai$QGGM5^$2tTFgYC~0cuSj2pD4hvzFZV@MnjA|46_mS~rvO z#ZRiw_ki4Ozg6FR`7gakz)#M;=E8HXYE!Sguy63n;e#90e_j@wn!9L`a&Y)P6ZB%2 z$H}(y&p9-+xf1ggRxQ2ssilkBJLVJDsJ}RS11K&kb)H<)a#p%+${E$xOb*j=pA?`R zWWgdO5ez{JB~j8QiJWCSlW^f7EMZOr2~0tbjshhdMO>alkrynD^qR7a=VcznV|d;i zggOKdu?+Kq$0>O{PCSHz&_E(BB@$_;0>8YGQ@Fz%L38knoUDf-MYGeI2tm`$AK_4l zhvTe6Vl^Tn#S6J$i00B-wnvb)XA>(Y5X%Tq8z;~YO`snNzld<61%_`!&q^M?>~p4^ zxHFW-ouoP8gwA|1LC#EUO8hiIU?qoLmL6adZ&(CI^-90r0)Qzt|WpP=nQ}g zKntiPz*0B3LVb<|#>>)gTQe*6BR?010lI z*RoCxi^3ghb2dHaQ$Tp5W1rr7t~Z8%{o)?ZYe7gqWBh&m9k{|~EQ?+DG!}s52}86B z1RQqzKq3m4CYrEE9i*oY+fHMFfM+NqS`ZOqq9|J|bweB%HS(hDNPrnpVA@Vt9QK5T zpls1uQPjwD81;ola~aLA9o75&3#bztVcqHFPI*`E-}~<-dd#(ux26qoqzoq_-ZZ|r z)Y(-m%;-|BGiLwdob0sde;Hj(gSlE!pLVk;n4A~V1HDB^W zu0$d;9P+w2M3bX-V2Af@gHQ(FMcAWsEBgfd5lgT&a39TSeh<23PGglCKIln~({9)V z^!w7A>(PDVr*eT>3!>=+7~awgoAY{E>WBiouiC;QXvTiFk@boTHx?t~_bni){5La#~W=M$!Z zCUVZ!ik_sM)TYL7WCChpiHhuSLro4fTn^wm=AIg?6CzOYh3>30>thg_<=Cl?6#TQh zH_#-Ayu4!bPq(hwOEz!1YL=%QZi&S^ZriTDdR0qmz|nDj-dF_Od5K;#2U0t(xaiK; zD%qb=lDblT#Y_Ur=7pEttB@_9Eq8KcCXy@`8s@D4^yZSfyKJ;uE$i@qy_I!1<6-;B zf70hyll2IrOHhJe)VfmEDIT)~S(IU%P6sg&(U+acD-D?o<)A6051gn4aDtPz-8xWugwx! z^t0>X%4JJpN0#g>uPR?z{;*7zk;W`50D$SHIiO4(n0<6M-ZLA_e)>!(9h!LPu$wuR z8iR^Q3&NDk918m*&DE>RfL2NiU#9q;Jzjj_jI!)=(+uA#RyrfiY>L9QG&n@k(i|pi+pRSs!wC-#X zJ1z~yA9}WKdgDDMM~Av*p(7YxlrlaawindnKXy0HFMKITXX4K5A8LtKuYZty`|E15 zMIFzP0DE^@UUwpHsa>{c)VJi};Pa zeF2*30}&F3{MZcIp2mvM7mQnNveN~Z>!Lg`A&bYEYa|+68Ve$s<82bpYc2jZbg9AR z8VH1-0UQdTYg{-k2V7B4Lnzk>T}-$4HIg-M_!=c9QTp$3A_nEQu1p)FW(9k^PF zms-HysfuIl?{E4kzsUrC`!jdPR?w(q5>wUBNMQZ-?PoyUhh{X~U7KLg|1{=+^n?rH z(5i-@1!U*onN1&a;e==Kl6J&ZpF$zjN!Opk-rge)o~irt6Lp z)sbDlQJ;Hm=r>@>SWiJ?UD_~BrCt{rdh#~c+0?#N_(9OIxIP4T9sO?#Ti zCOyNUQ2@0heeN0MK8GH@79VNNBh9VxRQ|N|2g0Jcn!eWIXQD9)^cq0341pwpBF8%1 zOh&_?uGWf13=tFuLtRVFXb#GRKUJIO5(GJp%3n)Tb8eZInm)6BYQ??d1@*umruXzy z{2DKB*|=oklSTt)NmU%+uPwe}Fn}uP1<~LKk_ZGRU9}CGEF-KpHslmj!OXDVk3~3V12B3(m$*{I zahC;P79e64GAS$)a9k7sVGx|~m=FZ`#)f{U2fn-8bE9Xs=aA=R4~==N0oE_cQ+U`YGsUCEPl^jmGlOImoqMJ>iEaEiu@KTYf!(XL z^f}fz@L2}1fI6STO^gv*M=$7*927yo8G^sTBiila7KA;3{H15XCN2&>gp0NsKv?j8TL}brZ=jZK5;Q3zBkS0@j>{ zsIEhsPsM~md|!Cqnenry2Ik)rx^Hj0!@H!Z$zFbAC%OBly(q-~c!ZKGlZ5 z0MM*iI38%u@F{5Fq!5GLfG#m6(?D}UYHlvLc(K5wJn&1JO(v^oLkm8R5tzdA&{J%K zHgYK37*@i!hYyD-EDSZ1e<)@ha^yfxbTk7O?;+|^OHvo5ZcmXLQm>|PJOxtCCI+M^ zTcNQqy|A#bqCjmZ{G#wtfjC?^ik`3nDCE|m&x5GqBQ=`o)fqIym9?zX zWSBxjs#8Qc%`wI_udkwqE^eK2B^@)> zhwtZ#GZ(K z7#oing0Y?$9+MQSN0tycNt_$FUr;Qd5#_O^7|~OAPTga5pVpCmb=TJ6b({ehUQk*< z3ji&3#LmKV1$-xBx3v={jDCd7If!6d4NfMr7D}={C4BT)0cCG9mGWqQqAplW*4T@1 zHfyO(WS%rnT=4+?5XJBjThU}K+@QHdo63bdW_O%*i2N}yMe`}54WF}X_T0D0d){SR zni^X_SBLIuS{u1jy=RfdUh28bSH@{}&mEV{`AR)TE(JZ;7B(1vzk2Q$>Z6nl{9skr zw3hFvcYhLgynOk=5r^3{_hxYB{8qFIG(?C8;VM)>SUJNB4KUnWm#M?=On^NQxQ#I* z-tKL0>uK$2JGbqUHu^2ZQ<+S*t-YpKXA zX$-xDVdcAMZb$n)(9VQ^jU;x)_nKbUG-HJO>9?&YGu!-p$X!cLECJ7U+FVf(( zFdouNrDD=qn>Lr!MFko|I+Q?%*e-!eD?5LF^{P3$zjJ1J`kLtppOTKR-lWV9r)_1| z?Cy>$E>qS0n^(d z@fY>ct7ojXMiPauL3kF6dRW)19I-^x{qvLtzdtnO^hQk(OAnO16A=`|39uQ+41$>!TlyJ@U4VTl&w-rPuk} zdZws%oP1?YslIK)&tCd9cmVR`4wWWRMsgmu>xoWffr4vECmvcTRTuP>%jNuV)!S9C z6?|5qjdmD*=7m`zNn{9mcO(+%K|@0m%WTu@K*p8!Y}*<8E?xe^mF~C@ zDu)_Y{Yc%nXkco3RcuOmYD=u4XIJm}zn&7Z+4|a|t@jNdpH0@Mdu6}fSjwczOQv0N z-$ey^dD>sU?jH3G>rPd@FYOY{?2JT9=k%o;hQJ-gfyPKblKy=vgTFxuSPXjz^+A2C zTxMcqJBoO0z&FJ36~>K5oMHTCvv1h1xIMBT8GC+3vcm^KfDcv<&2Tcy&^Hl>H$lYk zf?aFE_;Xk!WLYfew@Pb|QJrHfR`9bK+u2CM6xKxYc;%~g*c76Z;r*Ch1{*AXvKmU2* zXOvK%xO2h$t4k}Mjgp0*E-buXy)T}7^YYoxoc&m6O6aK>Z?s?XDwTH-+AV>!>(^-4|3nPcV%w1uk%hFo3co5gNj5|n ziG)<~-VgydIES71DXJg__Wlpb1buzJoxTr! zF*{aKk`|QoC0r=;TXjL~ec7Z4l58@GFSAt=dtI|2&9Afi+*K@h42`E8>ph0XK7$O< zZK~MhTw&A_)lA;eX1I5C;Ue{qE9&p`wbA!4y#xq@(`GEkzy85JzD?nSKe}sk1x=|Q zKT~DFXIdmj!pcevL;IFs2k0F99bTH_ALH0QGyzgv19_1p9t)a)DK{~&L)$|ILchL? z%IVoB-O2_|Fele>!PHFW1?rz2Q?FPGb}q-AZN-kQ?Ty`6p6p*FXQITJ$gjuLT?9kE zf_b55f2~p#EM@|_-&oM6?ROx)3IDhx0a20!ht1}*3^_y`k;Mp%!C|aQa3Vmvnn-T5 z)}|ckcjxq7UbG>VsJ7~aJ~yxou{W=Q^2FqBD_5qDSj%O2&Xui4%4njQSRnKiGuqZd zD`+I5f~*IZ#AXq7qT|u+g>45~6455gcI<)`Gd7HTtF(;Sz7o0r~43Aa7l1{+Zshh9881h0`O;R%;-%rJERnDMj#p!c6 zUZNF=rWFTmq&ixLL!n%*Fc-8kh z&WMHAT{*21^Jk6Gj-1?az+eIf4j3Fj z!tER{Y8{i0!)L7~O@s#oy2@}6fUW2O4V!%&K4V&EB|Km_ixs{EAGDX?v-Xl59@t$N zVPLGhkqy4$iNB(-`lMRz`{09h;tbcr zc6I;!`TbXK+j8^vtG8XfZT|dioBKEHyk*x9Hg0*j4&@3`@*>#ypcuNF4#-@j?o4}O4lji^Yr6J7@`3t)Z&F%Av_$*=#cEPC}LF3xz<4ra@~EqJ_i6 zava;rf)J@~Or#Zu=6aE(f=o3uJrwQZ@VVBp$Z7TBpO?o@XjLrb!WbGBjwGf~K>wla zdo86mSv>yDp2h)qfDpw1fu(GK|8W|)gypcDgb&}SAa|Z#Y;FUzA#4cS0DLffqwE}a zt8;DOfZw8CWCd%6Gfj(YmF2dBz&AKifd0kO40zb4`uPC(Z>#F?oK}qvmUZ73>IRox zlA&s4<`H!<2;UJ#CFx{mVEt!H)7{ns-8)Y!OGkTLozmh4ETZrvY48S7SPLU5TvzF6 zx@-kSpS0jIRPB6Cy(0xb#;PBVu~6I0QYCT;<%BxEgz^Tl@jogit4q$fSc_aZ1kb8w zm&}NO$pDkdGE8{A-r%sEtUnrwV5#C!o2^Medmjy;>RDIns1429Faz@djiE92O-C{4 z?;!Prnk0L5J%v)-wOXXn$ucp``hj8+=djbwOlWXx<3&#cJi8hQpt(QPmIB*3I*Boy~_v z=Hksmpabl?c5$}lhtn>b)j9UNF^+r|M9wII%40VU^xda^aO2pCZx14BM~U}{z2w_k zcBP<%g~Rkw8mG6jRqU|+s2#U&f6MkEsvbRTI%>jA+adLPwa#~F8;tdqzp0Ajr>o_? z@{I0Mer6ZwY3}MS6=uyO-a8|kpFKNYn1#=6Xqq#tke>*P>BL>5Z#*+du#Kn1ZdmcbS(P056pgEq;_oLAyFZ){kkhglXAIq_QYc99gt^z&|afMfvX zWk`;Tyy8G)aOxY!AcAPaJ}0IZ1744F6DZ@Nxj*#3m9jeZG8dqix}ky|^;RI*TsdR; zqN}PjdHH&|8;IBX@)lQgxf=1!d?4EWT?$k0CnJPy4t}81Ijm3PXxEN9$>YWbHoH*mXc;dJ(wQCntBW^0DXWQhMmPGX5l zxF_5fUK8FLrov%15R4LSzw-ImTqxa`#?$YV62Hp1s@Zq8=0Gm@ze`fDdIBn}6B^Ww zIa~FOh;+G{u=KROE}+k&J>@62yTJZmViwlp=MJYmN<@(&vWH8K<`Q2_Bq?5Z!=wK{ z@^;b%Z5xY`>Q6C?Nx$g(TTSI3j+_> zS0UwI)hIVw%a~}x>&4T83Gvg+qC>CWw)6GZci#3o-n3=O;;ma3pK}fI%PFIgrwU}DX=a&70O^5h;&mCvxC)1J7-o9e2C)Yh ztya-V&^bNqiuP1OkDo&Wr&Uh`YsQ7PHw|(jn$y z-sQdT!k`c#&kHVX&&=u!p0)hZWc{4GlWA|J(oyd~Gws0r#G^!%{2Xe@kRq6Y7vMI~ z2i8D%1KOrlXmhQ6t=&ir!}qTSPW2VyQ7}V&26Z`YRY|f0{q4DcP>S*lFyI9@^1#HU zIebqHG{!(I=4;4^nYQ-!8>e+i)24N4xg)pFH;@sfOh!cH`4+llFqsDQcO)7>d!?9;1YmDKs(C(yVs3h9;-GFAJ+(s90bS1j*E)n=dH*q_p z)&cA=b`;I&>?(GFE|XzKTYJV}n+B$7{b#(EaYT)12v?3|j#NgEjvnc)oa&WDxTBYN zxAsDBTF)4{zVXZr9ImB~wCSC_lbg`tdgM_t&5R^`YYizD;rmm_y6-- zM9>VxHxC?Llsj+z*8zGE@z)O34?3alwqu=2nj|Cw{s7x>2yKakAC)9bAYVosF5rU6 zBwzriBs7jf%4KwTm@r1h^54$6ni{dSa>1a3;%PzYWb?r@OBK0>dK zUD|j1G-oiKPn|^-wf(~&Lir&g*s;s>uBQeYN@PmfR$?!Uk|c@}Q{{eXwvAY@UjoI< zLxHzQ1gT?!7K>)xUKx{Y5=q%e5dj!q$UreKqq@A&+?VCCW2bK)hKj?{ZgFTD-l_3y zS}_Ivwe`aF9S4YLC$lbp#X0OOw{?4#oRgDgjXh%^jRsr7Xv{FC25?ZT>%Nbm@wYXt zV#gAS-8!soNGJ|tB>%EaD@S_SREx%G8F$pAcv{Gsn6Sxk@YRJI-oAO+rZ?N=#aB<6 zeH|rjTyXv2E6%y@IrX9{@Xnd8ofu`3rn?V6R;g_YC{X#u=<=G?23tv!|T#^8HfZKq&M!k9mgt!59oqF|D zXeX^6f1kRG%3=xZN(sY~IEPPxi*CU0z<)FLeN0qL0ByWO;4u-alu97iTf%Cey6+pG z>O`Ny*8P9%y?LBe#kB{1>u$Yw-`@9qpPpW(d#3O7Y~9ndGQcn*yA0rl5H*OPxDiCu zaSb}iAZpw~5|bE16xTSpB$ojP^uobQ)BGx=SDdzJJX@pV|f*aWXwQvIHF|J(Nj5kyA)^!LF2+$YGX zD2{2?6WdDOczA}1G+Qk1Cc~y=G8~TKP7IqZNye8L!|8?v1!5F}CLJO4JIB&K;BykY zSuO;n=vYt#cd5Ka6NuZJIa`sB`={;{dC7!7qyO^KWo?8{_?2;yEZgAHID z_MwU-GARJUWSWT(i6)Rh_ezr9U6o!BrQam%C60V6{eBuQbQzKilPT$v;hJk+s$2tl z!PAv*NM}Hec#ZV-s`M;yBm4#|-JC|!%@;~PSZ&X0+#YL5Ly-jE4#g=+JG!9eiWjT; z2f$O+D;oF?260(Fd>RbakLo;L1WTf8 z$siV&%xFvd0D`ZdIX;AX^}HWr}+Xk1G73=DWNMolg) zB5CJxsJ23aRKj}#v;g3;tfQw+aQJLwxOnt<+tJf->%dKB#leik5o;EDeiQ-1R;o~{ zaWM2mjCjF+BParf*t)S91|1-Z3N*8fl}D)DGQ5dLSkGu(DFRl9DWm*2fwO~zdt55) z$9U*P5YdUrhgMk>P%I`A5%WgAB42#lcF^%$f-ycsD@|bStuKOg;WXXRNjg6LkwHlh zI;V4VWY5zypx6xXsFhtt7k{=zW{gf*C(~zA@v!Mm#y?ScP6HneBvMI0h#MA5MsD!vgtgxL0}e?tA%k`@fP0O4}diZF22T2y>RH*UXp#d^YDX}{aaKygQH zi;(n2-2Q~vekd)q-{GdeOnN77zo>gPY)z&8?le%q_B+nCj}_*V5RoSyD5V-~a3Rgd zL+-Y2*ggs(pml6^S3Z_tp+ve#|8HPkKemU`pze0^t1VKIy zWPY-i2So<58ON6~pa>I)A?1ONNb;9jZ~&~*3S+aTDNz~?xr+GV8GZlZE0JDTF&FzBegHyAkef#lDa*5Wtenb zD80KXy&k+$SxKE93Q9XKlzyoq4M+Je#8F7<&?t24Yc3eBxng_uido>9ivF+*iH9%L z|6sK>tHHC?b=Q-D;*_Lb8dreWO)R6Iqvt_?%~#?cRe~J^p!#LtQ57Inay#5miwL#^ z{Ac79z^Xv!dQq@@4R{bdxJFn9?q4I^Al$G9+)o`tFVTDWC4NA>oZF^eV-7G@!ipKW z-YBinKwr>eQOlh+!m3oNEtWg1N|V*9l(7l}X|-4kYNe75+mcSgq>;<8(gVCf!yYQ_@Z7NClw-b9B1kM)K8EEiy0O zEaSa0^wbfy1G2mll|6o4O`00fw$W()9MQtH6h1>7gc9I`HP2hnxt@fB8dU(Crx3)L zr&bB{Gzx+beIIN)_SV+fcE9z?hlGgmr`Inv(fyKBZ{f4?`r=)tE>->16y z*&{E5HD_1NwY%+K`Nk*0_k_Y#S4Q)|LXMYO$kL$jKSKY__1_% zC@+oC!HTuvo9nG%kgpvTqV(>nwCGP_>3nkvN;h37{Zd65j?oPj-A$pymrFlb)m`-s zp(Se`ARN$=HJxjTF{Tx6O{>(J1(nv+rvl0_NL2O1{h)m6Gx|TE-HQ@AVt;8C5s!Ij zxFG}%2lUmHO064!&03vFtJO7(`g~fTbJKQtVsv!`=px=o8kOAH<*W)}UX9BQ=24q- z)L|QUjN1_c=9!mFCO(KEu=MzE$%gfv3Zyos;l4xX20BoG zwCLzj6bmb!IwhXxBc48JC*iha`Zz({AB%A2h;jqSDqzO4bCHiR*G4`k;U61oNW;Ki zG;H%N2-x`3bMTJ=!EI|*&8!28-w7X|xlFlosA=f-)Z{NrFMRWBTa75&ZiOJHZ-)L+D_mcC>+0)AL`Wix@}p4r#=I!;nbMj} z+I+rcEaP;JX^qh_ik1-;g7o=9dOe}=Y*C>MSCz^Oz2Pk^a)DH^i`jZm$L0{)KJsja z;g)O?vCE+T!Wlpkd6?+s+6y?t+$OCsR-?gRWxFP)X^dr3HB6ANpwG%EQd<>3^Dz8} z?}Kk_`Sy1oc>eFtEWV{V;!kU>+L`N~)&KbV+4*Z9?45gi&;2i6zvRkdXimmz>q}E| zvh?^ZH^1y#@bedi&lh&3T5|Dj)&v62zA%ga^OCu9|MXYkm~helqc_dYraM+<#g+UB z^(lP@j^-|LCKAsQglM0$4RIn&Ht5e;_mT9es`UD4=}bcyN@vcKrVaGziZt{oUa3eo zG<~V`#q^P?^ep0;igXKZNz3`tW%`%ZmaN7t5m$;_4-}^)?KK`0YWs9+2C#nVioyj~ zK+Er*`Yru$)H0$Du10OdEv1lLp`_wrf}q1=iG-JK+^$x~x6{U!F@wQk$&7iqL^z7Z zj8CcIqgz;37XTo2XCTnQWqnyPyX7q%;B-JY(JlhjAaoTma5tIAW^p_S;TlMAHPvEj zXt{Gzk#Fuov?kVE2?F3SC?%GzRM2XI0g^8E&-%|Bzo7&43r8-#6g>ETzS&@D_t@nZ zUDAE=kALUxzx}B@c6Q%CInv$t?B>?HPkeUw!{1}q(!y_7Eq@p6whx%pcD9RNu(0c^ zKX$H}vjQx#zA|%Q^7%z?fGzI0FpmIJ4+>U_rOL3EzP^X!jAJT1Z&2}$ialtvG1cTy zgfdNr!wf-q9p%h+##r~Zmy`dLuyAnes$m_BMZ?%iS`%-xc>&zV#{h`=Q1)^zxy3b+ z74eLQalj-y9d?90cC3PIq_5e1pj-ktp}utYF%4RS`?JCaO6Gdq4_sSrS^m9euk~}> z{BQ$*^8@T-;HLfE^9#W+@9a7fbu0n$u04%IspU(y7R)|BAG=upq^IG@{ov;_ThoQM zR9<0b6SOS`PpX4ISPB)rsMuo8sEN_)p-M#q?jv%~A%2@PL0tlLnkth=lN21WN zqNXuqXuDcCwMqEV;gRow;%kLrnNK*z0lTL)Gq3RMeebQk@8?DOwWj|65+;QM!kcgH zI0BmO_pKV>2L_jVhgJwX1?!g0;KWEXikhN&=i1V{sl%zJ!leCt=@;;QyhyU@RcSkxww*8iM|>wQlC1i)wEN4X>2}=ii==i} zr2}>(9XMawitqeI;+@}68LiGF6s9EIRSP{rETZ41m*A6AClN21*vAP%{e(`(J#Nux zjMU?Hg+g69EX4=6liBonA$Q<6`<$)M_1csZ9h$F)pRXt`iC0wh)YuA?GlFVeDIUHDj`JTqgPd(%7us0#tSY z2&WFG?-AA1Jv>sOt&>^va1UfbK8AtvFG?&K5+;7Rr8pd0G6?whuTweat$w|pSqu7D zVFt-~%A;>mS8V!F__xwk@hdKS;Mbu2iKW7eC+IDJUH&;c>T6 z8h6!E+EJ82-@Co`Zi~{Vs?zJHrQ5M|+lA7nE7EY>yYH&A38IB~ ztkjYxfWZ)p1y$)(vc3h#)CBPkB3}slgH&v^t`6#J-cE6TVzSr=~NRzmNEOo{-yq>{ItJX#*GktPMzRRO^P+#lL&BS zQeUV*0)QHHyJ0~6U**}nh#Zc9Rn9HcCjaC4|Ftx`WXXefD9;n50bF!?x<;FE3a}nF!S0NRnYB`ej}* z3;J&oH5c?yHj{&%t|W`ty@f@X-Mf(}fWgwi76vRTfJd7F9|3Fx==H|tX1<^`n~hCP z%>_%Lt}YUdZq^py2C)#f6fAcH!*Do-uP)qLc)ala0xc_CRoGCV6hv-}poXZYDN0Q# z3gMtd8>Q=vX8pLasoXqn9M$o_K=FK7;jb$@%c{{5;(Dt`TyH6bArhupPNU~l1rQ1X zU2sj1R5QL#m4s5jBF@P~fNYUQTq10?R?0$ah{VNQ0GtKO;DZE2H;&=4B}NxZj;H9~+wZ*QqC4lV z6OJgK2-?-%*KJ+*MqTWB;|)2r@S$@3!w+KG@$^QH`rJNiWq)My;^d;^dEp)Ng0C)~ zaao4$vYC83fv0KVA4Se?#N6Vh)%y_pct)>lG|NkKXRM<(VxDohObUyrKT<+05zRR1U1^WcIY<*eZCR9+GMw@6B1@D`deCw%HpjSE2$u|@P>2nmam{_ zHAN{BYIv!SaYeQ#TefpXd*hh3WJO4_Ru{)|9zPH7u#UHLP(e}wfFiwvg%{X;j86^p zY9NOz703H{lHX#SC_+bjc<(UAvZ>rTbkFuC2z)aOD18I2I0tfvmWwy37As;J+lfGT zd-|@_pv~eiRJGu@ib+e#Bm_yx9VeO^satJ#UVYJ>$*&}w^p6kDy!=0a{(%nO;Z0l? z^j*5q%<&f~@>_Q$;5|9?waK{c7N8XGO2abV-_2h^3ny0%j)Cl6X!%*4V&N1ayx~D8 zwZd6*WBZJCbW|v<^*11FS~Qa}(>RVxg~b(#>;i9N>+fMAfN;9C+M0Qf&{?k<8Bv#5KE z+sCNGAXvNBiMk)G>YhQ$E4qhE3Qq{>cAlr3#&%ZJJ%bc=|I8Oby4~mLX2a7x0{X}` zQZ&tndc@@g;JhCB46py9=Ds#ja{%>-+iy@$%ZeugSaU?w3@(x4)Y!&0G-=#5nv+vU zFxzm1=*71F4!WPQ5r&eIY$3=Yo>wTaaIxwCKWq5^e%2r%`JTcEtc{?dbjgM&Kv_s~ z`1&;hE;B?uh3QmfD62sxqpT(%7s=CATAh-NMP0O$QtFfn-H4MiIh~X&41FvGNy)Ua zx8bcNm0_pOm8Ii0l#KS0UeDvCv_;S?$&Elk81>t2sqHqeF&ck6%*jR-3MFw5^;7EC z6cwca3BQn9NKurIQfBEzPGChqqq2HyJ*lkU5-5Eb0P?_d0a8N*O3-8mCYre8;+li) z)-nkiSmJ-hv6e!y?F4sXFJkIW5E3ASE#2mrjcPXFyXW8q%i7w2guQ|?hLC0~zDy(& zTs{nVe+5ZcmXig+|AHlKuP- zVF;}M^I+4^|E&A0rG5O~2I>z(-DD`qg1brdl;#nf~P=kxLDGUMDJP z@hE(FKzfd2VkoqTCc<)&k^Y$D1b6f=92)n##vh_K$DMW}T6wLd6Bp>0I&Kt(Zsa;$(0b3@xq+A<=1o@j9Cz0Kgc0q?ANgK~4-u^+Zu zTXz2WP_MP%F9`NB^aI58zkF#%qnM?4UPW!Pvu3ld)y&G3hEM56b8ApV8on$1GQUOW zA``uCFGUG2e9aX#-7-e+e787r#yX6|4SlpQuHDZNAHR&fGfbJ-qqp!fomEHvLkEb+ zn2!R;4I??q2R*UtsNK{A#Zr{q#_erQv>V4oeX+pkfTKO`R(F z^md*w_za|i@yh{_2X~ZM)~@oFj27POtv6u&K{FJpztfP7S?ya?B^CNiHPL{qnpFM3 z9X^3T-=Gna{x~FO8(B25j!$H^n5f`$a)*`=uU$L2f9>@cAQ{z2RN&!IvGOz|yaeaX zPrGFnUIKtMz?(I6*WJsnco!({x#;3U2fTiS@BPr=cRo%o8;ab0&$4UMh27$vxTUOI z)Bgl$Ie2N`wQp0K2J^X>rwC)NRJx7)f?a&&&HSfdlA8g&fvn_b^dLW@r(0I2@dn~J z`d^8xLTTaw$x?;Tp3CE5Ydj5N3-pinVc#o$zVBryDI#%?DGchT{UZ@?8~a`}MBgil zbyJU&dm`E})n99?MBP8A>h1@-#hoHZqjpCko=}a?BWgZX)!Z+(nwqJPP()W3X}O@) z4^}nTcy-++MLdmK9l4;@zpUz(ygKTqJu^|O%jdLOP$6%sqMN(}ygM~YXrb<@hxSBs zNcFT%=#7awb>tn?ZPe2f0PFqdoGzqyR;^xc>NA-f_jH|f_WGG*xv%Z+BfMcSP;0pn z3ho+kyy9Xu)J{dSUKo1NwN7a^cs9ZOyDeJ@Waa}oT0Nv%5 za(?Zh+@XDzdzM6Ha<3C|%}u0$*=Xj|eZ+{nZP z`d9lX?c@PEMuy%KWy(n#_ec|uqf`dyR#76}U3Eim4DvaVx`qkM5bd2`dPVtVh#XDM z?X)}J(f#CsUdMppk*kuzzsuo%d2qI?+bl%?djV;=GAY0Bg@Euc-Q!l}$b|YGTjv%7 zXaL>1bs4Lj+~*B_O$*$wOtyweRnI#5Ot-G|(9qe>(xj$Gt(B7rN~2-};PSgzQb@>^ zPFADtQY!l#@>cS%Ltkq)Yh=B0Wv|gx|Mll-i(c8y3J-rs)3q4yO~7Bu`eF(-->U`| z25^XBOie)NzYf&Z#k1K|NDV?tfNMFFYW0ZCX|mazI2?f9s*gug(I%1#G&TkTBhi#8 z8cjhFk6Ni?qXCKvk*O@%6d$XvXR`*~c9St=^lWFj>}al$XmSFJ6UdxE?Nm}jwufva z!fOeofF%XsWhpX{YNYUyro-;!qa~9GJ{Sz}L92xi3I!jX$aAN0E`c=*@7-P$G{D2@ zgA*8gdoMo8EEEjW_aC_xVu{CybmOa~9$*+4(Nne4ujRsZYr;4FYfSeo(j8lD z2kRHmxuMA;G`Mee;kwUG8Zdf$boMRa(#GKA(ao1QEg(;B8zL7ft@>{3@k$ol2+nO1 zbLM7EeIQx8v5?CQH>9CjYllv?dhkhzcmg(So47ZADG{_lpEhys>Go$-Gxpk{W&(Qc zQ=fo0r4zT~*guCl2ns49;ac}MDvAkcO{cGJS?Wd zV2TMen)OnphGd+u4U&Z=|ETH+2N`IOkVz7m7^$@UidM}o@>!j5df+QP;Rf5CS1;H! ze3e=_#d68+M%ivf(|k23&|maZjkC^PCDWGKKDKktjCEG?g0&0gT$+&Q4RTc|PQB+g z8?J6G}^oEciJDZAF>~{vv#{qjd=p}241bsH#Lof1Ez2| z5N^r`=$1Hp7eT0XUNzOSU29At!9k;uPbTBrGhDxGm5Xe4EppxDqWX2KbY!z`k?tlP z<$Y5JNS)4V)$ds2+T55Ro`?#kuE zIf-B$GZ9$7jEVqv_1g1}=!|3noZs0s_08MH0iwa znnfGyubS-~d`4}uUzzFceRsINEBr^qTu@-_1L<7<%uKfLUk8PgO>KQQz*}(L!sMlS z$8dbcW1vl~wa)FmVYJXuoFTMmjgIe4=j1+Aop&>)J_m2%x#U2;pF0SY)yO}HyTs6e&XO5-gsv;~wBoXZm-(HNtB6i>r$*CKNf zt}z+sS_o#@&fb6ie9dj0nXYiuZR_r|?@`aV90%V8y%dH3^~*?g~sMoC>qTQMf%Pf(;`35oS?NpkkcRIsOn4{@18}P z;JU*7h$3GD&3lIO0UT9@I|1RCV4zlFU%g&BeN|R`by-OfjL1A;5TEwd5w8c8qfZko z++o~R8e;S)>5*K{u3<^`cA8KwN6{D(`mtJ_?j3)?)7_J881{1p`2iY+;S?vUtI02{YIYfodSeC~G>jswG4(Q*f) zOb}Q>mE%KOy?OW~JkM8XK&agHPYA!=0CJ}$$7jF0?ArMKm+kz?hD+8pq?64SO`v|h z4UvF&S7)f*`}V=zHtd1>A7SB2|^PyTepj5cpO-xFQeN8Moe*f*eT*RbGbPBH}S zyCmLiZ6l4am+@|E&7PhT;SWo3dBKfXL7?1hQ4W+uIdUqsXI5Xm7h4lB^^2*q^vzU) zm=Dyi6V9oLS5#Ww>9jRs3Lq`t*w~J#82s?W z>mJv54CJgr{U|Zim>JLN{PT76K9*y=WI|5bfEG%TwBrrelBKV(l^tr zCv^R9u6sK)Pr2zyy-9PW&#Exkn;3aM&8YwW0i(D>rlXV5>*$NM3ht7JH{8flBs0V% zRGxBdSzBOPQlU^NHJn?f(6S!B;HAPgvqElpY^HE`($+xx>fP_;BKq{;-SS}4VAGSN zO&?P@l_OUJUaod)Nyg%*l?ItorE;rub6++0CvC;Bf@PH|T1HcvI++ZP9n;ij^gbLv zNlCdBA4?}!UbGf@z2}@lJt(sITwk}xt!+OvnvxEm;30m72R-L97THL z8WbZHSaDxEt)6i-ba=h~$FZ7KIyFS4MCFjHTW zz+FHYLRALd%BCD;vxT9Rkd9$xGJA~>UD8{6cRfj$29|GrDu%!aT2q40p5?vwc=K+gR5 z{&&E$&(nS@HNdiIyCzqMZQ2ovhWFV|d{DZWqzFH4H=Ar$r3Ls2nqqwL6=ifF8eN<1 z9t&l%*sKH;p8!^bf17#-00aKMZ4wQ~5G!^K&QjD_-H>Z}I1sAx2b?VQmy z>hbspizDK=(Q&tfhJK8Nari9sEaOt+1I8ze^e0B}lo1$3HlB3#v`A!;!Xb^cglQW*wkp=WzDG4sI#}BTl=?QDpqLt;e62n0w|NzU=Ca^dI=o_G0dy zi=U=eJfVK<+d^_FCh&QB=gJqIvX>TTc((EonTR~Fg zidJYV=!#tbo>FU6A<3QBR?r7tm8?JkwY8;iL0iR4+9AniJSMfZ4Yjqs?VPsaU&h#~ zZMb7<64?x7iQX+Kn!8aW`06$n?sBI-VmZb{^b+4Lt%}xzmHr$3WSz1_IiRHaSg?}1 zks=8_rziC`oeHQLipAE3hI*nm)tgFfF0?}Lv^7;vP`#~%VxH3it#g~)*ig=oHjZb< zbB5w*sh0|DBWZan@NQ)K8&j>ljWjNv zzN0DIV{*3iT=o4GH(s4-$TXxI(z#*gYR$8H;b+kGRAgu7G-JK9G=&xOVsm)v7hr~P z=o8_2A%4eA*T0%iWy-#oKH&_v{|dbL>~D9N4B=p7w(BhI zfBF5DU1fi3OF7!GB20Cx3OfX1{jvz{W;Nhf6EZu0H^_9wLcU!OPS@Yft<>LlCq3pi=n*B ztuRc>!(H!#Q=iG+fnGq4=!AZNrx{@~BcGDBS~oW~nHn3Lbf`*Sr?ZU8aO`Cje5F?F zWL_C5lchpluWK|^8jX&J48R96fCQQG6gy6jrdmdm<0(4A18WmY1sij4@HN(Db-T1$ z^)3vKpY{6GTHd?M=gas=pDzn`5kxTyve~Zojdibh>Y;}p@!qukNl za2h?WI0^`AeKIQ|OP~d8q)p6E5v%HP;TH4*f@1ZSta@IXBV}Pf^p;U(3gJh`yjE7^ zP7Vf0T){2dQe?Sjp1EX6Y1R*-`L20gwBdV~7M4=k!4vyh2U}9YbHeVoC*s2U!sp<} zU=TEcSAf-{v7a3(hHqPQ^naeX>nwHVR$eY7DDS8+;L5kfXh92ie%fzr7XGnDPSYT> z4{qW9gH@`RoIL^-yw$a8%jA^s$+v!lGO_#No&7VkCT^mR$P$}NgItt#0YE3-9zv*( z2G@3)_K(Sp(J^hq+lI213x!x)f}$cfJVG~>NDm+JVzQO&mbpy24n}ywd&~5 z8qZljk5Mb|{Fo=^wY7_DZ5>)`>taE!M%E4Ywhv;zpi%M*td%|Mb9=grgiYET+$*>d zGf+h*xlQs4gva(|5^hfN3eIci^eHe|LhbBqSD)X`kFi%UPs}!pi|wpO?M&96(@uKo zBie*DH%Z>k-z48Ciu{dG$XmPPaYFmkj(cFf*aHqxa|~&YB?82Gn!`9U(j-Mjepbm= z2}KQ1vaZ&$A&x59gW1h+CT-TMKl zl{s{W8gqoarq_$GmA{2vT~#N!Ow0!aa5wRdXmmOs5Qv(YI9wlId!0~0``pXvd6mk8 z;Hx|yx51#)Xysa;+bP#-H#_|%r_--dx<}z&PV1M`Aw$_VYAqYb%?418$Jx*wDWaT6 zq$oei2MMTDJh=;ihFyd;v8%2ww#yp_ad=(aO0b;M=OmqCtO}XsvoaHufhrE1z3^(+BE@jVfDC*r)|tmXTfeeRZ>c)=;k{nxvjs ztYMtO8{3-eJB8$+u-RncTr=d#o~Y6=0`!C6bTF#EbO4mRwm9rluf*0ACVo&_W#+;h z$)N%&ibHX|kk<;VPM>b8?kOFm(}hWjm4#$(huvZh$z<=CJ#cI6kttbE$V?f0EM*zB z+YLT4>=o-tIx{d=shsu>7h!)L5RVq6gT?9ItDGt0 zV0b!RJ=MW!OR^w3TPDxtbV7&7d=2dr`KIs5S-;R8S!Z!9OSP)_f4}9bjo(neFl(28 z*HCbAr)P-rFa5=k@HS;xcqw`3_m_mh+@W8POFxNlX3e2$Rr&U64f-swT(Sw56?s(O zeoh7(s#O`rCxZ*68maF~yPFStJF@7QrFPDVy60AOPy1+KRuk6Ue7T&TNRzXSS-t&;A&ePyJ(=R(~tR&@_x-MGG^2^x1m zH20-!=lE&oSNseRKPRM$5V-AwSM>KcTh6)S{M!H7@LS%JuE5_>z<2@YeaBB~e#311 z8}JoH{2irY?RUV@{jRWxB^ZL30lG>XtcKT2{1dZK1s_#g^qQKWurw<>QvW zwoJ9iTYT9}3;i)>QL~B!OcHc_@$=)yCnk?g94(6Q@n4n^A|9zE#QBHjDmnzLIpM1& zdr%}RJO6wS{tby6q6o^D=9#cb+|P>JTx9p~SxX}?#%WnXJ$KlCN%rv7#Vcn-GPXOf zUbM0P%9g-BK`>n@k90R_ffFR@O-?;GJHK_qqK8%&JO$^hRZ3dL^!9ZyM6bDckDwAh z{kgd`(7zs^|J7ffqbGha`zvH!eUF8;E5mA~Gi+7KW(xC!UuQNy(7Nu)?}E-9{`n26 ztche<#PTLA!YpsI!6Fg|t zAR0rV`ufO@V#AyUvY~-*Nz_h~30N;v|7nM~J>EDV%{f84NtyblivD z>Neb9AeD0YNME<9udlmX*(c{6279YQYdVh>4gqef&V#Al04x1DIr`F)3~2is<;b=QxydCJnlHzrpBk{ zb(Xz5yOsVP(0=itJ#d9H@vb?$kS=DPS(Lo0FOsouUbA3R{mPbbM5_VxE5BLM->L2S zdeD$sK^E3NI-@?{DNJnj>Ac{F&pfSG84cG@{@rESMXvp(D&O9FBOFQV<|UWsJzb^6 z^HV8+nC0d-d-K~svY$3Q4Q=PxN@35Ti1 z{j2JJu!@AT8Y7{I6?>^t0B-6fERc`Nk9TCtDUChbG|Brn{Id_0>?rmXStF!vO; z%}XVp{Wa;A&P9IsoH@>TjkKuyp^9!WgE%Uk#*4Z=@(XqUQqs+W8CQy$=OE2<7nv{A zTx~UMbH3s~I~_>tIT%Su^9t-gFO|IQ?^Wtl=g-qXz4L1_Y=lAB<7e>s#+K4jg*gHu zBt;R#J7yE~kxYb{qD&#Rnj2$X9#3e@M$9w=liFnBO=`V?pW}QB`j>AhfI>l;2`59C zOeXS>>8Ri8d^Slp9nE2en+2Kd{*m=x$;jFN~EPn0gPSnM{li8eYYf{qy-j(1|T zDdup-=$H$T3=14amp(>ESX-H}mcb}#rYt1sQtQW9IuIFiIioQ?Mp8W8N0X$Y522rW z9kkJ_0Bj7OnJgd19!BrxXEK59IFKH;D;!9kHR4~FkNO1yCqr#(=@Ru z5q+pllH!tK!Wf1-rs=ti zu}<(@`<65_*NJnV0;@`j_M$Ejrb;z)AERPn{X2+raKoriQyEehrp~FoMHTWQ!oaKN zA`DPpgrjOQOvP%m&R(Q;BP&F(L`TU=mYFI_Hcc=jSdLJ184NLEck#QK35H}CBAv6t zk&PD+0s*BD=Z-dHjKFFPMwu5u?$nlb-w=LF?FPN1@aDdK1WNs;UZh^3&%keKDtTE1 zmqe8jDM(4HgUchydg8h=c%1DirGXD2%i+jEU5V>hp7(6E#g^K#_&MrNg~F%a=dX6pcc!F3M9c ztZXY^v7)P7kpp(h$kUKOX) z^E7%OG(VHcxSuI$;yoSk0ulhld&&xXTHA?2da^Ac-h2!CI)r*J;mS~J3-Y@!?Rwie zOI^5Was6Ly{q&LB9$2#Ep4%6oJ1_{xe-2~6%b@obWH^O}2lzqGEMitMl!75>vLq+q z^oK)|rD>E%r!ev~#$Sem4+AnEfUWpw8768;BoIivAO0g>yc$@9p9yno@Zu%Rc(8yP zfioygC<)CTf`(HseSjz)fR`I8_(3wTz@hHQhfEeKO1)Vugv z3lSi~C4*jNJ??fxHQM7QneVs*Y5Uy??sq4kO1u?6S8q)QpT8DhL+ezx=fla|1E4XS zYw?Bi8KFJgRPYD+rkWN2BOj{E=0pCrd^ny%MRirX$fT>4`GZqKQoK=kX-}%jFOyF0 zcau%vHL4$u_&Ki=N=%&P;^iECpwR>Qn)H?my^^5^2GeZ0#F|e9e8O%dsEvxsB*ViT zJ)DCb($qL-P8;95km{e8Z<;rln=u1gyN96doeTRd3hlB|YGsQQ@0?t?r`Ssvqr2R_q z*MQ2enYkz5USH9eoH|DS6WtrI3G16Pl_d~zkB%b24_f0gE)1W9MGOb*5>8_+FdWIE zI|{XsQ=ida&|kpUAp+S0_tZ(o5AAfASX1h{#|L_Kyoa-1KCjNF zrNgGOW7Ixw8Mhi(^(cV*;Bi1jeH(nFY!}Pep@^Mfyx1G~03E!3euA6aTRbL4;40Z; zmHcy*MaiH#HY(VNLvP|Sh}DE~@A6gTyXa?trVRGB9`Ep1{t;Jv%XsA#I^o0nf1*}J zF0P|rB-^j1&(JzrIB?@KU;6C5R~p>)Ow4Og_Rw<9W~1JgJAFQYks+r3!pveg!Vd58 z&eCj!f+5Mxj;P7uhystpbB7(6>~>)HL>U?=%GObfrmQPl#si~zgUkUOB%t$lXs~8D z7CT6XgRzs$KooRF!P`-QGx)VC4IhP@ z8i319&z})qdEp}A^hL(Yze7IR_MmX`&NiT3^>+ujmD+xG&9S&!&#EJMpSE$=(F&39UcEw%yHwj%-%`={(LhefWMtTl%9-8%SQ%3y-wI!3{T~wbT>b8PYN#I6 z*ULzgpyPcN-#&M)NiC-&7FhxStz98 zK;%vw9zMaH_yB>vNR*?up*kG6AwHZq&K*unh_uKA{FDh0VhJB%<_HQSdP;zv5hE28 z7h;s@mXnz*tsq;3PstblF8q2oc;Jr$unW=dNB@5R=xtA(zVDmeJ9FiS8``tImv=Q& zv4-pBd1Pis5H$VQ>)^V72ot{%o)>ufFTzP-=H~Cc2$bN}9nU@|+%GhAG}zMf=uiGS z&(9^5w&qHnG`>>_e5b)6N zLIqR+jsL*^I{r@|KRzKGJ9R<2_R!VF*c!roL`{ivGQ z@5zKv7c7R)Lun82d>D&08G72v9~Q=Q<4p!NE&I@5Ds$ro%C<{q1=h?iOK2CONAT_P z6BeI^)cL*sw4bv0Eq=N^*R!jEpm&i(fm83&7TR~U7Se}LaEDIp=MKTYhff^92~yKT z_ag+;clszdd3b;E`0>fZVo}gA9J$<~!~{kZ)qxc72ec%#DF#Gk$YfPO7KNKFe*lkH z51I34rTk6Y>CpAc8+i+~ML8eBgi@4x7(-7x|xmztpLKD*@%m3xU7w*2?8ez)}{3*0wu)AF1Xf zFeZ3k8t@t>+NLjv9%8cegJ>K)+WK1SPg|*189=4eb*-kECemw4n@G5>xilJCQ&THJ zl*?_jOt#tOHMv~gSY6%b);3dXYg=obOGbNRZSr6~UAC4rqfO;Z*-+Mw=gN8mD3225 zuJPb#4|UiD?(zQGOZIsedN+9A^?vAOB3{tnwy2Gix82kBT-&E@^rx+7T1l^rHqo5R z=gPY%0{*$(^}dUCwbjL3bnDB#xVU^RPN0|S1W%kkK8b1sj~~S~g8J!XB^!4^K0W-u z2$q1*5pcAZ6eGCStW}0q4^-NR=8qK4^#>|3UR2|U0ep%;`Vgng`(<)2y(AnPZuFOw zMZ;^ixP()vppT8@%Le!Qz+B;{J8st66qol|u1Lur`MRa>7u_|@3Jv*fxpqs=02)X& zeWsh%JAW^b!XNZ@Go$KZX*Dk7BWYG0+D6_wq3u(0rf_cZknlCRlhLTVSX$X=rqruv_eR$Q33z zd?J@C8H>WKQ;bh24=Txrlus*nE2)xlNJ%PxZ64Q;n+ztnqC4k6oy@4qU3QMUD0>NU zml77ec9+f#b`gw2QM3RHG+g_$hfeG}d}6<7#!zG)x;4Xw!f^5UvB|a9Uw?eBNUUT} z8ww*f5lcxf{sm~|2&Txe#b5;t3ijkkStJb@=xpPhKpt5OqW9-}dg_8{ zx7M@t#*sQZC99CFmWSgqr+&dLrDAJv?auN2Nd0^-7 z<#+Pm<>}WNfF%>jkdM|qS4ZAk2X3eXE9(GX*H=ewRRJ++MkU)Cc`EY52t`D=$aM(L zISCSx2LKcmxRG&+s4xRdsAbq#!m zbrAeEQ)V0CL+H*X!lx>8qiXHA#t<$0Mk6R+dV>=*Zd?HuF_|;2wKBVnAZ;uu!5ZVo zM$)*Z0EW}UYsC}!;YvLad=M8bluKR1N%kd2%J__8?TP6_W$|J9e|TgNHE#d}w?{A% zX0}uSgeruHFfWxVqcaQWIZz^MSy1#LX!*aUgcpR@6oVIQg*Q1)h&$yeo{dgG1T*Pedk_1nKfcdPe5^LydHy$My+NB7C)4Q5K^oNf8-OYZ`s zF{+SRom^Q?)BRNQ+3os2|7P_=8r|=IwQ83U`WDBKSB8Cy7Cb*+gk$IhS|Iwse8jf< zY3bh-MqX_PzajrbenC=-9(zx`hq}3EXU}(gs87ph%4Dn_P$6R|7@{1G`y7uszUQDf zFe40kPwKf8saDH>Sa_>It|)*)p*@#N=~keVtX>LG470hj%hcI*Zx>*?C~9}-082o$ zzeFdwpmSv>+1Xi?$=l`iHcPu)zS)v8Su81wJk?I;^qpM{Mfb^yvifZ{Ta#8@){km* z<5~kT+SlkG4U`*O%DK@(<9HJ_bJ44ot3#tf0_@D~$Iai9EEmosAE-K>$uAtBp>Y#Y`h33JyKJZ83g@(a- zl`+!T5>gxd!e3tqd#`0*e#Ybd>eVwtAbw3{xOBA!jZ43AZ_F1iJ-eNLQ#NzW1E0UE z5su2kl>wvBx%`*EbHBvx(Dd?Yh*k0p-1h;_?VaAG-JzkKxaC_AWBCjI6`DNxXIn({Bc^B zNoTfZs9{bxF$^8~!-*4zknes7?l})m?oUW(CBxhZGf~BBNQedxR5H*JRs*g#jYyzZ zRoV$4aoa&LI(cWe&t_B_>@+#o=6vuGFLcA+*th#J0LE5jifX~Q^5oFQpT(%~v70V_ zEaR-V&|s}bI6bR1+Do7L^PM2Dd($nt$ppCUsyBr1?~Qa5swxa6v(-{K#A!lHka5Ih+Ox zJ+Rus(Si*jV@?BI5W_sm+OH5)8XZ84nlqv+0i=XbEs61WaD6GX3su7E4+2^RJ1ZT{ zTeGRhF5mXbSFYM7{Orv?JUT4(l7XSzSDzEUxaDv_e|i4&mPZO^ztI{%F*t#x zmQd|*W?%n0k(m0VR8VpJ{ur>hOoU6h93h4V{U1j;s$@3v(392h)QAi{m!apfEt(`@ zav?m65f47N(dc-OJ(NyvN|M9r{iy5qXR~kvnMjDlx_gKBrgOO>>?bgsz?rep>Y)O( zf2>SOr04Vc3N0)C46HhEx!F`~YUuSYxOd}q$&2su*Ij&vt1Xo&IyxV28C+66x%(1# zqTZ8j>CDBy`s6pa+}I@aGzI$~d3*$@?|-^8J-qz#*=O+V`;gkrq=^vR!TscQqJHY+ zOJ*xyk7C0qy@5aC17nsw7IMr2bT*xVXVBq+)vE^Tl3K&7)r5XKOC&gWNf?Kd;gbXc z6vVG==*gJJm>45Ch0}C5MFnCuD3L*B2uL($^4uRk?|aVd+nIge_a&Lh zOlD3d+nh|2$wEj1gbMcG7z7&XDAVl*tSv{J>^R_azTQd2+@0pnpTx#3f@Avn|?;>Q@WXyS<_jx|g_IXsrM@DqV9*72DV2HrY zgqUg792;^y9iL)^#yM&1mFVM~?%{_SZk-@E_Zr5hGaLpOa7@)O{pAhlD0=2tfjKxr zmU@x#F@{}hT6e8m@%U^@To+zd<*dr>o86u%JojVf@i~AIUjH98mAQpmb7aHnbu*T% z+TU(&u9!Vg?MSX&*VwhQ?Y|1&WuLG6Gf15M75L5S%$)9*|Jr_CF_-%W!g*ODNt|FK zaf8Ff#0_$E^(gQc3INvbWB{wPAe(OTICPFN6K;nxnPNQ5h4pAMg|GjyCme2OH!@dP zky?>uiv-7FY6+{+GZM^JE1~!BXu@h0!bpXqB31!+%MQq(tRgDR2%#{c9x4vtkxSq@ zxD%4lKa{{f-0fxX-hkH-wxeImA3u@L7x~aoJT-9~T~TEG&}A$xWjszFSEU=G#TpE9 z=3#DjqVIs7!>!^GWv3b9qc-Ac=rWYC(MmB?bTH`C+tFnTBfzQbrQQ>viP#K zwHw+x^T&rT+kOXl%60Xk8`@jUNw(f|@$9C0k~FB5Hj*5fv3bq~@Rl8G7hHH3zQWyw zpCHg>Cs<-Ds}tCPFEmCtXoR;-!)%p0%@dGy_`=EL3Z`x+D<%YKSrYGOcnn=h0^*m9 zVg&<-iAK5+Ha5zV71vs2S-0-`e&uQZk76sg3zzg_htr_w)013p$RYBQh zS~DXM>V+_AwpN>~t=3_;55=86E6%3!f)2UGp{`&hQl=ufFKXNq&5|_Vr}II{&|)P} zD&4vf1rP9;{tCcW^j5$MpS7Zz(%F3Oq`S+#(9Lr{nOe+%d}+)GIo;ycb&NgV!OWE5 zOlBI=B+}UPA{-eGmqO3tXptC{J&B4bp5o7)DdG#j&=2ozTAQBL&7NR!l*pKx)ArQf%5+N_ECSuP3$$_c*9%wK^w0xUI#? zvkJxBAW`EE5X%MKKirA)kP9bIl52T&gp|-CZ~PD|5?O(jmdY6ox}S_7lN z{zdU-6!t*)Fr0+wWU~$Gg_WQ;7~d2aHl}BBg&LDZt;#LQ^{Z9w~cFl&JM*w+QHtMdsbTJ?bzg^PTawV^>u)hnDA+QTt+j5PK*tcH^^|eMn~~htK)9j0Q$wnG>ab6tXRs>I@VXi=vb+f z(d`zzB6v$czJ<9pEN1Ssu0IhDpA3gjVDCU5566iNwrI#f~=>(ybkR8gNv4U{%cX{dR^@RK23?q_sK(Kl1LL{ zY`$N5iFA{cOuIYW(BhCfh_Eya!@qGzH4cX~>>w;s$QO8NjY9)9%2Rr;IvNM@*r`-j zfV2c!#PVxRzs5or*M%z_M4;l@nqLzMkWd8fMXoTKKc4@Hi__Ee>r;2}5YF*@<`r&; z5*-*Wbx-5K49gcC6^0AFix8_k(Nu=17>G@EJ~64}IaGl_#n8|eiKzA>#_TV=uL?RX zJ(loQBQYi=P|Hs!9I-CHwPN@>rPnyOGVH%DdpWp2*JRM%Fe~i5>B$A{L8dunFZ{N( zam@ir$X~C|UD8=;TX3L1z0y^?UA}AIj#&hld=*{013WLn8kasQH{yB357`E_j^T@Z zA}BPQNw0#g0#$U>5rxrVQXMOXtxo%16dwpfBWAP4PDF_eI(iAU49JEwQH0-Lzysmq z&m&wg@j^Z`k$)l2O@HAkeLhSe$phTZl;lH9l7R1WEW{~7&3Q0^&tDu=RMIwx)PX!O zbA5F)tLFE7z1Azx4@d)HDGv&Jf$Sw7l}N_2R_dx{DMmnA9gMYp;P*R+cijKn&t56) z$|@;2DHJRDlt|bOz6|nf=GNzIqUWkQ9EH<`KmK-ad=1v0-pSvPw<2roMEWDU&H@-S zND0AC0nlMXkm=oSwf21^O|a;&6Rb$d5cgUiwmxem zt#p(zVwr5Xh$Ipi6e_ z+sKdWhTD6HlGP}Bc}2;~Yq6IfB6>iNBL-sb>zkjRoteW~$>S)D!OlI5@i=n##c{UM zFni{8(~qZoeQB+)itGC*@(kg;#I&8%<$1SaN~;chE&zZ@+RL%#lrg}<+qRja3Sr0P zo&DCz`ahgry|H5Ga)Wo>SB^h9XZ~>SqGNX@*`(hV3mM{#2n%%2?hS#3?X%AYI%i%0 z`l$~+^IBvSzqT)Cu5t9P)l_W`_QaCTEoe%6J*NL1LPE?Z-jDI{-LUI%m! z@M`=!SBe`VUv4Z4{v@B|d&JI&-6=uV-W)w~QlCB%J@MMfeDuT# zB6|D;dT^4vgn2M!fzNm0b_8;Ez;nvxg zq$_ns67y?Ld`w=)oxn;Udt4k7D;XO;d)LVI4BzIn!TqWSRgjUl$>AX}NQzs<*NMrM z{H=V*W5sfY_p2Q!I$?tm#>}eCjM=PqT6C^GYIR_blqQ_4NY6OoFOe^{+r3dQ^bXl+ z@Gw0|!x+udu!lyV3lKC-JLo0!I(jF~r)iz=mj;Cnh`8kk4WSAq%<8R7SfR7)ApR27 zky1hjntF9hbO&@~>8aw)THOxaExMO=r*uNy;uuc*Zdku4zbL-}Il)Ew*SU$=4I8lk z$8r0~@CgnQoWNV2!r=|$;Zk-ZzdlTaxiM`4=O&3noJ;89W?24|QVYt#6U31^B!qLf z9=`GdAoyGMrq06AZ(VY?U2?_s%ev+Tzq9#A@x+!FHFXmoyG=FZ{eyRdmq7d6yBq(z z@ch#GS4NiRdz-T>pcnjMb8U0Mb3sKO$KScakH`d>AS#IlRu&9;PZ8)U8ioipXV271 z4I`yb3Fye%7E#Qly_R}9%3<}_UK{7am&`b~YQ8GQD@J@N*BQ8+0zcv<7tk z@sU<39MGNsIFC!KKToBsM{k`TUexWmaJO9 zR@X8DHdw)M+pT?K4I?;3CH^r>M#M~l&Sp2g1l$a8W?L#!OZl()G=r?t7p$HP%>j?^Iag*N@82Sp{RB>R>&){2DhkU3)1!{X# zfKUNi^%f?J^LmO~k2KkBQWRIO$z{8THOKoi{Yo zb$4ca@M)l-0xgdEB`mEG3jq3^abB~J93Z^JGPdGM(G4Ofroewwz~BU1oIh~F5k3g; zYIraJY5=tVQlKVOwAVdE`n8%g8NaAokh)$OFB(9_Jjx^y?EZ5SbS; zY`hEP*5dgIzfY)c^8@*U7ICSQpcvL_EtMF-R}P7*2{-L#-Mwzg9eBrr=gr4Y;500k z-$B9;D-#@nZh}BC7a1zNge5aogD4?g6vkk@vOe!ksfx}R8DD-G+@h;ijJAstGn|ty zZHnZBCBB`GjzpJh-j>3*3KM3jvRmt{O3Za#al@rMGoJdy;?+M|@brwZdvo$yux9qg z3gaysCyBz*?IRD>RXNia-L=Bw(Dh6b zce44FHgE|5BR=4lGxA|Msj%9mcEax=Jz6_3k-$!R$m3GGMk=*SNxO$~inQueMvK!d zQaBI*3ZJT?tvWwZNn=*H5l1Dc^!w5Kq>RUo0_iCIk}{o6M_K74k_S+Q^A1^sKAXKKk?}_GNH4j zgD(8$ti&C5L@x?%$p=H#<~LU;uWgZE1+JySHe-0e-E&c6C?t`9zI8yAP(T2MdaJ7N z&B7yhKGd?N;)$9bFt?>}Vz)|aQQiPGD*&uoGT)a&IoiV|YiE*z3KW3tf4(fx`c7l$OJ zj4NJxDt;2DbsrOp8CxLwIe`Y|jMg@1YXaMjq}94qRh!ore6P!i>TpjN&KXr?w*$6(JsA zSMSp7*T7wh{R)_tb;#iJ9`L*!tdwq*!nCwQI$ug|;sGJw;Sdl8{}^AQRw*L{tyHN( zS|VZ(MMIeo89I521iNt;yw@xgx^J<9C00OK!8+?1a+`%5;0VD$VFnGiFT*c24GD*WUl z`ODrv_+?*iaOQ<8fa)F9wnri!cSkMR)~fexSN1JD&`4(Mo?iZ&!n%ZxecR^1i zSW)=Z78B532+Zei zD8)W!6ZailEsa?Ddg=X(f^}jNz2B$&WX+JggXbegG8?=>M-5@)6=q}e_~h5p|& z=Wn;arSJw1SG1al!sFHa7Cyv)feoVAZJ}hfcJ9|rrO0) zew#>GjCRG0P(={*UM}!+izE!B4O!c$F>5_)R)w=QHU9c*5|!CxGC|6=_woQ9u6b0Y zVYne1v7Baj7EDaW(y0lBH@E_o6&>!-gcuoqG=c<~@yr~o`@&%04 zbly}@+~vhHqB!#-_L@x&usaM6g}~krX!nEtcCgC6%?|fkz=I-ir4Z~Ef~Y#9?or>X zept;@sO@T~Hjc(<;Gl6#wUgdWAE5a-rh>FWY!_$5J>s?E9b&#%?2QB>;C>sjDiNpC zHtJOiMkAE+VDTHt;I;KmbngdpBXmNv%t z{LU!?B9bE?swOVOS_;juijAs3e(8ZXu3l02YZ92xya29xzr>e9 zbKRRsg7}R7<$t=90DoLx=Ad#quK-ljOhX+*}jY_5Q88n7#JU)%b;|q+gC3X-{LD(@dxY%P*g(+V} zR%*?{J{Y)DWj$i-By9(bcyz$xX)a&3a z3%jB+kw38O<@;{S!IOfoA6a;8y;S`9oz-`dV-q_H+b*eh9Ns%PQrt8mB&f4QCovD) z%HD8eAK2D+XCHiwLJ`nG>NrJq%$h$7re=Wo)gWEnQ4RT|j=Y~FMGA#oaj)WG1*K4E z+S)o5E%ugsTOMwq#4Rl>kpyxwnXI+jP4Rfd>kZE!I=ebEI!$L+*Pw>gXf$k{(NtS& zG7W|!ns7K0Hfg%p&f17D?gK>sj8SyjxbXy)jUjYK!)T`NaKo{Nw;Dcdpc)$7)xB9& z)}Hl^iewHilDk{g-jYpasQ22ECOqhz)n#l0u1GpU+2N(3~`C^?4?;k#Y zbI37t@14@-kVFC*gwoo`i5KYSr`!1BW!0dMAE(iyX_OI4Zda8uQCzH6?3`LO1y}Nb zv5{I0<@6#f$fd~eW)PoS@cCWC#myijrsP(YcZJA7iAtiVTD-pJZ#cf$RXARFvvAp;cp-n z*>pAg)&CUoAx{#J^Q1B0MBUCUGc%CG3lc%4M(2OSsT5-cbE4ojzH15I>$r+Lq6GVGw=b%`s5sRg) zq1ONpVzJGSO6r33o!dhz#x@&wv)YL zfLoY9EH*K(6O-aE#0ugszzW4__32>YosZuu>Q)gkd>Ss~*AEvP&`ZQg+@K}`58hID z9q(Vl4XG(=2_64(Ov3(Wfk>T5du5f%d2_Db)Blg52&Y3~Onl?+S8t}Py3^%0JCo!0 zmw7L^cx9nd{RL3MyQ}c~MYrDM>M#6Rr2B7>xpwy44Ls`AH6eij6ROl3gkBTwSMaX8|tV{EVc9n=9m7ZN`&C((%)hfL3TDc^>J!7(6Su#W6=br#%9^ItK3J z6zYtdLLaK4+>f`>?I2%vd0eXia(h1==Q=YcUda6A*f?FxY~;s3;o7FJiI@VnSXKDt zwTPT?VK4$Z=g6jdVQ#k``=H@#{y&`3J%0neo z)@syht=btfP+B6Z^a57iD}M!PHYN9tid6y&u;{eZJ~c?Gflk|DnQws>i$QI0hN?nM zA#zCw91DR|2!ybYwjqQblK+CH(a)o3C9CXJl0~L!jM$YJt?Rk1pm{v#Se|n%5Bk2I zKTf~)*@M0($MdBoBQGi7b9+014AT#~{OZycbrO&zuwESb<@Kgr3K5JfD6E-yq;*L! z;HY2u_3d~J*e;CDDA>+mnBEA)D?c(-6;2^H<+IN3lmf7NC52+@TMy$Q$iLbhGZHr;L9SG|6_5OOYEd=HVRtBKZ4}9iL zW=K~8ggxjLV8x0x%a$!ocC@t(W*Rh^OheDinb#~@s9CgVVWxqtZR^O+m@%`5>|MBM z-i1c9dC=?Ec)fnLR(lP}(~u<3>-PlBMu%RnRg)?nDItR4HQ@_uYu2FPtY)dEretVOAd`h{W=itONPE)Tk>P zOCDvjo@_#OX?EG@itHsvmy^9Jm9Q@>Uyv12y@QT+OIf~?1(8pJH*OT%j<*(Co7 zM-8Z{S+};t_=`Z)YbQ{2&2=KbbMhVZ?6J&W-kU)1>3nQ%IFWvrM*o#38KxHWeQKyd zc|OIp;rv;@B3=3Cyn3F`oSJ^fV=GrG-IS`3m;?^_P8+4?3w%y)bqCHs;-}lHW z+UqpmAQC`N;WkO*vUST<^@qgpwlBfEN2HfmYMN?p+`4O}tT61Q_$xXutG)M^kKT2o zMp-FVRb~?n{mpZ>g0>D`+C$f9{IMz@RdLN zYCI|VuzR&9}rXGii1RD4ENPlib*>S z?DS&#Vfqw3N%QDvi7M&@t{cBLUQ8d4|1^IhpO0tCeIL({7kglfnK>TLAyZ{SdTtvM zHVT!{&7|r;yxdU*)*pK2$+rue?tQTEMB&?C{|`2`RViAQTQNMl{=)uIyHIfH6T4Pk z^v&%p)HB`J?I`@dQE~6aZ+v{ql1y$}@503otYR;Y^9HEA$}7N6Z}d(g%^WCa8K75pvyLwrie12&u8nzc4H zWm&teDcf|7-G)4sjhn{RXslkZ-9hZeSeLTrqB)q$Wqa$E)WNzswx%YILJS^)y4I}5 zYR&Gqf)&;gD`f5V!K%2Xsw(cQN>#xsdz`gqc>-aL%$W6NBM9rNeBq+4Rx&Y%STI9mqmqb|iZ!dpb*|fF0t;k@@RCo z*UD?PFmHLCC%PG?IDa7!*3;C_eh!DPJb5uwHleA)c;3`MEKTKGy>8@o+~?em(QEd){br->oa6Bm z&4K1XU@%pqNu_FPngb~+QRnu$@VnGnm7Yfm^~hJo8f@8cHZkg`h#y5RM#X09MjNyB zM;l0$N-m^saRax_jsWrCItfrnG7>0>$I%ay@KTSra(aW2ZT__rd5+(wzTuOuVY=Ce-b8e#%gQk#IN8(Z{apgOaEo7ddoInw$p8&pZ=2MFUXqHJ)AYyUVh~;XU!vX zkTrkw35R9#?pua5DrC#Whu<1;7Lxq3DK}dm25*4S!m_Du*z&)O7XK4Qi}P4q{+CJN z|Bp-x=y9nEh8}wf;xo7dxNH_xK<|EtUDg)By9I+mzg})X%KBCiI z!zVR-KB?0OBYq>_tReYODA(L3R6`_fSJsTgT!m1$BZGXP<44dnkkBy@Bh1P{ ziQkxU0Ean>x7NKjP9tN;wcsf6;liSOk4s5%W%cRi4jOXGUkjnKRqjs@|$4Rb*9FZ8+?;*<3h}oNL$Qa_#$b zU`1{u2WuM|23=l_%jNaCQYiTGHq_<>?R;U_uCXez_EFo>rctX3%*-aUVRW*)(HV~% zot2G}?d=2YP}n}weyII)J9RpDCI{QS173v3M!bi-r@ho^*BKW?KZ+!BjvSj?lG~Z% z(dce(Ze4D7?r@Hu!=FXD9-s5~vdDj#c=w;lA)}k0V)Dwe0!$^6b#|cBbNix_)lpCh z+|K_=CYf(nbT#T5L=uJ2suh#j)Wr8Dr2ldvSyv--0@;q$#d zfo%#mV9#kxc*^~UOPUidVdXIK87RPyr|)q+wA>^+6<*02^6E{_y6UP5y~OHOhBhmJ<+Big7y$sj z)Btv@*!Rj;A;x)Wb4}b0|=z>NBD>Mr}@-r@(c;v<`0l`>ylR38cNr;QbZsYI2<5p zbh8BAp#pr1EkKcvFPpMW(K661nJCUiaaQUbq=FOg&=`Auww>bc(8P1Yyw9*&=e$|` z{QAZhnI~>I=zROclow-v=8K;ws>y)&3>f2iy%%c=XnuIy|731$B~Zuy^4_n(gczfky+^T(Ux zFahGfUGpE{Ipi1*h_w<6w3w3>XAS>XkASnH1Q^~43*|3WDA7?ss1HXTdLBhoAQbsq z_P!e#u#LHsff@=oRm~THK%hdY)DxA_ii&7-P;b!a^#*;^P(cMX>B`Z=#4+M6ybq<+ z{U-HD6p5^6RB=?Qa$2*&QCBu_)I+))zfd^ubw2ET)=B-rIq8JX)OJDfB^~(2Ez)&h~bdoh~czBa76zDJ=~{1q(7}cqo)kcil~66*Vor!kBt=#*Mc#y zUqAjlk@@JoiN74rVBB}CSPGta;qyzuT!NG-(r)l6_p}D4avus`;8r6jS0;Lz-l0TZ z`uy;$ja%F|7yj^E;lRChGx@Z7)T%y2`7inENUk9<3EqtPs+)z`I*+z-QEl_jpZ>~i zTo01cxOoS=@|jD^6<)J^Ij-;8=?xEpjUp0Zd`0!f!tLi;j8I$%C;udD;6WmSq%$8} z$xfE#^B4ti2OKPSzRec`4GH+9kA&^*-L0+ck~&aV*Voq*2t*tXgG{E+u4&(H7YwQR@G$3mqjSYgm{b6G;IM>w&q+csjjYs#UK)9pWpR7*X?$) ztV&B6S|vC{ndUppDg{WlCy*-TSzV@^u5JF=GY{V6<$Y7Qf{`7B=eWlDnuXsInEPzS z0P_>=Zqr){v`QL4zAlafN?u@R;resE1aN6Ptm!zrTq2qxAd|Z*$se0(rJBSMD7F>2 z+u-*lZTubk)oHp|>c=c=<0WB$6cYDh!YTdx$JK30$%?AwAvu*C%)Q)mI z7uD!F!bF>(2@?uuoIOs;=@i14{D2(FRii?6kPhq&zyQIDv<%@Jg_QXq_l-(S1Y|hq zFao17sCBxx^NRF85@s>)7T&!)lHkR7EN=;K9S_~?Y$$HVS&s{z>(__J<8j=>Jbp5a8`n>UPfRO&9?yr- z-SuHCCEUVHD9`QTMsD0es2$jb>$#KXoT_^s{_%sL0d!AH6qf(t?QG2&x#DF2!E9e) zpv~U3c&60e2YTVF51rkSqdrU&UM;*|_->(nu%GR^?go$mdS(zj1Dh)=l%zWH+?g{% zuJh`o@H;#W5hqxjce%3Rj)t!_kX!2k3Df{?P3})Vm?XDV1HKR}7wi>0ARy-ot`opC z?0|43v6Xm`AQupzmgppIAnqWjNTf=qQ*!-#t~jl%s!}RTv9e3)uA+igIXy}ojvtG^ z75^|!#p9+hIxT8l);g-U95tybkjsr^Lr248?I=k#ZYShBrNAzYN}*J$WVYXeEic}y zOJW1eq7!wPJ5vIFw$#jLaIfGR`i{6yy9GyFKXAc)u0t-Im7&n*ldi{`ru81LUti>I zNhG+*0vu6uJgu4Wa^vxM{BzIOr`xiCig0p_=}t_a&in(N#2{W8L*W?K$-7#?bAUgA z3DgTu|GDsU;r1`=8YVBg=dZi&yL|tjZn_PA4fsKGiBcUTe_a##M>>Qjwv|cOixlj* zJL&n!Kk?qD&JrmiOMJv$AEl*g#>jx{6MGVHWyRKt{T1ZO20uPA5^+G@p zLYfva7L!mU8Z^~tOs1L<(>~K76L~|;9W`I8Ax)whAq92OsLe9UFzO_YAb)T)pj96A zW!0*NEF7)Q5=WC{)KsNKZ`D#66PPrCUeh|$VH3%nUyWGGm^=}7yD3s-4*(*-ay%~U zUqce)QW_kL=Y}=8p`dp@KK9B)(S?r3(+$xgcF&i0#nHU!;{@kq83xl4I2NJDUFri< zC5v6YIHx8kQo%4DyqSa-N3T_vIlFl8^F;irF0(IXB-p$iHM)je2Y43^Ffh9-P3;dH-1~SUIamh zRN7#Y@qOS?J#S$1x36tf2-_5k7XD$YIrd*${)0d97`Vq{(kpjgwdjuGbjcg!X|fmc zxy?>^dj4JVV_pT}Afm)gk85eEjFIC;Gc&q#r3;9RKtoFv%$2GeRClOIr2{?9HKL{Q zt{kazk6P{D^i!o`o!t}lK+jN*0uTy^0xA?0L%OG9i>r22!F+L& ze*HKub-YAmUdxYX@*G`KiSjIrFLfBmNdfv>-0f1Pt56lYbIPOj9Pt_}TFG zYYT6GW6zGue+GQV*R@fkA^10>^0&Ei+3n9?G0WS6aBBbLFUbKiN6>_xa1*=PrRb7u zRRIycBpqNsfb;ar^>C9C_@pT*Obfv-{(e5Bpaw!HH;gHib|q9Q<<>EQS~n)A5m;6l zG$scg$aW0vrU0eEcQr#XE>mq95FEa)&>1Y(ng z(n6Z^m|_`2%TH<59z4?LaqWe)K+Ka`Om>6Pj=8k#!_V?2d64I0iC*kvkm3w040c1t z&|`Sk@Unq#c-e;wBjd;sVy?3A@pA7MW*Opm^3Jg@RmH+YUR~mVLE&wYS4uB0vo|)v zqI=x_@aW7rp{h0WXI?tC$RAyz(8njcMc{I&k)DzkIszw`)c=0`E&X zw{-QT8)lw0S}y#pgO}_p-2X^nqHy5Go7Q~wBJ=8jojY z6N|pLCjkstp}Nt1Rs@<729d~+Xrf5Xb0&3qtU~SR4~{81?VYf*)8*-#NzHPrW+@cU zk#yr&3r%MoS(r^_Q}!5$)ep6~X7;sF9?!tMVu&3bKc0`{?i21{Wis4??EH8-&0TMO zI*R^awzf}pD&mS;`CFAmtqg~`1Ig`f;zs;E=kGEstqd*mfVoLLUXD{UZa#H>nYPIB z#P=6j^aP0_)e)XDr@pxo2rg>9fbn`_5Q#G=p~^`c`|^U&okhOa1ENUmfA0=)nV9Ai!vX^j&zZ#tbYre@VpZP+7Ihw;@-JM~*U(7~z&TlO?aHZ5(%iY3N1WR%{hg_;*rUKun%n-MsUB~x zZk)c4Fgp1GB}F#28F<(`(mW6(LDUDL9zdG_Z2$(7X}CC$snTdhialEfpULM5m<)EE zPJ^5>j}#MuP;+xAG+dR`R8=Ka8l{d$3JC5^W}PlDMzCrvgCo(!1fJ^T5kzx{O;)8V z)aFr_N0q4u_36E=K&IR)pgndaD^@VdlS{g;;@2C@v`8bD%?2Bl zH>)936XXu%!%FB-#t>9-ag-Y}#x-n>BIlb&LgnZV!`xQazl>wLCnVMrpJ?VT$q0cq zY$MCPcI4Dtb(tLolZ}z*Z-7qOz>2X}VXRW)WaAbiKWQG&bDZ}5iE zm97IBR;{yx4mq$ZfJzB!CBP>J+_hbdP!~ZYg+ehu&Q~au5~rjpCKgr+WABQE8gZ;b zEVT1MBAFcK$2EL@JXTRL?38GnPKiRPe787mlB`Jx#qo+*SgDXW><%aCvBks^qGlgd z8}Vn}o?!H3iG`RqeD`yS z&g7axy(mZ8HCpDT>n?7ZQ5UmU36+-4ccU$QfyS!K-KCI;40h1A_T?X2w8~lGpA{Nn z6}N)u#LH4x_sX|d-CcNnV{=Vaqt}{*6}4I&KTT15<)Xshz7Mt?<4+u%qchEHK{ixA z`Ae#wY#3PNH{8GV%i9G0$aS&<#hx!^q5ZVPze;Fz*r@nf&h0Z z4a2>Vl9>o7<`G6<Vo3~mxpZ$dT)cxl zTZvH!Q;$w-fkgo1_3_U-bYXfrw++thHBubUP+1@ej@U-+5Na5bNl^RQp#S*tO%a#oq+RmxU7Qk$tM@;&k+2Ut?<@ICW#&BC(LtQ3neK ztxDC^dUl5sSYctOPRR$Cf?BESz@>LIBx;U)lIf7!)%ykoxyQZu@g!Xkkw2o`=<#gs z^(cBj#l7CjJ!U4~;LEwkJw$nj_yX?n1>8u?-jPZA$eC@F~!jcunv#=MHZXZ$ZY_}^_GA1yAO7Acg5hLI%ivRjsKE&Swn{>8E@{y4UH3mci?(YduVh9vxz zcm4=8y=9+UxXX7Wwbxux z`0v74%u=}j`I!x&`raxtcqmG)`S29D$3Nk^pbhLWZ!c`StG!nRZhkIM>#R?%er~QR zwgBq}AL-KloGvWj;+4L_WfX&u)I8AmBmpPiVuLaz>vQ9amB>fFdF%Rp39*?D3 z30j)eO}oKi@Cx`4P@qg02iRe;IAyX}hMUxyrY5ct`cC|mNGu-io~`Nbo}Fp|CbhO( z++=B)EfOfSikFE~#3WKhR;ol!rGJc~D;xX`_@j1vj(I4;13VtbSc76rhty7eO9+G# zi_>eMEo<7{L~U&PVH1Q+plP;9+(aq5W8JOY{oR*z z^EP(B(EV07d93>td_#1D?&yZ~+;ltlHUE14$GDq5KmH2G-mgm2Co4wgZt!~&OMrW7ty zN=h6_#}3YEY^`{aR?AyJ_G+8Xw>TBPJ1FPt=eWC5H>b50%2s(BA5a1npmHLbpB4%%Z{t4zol99y{Bh5NXxx3rjZWMY5jM+(E6V zLf1Rnw^|_glAzigPPm%QHB}k*@*GW4g^wQUZSdDz^v1?6o{HmXM;7M{(wchWJvQ2> z1p888B(g682TWj}62wBPki#8wvu@JuHWQqB7|iD3kV+E@aXcn!{1kd#ni7aa!zo6S zN-_BPPW)6XZZ_CMDxW6B#A`(YQa%=s`$&xv_^Xw?v>Q$x?!ea~Rp!eRDFc_E{>ey#4UPW^H(JGJIRToUiMTbT7DPNwU!#(^8N+ z{ep8gtRT-D7=OIy1(r9HZ53&7gTk2T2b&2H-$j9K`Et1}Krk zuVZv=I#L((IYc~##;$=H&ap?a47qzqjIWH-A0ao7MR`7$o)X7eB2lnm-WNTbIZ8|vLxqohnOtp%BG$mVJUT1k~;N!o@V^WoVr@|Jd%3ikIS3b z^p}0=#&tRcEj#pdsD-)BN6SSGV6 zQtH5SuceJhSqcvqo>5wEgFCNGM;flc=QUHfjMI+QfMHwzVeRN!F^gE$yy_DQvZ`6L zYSrIWkWHUfkQJ*4!Qau41?Q>AE&ZT>@#1A`m+e?aE-UNHD#t3gs;Dok{vmyNt!UUw zO7qWZ4d4v>|7FGD3ren_p%kGr|1M3scd?G7to}O$$TKLhV-PDhwftLE%k1dw@vJYq zizf3$`W)6ZNVqvP>LolxlsLhzebM)Z?*kusNCpB@Fedz}5c*ND79lF!k$G;Qb6?_y zZWJj>@P-IMXx~n_8?TPAc=rg@8WzQd8s(V9Xg_LEXiF=2>{N#8 zp%zmVbwmy}%7OgIzQ6tIuxDdE7#zCi`oe#$&S!>zWUfFOnny?GHu53KGpp9r zP5k7~?THvICmmEfyCKzmLX&J7JBcvX;`h2BJ-_q3HP#F)Wun4S#!Dn+50{1=$1%_bz zSlEUnP^(EP8xClI1}{`Xk}%Ndw4ZrYrDEbZO_D;_xwa+VR7>?%E~$i-RIg@;#uNl6t9R(gjh_NNZPVTujcKcX*=F0=5W|$ zcESXQ)NYwE`U3rW31UXW#JTE7em%_**oV2o6euOqrwyJJ3%1Y16|?kJOTwDsLNyteSttTJbG5fO zcx#bfgozsB6?Sb}(jkE_RD+Gx*Hw>IlQ&k}Spl!C04bP*a4${+@l!)FDJwl7Jtn21 zQXrLv73xq(tsXX7G)ALEF{TLH!!R6HhkQnh&K}t#(y8Nn$f!GmEVq5HkG7*<4@QUh zwa;6Cg#65%d82Ub*|AiTcWuMQynfnRrTcGS!yR8KRDeHi zX>9sM;gOE2HWWG^LFe&pZX-aNILXF%q?YuOWYPtyomV)a*SX9I2|Hx$wy2HP1HGOD zP9mBfwna5ITa?=dkDqe7?VfN&fUueDv`Eb(>|+e$<>}R9CUs!ca}))0ReN|ey|+?=Zy+0G)U0mVgYb%05M??3+r zfIq8{>pWhaZkx)q+}b(!%S-AzR?NyLqTPk>3Q2EOZG6TR;Hwd9%esr*j01ede9iXF zP^`7YF1{#MQTUPGcxCdsFEv$Wf7>#+rICVBp|YxXOE2gbT+w{RU}vc&`zrM+^x>K; z<|D2mFc&BZf9p)}rCt)+l;?5!Mkg&4%`*~Fz+=N^U04Ujx>_A<*38ksOLffOgz;*t6(uFpnKl-J^Z27k=CMjd5|4IC2- z<)>j?6}Lo(;*y?Rnu|L|-1;))6T$zX?MncgEV9RE<~wpW_no$Bn_ay~H?nBD0KmkQWR1`rFUGEjIbuC9kaF-Pn5RWd1h}W_ntE}#BcisKFtQ`6J zpZUH?8x()P{aw&6lQ;RkH*em&dGF0PGjH7G+0sdvVGomS&Su~XfB*QwUkHhhwQ4uN zdG}Lhb?ERnIo2G@LJyqtJv6w~l}&cIbQ;tO9~^@R;DU#KDct|Zg>G)eU*Ih>boRJ# zUt7fG%wnFXADeA;Twxj3R40 zGFpx(bqDQ`BlGouEX*KBMK}P~hsI1`G=elw=6ddMuI>WvQe<*lpM2LWPWtp~{dS#r z{3Fr)(#%?aBn9b(BQFb?-Sng$wCLe?Z@6jnflr2!nd_VoWEDE!g7RN|FmT9qYtkW4 z=AC0-onJ$yqeJc*-PW~@k4%|*m?7`=oVf1aitqKti0^XWejIHawUGpE1C3 z1~^L(2c|)P8VmwoanM&>yiu(&snwd|yh0!^O#1P@yd84A(RfEzjwvfE$Ea5`8go{T z%O^KGlX0+}uAOG1W{2mHPwNTUOf9(|56i_OqT-bt|r z_*iZswq;@r{IsxI>_7_qEn}n2RVL02VF!iun&eC!-BK*g3;l5GII!tb#tA<-_^&To zvgF1jP5MvG+gVc_8s>#X^EYieasBialW)HE^xe4brnP?GQqi{=^Twk2?W2xE?+<72 zaa8Co=64GNbumLOl6+OGx!t4aoz;1RppkK4%a z)#yDQy`B!%(=^+CUg863y)G~EdJS1sp#ddD7_r(fFY;vRO%}#s7?5nzqRziTCDnbc*S1SoXR(%{Kr3r_e9q5mN)0Vr(Ub>j6&zzyEKS_|&xX*=4-rq5 z%;~TOY?I1icC<7rPoWMssG)^}Is-Hq)Bu!|vwQRXrKLr=YM85(-oY!?>Wwz1$z~J# z(@c_8;P(~z$`O-OR+f{q(N|>h`HJu@nQEn$_vJ85E-ETT<^CN71$?PNyWM2WHD+$- zb){QFWuV*%ElwzNLbX%L47Y8up*9<|zm<&+^0#KICSV1Ux zJUdpUq2y6r;tNegzj)CX}M%fw^n$$n}zas>+5b_X(*i=du(rItE=V(*JNQ$ z$dkX&v;6W7?Jks&Hvt>3v218~;v*K`*;?80k8cfz`-F-DU+YSEeVIG)Z&!NG1IXWQV0GbW$>9RCTCIyJbHlo$W-~csm)~fH=~>=l++~C9 zM~@%v3FydKAG))S-#NNL?ctuIwIQ;+?(JtD1e%?Xu*f-;Uqew#1+7 zC{W6a9M=yvz^64YewKLiuUg%tiyfx9)AaYWRi6@gA-AQxaA2hJ)#K-(y94p-M^t!= z3cMNK(c)>a^VuA1&&Pv*MFW1^$B|qQ!*)10+|bY*Yc6NniUY<#ZmuZ%_Vo0P0i!8k zOcy7R7mz%;O0}_Vl&P(4RC#gCTU=3$0>wVN(PdW2wQSp{*f_Jc7PdhI$8BeIkyuu) zGy%otx_0`s+hfKtM%ZYC#&kQgC4haO!K0vWRO2XQ8C5X~jZ(=2kSlJ3+BVoGhD#>1 z(S4KAWo8szX_366WCH;JwkETDcJp6QMUi{Nu_W_=&E@Kdh(LARS}YQ zm0m3VU}EXuk0+KUcmt2*Yx&UFw2HEQ6H7zVB+{0awy@j%8Vgy>d!|t?lWRJ>ng7we zlH8JCo4{ljFpzThRoTRd}UafJx6o(tP+W*_bKlIIbd;g$Q@RAyBXfj zL#2{;I;{-P-(t3!%x0^Zw=zy;osMiQJd|bt8P2Wg%(nDH8H~@m!isXXL7>IAXaQ#y zLzW&RhW)D^9ro1vVwQ4ON4pXaJzzXP8LBkQmDZpz`{{6@?3$5ERgnGg$hMJM-Xq-1 z{$#Myp{#u5vq4cVyBW92SpX5ke zozS9+SeViJEPnmyjw&vpunt=9cE7S`Q|FM%hCz&ig+n_S&%kMnx^1UStw_9O(psKo zknr7FJIudrk-?CsQEIYTqA#cQo|ConaqOX1iu$q+cF_3Qy>CSoRh7W+fdfPasW_T7Ehm!i2CJGr~3vWlRNa4C07xWDVey%dfH zbmWm9RYYnC`dWQIEfV(4ec0!~!^!g}>LSB1dIT%4I)8$e@NQoTbHD*WJ@U1+BQSmh zBUhiA)7|?I-Y)W|iq`jUN&dVPRTKttR32E+&mU>khsdAnM3292tHhlz^Ya`g5A>(3 zr|kU>?qJnu7+^qJ9Nvkr`w;{|ED2+d7s?&uax`vYuyL4%d>g) z#jklA+;ISpD!vo4S#|GBd>=VTP{keN(J?6FAp?U!vVc9{hS<>L6km9zu1OOWa+>@M1`PvXhOxe+i0~m~^M)E5Kjdo{o;F zDjCd#hQ`X&(O_iu@R~pN_VykU-hplqXJoLq*M9jypxqB@6;J_q7%T_DcJVDnH&c!@ zTn5ksTU1F_tLn8{`8pJIbXNwCm*Sp}3+pS0yf-tOtU}4nbMwo}#^&2iR;GORb!(m( z;4d4Tt2Y;>XV>Df#M?|c^9jbO0qJ02)Rb;hYr{9ELz@C~y3P=FIHbc73o&;M22iKf z>eTkImK8be!gdw&T5T{mwK|s$>C`%N7jQx+;kv~3AZ0(m%(v-U&yynpzH=nR_?3Yl zw1MX;ka@%Obls={6}3MX5|$_Ht_ub0xs0aRKwbI3@>ydlXB-?jw524iJ`kBXvgUI# zDtdtlF~1h&BonMW2)N#F_Zu;(bwGMCpd~K|zKz<5!~kO*vpZ^6u(-Dv!bW3ymqmPQ zkgiaMbvla$*RG2vtFd_=z${n{qmYHcc1(OvWw11eQ|!`;A{BA8CcY$<5^Gmd3<6g- zH_!P*ceD?F-TGv7RJeT5%g|vT!bA5Fxl`g-I+nH6T z(^-*~Wegda*iyRP4)_#ubehd5EhruqL^grxNthhm5rbbQzQo{{BqpI-e4W=H<=5I5 z98%VIwr~!4v%!=nP7a4_^Q^hW6}bU#<-(>_`}Io4uwg~f>+WG+o6$C_D&Q`f5(uCp zmnX6ZOnG(ws=(kW9j|t7oEt7Jd**$1{MhQEK{+>Ieew^%#NLJLFdjS<9T|1P%F&~T zRn(1rpmxfzg=8any)!Q@%~VjQd?2TeOkE(8$;QT7K!_bIw-mWpYsott=g~(ZgFPPS z2CFqo52xxo^y~DG>ksQWy>uv-CafR4p-JB~LSjImeNiZwkb?b5fq_CIKd`?bu_Hph zMx?J~P|1lSjxuuaNlwbZAJKuy57;BK@G?Y>aO+=}-M`>0xqgH^5h{fD zKuccm%t*nG{{507gRv$ImblG`fHTeMKBh$e1q%WHAcYe1` z4UE}cPN%s`t5tL{;#nm457b5?JprJLM8ubCT>mTzpZycxVYoOty{V*jE}9)2G*kLQ zbKKET#jQ034XXx~lC*JU5(d~Vwe)@@>*NZ69GI}~$OmO03WkEWqH1#9>f4;m#Bs7J zX@id`T&}|(o+RWVkd{E>@fQVw1|6xY@-!SNFLwowcs#{NTt>$cg~EJ9tDT}nwOXj< zuxV%ItWnMmd27Ic=C`6XQ)^I7OuCDZ5 zI<^Ifn{>o8zk=dPUp=~rPQ1kNc!0$1-^h_2VG1(B^MP;$6qhVXb5TZV9}XTr|5tLk zv6pXmDJE!H)!kz+caNNY=AKbg&SVa`uW;~I`2NV5XYUy~`8`+t*5IJ6@Zpg&KDcLu z^lRNV&VT7lE@F2-$|UrwC*J~VSB~2(97XelVNJF0=k1l3t5>(*3Ts!5?azH`Qe|TM zk8<(7*h#aZRcI1t0!ok>)j`OyIyscfvmiD~5RzTW!~l!(>h4?F1)ECb==SE4s(Q2v z-tyGah&Ox-wj6LYTE(ssahX8@wh$2NFg`piG~zKhK}(DP5)A8~GH2I*i}$fWjj@ii;S zm8G1a{nQ%;PfpAf?tQXw(6k}Nkr~LjqslsI3ZOp8X!Q!jfoRc~LlvEhsS-6!<&cy6l2L)a(cc$kx%o#-JB^ zi?YIAwz+(NIVz9FVqnM+Ypo>;pan*6A%Qpn6yFxE#tsbxQ6^@wTdNP%0%wO4shqW2 zfwkBgwUS2S^o-Rik8N!lvb7;P^iad0CW9twbB0MQ(4dCVGa8NJkZG%&+ZvS}k~7ex z*N5fM26w_|;Q`3)1kd6z4zmJ4m-DG~-BW4lY3eAns9EsRFfneF&}x9KUQhBvM*p%Wu-K%msXIpV|`aj&f=~N z5`|b&ERN}Y6=BXpUdGGF%P(&>9{Pu}D#9TXl35LXcG~C8fqnaMDyretr&VQDQ+Lc3YMDrZsF+1EL`$JQ?O=yOX3A@ zj>c-(3CEgkNS&_|id9apzQn}y^%k;=2V@IAu7NXvVc^Z^n%g1NLk2`$19xO+7Z+F5 z8Ng0U-O%QYx}7#{v#UAS%rrMM-tCdP3WY+monbAujErcyC!7(*PQD?Un}EXK3HsW^FIMc&7&pvBD zZ^n$q=oJ=lg2E3-95(Sc8>`}HMVdd5RSzf1`Vo@L@L4+ z<>6cE8%*`}4eo_t@%Zs$fak`oK)Y<&;_X?+iiY|y8!0Q=nwMAG7OC4>T{q}Zts%B` zSl#eLWn0^rg_AH&a<~|}sRYVKSw|sxy{&$B{m%Ml>$x$m5?Im+Mok@sMui(HMzQrT zt&*b7^|XuOpK!+~r?L0^^Fj{^Tya?P-Ld=;X{*I>Nc87LT`TWDn@*Yy4{S`?;U%4c zNY+2#M*>nj8qw7X1lq~`Zo9ZR4QEUH1xOj~?Ta=RN&D=@gYF=gy6rL<(ZZUPXX)T< zqr1;frOSe7kf_{bG<}jCgk@naEV>ZMg{1xO>AgO2t2AARLAnOdy$eyXy)tXr@`33! zxw)ly@Zg*9L;IRW*Y{0%iJTIdImD2Pqk6qWOTU|<>)|@Fd%cRgZcGVG=N1$z-gu@_MRUX8Y@>q>X(L7}b? z6&mXTJ8gAZFZ|RCi@i}V%EH#pTkZxfoh!?A%Eh`|8C%`P&#-fbAVP|*<*ZqwaiDD1 zQwy_T7W0&N{BkB%cPNXVp38tDpUtSpMk!EO>f;=pUh#!ejz9c2FFfV_){DF^hjkaQ ziR!V2h|Q9OqbIniM-1_QRFVi$B&6s>i`o}`mH6r$)^J~8q2Oh1uTKhXB5E*?l+fdJ z!y$28&4?$oRD`7@H&n_FwHDSRm=?&rr6>B&msOd<4GQJcf6}H4+t8%pj|?3a*s=19 zkC~hDN|iQVzYQm2m%#g9Th4yB`~gQ`NQLt^zmxmxkf&bhkEUh*VaJtA6R$utT~=B% zi@%rvELhO{5x0WN#eSL}l!IFE$LJH;HbYkU&T2TZdT#Z~YGy+ijtS2QFAFo<%XXEa zhl-vrLN7&N7P)J@VYcBW17nxLJ9s!2E{CXZXe5JNan)&UKFqH;U2Ft0?>cgt)@k5^ zF17x&mz9CSniFlIdqW6>V5sthw$Ozeb`Z?qAeUoH*Pc+UGi@;;x*Tzf>2cF;6JvT4 z6$W)B*gxmIMaTohjYO(Oya7Q3jGRz5|k* zrGOP&pMjy_2XNP-mS5^^FvXW-N|QUkxD}T-WhclgrMHan2X;XsZw!{9ul>5ViaXvN+o3O;?}X>K{31WA zZY-*Vn-4zHvZTKK+%Dny`~6<`VV&^W>Tx;qb~X9o=o>y7kzM&TmfY;#ujDUq0f1FL zXaSR9L-eJU&387ViOqAH(XzS?b!bf8j5_pC?en#-)H2&EcU8Vr$tcYZGqM|DC9{b^ zb_g4HWR(?{p=eo0*}5{OEV^T0d(>bHw~u?Z4Ymz_QyYfiaYNs%t~MRkKuw4Iartg+ zA?1c#S7uix%FOf!gZT!N=~jTSH;v385W2-e-c?$x{(MWm^;Unr$?wls=0o7O<|6|i z$|eEzk=JCda~dDVR$I4K44&pT=7qUXaBIn-5Mx3HJRSpw0kUT1TL72kf84*@&-kTH z4puDW7qDChdb->?m|E^rq2kwray z3t6NkV8+yiO5z(o#toTdoEW;Bxkif9b3kvg{XEBtD^?Ib63_g-zL6&;_SQ$ zcB*UY->!-O#Cca6El!av*cDh{DEU0ER`*Ay40 zkw}{Yd|R$$|A9yR1HsYgynxMW?JfwI3JL-?e*t3+%5R)7St39kwVz9eIhPOAx1qjEKIAi2jK^h#L_Dx-TQd)c~~-T|}24?{vuR*^T{Ry~z?bXP4vF(UWB^o@^(~He;Uz=UZ{UrJ`I9-H<}$t}?F- zF><&36;D=!FtE{;{VRowSpjeS`YSkbNS3Q!2n{Y4j@X6QbA}6FH@kD2*nfQSV&bK? z0m$uUeUnk+i(d#j_^qd6gy3%~XWee-yAEDV+<+bt6vIoQ+szb=hwqIngVL@-fxEz& zumyT3>X@T~V-?F42xe*YVcr9q-O$eZS!5Dd$~y7TBUqm4-w7(!NqL{mW)yy7v5u`jBS&dT_*D~w@N zCUQYES(tp&JH7j0I?NNk7k;MsV#i25Z_F^vGs-w&$OOg2w~wE=oU+!!l$L!X`LwSNtR4#W#fa1_}Go45(xM z!!ym0oQMe~Vt=WVZ2|^h2ScKsaeCOIhvT)dUW@$?BXHVbnvCa_Fleu}BfDM4DlIw? z><)Glf2A9{!66vz#*FAbUP_PC&DL9zd)0B4A@JOM7`d2$mBRVc(7$Sx@B!e!T zUFGSr0f#DTPe-FFeK;Deu3(C^b+vT}kC+wdtVwpFHnR<@dDV$72VCcX4&8~vCV0y9 znF#^>@h$d8&pQiJC#xRV$usM7s?tYRIV$SfHqITGv; zftNRBsiq@#`?xDz8wzJCXVk7~OB-R#UR0f`b+ zOhk7Sm%~rXVR?CR)sBI&fwATt+Tz+`RQzu=`?n^P(&(R&rWTj0;&$I1I2YW5cX{i~Sp&vAGU>~YbkOZJ+lM$FoRg(@H;KYhTQJ}R7M21p5ti2Lt|cs8ld1wk zhh&bPvfEb}`1qA% zN{_D~Q1G_bXYzV|qV!bkD6c9OwTjsh2F0+rytpj_wUOFLSEM(>Mv_AGSSC!7qo`vY z_R0Sv1@c$`Vj=oA00R}3C%Q^MEk!3wVQFb_VG%4Ut^$#%k&XzH71g-fSGHybA;^rlj zmLS*VjV`6AND`wm-yC`N3;jJ0)HOhP^AxN=1|CmQAhDtuZ5<75vr}c_`Xw#X=bjE0 z`ktLQamYhh5=LW5xGO~xYM}Spnq&O`mgXo476sofE-@9C1dFTcYD$P0j5j;OB{juu z)lgeqTisRNTg_JgH|z&)`(n{>6qgi*gW)2kSe)1s6~Rxc0o<(Jf#CUINE+qh_WZxl z1=um<-M$=hs9hDbgovFO>>1eKyyHmspR@#CxV*`wo`%?M;}Z)7`y9Cc#%aTis&wAs ztX|c9Ei=(l_~V{`PvSA;LP(};wzG)%hHc;x*=}Y&NCSbWQLSQlIfM)&=Q#zLwBl5x zCq&Lg$TajhY%hcK{c#BUW#(*))$R3_SHQotj9AQ9T|72(>ab5=-NVd({;nA_PbS6} zl5IlZL17d#o2!ya-~gYNhL935DtQ{u%jIdR6vRM$y^V`2DK_SYL)csP`t)u+FMAO3 zjYZ=UCuh#M>v`tUp53p0+B#+Cr5f(F#Up-L2L`F+xD1twmy3llj3SBk2X!!5&Abc` zp0dlcy*}PZv0gmJS1lgF%oi>-7LJ!n{824fkvXiI@C(Z2JP(^aYcPZmAs}#dWw5SV1(JrA~u@HON?{S*tZHG(dw= zW?{@M3$;p}LIKsu0{UvTh>TK#;?M+F%*->STDWx(ZXF|OE3YqPknMiy^WpWKm;TsU zKm4=(`#;0qIXnLTIZ7{V6NDG;y6Xjq+6vnsL%s?LOw~?d3^R*+S)z)uux2w*Y85)5 zO9L=X&GJT_S-~*;LLSS!@oGB2RYVezv2dh0F)vum3lHH8FDuW5-{2C_FYdnk7lP16 z=pbJq;$Gg5iCuH){F)(cpYPxQdE1aRoMR0p7W?5l6Zcc9oM2egKh+7HwtnJtz{VuW zv+2zC9}|cvq$FBXNDOu_`VXkY(*6^a_5#$M2>m3z-~V%(6uI?t<`3Mxzy{o4X>>G~ z2927mv}{drTA603yhT4jK0!a(JXgQaJjcG)d~?PI_AdE$_Cfg$_gm%@_V3cHPJ>;c zg;uSC$yNYpuxFAZa5@ak7Q^EPWP*IAI@o=#@?85OePv~^n+!V)mEGi{vb&@hv@e2g zgA{-%I~lGuM2}CP?-TIg1NsWrfB!_c@Un36XZvC6N57xQDi1#K8cd9Md+&$yC)@#D z>{J*OE(#ANy7oWxH#qM%Tk^Z!N-X!!9uPTNh1yH>VdKaDS)c75y0lfjXrxw|ec8$B{ezM&a2gTa|IE(xPYitC@< z+`T-DX}TjijdSW9W~X1}aSl)wJDXL5oI^9l*hf1?I45MzR?V=_bl&dV<$T%srs{;_ zJ?B@>?^PF^4u``@PC`R=wMy-9DwQgO-lbCO8K6|_?GBYp3mE06&c8W(os3h4E7N}T zsKom2qs1_I&RU5Ffg5$_4&$p`ez*j-do)l+&brIt-3piqL)k`m5hN2C*$POGx8v^3 zDp1$9X)j+i4Kty)5(69NdYDUUzbg>QoDfNTg@TEv(f4a-6#upJ{A{f2m>~0{OeVZC zbC@$tlgLR7oxP4|m5oTroGA>e?4#s9Q}15ZB^wK5U{W-ahX$ZA z{2a8Lzn!_Cd4_qJInEs8&oJ-tU&F7M^ZW%~&+{^b`zVJ~{4`dA97jgafDN9jv%K-ML63z}ouFaYm|tgPkxnJhbX$hIqQ@Y67*rEYgEgg08|Ip?{q&z&D!3)Z3zwnM&FyVlrgS?gKr zT~&N9T*t1H->bdXxXE&_=T7gP#aU@-Hef99q1=KB%YfVg`4t6_>JvPng0)7@|lV>d8RD2)eAHxo*`a_Lav7yUMnBa zlm1rO-Ht1}2)FP#GSHWLT02Z#d)B{j%Sb0w#dU027?$?$l9?v7xpDXECw~9w+9?lA zTy}E%>w9k*e&-9(&2!iM{MjYpG107#R8xO(<6Rr3j@*bIes1132VeQqnkT+__pwJ# zj~1T3bItyH?>-S2(Xt@>g9lfxdhS*L;amXtd2BEC;!H1N<-;+E;ew%VV#T}3>YR|C z=(D-g*+(w*vb~pQOvkNw7y#Tw^}voToIT$((6rKYrwO}RX)>s(O@nF0_?|R~5iAO} zWBn4s3bVbWINPn)kyo0T$PV55vLZyHwV7ejjgB>!?%8s2RmK9_)VCKce!JZUKZ1%6 z-?{7V*FP5iF8JVQU%&P9#Y-RU{+h_2ve$zq%0>e}Xp2^=w2UWRYw}?2>$#Cz%XMh( z<<@B);kIag$vv)lmD{5^$r(1fcev4;8pty~r_BK5nQC)(@F;GOqoVM2iyqk`&@L^U z6B%vL>riTB0BI+VUT2Wz64At}B2SUoVDv>w9HR$Cb zKHoE5Ki)H2KihLqvEOtsV}IV8isPm?Gmhu!4$BXxpGs#=$xo%DbW3dxB(WHMu3~!> zYaF8rkWC^`V=)7m=~Ak2-73#@6F1{%H&&h9XWB`+=qSF3_(5^siWrJk+T=oBC|kwM z+^g~!A!Od(asA1=nzm;IP21)NZ+dEZY)d-HoGLsslxE)g5YA-g{_N>x!+!P9v%c{) zCx7(WJw4~w5fn_?>h%b{5TMT*L=@XVzvo0t_O z{T6<(7XJyeg*n1~9pJ}wDVUp>2N~vj@Gl-=YA9WpLMDn}7S`<$(*R zV~~l7Gf1wG$7PBbL~#>@=wckZ4l#st7zpEtiveN zM=6QD6BjlHyGyYyrpg$r&5EnmGLYC0X0-3VeTxP+hCG>0L(r<% zC|Ow|Av1pR`#}YHWm;vkT5imqOIFNri3HmBAD0l)_b(ro_8O9v2mM=gF9kCf1wuEaLQ zOBZ7FS?)DlE(g4EE{0lL4nY01-T4G)oI@Wc$ zlOxftzrhp~P%M~w2@5A-VPhQPe}si}ayRNs%x4C7;c8s^EujVT;58X}qw2?HgH{-C z!3n#&j|N;FTn({0m>spCN2*Y^8CMBy$4{4D?(Cx6WC}z~DfEz9$(rH-3;wm~2{8p% z4x#%AJy>s1-e4>;P`(!o8+I_U4KVQ-&r9f_gpQG6689=3e2IvN5I0kj*;sYzMd}js z2-7irmpeg{VmKij8WVOBM~VID`D$)k+FUC7jddUU0gK`W5s$0wzBaSP8nn4Dp?v*Cxt&4Nko3w z@;WhZm?+%+1trNB3zKR<$|JQvz2Cs`+!02yM?NAIF>YUs$8|t5+=vRq?-i@?y9oZn zSbHv{*dwXCiCykYSK|FHvbOp#Zo$8Zy-o)F`#2(Gm>VoeO1&(G8x)A$@B-mU1hbjS z1iqN+uEZJI53lNrm_h|8jl&ollkbahL?C2)F;XHSTwDYF8T zV}>N=NfO6>+tuB5g>1Sb^m4Cbxln*|jGd9o_lUx_2k?7DlJ|fZM$g6geMm)nN0M$` zBv}CN`ffcu%rb(%>$ezTDdw%%q#{2=>N(t|12BIHrkFyce;<%bT!EM&SgPfWGHnm7 zLth~h!`-6SOticiE$m{^m0!ZnF0?_ciE!JMDt2jCviDF<@wg;NyN+zHLgJJhcO3c_`bbTg_$MF6xIx{i`dKe@ks0eaXE|47ZE8eTQG(@f*f}=MN*`M9?^^? zXm220AtdUE*Doi!e%l2C z(udGOX5{5wQ~=K=R&~jmF1^|%)`ndw>LfT`)X54^_5-PsOS}R^ba}K7NiDDY3Av(n zMASo~TrtO}P5QHly>y?Pm3T$8X^Uvw_cEjsxObpFu@YI;$Eb43D(26Z1$Y*-iYhm3 zsYKl-;+FVC#0TphR^pS4@`-Q{VaZjo>Yw0KhzOO~$1R%64rMmR$(^jy5MT& z*yX#sQmmp1)TUZRT;^UZSqG5}h^;Sc+JhCVN|dd%KH2J1SSj|=oMI!Bc2bluqPM7C z5v`93ME1#Xk&i>W29avh;eaV6I03esr5;|R#v8Pwy$ubNB|Yb!$jJ# z6rv574ABg5gV?3G-j`m*Iu2L8-$x*vR!W>EE&-O3y^O?ZIps7~7jj00^<7e3M3RC@ zIo&6k{YnoDXHq(G#i?ex2A>h-Gbizx6E(OBcLb?0qW?sl(a&dNpRnrTt5EQZ;@an< zP(JsSm*lgSmMFurr0U}{ZQi&-8)E>JKx@A>cqD?yBm304KKYIG6`jIoQ90U^%CSpW zpIAj2Thxw{y~UEu9K%vgbR?2|5z#YHfvUJ1>vr5vuu>5**%}~fJ>qL9CFRN{^%Emg#nX_I z);NW~M8f*Lyre@WdU@0*V~$;^68*A%ZD8|EhEG?#?+?BH}qT`B{J2oA-NL5^`N1AJL zSCr*s!LYBQ=td&EUCbzKui)9f+7jOO*O>a!MlfoxLDCZ{Ttzh(i|b%ai$n&<_Q)wQ z3XOr-F(W3%%p+3@F_B18LzA{9ed}u7kyO^HIwYyJle(l&bEncZd>_zBy<073uol%* zrNSwsw#Q0^H)0NHv2UeQn;BET?@tM#f=}p^x_L?irSt;YPJLY=*;>gi0oXpONUQ0A z6}0a&=_T4!Fs8&kKg}A`?6pV=mP?v`SzI5J>#$d5jIpLTwAfXey|xt2T}5V+d18AK zw?i_jQm>JmTjtNA3qlM~QaPal?C3I>X56x(u@(Ce;V5x>Maf6SP7CSt#q{|SiocBFFFz%fKY*5BN%2Q0{%VRp zO7Rb(_=iyZ^%Q>-#otWvw^0186#sCFe*}GgG<|*y#Xp|npFqo>M9Xid&rhY#Ur+H* zr}$^k@@LcX=TQ9fDgFf%e+R|Ch~i&L@h_w4&A$T&z#r?!9{^*6&Vyhq__}5S&6r3s zCZ=ReCK;1S#w%a}xKV6N2#}aw52n$!*NCYdIK;FW3>8xk@QP_Qs1ef=P%6p*p`FFF zAe{2FE^-PhX~%6fU4}5l%~}OqAlZ zg2DqRJP@bVR0e8rT1Vj_6mGz2Gi~#sI2}ge;S?T;)3Kz@e`1*gHoe2|3 zSFa}U#m-J44PTnhPWJaCUA>yX7yIwNc+K3Oz;UrZSJu=?{;f{=>|9O$b^aUqAkzD% z|G9nxtH4^Y9&7}6fqTI=@BsK3cntg;JOh3Ky1+j0GWZpE6}%4K0B?hn;63mG_yl|k z{s8_6{tW&m+aT#iJFtoJPUI6%IfYm*SbTB#lH*H(FEzf>@TJ3-9$zMWnSUqsi*%|3 zGN=y7qBWEyb13a{!VQI8eyVOHx+HY!Ki822e}v+{mX0*h{y}t0 zJ;mQd@itSuEfjAn#XFqh9YOJqrg+CtyyGce(tm6^sSgqQ+bP|XDLj>ycRkI&;na_H zrkwUOQtp38XOi-7qUGI8%UMbBucr7rDgJd7|1A{%Z500oivJFZe-owqZc6WFn!kmX zdmnx7e)`;Yigzc)`yeg%VOs7Z6wl+7t|utHPtkIAQM#X@^?8>5{v6GJp5FHY#q&#w zXE!Zp4=pE7>3E6Kae&f!kka{UT8~3CJxuF!gx+_Q-gk`RIYIHfNy~YMmeWn?I7R7r zm(qKN()m86`vY2^59#k8(fp6;eZQl4&QUy{(Q-bg<$Ou$_=?i;HKp?#O6Ol_J$g7&6pm83j>1DI{O_1$0*|KfSPGA)@I(qvqA*b}|CzZa@O%p2NZ}3&FQ)KP3NOd$ z%{ob4ti<2ev88I zQ24hLK1Jcv6h1@YvpD@oCw144ar%1-e@5XiDEuXb&r|qo3jc}1f1&VSsk;=u#>M?F zA4} z{1WT|FM)&L5Z2Vkz?+~OybIpPTKpXN9DD`70X^XFO1I<@ehLhtYW@_9=sDcg{P+ss zs}Ns7e3jrUgs*aZh4EGSJIQ0L#P_39{VJWnM5PneEIZY&+DX2W=BrNit9X*Hq50ZV z{i>eOK~%g!C#iS>lhHY`cy^lap!w-EKZE9H()=u%pH1^~XnrouC!Xm!on#V7`2%SA z11Vh*nqN(ytD(=;(&vcECnGoFY5H}N>d(XJV4MbYk_pJyNuFn+PBH}rIBmpfP$zk! zMLNk7B_?AiPK$9G!)Zt-nG9k=h-X@^lT1e$PTO!A)=4I$LMM5ugx--fe-zChP3a#) zpC3!{j-z`4cH!*HOAAQF_`b{gY|ErqFs#rS-X<)_)r1%MFw-(0LtWxs=v(8Lj_vTHh6v zPd8CM-Av10N$FZe=~_+c>7?|mq4cb!^sJ-w+(PNOmD01G(sLW7X9K0@c1q7iO3xjX zo=udVJ1ISP(e}KXw%=yTzk4YE?xl2Yp>*Cy>Dfx@*+%KPpVG6P(!Yb!{{XG;PFlYQ zDZLL-dVfageVEew2&MN?O7CNo-p47uPf&WFr1bur{{9sGeHVTHY5M##6#ugn|8unb z=V|%Bp!B~$>Hj6I-;1<*CX?^z4`s}6k*+=;kr~G+|@^3%o-^=v(1N8TU^!Zol z^S`3_e@*cpqUHaFmj5cH?=YqB2&MluO8@J$en)Bjj?wxbr}ck>^5+EQ&zqEgZ&Cie zO@Duf{@zWW|1Ev~B*lM<;(wQxf0~y69;NRLrSE-8|5-}^2ef`4()xWw>;EyW|0k3$ zzoUHmjKZJO`@W#}{ej~7lH&P_mUEt#^G8a@*OZQLD4l4}U*}MTms2>5(<+^0G{~^8mcn%u9!%i| z3O7=CD1~Db9!6oJ^s{x6lF!mf%ALStDLkIS6Dd52!jmaHmBP~~Oq4S*c0?(YVdyLh z&!zA@3g1ZKg%n;);UyGaPGO={Gjx&?P1i}vlfY{zyq3bZQg}UuZ>R7^3g1a#q6EpX zm?%9mEWVe*TPeJaraNf<12lbz=KqYsk5ZT@EixP@N{Wp4eoo=1DV%)$@H~ZoLE#rE z+(qHN6edcB4AY5HA;a{SDf|kBe?{TnQ212}zeeHLDSVv5L@AKh5v23KrIR{4flpHS zG=<-z@L39fK;e%mOgb-lT|mYuc8Dg0Lo{|%2!O{@wey zvq|^-l0U^eU)?GF;h{-RKXmng;bPwpS9W&x-GlFk%kfQQpt8C%1yL&W!#wV^aOY~_ z&Q9rbHC)z-arAxm|GU_EZJ>XUaq%Z^#%Ql~dun#dn1txktpKof%x=H{a~!lVsAV^E z5U0C4f<1KKls>w5_%ODddl5opb^FPVV7sFS zqlJgaYPB9Z(Ku2lVKxiJ@Fb?HABPOoVJuuM%Cy7}^D%_tt+H5@VB}*Uj&vC3o>)sq z5^s+~NI|U=K?#2v{vc(*^}?GlER__4!kYk+6CC&#;H|hcO&kCQF~MZaYFtq`nj3%V zS$M0k2H#nX@BB4)7p5?itOZ9cdvUpBj`uiW6L)t<@XIenHfJmF&FDBfPPX)swR~B< zpYv~Xo5Uya{Vi}WY(-Z+nE?3Vl426qhWo{(G2Es^L85?^iJ$y6H(z`b^YW+5R3QG> ziGhiM-26++FpWPflguptu*@E*OsI$a+oZ@#_VC8T_)B-YxYbMn-3k~|FwAShl9j>|xOpWs2z!J*unk>KaOkr5d3R!I zLOeryFWAJonM>HKaDrf5gXPs6Z;{D{+2Sp1tD$ALGAXi)aP1O3dxmY21R)`wUXlsL z1403b-Db_92Xa@CNL6Uwjc1k%!v2>9VfmSb?JrI{`@jS5PkWKMwD`=f5l0%Ou|AE^oOueCRQ_f6nZ|pKJlA{?=6RD|H}|9e{bP+UDMuwVCVbO#8o4t z-b?nAdhcIy2J^LR>I3h;|G?C)$)t@t;PYrE^SBrXJ{VWGL_sU=`z;3C(ov@M@LolW zmXZZ8;C|ysI0#uJA-wJnHfBv>37j{3+qT)Ww{4x%Jabl4(=3difaGeK)zmz5W^>al zvVHK@-c9@(_BNmuqf&>#V6X}6p8++M)ok2b)i5X)x0QOE3gWJ;U{-BBi^*!y#T!7Q ztsyR#53Q+=2g@r5xZ_R!W>a~*DcGFe5N8|J4W>N}?U>$1_DaW|rYAf0G=GAjp}m;B zu`QzRYQgnL;I`CVpb>5*p-o(9k0c_x3kkirExwdBkkdEaIk~93%#dr%VUgKnU_+(3 zhVn9$n_Bnml%6@`Lq+)~mIh{feOmZtQ$ zt_3v8h3E`TYWl|(3J5`Fr{jcH~489+6ax|?pd?P0)en}iH-8$|1ZKbut z9(=Iv$BYxk{g_XfM^iAbNH5U!X3HA*F(8PkeLbEZknwCB1pNi_IL8)yGvZk$J?oAS z$aEPEan@m1d*cmSx7!g1O~nl;9&8-YV2?Lh9r#!Lq(&Pz>E#?7k61IZ{P6B((`4aC-SAClI$6g z0ypgj7s6FXV~L<-Eg>~ zu3q@E80OA+WRm-q3!656w_(F~ciee_A0u?hY8zpCx$wo5p;IT+A9++bR|*|Xm1?02 zj?mUr3x5j1%+XKHt)KhYXy~dG&No!cn{WFUdHfEHQ-{15_$L&Lc$w6PGhhoIKuyZDK=Q#q*iD@dj(7wqbYXo`wpMqgIil?~p#*5{n3hy#!ZvJBB>p~ASzP|E{ zn~BUV6fSWa`O$ck?ggvkh+(X@xXl7_2W2f5GZ#17vl`U#Mtg%1#T&4Nx5jNYa|Xn< z2W&&!VsYado6Q++tPLA=4H^CQr8Q09OFW7K3rR>H5`EHyc*Zx0&5W~fHvS{WEE#1C z%%tblk=m1Z4+`irUR8JYaPH45?-3rlf9IVSNxfm{lVRiG?8F~!St<4BN9z(ZwWvM; zV#0lQT)Yd{{v%lGWEkOJ<%#`Q^8kWZa9wU^PXaf%E-ts*jcQykBN!St=#0&VII!sS zjd89?jr&z&dXu_gw`EU*fz%S-F1G6DSi5_O3SzN8+S8K=VKp8y;O;>JGLptNNGC63 zLN*zX+($wIW`|2Fe94gV;>mpI3CDbB9=dMg$fk-Qj6JnUcI9i?fw$Sh4WlOBnpOCA z@zBBS$@$M;-dI0nU1k1t+kSb2!sGei{V7v!oiMa&)YBECZpF0;W1}X=wF!YGahJ)Y zaK{Y>hr%CMt5K06u5g6V(6}Q8Lm=MhZOUkl7a`cF#d@Q;s9}#Hc7Q#(XQ=1bSgWc) z6KV&I2jD}by5c`vJF$BBgEXU9F>>h*eYNyM@vyw|vSiIF!WJuOO&Uu`jQS}?hQgg6 z^8sSjzz)5#TfVDe#4K3db=}e@@4v2gR=)kw70aHeAFX%hOyBmz($*!V?lN}5q?#vk z+&Q5WH|kug7eBdt>0=0m>YMya9(iQp_-T2Z{E?+M{T#9bL!R-E9jx}dNZYRM{hB?3 zxsi^?I$Et!)ri}(S>CV*Xb*x0xCApj>5CXyT`imRVua=iJIt|hx} zPA~G`KX=iHYHwC#)cgexj9dFutjf0hzJwM3#&W2d7-YrYUVHl;X4;?G{LBm!&NmHk7oK zrG<8(GzGRSJ+n}bF5Lp#lTu3L{pNd5&&n=;>?Y_p-<$W%cg?(+c_NzcBBOb}w0i4j zFQ2~Q&SRUmbX@qVZngZE_x|?a)z=PO6CD3^)*Ale*$*C@JF({@L18#reke5u_}a~~ z*vW^1wTet(50|W=jA0MwtWr~p7Zy|5T4`D7V=LrBnLC(#SF0sQaugN&Bu9P$f_h4R($A#dO7BZqk}Mg3fh2Q|Zxb>HUVEO2 zGez`MQ_hQD)6+YiI2DH9&D;J~%R5tTQm^6o``5|kAGC>#;(aNbd|YG{=eLNAXI`Uf0@Hxim+%J(+M@_8aD>K2NBKTF2TyWiW$iLArX1LVw z^oM6)xm08cG>lC!Sn{O~%hggnbF(MUGV9WttvNQkk5a~3EtV7J;ykmtSoB=Jr~=NP zbg?{_i@A8QRc6LqajU>;_vPkhFXkH;%PK4L%W^GdGq7xzI8`poV)dCF`T0I`p2aT4 zz+0`QNSG~Fsj3*%wDG{@jV^Gxva8{hYN%Ed5Q&5W2-J;RTUs0~TX9<;j(_yjQoamv zew)ZcPi7#f1P^5Q5J&w ztDk#p+bTW3YjIAVe8cInqm>4U+uExTRvx?y9Fz-e4xWL#`ET$oZqql6r*^2A_Et|+tjyZ%Zi|mJ-Sh_g|K#&|;{TJ+=P+mdT{#Qa@tW4c z`c|G-{)GLKl5)4DO3F5X!BMo)AQuX`2gPyh=bk@T>^T2ou{g{@&+AKP_=$64DAhIP zjL67jZlXjM>O zGfV}WZtXN%N~KbJX`!RUQChmLw{Z75Gpt`#k&{)x%jGqW6>ETRT@UNCv+D98e{)5j z;c~;v2Fb8K-&vfqvdy~3`n*-L7T2CT_~JPSoniFix!Qy0pAsKBIIO^b&P`u9v4a(m z+aO+#>5Q^loeRw?X4WINj_@ zJ)FAmQ0nP6fAcmmGPL=PZDG%xWqxtiXtu+*ZXIr`<*MrH+~U=%pRB0NtEi~Vt*$=7 zt1a@T3Qq;E5NDxyy>e~^H_&l$B3X$TFItWgJx|HjmJ5G+T~A4UFg?j& zSxAJ*(SrYpQ-{TDV-gwDMFxtDw2t}B;NA)z$wawE^z75Q8zdvwPw${N=q%u;3hy6; zzGtsH(Y~pDdP~jckD1=yv%RZz)2VF*#k~a`zHbI=8f@QAJ#cT&+%vcLg`288uFBG~ zyVc3?QX8x;txK+czP|t z1+1C9+&XHu8(tSn`C zJz>gnv=~~jLnZ>?=>v%xB3$)(cuqmHUA z6$g)dzL$De`tc!f{;Svf!S}y*NA{*KF5c$zmK5;*RDSB!rN_E`mD@jVF%HYKP-<^p z_skO#df&y{cu@WYvoJgRQtM>M0+v>@-G`9nvzd%WyEw^*S?pHpOW0#(vxON9PaExd zcthgM!(UCeWbhh%rmKM*277=F=<{C@N>`Yfa9sfH*p8zmR{qp%a7y!-g%a-z=2_NA-a}MBYFrMmU3xxL(o+3PhsQv<^3T3{5=pZa7Y$xnmdKR%C?WrOk ztJo-;K%A$$3xxL(o+3O$oZmvuYK)}73aqK7NLHg9Q8R)Xt1(J~UZnanNY^0e8;CBV z8_<^;jF_MsG4eGS?bC=N+BMip)Zaz;h(Ji;-8%B3j=ZQNFY3t7I&qsaXqrULbnD@~L_t6M%q`QqQ8~GcF zr;)8DdJSPYj)6vum7qO@?HKb$w6hm+CrRihdXVU0)YypjJc~F_Z5Id^sqHCj>qm`u zA_|Ru)F|lH=$9Wg3M?m{3cBkeY$u*hlevc zCru=|iF&_@`mUKG(2Vv7+ClVcqSp|Xqj$~Js+n3fQv{mP9#P*#DB{peacE`(bayY& z!k%WFsRYhb%>tpSS45+oU4~tfpp2e4Ha>FQ$pspbG;H{cYxXs zkiUCL%OLR#63-yUQq=UIcZ2v5bRXev)HR4Y1@;pT5YJv}HApo>#CaLj4^z!PqD2G- z*%_+&7UB?T93qWFWYuM4$v*OBANABe)FNv35}rXEp*3iP)}RrJ^9arr0y~j^gknBI zGsXy6H9|2Tp_uO{&i%+Ku#2#tP|QxFH1bDj%#V`fQQ{vZ{!xnLC`lV7X$SD`X~a&# zF2Wvm9b!Mx1H>cxah_K8d0N@$X+4^!m3^L8_IX;_=V@i1rumGTG=xj-@(Nag}bTOer*ByEADEz%mXNUPE!tr3f~ zMl8~*v`91mT{K(XM?H0l@Qj9Hq@AJoJc7H?BE(L7mLI_x`yApR;n31JB5H>vl!MzY zoB;$bEHN&z^3-X>dBO!mGdH6&#;ok)^wW06>@chDndtk$8W8{Q9b_|J-3zBQS|sJ^ z)M(D~by{MV@&g(zv(5ZYjW)1C{#}hWvW@)b8g1uqNlc@&*a5>^gHxfnb0Qi^IHv+} z=a`~IoZ(PViNuw0XCmtCibf~HinAvYtZ@b+<4$BwOexOUKsXr~!y7ZP=!_Ce%sHbI z&Rx++G%+`W+|z-{P-IdxsEx*)p+wvnPtMGQLrN@O;~a@5W6oq;5ls?8`%z^~wE*d0 zbXJL>>SSbGiIJ*=5}S?--Z{}uvuCdon?)<*&cI|$QKpqhg5)}<19MI^!ige6@kA^% zmP{yBD0F5{U<73+s+`l&@z4ZX978s&K}(bf+N+R4EgCh>Jz*t)x3E30I490vKcnVV#GCtwN9LerjXBx zvu%_`@RPv%GgQ-#S23go21ugdaME54*I}`%B&r^Fflk)O!uZ#jAv;c23YH3%vt&&T z+lErYWLFPa6-NFbwvHnzD1V%|ohaRjYf*r7Pm^ZR=EGb6U->R0+3^fdYH)X2_rKa# z>+LgJi%5mYs|n&0(VN1%qGk*wD zjakx~q~A}fEoRWdDD_N?`pAh_6Cc`dJ?KY(MnMEIt)Z6s(Me-NXo{os8T>2kRih%T z89}Zj@g>Rrw3dYK`%$bNyC?=~y%<}wBuVu;nbDVNuM%`UP5i3dIbGky@!6}588w!1 z@?w%?E7)Ek&CB*W$zu@{H4;wE3Sn7-M&uZB3GG!GPeGcFXm%&4MvMW`azcx7Op`XN zMM+qvP-I1Xl?)Fr9vi~CJ>*S5YZcV)1dvL6XwOY(`b3Wj?c%py3i+Up*z^-MN#k`~ z@8MysPdYUXaooo`=^0F*=3)09cBUGxJy`IH?nWDlk83QQT8eJ3HEvR_v{o%xSr3m&#*tRKeC(IXW7Tt zzq8-7FR%yLpV^<-yX;=}RrU<~7xp!bTaev~{roJ(@M-n~_8j{mJI8*+euHuQF?*i9 zz`l+V{~h}@dx^cs{tbKWx9n|p6T1R?>748dz9USJGN`t_3Su%i@n3X2{IVK2qstoW_E$4zyemVft@V@193>d14O>}9LR+{ zSOxh|0EJKl#ZUsP*?a7-um;vbDLA1F)kfs@VJNCr}MFPz!b7 z0ylWT3-!unpQ_J9I!NbU`=tzz+5h`$yOby|4@V zU^nc6ei(qgFv$MKK47o2H(&@ZgJIYQBd{Mv;Q$)|-u0Q0Z_H^N8Z1bhr`f{()|;FEAOdP3SNcR;B|NdehvQtZ^CcjKjF9V7Q7Abz<zc_#^xY{tWNJU*J9XE4&YXgAd>WzV$6}CbC|0iObx;joidn;QrOZt=z`#Jd0;@ z2Vco^crMT5t9U*y;Dx-17xNOnny=w&c`0|Y)9hhh#@FEv`5WvhUe5jr_tW2FH?Z%r z6YL+@_xXChfj!RtnQ!Eq*kkN3d^4}$m+(qn#jDvT+28RRUd!vai@UjpdwD%?;6C2S z{p@q>PId?TFZLyN8*k#x>~8jDb_;J|x3fjQgbr)xAAtqopWgx(-UFkDr<0=wzQ8&aVv{^`-CN^ zlg91AfDk#Z7TZyNAYtmz6e^m+4ppH-g{5OzkfM{O4$TZjEsY(jM1=}#SB6oO8Af$2 z%bL_lTNmz!rvuu>WX6THJ44RYGA(zH1!D3Pg0UwN3Xdzs5EZ5#&6AMkNssDDNDW<& zW^+g_dCv|Wy2836L&p`%v~6dmRYxwm5U(MTFuw4Fg2vuJ5MMitVJd9BnS9}l3uCVu zpfDA3FM2PB5sZCm`-s}UFSC6lvwff1KB5LV5}1kND^GN0N|8DulM=qun09NXen ztIkKMu}~_ zgPGD2nbHPTF$pyygQ80lqDzO=E={UkI;44()Vvx}y-HGH7>ePWm?0_9K6H_X$;>O$ zkk<7{?Wq~gu=Z#MJ(5AsEz`#Rs;|eWuaHh5ROJB+zNmE;gS_Tv~ zTD#-nKzvH2qsz1*fiIqM`#8QkD{*|M6<3zF@XSz^3fMYk;vrN>)hjv@ z+WnrWM%i{xheWv4i=hl=%kF7>=_GPx2-z>vWguPhHYE`-bOo@hXj1a{y(UecydQ5# zsLwDsg_JB58g>R|W&-#iOplER_^u@HOY(golV$ zA*mfdd*UHmPlhGg8bkWp63_!+Q!?FF(r$;+Zs#R0ZmK#(?d37y)TD6AFs_6X0h1<6 zJ|B1wK#2p=o*M~Y2Fjd9_O%Rq&cK%X?d(hT|CE?q9V|? z%ou0?5A$r%%w9@n_EJ>uC39dR6mr$oxjkvB-lbD+om#%@)v0=&YS1a4PBrS3KTS2% z>6EUcA+5vZ)#bT#DK1@#OPAu-rMPt|ZrxJ1Zl7D1=hp3W>yq8NWVbHaqf7Sal0CX) zj~)Y$uEV42@aQ@`x(<)7!=vl)>N>o-4zI4mtLyOUI+o+&)pdAv9bR3BcR9{_iw3<# zgWjS+Z_%K)@ab0hbX$D7Ek4~ApDx*_OZMrKeY#|yF1b;c+^GB8sOxCdbu{Wa8g(6w zx{gL&N29KzQP<(ub@+81eqD!O*WuT7_;nqAU59_!k7X%o9Z2hxOQ-a)Tj$X!uTItL zRD(|WbgEIObR8~T$Fj}!%f2-lhbLnJT%C@p#jv_+9HqiMoPO-hN7IyXL}i?#g5-$D zr_oN|h{l7_m@+;VwqKdVXZE(4@frymWF%2#cP9Wlo&FMfw88_p~sDvh`5>vLs6z*_TI&Pf^&8BHv z9F2%*7v?}L7CjnPCK4v1k~0=6W8$`Yb3A%9qEchg#FSZM8;{s@YAmi;qOru3SeFA~ zTPTtcP6owytybmAWN0=JRw6;gFcnS46+6Zt9GwgW17TbUErJ;X7f#IR4A-w@#$ByVLe~bRvDrn^xh{m8K=T)24cL=CovQ+8(d&S6Z?+-Mn6RP?tkB zxa5t6qroF4>_br+)T{7>TE-IEbpp3Gg^Z~15+Xv3QQ(v)H0@Bk4MxpJYf`jw6H=AarzHMX2+7)HX$hWmL)o)M6}BI zbO?uQAgJIto7FF*crs#~z?Yw}A`39YXV6AD7*38Erj!6G9S;Sj@maG@C*#`KQ?fE> zeE6&x8(Zx~u2U_y)oZ0s-Anm8)CU!pk4QW@qr^hd7}dDk4WjI%*iz}zO1D;eL^*-0 zf`g`q43+eio5WVo|FwdpB_{nhP)i30B}yxdjEDgMq+0?2P)h>@6aWYa2mr|v>RbQ- z00000000000018V004Jya%3-NZ*FvRFGpc=VQp`2WG!-KXLW30axQdqW~{vld{ouh zKmMG%&YgSbE;DmyUo)8uB!q+n2!Ti@><9=hNLUS|Xg&NDwcZ30o-DMa$mRxLemE#*ifVP}}ny6Wr;Pk-7{ZYP>|KM9SOp0VPbjm~G| zt|2lSiR$*9v2y8(_rtGaWrq1_^cmh|mM<0k_Y5VPwFu)g&sn;0t-4Y=jOWk5`?+(Mp0o0s7kzgZ3D1-Yo1VNHSkujfm7YPrRY2#;ubC2ja zc_Ni5_n9D%>wTY1Qr-}fIifrFzeFUuvc@HWwW&gEH(er@>2i54EfH^|xyp@nyu6oM z*jaR8e*rWd z6cgW}DVV1Se%3)=V{o4rclUoJ&+UI(+({|Sr$TO?{e@yS#T+dc?~>&J--+0Xc^Z7bkGc%hUY$#I_PTg#{Lg+&Cs`D zU@uI;wMRGNIqZqc`F|p1Z~tXn_FV4Ak|+0L2z*Prvk9F8gDN^8_71t`?W` z|3uPGI-bk?i^TT!_Z~}99W6RW?*B?FD2nz3Pxi+WWbf$+E$5Z5cch)$|Do4{cfQ^i zTMvtMG?B}~>;E?`$0^6kkrtTcxT&=Lf9JBp{tpeb?+&!Rm6l_xzgON&bt3Nr&e4|y z)(RZ!9B;f8snQB}qTNeD=y?g(1((NQD|1`whuuAmK5iS3%V4W+rqf^xCvZFA_!w-t z&2ZfQyO!G%bT@{#z;=o2l*{#hYdzZo{<;1=*$>ztw}Zh}*aYmq)899!4~|2Qg@HYv zfc*a5$O0dNk#q6Em`@A5wJ zRhlUD(H!xw)Wlwd{N~bJ-iQ0k#aU#CFVm^sxKVjVyq4y8&)o)Wo(58=+8g_Tri;&0 zoA@D37Y^e31+<^yp3nCl?)OlmBmnO>zz4tB{}->Hzk`7B$VnRB|B2M+ z%@Y)lqjqH+TI|nzw-@n{ug(2Gus>*<-1p1p1H(VW`^ZYXJ#fFm_wz3N^RLMs#QPW9 zLHzSr;{z!mehs{?2AvLC%v<=4`Jic_4%h~Pve4ODWE*e$>S#KvgRemv!fqrJRxuHyqk6-p7tIS*MGyG@t)gD zw^v%BO4`e0d1wD$sGnlLiU=aGtIgUZO>u zcqXX6!x}-k!B+f;8t}}n0on|z#j_{)h<%L{@*P_t0uE>mboDr>1+)pobCM$Z=fbD$ z#&rXHQY-8+&2uzqE^KSAhn0;OU+VcC3(-cjW(c$;0s;G#HB1wv@$dasJ0#Q>GTuY)N`}hnBrj!*`MW0WU zRG*}ZA|97SNzyb;QoW*ipCXFSr}3g{J`|Nt%}ZrRd|WxU@W~~w%DiGb^1v0Zicb*- ziw`ejdy1rBeLkZ4WU!%t1-vc~R8^@ARw~A1Z$=R!;15ejiYoXt8JoliSo3M34;#im z&L?&*a$$(xo+U}a(olXV?Tpy&#( zkfz4ftouZDu=u`YfvB(yip<}}rJwhKJD;TZfEGoNIAkQQt%{nU7Jy1oJ;kVi9CTy^ zutN;_H5`^?;O1Dpb1r?7?nw%}2aZ&~hZqH<`?&ZyCgmfTR6I;_^+8}20s4S+E-OhB zC8*NpVT^0m@Apd;PW&G4yico?3Nj&}ifO1{#H2ci$qHK)BmxZs_ZqJpMPj9bTd<{y zD#x(MN4R03f&~fE8mPd9RO$D|G)%>3gC)s+^;k^$M9q)oI2KiIMUv+8^F4EL`F*f7 z%my1!WKT36I=N8z9riAATfzoZKBHk^+u)R&ya9|s7~Cc~(oqA3rmMbykBgTx3mf6M z_vFGS@cX$MkHI9DIp)v)h7LG}S7sbP*Vd$FYUKCA&CxiOni#$<7d;@A4P>953@8g(MrGUxz%vFHBD!`4X z9*aq=BO9KiuzMN0(fxkN9ZJRCxub)tlenrOG?img=T_l49mt2HM*}9YSw-?=8K{!` z8LkbPTT_J--NPW4o4-;t{{V*-O!}ljOsdBgjzh0tVoOv;rCEx_moE7-&KII=M>_g6EIC-IDkpd zFDf1;)ykb(!K8+VdA|_=tAGNZC;$;d7=CXejSImH_zj=W1Q;s@2+=B@-+@2?N7e7m z;`e+bmk*aSf7Z}=)nql`SC5#o90&+JUU-<)0+3N4;P-K-7EpQRE|NQ(fF=z%hJmQ{ zB?^of%b+M6iMTZUo+?$p1k^x%q6ZePtpPPbEnE{^4_KQ!QdP1X9%!K+okJM75q(Fs zE{YJ4Y(hMS-)HEutZMQYw+28>*k998;MVFbF`y)A}s{1j5k0iO{M0ZObqcwj}8y-3EjHJ~O9kTJMBf$TX#p%6RB z9T!w!;BghWk&a0ZyyQUPVuKR~gkXRH1NuR>qU%^ruV7N;ejc9)36kL%2#ngNSMm{E z0)Qba*^m^dQs-fZYeV7IRN=(*dnt&ANzck4P>)03vH7MKawSS zM=`0}VBfY4KNq*{;}yXWV%K!rsHB8`ZY^K3z=*L7ijN}^mzLqV7oQ>f44$e<1DJ#l z98i-cab0jd=o~T}lTOIPq|ZEpN$rc6#Ll_Z1p@HPeiIHq07Hg#89ey%_~ykr+2>(0 zz=fuGnDlvB5irRStttUvGJxD##yNn8b<;GJid(ewK}-e$1DNF9(0B!t{v(*wd`E%= zw`+CKBUT*Skt<)N9>FAsr_V2WUR35IIzAAj00<=aM=*)7%K=-d)=^Btqxb{b(UiuJ z4AaA;!L$D~@pqys59 z4)lrQXuLvICU-rKAs@k{@g)n#q{B-Ela6BtJokcBK@0ei6ChFINhH_SfSUXg*98xt zhKEV$DC8p0qSH2!b@+fA$$vCGkR%95bpjp$EmM_E-L}9kTz(+HyMb;j?Va)vk9ekK zaj(y#6IAYHMF9y2fM-=qq&KE70G;}|ei1orwE{ugwUs+54myLlw>itc^#Amkq` z9xnX@*c$+maRg49rI~&cxs+EWF`&WJbmY2#pltbpFjM1AFu;@hBN-%;eU8*h1$#bk zM#X?f(JlW`Oa>$q!7gA)*rH*WmTCrU+?u%2t$?ZWF4;7gCWxcG}bmk00@L(dK01341~j$V;HW%57C+rDF<@qN-Xq&Nkn^#=bH$-{CI`a z98VB=>hA=2#cLtcKX7yeDnlX2g6GfNtU{1cI0Rk7sfGN!`ZdEgVQC>#J`$_~U$Vds zundY9^>OK#riWEifwclFICXg06|_}R6V$>r!S%osBm^6-f?MYg$x!EWI(c($ecO<6Nc6XUk* zGi{#<a!lHlV%i*;rZHe1hBkNx8VC`Fw?`~$dbI)~+cXF6ZC-U- zA50XH5p!?HogkbFA2Dq|Z^9N&?knG%0N{E+;qs}}5TB0E220X{hOHk>vrXA@u$(P( zJeiP-Z92HMVW@@!OXInX%mcZH5ZOCT`}qo$>=TA+n6@6^?mz5e+kiqqH%(Uu=a|Wx z$b`w7k%%1%1fl^hURXEsO|6n@LmW0-wBx|vf?1rHG+!k<<%c9SWbz7qyS5j8DknzQ z6}?dAvEce0f5f!|+^M-buZV;WWNx{Z;%Nmo5wN~wfd|7fC|*v0%MfP?>bF(h4#?hj zL|!C=_$q3GTDT^l2gu&!r)EQqB@t+$pl}d-^#eDuaWp+ZY_V-E0)&KYGZfT(K{Ffz zyOv=&whQU;;0bdy_!$VvA|M*#W&yi3u#o5bZQ0M&<@W^@%?|o`-V)%BPYZ{`S_OhG zH&&a=EmSFXh>Hq#P%#bD`}90iB}4=UPC|a$s{G*7_W&2$-WE@RtY-BuGE+pF)SPO==jue{^kLq3>AG7%*j6NG#63 z%0&LmS%^UZ@mR=&7Q!)uR|LZ_VyzQ%Dz3r8uADDfEKAd3yciszxQuX?p#GrG2wFHo z$Ue=BWDs9PO;8Kh1oQye!_MHie8~(l4QMbD#$Jsek{U7@r43|H5SBF9N9k18?{~YXi5`QLJJnE=lov{;Z==sOuU zy-4kua55z!^64HXgUNs!NF`hwT8Jb~Ud@0Lfy_gRkm_j#recS_WPu&{le`2t5^)(1 zhxuG)STn;8QZrnpdr4HVmL@#41dI@ zha!3ifyN5(V`SR@=ppba|Fa0KAiO%+ky0Cr47B}5)<7we$Uaxh{zp@<#i z?mv~rwj&TQ)SrfkLzoE@1%n|s90_GIkwh?<3xZRmV?o6B0Ajo4$t41GMxz!|;;6y1 zQ{Br1tN@ZieIKin6_E5(g-WV%7S;;uv9Cy z3HDw*;EQ@}1;Sp9yKbOT<7V89*)ekC`~|$7t*2aG-GH5o*HmZ5}3L#iUzhr?2({sFd9u}8ru!MqC!H$J-gisOnc%}$# zRn!Eva7{oD8V^P|p#=4Okz+DqC1dkA&iJLyv`0ahRZM1C!}! zB*MQ$K%R}L2cbFq2pH#yppHxr-U!({f|+WDA`y(oH6s!az}dnfaZJL)4`4Fo@=xvy z<8dydL?po(jD(y4OnNfqA!i_M33}MXqLB(JJ;xSzBW9(>A@8^ocLvYlzNoGHtPsy6 z^{}6hMB;YBNjTXkPwsJO^J>@$`;THW9l=z5Hjc?uDB&E7$yn0FCVi1GSc@l&SR@sX zB;xRGp=2~}gfJVJ6#8&*;GqmFpw9_m1QLk{T^q;rTt1E&B5pVsiR6QE+(5v5 zqDU+nj})rn8P_ek5HOF_$Tv;yi-S1Lg2|whNI0$;NI=f;y%0|{ijknLrz5;ZOeY_A z2Eq%xcD_mma4VRMRk2_p4o)-;!tGT&|oIXAsmMWLq}6qpASyU ztcpit>6n{N1&pMdO{d*-G#E|9^NCoDe~Ew)5kf^g0%m+^?)4G0g3vsiLMRybSuT=k z+erD%c*=?cd0`%m%}gd^R@`FFON%-B(v=cVb7UftR7@k{eR50=q%GkP4-Ht0v~p3)cRS)t1Vvk@`Up>!yoa(GinAO;)AM7)Yc(QJbRZee;x^^RqHZRU3b>ffhXm0Ia)kJBSmU8AfTIhK z$r!QRSSlO~BBBV9L0ge4#Ez? zTrMeOMCo)WYV)v*6BD;t_zT+#2Lt&yuh4ff6&f&Qgq32AZ1PaXS%?*#bg-s69f1}y z#SpKdU^J76hZEIFzo!+LN+j_mOC%Bq6nP19B;v9PETM!_2CNmwTAvZ%*%jB8r=}#- z!ZiUsK=v_yYIcp<23^;n!9o^$4W_h!=7x_HO-rRxRwOnK7TdACrLYf~5nF#AuRRt^M zmFgt_wV0~S(Sr`X(WaN|$ahV$XNq4{`Kp-`xGd3D`HA(M(` zhGuk6EAdo3p81j`9=EJoUR;i9T$VUXP=C&Jvk5&K)l3U1kqK>8)Rcu5E|Y0e9%*EN!DHdy-tXE2D z&JPdAg+eti*=ml=Od?uwi%IX3N6lCzM8pS9LZPfz(_SrPGNDQ>xTw)Wlz;KXtDZwb z8A<2}*H+5pBiX7*b+kHKm*dHO#HrL&G!@842kX!*rpkmfVKbEtm6FxbqbW_+pD%{7 zNj;lNWHN1Mc*Fb?!-#P)DB83+3iM*-+87Gvpf zs2X`6(oCM6=A+?IJZcZk@|p=nhZmv)UuVF@4sTE$O$%z=tTMwR#YjVab*flXQ!_lu zYc!g!L57*H&l{drQrT20|0PQ*W!uAfiERH-KD6w|e(QmT}V zWeZiq3i&*;RGw!i+_-CFc0H<>c+ho%Rt#$8`F||0yJ_U=u2T~T=4--vq*TzE?F5Go z9U83iN}cB&xi2hLO1=c^E#y=2in~s`gJ+$>tvnEHz%=RHlDQ#vB5elkE!@9 zmo6oarZiQ0^$@pIRnn`n>3qJX6f9QN;%TBYG5vg?KC; zjD?WI#M3&2mCn~BbFpC1X&h058LG0`WIo@Vtf|RY)z)|u<%@-y{K%0t_1WB*ECdYq zmklM8k$5@@_92cMpmWHOL^cvGxh}F(u&Gy7BQ;INond)i^KQJUChjG`5d@fEQ?nXE zDD%D)&NoMg#F|HxGSI@%rZ}(hSaxW2K2;b|ZF>01AXpW?WXWWL!KM)?o`(%KH4O(# zDDfI6Ud#rPN!xygQ`l@ak1b`(*&4QvUBouA>si0>YvCE;Rq;}Bt9Z4zUA#fOTfATV zzW9Xr6Y)98kY-DZq|>D9GM8um2J~cdRk@m6W3D+jHrJLLpPQ81l)E=~U+#gtoDbzA z`Ko+Pet3RK{>J?MRYH|gWmN^M+^R%XwrXfqUDdRzrBy2nLcuQNi&PYfM$s;Yi!lVN z>f*5C$YNXZ?BeF)mg1GgtBc!GlO6?psuc-#UWzXcv| z6z>6#KLC$Em6&8oCrV4CZJEuP4-u3QhCLpea;-;ryyySoabbSj5gr}z7_Z6<@Yq$g z!s9XbZ+M(@gvV{gyNW+J!sD~x@ekl}>=7PU)|~kn>+kPB$e!*0IZ^*lK)XOYLHDs@ z|94ru{~lal+drglS^szYPWt?g-UoVj_Wq#ng5K}<-rsj}?|q*?+WWoU4ZY{}uJ2vf z+wuCzul@Pp(+7Wj@K*m&h@6!juWy05l zuM1n~Gy0r*sZY3E_=a$ma5c-YEX%RK3)_Tq1e2&drgcoq$mXUIjSa)=ht<^%9a5?( zRu`)BxoigMLn0oF;v|m)x^0=>&v)>jj+R7$(Xh#dDP6hlnyzlCrZ8<xXr-iOUPix~VXs+p6;(p^4ry-O9vn)mtXFnzKV!Y*3FdfS8&MnVjC!K|Ep*V(rtQl>FF6p7fC=M+*WGn>-LQA0Mti3pXhe`YL5J~kZw;tV{A8z{C^Cutc=4j zCg&cK}~8-FDX*407#mt_Y+%G_g}m3iB&hLQ=%ljFSs9PF&DA#?xC5jU6_l zhqO7J4>9(w`8}-v@*bL${xNAJp0)(T?;rfnEHYV)`{Zdhg~xNo}b&A z+d6&4*4&ib889rV=(QMFxpjU6c6f5|osSvL z9GKxuZw5@zi-+2W%>cS;=5(Ie*}ZvEvb#KKJ~j_K-3{({1Ay~6BjqDIMSIEW*ub7U zu;+3uE+$lFIk~gDob0CgTenv3U^wrnqZkbG9QO3=>Mop0dIaw9RNsLbcac@7lp1%kNsjo7|&2#%Gu9n2F2m zu2WZKd)S-1-k*iL^sf0U(4@-l*@^6u^UB%hmp#As`5of^W&79e-y!}~NU}fD1(+|v z{DIK_YvEb?j=+{)K#xe<){K z!wlmv-#DHy%MQ#eed5V(|z`RjrW!Bn{!{+eF_a+ti?DV z_2tmfg&Rquud&hHU)%jPfwtIN8n=kF<*qGzwup8|oaM1v9_jgJd@{1wyOaerfZ9Q` zL8pP%fHr}A>~J}8$J5ysdXnvaa?g_oo_zmFiJokHQs7s@PuQF6_cRJqocY+Y=IrW~ zE3z#;Eco!kn|SLyhIY)|+Y`{tfwH?D(`>(|DSOYtw(RPKP1!N)7Cwy;y{w^axoKe{ zJEljdDhF5AWLK^zWm`64#xZMmOyN^S%0r>~G0XUeMmy{s!h~%*?%L74WA~0dJLIk% zYj%@y#&;vSqrVRg{f!rWoaSnUbuVVo`nY%zQ0hu z@SHYuooSzWpu=D>g5q;oH5> zcJH&HTvoUJLfv+Yy6t9l+t<}?o7HX0)orJ#+vcg&zA9hNm+_^1317??@r8XspY1b! z{AVlq&kIXF!ACw~GrD&#ry0v~-5;M^z}8M&&@C4xuKKVGie_+T)w*z_7d3AMkzPAP1;9Yw+j9;_!Hq_NEId93p z4$t3kbHX9w9pUjPCMP$lQ>T zs=OmM&{0*G1gUMUCi|8MYn7ah;KZ5%qG?DJ1akLWW!+IJggvAt9 z<7yP0Nb~4EdYoQlhY?VkXerK-H)D>w(f2IQe4nrj(I2Kp8cXA8Ds|HNnDYvHp0%-m zikoRPwb1c&DxFSe(AD%ROAA@ySCpqZ%-%|EcxM82(MrsE8Ev8K={xioJ;xMwKD&Tz z6UsQNUL@QjDq>h#BX90M7kNVoJT_uh{_cEQjJMCBb$EL_-AO;72kA97l5Joc*%j<& z_O=if-W1*!mxv!o)zVODI`(Q{jvTlff*mws5A8IWX3z;V8@!&1x)3`(lg`3vc|Ed- zjdUShirKHAYw0@d?|Ql)btmcrklc?@pTb%B6`Xuc#eTwevnScx>^=5@5Etr&Mq!b#N?0%4DBLSNDD((V2p@HXZd8Hjgc2E7)0({a4u6+2!m; zb}QS#9%e7F-}9ZbkJ-lnn!taJA6z7m!5t^e6qbUM)zH+}g{`Rf3x5z^75*t!izTs1 z93xH=*NU6H@AvK&yT!-EKf$BKz+QsPimEJB)+-k) zcPVeFL)6i}0$ol!z{|gu@4&BzrO$zG5^kfjg_-maGB>J`=mUhRy||&j9kL z1FcWMg7VN&Ep}e&{TqqmND^cX_VLB?c;%ZXp_{OABK27!|5(tq@U`$f`hKFolSF12 z^k*V#Bj{-&J3{36L7xzXzD^Xri6}CLDEbCb{A{Ac9Ym?AMClEn&xtbsO_V(Y^cYd@ z1fu*pqQZQl;*YUGygvkTtv#1$7}g*DBcjFxQPWR|n(^MKAW_Tjh+4BmZPSUyqrZJ0 zQOAQs6Xz05o|=>dbecxgwS{OIcv}7d(Mqhh3VU7MLUiU8MCaiBbLSDQJxsLzuSDlz?0oQX!JmjW zf{zP(iN1=agd)-UO1Yz&rT}Jf1Ux7X(x)1Z*cRc6<5cYQ;=KR6mh<0LsJ7prrB=+QGl z;Oo(!f!-o|ECs?o9s`zsd^hN~pnm|0BR~s5-vm7jLL7VovUmb~{Nx_;y`SF?f-ZK0@7=)fZeVRUnpY~diH z@xlKB!G2x~gD`#wyuN|8-UMdfME39|_fAjtgv%R#>Yy+ZT>Wc~rx`2hR=0QU5^dx<^*&wn2Z0*3#7 z8R$PiFB5$Xd4CLEKgNFl2_1ckH9m#>K85@~eG$}0^ck@78L;x%HK3n^fVt1%Q~EG} zAMBtHIOzjE`+?7X;G!S+?C0@+73f)Hy9VfMpts;1*Ao*p&}`6$#H1l0cunbk&`ZSR z6lely6X?4joW10~fIcCnE&-hjx)k&+V%jC3Ye2UX)4vM33iKUfW;19aF*^h*5DT6H zT0t!ITVn2$pcjZm*MjZ>Vg8s5Y5*++T@LycvBYR%$x{g=@ zYgBg-EB=sJ&HKbkn0F|yYcC>Jx0_h~a$>{5Q^U!`8c!fL0z5WhZ_S?*8-<)=^w&YZ z1pSRzOBRH_mh(ZFqZMnnLN4QO0ev5Y)519Hcicf@<0la-e@tv*Cuj??$?p=I`Ww(I z#HRlY^c+quWn!~df-v8SDzTFw*Hb5`T?$0ewpBE0F0% z$mSx*?xHEgF4;=#(ie$s#(H0WgxKW|6T4yov2X4qcGdHs{lu<;-mZacuEBfPMnE;h zw*8&hbzVcqZPpd_*T-XQh^@b*9e)I#iskX1MG(1)%kwhJ=f^+#e4gNKKkK)~3;z}CZf z=HcHHg9)-nYC*ujBf#4uz{8KQ{-aeOVCgYnqURi9KgRlxpGNG7*NOcUxcM2bf1W1x zvWod3O-*j}7OUxM6U z26kV$mDoP4xo-^!xY!3hz6x2rdIbpf@u!&}$aOz(xgU0P0J4YwVXwoM4q=T$e<1co z0t6htiRa#g?Eeg1yyX)63vlum;OOmY5cKlSMiBJ*?kLbrpnniM4A~sU-VZ~Ehhd9< z#k_yL5(IwVYXf25?*XIl1M~0i00G+{%mH;1`w%$$5OaPAdH!uO2;(0KAn@`LYzKac z{ryH_ALCs4G4S?rFR_1|1%kZ(37!A*cf>xy8lU`v*r&kfr#BP(40iL`qr^U+L97?= z^|pgxf4$IuFJyyLmmqwT1a%P!I!-qFnpcSCqpm#~A-Uhl0^ehQQ88ia4kc854Ak1Cb4#Ik+4@nqO0G$ZJ9)~;tdVvJE za$#sK2TJ=m$Wuq?6fw-?2ispd+%S{M>K|%LRCquDbdm5`65Uq*il-m|xJbH9XOVjZG=zC=O`@Vy<$BnD0 znKlJGzg#Q`KatPE87Dzw%DDiJmA_UJfv97Uc9R&r$#GI7+G0+8UfeIrV#8u=^RRum zwH5nqrG~?8b{lpm9^IRm7mwMg_`81dTZL4xN6LcI!N~J^Lu*eee zi0cX_{}VE*Z7+3{Fb2hNc&RIdF~EN`%AdT;CreDTyua`38kt4uTjPP)T~?6)ib+(k zov^DaqF^hk*ywC?ggp+k9p*S;K@?q=V##uJPP8j3Mx*(hr=7O8w&sRtb8Ex;b&I3T z)PQ?V7;59Cx2^5XLv4dkdiN+-$iwR{v7fqPc#Jo!DaIdGZEpx2PYvEwJ|W9|s9EIH z>=wkln->cqPK8m;p`i=|OW5qrd7bRn^Ex~CzB!kT>w9?a{CRz&Pnmz}i+`Tm_Y~Vc zmpwCA{1LmWuZvS>-4MrG zmMKTVMlctXE?5#yo@!ZP;ks++Zt2>Ud?>hh?iBIbCG&g>Pn~%+-jwd$+Qag@QZFQX z*h}TfGhQgqoHMg)=GvK?XUf)0Hgo2^3+)%I#S30oxbWVsPxySxN~L?BushavZ0^|I zA(cB0biCgocKoGrS$WxCvM?rIwMU znnINtRWV7pH2OG(H%felFrH~{Y8OkmufZ~6)Qv>PGw%-fmJnsLbtWjsUDLAhoS;&a zOR+>Q91!b7cESlY{-jo&2<5bJb26z4lA!pP42?GijZ3=RpkGuP11GRT$BEL48X+A~2DOQ`=>OvE9c{52Ry-qR0f5 zjho!xygPBmdB?B3Bd?ggS*$%LNdhy&?V)VW4VQAhY9|q|iW`yXQT5!kKVGxwSBgA7 zS(r4sX6%_evWnKAU1f}`30hNK({6BNq3Q0LIo}uM_^J`n{3+vw2ZIehv07o(W7BoR zH2<~V7?T+;OLa#3f~pIKh8j91G=8<09Mzt5_hr+}!tjWx^eqiG)~MODXVqmU#B0JK zC@?-Tj06i7UI$ zmOd_}Thde0FQxyHmeW%{u4xZW;z4DLS764AjdN}{b)oT2`m<>ILw-xT1K<~Wq6Gi3#nJc+0UQ$Hz<8G ze*LB@*S&D(vK6Ax8&e9SB+_MY7LSl^w3*n7tl58rn7k|~{w79MxW4fQk2=l$uywTjNq7PVcny?$2v`agA}pG0cue@*_8^dwE^-=DHc<&8LZ1;`|eY^u?x z(D8^&r<$GW0(GIj*pw~i_!o#7cIq55oMP*|MQWm@X4r~P^30!S`T3dX{6r>`NX!{F zY|hjb^H!`}@$m|2#RKEDIUj$lFlERCOmt>X@H@w&tChrNfmS3KP6RD6=t${iK8b1k>`F2-XRZEmoEhjoiN2rAF8 z8QnwXbnZH}rlyCj`cVrDx3sVUD9q>1)hreZj&b~{r`CXX92gPMo_gvEukk%Ke?%j# zW9!&}XYw2v|B-CQT@BA?+HutacV-G|hH)^!eZfBgE)_=v-&UyNZ{xAisNQ=XbfOW~ zz>pJ}%nfIR=BCl?XG=z1f5j!=Ty$n(RwA%-?uo^ENjR^tdA%S_S^mtlO{>OrH0Dg% zh=gV?9J6#}W@^1Tr!@JV)tBv@HEh~(?n%wBjwyFeI&S8WR(8Bk+&^^9C70z--7XUsSv-w)3_j) zyU?Xu`mhOwg{L+RU43e))gL$Ac@x%eid0QGsb%#9Ih{=CL&i6M{jv9Utl9JSS6iF3 zxY^h|`wB)EJ#o^Nta|(M^QIB&f3eSCkIGr3b+gK?WMyp1Sn=r4=#|lbMkQaAMZcoi z84|VE$=Ymfv$`#bEZfRijn*8i3%9$iJ(gwx&e%Ig>EQmw(MQ06pjlID0SiGME(IPg z)tX^hcT)Y5s)iAxzdFGNNedCjP&iNx6 zXJ6R&{zX4ow4v|STQAr+vL+6Bj$`kNMcJgOOevqAhE6z9K2Qpj^hU8oY|)xZlS-2c zd7|5=7Q$1f7Bs!F@%APy+|;B|4>6ws!_d!2IUfcIcs_ISO$-<;s(bTi0j70u3SN1GFl1QQMolF zYr%B2vdC-+r=Dr6$}lBtCI3<%K4%0pd>yTnp5lLunP&f(1lIV7#CEFw9@bc{*OY4{ z-#7VpWO`0-)VuTp`un<))7R*C>JRGO`fhy>I(&`#HeJv?*(38mL=9fU^LeM)K_2fE zocwj{-A?vipVQeF7QR=xh_b(6`BVCCV_WDNiqlCyVx-+$4)w5aJ-VBeuS6Kmk|&g% zZIK=P*tj;bIkGKsARkh!ug%YeXA4OoXNU`k?dzU z=1waQmt;W=iR3dEIr1WL5$$vq`9l;|=lcFUC)^cY8{QngE8HDc?C_kh5N=oxpW|>h z_K^ol4#*(iTywM~+R~I|Ue;US&cA_;Jjp!a8_SxfRte*43e}DN+F<;W27x`!WKqy& z%lv<~qNg2fXk-8DY#RL>YAZe>-mCeQ9+oJZgjk&;@jZU<3m5~30ff2{jV;F>6fZFHWIMW!IHSy zN_I_XJbTRYhqlc5`eifEdZum2P0UGcnmct|N+#~WI-3nTP?tnmn#y~l+KOhAHqepos=yivBTNir{3W`I9!X14v z&!ZoA_Qx@RIMh-a*)ot@Rsui;*dp}HGX&4`xWe!IMl-WGw%QNW2!il>#1~Y}QNH7r zF7Su-L_ifZB|B-DdL&V!lw-32}sOS!Hhq|?5NDKKxx~OZ~ z6}6>sZEY!$DCrJlAwN1?8(u4_!+*kLQrYjJ>)-DZ3^;nZJR>h_wR%Z1H8rlbs8iL` z)HUiR^)~(&lhfmA z-9r>l>Hsq@mv4?XAuu#?ACG6m)i-_q^3qvGG?+U1t^?oNwz~a->S&ECDL$XI@S*c> z`R&!8pFHKvTP{iF#`&*`HV%!+ep&D-I8Z9EaH+O%`rQW^TX*KRarNnWjgsmF>VLKN z*IUmy_}0v68x@=(hn>!tU-qSE)k71r`wxjLVQeGl>*Y|XraHkIi5hj|4;!mlb#*{sXnW_R1q*pmI5a&&i8 z*pKXlf6uUZ{kq=8$fA)h^Mu(uEA<{~=lM04EAMl>oFr7@!l|6uTbeS6NyPozzzH2@ z=Lu7-NY=aFnQ#B$hO;}CF26W-!gZ(gz46NTX4e%G`Gz$oUA+6U<;Ty7H4V9_t#0kY zo5c5nw_MUVZNc;#7O~m)bv@a4xG`SiR#ne^;m$4JpE9H_Gyl}_4YSXI|7q!eOS}&v z8BfR4Q{`1tCQO-f#TW{Y8AB6j+L-n~7=IXXQ6!RXylC1V>g&@arvpLLmVC?~OGxU? zkf|I`Nn$zQku6OS+m$hqF*Revh7nE8Bgafpi=#zR?PxE4E3ba5{hs_i2Yk%u>$aKQ z!+ubs5}Rf&JU!M#BxmO#9`R@_5qydbue z91h;m&2p1)=Wr$hYJxj;(ilM)FEjXhj$A^b{KS&rgtd)U4^Qtj5jhY~&X8dB> zvaTVFopk+u*sa!vORxLrI#=CPJpmp;)~K4bS2yrb;UN|(;h>E+dp`Ei;noU{qfG;j zz_i<*da8{}9_P40p>oTvfZO}V3VDR6dZ~p6?t$;Bnw!Q86@P)0uu!TT|63|>=MS}1 z`~|KsE_}Rpa&v1|xk!_k7_C2L@`%uBwPUAeBX#9Vcc!mvTVQGRc`Gr%%uRg*P4BMGN z0tta80TTi=B1?>Z*6Nec2+Ruf5a{`t4ez4M1b3qzB7o-=z7Xc5*(W^1Zw3iQjH>~8xW?*eKq zbt^?u|0KNL?O3S{d#26OdmXcE|Qm0aHranlqOHyO0-Kj&VV=4Ms#SvVD?d1Sn9b^VPQhlx{b?A;&ZHJ^W;*rvN1JCALBNW%s0WawAax1DUXE2&7~e#Q>%r?{*;0en zBT02jeZS}fH8*bxXaiP2QMkgaUaKKFo642!v(iPjW1wNuwjqY`Yr1{R?@2W z!yDi?4wX}p@6dG0;s1^(%HQEk%T0$&Crq!JXu=dT$;tzCS2is{!0esWceD-=a~yI& z$>DLt9I}Jr2?t0!9IY)FmSEE~F@8~rOkzK)SFVtQz@nT*7ks}El+s0`Q{emyu-OP< zb3WvbBTm_IkOf!6;f1ICJ3p*V z1{NN$*K~jM#MAHAq{@IaSX?7t)3|)MH(*_$j%)ini^}5B-WxXGeHh-Da7Xrc?0oyF z>srUk-4$J?@U4Rne)yx?`u0@#4pdamUERMqzJK|wImPA_r=zb87KOL0x~5^}U7L5| z(@-u%gkcGC2Q|d)^2)qa|4fP*L^;)j z8mQIo%5d0?%m`(nLR2l)O|7KvqE1k+QhZdoA*pxVcgHH_%2k#3R8og3k5$5FD?z1V zGI07thg~wV8U^-%t;dxM`S8$qRsqsRsDTkMgTNI$h!>D$@@rPWeG1*kuRMIG+Y?!G z;GW-hb1K0USg<2~&DzeJ8~SVKbXH|N8V;Ysz?|}3|HirdTUJpo_xAuvK(@bbyz|j% z;^k{s@M^69$Vh$Xbs+J|!*49;S@+gMBQiq@T8S5g^G`kV=O98iTc`gBW|MY8MOcZH z%nOf_tn{c^p@7d3Lk5KjN@_r;CACLQevTIDG+0j9q%X#^6BluE^&)13hM900mJP!< z=;79MX<2j7R#`TSZi@|bIi}Z0``(##6f+;y3>RY z9F+a9IvzC$%%cSRgbJu$uxPg*ay{xg5-jtV*aMk`16vdBFp|Z) zi9^&+sC5KGTq73&nqig_z=-GxMIu&AQ$~CWBuD~=AYTFp2^xKCm4~1i$Pf^a6k@7P zGEac>03HJXAp81NeLZH&NXUq&-FD?74l$=vI4z3EbKwS2JWvfxJfME^<$F~0t2XlG zL*UIm@cQE1=G+8Y>$|~P>ZjzL$fmJGiEJg05!5k)l~~9^=5Of9^DI2Z0v5ep{grwG zVHqW8ilZ;+ayJ$G@+`iPcP_{s$o#MGxIr#r2mqGS4EkaWMBi;G2@&&$45I!NNz8ml zwTDE&f*}Zm_9&SDlH_?39wPyX-t{x(JO2NEO9L>0Y98E8MZbKHeEF+3YF#eXm#bd_ zCehnKA~XF5_+8qKs7xbq&1s?xxii77j;f(rZNo8u-=3_ooi$-E7w~|ZN9#rXL!H4j zK^P3m!0AlKqdZUC0YK`WSRBOTa(XA$Y^!2WtD;ppeL>X~6}WOi`dj`H`dGeT2#HY? zCcYVMXJ;rj4j*7EiUC7DvOr!HHgw28!U#B1TC{kM+M`unZQmPq_9dl2*cxb+zq6=i zc6~>+ZGF5{Ai1p$e>hN|s`NF0S)xHS*zRo9uxdTY>20gpcTDM3L3hC5Y+T&(@?iU} zw1L;KPAj(~_f^c{lPk(=8qg9g&9$>-^g-m#29ZNs3#)^bi!XM8t|{n|&8d{(-y#qnlEYvuygPg-Or8yc@D%u& ztogzK4BI{4m=`Yg0&jE%k16)_A_mA(WYZTfXB9Vx$fZt6x!?yFcW5y1 zP-3;1`H1oZp76f_z2RF#J?R6(NH>xb2noC z9_T5glit0x*%5JfzkAnrbN}(;r@1Ykz5~X71z7OpmRSpP!Q6X)%dPptKfx@Lvx-1mU@ z{=erE|NJDk|21F-+T7oA-~T;$@SlJKZv*hX+^N&2a`!&kDW^sr+kWHPyTID9d2MYQ z4Rg2r^iZa;Z~lv!Ki2^92Np4dXHovn+?^}fq1g! z>JJ8-X(eZ4F<>?}Q$mmrqat^J95x1?X`lceg{Jw~kXHe(g&0}>=ukn^L)8g@xmgg~ zfqYsBN4qSnZjQ!hOEkGTn`P8IXmS<#BE|aBqjTjF9o?j^&{L#GUA1S$wJIBL7I|7F ztSvP$cD*B8>V7}%EmczsYI&1yzetu_``1;PObM^n8U(+;=0I&JY9~tTbxSWIiY%z|U#D zNk3mt>et6Aj#S`SQAOUAk7wi2yp_&I6ac9N0%z)ca4NN+O$svBka#F&72X1f;qg@# zT|rhS8lhsBsqd(OhGoR?k0-mU7VaNS-t>pf(f*>Y#UmaSl3frsNY<^dKlI?~$>G+6 zuWg%mbkpn9TXW`04iav?LFe9Z@l0smBE0n)KV&d-r%Isq}<*j>oDa}} zDRBD5xg*4+ev&y2{y+>$UtGALu#{}J&@-66h_yw!m`2_cSP*~Pf9(eo9f#)(9evAkNXEOLo?yDnf;taze zeFzvOnzJW=|Ip(0J)kYAvzd6Ui3S`)anBeRxm7F$SdM0D?CH&S&KlZ( z)3>ru^;sCsW>V|7wEtI5HI78Ra{B+FCFjT_ySmG1t%VDH|8-j|TG3!(jM$hdVG2Y%#2`zN^J?Zdk=2Vv&hXmjPr z!NF~dvZJfFEzOROZmBwOV9&N&Zn-yH<*C{h&4$DGwr97XT`^7K@{_1yt&kDAe6dzZ zHK(Gx6r8EJG6H+Fix<)tlpB251ZJ4n@1eh{jLmqk>JZ+ld@8vBGI5B-632Iv=*MhP zk~s{EbxKhyv~P65Zkfz=U}kR>I~UJ8KLm2{O#~EjT@m2b0t>4ICX?|30Ls^zutwHL zhv*rY8y8qz=~9aZAR9&ll|Bk5hX&&ocr{K+^?>)7@r@~iiif%B%?C=+jBd<1VyXV2ITBmkrQd4oKY3v^QrQh zS?rol29ky)>97O=qp@yPUAPUA6F~7Q{ZRp*LRSj>G_jlJwUo1NWfjR3Pi+}rC7A(P zJa}6vx7^*{Rcs~!1vo*#r4G}dQS)dGv6VO`yE(S|_f46(zwckTd*S(omljeB7g{|* z5Dbo2WyFjFiOlm>2s2wTq8eYD*@T}M=Q_9b;OfrMz&1}`tWWM+(nt06tt{Q<^?E$p z+4Yn4*_9)j!^B~k1!IV;orY#&n{+wv{S^0C6}`AC&sZ=`&qJdN7nLLnE@wiA0bF%# zNh(@PCKI@*QrS=>3038w3d;f7?gFsM|M+l74()OgveBf`4U$y~kV4*531u5_lsbPL z798b3qlGjUV%!Xy$47O*ygH=jHDu9sW>T%uRyZ|Hw*fbZIU;%ua)msU)I7~W%At1E zA8gs8?v1$-=wym&U)fyl($Yq?3ZHrrZ9gwcUX|AVt7cohN^q$u06Ej9N+%}_+&O2s zu19MVbvjMiW>VNw;<8ETH8~_oDj-N~$w^U%Jcc{c>QPx(py9pRs>a-<51qLUrGwqVWym`$o!`Y2yEcHYw9X78k2*BNc~}$$o;Mws{cYodPe*Hd19!wW_wN zzNMm7>)jo(js+b%I*xYG9jC!4(Ighs|##&I2iA6uVRqy2^Fvq{uj1-aK?-*}7dD`u@k%kB_$5=%Ys? z4Y^U$k%XSk z%`=I*7rsKBt4z%0{gX)oVAvZ(F=pn}z2iveIifLMl# z(af#4;In0J*fH9-3qp5GyvP9XDNr4s$E?PeW2=I8t9si6b(C7G)0OmCqlqcB+m&V6eA0ce}9z1$!!jh&ph&= zQ^$~MNNNq}vkFE@OF>=}5mbJ0b7%IMM=RItYc0|+daXf?khqaCs2NtJXK9Dtcc_UO zdPGC=YLW&(Z*A9o-)A{cZsHg%K3^by5}=O=kc37E0v@HNi3TDo^DtAHspZTWD;7Ds zJLAM6S7wKv^jLa#nsiQ9O_q*WkvvI^hlw$y#2jLdG2{|vjMJXM2bjk0fA~;oaJZYRsF=>Ip#LSogEEm{>vmsx^Y`M1#P-r)hm!sIg zcSQ~i0)Ev~&=_58QZoXiDJVMJ74}*!ITEqSxBk`O;h|9d$=Z$AcJwYPP3W!Zc8%Jg z<`^5pNE)QL0BnCBX6bZ{bo8a2<6c-kG9o_FQnFol+74zW~5UYy_A>B#si zGNpJyG=Avm>+9Rycc|}JA03$jzm|)eN8FQAPfxE$ib)WkT`DHsAsv%ml^6n(#J=9b z!sx1^5?Y)5(p-#QiAQk-BlbaVg_tReluU%kWDQ!LC{}~&832pXPTu61SiCmI0^BjM zCR{|DuP``Z&{ot5G;Os9do1oEe;%?e@dr3X#P&3@xb& z2Ay{u+?Ed7bKh21^Av4NRLI9B9=K-1e}QeU*$sk(z=xJoAzgr^MNLT>-oD1BuPX65 zN;p0!a=E{p+_K{2O~3ASnS5cyIA%@%jWN=Y=phaQhum?lWp3(PM+RBbeg=rBP; z3kbF#JEfd>lrJ*Y8glz{S8~(W*;o?`k>wV6pwVEfC{F*Ix)*UQto}lOGiYw^vIjE7 zidi&dEa>)>9VRnfFz=O%y135Hrfu40T!@d$@ag8}zQB>#2yw(T$w!sIj#7ISRlI9K zMii5PT0VT@(?YiX8Iq@0|*37fFnb(!RFrscleL`Ilo_S zU($Z4{Zcz6w=ZrVZ-2J^T>JTUrhN*WmbIKtM@;VAp(gvdvmE52SxeQ0R8+c>9k<~C zATlCW2@6s7vMx1aaO$NQYoqXNB?Ohepp>KHT5kG(C7l5J`z-ziZp|PnDwJ?Cm>B;$ zm~7BDfNzrUd^-lRIKZGUV7`3yj`F*_H9^XUAe#YEt%5OOuR^oX*SIaA^qpxDi~(3o zLy*8-XgY;k7&x}xHiu?;DP_^5 z1cOGh)!xt>hoq-G6H_BR!vUZvuDOl{6?M1L@3xd8WJMOI(nUPUa=N${e!IG@+@s+w z;i<`_^I^g zIgn_*RdhD~|Hy%0-!__?N1coYBzQLZz+lo9Zxg=hLAh zR(9BWQx!%wF*)6zUV_ly+4T7|BcTTnKl5z*UGxl{{(S4a!L6f5hHtu-m|Qpc>Q=B7 zM}|^L@qmO2CNEsnrKAgrwXWUI^jAgSY1pV&YXA)yjili;4CQ7?R^;rC-0OFS z-~PqX;*C_vuPTkplP-4WOYwCrE`#@{xhHckghL#!XUHH8IT}Ehibb-iX}hKIyZeFj z$6me0p;7v+KcoMXRuN7jL3~U0zZicb4v8AT7ICHUXelV&`~l+sstlF5-&Xi&-4b%@_A%#}#0dH58)bS36?aLMs>v;*BI00EBgMblpXcR&IIp z&Q%Yref!aYR8g?1K049!hrPF)z3uKE_~PITlYOxg_v9O6BhQR2iO1*P_z=8t)x$6C ziWS$cSkpOg!8*7 zR5z_9Mv1pi6RPR+vcY0Yz3=|W4{f%hj9%Z$bY(iRKDDMYGIkxU+(-s0u7mk!2yh_~ z%J3L3FtAuMm{VH3dN@dKu{1QqapCd$;+@4$7SqM+=W1`kHJ<%ip#2eeoERX&&_Pr{ z$8+(K`BTs?o3lr{4if{h0eRrW0Cjc%cn10h;6R>lVZtRTL2^A#O5jz!j8^z6AXS32 zm~9Z*NTHN14>V^gqm*tQ<>`EX9*)Q0u&EMhH5jkbY>Orzg~fTqP+o8Fg$y=;L>_aN z>1l6osn*=_R7>W;msbAvr9^wVfudNA)|=?Ny|bs$cW22?3qah1QPZ4tOAXC2l-i&w z8?HRDR)~R{Jgk5?3uO*`o2IUi6hP!W^W)J6FPL0v4NEer-b4MpcbD0a2#*^bwf`qx zn@b8c#+Z$@BeE=Ld75WQXt(jarj&P?0^7iz=U>uw8j4NGDJazg&Gc8apC}_*iT7k} zwEaW=ed$+C)E(_WG8k~L`wFkm==J*S8H3j+Q9+L;nz<+VSn$Ij8RVa=19h8^!Vhp( zz$bYPRM2j3XXk6arGc9D+9245Bcw84ZL5aW>v=5;YV@qkjT}ccG3U5v%SCi+1#gxr@+2sY~! zw5pE!V9sOvpZwXL+~>~@Gc;fMK!jA;jXV&|8Xi$@&^EESsnPZ-a2|dZEc^1P&|1?0 z;7{(oVg8AElTUAa{aEhIXcFyGc=}7a7@@`iVm0x9WQPw?#CWwa9PLdscvn0VUmL$R zekOh{&c>&}UfHY-gK%bK-N?ryI0eywz}V*_3k<_U zxc?EL37e46EYCe<@ER-@LC`7ufusZ;-UoE*x-E^ZJ+perg!AP&y~y0onLbC}h;*}w z_~1E%PKWXP&YEgtO-;3>8f2iLNFAvPl`a?+(_=N02Q0< ze2uQ!K*cpw8Ms^q!rOd4H_w4D(cf%4LOf2KBFIg+H!N;8Zr1?K%i6lWx>xGX)KPVH z?)b}ux!=6RyxV-tOvlW?JOv&YqzCFe_(*|!TWF>);H=cpbO0(9CF-Gbd3SMm=AsrkANuJ?7 z_imiHtE%dk$8K%k^uzo2?dVnjbEX*gbktx2-42v1?KDU)j^dG1~xGxNY&`xyvovO12Sh$vx)Y?LOu{;Xdm= z@8&%2n0pD@1ow)DBk_^;BlEKH5n`@1SDs6H=Emk8n|op|wPY@sJ9owMnHq{hh7#S& z>mk~s830Nki;6G*_y3EZN%aIC#*z=x7lNH06&u3YM|@|0wx z)*W%_B5oZCC=!s65h%HcGD;;w?k7c_)rJ;^Y-XyY_{!aZ)wgu}TpA04nJ(mVSq3r| zHO06k-c+{dDX_U8h^*eZzX~$6svh^Q2d4j%UW3R=hPYqWdnL0i)goD}DX-OrNNc7X zZ*Q4DQ-ZfQPzISyZzcni#t!3r<4WUJ<0<2tXxVn|Zv>4z@|wX(YXznoM(eiz}mj!PYItYdcv?8s-6C8fgdf^?x!B!01Adh;a# zk(rtdWx2J8%;I?gic%qUswNBUU?%ZgNL%17)sTup;=&m+S*Wkg?^PX0R>4l1v`cKU zP~p&10tvkR-|2bkg+3DTSA#yZfkuBD^SR5$kW$Q|j;`|UoGltfcq zvz}x`$=>o1P3d?>#gckaKatbrF5NO*yX@%`^z0%j%K`VD3ANL#(IO&B1HTlR`iG;lEE3T0EKhSdc>VeGNAwLeOY{&=$ZN#Vfi!GsZ{KBg z8Ld`VQ(fIn0hcila0TkxtuDGLQk#inVz8@Am*HT`a1-Cs)b9evT)^cbxPUbf3d|3D z5uob=6^{`Kb0U_I6VzDZjs#5nVw)9M+xyjr)yLGNdJ5ckGKR!LX)MCUZsS)9#ctX0 zlv3-4x8|b41ON9_B&=d&Qc2$y?4FXm&*z2=iVo##*!0TWh$uijFo5%c#(X6zzyq<+ zX2DQ_?CIFKbBne5rl-8Ji$OAP<(#{X>f)o-b7pgFOQO0B@=F~qRdY8_g4SzljDWEk z2TRPke_fv_QuCsE`|R8=ii?-~5dXid!_`cHWF!HIT2UYB%{{#JrJtB|kM5lOA>##n zyVfmG951jO$#R^UgMy>%%C_9c-3-&E&(!qI@}Y@G9`-!rHko$4@Qm?=7oK@~)v9Z{+{Ugh_uUUae9gqQ#)*k*9|?ta zwN4mYTPHf!`yQWgGf$t+s4_GRXR6bgS;N)vj?A9S0k|wPGP0mQGd#QiJ~R9@|M2i5 zJU*UsKk{&L0!&PlUwgOv7I4dViQ5m|4r8~=x9>)Gj@^Fgc4o=#W9ZIVbeFyzBU4{% zXs)Lr*3jB8)G*etyWvp7iH27j&Nf_X5DD}UN=oc}QVvGT)8(7Wr^~53%0YSgGf%tS zptK9D>e3Fl2Nn-(8hB;k%m6chVAcy~7oT4Y7vmRKnO=~Ee&LWn3ZH-|mX~kTMy68M zRG}kBkAE>ffe%mwDL=IYi_!(GyZeaSW>)t{rXLhKmGKo zj*fPp+ZS+m1$>V`^7vDagxWhgy4FujwBqq4-0Pax_i+-suE#gr>oZSgDq|!v7Vbi= zi4xJu7g8E#x}~uD#`D^6_9j@3orEP>mBdaX883v*6dO~>iAG7q<0}n~SBE?)ud4-0 zF4U5SNci!{g&IZtaY9IWO)UQ!Sjd|}h9wJN5r&i(&;k(#3!x7K&@^Rhta}{*E@f2| z!?Edm?7TCgO_6;0{8krtmY$;!kiua`6$N-C{0%vlwk>(!~tO?p5J zoOWkxxSf+YovSBkGj`c^tf5r2uV&jUTG-(6%-NzBNzysQaU=+fbLP)>0ods?*vWde zhEhvnbKm-igm8wsY+^)J)!7?!MUH=Kn~G-{p+etJeJJS>V5L+Hufw#DX4E>viQN7+ zV|qMv6Q}QbakAP7zSR|3Xs2mj#nS-y=mDVSSe~I+m0)=B(?xF#giJaWMRFV?azF`$ zQyeR5Xtl%OJKi0z1Q*+9eJhWQ1IlG|{!+94AvAh}1^S=}ksUB85 ze>4`a>>otSpjL}p#>cfiz5V@zTeeJWL+g=y_86_(3BlXlOdM zNyjl<@YASf!$FNPBV#ixx($4cFf)XN0^CZH8 zYL;asgDCO5*m&?l$IA15jiHFuAp$1xA_+-j#G|&qv(c3F1UOEg8{1oAv+_DYKq`Y& zhk>|Wi8eDvqq-TSX9w_L(|foWBv*JW~f zO}kdDFs@p)!i64rZ)$8cHa51pR4%Hb3KS8fog#UROF3b$# zC;EF7dM|7GTiZJty|opYiv1NNLW&XDwWRt`^`q6VR{y&CQZ;j`8dO(rT(Q`+iV#4* z0E8(}CEEyML(h>8SI5Zk5$$3?ERHQ+vY1@Fc;kk`kO|xso2PC#nTxZ#3V6v6Dp5rH zYAwtcSLGTPlBAh3K>n*Fq`bX>Z6FvoF}caI4M2+Qix-uSwF-qOmwyZL%EI+7CTu zrl7&SnpLqN@xvpGpJcUGMr~5v{fiEZ#!ibOBiLVHr-|=P8m$z`vU^%M6$#Y-z2{~{ z3_YBL1c!kL(ugVmw4zFFphmfGUn*5$^{+1tD?#{khM^ z1BeKO`f_jAIvKTIrP7H!5Rs*3fYHpUYb_ONGUMn z(f%o=Ox}XIL3>_cf^}eK3|_J-4fBAu;QC1=^`DQ=VRx^X9i^l(=%WMdRRh!wTaApn z7VHMIS_dUyQ{zPWxGV&FxDO5@j*SLoYn{&IGO!326r_?N>Lb@QD+ zZ?_`bf6M&DYY(_sO4Lx0Bq8nRN}ah}?x&A()lR7<>tWE&brtb}J}?bVi)wU?C>X`! zNVrxFjU(ISdIRYY-NiH{8HPsICL2@#J5?kNzmog=LO&ytVEb)uNg&Po`25yJhn0jB zi{3_!2Oyly1z?t@i7KK=E`e(Z=w0L21K%J0?2!F9F?7if@c4q5pN#ndo?cMn_g5zh zjlvUo_Lr-lY2~CXAusO8wy=nj=PS4^tN||@Htkh-%22UVc@zZ(oRkbDLmz;f;jQzW zh@jzWKIHi+#IhKmHdpk99X6P|o)HkfASs%HkVaq|>gkG2rAy~jyOywZMdH4_qq#3O zH%hxqT3oCjdGoh510iV`gm#V0)~`GG9QuaixxbQkC?kbZvKkO1xfB8;dMDh-*D34J zVgh(G9^M7DL_YzEC_=l~`qY2*^<*JK74VJEhi@)W1`C1dU*~*aC0eycqFpX`ttrwo zfLH?|a_K`we`JQ7$5TVGpd9QEE(x9qeja4Tg5azYlupl7XI;5)Mad+ix57(DhLTl* zcs^^Ug!^&zEWU$zFdZr+*wBI@dsIy(k~4!gqWLLcVNf0dTFHd$04`G{NeUT++_gY2 zR%mbXaELwe5Z8eqw8pqBBK2Vy0&1hNx!bo=|M1wneevI0nzY*GuWr*@K?E4Ro1&|` zHHdb9Pvwglqd#xgIToxc=5(TxB5fwM;Q z7G|PxGc(aRybU~Hc@RQd_i9saPi}Xb9=-BOHF!5yRgL!K@-#uIrdOeT);>>sfE??t z=+3Azw2v(|6{{%gmw&o%75eyZk{>_|ttPaD^)$hQT_<;=PktKQKrqpZxM>uJE!eNy z*ReZ*7M*r#fyZO=4=u20?c|3**jXRd8{O@Dy+$vRnda#~kyT_R(M${gTE6vXesGuh z9t-@r`e&w}b^m;TdaCP`>BVmHzOMTQp0belsqeGg6C=CL-Cf_RB!AcSyYAogk{_CX zWBFanZ#t>BTi)$@xBH!5>TT7}4ey%B->E(_d~6~KqEXe-*AWe-gYZo79BwwP=vbq* zxouG!x!AVJ_KJT6v6EHCa{v`81L3VxFjYeRMPF%!D6RG#b|JAN~QJJ+fp3UaNu*#%L zWU}#q68tZV{}B^lJW!~1Quxr-fkj_W+nMRa2^Gc|DcFylDJE4CV*xDW`KlX5`pI&} z>JD1NoqjVvR_BhlSJgdv=PC>AXl|9}VBDfDv$ynmd38gq?bU{esyKAx!W!?W-Q`rXy#3UOySKu;@8K;L zsYp|7GzKNI_{M~z!n#bZC=DgdMQF#p)4wKvMz;|)L86upiTS9WWx%1wQ;-g z1LLR0e;8>NEhI~<@sOujBDtbi42lk%dyH6Zskdl4toHlW&Buui;m%nLW=+j{YZf(Y z*(%32$3Djq$63cG4#shFa0<+oqldyL!mvNQB%JSdJrO=1z7*z&uoU)$V_`Ww^DCYw z!k{Kxu+4aQY*xB(rG6*!nRo{g33$FVR8g`9Wu$l3^mx{OrO@MO$Opiy z%qE>u5uBXqZd0-$xX4kN?1L)-&`)(T5yB-?U}mCHeuRU??BzCG&uVEr@@qidmDR53 zuUuj&(Ri1gSUz%GaL0<2Qc?<;CVdgO{^-Nc-@K$L#0$Fe4(iXepf`koMCaaLyl$8- za#Lol$CynlZrc!Ev1Ooj0JJPS-1D38>IHtWr~Vm7RScujDB3PegRZ4lp0A#xP3qbvWlc zS2;g$Qcm1$TqR5W(h_O2^eyQg>8!*m)ugz{bWEb8=Lkf^Wv-v2E^$ESc5r{>NbV~y z&Kpi#%=aA^hB}O28NZxOrE%{K$ObH54^}Nqsha6o%S(F==?1+=SC2ivbn9z(O?H)r zi{tfy`aq^`;EA!`Yfm-JYu@_)>hZUi$DC!JaAUBjYt4hlU#&u4tY!LR@>9B%s3uy8 zXXV-u4hnN?#8Ya*OT^LdYrJH0y=_g=sbaBt<=Wu2!TrIb!HzxA^$X+d zTV5=7vug2|`!Gy$>xiM+kpG>!sn1ElG?C491W+#O=YL>t z-=hm=MO_>H8P~q~4lPxD^T6g~Pw(lz4!&Qs^>>Tnc1VeWN>dD42Xi;(dOz*pjR5Ld zj%A$85?b55dTPn=g9&d7Zz)k0}+P!(zGYH)^0>$s-#s z)-DX;cc#i|KC!H<#8_+WFb*468EK=jK`!erTT(VwcD9TLWxp$fQkkbLh8|O8&#mIO z@PFk0ho|^ugiCVCu6`GF$pvKBe%DbK>H4aEW_xfoG?GpUPoPuwM3K<~$i}w+0xo33 z43eOG=Nt-4ae>r3V(x3t$liKJYjAXGN|AWM?wlDZO> zOAQ`DXGNl!ot>&Vp};jPZj1q21gkUgLl*q}920{SCMB4d&B5sHZPM-D~ENMynM89a9x4|zgd_OenVfIK1+`ICfJr$~He zCQOsP5|57K`?#^#rc-iTg~DK^2$`xmP=X}t2Hn_sM=ne#R z&e_O540UuhH33N=Dv(Qrk&MI@c@0U~a7V6m53$`zKVF9^dp{y;jgjW!W zn9$#~=6GxCI{H=5Sr7Dh7Huc$L4Ex-Z})?KWZKRlm^1}GmaS*H&UL}A9dBvC84b{A z5^{!i(40SGFD`lEMX(BTlC1cP8)<08%gVU zV^orSaJZx6Xg{d17){11j+!-IKlj$*-bLl1t+D~OEWEbvmi-6r*#G5!w5PWwJn2#u zPpLa=dpnUHyQcp|{+mt^tBF%`$?5KQyzk5=pY%RC`?Qx_vUc}c_)$A(Sd&_mh_9(y zln}IQ^rw)K$EVIP_PUpK5o?w&T9#Qex@eiuwbIYlPl1nQvGsU-!^5TETq!7>0(Ekj zUbN0VcwE}Bdc$rS#AuoBr^UhzUo~5*xU5(U#miET~S_m-2$oWWGe z4SucfujI_MCRndRJR4GG&GM$2Sn(pg3KydzJa)TiCg~z=@AvlzMqo9GtgU$~2yg0J zdLbiPY&5He4DfoKhi`oJ=X!IOHC(x-VQf`u`SliinOY^d84B_YuV*xZX#Z39);ZN_ zi*C?mtZ47zx5({U)=TmtjXx`beM%h|G5sZYgLV-jktSZ1!>_yENdCN$RITxRjC|m0 zyw=obf;A7DfYt=gn9i9#H%*%;6I+$3z=pfDI1@m(&y@=N6fnw$6XdJpS@Jx2iKIzz zhB=4$E+?c%OysV4mHeksPA?;X^}Qi%RGV(vH1w~ zZgH%}?M}vX-Xa4jHJ3sVGt(v2x%0U*fg-)gu{6U2ilqTXvb2VSCPrhbm;*9xIu%}& z@RdJ;I@&;}h)Uu)xx%%^Bf1@K_>TKy_g~##x+yo>1Am_%?SUU?{osuMod0wGw4d^` zF|B|XU9BYnS$f>`^>R0!BY+zRme9qdR>!q&w;P^upL2iio<=XYK{Ab*AfCrDW_s0h z)^y%<$;1*S$rLk@CR0_su;`b^al86XU1}U7k&EMaoc6@U^wVgLWm4kKsgY$WxC z=9_$baol3iD@i>q4DLotT;()|0#(C34mZQ&+!d)dv?9UYTc?&-nkU&%O|YX>!&5H> ztKuc4Zgcg&)@LK5ZJX!Y${zrMp=!0B0U%i1D@lOLeLJ_e_|>O}>*WB)p)Z`6&XMoY z^~8-JEXUesgSGu_ZDZ@#8rQF1+tk*!Bv@(;220z5O{G*auzqbnxgwAW;2Ad~$$`v# zWh~B$Ocu-ZLSe@g_>HXFngN*`1l=0rDJv1rG%7)R*`8#K>;3B!>s!}TZR>;NcvGpi z%3al0MOICLKg-DV^siMdb1o}cmR?4=mVsqB=+d%p@W|lfgQo`14$`{^&kUX$BnNM% zi5=1o&yLs*c}M>aX2%Ba(D-o#E_Z_sV>FNzYj}yKuqA{vy=V8#=IC%|M4|Q${l_y> zl%TyOh1BDMl8Z`Tym;a30z74Gpsq0Jo|=i?=ZAJ@t3r)rwIP%*$4dlf`WC8~BEaIN zRBRgK$*X6_nQ2D0n7+}oXtvDsQx&?Z*kA*>k~RtuiBZk z8z|7>*602rF@i`k^m2*kW^L(?1cQ`O98htvzO=bF>M#~DBvZTt+}6&|as;0_nslpG zjHuEJ2@5?x(zpGMFM2cx&y3C0i#mycBn<^t&5&vqy{4cq?Jje^98*? zQz}+q5a!|-mWLb-d0o$*0f&Fj4zEEF7&E{F(+Oev3V4sMB+7{&$i`2oFDO_<0yPPU zHQ*EjbV@7LNt-8Q$D*aS2@gk)MWNQC5Svpu>k45z?-#p|Kp$h?QdIs zZmk)uoqsyVaO47FKQPI<*UMjTd3`%+FP<|&Wj9r363T)#Wo8M3nPr)*05bb==4|(M z8TkhMtH#}eW{pSt4L4?DpXi?IhTRB}Y+C7Jqqp|mdgxX%+K_I54eQzvIyoN(9*jQ6 zlyPQtvMstay%a88x2|~I@dfM7_W@7exjs172m0`DYq*{3EJIt5a|CffvjImTmT+U- zZtf6wjAJo(_i!=vLLK{=4c&5QpvEq1(^Yzh&tH&taBR>2xC6cqmtY=uY*(dtyx|$e9jTz| z`=_)lQZiaabDHKYd%Lb5Z?AJ&awj$-H>GA&oX7zrrZkPD(l>pDBFNdq65^s9K5ak! z|C075@NHFR+W0+p)z#HQ5>7vgU;q)S4 zLcwv_B2!;$Xf)hkS}_{$FU3X&`g=x&bZ?(>)Tx4+s_oQ5P1OP|)4FDzeV6?KJ7H(a z#OPT#5gI$@10VZ<4=G=mTCqWUm#*UkHueq-*8WE!^eQQYhIvr(@>~!-aCuJ6!hF&K z^(#CVR*TI@11M7(kQ&$#;s{bV(KLv_1-Z2#JIDvKT@s=WF|?E|=McF3WfCQu#NsB_ z{i0eoj~@oz{Dt^3NM)&(?UEzLLb zVlQ?)zPw>FiEK3`i`2^X3|RlKi}ZQ86WSAVumHNQSdG@k73iJC?I5hL*UA*d2~M_R z*9#BOjiF|pQmNF+!n_Nmu z4aT;__PV|sUil*Pw;$}=yksZ%_ToF1)!p1zf9v4m;GV{>U1tx>U@sp3qOSB@=Fdyc z?CSXOx|)+G&b|Ua+dTaz_(k?&6<90w9iiN3E4Sgc%H)EY04+3YN1ZyTk|t1o%mhqK z^O|*zU5*bNzj6GCV1!;DS1Q#pl#}TS6gQQtjA-ey!PXsrKGdB&!L>D{8>SlG zY#QT$Y%p0Hj;=^YTzBN)Rqf<4Rx4n9j*05F_ z2jpIrBJ;Iir!)54ZBM*b1aC|8^i^V-XopEz3j2m&f4vHP6odahXv52s_a|RZ67|JN zqN&rHc9_z3lm4Az|gJnHJrFW z0`e;`I$kuKDg&>Uy;Jsa8R00aEgL8sF56l*S@zp9rYxLYK)yUJH7|VPFEpvfIpzX?6=K2gL|uJg<8mh>1wRm|Zo=wb>HT!OUVQqh%DL!;5x^Q3E%6 z;AxsGP#K}|&!aP+RyC32EsO@{6MXo#;q)GOG1m5fXZ`bk^w~Jg z^d__R_1CWN-_<*rzJE}x^Pa|^B35C|*waGP5-ug0g69fBVPQ}`>g3@R(Rb?M1xK4r zk)RMv1qnXr4C04_4+rs|2SIQOcMEbCvmjm9-z0(9oNAKm;mtUM)$+A??G)H4%k*vteTE#Khceh?&C^QgC4M$EAWB zUg89kthE6}23f$w`DNko!q1`IOWqx=d@@BOTfJ0H(lT3>TTiYph{7oXa9_ftQZ~Co zm3pg(U#Yfnwn7I5Z7|7i(yN%DhLvpzELd9sBWIODO|eP=EL(4rQ8IhbQQQWi-_+2` zrYaN92C9Q@U7njYHpYUFzwVYZa+ZX*o1^5Y>Hr|xp^2G`_`O6Ds{}we^{(%N|EGl? zhRE0a=L^3d{6I;*rZ}%W?<4+&`xga%yYl-g92CKC>l;@p^h%{d=~MX0l1>Y-SV{zu zGK|15eT3>Q;Y`k6J#$t8paj7xJ$(MoyDVTik_@oePE)zByu7@*oGdR-@PB84oCWNz z$-s=X3pg1d_`rAo54_;nh4Ip6R2M(Q|Al8Fyujlr{s@n=7!Mlwm%%D5!GE6H5Zo&E zd`cOaRDg9^;{TXHl?d?P{#<X@1Bml>E4cXun$q!Q~8q<)wz0S#J_g8nntOk*cz zO`TYyP=2>p=i5+|s4NVJGk+^CUU;aYWugdXD@s;nzb=_vXt)1jO{DME@`D@Y(D%wS zgSJF%skgMQqI`8_WozSTnb8zm?F36#wN)2;JiYCkqfNU@!!jeQzc~*PHDQ%AzrzQJ zpF?vsA}FGz5hB))R$!ljnw~Eh8Tu|Ka5}9cey*Tk96`0$5#6FG(i%^M%F6{I1ja*? zAv_e4)_evgv?wmVjC6e<7RG9)qu~KW&JpIXid&?P9NUi6JMU5B(8v?|Y)cAK>>O_* zYL*TI1n`mDv8pHsb_a>;C`(&7s4v86&DYws(ArxqaZ9Vw%d#8@Zt1VLAf8lr{>-^IZ35{yOUR@RSW&{cte3Z z>MM)j)p5;SCO#%KSU>htp}3eY78ddgg{#pZ)^n|dvvs_6vh|4gf{wHbt*O?b>|4yqR={Gd zpsH2ey%xj7%Tk0mkX>k{7W|3Lvh#`%awRolby9_h)azR0vaHL4*WA>dY`ZZ`5x}{@!^;Ru-mz|qLjWH* z$ubHrt6TtXTIw=UK&k0mQC+dVz5xdNXgwA1wSG0B!Es!7$5%SIlPk&=gnT9U#T}*- z0geKZcjT6cj`700q*kd>mf3ivhN8u4 zm-mUE5*Dl-`-33YF0i%YHj~zlPtDva6j>S@oUM(G;}(P7VlgaeXc)5C;WN9T)v~}& zH7+Vo`_d6wnPyPrgfEf+RJ=IdaG?=2a>qJBV}r%gZeO4->?~YYxU2B4!oL*K;lhK3 zcp+L}GGg)Z_?0+;#rb$DJ`_J5r;fw{%!XeOEQVGL22aO1g69CD>l^1D=icK!h2hi` zxc!XKKG}}9qvpM>6NyCD8cB@>iNpYAuANBE)-(U-CY7KFnL!v$BGHw&K{kh9hP;O~ zzj8&!IW)AWw39ZwR75j`2NiOP7%$wGrPWp)HEvST6s^%NiZSrEjx;3v^@5fstWIVb zLjyCnQ&D`(2_+l~rbn-Ks`KNV@@sZhx%hOsaR*IU0F4&h0nW-f3dqzHB{xvIE00es zeB_x(i%PD@XMu`jpa&ulXfjL(WdO){uD`hHfYq6K$ZUBOd}FWP$uscI{`<^NsC9$^ zn*etUzESOH>2Q>If7yH8@AbU5{Jj+)uBG2x`=Rbb{fDKbR?80!4X^CiP0c)XnqNEY zoSJ!9*cI{k`1qg|%QUmrB>9n`l$IDD9x>^yV~1JGOYZuKQfMwk57(Y87Ia?j)nnArKSg9U?^d}qdis$1Sbwm8j}oDY0fG{vmRyYss%rO_5YmFA38AJ!>u;JPtrfB>W#n{T4U9&hTd)mTjE}`s45R$+b6UA3 zXjTG34`ebOOPLLFR#Dyg!hf84@VIe>+Ad>gjz&fdIAO%9Rj@{vJf8XWfoS`i&8rrK zOiq;yDm07sfN`4Pl(cJMW=V3N#VIE%{@M`EJlg>++wEY9gW(twSIf}Cg>7brxC^TG zE^tgpFIv8S$>>s|DX(G0>g8*;{B@jqyZs~chl!uH|19;<1YKbfyVo#Fn0|=5nhHOJ<=U>XQ-_M7?~Y1n0PV zK*U;kX|+6>E_9{~&>stFEKQ+5%Cu<(vVjlD==J4@8|o;GysQpF?RK~a-QRYTtQ)w$ zf4l^gl;Fk`Felm)D-z#MkcpJK)zON#eu^deq%RpsP9~2ek0;M1FDBVkayYp?c_Vz| zj z+Ay?Xe8c1hlHYJ-1HK`gGnNQMLV6H&J&~9g*e5nY!@r6&J+lyK^U%=dO6TWkxQah7 z)=MWDl~|S|)=p$ndZ2oB_h3QFbiyk3Vo%fd2yQ>DswLB3WMyV zFwU*rNsd=qoypd*+Hqdz?J+jBgyd$1RJZA5<{g2R-hyW6bme)$pmCF}M2Yjzr~ABj z-aS$rj{;Krn7qfDXL1v2ZOo{=r8*GH*SgJBexAVF+xnNv6&4a#85%}U-*_j@^422! zvXWJjFt1ZF6pJ$)CF31OLkC*)CWl-hgKhGqxJK=zMhq{7V|} z0|}cIDmK5or^mLU*G!N?Pnugg1>}OSO%+R5dVnWgL@Uy((j>ijvAjp*0VCf-ux$)5BqZ z*(s-`Mj;hqsmu0Z4CqjQuBjqNL#YP2f|eW&LKZhjVxFDt;uG6})Hnxnjyg+wQVZ2E zOQ1{m2wxcYl_`wsNL_bRMTi83P>mIbp4He^R%|Qiwy9~0zeNFPSxv);z%#s@)mJ$* z3X-LCY6W;^pMv)>c4JJfDGoT~a%I|Rke4=FwwSguT%$ol=y9CD(XNV|q%@pduP`rs z_rcA{{>vR54z1e4YFRafYD)nQBS0A;Gb(&4qoUGhqcTF~`8;n6<5e3;zuRdcC>R8( z+g^0I>wqr-s`c_bl2JmvD4+Q|kxvX`P1xgttFr~Lwn#ia4p=<^EUN&GabW>Cz5py( z5HK3+^HH2#9|rAT0})1 zLKC1&G@~dhG>B`cXop(F0fNtowkLm5vUkIVy(K?+a>rQlSMNRYK=D{+y~p&)EepR} z*}Pv>q}ta~`Q3##|H|mG9avcNPmOE77cYBlP2)e+v>k-s^xf$zcrjHCzd#8p&?nUR ztxh6B3=!kRapELQxIGVre=m+s$rM)OaZq?Gi)}K!v)V{f&nmw6^4U`NyBlmUV}00@xyB| zk-Q3Xx9Lmp%0Ry~dr^Qkfr%W{Wx20zn!6fvS15PUUU=fCC3`k*+#_C=lKbvGaPJRX5(Dw5RHaFdW;H(Sv595mRF!Y~c%TehU0t2q+&T8T~arUyTXaXV?rzN=(}CU>}Pw84TI*{bFH+RMHKv<@6sA4M}`<_KB=RrYv+| zcF)w5r6Q`ut)P65&+017_wkCj#kXKN^i^s=(mghf{cgR} zY^!-15T*n7Q`EK(Psi0hUui{1XO61CdN5Q2zf))C3Bpc3hQ+WX_Di7@SE};e1wJ2$ zmBoWae&F*B`7yoUkE!BXWf{xjv5JvW#vOE85*`U1^hG?1W=$7zy2)l$8@dTsRw)nv6u426~OB|=H6guGaC zr34pBc9(owLX?DOt6igEF(EL;Fmw1)IEJdSuMUX3x5xxW!(!duEcYtvD5FqVlsq3i zuR2d5YiJ^jbG4R)qyiOaS(C|KyFM@C;eGNoEV*{|mDhOJ?=E=rSJZTokAciBO24(hS!^v=PM@{$ zhGbI5@-nrm)ywetRYx|taUaMxtLxrfck+*5dJEp5YF~5w2-Nsw#!kLMX|O}sj|2yt zNR?F$(P%@%1ZB}vlqG6$R8b8>Lk(o};(c4Ez=Tjkc7yKeO+DA?lw5KF#XeK@jJmQg5`JC6nP{vzspmC$db9-~b)F`J^vVs?u z*Y91`?lJScB4u*93X7YHZ03NPVisCe?7IYKvOdtv4j01Me!9sf>}; z#d@{b#_LULi>>z7j?%IP!xK@pOK0JEQ`)A}DBN9{KQN?LadV&7+M`gj97+Bu^$Q1A zU_J1s5>JK0RVbqu%6UUaM_Jo}RGu~SZ|j3q6r5J1dvxTNNBuK~?wSRreJY>FLzG5a1!nhaFR!^hap;%1p2!=1ttv9f!6&C_s2>~qWc!^6JIaf zw|IX%7^-~(ioJQqoo~!*$^Hu1Aq1!;pnOS@l2EWDK`58?tX#5W<;p|Ra(y&f9xaNN z7wuOPdZm(J*zbUkupaoc0(^A3cNMG2^tut|yUqBX^fr|5ZrPaLEUx)&>FXOA zX&bu!dcZLH!IeD(f%~E$It0qg?<{{GEe$Uzub%?J)5qHYJWUz44s;6qrU!=lc04dS za0DC&7XSgKK!u?0QSMaYMM~a&xBYcHVV?rAGnhW2$Msn>nycdW(XX$H)zBz3ip5M( z3E)X1;w9$#y)TLI%pz|MA|b!@>*Vw$5ef>PAc=NjlV559m+S(34$ZYnY6cgx5P)ie zoJ?7{7a3}wR5}0uyF;9UZy0=G)Z^+j8EB9Hzi1XmCTIchmKkICN+7pnesOOS3?%cd z+2(HIf6+RwSKj;DQk54dcjG%-nRjQ{^xyr0@?+YW-x1}r{2?TRJ%08w>7!*lSY$!nO?K9g^$P>a->aTOh#Q!v*p$w4$UmA@LBS!!|TUd zHa95LI#p>&anQ^t8C8Q&Ub%e_36y>B1%BC=y!lYF-4lxay}#?tW!pNtioX5c1B>ro ze>$&<)NUAmEU!rT2LjKfTr?*&3V1_k;kH*knp~^MQd_rBI zHe#scyAFFnU`rzSxRw4fh(Z%nnuMVB9$}xbu~*a3R7{^8!|1Cl8U@Mm*7*hsU`7;k{-8+ z4q9N!(Tqk5MA}i4&XbEpq^4LzeU6pIF>xCfg`$M~G+6fPcQW6an#w%?omauKQ{TwE z^{rk=N;bLufCc28!&%VvY;bR!5cYh<4c)m zU!KZ*>y=l)lBt(L_e%?&%KYHzr!qhM<~QM4o(2_9oy+`o*N(I%5?v#!*!|xz`im6-9QZyTWHK z(V1G}`PyoglF_q_T)n9#=F==Obk(X{a*a-}q~(JS<>JK#8!F3JU>ts#aAHOnb8Qfk zSb)1?wVGWtJqTkWqtV6v60`m?Afo~OG;T9GFREgBk?JZlJIaWjJCJMgvk7BQTwvBmJ(lk?tccDBp@vK)R&`-5hcOSaKgRD z?XQtpns%`^U!L5dv_qGhxveT%w#C_3?p8;Yyzy&Ac7>ZsI7h0B!QCwjLk9wdxH`D` zSK4q*TpKl1M^z-D2R$S2G#(kKbONQ(@j|#r;Z~=L4z*UmEao0CL7pdGz$naphB}VD zK|pUZBXIa1FzOJ8*(rZv zAwn50DhcaLO2UQV5`RM)i%dpvXCxBABa!m@^un~u#m6hs#UrOqs4S_L+0*i5sY&gZ}DaOje93n z_)7iNQR_!V2sVJI+$$>?C`HJ;{>n%U}>Qi=gMz$bcYS z0rME#P4f~0aNqT(Uz|Mn;_1nOLx%?XZ#YD4KrdfBIQil-^!kSWfkSX4chCHcJWsX3 zk*Kk8K|#n^{0<7cmFDhXr@(fhTB*2IrB)~vDm8_1D*6sWb}P=_p+?){5pIaP$X(%R zC%1(=#y!uSm+QTGTO}v_vd8O@4}o{W9*Bcc!dA)|#a!0)F^5z~4M--oYj)+z{tPeE8Lj7PQpiVL`0 zF$TjTcVRI;=8OrkRBSRvPsWbK&c!aoF2=6J=-3O#n3D|7Aky54%Q+;8L@w>079j*L z@d)b&B>^ZiK;b(Rgg|#I3$kI!__5 zTz!3NQDtPQ!oq50T-~~s)z@`>y}25a@EVnudj%;M66YE zr96K_e5|Q*`~J#C901%{M$zslf=t4P@hD}+O0Zi5*5Xw237G|0P_axW1~{VFO_1zU%c-hQO{uS*5I1wnDaEwns+GWN$kD)qy*9omBlw^%oTpQ3)_w zQ~}j*oCYw2x}*%@fvwXMThV3>s@F1!39wj#CwjaXa(R`g3_qyz=PK&5tH_d%%N96_ zVI{(B$T`Bhyq-|?vX1`JroO(X?${8qT8$=KL$G*tM0eKpx>koZCKn;>l;sdBy3QURRpH^V&s41}jv{I>%Aw(58 zUNLLG3PU?x#q1E(_|<*oWk!qDX)F63NBryQPLJBI*98h5Mes6*GYlys;#dMZ^DY!JL;U6AVW93#wU}pj0Qq2(--1zk(NFdd!Izykt|<7wGG41+U;i z%mzL{>x7qisGrDXA_5^qek-nBBaT&6kc5iEF4fi|1r7$`%?Nr;*;OO7tuICx9ybg_ zv{HFdESlvDx!nj^02b@`Ri#4waPL=H{W*$ghJ;7YJc0%z`CO(-^6p0@!IoufR=#Vu3$L$|+JtV=D6_g6!m^ zDvTn&TwgVOj?j}5S>~n~Gi%4QTqH=%Z|hr_(@_hM}rir~q%7ZC1C*!^vn? z4R~w5+nw)WyJc8+{)dGhde+N61ZM?)lE1(cDfkONf9`oZy2`{-dyPL{A$B=Qy$iL-QHh1k`GC>eaRc}$^N}(RBQvl= zFO$)wv@af3*tANKa7tgt<6C8jNUs|>hvmLjIASYd^92~dDaM~`5kc!9;Z*zG9JE>f=|c`F!n^=R&Lxq zgdM@o!Q2bFbu14$*vp7>CKsd6^=P8|Lq+Fdb$FjVa_GtD4^KW03YV-eN+p)8UQLo? zUwd@p(AU4dXZxm-UCD{v>rqq-U^M)H2nURYgV+v%Ez*#L-R@SxeC-K=GrH`*EOLE) z#tmSKx8rP)`RUJK1Pq^^!HW1Iyl4uHpVcUzo>2e=`a5ZSdIm$tUpvldeo2zWAt?bJ zxXk|p{(L?mvRMy^;W5M`2tFCF)xpa<*sN+2*h$sHjF2`99;sy;)NwPrq1Co zS{?F4Z)%^p)^=Y(0F;*0JZUhL%D=tRUBjCC$_sGXzLVR1TTiKKQ*ErEBBI~C>S5<{ z?@OToq3<|nu~#bpu*a?TeWS0DQr3KbW(M0n^KH77GGab#2ZmvOa0NdyGYuHt%_P>m^0qU&HR>{X=B~ySpRizSlvKC;E$r$e=owb9tW3@zW zZ6{S;o>H`%&HP;&jpF{#s2K`ZQw}Oj)l#og?@%98%pi4;Iz|x`mFmnc08NWP@iEOj z+^Ok5)Mo7u3frxep1>j-(ZK7~G1peir6sswY)ZwuH{`Qdw?UZ!UpI=3~H|A^8kR{?wn zUKb3P7npyGcz-P#4xIlK8?FEH-b{b>OduU0@Dg|96PWZdI)@v6W$FFESr@*H7h#- zhH|o#yA4ow_qDR0WogT?CW!3cW1p1^9w ze$j!I(m61E=K7h>=|?FVyB#|QDh1cqzCOBP)8@?&Za#DiroZJDEVUFYUD|IpYx+0e z(!BR8>3yi%VMls5de|$w6Rk58p~dp}C&6^`lcMwpT1szj*7QJuGwtdAm16(3py-!9 zh+)J7X$>Kk$)0kFB$q-!gFlE3Q`D}Nr90yTiQ1jXfkdK3-_!Hf62L71OLi_@`lw!> z2l948^VBJ5j_IG*zp5v~F!j?vTGY~a7iy{1u6$s4_|b}6dTzm&-vTz@vg?US6ew*) zB^n4{LIhU(T*}x{&DVTh_iP~}s@jlXWHd3c)(b_2moAG8!tk}!JExIKI<|`2XA<)q zg#dj~RE-L*%41T1NWmYkG@0g+bxW8O(6FI;Td~+n+@f~?CbzK$9icSCL?1$${+s?as0Ew$i5B$C%+MmkD z14@oECR;LX85Lggl9{f%f5j3RUD-4&SLGKAF_t>I{YiDchGJMlO}S3vzYP>_0QEK) z^AiTUO0G>k#Zlx>Va!D8Wi$|hGT6dft3$XZxYwh{8Ai6L#&q3p5EM4GY#4w_qvbB6 zx+e|5ZS|}|R+)Kdc_pXS^P`W0;>=$oI89M>o?7Jxfjiey3Yl{9$U8w+j*}F_D;R~6 zWeJKV8N$pON`VDmlsUyX0Iw{nDrvCE)WO)Ld%cRJHWzC$_SWGWCR-*$Ww+HfPn zxJ)L^<`_^XK@wW;0co;gr8ECQ@uG3@WsS=s$zTBN=uwX+29C~7?5ymmS=otsvd6jb zeyo;`t4bGl--OOJk6Nm#WRRe`_uyoc0LN}_O z`HXrKMw&I)TI^ddV>C1e^1(D#Tboy^N*mBlT|P83#>%B1F8%G&zb++jf%Yu@1~e#m zc{+;NbxWJmg{Y?sN)?pK)~v2uwW?0u-q-$MJJG($Sl}!W3dRdaM1eV3aIt_acm=$S zC9y&9(J7%126rEwB_Aj|tT~)~8T<-c$A5lFtW9BEp72w zi6;nxEUsVNvG%q5hIF=a|MxQgI64}oDF%>WGr%e8c6>ddWmzpwUk{opGaR zCS;Miq8EO0!;W7+-R)2?Bw%C|t>!72rQ(xE2HDI%mo05`T57l5UDbWdp_>Mt=`_)@ zJcClZud3!fK%p}dPzglRNa!=&SXfk;5^zrPnE<={{7Ra&6_rS~{#x1AS=kaOoAvQcWk|O9 zTG`<27}i1AoR4oo!UVo>PQd~8ee419UUD_eD2@tI3I~9eaWLkjWGqYKoLo*YGytnG zMi1X4NS0kCC-m@L0?1(wNCMPF!Z9q_O|yVtNE*F1V%_6n#T~)RopM2bK~9c~6?X`= zz?9%G!C)OdCPm0tRSq&1J`t+|!~&lAMFP4C7MLU~S@8V@;2H4Dg3NO8cul4+v!Vt( zNqTECJ>Z#|On0WQ20W4JtpSh2{AT6MYt%2P3K+VSU<bxq@yHX)@P%AQ3tuiVMc5nI&{Yl@Y)vaXA`UAn{!xf=3_dU7cT_=dzo&Kl|0b z2Y>R5ce43?qyz!?wwO+N%oVRESw~h zIm_NZfMnNQD;u0W?>Z>E5_6oz!N+SqTZ>Q4{9a(!4ynx0!f%=HmZZuLaX?ks0S&?d zA%}Qy?5?q6W6zJhI`+;Ojg9SC)f@w3xvv79gT!=+VLc-1Ssu1_8%c7_s=npK+LdcK z&Rv^GcczXO|odqDP68JUs+*%WwE;3Aln zw>qta^#L6UfK}k5m#}ue9dAF3DoM`v_EkUNzb}rMXSG-)5)mRNBjkk$a7I!QJdz`~ z{PYrf$nx#Y@lK#<6+y>}!D@CBX&$9z7SH;B$Xl6XH?9RaewR7c2NOd6h|MAofMbhn zg^Qp5&c;iREWD$E{O?#SX^|0=*YG28)4jBYq3#Ho5CSd9RtyKb?r2^0^}`j!`)ZtA z`s(Tv7lXmZ!v8U!B}b3|K+{DL3Yt;q-P$@;$hGX4yE1dZZtu9ebH(EepOfo3eOKMU z{W8(aH{;FCeeJ`3%WamkmNzV<#ZrrQns}^8D8h@1ww&7n`c8l`7UlvH0Ula&7onOZ zTG9a#jP~*XN~aN!i@5uTnzbc_44;UPA*RTvECJm`R6Qp)PfFlBxeB=Q3dx;+sk>=z zt2M_1JcsEl0X(Cw5FU6tjTDI^fN-E&`ohM(Gws4xI+ZjIy#6gWT6A6abyWJT&U}N( z?6m7R9d8I$7p2QoMJv4p+g6t^FL!F-$pL}T%=uv-LHv1HkzVeWs~PtxeUy%z{J>@^ zcA9lJ+&a{I+v19CDJ?;gv_W0GyS04tf@cQohJ2F?CzNIvr>pB(F}hDEDYlvwYTg%% zExqNSy*%kGX>@1)k8Af=p3(5-8cstQ)f}xNacCAqsBcOMXLmiE-8fbU9hvAk(@XVb zF?^YO)__Qoido5t!mQ-dzQs^->9vyaoFph*l$Gr6LFXL0Mv{DQRXCS3xel$Cdb%j{gf3HD9Ch$@BT#lZV{@v^+grYg=(P2@#e^weg z#f38$$^AqWTZr{yo3K9%O01(2)AM?#KB6b}sIWK5hlN_9Qy3ITL1>M-`bJlcs-uo* zXLK-1Mx%D3V-)Sz;TS6*tO5J-UV^C{X=V5|c5ZYEcb)QcX_PdVVy<1>&D;YV!JUY% zTp6H^#?8xyo!J%2A^IE*|6PFIlE7%ROi94d;k1w+NDklBaDT%S4QCr(Z=f0)#?}mv z2S6$S0s)DGWNUVI@K?7=)RI!X3mxpGEZ%wT<^5TfNofl`SH;0!Lc3Ma;z^|hUUxRt zjYUQ9Vto$c+?Q)J_DQR|D4Rx**;!aesXJV(0uqbU=CD8vM0puv+g9Py)?`IFzQ%vY zf<4~=nZbykOf;7)tXWm-QIDBfx<51H<*Nl>7~Ra076 zh(g;uxIWgpdXbIpR4z+Y_y%h`_TLHsDEn4f!k5=nVZvVvG(UD7NjYyDnF!ncai?0P z(nJFJR!!^5Zk0!;ZuCbMH#jxj1=f=E;xeDtdvBgnq1CC)_wXUXXh9|F;RLn|FKuNb?#`z?0CL>89nMw{NsbsQo-f;sHb4SK=M}orKXC&*9Y}+-T zAxvf6YeKA-j!iG>fx2|zr_>h&J<$}-M^!R$W#Iraj3k!3LWaD^qrP5GdN zI)uvVCQu*|j)}Dn=-=f_S*qn+eZ#y$U!&Hb$L6+yO+G*6hruq4Z!1i?d3fMuas1|o z&t+zQ{Jp<#e|uxs9ZByGGJkLYV&!E1jd#6brxx6qI`ruAeK$Q#eq~4I>32WN{OM08 zxBh5jqUzU=y%>77skFws;=1DL>r$Ps{>w`*{ov9vs1YLmmS}`KrSu6qlhfsiRUP#) zuysy*M5rcFA5z&himWV-Ieqzt81B4QRxv9(F;BMezm$#VWI^GatlNWRi?5Lt$D8`{ zcyTP^M6#vV%Km6}4C}B*v7Ej~kuZUm&36DMU?SVem{4a zxIyr!o>davx_k0q{FJX&I+UHtV@k3XJ{(lurF=*Ev65DX2PTk}O`7@XOE0j>wv$Bj z&`E`-6$?*)j`~->T&)3IWv=HuG6cu79sgQb1 zkmoSL+)Y}OWstL=L>6v;IDJZXS1Ct!h8m(hmUhqfWkv2{ zoiD_ysT9BXf&Pt;Z75OcrfEJ-y;cdS@LDI&X4h6Yq$D zY}i$ngEpf|MQF3vPmxlzzpy--j>pSYw#sBpfNDknX3cAaYjMr^QK#l51NbkX%RZ2x z%h>pyBueCL;Gk3D$ZJIbWUysj9X3zTQ>|R>{ zECv@a$BXz4PJH*&%sD|}FeZ-g2H5UN@dF0F{1HFNeFO+}V3_qqe5D&7Mu)M6yaYDf zCw`Q82!_x6M`nupXQ~z(#dd=yg|2^_0AqqFFEQp+suCXb%;VG<;V&hhSXR{2)w647 z*L7pBjM1L4ZO)=y#jd{Y?ul(K{kCncu5HD|hg!Szt*u?#BJjX%yhuY%@{K}fE6H=2C;Yn z35zHXsIA@)V>yGKeAqVDu%OnoYJ1Plrs^X~h1{)>QA}H(mbN%H`h!1A7I_ugMU|{S zQA67}qHfuSrm|*B0jXB(s99X)&oiy;HkfQ$R;MlUR3F{#vl(1YrNN>hiNHS|TYc+5 zoV66U6tErZXl1%ZL%`4AfXYk$+t)R$UV)N*nT(PH z3I_zCmdgUip5BzK2h6Xks{3%zIr_ECn#^-+tF_NLS#jpZ-4xzc>D}O^XidPX z@U4BOb;*)O1wvT}n7me{fsTg!cADN?zaVozH08v>C*nm0vt0Nw)SN{N+RUTQT7P}0 zTj0}?N=DsYz_GYn+cXSLlsnU|P~_nz zUzwaVq5agEPsw-0W!r-6vh9Q53C#8qz#93+R3p60zkjK*F&>YB#(AsHBGHr>5Hv~w z!F~*LK{w(oiHM!ZLnRbCu%v|JV!%Bwrjb7GA~fLzqU|q)`t(gPmZ)_Ctf2wP=ghtI zA#o_%D4P4i15(scir=b#9?8^%io07pQ$zk&tuh0a18E948u3nvSY6jE5B8-1L2ekyI8`HXsl{w*Ax zSNtYLpcT9*db}R!8<#KF3UlLYnE4s`A5HR9LVL^_D}Y&`D8Hd+@IP%x&P$; zbNesuzp|g%zaNYF>bn;%tVXU;)18jt>btkxjo*DYmREmUS|_sesxetR52FPopL2T# z#QX){CXlDQ*RiX9_0IA7b>GGv*ccqLno}kCF)%iEu>HRK?%H`T`Wi~!l(_fauQj#Q z*R}7go5CG}uBqv3z4ZqT^?`$Zp3Q;75g4ALK1{JBR;)OY{97EWPqtsg#%$5i=RLaCr0hB@} z)2kXifgY{y_hl(N#i|;cK@fgTnMEZ>Z61Z&6QSn2-X800 z(dk$&Nbsi2Z$YU~@|25&Wh6zyxK>Tl3QbXCX7?Ahe=m!ZfMPfqN5P{>ku-!r)J&`@ z&&7ZT|e!|>kMOPd5%O&aSqg#b=_&Tc>CR+re| z*K^lDTqL{wCa)HG&JO4~JtDhV7549fswn`}yvC4_BY!0Ze-@`J@i_&|^?9Swe#U?m z;M_NY}8Sy+wOeOKAU5 z&3`UpT4$-wq;48XJtfYwO9R?OG#U<11hX}Uh^Hy%3a?d6lyPfOrb9^^QwBzlFy5eM zsc;aB<^YZmOzlfbs5v#Fvx{E;t#@BN{A^~+2^kB((dQ4`NZ^6}n=?PJXs%Yi#%j~) z&4(-wNA?z1wdme`=22jNaVxx!c8*}&rq%yO;(K*UQ`r&^zL)|ETFY0jyl>Wu{dU%h z6@ipwe8EG|ihb=N#kE#UbR&`#E6Uo&8fY79Yh2iz!EW(33rbZ zIC}xs+p8#wiMy7fyh!OKp1D<$$8LpY-SHwZ;U;#7iHt2jF}?#}J9em&^Aj2AgN{Pa zQz&|#05}KUkTUh&^y0-|+PoD%1R7zt_#wDxgyE2glN$lHaiT31BX-R5ul||eQ5We; za7aa2|9T#rl+OI@3+mn&I5l@>k!y;`NzugB`2ZmFm1pPs_=Py2j^Q}9vH?%a9Ake|*IO6wJAL$bc2J`Y)GU6ldvt{<(x zq5i(~k>2{@`djPo7B>Nh>W|3yS3ud}k;9=A^_%(@9!?%!akxcD4W*8yUQNA|`Ybh* zVp5ke>*1U3bJc&Vet#cvm_N+a-+TC?2;%-SZp6L~6&;%9%P9UsseDo_?Sa2xN`L99 z_#UbbOkNeAC3!IroJJjI@Qq)i0v{13+cY1pP(;ua<2e`t<^vO)3tmb}Y0DBF-(=C1`=x=T+OfpNGECKx>Cm>p0Vp-;5nQk|}7 z{cC|2{=_}B$M2<}Wq08EScMc)W}e2uWQfqVRkF|ys0K#HE4JYJdz?V-23qJh@(MYQ zZ*c0Alv{o%Z)4~-K)R}YIvoJtBgyYVJ5HFJ+VTl#L}g<;Zh8{OEv>_dP>awNw0t#U zUU$3494myzQ)y@|)6fQ)A`n|#>iba%u$L|ii3s5&PV5IVtF@pi^RvvKO>#hjZ{AZ8 zShzT_k$4Q`DOe2-bSu^v7z&rmWE>7;B*8L9Tqd*yZGIICa7}kz4JV^;LZzn|Ty9XS zNkXOy$`yB``WRFGz_%WI@SVRU93}c zXdfJoiY94b)Y5W)?c(PAvRGI9u#Ww)4t_D5GdAoqYHb~uYSpi4HTswTQw%HpWFa8AS#G)QCU$)kX?An#tkU2 zKqNwlmPAB}s-0JX1_pF)2~@fw235hAr9zCAS3n=nn8a`ZX_|;KF5)m7pjL^Ut0*D% z%mOr^gJBMXBbsfAc}>iO{ghNH10>qETJX}Nb{xdDjkPd(9%K zCQiK1$ypkQe!OU*U#HT@;LUJ5b&qU?HS%{UM>JWG?5 zhEd7+#b119uVr%}(A>7KZlTtqkTE18R-h{SIt%^mOeVtOk{6?lBs@R@ zrY2^C4UHvyxc>0}rR+Tb+p6yU@pJCf)x6rnvW8_X%eG|8Bl485w;jh0nU3S^MaXm@ zWRSsLW|S2+A#CWN30XjC=!7nyl+y9~X!`;Mih;H~N-2^5=XY-4o8u`-=}ob?n?b_N_exLT`;Ra5E32PE9wj#Za zHEwphLy1?|w+PmS)^klJ$qz9Ep@gZ+-^FyTZ%~@owj6o|OeLv}p`9opC$=Q^CphSl z0Igg(Igv^nghs9dGpBX?BLY(G_c!Xw2jP=7B}Z6Qs9^`We$}e>0?h!oj(r05Jy>7s zG@lgvrL`_8R2nDC&01)0&U_;T8USl$r)r~usC+wKQyUA_)HB6XAhM(13oVEEmXa#7 ziDl$yC${bA(F?o=5Wl~n!o>2y_BlnoFXQz#q{_nOpTAodZ&M9y?F)!#5d?=$(CLbz z_(?qE@S2JR{{{vp9hJ%4Z*s51J!Y`g3K9=xsHr2H-9@(P)rXnkDAdah`G>OsSeBuX z_DlVOUa`Do`N%S9;Vj|<6$dLA+V#)B-g&5Or(q+sqJq9u2Q_?_wy0tyq``HvCPltt zH5xSw3wlVL;03&WR4l5d&H&Z1qqxX81A%S|RClI-Dl z!d9_X;0d`W&V0_B2&Yld4zw|=Eww1Cltsg?Wi(gBU#u);T3gvmGRDnH=kRt-lN_ta zG&LE=oa4IKSnvdXBWu=;R9Ej>Hok3q?P&Yjk@oSKpgYqn|1`y4APOmY(a5aRpEg0M zBk*&pZWBT(HA$BCz@j3GD!{6iYGh2<4^ocy&=Bo5reLfC%EJF={z7Fg2KTBpdZ-y8oYf(eQPDw&s@d zwm06o*L~jZrH?#z@Wn)lXwq;R=&QuKb)3nQ8gehI@}!bF%>x%7xo~;z=l?laR$f|B ztHa;^zcVi2T-@ZDGk;@S`5@9FC+bH#(Y26d{QKjwBeT=wP$+Y9$qK@YmB_kLCHmq@ zB`&rop5fjOr5_T3dbL*IH5P+m-prYcH_kg`+OTBkdUXx_0^@ zo9A@CND0_G&X7em(*h=+00akA4zJ{Yve1cX%!5~#PyGxzI4#UnZ*(ZoL4)R@;SDs4 z&I1^liAaz$QzBy3<{u?1USHTOv|~5zHS2^IpcL>L7_sGCE%L z*sT^ z_2k?OvwA5DZZw5|RSRTMlyyokFxay$TU6v1%S_OnQIZCE%!6G|wh{1wE3>v!+AMjm z)t1{0hN6w(Lw0*U$MiH6A<2a2gTz)hBwAQ9$kp1KPI@LaAXcW$0sCboGo(&&Axv&BD)Elc6c>F)&yjvEoac4bZAni#6+)#f=jC z;fD)%{={>^M)oa@=JO)COIdWP9om>))umw~{vopobGc)=Z0_S<&kt*$vsh^IZ|wc7 z0ac@A=ZGC-%-F4~o2_~L(^mUVu-Q+KQ-E{)*9Z}{e zL4{VIa}l;^Tcmh}dZklIDu!XcQBjDdtN}67s_>dVFbae+4Vk`dRdr@wAC4;J>2zOT z`QYftf(0XW-ISPv+6DdW~U3iN2$N9kR1SJ;u1VfTBCA4mKrM^q?B7;K(Lhn+@pnSfVVEk)i;^DK^am2_aND~ksuskG-&zPQd0+l2h% zXtvhPpO`z(5w_T4%Xdi{PgiyB^=?L=TybyM(qZ(nEY2_&ZRu!gWywDpEXxd+9moAQ z6|=0xPWGNe$bt)%lvOwOKVMbRRpgNvqlh1F|I-``r}MCage^`{#CC<#mG&PfkwrVJ z=Lw;BeY2FhdIHCFlb>^U3D1y?QUMzUZAI_m$Mcq$`Qh+6mKfSnRM<<-9Z=7mybzD& zVSb$;q;bR9bLqIet1vFJhM7P43mVWr%Hq_bp+yW@v?#S|nlXut&b-7|qx|U18uZ7> z52^8~8DqH)qq;h6$F%e59k|ccJ0KA!@V&X>{5Wg*s=_!pf$q#TBWKo#16BK~m@4wH zHKs;t^h%C`$=*T+I>>#FhSBe`bxFi96=iXrEiY%;3z!NU`N)=6uqMXOM439KlbO$~ zW-elGXNV+n^bNJ+_I774(D#ht*~5eIrcV-_rg-`&;c|d;7?+??8MsIa)P>2s`=B(P4&}ePAJZcU&G%4yT5hVX(fR1~s{< z;N~k-rJIV$e`kVbgO1TJo$0IdwNs%;A}2%nR16hr)fiNo$q9JE&k#&eO&iv!&Bkp+ zPC&~pK?H;a5%}ps%CuVa8_IeIz>Ho8)|Dr}~(QDik%R$X8ECA_?8bgPr@~^e8TFd&k-al`3?)nCo2%4~SMrlMN zduEjeZdhV7>m%o#;$YhuGGSjw8l;cOi&VWLK>Ul%YOx8hWHwtJ|1U-!-32fLr{7QNptex>-WVz#)r z+f?o^XUf+*Aw2+}OFrndHujxGX+GjfK>tk1%C@l;#3ZK&<(HZIVnzC9>B z-6o{So15WV3AN!m@_$3yRO4KtoIn+*G!5DLgj%)JWbMz;pdA$}t2K_N7XE5=)obf% zbidj{nJ!u*hC-Njv98`Ohz`IKXWOq8EOvxBwr~VE3Sw;?ra4*GP*^r#*)me?GY1JM zSU7iR6muG**4ggT3QTEHQOSl4)l~#Bvc^4D5i^&hQp|qisY6{u7QNmnabz7hw_We} z#Yp3_;l+b(GnYq=IcvDoM05dG!)pW$&uR6XO%iN!(+_T*cSWUAHbUO~#>H{`)w~HEUAlj+ zD~n{WSuF)!Y6}HpAlGW zGD#(XAdX9+b24sie z2dguqmreGJAO}mxOR+B_&B0Lto6Yt~y*}pMAP`A?OwwiqVd0z;_{}48E63+TrjRKz zhLqSy*G#2lJkW)^lB0lW-vPNhL1SdhnX`d0D5(No+8KNl3g~3WIa^g9%hm*qphspI z74(*=8aYI9kr_xv2jn^xR5pz~g%EA<4csScE=XTPXL=FJ(lw@#sbFFTjcKp0sGne$o}nZTC4jR)&m5$P?#G zL=oZT=-}<&#NWED-l7$a1jEk4m)1f1-kgzL&Gw@X^z2DOP^Yp+Cxn(*tmH*9szxlG z492P7A18mYT3y3NsB~1O)D2f9l{By+Ta`A%1XuIm^5w7ne#^u`RpF0(g4IM7h$<_vpt2Jg?{3>aiP}UEMD6hUFBsX}X)IH$u9~1I zh8t6Czi@BId6(X!ocZB{H*Dxn)%R68nl_$h%9qV*-EuUZH!q z5ANxizoFz0&fz2o6J7KVf!d*3rnYweW*`!~ad-oB$+q*^HCyr4ZSmoq1V2c#Ac?$r zc)rHJy#z{B*dnp*(NVQ=`^}Mq5k3+@HY%FxM=rj21)4QW+uhgAbZ_tJ85g$mqo<(S z*0^|u^9tsQ4e=GJ70il4ZrLZ4Xtt_w-slNgPqnE93>LIcO>@f$Z}_5vx~r`u%1OF}Ll~ua4Z;HgMkN zwt4Fs);$06+SPvR`PhQzl~s3rVcI;W)n=4u3|u&OcV}|YsWTUKR6WXlp;@@sQGCj1 zWd(<^H}}~Meht|ko!4T!e&(THiE9SKBJ?O_H1}Qln-aIqtl>;77fShVDmgKvGn*Ke z6Ud+KOi^id_Kp{pAHc%*&tn(^qrv}l*Tnj(v4OE(6sxVM58t_`Y2A-{cP;ChPvha= z;^(q8s0Jx$9(q5kMGn~!aHJfZ103{PD+*;ZJ&QYsp@u+qV?dwMGf1D+GkQH|U43WZ z@xX}y8_;DI-5J3Voo)~hF5<-Oq62B17M;!oqJC~W+qWHE1v;j21!`W`{8=;G+#K&) zfy9)U6^F!S;(qaI@l{cS#4X~-BI_5IlJA}tIq?Mk){(WfxR$nf(8RaKuZjOX&WUjh zC7x38p*R;$s*S7jDO_reaWyBE=8{ZoRWnNRiCil2LBIP#zAEsjlITe{zHO!{k<~u5_zUpwgGIU;*z%k5s zB>m{&{hWpkthsqxD6r5=R5?*QWbwKhI{K4;eWZV3W1y$hZ42c#zqxT%)9^2U^xcOm zSb>c?{av!Na(3J)5q?uP`AS@-9o6}z!{b;*{-HZMXzE%2P#Bd=@a=`1 z_0A4>*3N%@RyqdJkm7;-vojjyhxV z&+H4lohZ`tRD~S>YVtMYCMx_Oi)TV?+vb^DW->DiA$tg`!}Dph5&bG_$GgxkT-=a|>= z>l~M>1RJYwjW%qzYj0dp-1bq(p=C_PNylO#v4parg&jJ$@+V}GyB!`JahV!(`t=M znM#3lI;nPVZY4{dSBp=dd7E}{rcHqfEQQ5`ew@{+PEm<#Td^AY;;dI&H|P021Q@7| zXKBl47GhnTxT&pg$nC{-d=}zF`pRb;e zo+>D?%a+CC=P0o1*tLbR2}nLz@cS=bX(~RaT829AgN1PkNS+#Z>6)(iIVo4_xDQS} za~a-W@cf^@!st1N_o(B(Hubz^=m4VZeFJ6h24emR*eHn(%$g-ZFJi`1 zRNZhU_s>h`v=Mc2**6{;DsHLAraK$T9Yzz!63mZF<#hF(FPyjb4{zQ89o2IuxFl;v zE76a#rP-`O&e-9_v>KaMCsz-yW}VPO-3fM@sqomNWUZI3TLIl1wWeOBeE2-2TA<79 znTr25X`5C%byT1lWJ5kY#ScVcYF87M>f2XrTr_j1S!qACVC;cKzhA^G0u5hZv9bQp z1D=DPQy$hs(C=v)PE}Z6>K#d_(XRQR>();oj$xvZXS5Y162UJmZG=d#e1->jMWElS z+8CXx?;x}28nPnoyPl7GZJi#Zt;S=SFbkrMwq0k%qN!l&78dKQPi-2$9o+Ju&|ta6 zW;gbmWrM_R*AiY=v?$%4()P^YS?n5%Yc;H^=z(~ZPD`X9&+$!xG=3yi2ybYcJt{d}~)TyUfvq>TNe$CmZpxsI-x*k!{^<2t+yHs>- z&Y-SY)r|znPGi67@PJqw^GPUB5fEHHXv5MCjBUdjPfZ%1KTRsBHv!x_qT<$Nw5$nk zojEvj>CDYDIW)7&RWYR@P;brP?IFC@W{aY41T-51hYVS}D`PN3BWnJFnvsCih%HFTPSRrDiLlKCCFny@ zQ1DoqY@IK!4iyHhA`P2hIyuAD*)M|FF)M{F7d^D)$ttfuxxB1nDTB2&OO=2Nnnn0| zlRtsq{p+{CyK=rSYL9RFTJA?LfBS)?ULt@wcjj;01Ro*@`@w9nPigVEe7)VB9qkQ5 zUqkzhUZZTb7V|#CjK01Tj4x|9_-qD)&$_t1MR9q!_Pxb-HwX!$s2@o$3NxUvhonWb zjeqxH-;6#sU`QD{4QmZ|8op@|42HRt3uCbb!Yy-YZ_5eQO9UQ-(@FBv-=P)N3d!gg z9H+FFC^@9l)zzpH+|-5cm*5ey=3B#-2%)LAe067=@a4;iLZAsF7TWzXtdI{rC?t`& zZMvXGr*jvVwbYD+R!EXkWVA{`^(f2QU0*4m5o)XM4Ax|41#F(UB#_WaA1~sM)wEg3DP|WnE3qif276gXRp|YSJ9K_+oN^3Od}yS*p#gl<4H|;j3fh^v-eG6@&%HD6 zBzL~(6uqu{# z9cd7eV4hTqXI<%)H!WJU*%)N+SiZHdo_lTfg5g=a9#}hb1YsQF0{9i$HOror*taC% zErbkuwbv`Hem%V{R;bVxYpNL*V$hrHA;!=BnRZA?9IR7(4qjTA^bXRp% zS63l6AJn7$!hl_tp-bo-7KBN*CJzbV&ZHKe_F!7K7B6o zsQY||=lre)#kFS3qA?Ev6s@a?h+p4R(n>~O$VtrY+#9GERc4J?|4+xaivB6AmC-#} z_9U*s=%{>;)#~@r=~92(CufLW5545h=?Mx;uZCDry_>nX7%%M#MLnAwes@WQ&dZ!P zH`LlVobV^PH+1~`H72QFV@P!geETJ?XamghSJ^k2FKFM3BGi=CdyH#~iVS+R)?iUv zV0elg&*Htvi2aABcf zx@QpB^aOs4$PpcKoh1ABisL-1*~7903TizAz3Qm9M$P?JNc`7C=}dOe}`D~J$fO?&Ki&7O}S$*gEkFiRAjAk7~JsR^cj zh}Lg9_de4DV}sKRxpaor`~NghSs4gcROXiXlNChOPfdFuY^w;8KNXi&R0abTmA-JI zz?AvcsoDvt$t{!b6VRY#_OQ(EEJ4k?!9b+bXLjS{R95Ci%naPmddLs+KO;Ph1hO?e zSsjvODIl>QNmxqKUf2`ohVuTdT&ZiQ$TYH^_Oi%eTVt@3Jiu#{f8}rI4Je8t=t}hw zaz7=H0Cuta7<>=ZRA{|t={?LnIJvb@@!_?}KMO77q6msFIeUqnAg`wx{B`6v5xkrn ztxXnAM~JPY_b5YmOuI)sTZG#g+y)&@+OlSArVZ(`1dKhP`&h^5RBv+P>^(o=|C2XN z`J~h#^v^I%1DTD&t==FQvWL)f6c3;i`SV_zd=HWJ#f=Qkz^yWXtukmoH1B|?oOX-P z_}{?K!e8j8-vXb<;GwBo+&lR`{*(_f5xk7vplWg(5iOpq5h62N%C$0)jkuU9+7zkQ zPFrRHmYImBqRAXL&RfXm5V;l?f`8B;+Md;u-DWfjGZmLcq2*Teu3>?RDQ&~`6-qPt z;&{Er1RhfjfL9|Sk@HOimziEQ8fTZEz<+!uIMO>tF8t%+mhmpgs2Za6k!b`!w0Sve z5TpTU5YY+SmzGd(#n7$M8KSYZOcFz-L%V2YMW}6@kL)h^tV2;TDnb}vJ{hW>tyjCM zMRe=@-c$&G@YNqOoY}77gMOPy^e>sw|MbIlmlis5Vy0?e%pwM7mxN3WqQT&GRN6dc zb6YSzW|1J}hb^j{)u-Y90g;y?r;lyDAQT+%*z{$CE(YRa96h-|KeFASi zoUQc1?j_&(@@dmPXi)9S?g)nk&o;zbw+WI%w%Icd8~LM&CVtrA_(9eS(F!KX!OS-e zJMJ*u<@mLpZ&J!%udYpvRl~|h$zv?5#?{r1SshC7^;x}2@z|_cCdYa)@E@) zkV6eq8VWG^9@A;6BIoVCg8AIU z8FMQ*CNX!0h4YB>^idosWb$y6WckY|IW$auDA;(0d@hGQTG+#A7WyFD+7C9eu8Mek zE9$Z#)D=NIe_0@63j`u4V6$bAY_enmd{+f$MG+;As+BgSSkVqQDKiw8Vuo!kHCQzj z8ggz0P>|JX%~U|WjS48tQ4!GTG65(CL&zaOi^Evd&pIPLW^LsDDBw5B&1{^Iv%9OJ z`Oz963mqAwre=r_7$0?msHRaYg+eb=wy*?p(G*Ix)xv40+%>I~%e2ta1lT*+sp7Z! zvMkgvHdU9!T4y1QBke%Wd_@*G3z)~*5--3O!0F9gzjjk>l|k|?bkykB&e`X8Es^z} zQqHK`);&0!TEgrvDz=z4xP4~a>#EcF;v8G?%$5s!&Aetwr$z9Xjr>o$Lkzd`H@Ta( zd%k>w_>rt+CD_F|F4^A|Fh{o;{7ZmKuy8J&?9Q(;*~G8!}-tF=g$ z{;H&jsrtqefvmQ1^6$dEbn{oz)u-W9yg)uDDKqGtJj2Jh&rmH|i>|`flW5!IyI}F$ z1jbQ`yt&ZjaAsn#0w%(eeIUALF9lAp^aOStUf4Aw&jDsYCno*E9j4Z&Tbb6@eICNI z_Z$uG5SfeDpTP0M`}SN8meH*{_G$J|22aMm9K_Z|E`u?%0cfR-yoqnGEPmYub@>AuCfDV; z(mF61q?6>oPgMCpKSBr;!9bKdK*KP3BF`bQ)*hoB|jHASC!}B0=jsR{?=uY6PtgVZ{% z)unniue#-Ht2ecK-8!v+MTTL`lE&N{tjzuRlJ!Zwt|r=R6}2*pd5*bN5Bw&+YU8Zl zfkjbC>lF>aZnPX>H}1N=+~<9i-|)P|aX9ydUbK}}&%Xa#TXA4rTdU2g(HC3wn#$az zk$=FuA!sB+RfpGE7HYI4b~-^oId@iC8bf7si~Lb3ce~K9c>f=` zQ_ijFU)WJBm9}jQX||2ejzda9eD-yPP#vP^3IK~#_Z0s#o3~s3yP{@2LHdBSBhL)~Und z|CAjKRiFq>SnH>mUio@I4wJu5C1q2m;{Tjs4P#jAxxM<_Yq`I542c}i{kvr6`4y1U z!LsH)NVIl3@wacO8p4hPHJ239Fa%L1_toME7mv)xzajL#+jRdjuu2xxhZ@S)kb>F7Yf=B6y?2m!QOdUR(ZAT6rv;P`PiR#ujYK}??31*gU; zSW&zz60=1ju~;m^BDAL>W~-=(vH69iMWA$K^()dbk!5{-&*2gp5%J4oL&Iq%BAQO% zE02mhd?D4%?bB4im6eqldJKo@G22}1&#)TuEvq39z`Do-us*_XSeM?AVP(PvZ-R1$ zr(V@H0YEf)sR<-t-He$H^Md1ZKm=APU?n(g>AjIMC=tj@?W0>g*&ifq2%;>n}8_BTj+ zKhdKubJyScm3_XB72m*B=ilIz%zlnHi2}=u46oB@?5>uIJ0Iho>(15Vt8*{*ItIsz zG+NeS`Ds_s!9tq9$Z9pL`$qip66NHv12#Qj287Z%!q7BYoiSjiwNiAott*U$5D7j_ z2&k445SsiOcQZk?wdi|Cs|i}ja5Ui3=FIRe@~H-d1|fsbAV`7D15z5NtCe&aL10Tv zChG};(iRC6iO2(siRmsL5<(8yk|uSYcO7W>AX zBUKpJMaQeE>g%XaoA#tvH4?R=JAjnDrqV>~)d2|eh?5ZFuT>r-NY5 zt2^yDH@PLn-RWAK^W`S-Tzpe+xTIrd_~qQDOLJF-^w4BYZ`QC9))5gQ+MGq*wc~gp zqo?Y_X9PcTs2VjO1&5BtWV;*mfRB%mBh3Q#k~boJ+jw;vr?lpws;zdL&qzHJ zD2b182s}M~Cw^V6b0t98W!1ij9b$S9V2tXv?%mA+}`Emx0!PRF% z`DKJ-c1SO0bf9wRWb&?8*A;qM_k$4URFdO9C8jiv)Yug?Zd63226X?L8ePi<6v~G7 zhfak!nH-)Dy&B>|p^h0Fp#LwU1O1{M^b61=w@%O)hSR|LPrq~KopTBbs`!Dv!dXp) z!)TMbpuD<9wI!uwxk`h1Nx&EKJFD}ZdGdNF(LU>=R;b8k;p;3Awq|9>O0+CVzL)#& z8*o3auU^%lWpFL7Wwn`&WjFrn2Mboc@chH6(H4o@{nlkenEmmYfY`QvTOQSp`M4(9%< z)nenp=Ux%d^wVUWKl4v;XUJyD(9NcYG=H+$=A-+MeTF`BGYMKEuap3|W1a7GGM&S2 zqAAE3C>w+f4THgLvr5>;8Ldj~@C;aEQv)L^)?tHY)~to+^^VLvfe#!*B_#`@BSdx| zAWA@^q8o2l&qK*tF^iw{h$ejLqG(tr~X6+Ux#o zW%w%^$}s!W+^E#t#IKuoo{Q(Jp1zl%GEXdC(d#(*FqT=VVSTB@;e(H*dCt|hWI5ko zkGb5R@#9s->L*%?rxIX&8iNpOxO_{o_M#ttbZ38x@wk^<`rxzshNYJVw!QG>6k3CO z+dwX}z&LmBa}Qjx(C1-#Rt#P7(aTfC8{&oH4FuXF8g>F6$G#4iH_hPg=^jVQJK=mh zkU#%4Ip2Sn!L(qfLDFYXPo3Z-*Y)SGQ!i|ve4l-c+Kg1^YN}AmmqFF_UUQmhIP2yZ zntY%62|af)b(p4Rz7M>O6$vN64&a;Wt_dPY7hQSq5b*4GfsN$_l2g zQ80EPM*XpD4GI!f>c6sfox|zWqLNCM)jFM9Dp^})C7YmeB1FQ3WurOcr_m(E>XC>a zKP|*X7?>M`5rN;PjFv?uWS~loTOgu^310z`h7_|f%0KJgsZ z-<$hR|M#!G^t#sXk@>!okij?~MSj$ZEk~Psf}u>)iOCa3ihXe04-x_D`+)>#0&qws zwh2rKlEIv5lx>bo2}J;8HGD2I-#(XFwQ50FBDHQ2P?6bQf?f6131y8XJA6{(lU6niysRi6HdF*dn62tjYs@(4;*cA>7bZg`lPGh@1a&gPhmu8u zMNCmqTgwxB;E>{LN#aau=K`dz4mF|)rnhdguU8-oOQ&3$Rn#gF`P z>$mQG^mpUe-?i`1J@fP>4s)a?Ug|6{>B3jueCVWbGWXg2W96GRmtBUVSiJuCS3mLN ztq<-xabfglckliH7a#n^rsbCjT-@)D$-*1wKa#sF_vhRPASuWqI?1LfMRQIfmduoi zEEhtd^(Iyn{0>bK~5X-%gI zqpyY#0E&_e!diiQ3^|0IhrL{ zAC+QV^p5a*7FJV;3`5wBBN52Fws_n&kH>A&h~gHr$!0d21UM;Zv}Udiycb|RF3bir zqM0>Cekia6cJ39}^1T5mPVHrcII&#h&4eH*Ed-X>Vjwi~ff8DPycrJdOkP#|YxdVk z9z{Y?jmaz$ROd38Gm?~qIh2cWadEZd1d}+-vhin`C?ql+Aa5F%Y9>`cVdIj zUM%tY-b3r^dzL+a+pYz_{PqiPzVh~UkB;xWWf!Zt?xOZ3m*hSP7|l8>zwFIfO>N6A zT71E=6?c4?JNU>;hVoDD-2au|9rzDISX7)4!b+mQpM>^JSv}$44-;uG6Ua|tXm`9k z!^!l;?jSFOKV;FM4HJgLRj!&vl%^$XCn*&(u5buV85?& zKF5?H9ZE1|$8?ZT!HCJxrb65L{Gt?E*uzr5LXah*YC(D;Q@tm7Nz#=_6v|Jd(L~r; z$b2X`OT|cm9iNTxh)#XS9Jlw}wf?@_cI^1tjbm4p+BV*O)29Apduw-5WvsCzIA_#T z(Yoi7=ibuXJ?Dm1m)2KZwDHCb`!&1QHK$r#MKzv4xi2`YqJ0$RKKBdeb3TL`(W@ts z8#X{VnyHY@`9k9!GF$jnRLk$JudhHl)+ZBO=z~38dV+}_jy(llgQMUz@VUqrS!ab* zyPsTB3(m?~nb2_>L|jq6UKHiogaOltb1RupDUGj9<6tmdRLdF+%?U#1M~jM@F=k=- zh6d|N!eOb*gOZVI5RFCc3RJ-Dbb=ET6NyA?6K#zqPpG^VJIQ2$I0JS{CQ#&PndH{# z{Vb+2QW3t9^F6PzR+_W3aeZ%1U9cxHC-=r{4;@IQS1!46O}akfb;T=+$}-njo$D@F1@7bTp5V zX{We|twmMnxx=Aw7 ziG{L!bbnbg;mq@s^y!J@MDk3A`r%qf6Q|F7Qk?{cOzV^l9zvFYXBQ+Dt<-74vUN(1 zsl}_ALP2ZzB2?04t7?n&&DK1AYPQ0%A#wg3Yi&bgeD@+`lfV2~?g!vMWSLm*mE60{iSu!Ec4w% z-jbKN8JXNs&Q{|07w;%95r@dS3fvB@O^Ta~Oo(wui;_tJIJF3zTC2-sMJ$SG1JJ(A zWC`sukOKY|gBgb(=wBDe8cdmhBfzj>%5*eDRun;|13B&0B3wjU2|)4Mi6nhXbx|pVg7cr=^zO|a zJ(0G)ACErWZ#e$QhV@_H@%r_1%6u^;KiNxpGtqNi&w?f?Ng8c1=&;$AX@fScHYiD2 z#4uYll1-zL{BmV7zZc6Y`CD^X0gj9#`oGYc$OYYRF!3t}`ZFA4IiCX*f% z9m&G-8tZ>*Jv0CabnSPWQDxQM06Y3D~nK7=5+EjnLDS- zYsh>OkW60z&lI#AI;Wax;N@z~_cSoWG$WcYYtUUxn9irwLNypV=?p$}NC`SC+VHa4 znVH6F+1RqYWB$y!*K|5dGnQ0a*}xslNbb73TMX6`=8eDJxUks%rzdka=GOj~V~Oiv zKMs%?EG5|Fc|xu>blXX!Bhx}ygcekjwAGz4==EEW&4%GV2AZ!@si z41sKt;4->1I!3S=ta>vb3ZfF8U}9O>3PhQ-Vk<^gR<9S5X?N0@b`c_j-*2YXlQW>; z5vc~m1(U!-nF$S<1eN^~^??sXn5ZhqELICtF(Pz?xBH!2E-NeZ&AhDg??sk1j>CBC z&B>rIp1U*mGPb-ovqv6&r$@u6-(z#{!8&1PH;|DD}%WSB3`9w8}*JZM6}k zMKxioOT_>of&uOb91Ae#x8Bu%5I-6?+5W?T(A8$~cwz>_tXO4b>kLq`Vz4pInOJO= z6`QEmHS)JwSxN`5n(lsnTH63CkZ(8w_ zTg9!3jrUTR!JuBU{~u?e(3T7BI?4^HPMD{&Uh-xiw?)g)m%Ft1I)Wlngaclwmf6ah z$$P^(BwE)AlE6w5;{erzg~UE04Ox#2U{Cj^gj=O85+i-#mOmXGRp)w?Djz_dqlwW` z1hY*M7nAQ{;VekJJ3x?)ul1oGJ_aLlCcnBxG5#97?co^by=OL z@QNVX7u#$W`Z?y3PA0I?>(<&R0J3ZC9+_P2`4*ub8AXXOOiaG}3}Jf-g8AoB%r9&8 z8Jr3yu*`QQhm%YaBDg^$kpCtUgndnbJQ!6)!Bhz>>H#3Ui`JS8wJ>SE9>9^Erac!V zg1N>TpmIw>I)}BpY$2T@H7>_PaY^!Us)pkV=wmS`aQ>+kZf4>O(s*`OYm)t)iAWQ)4}y@1^vd21Ivl0Q?m)d&?rWpbVo_yTp! z=n1tzG(#!YYB|{Yo3 ze2M56RsdsGncP(ZYYo}j+7o!*VM&S-(mR6O*iGFJMoZ?P`;`0lZq^+HJcEe9H*XFN8T06Zn^qIv zR^*OXc*|y7IPb`-?;Ib#xjc}pt?s?@(R&`*wP9%OO6dYItVIsoMQnUF8QrC#sq%g429Y}EQ6(tYQj|b?-1L=S^ z)rAOn(g7KQM%Al$jLa57#U7w3jw>d5K=f#<7Hhxo=G{f-PDJZezk;pU9-Nwm7912y z3e96{YuIOVzkK=E&wu@=PyH54*KS|Bx$m;oS3Jntw(U7_&)aXFxc9a4i_CMLT6Oug zA3tzVWo*m~gs}zDty!I04u#2L75P+M*&m_DV`LdI_8H;#>4C9zfoIrmw*snnOLoH0 zj&62fhnC>`d0Aa6hLf?@!4r60cGN37ePDP#b%g9`n$1htn%5gD$vY}(Vj{p?74^45 z(U7Ke-i1jSm^077Okc*dL<%nSnzI{jetj9?H%lHed&cT1yXsre(YSLiQ@wC=`4o2= zd-#%5z@Dzz`@_#M6DL2N8uAIL`_L|GeK=xw00;OuTSkbNhc0J4tTGQ~8lQ|r_iA49 z!oqrqrb%ANSyZF(WvK~*sJhW-o(7B$$}eM(B+E&{6AVeH+?FQ0A4vFgekq&M1uHCP zw$Y5_d~fY(RgnNu;Yn2 zT&DP8m0d;zry}|j#R^wxBvS!DJPOxDBEX7?+D=(Bk;%G@!{H&ExBRG9>qkl%Xf#H} z?>AS#yJ*&Af(r?RGGwCBIu9T!GvFn2#{5Ms;3bgU6egWM^R`(v1LSEwk!U(|x|L`- zd5bkq!&-zwosI}|?u^yTw81hF_fcA?gK&Xj%s9>QKux%`MK%dPdTCxud-wc1uknP~ zc2&Lkq#E2ckoF69z|(nUamt87bsG8xbQ&W$ugOLeK%7mKsblGh{!#vZtDs5o733M<+Ey^B^=j`-Vw+G>&m=cg{bIZ$6~)jhQ2mfR1M8%zf-`wv|C@4I**{_pf! z)2ZR%+<$%RZq?#p$!@_D8lmEkv$mMPClCK=0eSWwc0M332&aM;OWvX`GhsP5NbcR5BD zgk>{cxF|p%niEVJa>n_^3?Nuap?OUyPqbSnKAC|0>cl&gU|ZGjU{Ht{@ykSOuF21s zO0?R13I+LwF^fRBY>i{{_kLw63)Y59n@uwR!mlp~1d`47U+oHFbCGMwsJ)!M`|E6( z_VVw&l>4py`in;+71h;E(F@1ci+C}vdM4#5owI4+x*v0l0lUZd#8+*OUzPh^?!xzd zAN~k(n`chG&vmn9gnGYm5{1cRy2vlF0$a0!s5XJ*GJ&C$3Tq4bV?~8Y^QuP@!|ZCS zNupK~D-mA;%x-aUiAE#DkeMaSr1VHxnL_};t_NPP%jos#68PvKJi~5Rc?TKLk+*I+ zzNn_wttnk;0&);(OcN-eXNU@VdP)pdrNT7H3Utl9e=2&mJzc(xtLjFa!UN2zhOW|u z>z?rK9e?EFugn~|YU4BKU2ZqkS~Byuv{$UR)R&c%CSDqiJpA~(w-smqcKc(m9X$Al zude#RwMm`U+VuSkuldS(wU=%v@9Rx(n4Fw^Z}NRS!Tq$5-GJ6ku0jaK4l_8O4>XHY zSGSIE&Ui?R(~R2l99-S1ubYY;Is)|{qqT`b5rRb6z>xD}(_7I}C5n2RSAW?v?hQ(8 znkoICJ=3Z7ybrr1N(NRP(dwCW{pp#T^P~RltY_SzKgTn!_8y8CdJmzsIGcCsKTLnA z-k3oT->fyTsLNMTA^tB{=K?>nZ-_VV7n-K=*1g z+`!`P^X9EDT`i5-4y;o22yq)y>+$;ao3h)Rnv&aVYBm-hh>ht-P$@1g-Lz4yt$MaZ zjOx*np|K~eZ`M@E1~F5QRwgs8Ow5!Y6(w*j)G!1mDXkPkBSmPP80dNvh1d_=jM+$S zee_H9Ve-8Jd`$ZPr#g(4I>}_jq4V!Px^vIvkWlZv$Lx@9+z@rl-qMlfSbb&PvVg#1 z+`4k@1zUo4M&txjk;Q~L!l$i~?=Ss3HvGHFFt(b(uMgBQ;yq8@h1uLEx!=00{`8;N z{Mz0{Ph8m-DGt*LF)Y?_8jqmY+3H`|ji0P8zIRA;9ZE91V6xR*)LAJ<6Co=*RTsus zK8MzY8OhqYNGLaO&m{V1?r*tQX)USGx!I8aim%G&w4y>@`r=g`!c@*UWO5BpzQeu3 z`%w@2@ktaRKblfL&KUXTqU7= zbQeYIJ>*Ie;Zz^y758=%5wBw=Q++tz+)=@{qGTM$EYw)v}8J zd#gHLM(F?z{T56Nr52i860D}-N0fMiB?$X($DvxcsPPyjmSY8;6M2nMcGh;(mIZQu z$IRO}xnINaS}cVudhfQE9)9rqS9IYE@!UIp;?rZJDCidC{_9lk_sml)FN8awQ=Gv2 zyx*FU?-aMF1v6~!XSttZ6DPRBS9Y*cG`afFZ?|I&ezMU!Fgw9Af6KjAs9wdFG6Gbu z`Zu{EiODm}okExf5}iT7HQ&Pv3w7J+dE^SjO#WqZQk==RlI5O@m!3o^vSP5OrEc8U zTORA|kHxm4P8&j3YqN@0@eXH{8pWw*nV4!7t7Zs%Swk`bs{KGD5arPizTSS9Y$h)RZ1rmh;Z%W{ zfc&j0AN)a&8 z?bjIej4>4)*0G&K>$_^8XRuMfqj~v!XV;2$UrZyXh6kMg_o~j0;zN<^JV|KjK#AUVbe%oC+CuqlLk`a~cC^Bsmcy=2iAF$eBT<-VJ{DQ0#dWhHQzm7wIUTq!M5_9z>b?%|=G%3LV=een=84rdyqj1pDM z!%|YIQ*=OC+8RaD+(b*a<~{%PXtJr!?HJ%J9oY}_O=H71@jJ(_RIVNw8`q7WuQ(t% z=GzeaqujKCSBXcL;rZL=kC%-vR!T-%$NI ztMy~7|4U0byNQwW#6-j-_weWg*!QD%KF!_tlLm~7y5lK{EG=s-&Hb*azakyOg4Wsl zzh^H@wTZKAsuuWUQ_Jn;J1aA?AX;dnxS;lOm)a;U6SdfA{|npb`Uju;!F`W1zcRe= z@NGYg>D3l&Tred3gC7-5tJwj>}QlVDJi$C*rA$a{n%U z3e_eIv;;AG7H~z?x_m0_{wv&?>aao12ejq<7tm$G{~vpA9?;fx<_+I-cS%?KzJV5m z5CRD#kPrwE*BG-H1IE}E7zZyH93w9zcI-HgoqZ#TQx8d+wuy&qZMvn2*R-9wowQAt zY22AMo%Zca(!P$HE_BkVo0%p-yyu*Ig|Xu-Gt-&*Bbq)1fad0PKLHUzh`DWQdjW`1^kR;_j$hn&!!A4%&dtgr;S_r4+l*e< zoc{b+`0w-I?Fz`aj8RL(eSY8e-+?3Xvc2P6`Hd|YmMz&*qer;Ri^uptXvSEQ5;V(B zXcPs`KB<+HX~l@_UKx?CDfIx8ZAjz&G?#z zetsy>D>jKyv8dHol=a~)beR|+i49=GhApQ6`P`6V99dwMklKt(c=YzvdR=iS)t`Z1 z^`mlqT;QsQKaC#`B}wH(6uSBBgzgl0BonM6&Z3cKzVS5{YJIYyzhlXgogJW~V_PqT zbL-cKTvNVKGUP*n6Fl|U4q+WiiArNf4A?8hQT*A(DZE|H=gvzbp78XMI3lD#<@&?# zDSE>(7BF1k_K=Bn7PvT!rBPA^A^q$*V(EsB%`YL4xH;K`ryL1W*IA8$(b@H%Sd&cSP4X3nmv za~Flw%XdF!?(qY1jcDXRP5RKs%P87FT3EH+zWZwf8>2VIvlZ$7aD~6rX)UvthuEUh z8eeA3nq;^((7Al&+iyDhE586#AeAlU$S}o{G^bPv0NC_8*O&7DmVc!9Xe;<*r_aSw z$k;=LryyKFz3#mEc>d^T&#Zek;#pE#l5|y+`de_Lo(VVVT}#}R(I=DDE>XEfT$LTM z8^m?uCe-X<9U;ra*6bu2$y%Ke(FBJ~FkQ_jcBWF@-f-AUO{%Aup^{1aly|m!^Hgqf z#~QI^YQ^M^p>AX~ckAAoJ%?w^Aj>#c$ekf_3v46d)|7th+&R?dnMUWTs{)DIpc5o( z3ej3bjfVD*W*~K7U>-EibdkM20O1mJnoc-@bG1EuOlZ@c~U`n$Odp#0(GXiN8Bd z^rQM~XvcJDI+I_{ETPvEI$i3eA+QeFFsK*d0ap;_WD8#J5uZ?Xkw zj-)pS6Rn^8_TK!tUra~ZlRpZ&f$N}O1C1H5)~@K}$3e~Lw9UNqKK)8&?o+@#vhUV! zp84F+S~dMqgaxy6GP~orJ7%m)Nt99Yxz{elxt`STFUFtQkF!6gn~jgnB+`%9v=f?Og_I@ z3{r=VpTYcYl$Ap+_($RIh?1p2Olk?mAuZS#-MLr>f`#MCf(Pn@pmhyeO5c(HdHz__ z3x3;&v3mU9?GD-kr9sh9U}(rOAffGkIsap3D|D~pL@$V(CZZ_tWsSx^hDK98{Vp-2J5#($z-gua#wTG)ZCmbZ*FV5xuo1wQc~WGxo=QC{D&^t7bDwB$}5vptXZ{(YtF!Jpc#E$lOUv;n@eI`jA2%q_t=|D z>?KZQ!=+#z`~thrVH*n8TcJ}tyx4Vy1|04G$Zy8=UYEPe*j(f92rLY_K-kdB18UUVQ(oD(@vlA4NTmpGTB-S&`5P{1tBo>(@{ZC$lpC{GD0%ta6)_);CdbItz z?9zQz^4@&k$fp_$C-w!Nr^#wYX?Y(`vtA(ipdyT0o1;ao@qy#*rVg)7K zn_27kl22PLf=8L`TlLMYt6Rg~*5!fJ-&}ix71SKczp-vW$?+N<@DNF<9tZo^V8i)3 zO)|wqE#OZRVF}Mj9fLZ3su)$7JJ4>bvr9>SyZj1|o8*Egy-bFHdr=gE9wkySJM|mK zP4G2aiSAo67rJqz>t95CE6TavyDr-B37-&d(`2CI7 zfn@&MKl$7IJ2m0uW_|d9w&|~Z?yz=+XeEDgVs!HE-TO((q3`QZ{cDaxWCLv;lkHv3k)UakVl)w6i8`ZVYDXRH|~Ht4BADA;a%Vgkvy5{o0FzO zEgIn^!>C3GohX2LVNKG~f6pao4006cYw#4Hi+7j0+@+DW)@Cw6-$?0~p&*{G5X5t4 z;x^2hPubeqi)b1!d~WycPm`pheIv?b++5Y!)z`1HCOg~^H_?1<&+Sj6xZ);&ahggk zE{X}#uI7XZGggzQr%oTBceNQ82kX=NO5&nk)2{fEGkKhZDM&*wj3RFwTNZB5vAZx8-Hyi;my!(IWJ+g5?X}n zOv-X)x!1e1UL2i@h{Vvksby0=NO5-{?nt;l%D#rweTm^1(R^-UBgMFFc2-UTW0q|x zk#_|~Ijp-lg8lwziCct~f*j@$yO_k2&{-G+rBG84JFa*dsEp1$NlP4~Go<-e3ViaO zy|vrcY)hs(B_yO-)ULfQKd(`H9ggypg5fWm)moIrW==-w5;GUEngle zu5KK6leB8I-ULV%dZ9X9na)(Lp=*F?+!a%iOxda=bWM-?H*a`pM|W#EB8N$QeeC*D z5Z#ym`TA7~j#sJ`5ZXKpZpl*9>E59m!(NtT)Cv_uJn$nHDM*D=7a4h>4_J;ru+A)? z$;e6#qokA+%d;HAD5_G%{GFE&5dJ(<|G&UJm_ZFD{{_y$k4icC|4qWdOV~$0kl5`g zB6e$FL_#KZd%htdHsiJ5AQQZ0U0HFXMJz%G6C*BOw*zdN${~KY?#bNHa>Vhr99ga6 zr+E)5?_r z!dp~yfF(>UOC0ioBGyZ+YzZ{7OSLJ8v6Z4VtBr|KQ6~yGCsi$KNumpMb@ig0)KbMt zIVZKEkdtahIjKezAZbK7DOQejv1p43LWsn#40%cTBdB(7pfO%iu`>?h@qu11@D{PA z_IAPKH3`zpd&Fk{o;1|(VvlH7^SQUqpF6(*(Nn1_B%U-c7E(`vzi^U?y#6njQTpy* zHiLu-#+X|$!B~pO5P!(n>l3w2WKHIpz*P#MP*lfL^&hV%>#r%+O3gg_lvZ2qGGwhb z3r;T~F0m-4n0~IB_sLacxbn3@t4j$er63?emky!Lce{^5FWI`)Y1%dwohlY<#DHar zmfDlq6@}iMkYdHwF3Gk zvQ`&>4l~?Pz~9h(vwDjKkomvMzYF4kCF2`YN(v-Ff>PA4L-YDT?9KdX64-kD%{+Dc z=ROCRFFulgDhMkuEo<%FKWi zFk={$zg882_??RF8Bp%KfRCT~3YPX03MWT7LI5dzQ z!r30zMzW?R9TAsi$@MMhNHon?RVDr*7MlzqvQEWN(NyVVCNvUyEcCU|e259nuGl=a zeR9W8cB*BnXL5zSwXZ;1`>w?#o>Gz!(>z2`Nxf7Qx`@#e)l~&h&Mx^;6NQUn%Barf zKanE@*Gc)iz7NY1DxF^1uG5Nx}?I3HAP25dPo<;pSBVMrW+L z`c^)4SPU~H$^FNYgE-v$He-Pz?jat}7$d0vK7#6j6_K_TBoP)?paJL+)VymjraY0I zk;9SKB6K9;6>7y+krnmXMo}Q0VleCFThOYCKvW+?E#Zn7P)`+4nHAF|4~0c)5)A3g zz-;boneI$Ybq;A`U`GtZ5JjJy&2QENH@X3EferPGOt4k zHjMBKV*2{2+lIDJZ=Td`8QDT^IR(yT)ajn7!J#G7y7WkzOrs+veaTd0GHMeQ)4Iv% zP_sUxC-rD8-mkkbTu9hoK%>vlzep%}C!9mrsyU4jmyEg4f@A{BC7Ji2@k4X&aVW|d za{E8{QWZeZ`a_qxbXO~`3NV{^%iMi)QwQ_kLkq7c9WWV4_Wd*S)xm?04A-{v%==%G z{P{CYy)1Ppvg?Y$Ye=_r4g6EOv5Dv5evKBRh9MQf+n*)JJ~&Cw!3{y>>pM=~^8wf8 zOHZ-n2X74UN=s?}?bdI-adXI^GE>qf&L^QtJwm*k(R)Sh1L8qc*|DMMHgOPFc4Q2$ zsSRXZU8Y*>%!=2DWRuv2uslh+pUd#~$!fI;sZ|mDqQ1(EcsT3-3A*)gXRjDCO!JdE z<%p70Vh!7W-_#>Rw@mBykL)M+qa)hhO{f@TsCSLnHr+GXi*5*QZ!c1^PoNE7nvr;k zl3lnkik}WOteFo}mM(Mf$x!$AANW%Hh)$y>bi-HJ{WwrI8P<!W+lxNprRrU1PvmMqW;c@R;{c4$f)~DT(n7>Tk9m z^iSYnB_;4(6b+Hfic=k8S6r-^EZq}{tTj$KC%cAF+qpfvc5!VbRK*K&ptMkka#LME-gZJCQ9cqt;UoM1X?vF9#5$NBm<2Z!;}5``<7a)_6iT!KgK5q z>x~>~7~C=Q!i$eSP5#!%0E*5(Dpi=MqyiK2*NJxc;Yihik{W>`*`jp`-eZT)mVr(H zh2x%D!OSxi-{1Get@-D+w|wpTkIg_AAUOXvr-fThHPJ-mh(DbsYM~4ydST4LC}659 zL@?V3UJ*bel9~VySrN7uELDSIFLVLPY}IP9U#!Hwz_9_bicF#$w9?`hmx!CQ+e8bB ztD|JNg|A2Hw|c}}qLpdK&}+sHm50-U`iV1Ipw;^No2S~xr`m^BPvN=NF6a+<*6&q;M^J5%><&0+>O9KXEiH8fd|8Jc?UvLDm+;>St0stpr zajg-q@cy7Wqd432=}aY6Hw%jJxxAuwuNex&BdsBh~ZotJ1pP@M0cx9ZAieCuWzf(aP%E(A^Krx zze^}udk|G3slWU12UH=E)ZEis^AD^{BTbmQPC=49;1WNZ1TTN0cIl=3w<_n0b5B*& zE+)_|6r{zRzwXiljrz{eTj z!$~Z43O7Q;5p@D87ts|xrG2G@ivFUk=@(^}bb*<*EUTuoTB@kXUXnE{Fv*8r;*&!3 zf2`EfYEP9KeoBxTvGVT|X)!*TK({Z3=MxEoJ17zpI>S!GQNtMnZ7{gmvnrL{d)6)G zr?GP&tum?KOOD1YPEg}suVJ~6T`IUp))0P=#G4OIyjLC@6vPbr@|cepp^uVyo`*cn zqec$>Ax{y?jCu>?fB(z;xwR^^{DeI~2}Z%@{B`-S|M(i0Q0!op4D{O1ANUDyKX$BI ztaIoz8t50YGzmR02haH`ez}zVZ26yo|BoaU?(1HY|4jae`S0a#4l1ZU8?9EBzUwy7 z1?+GM)NX3A&|1Ewwe@(3j)gldGtf~=Qc?#Ee-k4R>xip~cTN+Vq`=51daNqAkv%y2 z3iVS3CEzXtf+!o#QYdy#QQcxgwjIGcO)EK?RVbWdWwy*K;tY(Tj2}kdgG|S zZ-X3g!LRTjdd)=P2^@1_Hz>x*Qg$`Fhj@zpjPO(974~NWFNBCJL2j5RMt)>sd;)Ql zWb9^3DuXE75}niT>0Z&?JY7B&n=}t45Z>E{D+h5@MY5yP)|y_#@F;gF;3SUJp*$>i z%n-5=Jp|>$VOO8|1H!S%U^4i@Z8Er02K6snEdY`9%fqB}1O<3-BNzb1;P(7P{+s!K z$luBbyn!tZ@iK5luYFYosy%$4J{Sn5B8FS3fg=}gx&7B4|2-(m|1Jh&$RQ2y)r zf6pHV*8&oExwL)tO5s>#X=Zub=0NxRce#A$evQC$dM5)|virXL@jH*^zjqYGz*1lV z9RxZ5>ij$OD~y6zNsJL>bybNOPu~stq$~!qH_1d$UlYW`v8Y8g9e8pges)bD&ctJu zIDXI?5+`s?D4L0~B1A1FVaMelW-N|)EJ?pYnpP@qyHhX*231ZzG#um=fN~9Zf<=Ed zvdpSJbr%2|`|FnDmUh9ux-8Qq?4j2hWnk^7+@P zvrGd~M3fVgrwI*OcREAr6(1-YBsuFTGH~2r(3s6m_|*vw7!i%;PZw>r3 z@GIsG6=On-MrL#16zMs}JWbqR48J(OQw3D-hIRSj+1a^Stm!hFuO7Z>#)@xDco78= z?e~>p)=B(u;|r4|jHU&`X!gMEfcnRO&Cj1bHviH$qr3Wx`t7CeAD48lschS~cFW9- zH-Gl<^es=4z31{5{`!ghyHGn4;8#{d?<+dPru@(I2Ty$U`(OCfZ_YpmdI-@le zMo3LSQG2%+BS3T`jK+;Bb*fYVN~J5j@i4;SO&f7!)(p3h5oqbZuCXx79a>g_1 zLQ@2=D~PEXhv)RE1=d}}T7n**Yzod}3~sEI@HbrJQlp(@nsIO_ivD1L1r{h_kwUX( zD<{`1d3^@1&A;_?VBoX=_x|Jgf4kdi1j?$U3041+b)h1l^g0i3{fA@~z_Zp#roMgj zhWu}16zzugTk$trmnI%ueVZ39V^+&31<$pi%5?`0>{0Rn&U@r*=*nOM}`f&=55|vlUIh(rdv&14W@O z(I+LYA%-z7?45G@qCknKg?pok{3*|>n6jQ*G9@aKENhOqDAv2Azw9ev70sxaCSStI z0Z*z@OEH_f{xn)tuF-I;QlSBWVaamF^q3*kod1Wz9c5l6CvXg_U^pHE8rGs>1?Rpm z0c)94C$Ky^!QwHEPL7MWG_r6}3iDy=^HdLniz1@jQA6yPfX|DwL0!v~m6q;|WlXVH zCJ?Ks8Sw^8UT?r#lPRNBu|O$TE*581MiGFzaTQ-CH;Z~P{Uuu0UQm{)tnoTZ16Req z82gvle2k7&PO|q`p|}OqO#BKjtir?95C*CORaLFp`>ipnBPs(HWX@*K*-_1@)EhjE z6VA8*8Y*iX6+mBJ{Vb6@%54k4&jkwpp$tx>Y;rR&G($s*W7#OS0XWP>g(4HUK`%%> z!$AllD9c9o-JGBAiI(eC0!PyvYJ;Q|B|&@nLwylyoCry5#ukHEVW`jhn{C#;?ghPj4HhHo^TWXOQRT zN1IbMqWDK=%@(gGw|CzJf1P3V_}H2{Xvg@r{%w9`f5SK-%5>pvO6N7FfHI@Ku6V~Y z*6TQpNN1HQ5f8T4D%nvnBxc0!?66oZF2UK3Hhvpgm!0VM5T(gb>QtRhqm!oDpx?@j z;FJoTYk}uDbmi*RTUPH`O`*?V_F6oArD1$*^_tw?iGBP?zu#`y*1ubo6LW@!87|kE zBgFpx$`SWkyB$xlvRI{QR#4L_7ec$0U}xpgO0u%@;I6g1caO;B_ZUURWu6>d;B`(S zL%6hTS?9LvEb0d&TNbGe*IZRs7fDoUb(T=`@PW>{TjLyf<~7mDPzpDM zE5M>-xK(YR>b~`b-o|jzz59ZuRfi@r6sc76G|%xMxA*$cbYi@e!q>z9X^WcY5`CXj zn8G()n*;C~npZ1Hs%6`uRi@y+dyB&9z8CIWf@$M^Po9KpD2$lf1yl=Tmq^}B*tDL( z&0Ai?a!kNQa6)BFp}JU{0Y_9E=FJvlrY%V6Ef%KKn=xBcUT=wWb1A1(YBn>{5Cfe` zo6_4Xw$usoTjX01fMM4S9)u5!AS@Q2ePbx3-$>$((2AO#&m1!tQ=}V0o9BI`kH@$?92qi z=VCb^*3XpWEIGmrdeP8_YsK8eDX=}GXb_2+;apE{wanDM8l|D<&YzQ3H~jJ~oFK!X zr%>;fhRb*Mg8Zet$_u5L0Z<53U$ov*6_bWEQwx^=J%*nG?|<$hD7gHVfCIhYG;M9H z)KhF}Q@`^IVS$29a-+Y>qN6y7|dzOJFzc=;&_VT2qy zHGA=9j74At|Gf}kU_GJVAk4&_AaxoMl4b0u%(1txZ^U9XSuEB|>whx}BjPl%NCc`U zkq%h^D*1JzzUv!}Mr*I7k1omV5N{J5Vq}kaz#|4D*&r^Iy1s-R6IY1|v1>#eT!N=+ zXEa^eVN~?1V{zRt>Zuk8MDC|UHg)2VtZUeqHb4zqhIGw^b#1NgP}QNAmz_DpxN^&K zy`r@~7tUE{h&bp)wJ&!c%B{`yiI$mba-+EkSs)M6Vemp-@cUE+8~>-3QdJxDgcsKV-~Oeg|Gj!j-zOFR)|J-=I=WZ9 zd*AE9SmUx0khG#GZ-)hg8@pb(~Xdn35}se_Q3_WcLl;r zL1Vy7C(HGuT1$79j}t_)Q-Pq7Reb})^@?rT?sc84Rjd*l-J)Mi)I%LTQ7krQlYBQ; zMIjZJ@Q{!S>YyRQcdtU@!)@?KyhQ?Yz!=n%I!db`T&lGkH{t>=*Xr(EJXcP1G~|ex zLoJ{M4f0Lv(o%FNE;SJ@%vL#fA$_qgORDdkU4SX?!6*{z&PPEXxJy`zkHbH#9|4dk zz>cC3&zFPhYHbEqDG1Mj`gJ>_9S7DohpakHb#0_BITDAkBE(Q+zq`S&WVJeDeA&=i zWa6!XkcG6VAhPHbNw&GfgaQ}Ml}0dnxHHNM_K+TcX9oAY(3dVChHWhc#K4jEx`(f+ zxGFu6@iC0ff@k;ww}K)~UeNfJN?)y#)0zQ=kI`y-5{jQA2(^qq$9Q$Wv6` z$g~n5wG@YX&ZVtrhfGpR&Ger5KB=nii~t2)L+N%!!7q z5E4sDf}+4B9g|Q*(M+OkeN0?U_%EBl$8a)5iiX#SRFbGi+ zXy};-q6@1Bexua`zsKrPs#3HSSgo$=a7jrximUEol3$O=x5E;N`>q0JP3z?HPN{=* z*LylhF{l7ZxH}urR$)f`B=Q)?8Va#{nN6~^|WYg+WOEU27&xXK~T=!^hy>0#K0X(!v ztwB>U{yh_bQgJ$&xUUC&ThC;7eXcCmJ@Z9mJhlz-LXOC-zn_t3xG`uJ+Bq~RL+aPR z5ROUHQp3pgwdrtNUe1+Xz;Ov=JW#bh>a|Q?&_nN7zc99{AWCWZN?6~RsFmZlsPh-M z{1#)fESX)V81sHEbe3Ecu5l< ztC2NxuBOkovzlm&-NsPg`-E2DslavM+wn?;O36?>^uwX6u>5!V?+zbx9^I7U(W+)? znpcu^>5VH--nu<%h8sOcQZ%4+3`;93JNG`dU5w|yb#$M z@Qxh22-e;}d^Zyk$El3Xk)jahrx50+P=^LZMa{*cYM(f|?HbW8>PNE@Bijx$TPmhH z#B~)hakbb3j~!o^jjrVP$OxlbLbIw=65U0E|H&n%o4HWVJGTNtQ|rV11zKQh(~u586}?`4bWxSl3W|1&C1NP=UG5uCcHFL0q=tj4|JQr(})8LaDOOu>7kuxS)OH}o#y~dK(oIXt6mx0oUgnBG7zj| z*LI-r_dB60oODb+4LlL|r8l#yRmsm|ZqwJP?@=`*OZ4KvjHELjVl^?7QID)Ww3ejB zW!b)du^WTZ;CLUa7Cm9H$!HVn#A>7%O<79~AHhTb(9TOt+|vPlj+_q61ZEVcBz89i z&I2JbYXzuMoK=tt#o9gfo{fhZtP#&rZzHh~{gcAOxpkSP6L!eeUa{5U_%kjp> z>f^~|e@U)l(lCRDx;zh0hcVGO8t$^HzmQ&CAQ!uU`GIFI29}X$4_~9hNKmN2U8eNH zH7-WZjCbT>Tm&zP1oN{dsm1-n&18WntO2h2MJ!=dGX-d#QS!!?JN#i(URPC9!Ght& z>f%*Byh5)a`6B-^1;tiYEnU%N)&QEKjV1*uEzk;PZ*=t%z_yhtIYD7WJ>_=v?7ZIb9YtfbU2}xeR=Wdkb+3E4_5%l4{gx7enwXh1A_ql?nj7BCI4sbeigg)sgs2kRY`M0Xiek|#c6F6z zULZXLBh^bYav2@Y(+kjIA7;)lB*Uy-i7qNd+pjKFidmo4snU1XAlBzuc~T)Je?ON- z8#5kZis(~O20h)3hnvG!JU0V_Z!}OgE@z;EoYawNMb#$~J9#out3#a7C3v)~RZ6y^ z%uCz~5w-DRa>}gZ5SG3;dX{R-<$mz1eEzYq8vt()wN!l)! zwH6_E7J=s#CPA;afZ)w_|8nwiz}9^6M5D#YSa?;nJs3Ip?rpa{|IHu1uzO$r(NOd5 z2M_LQKK=LKd>)F|H9t??Pnn^3v+^z(hP$Mb*i3vW6CBxcXbZ`CAg&z{TdGC(3W&MN zp*!Txb_H1g6zfG(wtifV`WY1bQnWorp#)CCy>i1Odp|Cr)Ivnc(FU`ST2EE$^n!;e?!3Y(-=L0!QwuCWX0 ziHS+GOWtrV@x1Gt3@A&xwH%F85c?w(wP5m^J_WW)9xsd1LD;H6j~8yM59h}yl#tte zh0}uPnf!^ixL3{EDpx0YC`%=@cqBwg8;GYeszDUBcdy}{ql0n|Xi#b?GNc9vm+`e; zaYQs!ia|l7aXiM54fE_uv8hvRZNeeHlgs!360r__n@^!m1#&&PHSU&NeA+!j)Pqd@ zNIh9!zezW3C3Du9btc2g}sP)3P~~juu1;mL3{;7XWyU0yrW8O&iIv zW+)$%f1qPY?AnK9sIvH+U~76Z|JapmrDek{A6wS@=k4g5B$UD~gEBivJfAU(V&r;p zOOdEdi!~G1h&EBD%<7PI^mRK;Y?nBk?GI9`#Xf4h4_Ur`es3X16GM{192k}Gof^IC z$z`UO#d6DL!meq*E)2q7Qs?|LIu3AO+PHW6;LO#zq3Mk>ef~xXtl*OPbHh+%7}OU0 z8u&hqvnVo-mD*EqiSmaoCd4%UVV5itX2A227c%HcPpsHwamgsAY{gaK>#Ni>mL`I$ zjcZ4wv+r4p2(RLAVmH6@QvTO9p>SWOWQJ5i@S+$WvoLs>wy&1joZXsP&XRHn(J;vx`8X5l-d1AGsd&) zgVd^3>(_~>FZ~!bzMj9Opc~Z-x={n)VGn0T_I_O-=Y}9V2pcFPeAxDrzu51W;mA#@JjrD zA)SG19qP<>oBREAraBSSpqbV*#R@8WWyjpdK9je#{8zNcy#D+7M?OS*%KbW(Ibvu{ z@@ix`R;P?=;Uj4gIsfPRcd6e}b_l9_iK7`)DG7SUNm7yU`I@qch?sJZr%)gz!D_Od z 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�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

`VtEja}5iVk^ubvm4P+j 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

{DZp)26-*{s* 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 rb}d}BO66{h!4k)GgV&jF8Z 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 V2d6*n888q6xY?$s7gG?&`9F#A!Eyiq literal 0 HcmV?d00001 diff --git a/backend/sample_data/Arijit_De_Resume.md b/backend/sample_data/Arijit_De_Resume.md deleted file mode 100644 index 8ca52e5..0000000 --- a/backend/sample_data/Arijit_De_Resume.md +++ /dev/null @@ -1,80 +0,0 @@ - - -| Kolkata, India [arijitde2050@gmail.com](mailto:arijitde2050@gmail.com) [\+918981800329](tel:+918981800329) | Arijit De | [LinkedIn](https://www.linkedin.com/in/de-arijit/) [Google Scholar](https://scholar.google.com/citations?user=mCaigGsAAAAJ&hl=en) [Homepage](https://arijitde92.github.io) | -| :---- | :---: | ----: | - -## **Work Experience** - -**Machine Learning Engineer mVizn Pte. Ltd.** **Jan 2024 – Present** -3D Scan-to-BIM Project Singapore (Remote) - -* Led the development of a comprehensive Deep Learning pipeline for semantic segmentation of 3D point clouds using Python and PyTorch by researching and implementing state of the art models. -* Enhanced model performance by 30% and improved model robustness significantly by extracting relevant features from the data and incorporating data augmentation techniques. -* Led backend development efforts and deployed AI models in GCP using VMs and Cloud Storage, integrating Python and MySQL, which resulted in a 60% improvement in the client’s system performance and scalability. -* Implemented role-based access control (RBAC) using GCP Identity and Access Management (IAM) to securely manage user permissions for the dashboard that monitored and visualized ML model outputs. -* Resolved over 10 critical issues post-deployment by troubleshooting AI model behavior; collaborated with 5+ stakeholders to align technical solutions with business requirements and enhance user experience. - -**Machine Learning Engineer Mercedes-Benz Research and Development India** **Aug 2018 – Jan 2020** -Advanced driver-assistance system (ADAS) Bengaluru, India - -* Developed a suite of manual quality control tools using PyQt to validate over 10,000 annotated images for Vulnerable Road User (VRU) detection, improving annotation accuracy by 25%. -* Automated quality checks and data analysis/visualization of annotated data using python scripts which increased annotation throughput by 20%. -* Created an AI system to detect VRU by training Yolo v3 model with the above mentioned annotated images that helped in improving Level 3 ADAS vehicle capabilities by 30%. - -**Systems Engineer Tata Consultancy Services** **Aug 2014 – August 2015** -Ultimatix Team Kolkata, India - -* Maintained and enhanced TCS’s internal website, “Ultimatix,” by implementing over 30 feature requests across frontend (HTML, Bootstrap CSS, JavaScript) and backend (Java, MySQL) components, ensuring seamless functionality for 100,000+ users. -* Collaborated with cross-functional teams, including QA and UI/UX designers, to streamline the feature release cycle, reducing deployment time by 20%. - -## **Skills** - -* Languages: Python, C++, SQL -* Technologies: PyTorch, Tensorflow, Scikit-Learn, OpenCV, Numpy, Pandas, Flask, Git, API -* Cloud: Google Cloud Platform (GCP) -* Other: Agile methodology, Problem solving attitude, Collaborative, Punctual. - -## **Education** - -* PhD, Jadavpur University, Kolkata, India. 2020–2024 -* M.Tech. Computer Science & Engineering, Jadavpur University, Kolkata, India. GPA \- 8.83 2016–2018 -* B.Tech. Computer Science & Engineering, Techno India, Kolkata, India. GPA \- 8.81 2010–2014 - -## **Projects** - -* **Online Assignment Submission Portal** (Oct '24 \- Nov ‘24) \- A Flask \+ MySQL WebApp for upload, submission & checking of C programming assignments. Teachers can create assignments whereas students can view those assignments, submit the code and get it evaluated with a built in GCC compiler.. - Live link \- [https://subsequent-heath-arijit-home-3b9d0400.koyeb.app/](https://subsequent-heath-arijit-home-3b9d0400.koyeb.app/) - Github \- [https://github.com/arijitde92/Online\_Programming\_Assignment\_Portal](https://github.com/arijitde92/Online_Programming_Assignment_Portal) -* **Spiritual Chatbot** (Jan’24 \- Feb’24) \- An LLM chatbot that personifies a Hindu God. Uses OpenAI GPT-3.5 turbo model APIs and Langchain for creating prompt templates. Attempted prompt engineering techniques to make chatbot stay within context and purpose. The front end was built using streamlit while python was at backend. - Live link \- [https://spiritualchatbot.streamlit.app/](https://spiritualchatbot.streamlit.app/) Github \- [https://github.com/arijitde92/SpiritualChatBot](https://github.com/arijitde92/SpiritualChatBot) -* **Github Code Analysis Tool** (Apr' 23 \- Jun' 23\) \- An LLM based github repository analyzer that can tell the most technically complex repository among all the repositories of a given github user. Built using OpenAI GPT3.5 turbo, Langchain, DeepLake vector database, Python and Flask. - Github \- [https://github.com/arijitde92/Github\_Code\_Analysis\_Tool](https://github.com/arijitde92/Github_Code_Analysis_Tool) -* **3D Brain Analysis and Visualization App** (Jul’24 \- Aug’24) \- A Flask Application that can segment the hippocampus or a brain tumor from a 3D brain MRI scan. The segmentation models are built using Hippocampus Segmentation Factory (HSF) for Hippocampus Segmentation and a 3D Attention UNet model for brain tumor segmentation. - Github \- [https://github.com/arijitde92/Brain\_Seg\_App](https://github.com/arijitde92/Brain_Seg_App) - -## **Publications** - -1. **A. De**, A. S. Chowdhury, (2025). Shape Induced Multi-class Deep Graph Cut for Hippocampus Subfield Segmentation. In: Antonacopoulos, A., Chaudhuri, S., Chellappa, R., Liu, CL., Bhattacharya, S., Pal, U. (eds) Pattern Recognition. (***ICPR 2024\)***. Lecture Notes in Computer Science, vol 15313\. Springer, Cham. https://doi.org/10.1007/978-3-031-78201-5\_16 -2. **A. De**, N. Das, PK. Saha, A Comellas, E Hoffman, S Basu, T Chakraborti. MSO-GP: 3-D segmentation of large and complex conjoined tree structures. ***Methods**. **2024*** June 3;229:9-16. doi: 10.1016/j.ymeth.2024.05.016. Epub ahead of print. PMID: 38838947\. -3. **A. De**, P. Ebenezer, "Sleep Apnea sub-type detection from Polysomnography signals," 2024 IEEE International Conference on Interdisciplinary Approaches in Technology and Management for Social Innovation (***IATMSI 2024***), Gwalior, India, 2024, pp. 1-6 -4. **A. De**, M. Tiwari, & A. S. Chowdhury. 3D Hippocampus Segmentation Using a Hog Based Loss Function with Majority Pooling. In 2023 IEEE International Conference on Image Processing (***ICIP***), Kuala Lumpur, Malaysia ***2023***, October, pp. 2260-2264. -5. **A. De**, R. Mhatre, M. Tiwari and A. S. Chowdhury, "Brain Tumor Classification from Radiology and Histopathology using Deep Features and Graph Convolutional Network," 2022 26th International Conference on Pattern Recognition (***ICPR 2022***), Montreal, QC, Canada, *2022*, pp. 4420-4426 -6. **A. De**, M. Tiwari, E. Grisan, A.S. Chowdhury, "A Deep Graph Cut Model for 3D Brain Tumor Segmentation", 44th Annual International Conference of the IEEE Engineering in Medicine & Biology Society (***EMBC 2022***). -7. **A. De**, A.S. Chowdhury, "DTI based Alzheimer's Disease Classification with Rank Modulated Fusion of CNNs and Random Forest", ***Expert Syst. Appl**.* 169 (*2021*), 114338\. DOI: 10.1016/j.eswa.2020.114338 - -## **Voluntary Activities** - -* Selected as a mentee for the IEEE EMBS Student Mentorship Program (SMP) 2023, gaining hands-on experience in healthcare-related signal processing. -* Contributed to research on sleep disorder diagnostics and co-authored a publication on Sleep Apnea Detection using Machine Learning, achieving a 94.26% accuracy in classifying four stages of Sleep Apnea. - -## **Open Source Contributions** - -* Contributed to [AI-Code](https://github.com/Avdhesh-Varshney/AI-Code/pull/30) as part of Social Summer of Code (**SSoC**) 2024 & [DL-Simplified](https://github.com/abhisheks008/DL-Simplified/pull/451) as part of Social Winter of Code (**SWoC**) 2023 Hackathons. -* Contributed to [nexB](https://github.com/nexB) and [TheAlgorithms](https://github.com/TheAlgorithms/Python) repositories pertaining to both feature enhancements and documentations. - - -## **Certifications** - -* Deep Learning, a 5-course specialization, by Deeplearning.ai. Verify [here](https://coursera.org/share/9cdc757ce1bb41134bb22a7548aff40b). -* TensorFlow in Practice Specialization, by Deeplearning.ai. Verify [here](https://coursera.org/share/be06afd8c51589a64831567f8424fe9b). -* MCPS: Microsoft Certified Professional, Microsoft Certification No.: 1042C4-5DHF30 \ No newline at end of file diff --git a/backend/sample_data/Yash_Pal_Resume.pdf b/backend/sample_data/Yash_Pal_Resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8d24d1dc4357a15c25bd65fce3b78d7fc7782eee GIT binary patch literal 173386 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

uFOM9_ITz`8Ux}2N@q?`AIgbPl|F(r4UWD@?eAM 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 YlOF+%Cj8532WCYMi{~fLPcQhR{D}b9D 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%0Dn^S`?D((ex!L7kUyi8M*! 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∨?3^fV?Q5Y3Os79 zy5z>o6%_k;+FxG39W@fvAesghFg{A=|`G^cxcRFfVrb zWF#p6&|lCG!vaPZ;h;5UH8VQsGxl7wDAkM<4`gr59*JM-awdTFZi@lWrsA5JqGYU2 zR=BT^-b<{(GG3Nkh5a{6&4SZXG)1MlB!xU7G(n4Y`sgl9N}gA3I_B7+`up4T45Gx` z19PFhba8l68^4rIy)H0`rDmkoTDA6}x8`w#)FT(15kr)V)_w0~R zOH$HkJ-w8X_K)R(kv4tyHLc$gwfq1z7=c#%>;ghxU<5P1)K%CUPHkoN&N>oqmTW#; zIP$A8D%4%X?=^hiF2WNf^ZN982d%&415<{&8=X&4b9MU^4sYu@>%39%?eWd<562IKG-(LPe^j@)y&2zBRbBl(+Pwk=D{fXv0kQ z*5*3*kGWE#x&ER74b`Bf2ZGaZ3skBfaxT_5!W2F{@z8bjEgYW)sOMrL0wPff60Cg2 z2<=d%YIWPAbCN^)*x}uJD?QapnfbdrjEnrW-p`2nKXssP!Dss>T`q`&m4cmczW!MzCoN?O$1mRT&EB*i6MN@u65FZ|Ad&&`{NN&K16I@1FTj) zCUcXn;Z$rpbCPDHg(E)$4Z+78O#}zqqRG_=Z}4%+#FDeMOA`mWzQxhpV=2eZ>Tvvu z<|QXS9>fI6RAhruU5 z_HA$mq7PFkB`W>G4cx661R?19z0uReR5pWHZ}WhO?!vIlaM6Bxrmh-sGYcH38RLmI z0nsw`%vk)xg&A~v=ZHs$rrca_)M~&~#SSZMIc!}!u{>FJ3HY0#i3-!=of5Wh?mioI zHqof(QHbKZ>mn%S%_5uzu55`&>pxZ`RQ{?Y$H-=m!!${;Z|#~Cg*mQj-TshcNUpq+ zW_8}0_}XphwdNL29>D8PRUfpiFx?q-C|!y}Nn2LEcegy$ga#wmHFSU(6_u#vFuWL;VWrI#ph_!-&}f^W7!r%P&s1Agf^`)O&kwDht<g)^MzE!HQS~4pXeT_}mi*qH{7zi_cqG zM{36Q0JKE(_5)f-JK?tPtgeH%fU-BtG&jxGgNMzajY{)S4(a6(EH zc{uC90hwDFM|8Vw1cP`*!%j?>5e!cC?;n%6Y8ABC`zne&J>utvUKy^(l;njC&vp7l zdZpQL3=zsTNN{x`Mg@z_gF=js3s1I3S@3?@ZX?O9F(F|9YJ_4C@7gm&5DG&g_e@fz znip8FlA9T%W2gOgxlucbytC#b+o+^J!ISB|bgAjmH`jI-O>1qZXWDhxeY%)+&u9s@ zW2zootxch#rp2#c!>p-L&zCaGLYGf&jdHSVr_7jiX&n77CmuI4eQi2Un>q*G+_>@4 z4!(1Y)5tIc^t+&m0Qv}|uIq!4ssFzK{}cf042!vn#JbnIPc z0I@>eo=zL_qh$jlE~zSMkn28@=UNL?7F^bn?2cBWw35ysToCZ}nt4QxMCmSCX&+@C z3kg<&P83;k6B)S?+mUG}Sn-g4z>i*v+YXuzDeTT(oW!**mk5`T(2xG=eH1;+e(63k zq~}k>(qs(t$!mnS8%G4;Ef@afP%4BCf#SU150$!2)5>To;lwv>WGYTI*sr!UT=ee? zJDwd*@U%yXKF5Apn`2~*F%nNM`jjX8Hk-QegthMs14m!x|@Ilmn){n^&ZA&K%-UMWD(Nh zCTz1C_>+_3Ck$}jHtzN(-~MK)-c{;TZ7_)ioXJ^ax5pGWF{nsAjSLyc1)i<{(3m-} z*q=trywXj5RtB29<@vZrR;k)o7i7C0Dc7!o7p#S}uExKA5<*<|Ci>lf0X@BL7}h-W zZLGQ3e&nQ3$0Dy&)GqAR{0);s2MfcJ!)(RPkx^I{^92AJ3r0`Fd0-`T^s5Y?v_r36 z{-5!5JT-a=`c2(gnmDuLm({O>A%_|X*6gm<^FfMc(_Lvmqx)8Wz3)

$=P*F#FcA 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.json for inspection. + +By default it runs against all three sample resumes; pass --resume to run a +single custom file instead. + +Not a pytest module — run it directly: + + cd backend + uv run python tests/run_resume_analyzer_test.py + uv run python tests/run_resume_analyzer_test.py --resume "sample_data/Arijit De Resume 2026.docx" + +Requires GEMINI_API_KEY (loaded from backend/.env). +""" + +import argparse +import os +import shutil +import sys +import tempfile +from datetime import datetime +from pathlib import Path + +from dotenv import load_dotenv + +BACKEND_DIR = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(BACKEND_DIR)) + +load_dotenv(BACKEND_DIR / ".env") + +DEFAULT_RESUMES = [ + BACKEND_DIR / "sample_data" / "Yash_Raj_Singh_Oct_Resume.pdf", + BACKEND_DIR / "sample_data" / "Yash_Pal_Resume.pdf", + BACKEND_DIR / "sample_data" / "Arijit De Resume 2026.pdf", +] +OUTPUT_DIR = Path(__file__).resolve().parent / "output" + + +def _sanitize_stem(name: str) -> str: + """Make a filesystem-safe stem for the output filename.""" + return "".join(c if c.isalnum() else "_" for c in name).strip("_") or "resume" + + +def analyze_resume(resume_file: Path) -> bool: + """Run the resume_analyzer on one file. Returns True on success.""" + # Imports that need sys.path/.env ready. + from crewai import Crew + + from app.services.crew.agents import resume_analyzer + from app.services.crew.resume_tools import ResumeAnalysisContext + from app.services.crew.tasks import _resume_analysis_task + from app.services.resume_parser import ( + ParsedResume, + ResumeParsingError, + extract_resume_text, + ) + + # 1. Extract text (pypdf → pdfplumber fallback / python-docx / raw md). + print(f"Extracting text from: {resume_file}") + try: + resume_text = extract_resume_text(str(resume_file)) + except ResumeParsingError as e: + print(f"ERROR: resume parsing failed: {e}") + return False + print(f"Extracted {len(resume_text)} characters.") + + tmp_md = tempfile.NamedTemporaryFile( + mode="w", suffix=".md", prefix="test_resume_", delete=False, encoding="utf-8" + ) + with tmp_md as f: + f.write(resume_text) + + try: + # 2. Run the agent + task in isolation. local_only=True → the save + # tool writes to temp storage only (no GCS upload, no DB write). + ctx = ResumeAnalysisContext( + user_id=0, resume_id=0, user_name="test_user", local_only=True, + resume_text=resume_text, + ) + task = _resume_analysis_task(ctx, run_async=False) + crew = Crew(agents=[resume_analyzer], tasks=[task], verbose=True) + crew.kickoff(inputs={"resume_path": tmp_md.name}) + + if not ctx.state.get("saved"): + print("FAILED: the agent never saved the parsed resume.") + return False + + # 3. Validate and copy to tests/output/. + parsed = ParsedResume.model_validate_json(ctx.state["json"]) + OUTPUT_DIR.mkdir(parents=True, exist_ok=True) + timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") + output_path = ( + OUTPUT_DIR + / f"test_parsed_resume_{_sanitize_stem(resume_file.stem)}_{timestamp}.json" + ) + shutil.copy(ctx.state["local_path"], output_path) + + result = parsed.result + filled = sum( + 1 for value in result.model_dump().values() + if value not in ("", None, [], False, 0) + ) + print("\n" + "=" * 70) + print(f"SUCCESS — parsed resume copied to: {output_path}") + print(f" name: {result.name!r}") + print(f" email: {result.email!r}") + print(f" positions: {len(result.positions)}") + print(f" education: {len(result.education_qualifications)}") + print(f" projects: {len(result.projects)}") + print(f" pubs: {len(result.publications)}") + print(f" years_exp: {result.years_of_experience}") + print(f" filled top-level fields: {filled}/{len(result.model_dump())}") + print("=" * 70) + return True + finally: + if os.path.exists(tmp_md.name): + os.unlink(tmp_md.name) + + +def main() -> int: + parser = argparse.ArgumentParser(description="Run the resume_analyzer agent in isolation.") + parser.add_argument( + "--resume", + default=None, + help="Path to a single .pdf/.docx/.md resume. Omit to run all three " + "sample resumes.", + ) + args = parser.parse_args() + + if not os.environ.get("GEMINI_API_KEY"): + print("ERROR: GEMINI_API_KEY is not set (expected in backend/.env).") + return 1 + + # Resolve the list of resumes to process. + if args.resume: + resume_file = Path(args.resume) + if not resume_file.is_absolute(): + resume_file = BACKEND_DIR / resume_file + resumes = [resume_file] + else: + resumes = list(DEFAULT_RESUMES) + + results: list[tuple[Path, bool]] = [] + for i, resume_file in enumerate(resumes, start=1): + print("\n" + "#" * 70) + print(f"# Resume {i}/{len(resumes)}: {resume_file.name}") + print("#" * 70) + if not resume_file.exists(): + print(f"ERROR: resume file not found: {resume_file}") + results.append((resume_file, False)) + continue + try: + ok = analyze_resume(resume_file) + except Exception as e: # noqa: BLE001 — one bad resume shouldn't stop the rest + print(f"ERROR: unexpected failure on {resume_file.name}: {e}") + ok = False + results.append((resume_file, ok)) + + # Summary. + print("\n" + "=" * 70) + print("SUMMARY") + for resume_file, ok in results: + print(f" [{'PASS' if ok else 'FAIL'}] {resume_file.name}") + passed = sum(1 for _, ok in results if ok) + print(f" {passed}/{len(results)} succeeded") + print("=" * 70) + + return 0 if passed == len(results) else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/backend/uv.lock b/backend/uv.lock index 7c51ca3..63cb2ac 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -377,6 +377,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0d/fe/6bea5c9162869c5beba5d9c8abbed835ec85bf1ec1fba05a3822325c45f3/build-1.5.0-py3-none-any.whl", hash = "sha256:13f3eecb844759ab66efec90ca17639bbf14dc06cb2fdf37a9010322d9c50a6f", size = 26018, upload-time = "2026-04-30T03:18:23.644Z" }, ] +[[package]] +name = "cel-python" +version = "0.5.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-re2" }, + { name = "jmespath" }, + { name = "lark" }, + { name = "pendulum" }, + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/4e/f821948a5bbd7a98a218720f831a62216f79a98e43b13d9ab2f98e37c5f8/cel_python-0.5.0.tar.gz", hash = "sha256:3eb0a619e8df0f338d0430cda01427a742e77e3c433a1c7c3ebd409cd804c45a", size = 13364027, upload-time = "2026-01-31T19:07:13.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/f8/38812adc3f787c2c2e8ba56f524185ed379656c10b40347a32796ba61c08/cel_python-0.5.0-py3-none-any.whl", hash = "sha256:d0f85008b89655c2bb18d797d2fa3f96f2ed80f4a3b43b0e8138c6646581e5f6", size = 84950, upload-time = "2026-01-31T19:07:11.821Z" }, +] + [[package]] name = "certifi" version = "2026.6.17" @@ -610,12 +626,13 @@ wheels = [ [[package]] name = "crewai" -version = "1.14.7" +version = "1.15.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, { name = "aiosqlite" }, { name = "appdirs" }, + { name = "cel-python" }, { name = "chromadb" }, { name = "click" }, { name = "crewai-cli" }, @@ -644,9 +661,9 @@ dependencies = [ { name = "tomli" }, { name = "tomli-w" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/f7/5f3182520d418708468613f0d74d8e01831f79ad6416b4eb37b10ada8fb2/crewai-1.14.7.tar.gz", hash = "sha256:85e35d4290470c9fe434c35e58055407a36c2600a0465add589133769febb371", size = 7665248, upload-time = "2026-06-11T17:14:42.062Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/7c/0d962c1e1f84a37eda183fc40a0b7e7a49c74969a378a0fda4c4c9bfcd18/crewai-1.15.2.tar.gz", hash = "sha256:deb2d882105cb9075cdd2198ac8398f9001315f2abc28d815fec66b003a2acbf", size = 7767892, upload-time = "2026-07-08T02:06:07.017Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/88/de/2b553b4b67f2044c3ca3d69949a715655e62e2eecd61bb40bfc4b9c9f62a/crewai-1.14.7-py3-none-any.whl", hash = "sha256:6deeaa883927f76f02b2c417494572f9fbd9873c5a2b82ae733062b83ddc0da8", size = 1007553, upload-time = "2026-06-11T17:14:39.912Z" }, + { url = "https://files.pythonhosted.org/packages/9b/85/ab49bac9104c72ad76a42c8203f43ff5473575bd4f99b4e9cbfbef84a76a/crewai-1.15.2-py3-none-any.whl", hash = "sha256:3e84f8ef873a2e4953ecd83368f22b99e2e2e1f58e11677a4c9f041560f666d7", size = 1065130, upload-time = "2026-07-08T02:06:04.85Z" }, ] [package.optional-dependencies] @@ -656,7 +673,7 @@ anthropic = [ [[package]] name = "crewai-cli" -version = "1.14.7" +version = "1.15.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appdirs" }, @@ -676,14 +693,14 @@ dependencies = [ { name = "tomli-w" }, { name = "uv" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/6e/afd4a96296c1add13e92957702fe2cd74a52f79d5e183c2846183fa0d1eb/crewai_cli-1.14.7.tar.gz", hash = "sha256:cb8f363a77cbe05f73bfda388f971d53b66bc3f37f84addafc1af0cdd43d6af4", size = 111556, upload-time = "2026-06-11T17:14:44.827Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/eb/e233022bef33b9e1a33e4b49524b9d18095bb9d3aea3e1f257c38fc957c2/crewai_cli-1.15.2.tar.gz", hash = "sha256:f11f31cdfd35817d8f5d4dcc29794c6374e6f89efd6188ae5f969b81f05cc1d1", size = 213554, upload-time = "2026-07-08T02:06:09.811Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/09/11/7b72aee4a9fe820924114448f66e8172b4bc104c61227ed24241b1ceb04b/crewai_cli-1.14.7-py3-none-any.whl", hash = "sha256:01c073e0a1db5a56f830af20dc85816f43da820d738850103c9a8d50d834588e", size = 111463, upload-time = "2026-06-11T17:14:43.589Z" }, + { url = "https://files.pythonhosted.org/packages/15/aa/fd3dfa687952b4e77dbf5a24fd98adee48df2a23f5f5b1b89f9a9cceaf03/crewai_cli-1.15.2-py3-none-any.whl", hash = "sha256:93ebe8ea734be793178737105897f60f3df0e8f114f27d523a28500c9c5946c4", size = 185882, upload-time = "2026-07-08T02:06:08.591Z" }, ] [[package]] name = "crewai-core" -version = "1.14.7" +version = "1.15.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appdirs" }, @@ -699,14 +716,14 @@ dependencies = [ { name = "rich" }, { name = "tomli" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7e/1e/6ecde20a9761e2492f973f9f89b667da57f613d26d615a3d12962774e489/crewai_core-1.14.7.tar.gz", hash = "sha256:c8c16f29abb515380c45b729c22fca3ade29a51d25211ce5ac63b50f7af7179e", size = 20908, upload-time = "2026-06-11T17:14:46.807Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/31/81c458f8d7ded2a2a45dfed96d4bd99de5eac60ae4d4ab1c14c6fdd23887/crewai_core-1.15.2.tar.gz", hash = "sha256:43cecd3a4de8a781264fe882575065ab21688906ce400a29a2363c292e1387b1", size = 23416, upload-time = "2026-07-08T02:06:11.897Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/71/e551211ae4e4e3fc0c32cd31b097719c12d3841f84fe86cc557aa76eef2d/crewai_core-1.14.7-py3-none-any.whl", hash = "sha256:244a16baff22d6925a46f87114d32c14494c687dd97479be5467a3a432e7e4d6", size = 28877, upload-time = "2026-06-11T17:14:45.815Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0a/3518397b1aeeee9534e1e1f307812653254a622b66aae0007d4a0f849bbd/crewai_core-1.15.2-py3-none-any.whl", hash = "sha256:2f5cfa39396833c8451bf334a8e5f8d0c7c8f6a378bada148af5ff5713f9e858", size = 30960, upload-time = "2026-07-08T02:06:10.928Z" }, ] [[package]] name = "crewai-tools" -version = "1.14.7" +version = "1.15.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4" }, @@ -718,9 +735,9 @@ dependencies = [ { name = "tiktoken" }, { name = "youtube-transcript-api" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5f/f6/48b9de65470ca5857b6513500864a4b25bc0fe630ad7d8dd762fecd39f31/crewai_tools-1.14.7.tar.gz", hash = "sha256:7b19aec91d86a08a31da8b7753d8a8b74e22f1bbac96c75e182295f7a1daf948", size = 895021, upload-time = "2026-06-11T17:14:51.598Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/e9/df7d16fde5c644d9e63c31c44088218558a35acd40c96c3bc972e05fcebd/crewai_tools-1.15.2.tar.gz", hash = "sha256:2290a2f41794fde0861fc784ff150841786968ea17112b47db70a1460690ba69", size = 898337, upload-time = "2026-07-08T02:06:16.489Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/57/2ceb2cfec8845e3d9e358c441cb382f82c9b3b8b964384d665e290e565b0/crewai_tools-1.14.7-py3-none-any.whl", hash = "sha256:e6f1b0a36b40a43ba57c42519cf9320c59a937cfd1a5c110246ae0c7bc99d595", size = 809653, upload-time = "2026-06-11T17:14:49.845Z" }, + { url = "https://files.pythonhosted.org/packages/41/bb/6afb41b4ea756e9b6ec598f7dc3456a887a0327a68fe814678527c0266a7/crewai_tools-1.15.2-py3-none-any.whl", hash = "sha256:6ae2990eed5fd6d1328010f128e93307145b29e2eeed69592be4d91126b5f4ef", size = 811463, upload-time = "2026-07-08T02:06:14.926Z" }, ] [package.optional-dependencies] @@ -1289,6 +1306,58 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2d/b6/552d40e96da22921eb1fead7c14b00b5b5473a20e45959488660fab35ee2/google_genai-1.75.0-py3-none-any.whl", hash = "sha256:8dc4c096e7d6288c3087f6893f582fe52468932464781edb8193bd92b9fefb2c", size = 793726, upload-time = "2026-05-04T22:48:53.033Z" }, ] +[[package]] +name = "google-re2" +version = "1.1.20251105" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/60/805c654ba53d685513df955ee745f71920fe8e6a284faf0f9b9dc19b659c/google_re2-1.1.20251105.tar.gz", hash = "sha256:1db14a292ee8303b91e91e7c37e05ac17d3c467f29416c79ac70a78be3e65bda", size = 11676, upload-time = "2025-11-05T14:58:07.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/4d/203a08dab1bdb5c83b46dd424c01a789ecb5a37dbc80f33d016bd116a9d7/google_re2-1.1.20251105-1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:329efa209ea7baa44f0facf0402fa34e655dc97fdeb10d0b83fc06354f5575fd", size = 483717, upload-time = "2025-11-05T14:57:04.808Z" }, + { url = "https://files.pythonhosted.org/packages/78/88/466026b43ff5c7d740f5ede090992ec63b60d1810ab14fe35dfc00677e0a/google_re2-1.1.20251105-1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:aa2ad5f6f48921ec137a7b7f1b1da903ddef8627a2dc30bc878a9a69d9925719", size = 515547, upload-time = "2025-11-05T14:57:06.013Z" }, + { url = "https://files.pythonhosted.org/packages/f3/6a/c6c9fdb00c98990e4f7a6cd650e209d7b5d2754ca0404b72c69ac9909a69/google_re2-1.1.20251105-1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ac1cb2526cc88f050a0661fc7245ad009ee454bddc541b2e653f1d007585000d", size = 485396, upload-time = "2025-11-05T14:57:07.592Z" }, + { url = "https://files.pythonhosted.org/packages/a2/f6/529c44f607c47f96cfa29c1fe3a690fe75b2fdb48e9b0d6b54e5f0a75e59/google_re2-1.1.20251105-1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:50c7205182ad66c23c07abe8072f720ca2f7d595b61e28fd9b63623614f9afd6", size = 517150, upload-time = "2025-11-05T14:57:09.376Z" }, + { url = "https://files.pythonhosted.org/packages/df/d2/ccc07860e31ab81965c63f9ed4eb69ea0d3449a9b4e1610f71883694bbe8/google_re2-1.1.20251105-1-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:4cb5acee61e35772503b8b1db3c592a46b8e6a9bc0ab54d7d6233654ea2bf93d", size = 482807, upload-time = "2025-11-05T14:57:11.057Z" }, + { url = "https://files.pythonhosted.org/packages/bd/43/5fb20d16664457f61670bdd95f39039d43ee8b7732511c688e2f322a4317/google_re2-1.1.20251105-1-cp311-cp311-macosx_15_0_x86_64.whl", hash = "sha256:1617097d63620c2d46bdfc0e48f24f66cd341664fc75718636d234f67473fe7f", size = 508839, upload-time = "2025-11-05T14:57:12.338Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f2/6e470338271e164dd3c5e508876f99aec3ed23bf419c7d54a5672fd5b05f/google_re2-1.1.20251105-1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18a5610b26742b90cb1d64ead2b16fe0e3bd7e67add03fd3779cd1b85e401661", size = 573718, upload-time = "2025-11-05T14:57:13.635Z" }, + { url = "https://files.pythonhosted.org/packages/91/21/4566fc344c21cf3c49082d13ddab785994b5e3b8b7fd4631242538f698a2/google_re2-1.1.20251105-1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03156291269f145eccddff63118f2df02d395792f51fc039f09955818943815a", size = 590749, upload-time = "2025-11-05T14:57:14.864Z" }, + { url = "https://files.pythonhosted.org/packages/94/19/5981fb798bb8d08933b815b1fd9e55d179c380b9d8c21a49197b9b7c5967/google_re2-1.1.20251105-1-cp311-cp311-win32.whl", hash = "sha256:54f51762b51dc238eceddf49b56cc2b64594fe72d9328c1c39d615aa990e1f87", size = 434066, upload-time = "2025-11-05T14:57:16.22Z" }, + { url = "https://files.pythonhosted.org/packages/49/e5/f83053a36cfc4762d843748e4f7a9c1141937dcf74cd6fc3f4598292dda3/google_re2-1.1.20251105-1-cp311-cp311-win_amd64.whl", hash = "sha256:f5f856ff5036a8f22b3bad57f376d4e3b97b59b64f311bdb1f83c8dabded2492", size = 491025, upload-time = "2025-11-05T14:57:17.746Z" }, + { url = "https://files.pythonhosted.org/packages/56/be/4315c3b38f42f9a2888fa76260545c98547502f1c35aa63a672d39011b2e/google_re2-1.1.20251105-1-cp311-cp311-win_arm64.whl", hash = "sha256:913864f97de4151eaa8bb7746ca230fd193656501e07fb658ce2cd46d4f6efcc", size = 642194, upload-time = "2025-11-05T14:57:19.374Z" }, + { url = "https://files.pythonhosted.org/packages/67/20/73b487538e9107c2fd96aed737e3f3890dfce3e292622e4ffb2f9c810ee5/google_re2-1.1.20251105-1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:b30f09b4d63249c72e65ccae4cbf6b331b48c22fc7cb439f1d85f347b9d07ceb", size = 485591, upload-time = "2025-11-05T14:57:20.961Z" }, + { url = "https://files.pythonhosted.org/packages/b9/9a/ca3a993bdb5dc6d5b2616b9657b2872a83d1827f8bd3ab50cd629eb751c7/google_re2-1.1.20251105-1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:9a77892c524b8bdf3d47d7cad1cc2ac3a0108bdd65007ef4c02888fa46baf8ee", size = 518780, upload-time = "2025-11-05T14:57:22.18Z" }, + { url = "https://files.pythonhosted.org/packages/df/37/b2e367987371514253ec9e514637f457deaacb7acc1c900814f3a6421e0f/google_re2-1.1.20251105-1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a3ac51b28cbf25c100dfd8849212d878d7005d1d4a7e129a10789043c56b6021", size = 486966, upload-time = "2025-11-05T14:57:24.575Z" }, + { url = "https://files.pythonhosted.org/packages/d9/69/1db6742943c0ac254bfb7d8a37a5d3f73f016a65cfa1f84fe3a0451820f6/google_re2-1.1.20251105-1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:9f7158afc9825ac2654c6561aea94a1f7edb5b5b88e6e3639bb80bb817d102ac", size = 520225, upload-time = "2025-11-05T14:57:26.039Z" }, + { url = "https://files.pythonhosted.org/packages/f4/0a/0747c92dbebe2c09a26bd7386d372b5c5a9926236b4f3d69bb8f15db05cb/google_re2-1.1.20251105-1-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:5320da07dc3b7ac7f407514f42ac17d67e771ac7c7562d449571185e6fb601b2", size = 482943, upload-time = "2025-11-05T14:57:27.353Z" }, + { url = "https://files.pythonhosted.org/packages/7f/14/6bfc6838bb6cb561824ac03deeab2bd11d5d9a93505f536c8fa2f6bd46c4/google_re2-1.1.20251105-1-cp312-cp312-macosx_15_0_x86_64.whl", hash = "sha256:5a4e5785bc30d52ce655d805b07ad2d8a4905429a5f690ae9c2f1caa76665709", size = 510384, upload-time = "2025-11-05T14:57:29.139Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0a/6add090c917ee39f6f0be753037cafceb3bad904b424efc155fb38082635/google_re2-1.1.20251105-1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b7a3b90f747130310d4b3b8e19ebb845d0d97c1deb63b36f76c7242dacbd736", size = 572446, upload-time = "2025-11-05T14:57:30.495Z" }, + { url = "https://files.pythonhosted.org/packages/0d/1c/8b1ccbeade96a21435d55b5185cd6d9b2ceab5a9af998a4d9099e0540759/google_re2-1.1.20251105-1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:809c5fa5d08279413b29c2e2c5c528e85cd94a0e0fd897db595a0c09eeee2782", size = 591348, upload-time = "2025-11-05T14:57:31.808Z" }, + { url = "https://files.pythonhosted.org/packages/62/cf/7bdd7a1ae7828b613011da808eafec4da3132f43c3be6af5e0bd670ebe8b/google_re2-1.1.20251105-1-cp312-cp312-win32.whl", hash = "sha256:d8424e63a9ec0fe5bde03d97876b2431f8a746af33eb475fa1ae39144bd05b2a", size = 433787, upload-time = "2025-11-05T14:57:33.071Z" }, + { url = "https://files.pythonhosted.org/packages/31/e9/5dd951c35acaabfe87c67228b9af2cdcd7779d9167edbe6b9094b8a8e529/google_re2-1.1.20251105-1-cp312-cp312-win_amd64.whl", hash = "sha256:062313c309f93dfeb6966372f4c446580e98879133ec155522eea8aaf568a5cd", size = 491726, upload-time = "2025-11-05T14:57:34.39Z" }, + { url = "https://files.pythonhosted.org/packages/60/8d/c1afd29fc2cb475fd4c634f3d3c8099c0efb662362c10b27a9eaf11c9357/google_re2-1.1.20251105-1-cp312-cp312-win_arm64.whl", hash = "sha256:558f144b26a9555ae4e9467cc3aa3299a8ce13217f328b21ae326ca0633be19b", size = 642673, upload-time = "2025-11-05T14:57:35.693Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b9/c441722196598fc3de0f654606ad9975a968c71dc27f516b5a4c9ebb94fd/google_re2-1.1.20251105-1-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:9f3cf610e857a7d6f02916cf2b7fc159a5429b8bcb23164500d46e5e233f2924", size = 485549, upload-time = "2025-11-05T14:57:36.939Z" }, + { url = "https://files.pythonhosted.org/packages/ea/87/cf588255e5ada1dfb555cc96de35be78438bb0b6faba64df5fe91cecc224/google_re2-1.1.20251105-1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:a21c2807bf4d5d00f206a4ecb3b043aad674e28c451b697b740280f608872078", size = 518840, upload-time = "2025-11-05T14:57:38.115Z" }, + { url = "https://files.pythonhosted.org/packages/0d/39/da66e4ca9be0c51546efc6fb39cf1683c4be8245d8199cb54a9808e8d5fa/google_re2-1.1.20251105-1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8314144eefeee7b88b742081c2038418f677e63901039ca9dbfbc0c5bb6d2911", size = 487037, upload-time = "2025-11-05T14:57:39.467Z" }, + { url = "https://files.pythonhosted.org/packages/75/dd/24ba65692dd58dca6ff178428551f4e9b776d1489a1251f5c8539e598baa/google_re2-1.1.20251105-1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:28a46be978e53c772139d0f5c9ba69f53563fcdd4225407e4d34d51208b828f1", size = 520285, upload-time = "2025-11-05T14:57:40.666Z" }, + { url = "https://files.pythonhosted.org/packages/61/12/cfdbb92bed24af6474970a75a26145c424f98cfbcc633fdd185985f0efe0/google_re2-1.1.20251105-1-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:83292e23963aa1b219d5f64a65365b0880448a6a060276027b55270bc5b18c7e", size = 482981, upload-time = "2025-11-05T14:57:41.928Z" }, + { url = "https://files.pythonhosted.org/packages/97/bf/5fc32ded9279e69a87b88d7261e7e77e2e26325d4e27ca1303a3215e430a/google_re2-1.1.20251105-1-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:1920b15dc9b1bdfeca5aa2c60900373c6f27cd1056d53cd299456ea5540a6fff", size = 510366, upload-time = "2025-11-05T14:57:43.21Z" }, + { url = "https://files.pythonhosted.org/packages/71/71/f927ddc7aef1b8d7ccc8a649c335d311f29f3dea658209e30e37720e4891/google_re2-1.1.20251105-1-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b1458d9ca588124cd61aa1bf5388a216e1247e7d474f8e5e1530498044f5c87", size = 572390, upload-time = "2025-11-05T14:57:44.422Z" }, + { url = "https://files.pythonhosted.org/packages/f0/8c/23075e589038284c9487f41cde531d35873f9da622fb4ac7d1d97bd9086e/google_re2-1.1.20251105-1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a52cb204e49d20cdbb66faf394d57f476e96c39c23a328442ab0194fc6bd1a2b", size = 591386, upload-time = "2025-11-05T14:57:45.713Z" }, + { url = "https://files.pythonhosted.org/packages/f1/7f/858453ef689f6b9895cd02b466836a9d1a6e4ba535d1a275b01bf73baa1d/google_re2-1.1.20251105-1-cp313-cp313-win32.whl", hash = "sha256:67c5c73d7ebcf3f0e0a3b528b41bd8c6c04900f1598aebf05bbdf15a06cf5f9a", size = 433807, upload-time = "2025-11-05T14:57:46.92Z" }, + { url = "https://files.pythonhosted.org/packages/08/24/6ea87fe682e115ffd296e91eb5c5a266349d1ee8414ce8ece3f99ec1ac84/google_re2-1.1.20251105-1-cp313-cp313-win_amd64.whl", hash = "sha256:0bcba63ad3ea8926fb0c71bb5044e33d405bb9395f5b5444393cd5f28f0bf6d3", size = 491734, upload-time = "2025-11-05T14:57:48.304Z" }, + { url = "https://files.pythonhosted.org/packages/34/85/32ba71b06f3cf5f9856ae95b3d6463b971742453631a5ae2c5be338ea377/google_re2-1.1.20251105-1-cp313-cp313-win_arm64.whl", hash = "sha256:64ee189ea857f2126c5e42073cfa9b03e9f4cbaf073edbedb575059074841aa0", size = 642654, upload-time = "2025-11-05T14:57:49.602Z" }, + { url = "https://files.pythonhosted.org/packages/5e/7f/7eb238bdcd06182b5f427afd305cf413b7cf4ea71047308bbf35912cf923/google_re2-1.1.20251105-1-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:cc151cf6a585d9ebe711da32b23683fcff40f78db8c8587c7f4b209ef4658809", size = 484719, upload-time = "2025-11-05T14:57:51.326Z" }, + { url = "https://files.pythonhosted.org/packages/6d/62/eed28eab67f939f4b9383c47b1db11638ade6ac30785c15cb960de85ba43/google_re2-1.1.20251105-1-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:7e2186d2c90488c1e11895343941f35ca2f58e9ba6c6b034fd531abe22ef77cc", size = 517698, upload-time = "2025-11-05T14:57:52.597Z" }, + { url = "https://files.pythonhosted.org/packages/f7/16/a1e6768513f788bf9c67a1cfe379ef34a793983eee46e4b653e42b558b78/google_re2-1.1.20251105-1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:41be22359c3dceb582937739b4365dd8e279de24ad0a5b10e653503abaff2ed7", size = 486421, upload-time = "2025-11-05T14:57:53.852Z" }, + { url = "https://files.pythonhosted.org/packages/ca/fc/7a97ffd36d451e5a8bfaff2f9022b14807795d588f98227ff96e8da99856/google_re2-1.1.20251105-1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:f3168d7bbac247c862ea85b2f3c011d3a04bedcb6892b37f14d488f4133b206e", size = 519037, upload-time = "2025-11-05T14:57:55.078Z" }, + { url = "https://files.pythonhosted.org/packages/5f/ee/8b6f7d94bb689dafdf60de8dd8f8f6296ad40d4d15c933fcda4da7a3a06b/google_re2-1.1.20251105-1-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:79ce664038194a31bbcf422137f9607ae3d9946a5cff98cf0efbeb7f9411e64b", size = 483373, upload-time = "2025-11-05T14:57:56.297Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a6/16a09e03d1de128f821869e4252688c21319f5017d9209f4d0e71ea5c951/google_re2-1.1.20251105-1-cp314-cp314-macosx_15_0_x86_64.whl", hash = "sha256:0476b07421b8882b279d5ceb5b760c15c62d581ded95274697fc1227e3869ee6", size = 510167, upload-time = "2025-11-05T14:57:57.653Z" }, + { url = "https://files.pythonhosted.org/packages/c4/9d/213dce5de401527369fb5af11096b18c06001d9eb71f3318fe5eba1ec706/google_re2-1.1.20251105-1-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85feec3161ffdc12f6b144e37a2f91f80b771c72ffadde60191e89a49f6d7e81", size = 573176, upload-time = "2025-11-05T14:57:59.211Z" }, + { url = "https://files.pythonhosted.org/packages/03/be/a8def96aa4a80b233e105767d22e3de961dcde5a04f0a05cb4f3ddb4df78/google_re2-1.1.20251105-1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7bfaa2cf55daf0c5c650e68526bb20b61e37d7f3ae53f6893013acc1c91c116", size = 591483, upload-time = "2025-11-05T14:58:00.416Z" }, + { url = "https://files.pythonhosted.org/packages/14/ea/144bbc4b9359da89aec07b4c2a91a6bfe7119914885386577c665b07bb01/google_re2-1.1.20251105-1-cp314-cp314-win32.whl", hash = "sha256:214c1accdc60fff9ce1bf812b157147ca361844f496ed9e0d5f357b0e562ced8", size = 433773, upload-time = "2025-11-05T14:58:01.594Z" }, + { url = "https://files.pythonhosted.org/packages/96/b3/74e301211699f1b650ba7690a3e4e52146ac4266fcd62f3ea0a945b9eda4/google_re2-1.1.20251105-1-cp314-cp314-win_amd64.whl", hash = "sha256:6d4d5fdadd329a2ed193463899d00ef2fd126172f36a4c01c9def271f19801b6", size = 491893, upload-time = "2025-11-05T14:58:02.969Z" }, + { url = "https://files.pythonhosted.org/packages/6f/d1/4adcfcb9c95e3d064c9f7aaf6cb3a4fc842d86115014b9d4094db4d465b5/google_re2-1.1.20251105-1-cp314-cp314-win_arm64.whl", hash = "sha256:1d27f3a2a947ec1f721d0f14f661108acfd4f4d34f357ce28db951cc036656e5", size = 643093, upload-time = "2025-11-05T14:58:05.761Z" }, +] + [[package]] name = "google-resumable-media" version = "2.10.0" @@ -1636,18 +1705,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, ] -[[package]] -name = "importlib-metadata" -version = "8.7.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, -] - [[package]] name = "importlib-resources" version = "7.1.0" @@ -1790,6 +1847,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" }, ] +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + [[package]] name = "job-application-agent-backend" version = "1.0.0" @@ -1810,6 +1876,7 @@ dependencies = [ { name = "openpyxl" }, { name = "pandas" }, { name = "passlib", extra = ["bcrypt"] }, + { name = "pdfplumber" }, { name = "pydantic", extra = ["email"] }, { name = "pydantic-settings" }, { name = "pymysql" }, @@ -1848,6 +1915,7 @@ requires-dist = [ { name = "openpyxl" }, { name = "pandas" }, { name = "passlib", extras = ["bcrypt"], specifier = ">=1.7.4" }, + { name = "pdfplumber" }, { name = "pydantic", extras = ["email"], specifier = ">=2.0" }, { name = "pydantic-settings", specifier = ">=2.0" }, { name = "pymysql", specifier = ">=1.1.0" }, @@ -2238,6 +2306,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c3/13/8186a9867c67f3fef9958a1d60b45f46c1a9b5d28f67d8fd136f28ceab3f/langsmith-0.8.16-py3-none-any.whl", hash = "sha256:081e57c0175d142192683288740a796eb0eb32d9e703b4bf9133678ceefe3286", size = 500303, upload-time = "2026-06-15T17:41:22.33Z" }, ] +[[package]] +name = "lark" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, +] + [[package]] name = "linkify-it-py" version = "2.1.0" @@ -2907,32 +2984,31 @@ wheels = [ [[package]] name = "opentelemetry-api" -version = "1.34.1" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4d/5e/94a8cb759e4e409022229418294e098ca7feca00eb3c467bb20cbd329bda/opentelemetry_api-1.34.1.tar.gz", hash = "sha256:64f0bd06d42824843731d05beea88d4d4b6ae59f9fe347ff7dfa2cc14233bbb3", size = 64987, upload-time = "2025-06-10T08:55:19.818Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/1c/125e1c936c0873796771b7f04f6c93b9f1bf5d424cea90fda94a99f61da8/opentelemetry_api-1.42.1.tar.gz", hash = "sha256:56c63bea9f77b62856be8c47600474acad853b2924b99b1687c4cb6297166716", size = 72296, upload-time = "2026-05-21T16:32:49.335Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/3a/2ba85557e8dc024c0842ad22c570418dc02c36cbd1ab4b832a93edf071b8/opentelemetry_api-1.34.1-py3-none-any.whl", hash = "sha256:b7df4cb0830d5a6c29ad0c0691dbae874d8daefa934b8b1d642de48323d32a8c", size = 65767, upload-time = "2025-06-10T08:54:56.717Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ca/9520cc1f3dfbbd03ac5903bbf55833e257bc64b1cf30fa8b0d6df374d821/opentelemetry_api-1.42.1-py3-none-any.whl", hash = "sha256:51a69edacadbc03a8950ace1c4c21099cacc538820ac2c9e36277e78cebba714", size = 61311, upload-time = "2026-05-21T16:32:28.822Z" }, ] [[package]] name = "opentelemetry-exporter-otlp-proto-common" -version = "1.34.1" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-proto" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/86/f0/ff235936ee40db93360233b62da932d4fd9e8d103cd090c6bcb9afaf5f01/opentelemetry_exporter_otlp_proto_common-1.34.1.tar.gz", hash = "sha256:b59a20a927facd5eac06edaf87a07e49f9e4a13db487b7d8a52b37cb87710f8b", size = 20817, upload-time = "2025-06-10T08:55:22.55Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/9c/216acfeaedadf2e1937f4373929b20f73197c5c4a2546d4f584b7fa63813/opentelemetry_exporter_otlp_proto_common-1.42.1.tar.gz", hash = "sha256:04f1f01fb597c4249dfcd7f8b861c902c2102369d376d9d346ff38de4469a2ee", size = 21433, upload-time = "2026-05-21T16:32:55.526Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/72/e8/8b292a11cc8d8d87ec0c4089ae21b6a58af49ca2e51fa916435bc922fdc7/opentelemetry_exporter_otlp_proto_common-1.34.1-py3-none-any.whl", hash = "sha256:8e2019284bf24d3deebbb6c59c71e6eef3307cd88eff8c633e061abba33f7e87", size = 18834, upload-time = "2025-06-10T08:55:00.806Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/2375e7612e1121a4518c17603b6e0b03ad94f565aafad53f464dc5be2bf6/opentelemetry_exporter_otlp_proto_common-1.42.1-py3-none-any.whl", hash = "sha256:f48d395ab815b444da118868977e9798ea354c25737d5cf39578ae894011c140", size = 17327, upload-time = "2026-05-21T16:32:33.387Z" }, ] [[package]] name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.34.1" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "googleapis-common-protos" }, @@ -2943,14 +3019,14 @@ dependencies = [ { name = "opentelemetry-sdk" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/41/f7/bb63837a3edb9ca857aaf5760796874e7cecddc88a2571b0992865a48fb6/opentelemetry_exporter_otlp_proto_grpc-1.34.1.tar.gz", hash = "sha256:7c841b90caa3aafcfc4fee58487a6c71743c34c6dc1787089d8b0578bbd794dd", size = 22566, upload-time = "2025-06-10T08:55:23.214Z" } +sdist = { url = "https://files.pythonhosted.org/packages/87/87/ca7fc790dfdbcf4f9e9aab14a39ef1b7508ead13707e283de0b3131478d2/opentelemetry_exporter_otlp_proto_grpc-1.42.1.tar.gz", hash = "sha256:975c4461f167dd8ed8857d68d3b6b25f3d272eab896f6a9470d0f5b90e2faf15", size = 27140, upload-time = "2026-05-21T16:32:56.162Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/42/0a4dd47e7ef54edf670c81fc06a83d68ea42727b82126a1df9dd0477695d/opentelemetry_exporter_otlp_proto_grpc-1.34.1-py3-none-any.whl", hash = "sha256:04bb8b732b02295be79f8a86a4ad28fae3d4ddb07307a98c7aa6f331de18cca6", size = 18615, upload-time = "2025-06-10T08:55:02.214Z" }, + { url = "https://files.pythonhosted.org/packages/89/2b/28ba5b128f47fe8c3bab541000d6feb4b5a9bd26623ca013406f01c0fb60/opentelemetry_exporter_otlp_proto_grpc-1.42.1-py3-none-any.whl", hash = "sha256:0ae1177e2038b18a929b3098215243631ef91136cba26b7e2b12790ceb7e87cc", size = 19617, upload-time = "2026-05-21T16:32:34.278Z" }, ] [[package]] name = "opentelemetry-exporter-otlp-proto-http" -version = "1.34.1" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "googleapis-common-protos" }, @@ -2961,48 +3037,48 @@ dependencies = [ { name = "requests" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/19/8f/954bc725961cbe425a749d55c0ba1df46832a5999eae764d1a7349ac1c29/opentelemetry_exporter_otlp_proto_http-1.34.1.tar.gz", hash = "sha256:aaac36fdce46a8191e604dcf632e1f9380c7d5b356b27b3e0edb5610d9be28ad", size = 15351, upload-time = "2025-06-10T08:55:24.657Z" } +sdist = { url = "https://files.pythonhosted.org/packages/77/32/826bfa1d80ecea24f47808de03cd4a0d13c17ecc07712f45123f0f61e4ac/opentelemetry_exporter_otlp_proto_http-1.42.1.tar.gz", hash = "sha256:bf142a21035d7571ac3a09cb2e5639f49886f243972883cfe777ed3bf02b734d", size = 25406, upload-time = "2026-05-21T16:32:56.807Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/54/b05251c04e30c1ac70cf4a7c5653c085dfcf2c8b98af71661d6a252adc39/opentelemetry_exporter_otlp_proto_http-1.34.1-py3-none-any.whl", hash = "sha256:5251f00ca85872ce50d871f6d3cc89fe203b94c3c14c964bbdc3883366c705d8", size = 17744, upload-time = "2025-06-10T08:55:03.802Z" }, + { url = "https://files.pythonhosted.org/packages/d3/96/82cb223a1502f0787d4bbff12907f5f8d870a50731febcd5818d93ef9555/opentelemetry_exporter_otlp_proto_http-1.42.1-py3-none-any.whl", hash = "sha256:00a16da1b312a1d6c7233d600d557c91df71125af73020f3b9a7765bd699d59d", size = 21793, upload-time = "2026-05-21T16:32:35.277Z" }, ] [[package]] name = "opentelemetry-proto" -version = "1.34.1" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/b3/c3158dd012463bb7c0eb7304a85a6f63baeeb5b4c93a53845cf89f848c7e/opentelemetry_proto-1.34.1.tar.gz", hash = "sha256:16286214e405c211fc774187f3e4bbb1351290b8dfb88e8948af209ce85b719e", size = 34344, upload-time = "2025-06-10T08:55:32.25Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/55/63eac3e1089b768ba014091fdd2ae8a9a440c821ef5e2b786909c94c8836/opentelemetry_proto-1.42.1.tar.gz", hash = "sha256:c6a51e6b4f05ae63565f3a113217f3d2bfaec68f78c02d7a6c85f9010d1cfca6", size = 45839, upload-time = "2026-05-21T16:33:03.937Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/28/ab/4591bfa54e946350ce8b3f28e5c658fe9785e7cd11e9c11b1671a867822b/opentelemetry_proto-1.34.1-py3-none-any.whl", hash = "sha256:eb4bb5ac27f2562df2d6857fc557b3a481b5e298bc04f94cc68041f00cebcbd2", size = 55692, upload-time = "2025-06-10T08:55:14.904Z" }, + { url = "https://files.pythonhosted.org/packages/41/9d/171c02c84a76940b7e601805b3bb536985aded9168fbcc9ba52f0a730fa2/opentelemetry_proto-1.42.1-py3-none-any.whl", hash = "sha256:dedb74cba2886c59c7789b227a7a670613025a07489040050aedff6e5c0fb43c", size = 71782, upload-time = "2026-05-21T16:32:44.867Z" }, ] [[package]] name = "opentelemetry-sdk" -version = "1.34.1" +version = "1.42.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-api" }, { name = "opentelemetry-semantic-conventions" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6f/41/fe20f9036433da8e0fcef568984da4c1d1c771fa072ecd1a4d98779dccdd/opentelemetry_sdk-1.34.1.tar.gz", hash = "sha256:8091db0d763fcd6098d4781bbc80ff0971f94e260739aa6afe6fd379cdf3aa4d", size = 159441, upload-time = "2025-06-10T08:55:33.028Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/f7/b390bd9bfd703bf98a68fea1f27786c6872331fd617164a54b8a59bdc008/opentelemetry_sdk-1.42.1.tar.gz", hash = "sha256:8c834e8f8c9ba4171d4ec843d0cb8a67e4c7394d3f9e9297e582cbd9456ddbf7", size = 239262, upload-time = "2026-05-21T16:33:04.641Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/1b/def4fe6aa73f483cabf4c748f4c25070d5f7604dcc8b52e962983491b29e/opentelemetry_sdk-1.34.1-py3-none-any.whl", hash = "sha256:308effad4059562f1d92163c61c8141df649da24ce361827812c40abb2a1e96e", size = 118477, upload-time = "2025-06-10T08:55:16.02Z" }, + { url = "https://files.pythonhosted.org/packages/8f/6b/4287766cfbde577ae2272e8884abac325aeaac0d64f41c61d5b8cc595105/opentelemetry_sdk-1.42.1-py3-none-any.whl", hash = "sha256:083cd4bbfaa5aa7b5a9e552430d9951219967cfb27aa61feb13a77aba1fc839d", size = 170907, upload-time = "2026-05-21T16:32:45.894Z" }, ] [[package]] name = "opentelemetry-semantic-conventions" -version = "0.55b1" +version = "0.63b1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "opentelemetry-api" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5d/f0/f33458486da911f47c4aa6db9bda308bb80f3236c111bf848bd870c16b16/opentelemetry_semantic_conventions-0.55b1.tar.gz", hash = "sha256:ef95b1f009159c28d7a7849f5cbc71c4c34c845bb514d66adfdf1b3fff3598b3", size = 119829, upload-time = "2025-06-10T08:55:33.881Z" } +sdist = { url = "https://files.pythonhosted.org/packages/93/99/4d7dd6df64795951413ce6e815f8cf1eb191daf7196ae86574589643d5f3/opentelemetry_semantic_conventions-0.63b1.tar.gz", hash = "sha256:3daf963611334b365e98a57438183eb012d3bfb40b2d931a9af613476b8701a9", size = 148340, upload-time = "2026-05-21T16:33:05.455Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/89/267b0af1b1d0ba828f0e60642b6a5116ac1fd917cde7fc02821627029bd1/opentelemetry_semantic_conventions-0.55b1-py3-none-any.whl", hash = "sha256:5da81dfdf7d52e3d37f8fe88d5e771e191de924cfff5f550ab0b8f7b2409baed", size = 196223, upload-time = "2025-06-10T08:55:17.638Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7a/7fe66f5f3682b1dd47d88cc4e11f1c6c0966b737de2d16671146e23c39a5/opentelemetry_semantic_conventions-0.63b1-py3-none-any.whl", hash = "sha256:dfe5ef4dee82586b746f522b818ceb298d00b3d59f660042bd79404bff8d0682", size = 203713, upload-time = "2026-05-21T16:32:47.016Z" }, ] [[package]] @@ -3234,6 +3310,66 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a2/9a/07d658e1e7fad860f1c541ab941348125dbdab773be3a0afaf32361866c7/pdfplumber-0.11.10-py3-none-any.whl", hash = "sha256:7741ea81bf165b474b153e6789d10d18e06b6ddcf3ec84289c3ef2fed6802580", size = 60047, upload-time = "2026-06-15T03:31:29.702Z" }, ] +[[package]] +name = "pendulum" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/72/9a51afa0a822b09e286c4cb827ed7b00bc818dac7bd11a5f161e493a217d/pendulum-3.2.0.tar.gz", hash = "sha256:e80feda2d10fa3ff8b1526715f7d33dcb7e08494b3088f2c8a3ac92d4a4331ce", size = 86912, upload-time = "2026-01-30T11:22:24.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/27/a4be6ec12161b503dd036f8d7cc57f8626170ae31bb298038be9af0001ce/pendulum-3.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5d775cc608c909ad415c8e789c84a9f120bb6a794c4215b2d8d910893cf0ec6a", size = 337923, upload-time = "2026-01-30T11:20:51.61Z" }, + { url = "https://files.pythonhosted.org/packages/59/e1/2a214e18355ec2a6ce3f683a97eecdb6050866ff3a6cf165d411450aeb1b/pendulum-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8de794a7f665aebc8c1ba4dd4b05ab8fe1a36ce9c0498366adf1d1edd79b2686", size = 327379, upload-time = "2026-01-30T11:20:53.085Z" }, + { url = "https://files.pythonhosted.org/packages/9d/01/7392e58ebc1d9e70b987dc8bb0c89710b47ac8125067efe7aa4c420b616f/pendulum-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bac7df7696e1c942e17c0556b3a7bcdd1d7aa5b24faee7620cb071e754a0622", size = 340115, upload-time = "2026-01-30T11:20:54.635Z" }, + { url = "https://files.pythonhosted.org/packages/ef/33/80de84c5ca1a3e4f7f3b75090c9b61b6dbb6d095e302ee592cebbaf0bbfb/pendulum-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db0f6a8a04475d9cba26ce701e7d66d266fd97227f2f5f499270eba04be1c7e9", size = 373969, upload-time = "2026-01-30T11:20:56.209Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/f7b4c1818927ab394a2a0a9b7011f360a0a75839a22678833c5bc0a84183/pendulum-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c352c63c1ff05f2198409b28498d7158547a8be23e1fbd4aa2cf5402fb239b55", size = 379058, upload-time = "2026-01-30T11:20:57.618Z" }, + { url = "https://files.pythonhosted.org/packages/36/94/9947cf710620afcc68751683f2f8de88d902505e7c13c0349d7e9d362f97/pendulum-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de8c1ad1d1aa7d4ceae341528bab35a0f8c88a5aa63f2f5d84e16b517d1b32c2", size = 348403, upload-time = "2026-01-30T11:20:59.56Z" }, + { url = "https://files.pythonhosted.org/packages/6f/12/0e6ba0bb00fa57907af2a3fca8643bded5dba1e87072d50673776a0d6ed2/pendulum-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1ba955511c12fec2252038b0c866c25c0c30b720bf74d3023710f121e42b1498", size = 517457, upload-time = "2026-01-30T11:21:01.602Z" }, + { url = "https://files.pythonhosted.org/packages/c6/fe/dae5fbfe67bd41d943def0ad8f1e7f6988aa8e527255e433cd7c494f9ad5/pendulum-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4115bf364a2ec6d5ddc476751ceaa4164a04f2c15589f0d29aa210ddb784b15d", size = 561103, upload-time = "2026-01-30T11:21:03.924Z" }, + { url = "https://files.pythonhosted.org/packages/ce/a0/8f646160b98abfc19152505af19bd643a4279ec2bdbe0959f16b7025fc6b/pendulum-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:4151a903356413fdd9549de0997b708fb95a214ed97803ffb479ffd834088378", size = 260595, upload-time = "2026-01-30T11:21:05.495Z" }, + { url = "https://files.pythonhosted.org/packages/79/01/feead7af9ded7a13f2d798fb6573e70f469113eafcd8cc8f59671584ca3e/pendulum-3.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:acfdee9ddc56053cb7c8c075afbfde0857322d09e56a56195b9cd127fae87e4c", size = 255382, upload-time = "2026-01-30T11:21:06.847Z" }, + { url = "https://files.pythonhosted.org/packages/41/56/dd0ea9f97d25a0763cda09e2217563b45714786118d8c68b0b745395d6eb/pendulum-3.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bf0b489def51202a39a2a665dcc4162d5e46934a740fe4c4fe3068979610156c", size = 337830, upload-time = "2026-01-30T11:21:08.298Z" }, + { url = "https://files.pythonhosted.org/packages/cf/98/83d62899bf7226fc12396de4bc1fb2b5da27e451c7c60790043aaf8b4731/pendulum-3.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:937a529aa302efa18dcf25e53834964a87ffb2df8f80e3669ab7757a6126beaf", size = 327574, upload-time = "2026-01-30T11:21:09.715Z" }, + { url = "https://files.pythonhosted.org/packages/76/fa/ff2aa992b23f0543c709b1a3f3f9ed760ec71fd02c8bb01f93bf008b52e4/pendulum-3.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85c7689defc65c4dc29bf257f7cca55d210fabb455de9476e1748d2ab2ae80d7", size = 339891, upload-time = "2026-01-30T11:21:11.089Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4e/25b4fa11d19503d50d7b52d7ef943c0f20fd54422aaeb9e38f588c815c50/pendulum-3.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5e216e5a412563ea2ecf5de467dcf3d02717947fcdabe6811d5ee360726b02b", size = 373726, upload-time = "2026-01-30T11:21:12.493Z" }, + { url = "https://files.pythonhosted.org/packages/4f/30/0acad6396c4e74e5c689aa4f0b0c49e2ecdcfce368e7b5bf35ca1c0fc61a/pendulum-3.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a2af22eeec438fbaac72bb7fba783e0950a514fba980d9a32db394b51afccec", size = 379827, upload-time = "2026-01-30T11:21:14.08Z" }, + { url = "https://files.pythonhosted.org/packages/3a/f7/e6a2fdf2a23d59b4b48b8fa89e8d4bf2dd371aea2c6ba8fcecec20a4acb9/pendulum-3.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3159cceb54f5aa8b85b141c7f0ce3fac8bdd1ffdc7c79e67dca9133eac7c4d11", size = 348921, upload-time = "2026-01-30T11:21:15.816Z" }, + { url = "https://files.pythonhosted.org/packages/7f/f2/c15fa7f9ad4e181aa469b6040b574988bd108ccdf4ae509ad224f9e4db44/pendulum-3.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c39ea5e9ffa20ea8bae986d00e0908bd537c8468b71d6b6503ab0b4c3d76e0ea", size = 517188, upload-time = "2026-01-30T11:21:17.835Z" }, + { url = "https://files.pythonhosted.org/packages/47/c7/5f80b12ee88ec26e930c3a5a602608a63c29cf60c81a0eb066d583772550/pendulum-3.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e5afc753e570cce1f44197676371f68953f7d4f022303d141bb09f804d5fe6d7", size = 561833, upload-time = "2026-01-30T11:21:19.232Z" }, + { url = "https://files.pythonhosted.org/packages/90/15/1ac481626cb63db751f6281e294661947c1f0321ebe5d1c532a3b51a8006/pendulum-3.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:fd55c12560816d9122ca2142d9e428f32c0c083bf77719320b1767539c7a3a3b", size = 258725, upload-time = "2026-01-30T11:21:20.558Z" }, + { url = "https://files.pythonhosted.org/packages/40/ae/50b0398d7d027eb70a3e1e336de7b6e599c6b74431cb7d3863287e1292bb/pendulum-3.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:faef52a7ed99729f0838353b956f3fabf6c550c062db247e9e2fc2b48fcb9457", size = 253089, upload-time = "2026-01-30T11:21:22.497Z" }, + { url = "https://files.pythonhosted.org/packages/27/8c/400c8b8dbd7524424f3d9902ded64741e82e5e321d1aabbd68ade89e71cf/pendulum-3.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:addb0512f919fe5b70c8ee534ee71c775630d3efe567ea5763d92acff857cfc3", size = 337820, upload-time = "2026-01-30T11:21:24.305Z" }, + { url = "https://files.pythonhosted.org/packages/59/38/7c16f26cc55d9206d71da294ce6857d0da381e26bc9e0c2a069424c2b173/pendulum-3.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3aaa50342dc174acebdc21089315012e63789353957b39ac83cac9f9fc8d1075", size = 327551, upload-time = "2026-01-30T11:21:25.747Z" }, + { url = "https://files.pythonhosted.org/packages/0b/cd/f36ec5d56d55104232380fdbf84ff53cc05607574af3cbdc8a43991ac8a7/pendulum-3.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:927e9c9ab52ff68e71b76dd410e5f1cd78f5ea6e7f0a9f5eb549aea16a4d5354", size = 339894, upload-time = "2026-01-30T11:21:27.229Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/b9a1e546519c3a92d5bc17787cea925e06a20def2ae344fa136d2fc40338/pendulum-3.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:249d18f5543c9f43aba3bd77b34864ec8cf6f64edbead405f442e23c94fce63d", size = 373766, upload-time = "2026-01-30T11:21:28.642Z" }, + { url = "https://files.pythonhosted.org/packages/ea/a6/6471ab87ae2260594501f071586a765fc894817043b7d2d4b04e2eff4f31/pendulum-3.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c644cc15eec5fb02291f0f193195156780fd5a0affd7a349592403826d1a35e", size = 379837, upload-time = "2026-01-30T11:21:30.637Z" }, + { url = "https://files.pythonhosted.org/packages/0d/79/0ba0c14e862388f7b822626e6e989163c23bebe7f96de5ec4b207cbe7c3d/pendulum-3.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:063ab61af953bb56ad5bc8e131fd0431c915ed766d90ccecd7549c8090b51004", size = 348904, upload-time = "2026-01-30T11:21:32.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/34/df922c7c0b12719589d4954bfa5bdca9e02bcde220f5c5c1838a87118960/pendulum-3.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:26a3ae26c9dd70a4256f1c2f51addc43641813574c0db6ce5664f9861cd93621", size = 517173, upload-time = "2026-01-30T11:21:34.428Z" }, + { url = "https://files.pythonhosted.org/packages/87/ec/3b9e061eeee97b72a47c1434ee03f6d85f0284d9285d92b12b0fff2d19ac/pendulum-3.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:2b10d91dc00f424444a42f47c69e6b3bfd79376f330179dc06bc342184b35f9a", size = 561744, upload-time = "2026-01-30T11:21:35.861Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7e/f12fdb6070b7975c1fcfa5685dbe4ab73c788878a71f4d1d7e3c87979e37/pendulum-3.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:63070ff03e30a57b16c8e793ee27da8dac4123c1d6e0cf74c460ce9ee8a64aa4", size = 258746, upload-time = "2026-01-30T11:21:37.782Z" }, + { url = "https://files.pythonhosted.org/packages/c9/b8/5abd872056357f069ae34a9b24a75ac58e79092d16201d779a8dd31386bb/pendulum-3.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:c8dde63e2796b62070a49ce813ce200aba9186130307f04ec78affcf6c2e8122", size = 253028, upload-time = "2026-01-30T11:21:39.381Z" }, + { url = "https://files.pythonhosted.org/packages/82/99/5b9cc823862450910bcb2c7cdc6884c0939b268639146d30e4a4f55eb1f1/pendulum-3.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c17ac069e88c5a1e930a5ae0ef17357a14b9cc5a28abadda74eaa8106d241c8e", size = 338281, upload-time = "2026-01-30T11:21:40.812Z" }, + { url = "https://files.pythonhosted.org/packages/cd/3a/64a35260f6ac36c0ad50eeb5f1a465b98b0d7603f79a5c2077c41326d639/pendulum-3.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e1fbb540edecb21f8244aebfb05a1f2333ddc6c7819378c099d4a61cc91ae93c", size = 328030, upload-time = "2026-01-30T11:21:42.778Z" }, + { url = "https://files.pythonhosted.org/packages/da/6b/1140e09310035a2afb05bb90a2b8fbda9d3222e03b92de9533123afe6b65/pendulum-3.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c67fb9a1fe8fc1adae2cc01b0c292b268c12475b4609ff4aed71c9dd367b4d", size = 340206, upload-time = "2026-01-30T11:21:44.148Z" }, + { url = "https://files.pythonhosted.org/packages/52/4a/a493de56cbc24a64b21ac6ba98513a9ec5c67daa3dba325e39a8e53f30d8/pendulum-3.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:baa9a66c980defda6cfe1275103a94b22e90d83ebd7a84cc961cee6cbd25a244", size = 373976, upload-time = "2026-01-30T11:21:45.56Z" }, + { url = "https://files.pythonhosted.org/packages/3c/4c/f083c4fd1a161d4ab218680cc906338c541497b3098373f2241f58c429cb/pendulum-3.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef8f783fa7a14973b0596d8af2a5b2d90858a55030e9b4c6885eb4284b88314f", size = 380075, upload-time = "2026-01-30T11:21:46.959Z" }, + { url = "https://files.pythonhosted.org/packages/57/b6/333a0fcb33bf15eb879a46a11ce6300c1698a141e689665fe430783ff8d6/pendulum-3.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d2e9bfb065727d8676e7ada3793b47a24349500a5e9637404355e482c822be", size = 349026, upload-time = "2026-01-30T11:21:48.271Z" }, + { url = "https://files.pythonhosted.org/packages/43/1a/dfb526ec0cba1e7cd6a5e4f4dd64a6ada7428d1449c54b15f7b295f6e122/pendulum-3.2.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:55d7ba6bb74171c3ee409bf30076ee3a259a3c2bb147ac87ebb76aaa3cf5d3a2", size = 517395, upload-time = "2026-01-30T11:21:49.643Z" }, + { url = "https://files.pythonhosted.org/packages/c9/37/b4f2b5f1200351c4869b8b46ad5c21019e3dbe0417f5867ae969fad7b5fe/pendulum-3.2.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:a50d8cf42f06d3d8c3f8bb2a7ac47fa93b5145e69de6a7209be6a47afdd9cf76", size = 561926, upload-time = "2026-01-30T11:21:51.698Z" }, + { url = "https://files.pythonhosted.org/packages/a0/9e/567376582da58f5fe8e4f579db2bcfbf243cf619a5825bdf1023ad1436b3/pendulum-3.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:e5bbb92b155cd5018b3cf70ee49ed3b9c94398caaaa7ed97fe41e5bb5a968418", size = 258817, upload-time = "2026-01-30T11:21:53.074Z" }, + { url = "https://files.pythonhosted.org/packages/95/67/dfffd7eb50d67fa821cd4d92cf71575ead6162930202bc40dfcedf78c38c/pendulum-3.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:d53134418e04335c3029a32e9341cccc9b085a28744fb5ee4e6a8f5039363b1a", size = 253292, upload-time = "2026-01-30T11:21:54.484Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0d/d5ac8468a1b40f09a62d6e91654088de432367907579dd161c0fb1bdf222/pendulum-3.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9585594d32faa71efa5a78f576f1ee4f79e9c5340d7c6f0cd6c5dfe725effaaa", size = 338760, upload-time = "2026-01-30T11:22:12.225Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e5/7fa8c8be6caac8e0be78fbe7668df571f44820ed779cb3736fab645fcba8/pendulum-3.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:26401e2de77c437e8f3b6160c08c6c5d45518d906f8f9b48fd7cb5aa0f4e2aff", size = 328333, upload-time = "2026-01-30T11:22:13.811Z" }, + { url = "https://files.pythonhosted.org/packages/ad/78/73a1031b7d1bf7986e8e655cea3f018164b3470aecfea25a4074e77dda73/pendulum-3.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:637e65af042f383a2764a886aa28ccc6f853bf7a142df18e41c720542934c13b", size = 340841, upload-time = "2026-01-30T11:22:15.278Z" }, + { url = "https://files.pythonhosted.org/packages/49/40/4e36e9074e92b0164c088b9ada3c02bfea386d83e24fa98b30fe9b6e61a8/pendulum-3.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6e46c28f4d067233c4a4c42748f4ffa641d9289c09e0e81488beb6d4b3fab51", size = 348959, upload-time = "2026-01-30T11:22:16.718Z" }, + { url = "https://files.pythonhosted.org/packages/24/99/8bf7fcb91b526e1efe17d047faa845709b88800fff915ff848ff26054293/pendulum-3.2.0-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:71d46bcc86269f97bfd8c5f1475d55e717696a0a010b1871023605ca94624031", size = 518102, upload-time = "2026-01-30T11:22:18.2Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b0/a36c468d2d0dec62ddea7c5e4177e93abb12f48ac90f09f24d0581c5189f/pendulum-3.2.0-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5cd956d4176afc7bfe8a91bf3f771b46ff8d326f6c5bf778eb5010eb742ebba6", size = 561884, upload-time = "2026-01-30T11:22:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/c5/4d/dad105261898907bf806cabca53d3878529a9fa2c0d5d7f95f2035246fc2/pendulum-3.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:39ef129d7b90aab49708645867abdd207b714ba7bff12dae549975b0aca09716", size = 261236, upload-time = "2026-01-30T11:22:21.059Z" }, + { url = "https://files.pythonhosted.org/packages/02/fb/d65db067a67df7252f18b0cb7420dda84078b9e8bfb375215469c14a50be/pendulum-3.2.0-py3-none-any.whl", hash = "sha256:f3a9c18a89b4d9ef39c5fa6a78722aaff8d5be2597c129a3b16b9f40a561acf3", size = 114111, upload-time = "2026-01-30T11:22:22.361Z" }, +] + [[package]] name = "pillow" version = "12.2.0" @@ -5396,15 +5532,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/95/129ea37efd6cd6ed00f62baae6543345c677810b8a3bf0026756e1d3cf3c/youtube_transcript_api-1.2.4-py3-none-any.whl", hash = "sha256:03878759356da5caf5edac77431780b91448fb3d8c21d4496015bdc8a7bc43ff", size = 485227, upload-time = "2026-01-29T09:09:15.427Z" }, ] -[[package]] -name = "zipp" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" }, -] - [[package]] name = "zstandard" version = "0.25.0" diff --git a/frontend/src/components/ProgressTracker.jsx b/frontend/src/components/ProgressTracker.jsx index 72c39fd..ba5dee0 100644 --- a/frontend/src/components/ProgressTracker.jsx +++ b/frontend/src/components/ProgressTracker.jsx @@ -3,6 +3,7 @@ import { FiCheck, FiLoader, FiClock, FiAlertTriangle } from 'react-icons/fi'; const STEPS = [ { key: 'extracting_job_info', label: 'Extracting job information' }, + { key: 'parsing_resume', label: 'Parsing your resume' }, { key: 'searching_projects', label: 'Searching GitHub projects' }, { key: 'building_profile', label: 'Building your profile' }, { key: 'tailoring_resume', label: 'Tailoring your resume' }, diff --git a/frontend/src/components/ResumeUpload.jsx b/frontend/src/components/ResumeUpload.jsx index 5e8978a..a1609b6 100644 --- a/frontend/src/components/ResumeUpload.jsx +++ b/frontend/src/components/ResumeUpload.jsx @@ -1,6 +1,6 @@ import { useState, useRef } from 'react'; import api from '../services/api'; -import { FiUploadCloud, FiFile, FiTrash2, FiExternalLink, FiEye, FiDownload } from 'react-icons/fi'; +import { FiUploadCloud, FiFile, FiTrash2, FiEye, FiDownload } from 'react-icons/fi'; import ResumePreviewModal from './ResumePreviewModal'; export default function ResumeUpload({ resumes, onRefresh }) { @@ -12,8 +12,8 @@ export default function ResumeUpload({ resumes, onRefresh }) { const handleUpload = async (file) => { if (!file) return; - if (!file.name.endsWith('.md')) { - setError('Only Markdown (.md) files are accepted.'); + if (!/\.(md|pdf|docx)$/i.test(file.name)) { + setError('Only Markdown (.md), PDF (.pdf) or Word (.docx) files are accepted.'); return; } setError(''); @@ -41,9 +41,17 @@ export default function ResumeUpload({ resumes, onRefresh }) { } }; + const isMarkdown = (name) => /\.md$/i.test(name || ''); + const handleDownload = async (resume) => { setError(''); try { + if (!isMarkdown(resume.original_filename)) { + // Binary resumes (.pdf/.docx) are served via a GCS signed URL. + const res = await api.get(`/resumes/${resume.id}/preview`); + window.open(res.data.signed_url, '_blank', 'noopener'); + return; + } const res = await api.get(`/resumes/${resume.id}/content`); const blob = new Blob([res.data.content], { type: 'text/markdown' }); const url = URL.createObjectURL(blob); @@ -59,6 +67,21 @@ export default function ResumeUpload({ resumes, onRefresh }) { } }; + const handleView = async (resume) => { + setError(''); + if (isMarkdown(resume.original_filename)) { + setPreviewId(resume.id); + return; + } + // The markdown modal can't render binaries — open the signed URL instead. + try { + const res = await api.get(`/resumes/${resume.id}/preview`); + window.open(res.data.signed_url, '_blank', 'noopener'); + } catch (err) { + setError(err.response?.data?.detail || 'Preview failed.'); + } + }; + const handleDrop = (e) => { e.preventDefault(); setDragActive(false); @@ -91,22 +114,12 @@ export default function ResumeUpload({ resumes, onRefresh }) { {uploading ? 'Uploading...' : 'Drag & drop or click to upload'}

- Only .md files accepted + .md, .pdf and .docx files accepted

- handleUpload(e.target.files[0])} /> - {/* Conversion links */} -
- {error &&

{error}

} {/* Resume list */} @@ -123,7 +136,7 @@ export default function ResumeUpload({ resumes, onRefresh }) { {r.original_filename} -

6(4_|k9^n9QHr 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