From 822b68c10f15228c7c81ef812aa37e997fd02583 Mon Sep 17 00:00:00 2001 From: bipproduction Date: Sun, 7 Dec 2025 09:00:54 +0800 Subject: [PATCH] tambahannya --- .env.example | 4 + .gitignore | 42 + .vscode/settings.json | 3 + README.md | 138 + bin/env.generate.ts | 53 + bin/route.generate.ts | 416 + bun-env.d.ts | 17 + bun.lock | 589 ++ bunfig.toml | 5 + chatterbox/jobs/baru.json | 1 + chatterbox/jobs/dewi.json | 1 + dayu.wav | Bin 0 -> 2842364 bytes hasilTTS_FINAL.mp3 | Bin 0 -> 1246734 bytes malik.wav | Bin 0 -> 2215980 bytes malik_output.wav | Bin 0 -> 2216014 bytes malik_output10.wav | Bin 0 -> 958542 bytes output/merged.wav | Bin 0 -> 4227918 bytes package.json | 56 + postcss.config.js | 16 + prisma/schema.prisma | 31 + prisma/seed.ts | 30 + public/READS.md | 138 + public/apa.html | 13 + public/kelincix.png | Bin 0 -> 20701 bytes public/styles.css | 7776 +++++++++++++++++ py/main.py | 456 + py/op.py | 322 + py/tts_util.py | 213 + src/App.tsx | 17 + src/AppRoutes.tsx | 226 + src/Landing.tsx | 443 + src/clientRoutes.ts | 15 + src/components/ProtectedRoute.tsx | 25 + src/frontend.tsx | 26 + src/index.css | 187 + src/index.html | 13 + src/index.tsx | 120 + src/lib/apiFetch.ts | 11 + src/logo.svg | 1 + src/pages/Home.tsx | 31 + src/pages/Login.tsx | 100 + src/pages/NotFound.tsx | 19 + src/pages/Register.tsx | 108 + src/pages/dashboard/apikey/apikey_page.tsx | 232 + .../chatterbox-tts/ChatterboxListFile.tsx | 225 + .../chatterbox-tts/ChatterboxListPrompt.tsx | 175 + .../ChatterboxRegisterPromptFile.tsx | 104 + .../chatterbox-tts/ChatterboxTTSAsync.tsx | 162 + .../chatterbox-tts/chatterbox-tts-_page.tsx | 18 + .../chatterbox-tts/chatterbox-tts_layout.tsx | 5 + src/pages/dashboard/dashboard_layout.tsx | 228 + src/pages/dashboard/dashboard_page.tsx | 118 + .../tiktok-tts/tiktok_tts_layout.tsx | 5 + .../dashboard/tiktok-tts/tiktok_tts_page.tsx | 274 + src/react.svg | 8 + src/routeTypes.ts | 11 + src/server/lib/chatterbox.env.ts | 27 + src/server/lib/prisma.ts | 11 + src/server/lib/tts_chatterbox.ts | 182 + src/server/lib/tts_chatterbox_download.ts | 121 + src/server/lib/tts_chatterbox_merge.ts | 90 + src/server/lib/tts_tiktok.ts | 335 + src/server/middlewares/apiAuth.ts | 84 + src/server/routes/apikey_route.ts | 105 + src/server/routes/auth_route.ts | 237 + src/server/routes/chatterbox_tts.ts | 182 + src/server/routes/tts_tiktok.ts | 103 + ...fe6a-4e0e-a9fd-9c94dcf70662_EBWzB_0001.wav | Bin 0 -> 1236558 bytes ...b957-456c-9199-694e25e7b75f_EBWzB_0002.wav | Bin 0 -> 1309518 bytes ...5b75-4e09-adac-11e0186831bf_EBWzB_0004.wav | Bin 0 -> 489678 bytes ...af2d-4ac7-b269-154820eaa6b8_EBWzB_0003.wav | Bin 0 -> 1192398 bytes temp-tts/jobs.json | 1 + tsconfig.json | 36 + .../07dfc3c3-aec3-403d-a314-af3f356c95e5.mp3 | Bin 0 -> 1246734 bytes ...2_09c23559-8e57-4895-bf70-cf23143b2faa.mp3 | Bin 0 -> 461274 bytes types/env.d.ts | 8 + x.sh | 7 + xc.sh | 16 + xclone.py | 245 + xclonev2.py | 267 + xclonev3.py | 427 + xdownload.ts | 101 + xfetch.ts | 209 + xfetch.txt | 416 + xmerge.ts | 106 + xpooling.ts | 124 + xtest.sh | 6 + xtiktok.ts | 325 + xx.ts | 1 + 89 files changed, 16999 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 bin/env.generate.ts create mode 100644 bin/route.generate.ts create mode 100644 bun-env.d.ts create mode 100644 bun.lock create mode 100644 bunfig.toml create mode 100644 chatterbox/jobs/baru.json create mode 100644 chatterbox/jobs/dewi.json create mode 100644 dayu.wav create mode 100644 hasilTTS_FINAL.mp3 create mode 100644 malik.wav create mode 100644 malik_output.wav create mode 100644 malik_output10.wav create mode 100644 output/merged.wav create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 prisma/schema.prisma create mode 100644 prisma/seed.ts create mode 100644 public/READS.md create mode 100644 public/apa.html create mode 100644 public/kelincix.png create mode 100644 public/styles.css create mode 100644 py/main.py create mode 100644 py/op.py create mode 100644 py/tts_util.py create mode 100644 src/App.tsx create mode 100644 src/AppRoutes.tsx create mode 100644 src/Landing.tsx create mode 100644 src/clientRoutes.ts create mode 100644 src/components/ProtectedRoute.tsx create mode 100644 src/frontend.tsx create mode 100644 src/index.css create mode 100644 src/index.html create mode 100644 src/index.tsx create mode 100644 src/lib/apiFetch.ts create mode 100644 src/logo.svg create mode 100644 src/pages/Home.tsx create mode 100644 src/pages/Login.tsx create mode 100644 src/pages/NotFound.tsx create mode 100644 src/pages/Register.tsx create mode 100644 src/pages/dashboard/apikey/apikey_page.tsx create mode 100644 src/pages/dashboard/chatterbox-tts/ChatterboxListFile.tsx create mode 100644 src/pages/dashboard/chatterbox-tts/ChatterboxListPrompt.tsx create mode 100644 src/pages/dashboard/chatterbox-tts/ChatterboxRegisterPromptFile.tsx create mode 100644 src/pages/dashboard/chatterbox-tts/ChatterboxTTSAsync.tsx create mode 100644 src/pages/dashboard/chatterbox-tts/chatterbox-tts-_page.tsx create mode 100644 src/pages/dashboard/chatterbox-tts/chatterbox-tts_layout.tsx create mode 100644 src/pages/dashboard/dashboard_layout.tsx create mode 100644 src/pages/dashboard/dashboard_page.tsx create mode 100644 src/pages/dashboard/tiktok-tts/tiktok_tts_layout.tsx create mode 100644 src/pages/dashboard/tiktok-tts/tiktok_tts_page.tsx create mode 100644 src/react.svg create mode 100644 src/routeTypes.ts create mode 100644 src/server/lib/chatterbox.env.ts create mode 100644 src/server/lib/prisma.ts create mode 100644 src/server/lib/tts_chatterbox.ts create mode 100644 src/server/lib/tts_chatterbox_download.ts create mode 100644 src/server/lib/tts_chatterbox_merge.ts create mode 100644 src/server/lib/tts_tiktok.ts create mode 100644 src/server/middlewares/apiAuth.ts create mode 100644 src/server/routes/apikey_route.ts create mode 100644 src/server/routes/auth_route.ts create mode 100644 src/server/routes/chatterbox_tts.ts create mode 100644 src/server/routes/tts_tiktok.ts create mode 100644 temp-tts/04282526-fe6a-4e0e-a9fd-9c94dcf70662_EBWzB_0001.wav create mode 100644 temp-tts/2e196685-b957-456c-9199-694e25e7b75f_EBWzB_0002.wav create mode 100644 temp-tts/de80f011-5b75-4e09-adac-11e0186831bf_EBWzB_0004.wav create mode 100644 temp-tts/f16b7522-af2d-4ac7-b269-154820eaa6b8_EBWzB_0003.wav create mode 100644 temp-tts/jobs.json create mode 100644 tsconfig.json create mode 100644 tts_tiktok_output/final/07dfc3c3-aec3-403d-a314-af3f356c95e5.mp3 create mode 100644 tts_tiktok_output/final/baru_2_09c23559-8e57-4895-bf70-cf23143b2faa.mp3 create mode 100644 types/env.d.ts create mode 100644 x.sh create mode 100644 xc.sh create mode 100644 xclone.py create mode 100644 xclonev2.py create mode 100644 xclonev3.py create mode 100644 xdownload.ts create mode 100644 xfetch.ts create mode 100644 xfetch.txt create mode 100644 xmerge.ts create mode 100644 xpooling.ts create mode 100644 xtest.sh create mode 100644 xtiktok.ts create mode 100644 xx.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..012c5d6 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +DATABASE_URL="postgresql://bip:Production_123@localhost:5432/mydb?schema=public" +JWT_SECRET=super_sangat_rahasia_sekali +BUN_PUBLIC_BASE_URL=http://localhost:3000 +PORT=3000 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..97fdffa --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# dependencies (bun install) +node_modules + + +# output +out +dist +*.tgz + +# code coverage +coverage +*.lcov + +# logs +logs +_.log +report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# caches +.eslintcache +.cache +*.tsbuildinfo + +# IntelliJ based IDEs +.idea + +# Finder (MacOS) folder config +.DS_Store + +# Prisma generated client +generated/ + +# nextpush +nextpush +nextpush/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2b7e46d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "yapf" +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e006e16 --- /dev/null +++ b/README.md @@ -0,0 +1,138 @@ +# Bun React Template Starter + +This template is a starting point for building modern full-stack web applications using Bun, React, ElysiaJS, and Prisma. This project is designed to provide a fast, efficient, and structured development experience with a cutting-edge technology stack. + +## Key Features + +- **Super-Fast Runtime**: Built on top of [Bun](https://bun.sh/), a high-performance JavaScript runtime. +- **End-to-End Typesafe Backend**: Utilizes [ElysiaJS](https://elysiajs.com/) for a type-safe API from the backend to the frontend. +- **Automatic API Documentation**: Comes with [Elysia Swagger](https://elysiajs.com/plugins/swagger) to automatically generate interactive API documentation. +- **Modern Frontend**: A feature-rich and customizable user interface using [React](https://react.dev/) and [Mantine UI](https://mantine.dev/). +- **Easy Database Access**: Integrated with [Prisma](https://www.prisma.io/) as an ORM for intuitive and secure database interactions. +- **Clear Project Structure**: Logical file and folder organization to facilitate easy navigation and development. + +## Tech Stack + +- **Runtime**: Bun +- **Backend**: + - **Framework**: ElysiaJS + - **ElysiaJS Modules**: + - `@elysiajs/cors`: Manages Cross-Origin Resource Sharing policies. + - `@elysiajs/jwt`: JSON Web Token-based authentication. + - `@elysiajs/swagger`: Creates API documentation (Swagger/OpenAPI). + - `@elysiajs/eden`: A typesafe RPC-like client to connect the frontend with the Elysia API. +- **Frontend**: + - **Library**: React + - **UI Framework**: Mantine + - **Routing**: React Router + - **Data Fetching**: SWR +- **Database**: + - **ORM**: Prisma + - **Supported Databases**: PostgreSQL (default), MySQL, SQLite, etc. +- **Language**: TypeScript + +## Getting Started + +### 1. Clone the Repository + +```bash +git clone https://github.com/your-username/bun-react-template-starter.git +cd bun-react-template-starter +``` + +### 2. Install Dependencies + +Ensure you have [Bun](https://bun.sh/docs/installation) installed. Then, run the following command: + +```bash +bun install +``` + +### 3. Configure Environment Variables + +Copy the `.env.example` file to `.env` and customize the values. + +```bash +cp .env.example .env +``` + +Fill in your `.env` file similar to the example below: + +``` +DATABASE_URL="postgresql://user:password@host:port/database?schema=public" +JWT_SECRET=a_super_long_and_secure_secret +BUN_PUBLIC_BASE_URL=http://localhost:3000 +PORT=3000 +``` + +After that, create TypeScript type declarations for your environment variables with the provided script: + +```bash +bun run generate:env +``` + +This command will generate a `types/env.d.ts` file based on your `.env`. + +### 4. Database Preparation + +Make sure your PostgreSQL database server is running. Then, apply the Prisma schema to your database: + +```bash +bunx prisma db push +``` + +You can also seed the database with initial data using the following script: + +```bash +bun run seed +``` + +### 5. Running the Development Server + +```bash +bun run dev +``` + +The application will be running at `http://localhost:3000`. The server supports hot-reloading, so changes in the code will be reflected instantly without needing a manual restart. + +### 6. Accessing API Documentation (Swagger) + +Once the server is running, you can access the automatically generated API documentation at: + +`http://localhost:3000/swagger` + +## Available Scripts + +- `bun run dev`: Runs the development server with hot-reloading. +- `bun run build`: Builds the frontend application for production into the `dist` directory. +- `bun run start`: Runs the application in production mode. +- `bun run seed`: Executes the database seeding script located in `prisma/seed.ts`. +- `bun run generate:route`: A utility to create new route files in the backend. +- `bun run generate:env`: Generates a type definition file (`.d.ts`) from the variables in `.env`. + +## Project Structure + +``` +/ +├── bin/ # Utility scripts (generators) +├── prisma/ # Database schema, migrations, and seed +├── src/ # Main source code +│ ├── App.tsx # Root application component +│ ├── clientRoutes.ts # Route definitions for the frontend +│ ├── frontend.tsx # Entry point for client-side rendering (React) +│ ├── index.css # Global CSS file +│ ├── index.html # Main HTML template +│ ├── index.tsx # Main entry point for the app (server and client) +│ ├── components/ # Reusable React components +│ ├── lib/ # Shared libraries/helpers (e.g., apiFetch) +│ ├── pages/ # React page components +│ └── server/ # Backend code (ElysiaJS) +│ ├── lib/ # Server-specific libraries (e.g., prisma client) +│ ├── middlewares/ # Middleware for the API +│ └── routes/ # API route files +└── types/ # TypeScript type definitions +``` + +## Contributing + +Contributions are highly welcome! Please feel free to create a pull request to add features, fix bugs, or improve the documentation. diff --git a/bin/env.generate.ts b/bin/env.generate.ts new file mode 100644 index 0000000..f186f5b --- /dev/null +++ b/bin/env.generate.ts @@ -0,0 +1,53 @@ +import * as fs from "fs"; +import * as path from "path"; +import * as dotenv from "dotenv"; + +interface GenerateEnvTypesOptions { + envFilePath?: string; + outputDir?: string; + outputFileName?: string; +} + +export function generateEnvTypes(options: GenerateEnvTypesOptions = {}) { + const { + envFilePath = path.resolve(process.cwd(), ".env"), + outputDir = path.resolve(process.cwd(), "types"), + outputFileName = "env.d.ts", + } = options; + + const outputFile = path.join(outputDir, outputFileName); + + // 1. Baca .env + if (!fs.existsSync(envFilePath)) { + console.warn(`⚠️ .env file not found at: ${envFilePath}`); + return; + } + + const envContent = fs.readFileSync(envFilePath, "utf-8"); + const parsed = dotenv.parse(envContent); + + // 2. Generate TypeScript declare + const lines = Object.keys(parsed).map((key) => ` ${key}?: string;`); + + const fileContent = `declare namespace NodeJS { + interface ProcessEnv { +${lines.join("\n")} + } +} +`; + + // 3. Buat folder kalau belum ada + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + + // 4. Tulis file + fs.writeFileSync(outputFile, fileContent, "utf-8"); + + console.log(`✅ Env types generated at: ${outputFile}`); +} + +if (import.meta.main) { + generateEnvTypes(); +} + diff --git a/bin/route.generate.ts b/bin/route.generate.ts new file mode 100644 index 0000000..b30b9e7 --- /dev/null +++ b/bin/route.generate.ts @@ -0,0 +1,416 @@ +#!/usr/bin/env bun +import fs from "fs"; +import path from "path"; +import * as parser from "@babel/parser"; +import traverse from "@babel/traverse"; +import * as t from "@babel/types"; + +import { readdirSync, statSync, writeFileSync } from "fs"; +import _ from "lodash"; +import { basename, extname, join, relative } from "path"; + +const PAGES_DIR = join(process.cwd(), "src/pages"); +const OUTPUT_FILE = join(process.cwd(), "src/AppRoutes.tsx"); + +/****************************** + * Prefetch Helper Template + ******************************/ +const PREFETCH_HELPER = ` +/** + * Prefetch lazy component: + * - Hover + * - Visible (viewport) + * - Browser idle + */ +export function attachPrefetch(el: HTMLElement | null, preload: () => void) { + if (!el) return; + let done = false; + + const run = () => { + if (done) return; + done = true; + preload(); + }; + + // 1) On hover + el.addEventListener("pointerenter", run, { once: true }); + + // 2) On visible (IntersectionObserver) + const io = new IntersectionObserver((entries) => { + if (entries && entries[0] && entries[0].isIntersecting) { + run(); + io.disconnect(); + } + }); + io.observe(el); + + // 3) On idle + if ("requestIdleCallback" in window) { + requestIdleCallback(() => run()); + } else { + setTimeout(run, 200); + } +} +`; + +/****************************** + * Component Name Generator + ******************************/ +const toComponentName = (fileName: string): string => + fileName + .replace(/\.[^/.]+$/, "") + .replace(/[_-]+/g, " ") + .replace(/([a-z])([A-Z])/g, "$1 $2") + .replace(/\b\w/g, (c) => c.toUpperCase()) + .replace(/\s+/g, ""); + +/****************************** + * Route Path Normalizer + ******************************/ +function toRoutePath(name: string): string { + name = name.replace(/\.[^/.]+$/, ""); + + if (name.toLowerCase() === "home") return "/"; + if (name.toLowerCase() === "login") return "/login"; + if (name.toLowerCase() === "notfound") return "/*"; + + if (name.startsWith("[") && name.endsWith("]")) + return `:${name.slice(1, -1)}`; + + name = name.replace(/_page$/i, "").replace(/^form_/i, ""); + return _.kebabCase(name); +} + +/****************************** + * Scan Folder + Validation + Dynamic Duplicate Check + ******************************/ +function scan(dir: string): any[] { + const items = readdirSync(dir); + const routes: any[] = []; + const dynamicParams = new Set(); + + for (const item of items) { + const full = join(dir, item); + const stat = statSync(full); + + if (stat.isDirectory()) { + if (!/^[a-zA-Z0-9_-]+$/.test(item)) { + console.warn(`⚠️ Invalid folder name: ${item}`); + } + + routes.push({ + name: item, + path: _.kebabCase(item), + children: scan(full), + }); + } else if (extname(item) === ".tsx") { + const base = basename(item, ".tsx"); + + if (!/^[a-zA-Z0-9_[\]-]+$/.test(base)) { + console.warn(`⚠️ Invalid file name: ${item}`); + } + + if (base.startsWith("[") && base.endsWith("]")) { + const p = base.slice(1, -1); + if (dynamicParams.has(p)) { + console.error(`❌ Duplicate dynamic param "${p}" in ${dir}`); + process.exit(1); + } + dynamicParams.add(p); + } + + routes.push({ + name: base, + filePath: relative(join(process.cwd(), "src"), full).replace(/\\/g, "/"), + }); + } + } + return routes; +} + +/****************************** + * Index Detection + ******************************/ +function findIndexFile(folderName: string, children: any[]) { + const lower = folderName.toLowerCase(); + + return ( + children.find((r: any) => r.name.toLowerCase().endsWith("_home")) || + children.find((r: any) => r.name.toLowerCase() === "index") || + children.find((r: any) => r.name.toLowerCase() === `${lower}_page`) + ); +} + +/****************************** + * Generate JSX (Lazy + Prefetch) + ******************************/ +function generateJSX(routes: any[], parentPath = ""): string { + let jsx = ""; + + + for (const route of routes) { + if (route.children) { + const layout = route.children.find((r: any) => + r.name.endsWith("_layout") + ); + + if (layout) { + const LayoutComp = toComponentName( + layout.name.replace("_layout", "Layout") + ); + + const nested = route.children.filter((x: any) => x !== layout); + const nestedRoutes = generateJSX(nested, `${parentPath}/${route.path}`); + + const indexFile = findIndexFile(route.name, route.children); + + const indexRoute = indexFile + ? `} />` + : `}/>`; + + jsx += ` + }> + ${indexRoute} + ${nestedRoutes} + + `; + } else { + jsx += generateJSX(route.children, `${parentPath}/${route.path}`); + } + } else { + const Comp = toComponentName(route.name); + const routePath = toRoutePath(route.name); + + const fullPath = routePath.startsWith("/") + ? routePath + : `${parentPath}/${routePath}`.replace(/\/+/g, "/"); + + jsx += ` + }> + <${Comp}.Component /> + + } + /> + `; + } + } + + return jsx; +} + +/****************************** + * Lazy Import + Prefetch Injection + ******************************/ +function generateImports(routes: any[]): string { + const list: string[] = []; + + function walk(rs: any[]) { + for (const r of rs) { + if (r.children) walk(r.children); + else { + const C = toComponentName(r.name); + const file = r.filePath.replace(/\.tsx$/, ""); + + list.push(` + const ${C} = { + Component: React.lazy(() => import("./${file}")), + preload: () => import("./${file}") + }; + `); + } + } + } + walk(routes); + return list.join("\n"); +} + +/****************************** + * Generate AppRoutes.tsx + ******************************/ +function generateRoutes() { + const allRoutes = scan(PAGES_DIR); + const imports = generateImports(allRoutes); + const jsx = generateJSX(allRoutes); + + let loadingSkeleton = ` + const SkeletonLoading = () => { + return ( +
+ {Array.from({ length: 5 }, (_, i) => ( + + ))} +
+ ); + }; + + ` + + const final = ` +// ⚡ AUTO-GENERATED — DO NOT EDIT +import React from "react"; +import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; +import { Skeleton } from "@mantine/core"; + +${loadingSkeleton} +${PREFETCH_HELPER} +${imports} + +export default function AppRoutes() { + return ( + + + ${jsx} + + + ); +} +`; + + writeFileSync(OUTPUT_FILE, final); + console.log(`✅ Routes generated → ${OUTPUT_FILE}`); + + Bun.spawnSync(["bunx", "prettier", "--write", "src/**/*.tsx"]); +} + +/****************************** + * Extract flat client routes + ******************************/ +const SRC_DIR = path.resolve("src"); +const APP_ROUTES_FILE = join(SRC_DIR, "AppRoutes.tsx"); + +interface RouteNode { + path: string; + children: RouteNode[]; +} + +function getAttributePath(attrs: any[]) { + const attr = attrs.find( + (a) => t.isJSXAttribute(a) && a.name.name === "path" + ) as any; + + return attr?.value?.value ?? ""; +} + +function extractRouteNodes(node: t.JSXElement): RouteNode | null { + const op = node.openingElement; + if (!t.isJSXIdentifier(op.name) || op.name.name !== "Route") return null; + + const cur = getAttributePath(op.attributes); + const children: RouteNode[] = []; + + for (const c of node.children) { + if (t.isJSXElement(c)) { + const n = extractRouteNodes(c); + if (n) children.push(n); + } + } + return { path: cur, children }; +} + +function flattenRoutes(node: RouteNode, parent = ""): Record { + const r: Record = {}; + let full = node.path; + + if (full) { + if (!full.startsWith("/")) + full = + parent && full !== "/" + ? `${parent.replace(/\/$/, "")}/${full}` + : "/" + full; + full = full.replace(/\/+/g, "/"); + r[full] = full; + } + + for (const c of node.children) + Object.assign(r, flattenRoutes(c, full || parent)); + + return r; +} + +function extractRoutes(code: string) { + const ast = parser.parse(code, { + sourceType: "module", + plugins: ["jsx", "typescript"], + }); + + const routes: Record = {}; + + traverse(ast, { + JSXElement(p) { + const op = p.node.openingElement; + + if (t.isJSXIdentifier(op.name) && op.name.name === "Routes") { + for (const c of p.node.children) { + if (t.isJSXElement(c)) { + const root = extractRouteNodes(c); + if (root) Object.assign(routes, flattenRoutes(root)); + } + } + } + }, + }); + + return routes; +} + +/****************************** + * Type-Safe Route Builder + ******************************/ +function generateTypeSafe(routes: Record) { + const keys = Object.keys(routes).filter((x) => !x.includes("*")); + const union = keys.map((x) => `"${x}"`).join(" | "); + + const code = ` +export type AppRoute = ${union}; + +export function route(path: AppRoute, params?: Record) { + if (!params) return path; + let final = path; + for (const k of Object.keys(params)) { + final = final.replace(":" + k, params[k] + "") as AppRoute; + } + return final; +} +`; + + fs.writeFileSync(join(SRC_DIR, "routeTypes.ts"), code); + console.log("📄 routeTypes.ts generated."); +} + +/****************************** + * MAIN + ******************************/ +export default function run() { + generateRoutes(); + + const code = fs.readFileSync(APP_ROUTES_FILE, "utf-8"); + const routes = extractRoutes(code); + + const out = join(SRC_DIR, "clientRoutes.ts"); + + fs.writeFileSync( + out, + `// AUTO-GENERATED\nconst clientRoutes = ${JSON.stringify( + routes, + null, + 2 + )} as const;\nexport default clientRoutes;` + ); + + console.log(`📄 clientRoutes.ts saved → ${out}`); + + generateTypeSafe(routes); +} + +run(); diff --git a/bun-env.d.ts b/bun-env.d.ts new file mode 100644 index 0000000..72f1c26 --- /dev/null +++ b/bun-env.d.ts @@ -0,0 +1,17 @@ +// Generated by `bun init` + +declare module "*.svg" { + /** + * A path to the SVG file + */ + const path: `${string}.svg`; + export = path; +} + +declare module "*.module.css" { + /** + * A record of class names to their corresponding CSS module classes + */ + const classes: { readonly [key: string]: string }; + export = classes; +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..fb4add2 --- /dev/null +++ b/bun.lock @@ -0,0 +1,589 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "bun-react-template", + "dependencies": { + "@elysiajs/cors": "^1.4.0", + "@elysiajs/eden": "^1.4.5", + "@elysiajs/jwt": "^1.4.0", + "@elysiajs/swagger": "^1.3.1", + "@gradio/client": "^2.0.0", + "@mantine/core": "^8.3.8", + "@mantine/hooks": "^8.3.8", + "@mantine/modals": "^8.3.8", + "@mantine/notifications": "^8.3.8", + "@prisma/client": "^6.19.0", + "@prisma/extension-accelerate": "^3.0.0", + "@tabler/icons-react": "^3.35.0", + "@types/randomstring": "^1.3.0", + "dotenv": "^17.2.3", + "elysia": "^1.4.16", + "jwt-decode": "^4.0.0", + "lodash": "^4.17.21", + "node-av": "^5.0.2", + "randomstring": "^1.3.1", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "react-router-dom": "^7.9.6", + "swr": "^2.3.6", + "tiktok-tts": "^1.1.17", + "zod": "^4.1.13", + }, + "devDependencies": { + "@babel/parser": "^7.28.5", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@types/babel__traverse": "^7.28.0", + "@types/bun": "latest", + "@types/jwt-decode": "^3.1.0", + "@types/lodash": "^4.17.21", + "@types/react": "^19.2.6", + "@types/react-dom": "^19.2.3", + "postcss": "^8.5.6", + "postcss-preset-mantine": "^1.18.0", + "postcss-simple-vars": "^7.0.1", + "prisma": "^6.19.0", + }, + }, + }, + "packages": { + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], + + "@babel/runtime": ["@babel/runtime@7.28.4", "", {}, ""], + + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], + + "@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], + + "@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], + + "@borewit/text-codec": ["@borewit/text-codec@0.1.1", "", {}, "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA=="], + + "@elysiajs/cors": ["@elysiajs/cors@1.4.0", "", { "peerDependencies": { "elysia": ">= 1.4.0" } }, ""], + + "@elysiajs/eden": ["@elysiajs/eden@1.4.5", "", { "peerDependencies": { "elysia": ">= 1.4.0" } }, "sha512-hIOeH+S5NU/84A7+t8yB1JjxqjmzRkBF9fnLn6y+AH8EcF39KumOAnciMhIOkhhThVZvXZ3d+GsizRc+Fxoi8g=="], + + "@elysiajs/jwt": ["@elysiajs/jwt@1.4.0", "", { "dependencies": { "jose": "^6.0.11" }, "peerDependencies": { "elysia": ">= 1.4.0" } }, ""], + + "@elysiajs/swagger": ["@elysiajs/swagger@1.3.1", "", { "dependencies": { "@scalar/themes": "^0.9.52", "@scalar/types": "^0.0.12", "openapi-types": "^12.1.3", "pathe": "^1.1.2" }, "peerDependencies": { "elysia": ">= 1.3.0" } }, ""], + + "@fidm/asn1": ["@fidm/asn1@1.0.4", "", {}, "sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ=="], + + "@fidm/x509": ["@fidm/x509@1.2.1", "", { "dependencies": { "@fidm/asn1": "^1.0.4", "tweetnacl": "^1.0.1" } }, "sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, ""], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, ""], + + "@floating-ui/react": ["@floating-ui/react@0.27.16", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.6", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, ""], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, ""], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, ""], + + "@gradio/client": ["@gradio/client@2.0.0", "", { "dependencies": { "fetch-event-stream": "^0.1.5" } }, "sha512-AYy0/0nbN3xrjquQ1ScqZp9RHkw2mlg9+zsimYC1yxOW+TpKVpweUvKcuL0QLsf/Dq7zsYJfFxM8CRf9qaKC0w=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@leichtgewicht/ip-codec": ["@leichtgewicht/ip-codec@2.0.5", "", {}, "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw=="], + + "@mantine/core": ["@mantine/core@8.3.9", "", { "dependencies": { "@floating-ui/react": "^0.27.16", "clsx": "^2.1.1", "react-number-format": "^5.4.4", "react-remove-scroll": "^2.7.1", "react-textarea-autosize": "8.5.9", "type-fest": "^4.41.0" }, "peerDependencies": { "@mantine/hooks": "8.3.9", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "sha512-ivj0Crn5N521cI2eWZBsBGckg0ZYRqfOJz5vbbvYmfj65bp0EdsyqZuOxXzIcn2aUScQhskfvzyhV5XIUv81PQ=="], + + "@mantine/hooks": ["@mantine/hooks@8.3.9", "", { "peerDependencies": { "react": "^18.x || ^19.x" } }, "sha512-Dfz7W0+K1cq4Gb1WFQCZn8tsMXkLH6MV409wZR/ToqsxdNDUMJ/xxbfnwEXWEZjXNJd1wDETHgc+cZG2lTe3Xw=="], + + "@mantine/modals": ["@mantine/modals@8.3.9", "", { "peerDependencies": { "@mantine/core": "8.3.9", "@mantine/hooks": "8.3.9", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "sha512-0WOikHgECJeWA/1TNf+sxOnpNwQjmpyph3XEhzFkgneimW6Ry7R6qd/i345CDLSu6kP6FGGRI73SUROiTcu2Ng=="], + + "@mantine/notifications": ["@mantine/notifications@8.3.9", "", { "dependencies": { "@mantine/store": "8.3.9", "react-transition-group": "4.4.5" }, "peerDependencies": { "@mantine/core": "8.3.9", "@mantine/hooks": "8.3.9", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "sha512-emUdoCyaccf/NuNmJ4fQgloJ7hEod0Pde7XIoD9xUUztVchL143oWRU2gYm6cwqzSyjpjTaqPXfz5UvEBRYjZw=="], + + "@mantine/store": ["@mantine/store@8.3.9", "", { "peerDependencies": { "react": "^18.x || ^19.x" } }, "sha512-Z4tYW597mD3NxHLlJ3OJ1aKucmwrD9nhqobz+142JNw01aHqzKjxVXlu3L5GGa7F3u3OjXJk/qb1QmUs4sU+Jw=="], + + "@minhducsun2002/leb128": ["@minhducsun2002/leb128@1.0.0", "", {}, "sha512-eFrYUPDVHeuwWHluTG1kwNQUEUcFjVKYwPkU8z9DR1JH3AW7JtJsG9cRVGmwz809kKtGfwGJj58juCZxEvnI/g=="], + + "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], + + "@noble/hashes": ["@noble/hashes@1.8.0", "", {}, "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A=="], + + "@peculiar/asn1-cms": ["@peculiar/asn1-cms@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "@peculiar/asn1-x509-attr": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-2uZqP+ggSncESeUF/9Su8rWqGclEfEiz1SyU02WX5fUONFfkjzS2Z/F1Li0ofSmf4JqYXIOdCAZqIXAIBAT1OA=="], + + "@peculiar/asn1-csr": ["@peculiar/asn1-csr@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-BeWIu5VpTIhfRysfEp73SGbwjjoLL/JWXhJ/9mo4vXnz3tRGm+NGm3KNcRzQ9VMVqwYS2RHlolz21svzRXIHPQ=="], + + "@peculiar/asn1-ecc": ["@peculiar/asn1-ecc@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-FF3LMGq6SfAOwUG2sKpPXblibn6XnEIKa+SryvUl5Pik+WR9rmRA3OCiwz8R3lVXnYnyRkSZsSLdml8H3UiOcw=="], + + "@peculiar/asn1-pfx": ["@peculiar/asn1-pfx@2.6.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-pkcs8": "^2.6.0", "@peculiar/asn1-rsa": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-rtUvtf+tyKGgokHHmZzeUojRZJYPxoD/jaN1+VAB4kKR7tXrnDCA/RAWXAIhMJJC+7W27IIRGe9djvxKgsldCQ=="], + + "@peculiar/asn1-pkcs8": ["@peculiar/asn1-pkcs8@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-KyQ4D8G/NrS7Fw3XCJrngxmjwO/3htnA0lL9gDICvEQ+GJ+EPFqldcJQTwPIdvx98Tua+WjkdKHSC0/Km7T+lA=="], + + "@peculiar/asn1-pkcs9": ["@peculiar/asn1-pkcs9@2.6.0", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-pfx": "^2.6.0", "@peculiar/asn1-pkcs8": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "@peculiar/asn1-x509-attr": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-b78OQ6OciW0aqZxdzliXGYHASeCvvw5caqidbpQRYW2mBtXIX2WhofNXTEe7NyxTb0P6J62kAAWLwn0HuMF1Fw=="], + + "@peculiar/asn1-rsa": ["@peculiar/asn1-rsa@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-Nu4C19tsrTsCp9fDrH+sdcOKoVfdfoQQ7S3VqjJU6vedR7tY3RLkQ5oguOIB3zFW33USDUuYZnPEQYySlgha4w=="], + + "@peculiar/asn1-schema": ["@peculiar/asn1-schema@2.6.0", "", { "dependencies": { "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg=="], + + "@peculiar/asn1-x509": ["@peculiar/asn1-x509@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "asn1js": "^3.0.6", "pvtsutils": "^1.3.6", "tslib": "^2.8.1" } }, "sha512-uzYbPEpoQiBoTq0/+jZtpM6Gq6zADBx+JNFP3yqRgziWBxQ/Dt/HcuvRfm9zJTPdRcBqPNdaRHTVwpyiq6iNMA=="], + + "@peculiar/asn1-x509-attr": ["@peculiar/asn1-x509-attr@2.6.0", "", { "dependencies": { "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, "sha512-MuIAXFX3/dc8gmoZBkwJWxUWOSvG4MMDntXhrOZpJVMkYX+MYc/rUAU2uJOved9iJEoiUx7//3D8oG83a78UJA=="], + + "@peculiar/x509": ["@peculiar/x509@1.14.2", "", { "dependencies": { "@peculiar/asn1-cms": "^2.6.0", "@peculiar/asn1-csr": "^2.6.0", "@peculiar/asn1-ecc": "^2.6.0", "@peculiar/asn1-pkcs9": "^2.6.0", "@peculiar/asn1-rsa": "^2.6.0", "@peculiar/asn1-schema": "^2.6.0", "@peculiar/asn1-x509": "^2.6.0", "pvtsutils": "^1.3.6", "reflect-metadata": "^0.2.2", "tslib": "^2.8.1", "tsyringe": "^4.10.0" } }, "sha512-r2w1Hg6pODDs0zfAKHkSS5HLkOLSeburtcgwvlLLWWCixw+MmW3U6kD5ddyvc2Y2YdbGuVwCF2S2ASoU1cFAag=="], + + "@prisma/client": ["@prisma/client@6.19.0", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-QXFT+N/bva/QI2qoXmjBzL7D6aliPffIwP+81AdTGq0FXDoLxLkWivGMawG8iM5B9BKfxLIXxfWWAF6wbuJU6g=="], + + "@prisma/config": ["@prisma/config@6.19.0", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-zwCayme+NzI/WfrvFEtkFhhOaZb/hI+X8TTjzjJ252VbPxAl2hWHK5NMczmnG9sXck2lsXrxIZuK524E25UNmg=="], + + "@prisma/debug": ["@prisma/debug@6.19.0", "", {}, "sha512-8hAdGG7JmxrzFcTzXZajlQCidX0XNkMJkpqtfbLV54wC6LSSX6Vni25W/G+nAANwLnZ2TmwkfIuWetA7jJxJFA=="], + + "@prisma/engines": ["@prisma/engines@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0", "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", "@prisma/fetch-engine": "6.19.0", "@prisma/get-platform": "6.19.0" } }, "sha512-pMRJ+1S6NVdXoB8QJAPIGpKZevFjxhKt0paCkRDTZiczKb7F4yTgRP8M4JdVkpQwmaD4EoJf6qA+p61godDokw=="], + + "@prisma/engines-version": ["@prisma/engines-version@6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", "", {}, "sha512-gV7uOBQfAFlWDvPJdQxMT1aSRur3a0EkU/6cfbAC5isV67tKDWUrPauyaHNpB+wN1ebM4A9jn/f4gH+3iHSYSQ=="], + + "@prisma/extension-accelerate": ["@prisma/extension-accelerate@3.0.0", "", { "peerDependencies": { "@prisma/client": ">=4.16.1" } }, "sha512-xOhRCdPTdAwwdbxDr14s0rg73o8LunzRf8VtzFi4P6G/SvA3n/OgRIClXpihEQvoyDWVEIE29MdSxaaYdjsIMw=="], + + "@prisma/fetch-engine": ["@prisma/fetch-engine@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0", "@prisma/engines-version": "6.19.0-26.2ba551f319ab1df4bc874a89965d8b3641056773", "@prisma/get-platform": "6.19.0" } }, "sha512-OOx2Lda0DGrZ1rodADT06ZGqHzr7HY7LNMaFE2Vp8dp146uJld58sRuasdX0OiwpHgl8SqDTUKHNUyzEq7pDdQ=="], + + "@prisma/get-platform": ["@prisma/get-platform@6.19.0", "", { "dependencies": { "@prisma/debug": "6.19.0" } }, "sha512-ym85WDO2yDhC3fIXHWYpG3kVMBA49cL1XD2GCsCF8xbwoy2OkDQY44gEbAt2X46IQ4Apq9H6g0Ex1iFfPqEkHA=="], + + "@scalar/openapi-types": ["@scalar/openapi-types@0.1.1", "", {}, ""], + + "@scalar/themes": ["@scalar/themes@0.9.86", "", { "dependencies": { "@scalar/types": "0.1.7" } }, ""], + + "@scalar/types": ["@scalar/types@0.0.12", "", { "dependencies": { "@scalar/openapi-types": "0.1.1", "@unhead/schema": "^1.9.5" } }, ""], + + "@seydx/node-av-darwin-arm64": ["@seydx/node-av-darwin-arm64@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "darwin", "cpu": "arm64" }, "sha512-ddmg1id1GfSvdnYPv1UskJqkzjadNFyluFtMVr2j/pNDizqiCmR0jmX68HqaZjvyKEuttBVN9RUsRJVgrrkQsg=="], + + "@seydx/node-av-darwin-x64": ["@seydx/node-av-darwin-x64@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "darwin", "cpu": "x64" }, "sha512-ahiNSasdjNUx5U37+sjKLgptM0Q/y1ylvoGb110aVjcnNTcGze4HVxychDp9dVh1CJ789KcuKu7UciQxIgCwCg=="], + + "@seydx/node-av-linux-arm64": ["@seydx/node-av-linux-arm64@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "linux", "cpu": "arm64" }, "sha512-2UGd8CeBHPmT2qr9NEQJrr8VOYdzjqbPWgV9xSrIorTObnyJemwk9DggiXsd2gttcHTavgOs/LZ76Q24vby8sA=="], + + "@seydx/node-av-linux-x64": ["@seydx/node-av-linux-x64@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "linux", "cpu": "x64" }, "sha512-k1wJymAdYSTUvKlRdnJrihSDN+jdepwUXD6XOIx0XODrgm0pZCeIL7eUGRrfssr6EnCgM2Xhu7ATsf5K4lHojA=="], + + "@seydx/node-av-win32-arm64-mingw": ["@seydx/node-av-win32-arm64-mingw@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "win32", "cpu": "arm64" }, "sha512-qE8Fy9i5n7N+Bhs22rGGJCF1VrdjEIKS9gVK1spNpGq3/ZPR356RYg05jNfoYrO1/ZBLEqNFIJorjydxslh+yA=="], + + "@seydx/node-av-win32-arm64-msvc": ["@seydx/node-av-win32-arm64-msvc@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "win32", "cpu": "arm64" }, "sha512-vSODX+a254WxOycnudjv2utU0IJ/auoZ1uvoEbIEHD/kyu0uF3Or4EK52rtI0W/9tCsYH5v0gxw0rLM0uz2p6g=="], + + "@seydx/node-av-win32-x64-mingw": ["@seydx/node-av-win32-x64-mingw@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "win32", "cpu": "x64" }, "sha512-kby0c4UI+TAgoGDRZC7HcvqU/E1GAxnAGkzr52Ll0huOuZbBSl6GJFmyTYlwo2etFWSjRKWMiQwdGHLMRf8Yag=="], + + "@seydx/node-av-win32-x64-msvc": ["@seydx/node-av-win32-x64-msvc@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3" }, "os": "win32", "cpu": "x64" }, "sha512-wRveR2A6/nldFJ0XEWMbvtM7UAiDMqSNwFolRJqHUdwXvUxfseP4oabyOQZ6wx1z6DFgRS9Z3zobcrRlr/do2A=="], + + "@shinyoshiaki/binary-data": ["@shinyoshiaki/binary-data@0.6.1", "", { "dependencies": { "generate-function": "^2.3.1", "is-plain-object": "^2.0.3" } }, "sha512-7HDb/fQAop2bCmvDIzU5+69i+UJaFgIVp99h1VzK1mpg1JwSODOkjbqD7ilTYnqlnadF8C4XjpwpepxDsGY6+w=="], + + "@shinyoshiaki/jspack": ["@shinyoshiaki/jspack@0.0.6", "", {}, "sha512-SdsNhLjQh4onBlyPrn4ia1Pdx5bXT88G/LIEpOYAjx2u4xeY/m/HB5yHqlkJB1uQR3Zw4R3hBWLj46STRAN0rg=="], + + "@sinclair/typebox": ["@sinclair/typebox@0.34.41", "", {}, ""], + + "@standard-schema/spec": ["@standard-schema/spec@1.0.0", "", {}, "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA=="], + + "@tabler/icons": ["@tabler/icons@3.35.0", "", {}, "sha512-yYXe+gJ56xlZFiXwV9zVoe3FWCGuZ/D7/G4ZIlDtGxSx5CGQK110wrnT29gUj52kEZoxqF7oURTk97GQxELOFQ=="], + + "@tabler/icons-react": ["@tabler/icons-react@3.35.0", "", { "dependencies": { "@tabler/icons": "3.35.0" }, "peerDependencies": { "react": ">= 16" } }, "sha512-XG7t2DYf3DyHT5jxFNp5xyLVbL4hMJYJhiSdHADzAjLRYfL7AnjlRfiHDHeXxkb2N103rEIvTsBRazxXtAUz2g=="], + + "@tokenizer/inflate": ["@tokenizer/inflate@0.4.1", "", { "dependencies": { "debug": "^4.4.3", "token-types": "^6.1.1" } }, "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/bun": ["@types/bun@1.2.23", "", { "dependencies": { "bun-types": "1.2.23" } }, "sha512-le8ueOY5b6VKYf19xT3McVbXqLqmxzPXHsQT/q9JHgikJ2X22wyTW3g3ohz2ZMnp7dod6aduIiq8A14Xyimm0A=="], + + "@types/jwt-decode": ["@types/jwt-decode@3.1.0", "", { "dependencies": { "jwt-decode": "*" } }, "sha512-tthwik7TKkou3mVnBnvVuHnHElbjtdbM63pdBCbZTirCt3WAdM73Y79mOri7+ljsS99ZVwUFZHLMxJuJnv/z1w=="], + + "@types/lodash": ["@types/lodash@4.17.21", "", {}, "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ=="], + + "@types/node": ["@types/node@24.7.0", "", { "dependencies": { "undici-types": "~7.14.0" } }, ""], + + "@types/randomstring": ["@types/randomstring@1.3.0", "", {}, "sha512-kCP61wludjY7oNUeFiMxfswHB3Wn/aC03Cu82oQsNTO6OCuhVN/rCbBs68Cq6Nkgjmp2Sh3Js6HearJPkk7KQA=="], + + "@types/react": ["@types/react@19.2.6", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-p/jUvulfgU7oKtj6Xpk8cA2Y1xKTtICGpJYeJXz2YVO2UcvjQgeRMLDGfDeqeRW2Ta+0QNFwcc8X3GH8SxZz6w=="], + + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + + "@unhead/schema": ["@unhead/schema@1.11.20", "", { "dependencies": { "hookable": "^5.5.3", "zhead": "^2.2.4" } }, ""], + + "aes-js": ["aes-js@3.1.2", "", {}, "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ=="], + + "asn1js": ["asn1js@3.0.6", "", { "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", "tslib": "^2.8.1" } }, "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "axios": ["axios@1.13.2", "", { "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "big-integer": ["big-integer@1.6.52", "", {}, "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="], + + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "buffer-crc32": ["buffer-crc32@1.0.0", "", {}, "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w=="], + + "bun-types": ["bun-types@1.2.23", "", { "dependencies": { "@types/node": "*" }, "peerDependencies": { "@types/react": "^19" } }, ""], + + "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "camelcase-css": ["camelcase-css@2.0.1", "", {}, ""], + + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + + "clsx": ["clsx@2.1.1", "", {}, ""], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "cookie": ["cookie@1.0.2", "", {}, ""], + + "core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, ""], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "date-fns": ["date-fns@4.1.0", "", {}, "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-node-es": ["detect-node-es@1.1.0", "", {}, ""], + + "dns-packet": ["dns-packet@5.6.1", "", { "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw=="], + + "dom-helpers": ["dom-helpers@5.2.1", "", { "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA=="], + + "dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "duplexer2": ["duplexer2@0.1.4", "", { "dependencies": { "readable-stream": "^2.0.2" } }, "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA=="], + + "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], + + "elysia": ["elysia@1.4.16", "", { "dependencies": { "cookie": "^1.0.2", "exact-mirror": "0.2.3", "fast-decode-uri-component": "^1.0.1", "memoirist": "^0.4.0" }, "peerDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "@types/bun": ">= 1.2.0", "file-type": ">= 20.0.0", "openapi-types": ">= 12.0.0", "typescript": ">= 5.0.0" }, "optionalPeers": ["@types/bun", "typescript"] }, "sha512-KZtKN160/bdWVKg2hEgyoNXY8jRRquc+m6PboyisaLZL891I+Ufb7Ja6lDAD7vMQur8sLEWIcidZOzj5lWw9UA=="], + + "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "exact-mirror": ["exact-mirror@0.2.3", "", { "peerDependencies": { "@sinclair/typebox": "^0.34.15" }, "optionalPeers": ["@sinclair/typebox"] }, "sha512-aLdARfO0W0ntufjDyytUJQMbNXoB9g+BbA8KcgIq4XOOTYRw48yUGON/Pr64iDrYNZKcKvKbqE0MPW56FF2BXA=="], + + "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], + + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + + "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, ""], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, ""], + + "fetch-event-stream": ["fetch-event-stream@0.1.6", "", {}, "sha512-GREtJ5HNikdU2AXtZ6E/5bk+aslMU6ie5mPG6H9nvsdDkkHQ6m5lHwmmmDTOBexok9hApQ7EprsXCdmz9ZC68w=="], + + "file-type": ["file-type@21.1.1", "", { "dependencies": { "@tokenizer/inflate": "^0.4.1", "strtok3": "^10.3.4", "token-types": "^6.1.1", "uint8array-extras": "^1.4.0" } }, "sha512-ifJXo8zUqbQ/bLbl9sFoqHNTNWbnPY1COImFfM6CCy7z+E+jC1eY9YfOKkx0fckIg+VljAy2/87T61fp0+eEkg=="], + + "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "form-data": ["form-data@4.0.5", "", { "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" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + + "fs-extra": ["fs-extra@11.3.2", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "generate-function": ["generate-function@2.3.1", "", { "dependencies": { "is-property": "^1.0.2" } }, "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "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" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-nonce": ["get-nonce@1.0.1", "", {}, ""], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hookable": ["hookable@5.5.3", "", {}, ""], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "int64-buffer": ["int64-buffer@1.1.0", "", {}, "sha512-94smTCQOvigN4d/2R/YDjz8YVG0Sufvv2aAh8P5m42gwhCsDAJqnbNOrxJsrADuAFAA69Q/ptGzxvNcNuIJcvw=="], + + "ip": ["ip@2.0.1", "", {}, "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ=="], + + "is-plain-object": ["is-plain-object@2.0.4", "", { "dependencies": { "isobject": "^3.0.1" } }, "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og=="], + + "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "isobject": ["isobject@3.0.1", "", {}, "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg=="], + + "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "jose": ["jose@6.1.0", "", {}, ""], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + + "jwt-decode": ["jwt-decode@4.0.0", "", {}, "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "memoirist": ["memoirist@0.4.0", "", {}, "sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "mp4box": ["mp4box@0.5.4", "", {}, "sha512-GcCH0fySxBurJtvr0dfhz0IxHZjc1RP+F+I8xw+LIwkU1a+7HJx8NCDiww1I5u4Hz6g4eR1JlGADEGJ9r4lSfA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "multicast-dns": ["multicast-dns@7.2.5", "", { "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg=="], + + "nano-time": ["nano-time@1.0.0", "", { "dependencies": { "big-integer": "^1.6.16" } }, "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, ""], + + "node-av": ["node-av@5.0.2", "", { "dependencies": { "unzipper": "^0.12.3", "werift": "^0.22.2" }, "optionalDependencies": { "@seydx/node-av-darwin-arm64": "^5.0.2", "@seydx/node-av-darwin-x64": "^5.0.2", "@seydx/node-av-linux-arm64": "^5.0.2", "@seydx/node-av-linux-x64": "^5.0.2", "@seydx/node-av-win32-arm64-mingw": "^5.0.2", "@seydx/node-av-win32-arm64-msvc": "^5.0.2", "@seydx/node-av-win32-x64-mingw": "^5.0.2", "@seydx/node-av-win32-x64-msvc": "^5.0.2" } }, "sha512-maqij1UEorOwTBmdU9U744SmG7n54Tv18NmsWVSWzPT7wAo84rvlvCxCOTulRkEH10xNTupDO37zxXEneIbHeA=="], + + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + + "node-int64": ["node-int64@0.4.0", "", {}, "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw=="], + + "nypm": ["nypm@0.6.2", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.2", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "tinyexec": "^1.0.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + + "openapi-types": ["openapi-types@12.1.3", "", {}, ""], + + "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], + + "pathe": ["pathe@1.1.2", "", {}, ""], + + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, ""], + + "picomatch": ["picomatch@4.0.3", "", {}, ""], + + "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, ""], + + "postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, ""], + + "postcss-mixins": ["postcss-mixins@12.1.2", "", { "dependencies": { "postcss-js": "^4.0.1", "postcss-simple-vars": "^7.0.1", "sugarss": "^5.0.0", "tinyglobby": "^0.2.14" }, "peerDependencies": { "postcss": "^8.2.14" } }, ""], + + "postcss-nested": ["postcss-nested@7.0.2", "", { "dependencies": { "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.2.14" } }, ""], + + "postcss-preset-mantine": ["postcss-preset-mantine@1.18.0", "", { "dependencies": { "postcss-mixins": "^12.0.0", "postcss-nested": "^7.0.2" }, "peerDependencies": { "postcss": ">=8.0.0" } }, ""], + + "postcss-selector-parser": ["postcss-selector-parser@7.1.0", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, ""], + + "postcss-simple-vars": ["postcss-simple-vars@7.0.1", "", { "peerDependencies": { "postcss": "^8.2.1" } }, ""], + + "prisma": ["prisma@6.19.0", "", { "dependencies": { "@prisma/config": "6.19.0", "@prisma/engines": "6.19.0" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "prop-types": ["prop-types@15.8.1", "", { "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="], + + "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], + + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + + "pvtsutils": ["pvtsutils@1.3.6", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg=="], + + "pvutils": ["pvutils@1.1.5", "", {}, "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA=="], + + "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], + + "randomstring": ["randomstring@1.3.1", "", { "dependencies": { "randombytes": "2.1.0" }, "bin": { "randomstring": "bin/randomstring" } }, "sha512-lgXZa80MUkjWdE7g2+PZ1xDLzc7/RokXVEQOv5NN2UOTChW1I8A9gha5a9xYBOqgaSoI6uJikDmCU8PyRdArRQ=="], + + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + + "react": ["react@19.2.0", "", {}, ""], + + "react-dom": ["react-dom@19.2.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, ""], + + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], + + "react-number-format": ["react-number-format@5.4.4", "", { "peerDependencies": { "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""], + + "react-remove-scroll": ["react-remove-scroll@2.7.1", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, ""], + + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""], + + "react-router": ["react-router@7.9.6", "", { "dependencies": { "cookie": "^1.0.1", "set-cookie-parser": "^2.6.0" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" }, "optionalPeers": ["react-dom"] }, "sha512-Y1tUp8clYRXpfPITyuifmSoE2vncSME18uVLgaqyxh9H35JWpIfzHo+9y3Fzh5odk/jxPW29IgLgzcdwxGqyNA=="], + + "react-router-dom": ["react-router-dom@7.9.6", "", { "dependencies": { "react-router": "7.9.6" }, "peerDependencies": { "react": ">=18", "react-dom": ">=18" } }, "sha512-2MkC2XSXq6HjGcihnx1s0DBWQETI4mlis4Ux7YTLvP67xnGxCvq+BcCQSO81qQHVUTM1V53tl4iVVaY5sReCOA=="], + + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, ""], + + "react-textarea-autosize": ["react-textarea-autosize@8.5.9", "", { "dependencies": { "@babel/runtime": "^7.20.13", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""], + + "react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="], + + "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "reflect-metadata": ["reflect-metadata@0.2.2", "", {}, "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q=="], + + "rx.mini": ["rx.mini@1.4.0", "", {}, "sha512-8w5cSc1mwNja7fl465DXOkVvIOkpvh2GW4jo31nAIvX4WTXCsRnKJGUfiDBzWtYRInEcHAUYIZfzusjIrea8gA=="], + + "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "scheduler": ["scheduler@0.27.0", "", {}, ""], + + "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, ""], + + "source-map-js": ["source-map-js@1.2.1", "", {}, ""], + + "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "strtok3": ["strtok3@10.3.4", "", { "dependencies": { "@tokenizer/token": "^0.3.0" } }, "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg=="], + + "sugarss": ["sugarss@5.0.1", "", { "peerDependencies": { "postcss": "^8.3.3" } }, ""], + + "swr": ["swr@2.3.6", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw=="], + + "tabbable": ["tabbable@6.2.0", "", {}, ""], + + "thunky": ["thunky@1.1.0", "", {}, "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA=="], + + "tiktok-tts": ["tiktok-tts@1.1.17", "", { "dependencies": { "axios": "^1.3.4" } }, "sha512-crqAw+KRo+oDlPGX3lQsOZHp8tWYjbaK8neHpBRKTCBVowDdyu2kjzAjF1XImZaKYUZhJdBtbpcz2iM//L8Osg=="], + + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, ""], + + "token-types": ["token-types@6.1.1", "", { "dependencies": { "@borewit/text-codec": "^0.1.0", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ=="], + + "tslib": ["tslib@2.8.1", "", {}, ""], + + "tsyringe": ["tsyringe@4.10.0", "", { "dependencies": { "tslib": "^1.9.3" } }, "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw=="], + + "turbo-crc32": ["turbo-crc32@1.0.1", "", {}, "sha512-8yyRd1ZdNp+AQLGqi3lTaA2k81JjlIZOyFQEsi7GQWBgirnQOxjqVtDEbYHM2Z4yFdJ5AQw0fxBLLnDCl6RXoQ=="], + + "tweetnacl": ["tweetnacl@1.0.3", "", {}, "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="], + + "type-fest": ["type-fest@4.41.0", "", {}, ""], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "uint8array-extras": ["uint8array-extras@1.5.0", "", {}, "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A=="], + + "undici-types": ["undici-types@7.14.0", "", {}, ""], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "unzipper": ["unzipper@0.12.3", "", { "dependencies": { "bluebird": "~3.7.2", "duplexer2": "~0.1.4", "fs-extra": "^11.2.0", "graceful-fs": "^4.2.2", "node-int64": "^0.4.0" } }, "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA=="], + + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, ""], + + "use-composed-ref": ["use-composed-ref@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""], + + "use-isomorphic-layout-effect": ["use-isomorphic-layout-effect@1.2.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""], + + "use-latest": ["use-latest@1.3.0", "", { "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, ""], + + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, ""], + + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, ""], + + "uuid": ["uuid@11.1.0", "", { "bin": { "uuid": "dist/esm/bin/uuid" } }, "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A=="], + + "werift": ["werift@0.22.2", "", { "dependencies": { "@fidm/x509": "^1.2.1", "@minhducsun2002/leb128": "^1.0.0", "@noble/curves": "^1.8.1", "@peculiar/x509": "^1.12.3", "@shinyoshiaki/binary-data": "^0.6.1", "@shinyoshiaki/jspack": "^0.0.6", "aes-js": "^3.1.2", "buffer": "^6.0.3", "buffer-crc32": "^1.0.0", "date-fns": "^4.1.0", "debug": "^4.4.0", "int64-buffer": "1.1.0", "ip": "^2.0.1", "lodash": "^4.17.21", "mp4box": "^0.5.3", "multicast-dns": "^7.2.5", "nano-time": "^1.0.0", "turbo-crc32": "^1.0.1", "tweetnacl": "^1.0.3", "uuid": "^11.0.5", "werift-common": "*", "werift-dtls": "*", "werift-ice": "*", "werift-rtp": "*", "werift-sctp": "*" } }, "sha512-R+dfzOknUiGH8EcxGjWfN4404+Npj4tT1L5HpqZLjw0ARCO0B19i9gAQOo6ESzzTE+L8L1wxb1KIspOeoko+TQ=="], + + "werift-common": ["werift-common@0.0.3", "", { "dependencies": { "@shinyoshiaki/jspack": "^0.0.6", "debug": "^4.4.0" } }, "sha512-ma3E4BqKTyZVLhrdfTVs2T1tg9seeUtKMRn5e64LwgrogWa62+3LAUoLBUSl1yPWhgSkXId7GmcHuWDen9IJeQ=="], + + "werift-dtls": ["werift-dtls@0.5.7", "", { "dependencies": { "@fidm/x509": "^1.2.1", "@noble/curves": "^1.3.0", "@peculiar/x509": "^1.9.2", "@shinyoshiaki/binary-data": "^0.6.1", "date-fns": "^2.29.3", "lodash": "^4.17.21", "rx.mini": "^1.2.2", "tweetnacl": "^1.0.3" } }, "sha512-z2fjbP7fFUFmu/Ky4bCKXzdgPTtmSY1DYi0TUf3GG2zJT4jMQ3TQmGY8y7BSSNGetvL4h3pRZ5un0EcSOWpPog=="], + + "werift-ice": ["werift-ice@0.2.2", "", { "dependencies": { "@shinyoshiaki/jspack": "^0.0.6", "buffer-crc32": "^1.0.0", "debug": "^4.3.4", "int64-buffer": "^1.0.1", "ip": "^2.0.1", "lodash": "^4.17.21", "multicast-dns": "^7.2.5", "p-cancelable": "^2.1.1", "rx.mini": "^1.2.2" } }, "sha512-td52pHp+JmFnUn5jfDr/SSNO0dMCbknhuPdN1tFp9cfRj5jaktN63qnAdUuZC20QCC3ETWdsOthcm+RalHpFCQ=="], + + "werift-rtp": ["werift-rtp@0.8.8", "", { "dependencies": { "@minhducsun2002/leb128": "^1.0.0", "@shinyoshiaki/jspack": "^0.0.6", "aes-js": "^3.1.2", "buffer": "^6.0.3", "mp4box": "^0.5.3" } }, "sha512-GiYMSdvCyScQaw5bnEsraSoHUVZpjfokJAiLV4R1FsiB06t6XiebPYPpkqB9nYNNKiA8Z/cYWsym7wISq1sYSQ=="], + + "werift-sctp": ["werift-sctp@0.0.6", "", { "dependencies": { "@shinyoshiaki/binary-data": "^0.6.1", "@shinyoshiaki/jspack": "^0.0.6", "lodash": "^4.17.21", "rx.mini": "^1.2.2", "turbo-crc32": "^1.0.1" } }, "sha512-SaGrPvkXIPGHyY58Y8TV6vee3vpYHNyvMTWdu+c6SokG3ob8tfofHLKWdO1Zu3ypNV5pL9bxBuQMzOPM3N34fg=="], + + "zhead": ["zhead@2.2.4", "", {}, ""], + + "zod": ["zod@4.1.13", "", {}, "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig=="], + + "@scalar/themes/@scalar/types": ["@scalar/types@0.1.7", "", { "dependencies": { "@scalar/openapi-types": "0.2.0", "@unhead/schema": "^1.11.11", "nanoid": "^5.1.5", "type-fest": "^4.20.0", "zod": "^3.23.8" } }, ""], + + "c12/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "c12/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "giget/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "nypm/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "pkg-types/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "tsyringe/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + + "werift-dtls/date-fns": ["date-fns@2.30.0", "", { "dependencies": { "@babel/runtime": "^7.21.0" } }, "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw=="], + + "@scalar/themes/@scalar/types/@scalar/openapi-types": ["@scalar/openapi-types@0.2.0", "", { "dependencies": { "zod": "^3.23.8" } }, ""], + + "@scalar/themes/@scalar/types/nanoid": ["nanoid@5.1.6", "", { "bin": "bin/nanoid.js" }, ""], + + "@scalar/themes/@scalar/types/zod": ["zod@3.25.76", "", {}, ""], + } +} diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..fa08bfd --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,5 @@ +[serve.static] +env = "BUN_PUBLIC_*" + +[plugin] +preload = ["bun-plugin-glob-import/register"] diff --git a/chatterbox/jobs/baru.json b/chatterbox/jobs/baru.json new file mode 100644 index 0000000..46674f2 --- /dev/null +++ b/chatterbox/jobs/baru.json @@ -0,0 +1 @@ +["e4b37b72-d515-4aa4-b750-f9ab3e37f390","a4185301-2d75-4414-9390-455be77f34a4"] \ No newline at end of file diff --git a/chatterbox/jobs/dewi.json b/chatterbox/jobs/dewi.json new file mode 100644 index 0000000..0c7a62c --- /dev/null +++ b/chatterbox/jobs/dewi.json @@ -0,0 +1 @@ +["3390f845-837c-4c34-bfdb-7a3cab9d1cc7","d30efb95-1ad4-4c58-8660-a10e0ca44988","4f328d59-9786-493d-ac98-ba83a73ab946","2b5447b3-30c2-4573-8029-5e10f3d3bf36"] \ No newline at end of file diff --git a/dayu.wav b/dayu.wav new file mode 100644 index 0000000000000000000000000000000000000000..e0bbd8dbb65d7d4d9d4053fa32ba8ac4c3e9286b GIT binary patch literal 2842364 zcmd?yd$_GjRUY`c&IMa(;0T0E#Bfv)5^wQ_8jXmegeYpOc!`RTMx|pgts&8V9-~GK ztx>Q;OiZG-hiJ#N5lz$xN)$~;0b@i#xynr=5j-j&_jC4|UB5Z@OO09Un|mLS?tfDC zoK;n$-tpF`QKRasZ_c&X`J9J-+NZto5g)Ysf(L#6r+&p_A9v#oyWQ?=cg^m>Kf2r9 z@b9kKUAMbo_vlAG?oq!!Fn8MBardVEoA$5S|Nj2Xqr7?KH}2oC|KpKw-oJMI{G*Zo zaO9g0^_%y9Fr=?J{8W!zDOXu?dh|PoesWk$euh8N;w@dH(|_F|v+9rbuW$Jchx+Tr z&({sRE5Bjb|0g4-t^AWAqxYs!f6K^k9$ERek>5IU{e0^?)-rQUe>&y36ozN9rERaaNx?J1R%FWNa#n zYVKu2`J(Kdc9~s#H|I+hf84sib$`pq+PCg69sbk4H1he#`m4S_l(!rtB_o%m!d891 z-|f;zjwuNr8H_SLH5%z|2U~qXOqo6yspHh8>ZzY+V@F9fM#(0o`bwI<*(zNayYe{e zi!>S~E9tenYn#Tk@4%Ma&uhp2zW(sDmd!}EiT^7xH#=GtO7w3s1yx~c^ zY@9l=F+Ry0BG-;h)Apc_V{S@kEw)U_tl^t!#&D0ri9TIBp4%}l{KwMm7M_Zsi|f%f z;LNMft=o`3I%3J$krW-Ju_~Pn%ysXG-RSpmB3nxssgIw!9{40OABAmU~=u8 zqGH&(2$Sf-gd_SqP8QwNmBB=& z-8q6G)0cMil(D1hrQXMkZp!ebtxOKTcKBnhcITb_rQLat^*h(Z(wCx_`j))3CJ&4p zdCJIBk|)JC+T?Wx8~>IAL|dJ%de_Zb1G3ji2cw-bve~Zluw!s1!ATi!*4NwD0e1Ki zE{&BZeJQ8bv@^0(m~P(|Ci-g$D@9(d*=9ld{xs$KjL&@|oOMIEcu(kZ_1t%q>5EKT zN;~BiuKL`7|1Sm zv8UH3w(QkjZRzdOz1=%(jebh~TlMhje~*znCj9zRzumypSoJeNZ-U34z~DY4hpzht<3PCr@Zs7{`~UhjSBXIJUZb%?Ly zlW;^wS$)+L{49$LCb`ES+1f7Ilvljh&(6{1*|UA$My7<#{@s$(>$tRoO*=f=QtwZj zEcpPs%8!0-UIqG&=M7vxW7X$#q{MmUsU-UXZS%2=UN5AA{Pvl*99Xb5uy}sho#wFd>He6{OuNk@Vw)!Gd zcKyi7q}~p;%TMuldFCAbDv!qv9(VlS@#^7$NnI)Hm-I>1s-M9|R*1==9ZdRQ*LpBY zH?v?Ohwt_1r!2jB5AE&fC7$SP)uWTLV{#u4mr_6ZD(h`^8CI6k?tPI*)_LiXcZ_;C zQ-(MAw8I%(c!KL(u*ObbpEp_T3RlMH?Z}iFE1bm}^zpujmorA}3Qx3xON)ZTrX$6?9xsOXXi*ACO%RRRxNTe zskbNY&~?zO+T;i(`sq(e9$$AEdB$4%gS%QuUxJGrt4_u#rhM^0mzUEN@$}jXWtBrMq2h(GFkg!IF1;#|4YOQgtr=)_Oj`ZBllXN>T|$l;2->#4(pGx%e< zR^f^fXU5MinBx@s7$1E$tSOwqq`%7}D@>g~TlkJkKc1X9>ODnH*6UiqMZW4@)QQG1 zSI*SgTeX$9pRwuN8bhDdZ49n@>Sx9)Y^_IR!KWQe+FRvq!K`{)KI<6$iKQ;@b(rv2 zyAO-% zM}NjBtg&nSuG=vOh0B;;U%Arvu9V?Ar5oF}`j2-*A?EJh(ztE1;w`3A^)U6llX`Sk zTgaUSJ>e<&@pvVx6DFAGb&f*JpQkWeax&b})>hBkhPG7wsUN=+mh|G!aBh`Br;in6 z+Qv>j{mP^+TjjyzzN|m>&Pf(|_@bNgA|l9XU*}Lyid}vD;+yYIT{p}fgRAod)63Hw zg$iGlQ#106;VpLdMtAxycs;OrA0zL&+Ax03dTFoxID#pi!gX1=q8ocBvTD6Qn8;E_ zuIw?t_G>2{_eJ{dELk$|6k#rD$sUXLuLJI!s$@EzA%-UZV)zt5Sq^lg=;JM}weGHice zxMF)-J^HI$JM*dWCnA37WqN~+Zs+Osu6t$QPh`fJlH*!Yh4Ri$zdBXu;>G++1EH!T$iWb$5^o|UvFog;Za7v%YxI#Ptqw|#|ER6!l}M;97q>lI4OFuuVV{w`e)aT zemIq@9ji=R+Tw|<5EG*&gqTA)E*O+Pba`G1D_-Bye<-18m6bIGo^{2wS-t@S88wJ^V!grUVkoc^^*m2 zs&r4->I+}`);2lat$RvF%^f5hYdah(PdIajN`Kc+J!N#(cI0aroHBh^k_D6B)l0kI z0qOTU=H#yXYWQLN)>CxDwU)(ojO#kpk9*#iBikxFzy8$*vS2coi7CePr(DO0JZ0vb z_B&r5+Y~3iB3=9icZ?6%04Dc(kXn$)EMr7F}=QpiL961j;%9Ne{70g*NN;( z<*L7hT{*S4WLvuLPFcoWeKF;8ZMVjSTjxu*<`si0n3XqjI%`f}bke>pWw@?}J;fb; zWm4xN*Oq!2yr&7vhxJ1uh)CKe=pH7sb8(k`@+^c16kg|Gfwc~)h|b$GBP;z{JWpt9}Jm)VFg2W zEGM1v^j}Ga53V%l&*=72uYVhte`Xgl*X?6O9-Okv)MM8v?(~=LoWsf!uIby7 z1gFgS8LRiD&O-fJ%Tw4D)A_>{-C&jJQ?Byh3p257Nnbd6`)c)!6&Uzv6@G@-AEJc-QfR*?t~fykFF_=HhdzKZAOGGSm}1 zeah6?pq^*^DVw4bT-xF3ZS{`J7#*uWI_sFLe)NLteBpT4OLw8;dql;3 zb_*9-$3&JnrH!-WGDc**Up?<}t9*-Z<)YhVsrNGDrqnlAa3XtuVJ2$!&B&aZRhyV< z_qE8Is-9zi9mjAuqua6bhI`S5(_^20*UK0gbLEIUHpdoiwiLclr*tDvSse3s(85!k z^LJ7+7CpX8j8wb48J)7A;;7>?=IOHLkhSUDy^cS;YrW%QXY7hj$EaT|Z|RX;l-JBV zUof$y_o?g8r!(n`PJFK2GaMbC8$~B&aDC2X`pdfVUH_aaI>D`687G|SPZ|9c*ZI`@ z_^~G(%HV^`c#*FK%hKsmmiv zx!x@zKUH>oFl18N%B}V)Tk-l&-A7hVSScLUnm;4&e0tNK$oX!RF@nkcZN=t(7dd=% z$kbtSXY9Dt!x3yTlwRiuPMMUkR^5yjuJqH5EPUGQIHzQtC;BUAbYr9bEqmaS!!>cG zUH$IU$N!!TKB;q*eo55TM8+{@-nC;pE||1~FIlyMnY=SzR(yD(qm+uT`=jPo_+vh@ z@Pt1cX$LdQ<9D7Kuh8Mb5q$MmYjV!tW8|q|Q+6C#(#oZ8zRgeHMh@Ro-(wj=zdD}a zrybK@r+BjVbfSM{&O+7xpMN(o{CZ`45?o}rrR+K@hrUzX>5IquSm9Lm#5O6i=tPz{ zK7iVf;8Pm2+Zw3;aHdS3wxoTiT>jDJ>FaCL`@5cc@EsFbpUajW96hDf>)|F(U4O^) zdT_yRwNJ@bIS$;ND;U!;rFdr#!>bfe$vHAep#_Pig|8v+~j%YM-6=}!*);mx>HuS*J- zu`}N-Y>hna>GM*@A)9|6yL016ds?y9%7fu3*5ki9lU8w+O`TW0>t|kFUVkr#?sbR1 zy_5Oj4nCHJOHbCW%VxbawEG%pCwKi`*B=|AOP0E_;;?K^j4SP*=xf1-D;%}YYi;x= z(@%zxwdqAS*p&L=;*IDirOu~KN=Cn9GDeq$J2Lu_sYkBN`L$wJe01Qhl;DC*J!SMd zH(BuM-zvk=%iyA)zQ}u-=U%Yd9UpnuIaNRP91Om5T@6bI9!?6!D({^7a*yFldTDok zQtem zyEVAzWiE6gi+ybJy)7Mf=+8H~;ib9vq?;tVdCoYgS;r7a$Pa(I-bTTGGDPha7uj<)1Xi*B*j&qL?<5u7r-!9^cS zm#y`QE7m$k=h+9}FIpGpU!@gx1K&ei&(x0YKxFnQ*!yq;&$MZJUg9Y3P~ z4#A1a)o@$=WU&M7#2mki2GeaNi#)pYCr9y}!gO5pl~TBsowMr%LzcU4@Hk3dC~Yb4 zx8c$2E*d@Z=;e-@J8Ll=-(7PL?t1Fv?zEAg<_haEZ?}tX?CaxAOpP*`X07Zf{VB~m zKFRUBd@vbDyN}=7#qH)_7;TmuW6~GqDp$_j|MkXyFv-z|>zFPt&N-jh1*31S$8Oa7 z`%keHX8M{GuHN;^u8bGX8Z&b&U9!kCukIIhsW_%Cxtw>YImX0vZXEDr%B095ulCAO zGYKC|;=F3bO&0yg%_-c)Qa`gc?11fk+TkismL#~?p`;i2N_I5_-<8{5%*Zy#H+hMe` z?!6CQf5y+aD`w@zC5Km;aZ)dx!mRo*NyVX6dqulsbBu6j++Nbm-YGfB@d-n|a*`#j zdwi8^7iOMut4`X=HN~z~uAQ-}oQNx(p+OyE=JPrIRZjUaKE0&dIXqo&t6tjkc@m6s zInR?`Pk;OxjPa^3PucZOGw*KUh|X4f9TP^bd!3tBBvr2SO>g8W$#YjV2EJf>T_1VM z=%?)R@F-=;%B3Ct@C9=KwjaUi@AW`V@xe;bNm+XHJAy8!!HY@ZF8^i@r4dZ``l&g< z(mK8i^J5?V*w)?$l|-Ht`}C`)r|Q-6Gx~)Ks#v0XtP{S8h2safB(l<I9O|NNbTj2ZptMcz3&cWfc+^IhfmvJUE*2i$guy#WQ0RKY7a3*KxJ!X1?JnzPV1NM>>64 zts1lQ#*dvlve=<5N3UZucKZ4_>fwq!vT*iNAD+ys_k}-Wcb-FFT>h~&p03ElNx#bv zjmx;ygGpN%{j14NVe@=n^?Q4*Z;jb8owL`2=`wXmAKo=p@4PE&&wJtVyPLk~=Ps$; z<cJy*U(vyLEWidh{TpyN(mxjEh5#eags!B@4H{ zr09ez?dYe>eLmbuI^^ktC70H^c5KO5(W8@hug&T>Fafc)Fw7XtpDLXcGC2LnqpDjfCQ}%IsU4O^-dbd0N3Ex`g zS=RMe%y#?O)~?^{tFAd@%-)x|MR#p?>{cEA;!|r2S+a~11e@gIDW(+@>=q{2@N}-! z>31v1rRXZ9gRuR`cxy@Dy(jXFlXfVylTz;(^{%Tf=T5cNAHM0aVx01@R2h!go8Hno z9-mC=I%P|tbN__tcEW@|y8738vDBEcgI>R1hL=1X^!nHtKeFJ$rHp>~GDfv8-n)Z~ zZs*q5`+K`^vtK*EQQL8+?1@kGXH0ePG|7=GQ;$8$_&HoKdQ0GUEpq%mLVbkY~&$ zJ{muqr#QM^)i0h?7ctusXI!33ShmhQn!%`dOn<(SCq=I99+MOvWv}ZGcd%=@>g4`7 z<#neCFa6x1I+y<3!<4y~=H3}uc-_C%&0L?v*5I|tqZhn(efvT(@9?pkUbi*lnFU?# zaK^@Bnm;4&__B5Wo4N3Wzw4x~%=al7bLEVF`1A)$e{DzB-z8uwZU1gv_`;PEms!tt zYRa-KHT<#hw%ELKho^MQ+Kd+7U{-n7IdczQJA7Ha>YK5cwh{48or#G&<9FMm7n_11 zk3Ah@yvS?pcye2wv2i5+yFPj6>FsVyF#40ol5-AZ9+7vfdT{D6eT?*XOmLk~e@`$H zSuazMJZ)TLIjbWlduJ0}DSEw5mN7DBo<-#8Q}*Y}ylsZ{xa_*=i42qHU>~Q~gI8w! z$kGm1F#Y+9D|rhaoz5A)=!LJ^$M?u!=%{B5d})Vo?Mpu`_3j7lWb){SD|V+1d#WCu zVA6(9y_b>4Cw=^I1d~x$+tVN2v}5oVWo(#S?&j5k$@sx3J74eboLiXAm+>MCPdHL`TOw1k zLsHLsLO4@)JXwDy(06LgV51+t$kWca;mSIspFIBRT-}af$&SC<+5Vl(@MO$BM!1yW zQjeV(qwA!e_0?WwnM3$j`?aGJ{j}FOBu@&K-^zCtEp@3QJf|Z& zR4(^-RQfYk^kMYjaIXnYyYfMF7*7qR>#7%`Mhhl)s$SxgI&(=%cIa$BaMRD-uXB;f zd55X`yqm?YjMd96p75nlJ9Q;}CAn0#l`Obm((YyM;<>lSo^WbQX)6m;zUlVF)|44% zZATui@aIi5a(dnxSA5Cm_bu8mDe?0($3GoYeweYNFS2^uo!_y= zp75|Zb$UsKE2b_}@3F(avN0phI3OowO}D9YWK7n>N~Ob(dTTD^)zY4r=;)W&mJ}W( znO@qlEBzTIV->de{LC1Ur(For`MZa~_c4y~$NnphX*X;!PEInmNf|48>Fc(`q`%jr zPu3Ipv5ixIizm9BFSwM!^!apr`g_@RdmSdaDZ8w5q~6c*UXNbqiB4p}_cmGN!LMcS z_iS9#%F*$uEAxyEK7HX!zjiQr7O$A_1?zqho$v+|dAPLUwUdJFn2w7)noOe)RUCcm02+*{a{JLBAz(hM?o=b`H?msXxFS;vH@3>&Z3|N>NVg7y;X5Wt}gQ-#L-=WmVg~_;87Ai8h$Wsp@9BJoYxul)@a@wmt zIa%hrRfh@BDSh(faPdd#HG{GuxEj00j~)6_k8g2Q?tH~E`NLXeIC_6#(~2dLNg1nF zGvj4N=eT-;)tgi-SN<8@pynvWNxsFGb0T_cx$0<#d&S~%rsb^AzqX@;XR97r%Gej~ z$WQU6|4L=f$DF@?jMVE>r#izsm;NiI=qp!#dXX2;M0d{k=6H^U?YLvUdFBTb_O#bB zE6~S@&RVXR_-Ex@+jxTQoGYJpPw_#QU9BGe;MR8JS1XMzox;_ewtJ%o)9Z8h;hp~u z=om9OBcBqr(>5LBF1FV5q1cKq^VuHrB3IX4>)Yr^r~St2XC?cBN?DkTzS5tyEtXZc z&M1AiWp3fhxY3DCY2$-QNvIocS6-9; zX}jL-bFcG+gDknyI7Bd|f(!4>IF*JvPZ? zsnbq9^6-_c~??Dcdw@3pQ9PC&e!=|z!8~x*U4DQJYT9lzb`9!o!9C!&(FT2 zuP^DiUhfrT-de)Z>yhPsCY&A9Wsxi8=;5iixc>Wa`PO2--vl4s8ozjAi?`R{@@}lX z*2$8?mv+5R<{O{+eyJZ;f5wSUIFu7p$n|G*>h}|CoX!_~aLO9-_-|hnZq9eb#g6o}383|`sm z=~pJ{Pa+S7EmGPY6S=;eWt}HjrT*Yk(o0<#OzQf>9T`j#SvbgoQA)vuBkhzOL$;pT z!6^@fmpOw=zjl{pyeYSnzUe^gU1P$XNR8 z`=9zgLmRI$bIBNFk*ADZ>5Hy5-rmmGk>QPAc+4_&xcav1c89--?`L#VM!%QQC*uue z@XBO=b6?g^C-Sr->)(%c8GN{Fu2=pZEp{nWr!UjbIFZGkV566Dvo7S_myt&wUv$eG zHA3{N@Aw@e9LJc+Qu1oodt}|IgO9#)yFTyU`V;@k?2)SHu0AmxU+ndB?$NoA!=X$) zxX5~`PwLo`lvU(8S62)<86QZ&smJEXR$Z7i!Ah$<1l0N_>4^1$Ld_+ z2qt}7`zn3mP5YfKPmOssp3E&}$48d3_pS9UOk_$aW$HOo4xN{ObWF#=CPgp&t32(L z!B;z4vm~FbszrA#J1%{ZZMF3!1(&kRuU1e0J5$b)kF~l@dU~9u9)G8OyvHi`SDxd& zRhX6k7*lrj*iT*Au{ojAUz+o*=y-Z^#!kDJ^}gkE8+L|$zHh<8BuDqSef-&szTl>Q zy<;A;g=M~YX?3va4G(*;329cSqqR z$3vcX>l!b9so%LMTxsjCT)OdP>D7oUZ!|K#cIQ+t{Xzye%VT-9F3Q5AC-Vw+UE^S4 z{~W7o(bMYn;I{O#p0OkC&e8SM;|KepY@DAN=$HDKWp_zZhf96kYml{%=1wA`Q)5ou z$itEGQ%0`L{#8maJ(tv&l?pS@jV=#1WyVW8C7pMr?slKI`RK3bJo%QaT7@cQieOYjJfuc!>m5v8s`))oGCN*%3&-i{neV|lP5(t zoM}h5%ju+FnY7BfPOo2S+|Jdx$z#hFCVd$vn6*s*%Du|XYLy*x&3TgtdyJW_-mkuu z3R7IYzvFwoW3E&$-Z|!#IO-;Sk*z;d(|aYJU`~}=d}LB|dOfm~2jFFF>NM+aF~7@o zljv#QG`h6LBU8@agIn9-zfwsj{arux zUc#k)TXZ_U>lrcaUY^Ex)H_$t*%$7#!$MBh<*9GU(--}e9jop+*Pl&r+9eNq`>db6 z$2_@zRe#+H)a#B?mgM=Gvc?UjG&@glYYCYKh~D=u5kotIpaEHuALV zUhno?JzY-1rpT1hS4NIQJ@%)a{*+yZY;A|*YGcL*_>9%L%GyC_J6V5lsUHNF<*6U{m2}mEsXWJ8 zF;jE9c50l7t`X9{I=+x~0v_vzV=Y(CoMkvtUv*BkSFVo3C3V@=>a~{h9D@%>%43d+ zJ!MOm_xdr~f+^XReR5h4d!>$vtglVR z)7O2Yo_5L=6K+;^OgM|-_^cv}Uic!5o-#6+$h&N(3!IbvVN4PP&#WjrZ;ZQe@ABv3)Ao4VPAE_uMA&wQ|e1SWyh;ay|34+w=9_NEJ3Vg zp-JRqlLo>i{B?k}=6ZRvGP_Eu!!Sh@8F+cD8g8NFWWi%xLLj#=yJztWi(%&Pm&wsUr0 zX)K)jlh-l&=?;@;R`4nF42yo`S1O~kVq#N`RlQr->OX#FuUx%-Tku=s;OO#R-{Mby z=Fu_g^MV@j?KYhxr{`fw9@n`fRPZ^%z$UBz2 zw^zNy@X8ZAl);2MpKbIp^`#x%$fDons~zd<9O}_6{PCU$M|9KPnoD>OgyRS1RYpI$ z>fw#7+fuq=t1^6BW#BI~U!oh@1E zbj`3;si)rsdT-ZV>sz>07T*4hhv{6wL>3P1^yRJ-OfQ4U7}3u-lFEMujeGGi*cUa!N(rr@K0N?v?^&bd`<%CLqz zb2$uj`3ISlv4YnQ*Q%d(=TR@F`nk5V%Yw;x7jbpI1=q`*CtEsj`kjYsB9Cq`D=zYm zQ}4Ntk!M85=Pd3zWRWW`-U7Ctaa-8%hEIDw{fn85ZIvNs?lzZh_0jC@)PslG;+xD> zqqpW@N`IYw%^fCVrXHU7Jnir)V_&#o3O`ZNOL+i{AKDXDwaAo7!9=!&Av=}BbE-db zICbMGXX^EmcAen1bdPz0JXKyC=M?gk{M5cAPdcT0O5XLh>Q_2P!b$JcnU(XdV>3?5 zK1R66az2vL-@Hv`g^(Z=-WzLI&fXyb$dO0Te8_Vxu&ex(>9mX^8`ry7#Zny zS=gEpLfoL<8xu< z2v3*i4C}JB-p5({w9}s_W|wt5T%H3{XV!uZF3*asa%vrOc8*|H{m5hQ+OIt^7i+sP`O>$POfz zZI4Wu)a#Kcx8%`Zaa;0^NxgPVjcwmc=~J%l-nZ5d%9r(fz2mxEeft~@s>*q)&gV)v zgY0dbo^{He(oTOck>h|*ng0IV)E|5=^S-5D(${lj;etv#LM>cNI1 zoWYXwxD?Ex(SFd8=Kf4)$+bFfdV9ImpS_%YxMGagG3)rfFJlE$x+M*d)||_+c5iLf zC;wLOyGOQt?!WuE!=GnH+E*K4#d*#p-Iiw_>^f#|r;e+*BRMX^6I|~l(_S$h8%)=8 zABf&5Z0-zQ54Ov5zq%-&_lk_4ajL{pcM|-^eRMnO7`x)DcVcM9X7#mS`*^%+2RHjB zZuV6zn9dc|$bv~ZF_Bc6XMXy%dmSpz>}Y0;=ti!L zZp!EucK)rs!WMV#K!u%mn(&1~yLgTDN~8DVUV{dVLEUjIxgxZ1k0}DJ9v8(K!?g8> zGuX&r;UpMI{ZLtcq<`h=@{CP2`zNCp?>v`agYTTZUWmLK&)6@$Y8Pg{k4B&TYW4J& zRmb?QKl?LUmE<@&Hg!G-y4NRu>P9E{X;;>z7Tp72{3v;$ z!n4}cv7Lv!H0QobJ2;UQS@24+F)_#S7daeTq>80O^&LN^Y>pqSzN9E