From e0ad35d2b13153996ffdb97210b00c1c613070b3 Mon Sep 17 00:00:00 2001 From: Inside4ndroid Date: Tue, 16 Sep 2025 18:54:12 +0100 Subject: [PATCH] Full overhaul of the repo please see changelog --- .dockerignore | 18 + .env_example | 2 - .eslintignore | 3 + .eslintrc.cjs | 23 + .github/workflows/docker-publish.yml | 74 + CHANGELOG.md | 50 + Dockerfile | 54 + LICENSE.md | 21 + README.md | 355 +- apiServer.js | 365 + docker-compose.yml | 27 + index.js | 184 - package-lock.json | 6946 ++++++----------- package.json | 41 +- ...khdhub_resolved_urls_v3_1263256_movie.json | 14 + ...4khdhub_resolved_urls_v3_1399_tv_s1e1.json | 14 + ...4khdhub_resolved_urls_v3_293660_movie.json | 20 + .../dramadrip_final_v13_1263256_movie.json | 1 + .../moviesdrive/tmdb_movie_1263256.json | 3 + .../moviesmod_final_v13_1263256_movie.json | 64 + .../moviesmod_final_v13_1399_tv_s1.json | 224 + .../moviesmod_final_v13_293660_movie.json | 64 + .../showbox_final_url/v3_movie_1263256.json | 4 + .../showbox_final_url/v3_movie_1893.json | 4 + .../showbox_final_url/v3_movie_278.json | 4 + .../showbox_final_url/v3_movie_293660.json | 4 + .../26625ddb20d0988d0b6e7424b1119266.txt | 4 + .../53df977907f5f20f1eceefca3ccc898a.txt | 4 + .../9e500cc99ed9b9a4e816b2646064c346.txt | 4 + .../f33b097143b0654432d600639f68b08f.txt | 4 + .../tmdb-movie-1263256-alternatives.json | 10 + .../tmdb-movie-1263256-external_ids.json | 8 + .../tmdb_api/tmdb-movie-1263256-images.json | 1224 +++ .../.cache/tmdb_api/tmdb-movie-1263256.json | 58 + .../tmdb-movie-1893-alternatives.json | 305 + .../tmdb-movie-1893-external_ids.json | 8 + .../tmdb_api/tmdb-movie-1893-images.json | 3897 +++++++++ .../.cache/tmdb_api/tmdb-movie-1893.json | 66 + .../tmdb_api/tmdb-movie-278-alternatives.json | 110 + .../tmdb_api/tmdb-movie-278-external_ids.json | 8 + .../tmdb_api/tmdb-movie-278-images.json | 2682 +++++++ providers/.cache/tmdb_api/tmdb-movie-278.json | 57 + .../tmdb-movie-293660-alternatives.json | 25 + .../tmdb-movie-293660-external_ids.json | 8 + .../tmdb_api/tmdb-movie-293660-images.json | 2160 +++++ .../.cache/tmdb_api/tmdb-movie-293660.json | 84 + .../imdb-tt0111161-movie.json | 5 + .../imdb-tt0120915-movie.json | 5 + .../imdb-tt31868189-movie.json | 5 + .../uhd_final_v18_1263256_movie.json | 74 + .../uhdmovies/uhd_final_v18_1399_tv_s1e1.json | 25 + .../uhdmovies/uhd_final_v18_293660_movie.json | 123 + .../1aad53a15787411b795b5524d51152d8.txt | 1 + .../228c2e738c6cd080cac60a7d469be0a7.txt | 1 + .../23f2e2575e9a53275b4e65e81f1513e3.txt | 1 + .../30366ba90dc476972dc55b9c3288818c.txt | 1 + .../4000906de5113a825f1e539ed233b1f0.txt | 1 + .../417fb0a29f17b39113fe276a48113094.txt | 1 + .../48741a5793088283d4d0ed2c6ebbe2da.txt | 1 + .../51895d57ffb6928f37314b9857f9c02b.txt | 1 + .../59df54de2c32254e3393fd8e7f3396eb.txt | 1 + .../5ad6676fd79ba4e616d4bf30fbeac22e.txt | 1 + .../659030e85029e6bd29f3776fdb947c5c.txt | 1 + .../823fa5aa59cbe94cae6434846fe7429e.txt | 1 + .../83202d7c20aac5625749f059374b0994.txt | 1 + .../871cdc7cd959d5b93f2f1604de80c6f5.txt | 1 + .../8f4ff27a0b288b211c0b54e9e063dd38.txt | 1 + .../a9f2b84096292e5beddaf83202b669ea.txt | 1 + .../b16713fa6fa939275df6fee6eccceecd.txt | 1 + .../ba11809a580e18ecea164232540c91ab.txt | 1 + .../bf2e8662e91c220a1dbfd3396a5e262e.txt | 1 + .../c00fb6bcf578bf8bb8063a5504295aff.txt | 1 + .../c80f68293909d1cdc490eedbd09d9162.txt | 1 + .../c9f286b6cbbd5807e4175a82c3a004f5.txt | 1 + providers/4khdhub.js | 1764 +++++ providers/MP4Hydra.js | 506 ++ providers/Showbox.js | 3139 ++++++++ providers/VidZee.js | 129 + providers/moviesmod.js | 1225 +++ providers/registry.js | 264 + providers/uhdmovies.js | 1509 ++++ providers/vidsrcextractor.js | 422 + providers/vixsrc.js | 215 + providers/xprime.js | 166 + public/config.html | 209 + public/index.html | 65 + public/index.js | 573 ++ public/login.js | 127 + public/style.css | 366 + screenshots/Screenshot 2025-09-16 174931.png | Bin 0 -> 21328 bytes screenshots/Screenshot 2025-09-16 175002.png | Bin 0 -> 110364 bytes screenshots/Screenshot 2025-09-16 175008.png | Bin 0 -> 89045 bytes screenshots/Screenshot 2025-09-16 175013.png | Bin 0 -> 93874 bytes screenshots/Screenshot 2025-09-16 175020.png | Bin 0 -> 67462 bytes screenshots/Screenshot 2025-09-16 175026.png | Bin 0 -> 105953 bytes screenshots/Screenshot 2025-09-16 175033.png | Bin 0 -> 103572 bytes screenshots/Screenshot 2025-09-16 175040.png | Bin 0 -> 114075 bytes scripts/publish-docker.ps1 | 67 + src/api.js | 102 - src/extractors/2Embed.js | 388 - src/extractors/embedsu.js | 183 - src/utils/jsunpack.js | 106 - src/workers/sites/2Embed.js | 386 - src/workers/sites/AutoEmbed.js | 144 - src/workers/sites/Embedsu.js | 185 - src/workers/sites/VidsrcSU.js | 80 - src/workers/tmdb.js | 52 - src/workers/utils/jsunpack.js | 106 - utils/auth-users.json | 9 + utils/auth.js | 137 + utils/config.js | 195 + utils/streamFilters.js | 49 + utils/tmdb.js | 38 + utils/tmdbKey.js | 12 + utils/user-config.json | 6 + 115 files changed, 26066 insertions(+), 6426 deletions(-) create mode 100644 .dockerignore delete mode 100644 .env_example create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs create mode 100644 .github/workflows/docker-publish.yml create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 LICENSE.md create mode 100644 apiServer.js create mode 100644 docker-compose.yml delete mode 100644 index.js create mode 100644 providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1263256_movie.json create mode 100644 providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1399_tv_s1e1.json create mode 100644 providers/.cache/4khdhub/4khdhub_resolved_urls_v3_293660_movie.json create mode 100644 providers/.cache/dramadrip/dramadrip_final_v13_1263256_movie.json create mode 100644 providers/.cache/moviesdrive/tmdb_movie_1263256.json create mode 100644 providers/.cache/moviesmod/moviesmod_final_v13_1263256_movie.json create mode 100644 providers/.cache/moviesmod/moviesmod_final_v13_1399_tv_s1.json create mode 100644 providers/.cache/moviesmod/moviesmod_final_v13_293660_movie.json create mode 100644 providers/.cache/showbox_final_url/v3_movie_1263256.json create mode 100644 providers/.cache/showbox_final_url/v3_movie_1893.json create mode 100644 providers/.cache/showbox_final_url/v3_movie_278.json create mode 100644 providers/.cache/showbox_final_url/v3_movie_293660.json create mode 100644 providers/.cache/showbox_search_results/26625ddb20d0988d0b6e7424b1119266.txt create mode 100644 providers/.cache/showbox_search_results/53df977907f5f20f1eceefca3ccc898a.txt create mode 100644 providers/.cache/showbox_search_results/9e500cc99ed9b9a4e816b2646064c346.txt create mode 100644 providers/.cache/showbox_search_results/f33b097143b0654432d600639f68b08f.txt create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1263256-alternatives.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1263256-external_ids.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1263256-images.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1263256.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1893-alternatives.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1893-external_ids.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1893-images.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-1893.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-278-alternatives.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-278-external_ids.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-278-images.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-278.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-293660-alternatives.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-293660-external_ids.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-293660-images.json create mode 100644 providers/.cache/tmdb_api/tmdb-movie-293660.json create mode 100644 providers/.cache/tmdb_external_id/imdb-tt0111161-movie.json create mode 100644 providers/.cache/tmdb_external_id/imdb-tt0120915-movie.json create mode 100644 providers/.cache/tmdb_external_id/imdb-tt31868189-movie.json create mode 100644 providers/.cache/uhdmovies/uhd_final_v18_1263256_movie.json create mode 100644 providers/.cache/uhdmovies/uhd_final_v18_1399_tv_s1e1.json create mode 100644 providers/.cache/uhdmovies/uhd_final_v18_293660_movie.json create mode 100644 providers/.cache/xprime_stream_sizes/1aad53a15787411b795b5524d51152d8.txt create mode 100644 providers/.cache/xprime_stream_sizes/228c2e738c6cd080cac60a7d469be0a7.txt create mode 100644 providers/.cache/xprime_stream_sizes/23f2e2575e9a53275b4e65e81f1513e3.txt create mode 100644 providers/.cache/xprime_stream_sizes/30366ba90dc476972dc55b9c3288818c.txt create mode 100644 providers/.cache/xprime_stream_sizes/4000906de5113a825f1e539ed233b1f0.txt create mode 100644 providers/.cache/xprime_stream_sizes/417fb0a29f17b39113fe276a48113094.txt create mode 100644 providers/.cache/xprime_stream_sizes/48741a5793088283d4d0ed2c6ebbe2da.txt create mode 100644 providers/.cache/xprime_stream_sizes/51895d57ffb6928f37314b9857f9c02b.txt create mode 100644 providers/.cache/xprime_stream_sizes/59df54de2c32254e3393fd8e7f3396eb.txt create mode 100644 providers/.cache/xprime_stream_sizes/5ad6676fd79ba4e616d4bf30fbeac22e.txt create mode 100644 providers/.cache/xprime_stream_sizes/659030e85029e6bd29f3776fdb947c5c.txt create mode 100644 providers/.cache/xprime_stream_sizes/823fa5aa59cbe94cae6434846fe7429e.txt create mode 100644 providers/.cache/xprime_stream_sizes/83202d7c20aac5625749f059374b0994.txt create mode 100644 providers/.cache/xprime_stream_sizes/871cdc7cd959d5b93f2f1604de80c6f5.txt create mode 100644 providers/.cache/xprime_stream_sizes/8f4ff27a0b288b211c0b54e9e063dd38.txt create mode 100644 providers/.cache/xprime_stream_sizes/a9f2b84096292e5beddaf83202b669ea.txt create mode 100644 providers/.cache/xprime_stream_sizes/b16713fa6fa939275df6fee6eccceecd.txt create mode 100644 providers/.cache/xprime_stream_sizes/ba11809a580e18ecea164232540c91ab.txt create mode 100644 providers/.cache/xprime_stream_sizes/bf2e8662e91c220a1dbfd3396a5e262e.txt create mode 100644 providers/.cache/xprime_stream_sizes/c00fb6bcf578bf8bb8063a5504295aff.txt create mode 100644 providers/.cache/xprime_stream_sizes/c80f68293909d1cdc490eedbd09d9162.txt create mode 100644 providers/.cache/xprime_stream_sizes/c9f286b6cbbd5807e4175a82c3a004f5.txt create mode 100644 providers/4khdhub.js create mode 100644 providers/MP4Hydra.js create mode 100644 providers/Showbox.js create mode 100644 providers/VidZee.js create mode 100644 providers/moviesmod.js create mode 100644 providers/registry.js create mode 100644 providers/uhdmovies.js create mode 100644 providers/vidsrcextractor.js create mode 100644 providers/vixsrc.js create mode 100644 providers/xprime.js create mode 100644 public/config.html create mode 100644 public/index.html create mode 100644 public/index.js create mode 100644 public/login.js create mode 100644 public/style.css create mode 100644 screenshots/Screenshot 2025-09-16 174931.png create mode 100644 screenshots/Screenshot 2025-09-16 175002.png create mode 100644 screenshots/Screenshot 2025-09-16 175008.png create mode 100644 screenshots/Screenshot 2025-09-16 175013.png create mode 100644 screenshots/Screenshot 2025-09-16 175020.png create mode 100644 screenshots/Screenshot 2025-09-16 175026.png create mode 100644 screenshots/Screenshot 2025-09-16 175033.png create mode 100644 screenshots/Screenshot 2025-09-16 175040.png create mode 100644 scripts/publish-docker.ps1 delete mode 100644 src/api.js delete mode 100644 src/extractors/2Embed.js delete mode 100644 src/extractors/embedsu.js delete mode 100644 src/utils/jsunpack.js delete mode 100644 src/workers/sites/2Embed.js delete mode 100644 src/workers/sites/AutoEmbed.js delete mode 100644 src/workers/sites/Embedsu.js delete mode 100644 src/workers/sites/VidsrcSU.js delete mode 100644 src/workers/tmdb.js delete mode 100644 src/workers/utils/jsunpack.js create mode 100644 utils/auth-users.json create mode 100644 utils/auth.js create mode 100644 utils/config.js create mode 100644 utils/streamFilters.js create mode 100644 utils/tmdb.js create mode 100644 utils/tmdbKey.js create mode 100644 utils/user-config.json diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..06b57d5 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +node_modules +npm-debug.log +.DS_Store +.vscode +screenshots +streams_cache +providers/.cache +utils/user-config.json +.env +.git +.gitignore +*.log +*.md +!README.md +tests +coverage +.github +docker-compose.yml diff --git a/.env_example b/.env_example deleted file mode 100644 index c0c52bb..0000000 --- a/.env_example +++ /dev/null @@ -1,2 +0,0 @@ -TMDB_API_KEY="YOUR_TMDB_API_KEY_HERE" -PORT=3000 \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..7e0491a --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +node_modules/ +public/ +*.log diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..8e68b87 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,23 @@ +module.exports = { + root: true, + env: { + node: true, + es2022: true, + }, + parserOptions: { + ecmaVersion: 2022, + sourceType: 'module', + }, + ignorePatterns: ["public/*"], + extends: [ + 'eslint:recommended' + ], + rules: { + 'no-unused-vars': ['warn', { args: 'none', ignoreRestSiblings: true }], + 'no-undef': 'error', + 'no-console': 'off', + 'prefer-const': 'warn', + 'eqeqeq': ['warn', 'smart'], + 'no-var': 'warn' + } +}; diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..f64f410 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,74 @@ +name: Docker Publish + +on: + push: + branches: [ main, master ] + tags: [ 'v*' ] + workflow_dispatch: + +env: + IMAGE_NAME: tmdb-embed-api + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Extract version + id: vars + run: | + PKG_VERSION=$(node -p "require('./package.json').version") + echo "pkg_version=$PKG_VERSION" >> $GITHUB_OUTPUT + if [[ $GITHUB_REF == refs/tags/v* ]]; then + TAG=${GITHUB_REF#refs/tags/} + echo "ref_tag=$TAG" >> $GITHUB_OUTPUT + fi + + - name: Build & Push (branch) + if: startsWith(github.ref, 'refs/heads/') + uses: docker/build-push-action@v5 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:latest + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.pkg_version }} + labels: | + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.version=${{ steps.vars.outputs.pkg_version }} + + - name: Build & Push (tag) + if: startsWith(github.ref, 'refs/tags/v') + uses: docker/build-push-action@v5 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: | + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:latest + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.pkg_version }} + ${{ secrets.DOCKERHUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.ref_tag }} + labels: | + org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.version=${{ steps.vars.outputs.pkg_version }} + org.opencontainers.image.ref.name=${{ steps.vars.outputs.ref_tag }} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7f8329a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,50 @@ +# Changelog + +## [1.0.0] - 2025-09-16 + +### Added +- Comprehensive `README.md` (features, endpoints, admin UI overview, screenshots gallery, Docker usage, troubleshooting). +- `LICENSE` (MIT) file. +- Multi‑TMDB key rotation support (array of keys; random selection per request). +- Config override system writing to `utils/user-config.json` with live merged view. +- Session-based authentication (login, logout, session check, password change) with brute-force mitigation. +- Rate limiting + exponential lockouts for failed login attempts. +- Provider status & metrics endpoints: `/api/health`, `/api/metrics`, `/api/status`, `/api/providers`. +- Stream aggregation endpoints (aggregate + provider-specific) with filtering pipeline. +- Diagnostics instrumentation (intercept `process.exit`, `beforeExit`, unhandled rejection / exception logging, periodic heartbeat interval). +- Docker assets: multi-stage `Dockerfile`, `.dockerignore`, `docker-compose.yml` with persistent volume for overrides. +- GitHub Actions workflow (`.github/workflows/docker-publish.yml`) for automatic multi-arch (amd64+arm64) build & push on branch and tag (`v*`). +- OCI metadata labels and build argument (`VERSION`) in Docker image. +- Version + (placeholder) Docker pulls badges in README header. +- VidSrc extractor refactor: removed direct `process.exit` calls; `main()` now returns status code (safer when required as a module). + +### Changed +- Config normalization now clears legacy single `tmdbApiKey` when `tmdbApiKeys` override is explicitly emptied. +- Dockerfile slimmed: narrowed COPY set, added labels, build arg, retained only necessary runtime artifacts. +- `.dockerignore` expanded to reduce build context (`.git`, logs, markdown except README, tests, CI configs, caches, compose file, etc.). + +### Removed +- Deprecated `uhdmovies` provider: code file, registry references, UI toggles, documentation mentions. + +### Security +- Hardened auth flow: session cookies (HttpOnly), no-store headers for admin pages, escalating lockouts against brute force. + +### CI / Automation +- Added multi-arch Docker publish workflow using Buildx & QEMU. + +### Documentation +- Added Docker usage section (local build, compose, multi-key usage, env vars table, healthcheck notes). +- Added screenshots gallery of admin UI. +- Updated docs to reflect provider removal and new configuration semantics. +- Added this `CHANGELOG.md`. + +### Developer Experience +- Heartbeat diagnostic interval to aid investigation of unexpected exits. +- Intercepted premature `process.exit` calls to avoid silent shutdowns during debugging. + +## Historical Context +This 1.0.0 release consolidates modernization work: provider cleanup, configuration clarity, deployment ergonomics (Docker + CI), security hardening, and observability. + +--- + +[1.0.0]: https://github.com/Inside4ndroid/TMDB-Embed-API/releases/1.0.0 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..137ac6f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,54 @@ +# ---------- Build Stage ---------- +FROM node:20-alpine AS build +ARG VERSION=dev +WORKDIR /app + +# Install only production dependencies first (leveraging cache) +COPY package.json package-lock.json ./ +# Using npm install instead of npm ci because lock file appears out-of-sync +# If you later regenerate lock (npm install locally) you can revert to npm ci for reproducibility +RUN npm install --omit=dev + +# Copy only required source (avoid sending screenshots, node_modules already installed) +COPY apiServer.js ./ +COPY providers ./providers +COPY public ./public +COPY utils ./utils +COPY README.md ./ + +# ---------- Runtime Stage ---------- +FROM node:20-alpine AS runtime +ARG VERSION=dev +WORKDIR /app +ENV NODE_ENV=production \ + API_PORT=8787 \ + APP_VERSION=${VERSION} + +# Create non-root user +RUN addgroup -S app && adduser -S app -G app + +# Copy node_modules from build and necessary source +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/apiServer.js ./ +COPY --from=build /app/public ./public +COPY --from=build /app/providers ./providers +COPY --from=build /app/utils ./utils +COPY --from=build /app/package.json ./ +COPY --from=build /app/README.md ./ + +# Expose port (documentational; runtime can override) +EXPOSE 8787 + +USER app + +# Labels / metadata +LABEL org.opencontainers.image.title="TMDB Embed API" \ + org.opencontainers.image.description="Streaming metadata + source aggregation API with multi-key TMDB rotation" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.source="https://github.com/Inside4ndroid/TMDB-Embed-API" \ + org.opencontainers.image.licenses="MIT" + +# Healthcheck (simple) +HEALTHCHECK --interval=30s --timeout=5s --start-period=20s CMD wget -qO- http://localhost:${API_PORT:-8787}/api/health || exit 1 + +CMD ["node","apiServer.js"] diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..1e309f9 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Inside4ndroid + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 1f971f0..0eb3620 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,329 @@ -# 🍿🎥✮⋆˙ TMDB Embed API! 🍿🎥✮⋆˙ +# 🍿 TMDB Embed API -Hello! I'm Inside4ndroid, a passionate Software Developer. +> Modern, configurable streaming metadata + source aggregation API with a secure admin panel and multi-key TMDB rotation. -- 🐛 Bugs will be found and squashed as soon as possible please report any isues. -- 🌱 Currently in a state that works and is recieving updates. +

+ + + + + +

--- -## ℹ️ Current Embed Providers ℹ️ +## 📸 Screenshots +

+ + +

+

+ + +

+

+ + +

+

+ + +

-1. embedsu -2. 2embed -3. autoembed -4. vidsrcsu +--- -## 🤝 Sponsorship / Donations 🤝 +## ✨ Features +- **Multi‑TMDB Key Rotation** – Supply multiple API keys; one is chosen randomly per request. +- **Provider Aggregation** – Pluggable providers (Showbox, 4khdhub, MoviesMod, MP4Hydra, VidZee, Vixsrc, Xprime) with per‑provider enable toggles + default selection. +- **Dynamic Filtering** – Minimum quality presets, custom JSON quality map, codec exclusion rules (presets + JSON). +- **Runtime Overrides UI** – Fully interactive web admin at `/` (login protected) writing to `utils/user-config.json`. +- **Session Auth + Rate Limiting** – Login system with brute‑force lockouts, logout, password change. +- **Status & Health Panel** – Live metrics, provider status, endpoint list, functional provider checks. +- **Config Propagation** – Overrides mirrored to `process.env` for legacy compatibility (no `.env` required after first save). +- **Back‑Navigation Safe** – Cache-control + visibility/session revalidation. +- **Extensible** – Simple provider registry pattern. -Your sponsorship is vital in helping me achieve this mission. With your support, I can: +--- -Dedicate more time to developing and improving my projects -Cover costs for essential tools, services and premium hosting to run public projects -Provide detailed documentation and support for users -Every contribution, no matter the size, makes a significant impact. +## 📦 Quick Start +```bash +# 1. Install dependencies +npm install -[Sponsor Me!](https://github.com/sponsors/Inside4ndroid) +# 2. (Optional) Copy example env if you want an initial TMDB key +cp .env.example .env # then edit TMDB_API_KEY= -Thank you for considering supporting my work! +# 3. Start API (production style) +node apiServer.js -### ✨ Usage ✨ +# Or with automatic restarts (if you add a dev script) +# npm run dev:api -This is an api for id's provided at [TMDB](https://www.themoviedb.org/). +# 4. Open the Admin UI (login page) in browser +http://localhost:8787/ -you must use the ID from the tmdb url like this : - -``` -🎬 MOVIES: - -single provider - localhost:PORT/movie/{PROVIDER}/{TMDBID} -all providers - localhost:PORT/movie/{TMDBID} - -📺 TV SHOWS: - -single provider - localhost:PORT/tv/{PROVIDER}/{TMDBID}?s={SEASON}&e={EPISODE} -all providers - localhost:PORT/tv/{TMDBID}?s={SEASON}&e={EPISODE} +# 5. Health check +curl http://localhost:8787/api/health ``` -## 📋 Providers 📋 +--- -The providers are currently : +## 🐳 Docker Usage -``` -embedsu -2embed -autoembed -vidsrcsu +### Pull & Run (Fastest) +If you just want to run it (no building): +```bash +docker pull inside4ndroid/tmdb-embed-api:latest +docker run --name tmdb-embed-api -p 8787:8787 \ + -e TMDB_API_KEY=YOUR_TMDB_KEY \ + inside4ndroid/tmdb-embed-api:latest ``` -## 🚀 Deployment 🚀 +Persist overrides (Windows PowerShell example) by mounting a local file: +```powershell +New-Item -ItemType File -Path .\utils\user-config.json -Force | Out-Null +docker run --name tmdb-embed-api -p 8787:8787 ` + -e TMDB_API_KEY=YOUR_TMDB_KEY ` + -v ${PWD}/utils/user-config.json:/app/utils/user-config.json ` + inside4ndroid/tmdb-embed-api:latest +``` -You can self host by doing the following : +### Build Locally +```bash +docker build -t tmdb-embed-api . +docker run --name tmdb-embed -p 8787:8787 \ + -e TMDB_API_KEY=YOUR_TMDB_KEY \ + -v "$(pwd)/utils/user-config.json:/app/utils/user-config.json" \ + tmdb-embed-api +``` -1. `git clone https://github.com/Inside4ndroid/TMDB-Embed-API.git` -2. `cd TMDB-Embed-API` -3. `rename .env_example to .env` -4. `edit .env and insert your preferred port and your tmdb api key` -5. `npm install` -6. `npm run start` +After first login + save, the UI writes overrides into the mounted `user-config.json` so they persist across container restarts. -## Contribute +### docker-compose +An example `docker-compose.yml` is included. Start with: +```bash +docker compose up -d --build +``` +Environment variables can be supplied via a `.env` file in the same directory (Compose automatically loads it). Example `.env`: +``` +TMDB_API_KEY=first_key +FEBBOX_COOKIES=cookie1,cookie2 +``` -If you know how to code then please dont hesitate to conribute to this project by forking and making pull requests with your new providers or edits etc. +To stop & remove: +```bash +docker compose down +``` -## ⚠️ WARNING ⚠️ +### Switching to Multiple TMDB Keys +Either set `TMDB_API_KEYS` to a JSON array string: +```bash +docker run -p 8787:8787 \ + -e TMDB_API_KEYS='["KEY1","KEY2","KEY3"]' \ + tmdb-embed-api +``` +or add / remove keys inside the Admin UI (Keys panel) and save. -Using this without a proxy may lead to your server ip being banned there are 3 ways to get around this : +### Key Environment Variables +| Variable | Purpose | Notes | +|----------|---------|-------| +| `API_PORT` | Port the server listens on | Defaults to 8787 | +| `TMDB_API_KEY` | Single TMDB key (legacy) | Use if you only have one key | +| `TMDB_API_KEYS` | JSON array of keys | Overrides single key when present | +| `FEBBOX_COOKIES` | Comma separated FebBox cookies | Enables Showbox provider immediately | +| `PASSWORD_HASH` | Pre-seed admin password hash | Optional (UI can set) | +| `ADMIN_USERNAME` | Override default username | Default: `admin` | -1. Use a proxy : [Find One Here](https://github.com/search?q=m3u8+proxy&type=repositories). -2. Get a server with rotating ip addresses or dynamic ip adresses and use the ips at random. -3. use a cloudflare proxy worker. +If both `TMDB_API_KEY` and `TMDB_API_KEYS` are provided, rotation uses the array. Clearing the array in the UI also clears the legacy key. -Some providers need cloudflare resolving and i am working on a method for this. but using correct headers etc in your network request when playing the media urls should suffice for now. \ No newline at end of file +--- + +### Updating the Image +```bash +docker compose pull # if using an external registry (future) +docker compose up -d --build +``` + +### Healthcheck +Container health relies on `GET /api/health`. If you disable or modify that route, adjust the Dockerfile / compose healthcheck accordingly. + +--- + +## �🔐 Authentication +The root (`/`) serves the login page. After successful login a session cookie (`session`) is issued (HttpOnly; 12h lifetime). All admin pages (e.g. `config.html`) require an active session. + +| Endpoint | Method | Purpose | +|----------|--------|---------| +| `/auth/login` | POST | Authenticate (JSON: `{ username, password }`) | +| `/auth/logout` | POST | Destroy session | +| `/auth/session` | GET | Check session status | +| `/auth/change-password` | POST | Update password (requires session) | + +Repeated failed logins trigger exponential lockouts (Retry-After header emitted). + +--- + +## 🛠 Configuration Model +All runtime state collapses into a *merged* object displayed in the UI (Live Config panel). Source order: +1. Initial environment variables / optional `.env` +2. JSON overrides: `utils/user-config.json` + +Saving in the UI writes only changed keys. Setting a field to empty removes the override (reverting to env/default). Removing all TMDB keys (and saving) clears `tmdbApiKeys` and the legacy `tmdbApiKey`. + +**Override File:** `utils/user-config.json` +```json +{ + "defaultProviders": ["showbox","4khdhub"], + "tmdbApiKeys": ["KEY_A","KEY_B"], + "enableShowboxProvider": true +} +``` + +--- + +## 🎛 Admin UI Sections +| Panel | Summary | +|-------|---------| +| Core | Port, default providers, default region | +| Quality / Filters | Min quality presets & codec exclusion JSON | +| Keys | Add/remove TMDB API keys (rotated randomly) | +| FebBox / PStream | Manage FebBox cookies powering Showbox provider | +| Advanced | Provider toggles, cache & validation flags, proxy paths | +| Server Status | Live metrics, provider functional checks | +| Live Config | View merged + override JSON snapshots | + +Session is revalidated on visibility and back/forward navigation to prevent stale access. + +--- + +## 🔌 Providers +Current built‑in providers: +- `showbox` +- `4khdhub` +- `moviesmod` +- `mp4hydra` +- `vidzee` +- `vixsrc` +- `xprime` + +You can enable/disable and mark defaults via the Provider Matrix in the UI. If **no defaults** are selected, all enabled providers participate in aggregation. + +### Adding a New Provider (Outline) +1. Create `providers/myprovider.js` exporting an async fetch function (see existing files for patterns). +2. Lazy‑load it in `providers/registry.js` similar to others. +3. Add a config flag (`enableMyproviderProvider`) if you want toggle support. +4. Update the provider matrix arrays in `public/index.js`. + +--- + +## 📡 Key Endpoints +| Endpoint | Description | +|----------|-------------| +| `GET /api/health` | Basic heartbeat | +| `GET /api/metrics` | Runtime counters & summary | +| `GET /api/status` | Metrics + providers + endpoints list | +| `GET /api/providers` | Enabled providers summary | +| `GET /api/providers/:name` | Single provider status | +| `GET /api/streams/:type/:tmdbId` | Aggregate streams (`type` = movie|series) | +| `GET /api/streams/:provider/:type/:tmdbId` | Provider-specific streams | +| `GET /api/config` | `{ merged, override }` | +| `POST /api/config` | Apply override patch | + +Aggregate endpoint auto-resolves IMDb when needed and merges provider output before filtering. + +--- + +## 🧪 Stream Object Shape (Typical) +```json +{ + "title": "Example Title", + "url": "https://...", + "quality": "1080p", + "provider": "showbox", + "size": null, + "languages": ["en"], + "subtitles": [], + "codecs": ["H264"], + "headers": { "Referer": "..." } +} +``` + +Filtering passes through `applyFilters` to enforce min quality + codec exclusions. + +--- + +## 🧩 Quality & Codec Filtering +- Presets: `all`, `480p`, `720p`, `1080p`, `1440p`, `2160p`. +- Custom quality JSON example: +```json +{ "default": "900p", "showbox": "1080p" } +``` +- Codec exclusion JSON example: +```json +{ "excludeDV": true, "excludeHDR": false } +``` + +--- + +## 🔐 Security Notes +- Admin UI requires login; session cookie is HttpOnly. +- Cache-control headers disable storing sensitive pages. +- Login is rate limited with escalating lockouts. +- Password change endpoint enforces minimum length. + +--- + +## 🚀 Deployment Tips +| Aspect | Recommendation | +|--------|---------------| +| Node Version | 18+ LTS | +| Reverse Proxy | Terminate TLS (e.g., Nginx) and forward to API port | +| Persistent Config | Mount / persist `utils/user-config.json` | +| Logs | Pipe stdout to centralized logger | +| Scaling | Use a single instance unless providers are CPU bound | + +For ephemeral platforms (e.g., Vercel) note that some providers use temporary directories; avoid enabling disk-heavy cache directories. + +--- + +## 💡 Troubleshooting +| Symptom | Cause / Fix | +|---------|------------| +| No streams from Showbox | Missing FebBox cookies | +| TMDB quota issues | Add more keys under Keys panel | +| Provider missing in matrix | Ensure its enable flag exists & UI updated | +| Empty merged config after restart | `user-config.json` deleted or unreadable | +| Streams low quality | Adjust min quality preset or custom JSON | + +--- + +## 🤝 Contributing +PRs welcome. Keep changes focused and avoid unrelated formatting churn. For new providers include: +- A short rationale +- Retry / timeout safeguards +- Respect for existing filtering structure + +--- + +## ❤️ Sponsorship +If this project helps you, consider sponsoring to support continued development & maintenance: + +➡️ **GitHub Sponsors:** https://github.com/sponsors/Inside4ndroid + +Every contribution accelerates feature delivery & sustainability. + +--- + +## 📜 License +MIT. See `LICENSE`. + +--- + +## 🙏 Acknowledgements +Inspired by community scraping/stream aggregation efforts. Credits also to the original NuvioStreamsAddon work for earlier concepts. + +--- + +> *Happy streaming & hacking!* ✨ + +--- diff --git a/apiServer.js b/apiServer.js new file mode 100644 index 0000000..3857d39 --- /dev/null +++ b/apiServer.js @@ -0,0 +1,365 @@ +require('dotenv').config(); +const express = require('express'); +const cors = require('cors'); +const os = require('os'); +const { config, saveConfigPatch, OVERRIDE_PATH } = require('./utils/config'); +const { authenticate, issueSession, requireAuth, getSession, updatePassword, AUTH_FILE } = require('./utils/auth'); +const path = require('path'); +const { listProviders, getProvider, getCookieStats } = require('./providers/registry'); +const { resolveImdbId } = require('./utils/tmdb'); +const { applyFilters } = require('./utils/streamFilters'); + +const app = express(); + +// --- Simple In-Memory Rate Limiting for /auth/login --- +const loginAttempts = new Map(); // key: ip, value: { count, first, last, lockedUntil } +const MAX_ATTEMPTS_WINDOW = 5; // attempts allowed +const WINDOW_MS = 10 * 60 * 1000; // 10 minutes window +const BASE_LOCK_MS = 5 * 60 * 1000; // 5 minutes base lock + +function getClientIp(req){ + return (req.headers['x-forwarded-for'] || req.connection.remoteAddress || '').split(',')[0].trim(); +} + +function recordLoginFailure(ip){ + const now = Date.now(); + let entry = loginAttempts.get(ip); + if (!entry) { + entry = { count:1, first: now, last: now, lockedUntil:0 }; + loginAttempts.set(ip, entry); + return entry; + } + // Reset window if outside timeframe and not locked + if (now - entry.first > WINDOW_MS && now > entry.lockedUntil) { + entry.count = 1; + entry.first = now; + } else { + entry.count++; + } + entry.last = now; + if (entry.count > MAX_ATTEMPTS_WINDOW) { + // Exponential backoff lock: base * 2^(count - limit) + const over = entry.count - MAX_ATTEMPTS_WINDOW; + const lockMs = BASE_LOCK_MS * Math.min(8, Math.pow(2, over-1)); + entry.lockedUntil = now + lockMs; + } + return entry; +} + +function canAttempt(ip){ + const entry = loginAttempts.get(ip); + if (!entry) return { allowed:true }; + const now = Date.now(); + if (entry.lockedUntil && now < entry.lockedUntil) { + return { allowed:false, retryAfter: Math.ceil((entry.lockedUntil - now)/1000) }; + } + if (now - entry.first > WINDOW_MS) { + // Window passed; reset + loginAttempts.delete(ip); + return { allowed:true }; + } + return { allowed:true }; +} + +function recordLoginSuccess(ip){ + // On success clear state to avoid lingering count + loginAttempts.delete(ip); +} + +// Guard against premature process.exit from imported legacy modules +process.exit = function(code){ + console.warn('[diagnostic] Intercepted process.exit with code', code, new Error('exit trace').stack); + // keep process alive for debugging +}; +setImmediate(()=>console.log('[diagnostic] post-start setImmediate fired')); +app.use(cors()); +app.use(express.json()); + +// --- Auth Routes (login before static serving) --- +app.post('/auth/login', (req,res) => { + const { username, password } = req.body || {}; + const ip = getClientIp(req); + const attemptState = canAttempt(ip); + if (!attemptState.allowed) { + res.setHeader('Retry-After', String(attemptState.retryAfter)); + return res.status(429).json({ success:false, error:'TOO_MANY_ATTEMPTS', retryAfter: attemptState.retryAfter }); + } + if (!username || !password) return res.status(400).json({ success:false, error:'MISSING_CREDENTIALS' }); + if (!authenticate(username, password)) { + const entry = recordLoginFailure(ip); + if (entry.lockedUntil && Date.now() < entry.lockedUntil) { + const retryAfter = Math.ceil((entry.lockedUntil - Date.now())/1000); + res.setHeader('Retry-After', String(retryAfter)); + return res.status(429).json({ success:false, error:'LOCKED', retryAfter }); + } + return res.status(401).json({ success:false, error:'INVALID_CREDENTIALS', remaining: Math.max(0, MAX_ATTEMPTS_WINDOW - entry.count) }); + } + recordLoginSuccess(ip); + const token = issueSession(username); + res.setHeader('Set-Cookie', `session=${token}; HttpOnly; SameSite=Lax; Path=/; Max-Age=${12*60*60}`); + res.json({ success:true, username }); +}); + +app.post('/auth/logout', (req,res) => { + res.setHeader('Set-Cookie', 'session=; HttpOnly; SameSite=Lax; Path=/; Max-Age=0'); + res.json({ success:true }); +}); + +app.get('/auth/session', (req,res) => { + const sess = getSession(req); + if (!sess) return res.json({ authenticated:false }); + res.json({ authenticated:true, username: sess.u }); +}); + +app.post('/auth/change-password', requireAuth, (req,res) => { + const { oldPassword, newPassword } = req.body || {}; + if (!oldPassword || !newPassword) return res.status(400).json({ success:false, error:'MISSING_FIELDS' }); + const sess = req.session; + if (!authenticate(sess.u, oldPassword)) return res.status(401).json({ success:false, error:'INVALID_OLD_PASSWORD' }); + if (newPassword.length < 8) return res.status(400).json({ success:false, error:'PASSWORD_TOO_SHORT' }); + if (!updatePassword(sess.u, newPassword)) return res.status(500).json({ success:false, error:'UPDATE_FAILED' }); + res.json({ success:true, message:'PASSWORD_UPDATED' }); +}); + +// Protect config panel (HTML) explicitly before static middleware +app.get('/config.html', (req,res,next) => { + const sess = getSession(req); + if (!sess) return res.redirect(302, '/'); + res.setHeader('Cache-Control','no-store, must-revalidate'); + res.setHeader('Pragma','no-cache'); + res.setHeader('Expires','0'); + res.sendFile(path.join(process.cwd(),'public','config.html')); +}); + +// Explicit root handler for login page to ensure no-store +app.get('/', (req,res) => { + res.setHeader('Cache-Control','no-store, must-revalidate'); + res.setHeader('Pragma','no-cache'); + res.setHeader('Expires','0'); + res.sendFile(path.join(process.cwd(),'public','index.html')); +}); + +// Diagnostics for unexpected exits +process.on('beforeExit', (code) => { + console.log('[diagnostic] beforeExit code=', code); +}); +process.on('exit', (code) => { + console.log('[diagnostic] exit code=', code); +}); +process.on('uncaughtException', (err) => { + console.error('[diagnostic] uncaughtException', err); +}); +process.on('unhandledRejection', (reason) => { + console.error('[diagnostic] unhandledRejection', reason); +}); +// Periodic heartbeat to confirm event loop activity (can be removed later) +let hbCount = 0; +setInterval(()=>{ + hbCount++; + if (hbCount % 6 === 0) { // every 60s if interval is 10s + console.log('[diagnostic] heartbeat 60s elapsed, process alive'); + } +}, 10_000).unref(); + + +// --- Metrics (in-memory) --- +const metrics = { + startTime: Date.now(), + requestsTotal: 0, + streamRequests: 0, + providerCalls: {}, + lastRequestAt: null, + lastError: null, + streamsReturned: 0, + tmdbToImdbLookups: 0 +}; + +app.use((req,res,next)=>{ metrics.requestsTotal++; metrics.lastRequestAt = Date.now(); next(); }); +// Serve static UI (login page at /) +app.use(express.static(path.join(process.cwd(),'public'))); + +// Config API +app.get('/api/config', (req,res) => { + const fs = require('fs'); + let override = {}; + try { if (fs.existsSync(OVERRIDE_PATH)) override = JSON.parse(fs.readFileSync(OVERRIDE_PATH,'utf8')); } catch (e) { + // ignore JSON parse or fs errors reading override; return base config + } + res.json({ success:true, merged: config, override, overridePath: OVERRIDE_PATH }); +}); +app.post('/api/config', (req,res) => { + const patch = req.body || {}; + if (patch.port) { + const p = Number(patch.port); if (!Number.isFinite(p) || p<=0 || p>65535) return res.status(400).json({ success:false, error:'INVALID_PORT'}); + patch.port = p; + } + if (patch.defaultProviders && !Array.isArray(patch.defaultProviders)) return res.status(400).json({ success:false, error:'DEFAULT_PROVIDERS_NOT_ARRAY'}); + const ok = saveConfigPatch(patch); + res.json({ success: ok, merged: config }); +}); + +// --- Basic informational endpoints --- +app.get('/api/health', (req, res) => { + res.json({ ok: true, service: 'tmdb-embed-api', time: new Date().toISOString() }); +}); + +// Metrics endpoint +app.get('/api/metrics', (req,res) => { + res.json({ + uptimeSeconds: Math.round((Date.now()-metrics.startTime)/1000), + requestsTotal: metrics.requestsTotal, + streamRequests: metrics.streamRequests, + providerCalls: metrics.providerCalls, + streamsReturned: metrics.streamsReturned, + tmdbToImdbLookups: metrics.tmdbToImdbLookups, + lastRequestAt: metrics.lastRequestAt, + memoryMB: Math.round(process.memoryUsage().rss/1024/1024), + loadAvg: os.loadavg ? os.loadavg() : [], + nodeVersion: process.version, + configDefaults: { + region: config.defaultRegion, + providers: config.defaultProviders, + minQualities: config.minQualities ? Object.keys(config.minQualities).length : 0, + excludeCodecs: config.excludeCodecs ? Object.keys(config.excludeCodecs).filter(k=>config.excludeCodecs[k]).length : 0, + febboxCookies: config.febboxCookies.length + } + }); +}); + +// Consolidated status (metrics + providers + endpoints) +app.get('/api/status', (req,res) => { + const endpoints = [ + 'GET /api/health', + 'GET /api/metrics', + 'GET /api/status', + 'GET /api/providers', + 'GET /api/providers/:name', + 'GET /api/streams/:type/:tmdbId', + 'GET /api/streams/:provider/:type/:tmdbId', + 'POST /api/config', + 'GET /api/config' + ]; + // Determine cookie requirement heuristically (currently Showbox / PStream) + const cookieRequiredProviders = new Set(['showbox']); + const providers = listProviders().map(p => { + const cookieRequired = cookieRequiredProviders.has(p.name); + const cookieOk = !cookieRequired || (config.febboxCookies && config.febboxCookies.length > 0); + return { name: p.name, enabled: p.enabled, cookieRequired, cookieOk }; + }); + res.json({ success:true, metrics: { + uptimeSeconds: Math.round((Date.now()-metrics.startTime)/1000), + requestsTotal: metrics.requestsTotal, + streamRequests: metrics.streamRequests, + providerCalls: metrics.providerCalls, + streamsReturned: metrics.streamsReturned, + tmdbToImdbLookups: metrics.tmdbToImdbLookups, + lastRequestAt: metrics.lastRequestAt, + memoryMB: Math.round(process.memoryUsage().rss/1024/1024) + }, endpoints, providers }); +}); + +// Providers list +app.get('/api/providers', (req,res) => { + res.json({ success: true, providers: listProviders() }); +}); + +// Debug environment/config endpoint (do not expose publicly in production) +app.get('/api/debug/env', (req,res) => { + const cookieStats = getCookieStats ? getCookieStats() : null; + res.json({ + port: config.port, + defaultProviders: config.defaultProviders, + febboxCookieCount: config.febboxCookies.length, + showboxCacheDir: process.env.SHOWBOX_CACHE_DIR || '(os tmp)', + nodeVersion: process.version, + cookieStats + }); +}); + +// Single provider info +app.get('/api/providers/:name', (req,res) => { + const p = getProvider(req.params.name); + if (!p) return res.status(404).json({ success:false, error:'PROVIDER_NOT_FOUND' }); + res.json({ success:true, provider:{ name: p.name, enabled: p.enabled } }); +}); + +// Aggregate streams across all enabled providers +app.get('/api/streams/:type/:tmdbId', async (req,res) => { + const { type, tmdbId } = req.params; + if (!['movie','series'].includes(type)) return res.status(400).json({ success:false, error:'INVALID_TYPE' }); + const season = req.query.season ? Number(req.query.season) : null; + const episode = req.query.episode ? Number(req.query.episode) : null; + try { + metrics.streamRequests++; + const tmdbType = type === 'movie' ? 'movie' : 'tv'; + const imdbId = await resolveImdbId(tmdbType, tmdbId); if (imdbId) metrics.tmdbToImdbLookups++; + const selectedProviders = (config.defaultProviders.length ? config.defaultProviders : listProviders().map(p=>p.name)); + const providerTimings = {}; + const results = await Promise.all(selectedProviders.map(async name => { + const prov = getProvider(name); + if (!prov || !prov.enabled) return []; + metrics.providerCalls[name] = (metrics.providerCalls[name]||0)+1; + try { + console.log(`[api] invoking provider ${name} for tmdbId=${tmdbId}`); + const t0 = Date.now(); + const r = await prov.fetch({ tmdbId, type, season, episode, imdbId, filters:{ } }); + providerTimings[name] = Date.now()-t0; + console.log(`[api] provider ${name} returned ${Array.isArray(r)?r.length:0} streams`); + return r; + } catch (e) { + console.error(`[api] provider ${name} failed:`, e.message); + providerTimings[name] = null; + return []; + } + })); + let streams = results.flat(); + streams = applyFilters(streams, 'aggregate', config.minQualities, config.excludeCodecs); + metrics.streamsReturned += streams.length; + res.json({ success:true, tmdbId, imdbId, count: streams.length, providerTimings, streams }); + } catch (e) { + metrics.lastError = e.message; + res.status(500).json({ success:false, error:'INTERNAL_ERROR', message:e.message }); + } +}); + +// Provider-specific streams +app.get('/api/streams/:provider/:type/:tmdbId', async (req,res) => { + const { provider, type, tmdbId } = req.params; + if (!['movie','series'].includes(type)) return res.status(400).json({ success:false, error:'INVALID_TYPE' }); + const season = req.query.season ? Number(req.query.season) : null; + const episode = req.query.episode ? Number(req.query.episode) : null; + const prov = getProvider(provider); + if (!prov) return res.status(404).json({ success:false, error:'PROVIDER_NOT_FOUND' }); + if (!prov.enabled) return res.status(503).json({ success:false, error:'PROVIDER_DISABLED' }); + try { + metrics.streamRequests++; + metrics.providerCalls[prov.name] = (metrics.providerCalls[prov.name]||0)+1; + const tmdbType = type === 'movie' ? 'movie' : 'tv'; + const imdbId = await resolveImdbId(tmdbType, tmdbId); if (imdbId) metrics.tmdbToImdbLookups++; + const t0 = Date.now(); + let streams = await prov.fetch({ tmdbId, type, season, episode, imdbId, filters:{} }); + const providerTimings = { [prov.name]: Date.now()-t0 }; + streams = applyFilters(streams, prov.name, config.minQualities, config.excludeCodecs); + metrics.streamsReturned += streams.length; + res.json({ success:true, provider: prov.name, tmdbId, imdbId, count: streams.length, providerTimings, streams }); + } catch (e) { + metrics.lastError = e.message; + res.status(500).json({ success:false, error:'INTERNAL_ERROR', message:e.message }); + } +}); + +const PORT = config.port; +const server = app.listen(PORT, () => { + console.log(`TMDB Embed REST API listening on http://localhost:${PORT}`); + console.log('Endpoints:'); + console.log(' GET /api/health'); + console.log(' GET /api/metrics'); + console.log(' GET /api/providers'); + console.log(' GET /api/streams/:type/:id'); + console.log(' POST /api/streams/:type/:id'); + if (!config.febboxCookies || config.febboxCookies.length === 0) { + console.warn('[startup][warning] No FEBBOX_COOKIES configured. Showbox / PStream related streams may be unavailable. Set FEBBOX_COOKIES in your environment to enable these sources.'); + } +}); + +server.on('error', (err)=>{ console.error('[diagnostic] server error', err); }); diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f4f316f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: '3.9' +services: + tmdb-embed-api: + build: . + container_name: tmdb-embed-api + environment: + # Provide at least one TMDB key (comma separated or override via UI later) + - TMDB_API_KEY=${TMDB_API_KEY:-} + # Alternative: supply JSON array + # - TMDB_API_KEYS=["key1","key2"] + - API_PORT=8787 + # FebBox cookies (comma separated) if you want Showbox immediately functional + - FEBBOX_COOKIES=${FEBBOX_COOKIES:-} + ports: + - "8787:8787" + volumes: + # Persist runtime overrides (created by the admin UI) + - user_config_data:/app/utils/user-config.json + restart: unless-stopped + healthcheck: + test: ["CMD-SHELL", "wget -qO- http://localhost:8787/api/health || exit 1"] + interval: 30s + timeout: 5s + start_period: 20s + retries: 3 +volumes: + user_config_data: diff --git a/index.js b/index.js deleted file mode 100644 index bd0bba2..0000000 --- a/index.js +++ /dev/null @@ -1,184 +0,0 @@ -import express from "express"; -import { getMovie, getTv } from './src/api.js'; -import { getMovieFromTmdb, getTvFromTmdb } from './src/workers/tmdb.js'; -import cors from "cors"; - -const PORT = process.env.PORT; -const app = express(); - -app.use(cors()); - -app.get('/', (req, res) => { - res.status(200).json({ - INTRO: "Welcome to the TMDB Embed API", - PROVIDERS: "2embed | embedsu | autoembed | vidsrcsu", - ROUTES: { - movie: "/movie/{PROVIDER}/{TMDBID}", - show: "/tv/{PROVIDER}/{TMDBID}?s={SEASON}&e={EPISODE}", - all_movie_providers: "/movie/{TMDBID}", - all_show_providers: "/tv/{TMDBID}?s={SEASON}&e={EPISODE}" - }, - INFORMATION: "This project is for educational purposes only. We do not host any kind of content. We provide only the links to already available content on the internet. We do not host, upload any videos, films or media files. We are not responsible for the accuracy, compliance, copyright, legality, decency, or any other aspect of the content of other linked sites. If you have any legal issues please contact the appropriate media file owners or host sites.", - SOURCE: "https://github.com/Inside4ndroid/TMDB-Embed-API" - }); -}); - -app.get('/movie/:tmdbId', async (req, res) => { - if (isNaN(parseInt(req.params.tmdbId))) { - res.status(405).json({ - error: "Invalid movie id", - hint: "Check the documentation again to see how to use this endpoint" - }); - return; - } - - const media = await getMovieFromTmdb(req.params.tmdbId); - - if (media instanceof Error) { - res.status(405).json({ error: media.message }); - return; - } - - let output = await getMovie(media); - - if (output === null || output instanceof Error) { - res.status(404).json({ - error: "No sources fond for this movie.", - hint: "If you know where to find this movie and know programming feel free to join us on GitHub: https://github.com/Inside4ndroid/TMDB-Embed-API to add it." - }); - } else { - res.status(200).json(output); - } -}); - -app.get('/movie/:provider/:tmdbId', async (req, res) => { - const allowedProviders = ['2embed', 'autoembed', 'embedsu', 'vidsrcsu']; - if (!allowedProviders.includes(req.params.provider)) { - res.status(400).json({ - error: "Invalid provider", - hint: `Provider must be one of: ${allowedProviders.join(', ')}` - }); - return; - } - - if (isNaN(parseInt(req.params.tmdbId))) { - res.status(400).json({ - error: "Invalid movie id", - hint: "Check the documentation again to see how to use this endpoint" - }); - return; - } - - const media = await getMovieFromTmdb(req.params.tmdbId); - - if (media instanceof Error) { - res.status(405).json({ error: media.message }); - return; - } - - let output = await getMovie(media, req.params.provider); - - if (output === null || output instanceof Error) { - res.status(404).json({ - error: "No sources fond for this movie.", - hint: "If you know where to find this movie and know programming feel free to join us on GitHub: https://github.com/Inside4ndroid/TMDB-Embed-API to add it." - }); - } else { - res.status(200).json(output); - } -}); - -app.get('/tv/:tmdbId', async (req, res) => { - if (!req.params.tmdbId || isNaN(parseInt(req.params.tmdbId)) || !req.query.s || isNaN(parseInt(req.query.s)) || !req.query.e || isNaN(parseInt(req.query.e))) { - res.status(405).json({ - error: "Invalid show id, season, or episode number", - hint: "Check the documentation again to see how to use this endpoint" - }); - return; - } - - const media = await getTvFromTmdb(req.params.tmdbId, req.query.s, req.query.e); - - if (media instanceof Error) { - res.status(405).json({ error: media.message }); - return; - } - - let output = await getTv(media, req.query.s, req.query.e); - - if (output === null || output instanceof Error) { - res.status(404).json({ - error: "No sources found for this show.", - hint: "If you know where to find this show and know programming feel free to join us on GitHub: https://github.com/Inside4ndroid/TMDB-Embed-API to add it." - }); - } else { - res.status(200).json(output); - } -}); - -app.get('/tv/:provider?/:tmdbId', async (req, res) => { - const allowedProviders = ['2embed', 'autoembed', 'embedsu', 'vidsrcsu']; - if (!allowedProviders.includes(req.params.provider)) { - res.status(400).json({ - error: "Invalid provider", - hint: `Provider must be one of: ${allowedProviders.join(', ')}` - }); - return; - } - - if (isNaN(parseInt(req.params.tmdbId))) { - res.status(400).json({ - error: "Invalid show id", - hint: "Check the documentation again to see how to use this endpoint", - }); - return; - } - - if (!req.query.s || isNaN(parseInt(req.query.s)) || !req.query.e || isNaN(parseInt(req.query.e))) { - return res.status(400).json({ - error: "Invalid season, or episode number", - hint: "Check the documentation again to see how to use this endpoint" - }); - } - - const media = await getTvFromTmdb(req.params.tmdbId, req.query.s, req.query.e); - - if (media instanceof Error) { - return res.status(405).json({ error: media.message }); - } - - let output = await getTv(media, req.query.s, req.query.e, req.params.provider); - - if (output === null || output instanceof Error) { - return res.status(404).json({ - error: "No sources found for this show.", - hint: "If you know where to find this show and know programming feel free to join us on GitHub: https://github.com/Inside4ndroid/TMDB-Embed-API to add it." - }); - } - - return res.status(200).json(output); -}); - -app.get('/movie/', (req, res) => { - res.status(405).json({ - error: "Invalid movie id", - hint: "Check the documentation again to see how to use this endpoint" - }); -}); - -app.get('/tv/', (req, res) => { - res.status(405).json({ - error: "Invalid show id", - hint: "Check the documentation again to see how to use this endpoint" - }); -}); - -app.get('*', (req, res) => { - res.status(404).json({ error: 'Not found', hint: 'Go to /' }); -}); - -export const server = app.listen(PORT, () => { - console.log(`Server is running on port http://localhost:${PORT}`); -}); - -export default app; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 18175f9..8d62993 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,2279 +7,465 @@ "": { "name": "tmdb-embed-api", "version": "1.0.0", - "license": "ISC", "dependencies": { + "aromanize": "^0.1.5", + "axios": "^1.9.0", + "axios-cookiejar-support": "^6.0.2", + "body-parser": "^2.2.0", "cheerio": "^1.0.0", "cors": "^2.8.5", - "dotenv": "^16.4.7", - "express": "^4.18.2", - "node-fetch": "^3.3.2" + "crypto-js": "^4.2.0", + "dotenv": "^16.5.0", + "express": "^4.21.2", + "form-data": "^4.0.3", + "hls-parser": "^0.13.5", + "jsdom": "^26.1.0", + "node-fetch": "^2.7.0", + "p-limit": "^6.2.0", + "puppeteer": "^24.11.0", + "string-similarity": "^4.0.4", + "tough-cookie": "^5.1.2", + "ttl-cache": "^1.0.2", + "vm2": "^3.9.19", + "yargs": "^17.7.2" }, "devDependencies": { - "@babel/core": "^7.26.10", - "@babel/preset-env": "^7.26.9", - "cross-env": "^7.0.3", - "jest": "^29.7.0", - "jest-extended": "^3.2.4", - "jest-junit": "^15.0.0", - "supertest": "^7.1.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "eslint": "^8.57.0", + "nodemon": "^3.1.10" }, "engines": { - "node": ">=6.0.0" + "node": ">=14.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", - "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.27.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", - "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "dev": true, - "license": "MIT", + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "dev": true, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=6.9.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@babel/helpers": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=6.9.0" + "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/@babel/parser": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@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/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.10.5", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.5.tgz", + "integrity": "sha512-eifa0o+i8dERnngJwKrfp3dEq7ia5XFyoqB17S4gK8GhsQE4/P8nxOfQSE0zQHxzzLo/cmF+7+ywEQ7wK7Fb+w==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.1", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.2", + "tar-fs": "^3.0.8", + "yargs": "^17.7.2" }, "bin": { - "parser": "bin/babel-parser.js" + "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=18" } }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "dev": true, + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "ms": "^2.1.3" }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", - "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", - "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", - "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, + "node_modules/@puppeteer/browsers/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/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, + "node_modules/@types/node": { + "version": "24.0.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", + "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "undici-types": "~7.8.0" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "license": "MIT", + "optional": true, "dependencies": { "@types/node": "*" } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "22.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", - "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" + "license": "ISC" }, "node_modules/accepts": { "version": "1.3.8", @@ -2294,27 +480,70 @@ "node": ">= 0.6" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "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/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" + "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": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2324,7 +553,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -2351,14 +579,16 @@ } }, "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aromanize": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/aromanize/-/aromanize-0.1.5.tgz", + "integrity": "sha512-fyFsbmpocja8wnYuYjwt2k7WRkBZftZKDDmLgX9tclV94TRn7b29skxU66tTDInNFZ3MwITPdNvb8bLg2rbbDA==", + "license": "MIT" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -2366,177 +596,89 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types/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==", + "license": "0BSD" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, "license": "MIT" }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "license": "MIT", "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios-cookiejar-support": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-6.0.2.tgz", + "integrity": "sha512-UO/g6DKfVoxnZkZz1NN669bMDjGV3snZnAZGZqIwEd8FdvFI17/rXLyMBm1j1cgtb2O6Jyi4MJ7ll49NPBEMNg==", + "license": "MIT", + "dependencies": { + "http-cookie-agent": "^7.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=20.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/3846masa" }, "peerDependencies": { - "@babel/core": "^7.8.0" + "axios": ">=0.20.0", + "tough-cookie": ">=4.0.0" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/axios-cookiejar-support/node_modules/http-cookie-agent": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-7.0.1.tgz", + "integrity": "sha512-lZHFZUdPTw64PdksQac5xbUd4NWjUbyDYnvR//2sbLpcC4UqEUW0x/6O+rDntVzJzJ07QvhtL5XZSC+c5EK+IQ==", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" + "agent-base": "^7.1.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" + "node": ">=20.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", - "semver": "^6.3.1" + "funding": { + "url": "https://github.com/sponsors/3846masa" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "tough-cookie": "^4.0.0 || ^5.0.0", + "undici": "^7.0.0" + }, + "peerDependenciesMeta": { + "undici": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -2545,57 +687,202 @@ "dev": true, "license": "MIT" }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", + "node_modules/bare-events": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bare-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.21.0" + }, + "peerDependencies": { + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "ms": "^2.1.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/body-parser/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/body-parser/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "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/body-parser/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -2603,9 +890,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2626,56 +913,15 @@ "node": ">=8" } }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "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" - } - ], + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": "*" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT" - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2718,43 +964,11 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001713", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001713.tgz", - "integrity": "sha512-wCIWIg+A4Xr7NfhTuHdX+/FKh3+Op3LBbSp2N5Pfx6T/LhdQy3GTyoTg48BReaW/MyMNZAkTadsBtai3ldWK0Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -2772,14 +986,27 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/cheerio": { @@ -2824,34 +1051,48 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": ">=8" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" + "node_modules/chromium-bidi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-5.1.0.tgz", + "integrity": "sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==", + "license": "Apache-2.0", + "dependencies": { + "mitt": "^3.0.1", + "zod": "^3.24.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -2862,29 +1103,33 @@ "node": ">=12" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true, - "license": "MIT" + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -2897,14 +1142,12 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -2913,16 +1156,6 @@ "node": ">= 0.8" } }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2951,13 +1184,6 @@ "node": ">= 0.6" } }, - "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": "0.7.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", @@ -2973,27 +1199,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.41.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -3007,45 +1212,30 @@ "node": ">= 0.10" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" + "node": ">=14" }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" + "funding": { + "url": "https://github.com/sponsors/d-fischer" }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-spawn": { @@ -3063,6 +1253,12 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -3091,63 +1287,115 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "license": "MIT", "engines": { - "node": ">= 12" + "node": ">= 14" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dev": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ms": "2.0.0" } }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "license": "MIT" }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "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/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -3172,35 +1420,23 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/devtools-protocol": { + "version": "0.0.1464554", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1464554.tgz", + "integrity": "sha512-CAoP3lYfwAGQTaAXYvA6JZR0fjGUb7qec1qf4mToyoH2TZgUFeIqYcjh6f9jNuhHfuZiEdH+PONHYrLhRQX6aw==", + "license": "BSD-3-Clause" }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", + "esutils": "^2.0.2" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.0.0" } }, "node_modules/dom-serializer": { @@ -3290,31 +1526,10 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, - "node_modules/electron-to-chromium": { - "version": "1.5.136", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.136.tgz", - "integrity": "sha512-kL4+wUTD7RSA5FHx5YwWtjDnEEkIIikFgWHR4P6fqjw1PPLlqYkxeOb++wAauAssat0YClCy8Y3C5SxgSkjibQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, "license": "MIT" }, "node_modules/encodeurl": { @@ -3339,6 +1554,15 @@ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -3351,11 +1575,19 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -3395,7 +1627,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3411,7 +1642,6 @@ "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" @@ -3424,20 +1654,186 @@ "license": "MIT" }, "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "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": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "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/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/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/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -3447,11 +1843,45 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "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==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -3466,56 +1896,6 @@ "node": ">= 0.6" } }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", @@ -3562,19 +1942,111 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/express/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/extract-zip/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/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-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, "node_modules/fast-json-stable-stringify": { @@ -3584,44 +2056,43 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "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/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "bser": "2.1.1" + "reusify": "^1.0.4" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "pend": "~1.2.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { @@ -3655,78 +2126,81 @@ "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "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": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "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.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "dev": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "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/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/formidable": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.2.tgz", - "integrity": "sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^2.0.0", - "once": "^1.4.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3776,21 +2250,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -3820,16 +2283,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", @@ -3844,18 +2297,57 @@ } }, "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-uri": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/get-uri/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/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3878,14 +2370,33 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gopd": { @@ -3900,21 +2411,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, - "license": "ISC" + "license": "MIT" }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-symbols": { @@ -3933,7 +2444,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -3957,23 +2467,24 @@ "node": ">= 0.4" } }, - "node_modules/hexoid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-2.0.0.tgz", - "integrity": "sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, + "node_modules/hls-parser": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/hls-parser/-/hls-parser-0.13.5.tgz", + "integrity": "sha512-UJyTCcNZwOdBmEJo86vViEpgtaUhxrgAsBb65+Lk6fjzyOfIDVF9Y0TyE0KJ2Gc5YHfHx7xevuj/RR0itP3vaA==", "license": "MIT" }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/htmlparser2": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", @@ -4009,16 +2520,78 @@ "node": ">= 0.8" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=10.17.0" + "node": ">= 14" } }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/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/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/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/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -4031,21 +2604,34 @@ "node": ">=0.10.0" } }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4079,6 +2665,19 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -4092,43 +2691,42 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, "license": "MIT" }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "binary-extensions": "^2.0.0" }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "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": ">=6" + "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-number": { @@ -4141,19 +2739,22 @@ "node": ">=0.12.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4161,843 +2762,168 @@ "dev": true, "license": "ISC" }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-extended": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-3.2.4.tgz", - "integrity": "sha512-lSEYhSmvXZG/7YXI7KO3LpiUiQ90gi5giwCJNDMMsX5a+/NZhdbQF2G4ALOBN+KcXVT3H6FPVPohAuMXooaLTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-diff": "^29.0.0", - "jest-get-type": "^29.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "jest": ">=27.2.5" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - } - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-junit": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-15.0.0.tgz", - "integrity": "sha512-Z5sVX0Ag3HZdMUnD5DFlG+1gciIFSy7yIVPhOdGUi8YJaI9iLvvBb530gtQL2CHmv0JJeiwRZenr0VrSR7frvg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, + "node_modules/jsdom/node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "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-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "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/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "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/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", - "bin": { - "json5": "lib/cli.js" + "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": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, "license": "MIT" }, "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "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": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true, - "license": "MIT" - }, - "node_modules/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/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" @@ -5006,27 +2932,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "license": "MIT" }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" } }, "node_modules/math-intrinsics": { @@ -5056,13 +2975,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -5072,20 +2984,6 @@ "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -5119,16 +3017,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5142,23 +3030,16 @@ "node": "*" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/natural-compare": { @@ -5177,56 +3058,101 @@ "node": ">= 0.6" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "license": "MIT", "engines": { - "node": ">=10.5.0" + "node": ">= 0.4.0" } }, "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "whatwg-url": "^5.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemon": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "url": "https://opencollective.com/nodemon" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "node_modules/nodemon/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "node_modules/nodemon/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, "node_modules/normalize-path": { "version": "3.0.0", @@ -5238,19 +3164,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -5263,6 +3176,12 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5300,29 +3219,61 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "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": { - "mimic-fn": "^2.1.0" + "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": ">=6" + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", + "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-limit": { + "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/p-locate/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==", @@ -5338,41 +3289,82 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/p-locate/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", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/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/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { "node": ">=6" } @@ -5381,7 +3373,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -5397,12 +3388,12 @@ } }, "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", "dependencies": { - "entities": "^4.5.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -5433,6 +3424,18 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -5472,24 +3475,22 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, "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": { @@ -5505,69 +3506,23 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "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": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" + "node": ">=0.4.0" } }, "node_modules/proxy-addr": { @@ -5583,21 +3538,139 @@ "node": ">= 0.10" } }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" + "node_modules/proxy-agent": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.6", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.1.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } - ], + } + }, + "node_modules/proxy-agent/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/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer": { + "version": "24.11.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-24.11.0.tgz", + "integrity": "sha512-7XFpexeYIMen/pfGiDjUpIV7BB9EuVQBtXeQ0cUOmVJTkAuQD3oPHVU7iYeA/mrIJyk79sfOmT20a6SEDwGTLQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.10.5", + "chromium-bidi": "5.1.0", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1464554", + "puppeteer-core": "24.11.0", + "typed-query-selector": "^2.12.0" + }, + "bin": { + "puppeteer": "lib/cjs/puppeteer/node/cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core": { + "version": "24.11.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-24.11.0.tgz", + "integrity": "sha512-ncLty0wRjCX67UxzXemmD1mOxb6y1Xzrx1nym8SAQ6cYrcypOVf77CfcZru6P+EiMA9gNDeQNscowKSE9xvhMw==", + "license": "Apache-2.0", + "dependencies": { + "@puppeteer/browsers": "2.10.5", + "chromium-bidi": "5.1.0", + "debug": "^4.4.1", + "devtools-protocol": "0.0.1464554", + "typed-query-selector": "^2.12.0", + "ws": "^8.18.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/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/qs": { @@ -5615,6 +3688,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -5625,189 +3719,107 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", - "iconv-lite": "0.4.24", + "iconv-lite": "0.6.3", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" + "node": ">=8.10.0" } }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "glob": "^7.1.3" }, "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "license": "MIT" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { @@ -5836,14 +3848,16 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "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, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" } }, "node_modules/send": { @@ -5870,21 +3884,6 @@ "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -5894,6 +3893,12 @@ "node": ">= 0.8" } }, + "node_modules/send/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/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", @@ -6010,71 +4015,109 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", + "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/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/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "license": "BSD-3-Clause", + "optional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "license": "BSD-3-Clause" }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -6084,40 +4127,30 @@ "node": ">= 0.8" } }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, + "node_modules/streamx": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", + "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "license": "MIT", "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" }, - "engines": { - "node": ">=10" + "optionalDependencies": { + "bare-events": "^2.2.0" } }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/string-similarity": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", + "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "ISC" }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6126,26 +4159,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -6159,101 +4172,83 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/superagent": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", - "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^3.5.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertest": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.0.tgz", - "integrity": "sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "methods": "^1.1.2", - "superagent": "^9.0.1" - }, - "engines": { - "node": ">=14.18.0" - } - }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tar-fs": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.10.tgz", + "integrity": "sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==", "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "pump": "^3.0.0", + "tar-stream": "^3.1.5" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT" + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -6277,20 +4272,57 @@ "node": ">=0.6" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ttl-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ttl-cache/-/ttl-cache-1.0.2.tgz", + "integrity": "sha512-EALdEXrLnzZ17/I7bZWQ006kj09oZ/3WVe1+12ANe38Ef8uv/flDH+MTrINIir8GTu8O6jRj+9Jz7yoDi4ADPQ==", + "license": "CC0" + }, + "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": ">=4" + "node": ">= 0.8.0" } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -6313,65 +4345,34 @@ "node": ">= 0.6" } }, + "node_modules/typed-query-selector": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz", + "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==", + "license": "MIT" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, "node_modules/undici": { - "version": "6.21.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", - "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "license": "MIT", "engines": { "node": ">=18.17" } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "dev": true, + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", + "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } + "optional": true }, "node_modules/unpipe": { "version": "1.0.0", @@ -6382,35 +4383,14 @@ "node": ">= 0.8" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "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, - "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", + "license": "BSD-2-Clause", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "punycode": "^2.1.0" } }, "node_modules/utils-merge": { @@ -6422,31 +4402,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -6456,25 +4411,41 @@ "node": ">= 0.8" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/vm2": { + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", + "deprecated": "The library contains critical security issues and should not be used for production! The maintenance of the project has been discontinued. Consider migrating your code to isolated-vm.", + "license": "MIT", "dependencies": { - "makeerror": "1.0.12" + "acorn": "^8.7.0", + "acorn-walk": "^8.2.0" + }, + "bin": { + "vm2": "bin/vm2" + }, + "engines": { + "node": ">=6.0" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=18" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -6496,6 +4467,16 @@ "node": ">=18" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -6512,11 +4493,20 @@ "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/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -6530,56 +4520,84 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "license": "MIT" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -6598,24 +4616,64 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/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, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "license": "MIT", + "engines": { + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.25.67", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", + "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/package.json b/package.json index d83b096..bb82f3e 100644 --- a/package.json +++ b/package.json @@ -1,20 +1,41 @@ { "name": "tmdb-embed-api", "version": "1.0.0", - "description": "An api to get embed sources using tmdbid.", - "license": "ISC", - "author": "Inside4ndroid Studios", - "type": "module", - "main": "index.js", + "description": "Standalone streaming embed source aggregation API (TMDB ID in, streams out)", + "main": "apiServer.js", "scripts": { - "start": "node --watch index.js" + "start": "node apiServer.js", + "start:api": "node --watch apiServer.js", + "dev:api": "nodemon --ignore providers/.cache --ignore **/tmdb-embed-showbox-cache apiServer.js", + "lint": "eslint . --ext .js" }, "dependencies": { + "aromanize": "^0.1.5", + "axios": "^1.9.0", + "axios-cookiejar-support": "^6.0.2", + "body-parser": "^2.2.0", "cheerio": "^1.0.0", "cors": "^2.8.5", - "dotenv": "^16.4.7", - "express": "^4.18.2", - "fetch": "^1.1.0", - "node-fetch": "^3.3.2" + "crypto-js": "^4.2.0", + "dotenv": "^16.5.0", + "express": "^4.21.2", + "form-data": "^4.0.3", + "hls-parser": "^0.13.5", + "jsdom": "^26.1.0", + "node-fetch": "^2.7.0", + "p-limit": "^6.2.0", + "puppeteer": "^24.11.0", + "string-similarity": "^4.0.4", + "tough-cookie": "^5.1.2", + "ttl-cache": "^1.0.2", + "vm2": "^3.9.19", + "yargs": "^17.7.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "devDependencies": { + "nodemon": "^3.1.10", + "eslint": "^8.57.0" } } diff --git a/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1263256_movie.json b/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1263256_movie.json new file mode 100644 index 0000000..46714b7 --- /dev/null +++ b/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1263256_movie.json @@ -0,0 +1,14 @@ +{ + "data": [ + "https://hubcloud.one/drive/eeltgk7tefggdkw", + "https://hubdrive.space/file/2839373447", + "https://hubcloud.one/drive/zm1uzufz8wh1zmv", + "https://hubdrive.space/file/6441436585", + "https://hubcloud.one/drive/dm1sbdubufkkdsv", + "https://hubdrive.space/file/3875373190", + "https://hubcloud.one/drive/wev1xt17dypotb1", + "https://hubdrive.space/file/4216265302", + "https://hubcloud.one/drive/mrhza1jqmajrjko", + "https://hubdrive.space/file/2736804525" + ] +} \ No newline at end of file diff --git a/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1399_tv_s1e1.json b/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1399_tv_s1e1.json new file mode 100644 index 0000000..ee844da --- /dev/null +++ b/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_1399_tv_s1e1.json @@ -0,0 +1,14 @@ +{ + "data": [ + "https://hubcloud.one/drive/2rc17eosl11jalt", + "https://hubdrive.space/file/30320495116", + "https://hubcloud.one/drive/lb82vul8vwzw8lz", + "https://hubdrive.space/file/24320017865", + "https://hubcloud.one/drive/ls4j4srjsh228ks", + "https://hubdrive.space/file/8303893568", + "https://hubcloud.one/drive/cds5rdggp8pwxds", + "https://hubdrive.space/file/8032803119", + "https://hubcloud.one/drive/gb655ffb5nmzg3g", + "https://hubdrive.space/file/2836399263" + ] +} \ No newline at end of file diff --git a/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_293660_movie.json b/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_293660_movie.json new file mode 100644 index 0000000..d923fc8 --- /dev/null +++ b/providers/.cache/4khdhub/4khdhub_resolved_urls_v3_293660_movie.json @@ -0,0 +1,20 @@ +{ + "data": [ + "https://hubdrive.space/file/5855904942", + "https://hubdrive.space/file/5855904942", + "https://hubdrive.space/file/27692865336", + "https://hubdrive.space/file/27692865336", + "https://hubdrive.space/file/6521988586", + "https://hubdrive.space/file/6521988586", + "https://hubdrive.space/file/9974112091", + "https://hubdrive.space/file/9974112091", + "https://hubdrive.space/file/8806133211", + "https://hubdrive.space/file/8806133211", + "https://hubdrive.space/file/6167785635", + "https://hubdrive.space/file/6167785635", + "https://hubdrive.space/file/10054935010", + "https://hubdrive.space/file/10054935010", + "https://hubdrive.space/file/4750964205", + "https://hubdrive.space/file/4750964205" + ] +} \ No newline at end of file diff --git a/providers/.cache/dramadrip/dramadrip_final_v13_1263256_movie.json b/providers/.cache/dramadrip/dramadrip_final_v13_1263256_movie.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/providers/.cache/dramadrip/dramadrip_final_v13_1263256_movie.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/providers/.cache/moviesdrive/tmdb_movie_1263256.json b/providers/.cache/moviesdrive/tmdb_movie_1263256.json new file mode 100644 index 0000000..7fff542 --- /dev/null +++ b/providers/.cache/moviesdrive/tmdb_movie_1263256.json @@ -0,0 +1,3 @@ +{ + "data": null +} \ No newline at end of file diff --git a/providers/.cache/moviesmod/moviesmod_final_v13_1263256_movie.json b/providers/.cache/moviesmod/moviesmod_final_v13_1263256_movie.json new file mode 100644 index 0000000..184675d --- /dev/null +++ b/providers/.cache/moviesmod/moviesmod_final_v13_1263256_movie.json @@ -0,0 +1,64 @@ +{ + "data": [ + { + "quality": "720p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtlZnl5UDZCUGpyd1B0aW1WK01GOERRK0V6MDJ5MFNGbGh1Q1h4Y3VYckNXSDZ2MlIxMDVYMnRyeDMydFBNdWNEajRSbDZXMWlzRjNMaVhMdnhDZkVqK1lkeEFrTFVKcnpBemFRSUJ4NStWTE51aHJIM1pOSUlMK3NxMDMwcUVpZXlPR0dPL2tzQmlWUDFmNkhGR0RSbg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Z1JOMXJJbTVlVFFIdXcvQ2xRMFZ5ZEtGekMrZk1ISkY1b3d4MUhray8yM2xPVHRGK00zTWtmekhYcjJRQXBLYw==" + }, + { + "server": "🚀 Google Drive (Server 2)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpaWllxaHVJQ3JtNmZUb1cyMy92NkpPRWdIekdtNjNwTDJRTEh0Z3Mva1JYTUthaStDUVp3UzlRa0hqVVlyQjZWdExtZG1wTitoMmRzVXpyWHZRZ0tPaFpVR3lQcmFzUVBSb2hkdE1wWlB6d0s5ZGsyb2UwOCtGRWZKQS9wKzhaZVRrTjBCendhZVV3YksrOGNXZkdJdg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=UkZYTyswOUlYWnRkd3c4UFg5TWEyNkxMRXdFakZNL05CMjYxcElpOGxOZWxJUEVMQXo4b2V6alh0RWJTemJEcg==" + } + ] + }, + { + "quality": "1080p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtYaWxrRmU5aEVETnNSaE0veXJXN1VnYXJjZTVyQ2hVNUtzbk85MDI0OC9Edm9EUWVpWHNMYU0rRXp0ZGpUWTdFZG5VQzR6T0x3UmgvUEY5R1lFc2lrRFkxK3B3N1A1V0htN3h3eDJyaTY5REJSK1RjVm00MkNnRk9XQW12eCtRWE5seWxFZC9uelNXWUNOSXpBbllkaw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=QXhGREliQjNpZitEWFJZY01qdXc4cmt4SnRMNGlGcit0eGNkbDNySHUybnVWZjIycElLZ0VTNGdMV3A1S1lKVw==" + }, + { + "server": "🚀 Google Drive (Server 2)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZElqd1lDTmJPOWRrK2tMc0ZTMENiQTFtRkZkUVBZVjArQ1d4NFhvdzhNcnhsalBHbm82dnVTY3ppS1Jla3RWTHVxMmxuemhzWUdEczdnMElYS3lEN1Y4WEp2bXdxb3FndWFJKzVHRWE1Y1ljR3dkamZQR0U4czV3Y0ZKcUVvSFVRVVdIQ1RITnBtTGIvelVIeXljQWd5Sg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=ZXV0eEdJYlhJcFhad0FSeDQxWFRGajZGZ3NDZG9BQTQ1c0JvWVUyMnFBMjJIam5zdUE4UnE2dlIwRjVVYVBERg==" + } + ] + }, + { + "quality": "720p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExIOWo1MEtyUTN4L3dUeW8wbzc3VUFXODNBRFZSaFBpUHNwdTZ4aEF2YVJUdVlodzI0Q0pFU1hnQ0ZaUUFHOVNsaEsrWFI0RkY0SFFhYTEyWjFBdFNwNGlHczdNaXpEOS9qeXdVT2dsMU10anpscjVnN21IdmpCcVoyY2x4djJzVzZXb3ZkM0FxM2Q1SXdvR0o5Q3cvNg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=K1U1RnhlTVdFc25JakJLVFZlTzlaN0w3V2VFRnVlelBLQWRaOVVpVXNBZWFwWksvREw0QmxWQjFCS0pDYWlXOQ==" + }, + { + "server": "🚀 Google Drive (Server 2)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExqUmh2aXFIeEJDWjQwZkpVVUpZWWZUQzZzeVh4L3VMblgyR1F4eGJjSDc1OVBRQ2VxeHZyb21acHh5SzNvRkhneXBPTmdhSGgvTEh4QnNKMlJoVUJSUnpvempYdExaZUZkcWQ5VnN2TXFqRzJwYXRvSDF4bk1iTXZ1UlZ0R0JtQjhXYmNEQVE0emhmVlFOR1NLODh1eA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=aExxTjRHZk4wY1ZjNDJ2VHhzcjdrcVBweHBJbWhGNitYN1ZlUGR4Z0gxalR1T2orZFBFdTRLMnRuUndiVE5IQg==" + } + ] + }, + { + "quality": "1080p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtPNXdWSEEvK1RsbzRDdDJlY0xTd0xlY1FDbHJhK0RjdUlWKzlmZkl6dG1IRWFkTStReXlSUGtXNHhGWG5jZEJDc2ZnUytzK281d3E4VXJVcFdNN0lxZVVjK2F4Y2hhVDAvL2pJRXVHNGMybk5tQW1uSkh5d2p5VlFqTDdaWGdLcUwzMGF6aFNibjkwZTVHd2l5eXRPTg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Y08zbk11amZCd3NacmxONVJZYlNNN3FIaklVU0lSSXp6VWhVUTkxVzlpWEJWNVFSOXQ5MTFUWmQvUFNCSzQ0WA==" + }, + { + "server": "🚀 Google Drive (Server 2)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEozOWlUeUxnd2JuT1l5WHNvQlNVUWpNeGNzTEplSExmN2R4ZDNQVm55Y243VHFicHBVREVZUHQraVZJUmxLeVFYVFArb0Y0ejc2MEUzRE1sL2tsRStKdUNwMW1GSEdkZ0ZrR09Bdzl0ZzN5M3ErU1RCTGdFV1F5UVNiOEtqRVlRcmNNckFZQ0xSbW5vbTRMdW1TOVg5UQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Vk5abDBBaEhiaE9rNE8xTHNwR1BZQVZZUTJ0Qjc2bzFzdHVhVUV5VWdPVnNHOWl0ek40S1FxZ1U3YmUwWTdVNg==" + } + ] + } + ] +} \ No newline at end of file diff --git a/providers/.cache/moviesmod/moviesmod_final_v13_1399_tv_s1.json b/providers/.cache/moviesmod/moviesmod_final_v13_1399_tv_s1.json new file mode 100644 index 0000000..ee41a43 --- /dev/null +++ b/providers/.cache/moviesmod/moviesmod_final_v13_1399_tv_s1.json @@ -0,0 +1,224 @@ +{ + "data": [ + { + "quality": "Season 1 {Hindi-English} 720p 10Bit Esubs [340MB] - Episode Links", + "driveseedRedirectLinks": [ + { + "server": "Episode 1", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEw0Y0tZeDhyUmtkbTFtM0tEay90aGM0TmVJNFdxTGk2MVpORURBQUNNaHRKOGJKZlRkdXNnZzMwb1JPaXRrN0VoV1hReFZyNzNUWFBsQ2R6aGkzKy80VXloNGtQZmllUkhMbGdmcXd0Y01LbVRPd1Foc283eFhQL1VKR3pocGZWZEp0bUJTM1VYRzNGTzYxU0VSd0hwbg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=UnRjNmRSQ3pLV29ONnRUS0kvYmY3RjV6OTRGUCtpbzRLWE81ejgvM0hrYUMzMjM0cEpnSEh3OGVUTGxXY3BrRQ==" + }, + { + "server": "Episode 2", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZElRaTlRd1loWlRLNFhDL3UxeEZxRFl5VW93a3h4eTVyYWNRUFJMYnJoTnFzbHZpQ2hFejZEc1N3RHJYd05UODlnN29MZURUN2tRTTdUQVg2cEZGcVBuUHJLNEpPaVpzREd6d0ZyNzBHRzFrc3F0aktLYW1zaEhTM3FaSnRBTjF6b2x0aU5NU2FMdU40aTA0dkxMdzVQTg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=bkd6amRlRWE0UlhxV0dqRlo4b1B3TmVCZklXTWRMWnNRbXlDYWdFTnJYWHFIQ2lqOWl5K0pCT2pMaWdXQzdpbw==" + }, + { + "server": "Episode 3", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtLYmtEYjdWVllPYjZLMm1TMXNZaFl2WXdKUk1kbkR5d0Z3Ylo3TTRNSEo4VWxrZnFQVEMvTzduTDhjNG1ITm4zTVdHc3pzdlhMVFVOOHpOSnNWLzMyOHg0SDdFNi9nSThJaFczRkFMV21NVWZ6Nk0ybUNvejQxanF2OWZZUHhBREY2cWNVcCtyMm1XeDBBdFpYWFFlRQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=azkzOHJGMHR2T2YzRUhwWU8raUJuam9MVzZ2UWNXdUNkVVNMdjgrN3FBM1JEVkhJZFlZajcrd1JERENQQ3pCRA==" + }, + { + "server": "Episode 4", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEw5L1JZVWZxK09QMWtxbEFWU2ppdUx2SmhKQVFrK0FNNEY0NkJsUDJjZlprQTI3eTlBRW5kaEpQSlN1Vks5RzRUMFBVL0FvQ1hJa2J2R2JIV2ovYUNNVkdZYm9hQjNPY2hLTVZyZml4SUQ0YmROUDFOZm5HbVc1SWpvaXRPZHM0d1ZFMDFUOFBPR0VGRW5qdy9RbTNDSw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=QVdhWE5rVkhmV3B3dHJKTUQzNEd2VDM3cVJNMW9pN05qQUNDTnJ3ZGR2WmVKR2FVS25heUlob0ZOSnlUUS9TUA==" + }, + { + "server": "Episode 5", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExsVjhoaC83WDZCSDZvUlo2bEtOOTNmUmNzUjlmaHlKS01GK2VmcHVTOGQ5RUlEOFhLTnBtdk9LTHRmSTJjU3NLZHdyZEg0a0Z1ZjFCUGxHbzJ2WGo5TDhmNnhyUTR4WkR4MG9hc3EyOTZadkYzN00xYXRqTGt5YnQrZGFVTUdkWktxV3JJcDdubGpoSVN0SkZzdWZ3dQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Qy9GNFN3U2loNWsyRFVGUUh3RnpmbSs1UURJTVllOEJzNDdwOVhHcUxUci9rZWdOS1JIS0xmVGw5L3QxWGZzSg==" + }, + { + "server": "Episode 6", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtGTjA3WlR0MUwvODZqckhBQWFOVUNCUWtQaUVZbzFxTmx6UWpOUFJxMnVCcitiWEtpdGtiSEJSNW5iUG5XSkxwWFZ6a1g2b3BkbFJmN1JYblIweW1xY2R6ZjEvSW9xRU5xZnZTQlRpS3lnU0d1NThhdTZhMFAvUGdYQzl0TWprSkRLa1RwTzVJd1N0N1p0NkhLdkp0cQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=WjhBd0J6a09PUWVYeDlaRG5yNU5qcE5KM09ITks2d2NqTkM1UGxtR0c2T2VBTEhnanByRVdBanN0MzJyNDk4UQ==" + }, + { + "server": "Episode 7", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExRVlYyVkpzdWxBWUo3bzBzcWs5d3R3dHNXOWxqUHVlWFdkTlgxSGhaUS9FU1E4NXdCS3laSVlSZUlQTDBFWkxnMGkxOUkzdklmellSR2RyTk9uSXpTWk0vWC9jYkVHdFlQOThjZUs5ckNTNGRraGlFYnRmQ3FhcDdIdEF4ZFdEdjQ0MHJPTytZVUFLRTZVdkhMb2ZUUQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=ZjJqSGRoWUtpMW56VlhwTUpzWFVWSTdMazRDSnZJQlQzb0p6dXdTbU1xc2ZrK0FxMzNHSUQzS0hIMDhuS1NUOQ==" + }, + { + "server": "Episode 8", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEkzdVZ2UWpRV01CWWJhczc1VUZiM1A0aWlGSHNPbzFnNmNudkdnUXU2QVVUUTBDUGJjTEJIQ2tMSHAzeExiR2dEbXVYaWNZdWtuUFVFUklFbWFLeWNNb2VDRXJ3aVdubmN0UE14bG5NbTV5TkF3VWtWS2RFU2s3WkszRVJpVEVuY055VjNtNWJLVzhSUHV4U1BDMVJnVQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Tng3MmRaUWFERkFaR3ZnR0ZaSzJDaklkMVZudWFFSkE2TGxEREpDYVFUV2J2M1FpNjc1ZHVQajJtT21QZ2t1TA==" + }, + { + "server": "Episode 9", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEp6eS9jcnJib1hHeGRwY0RYbHJoMGhSMTlDNUZvSSt0RUlvK2tjRloraWt4Mm5MYUl1MktxbHU5Ry9pS0FuL21TYkphTnZEaXJGdkx6RG9YR3VwaVVpT2g3UkFhUTZjS1Z1eGZaLzhiWjBtUmlYeWFQL1JWbUMwQmdBRnRkYkRhanhqSjJ0aXNJUTRGQy9LRmk4a3V6WA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=bDZiZXNON0lNTjRCS0tDbDRlb1dRRTk5NCt1V2ZUV1piNGZ3eExZQVFPRVYweEVkWHMzOEJUUGxlOXRLa0RpbA==" + }, + { + "server": "Episode 10", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpFZ1Q4elA2S2x2aTZzQ2tvNXBiMVBHclRJbFMraTBPRHVjQUt0SU8raEg2RWlpZ25leFhlQnNialIyQUJWWWlQMEtWUFJsdTM0Z2NmNGJWOGNLcXRDSzhKNlNUa01WK1grTTRBaGdVT1I2VTE3UEZ6ZDVLVjFkVjdVZFZQU1AxaUtqdVRnNnhNT2tZL1JMMExTcEY0Kw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=OWRIYzFabCtGM1gzQ3RPRlJreFo5Ykt4MHVKeFYwTW5SRndaQ3NqOEg0UzRiQ2FDZlJ0d0ZEcDA3cTQxSHZzNA==" + } + ] + }, + { + "quality": "Season 1 {Hindi-English} 720p x264 Esubs [500MB] - Episode Links", + "driveseedRedirectLinks": [ + { + "server": "Episode 1", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZElNMHVBSFVUOGhqOUdXMGtDeDRzeVMrSHlPblJSSFlEMi9ZY2R3OFNXNGJRRk1MelNBRTR6NGlPU2ozVXd4cFFRaFM1MlV4QXVlTWhTK2F2akZNaTBoYmc2ZFRoRmYvcnJDdUJZdDY2RGlFZFM5ZzdRNmF5WUZRU0xVYjNTS1dIUWZ1S1JXcS8rQXBMTGNnVTRmSE9MMg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=c2RhVDROL3JOZG5GV3RoWndtbi9RMHFnN1YrSDF6eUtuSlA4WWR5ZXdOV0pIaGcvNC9BTWN4cURMSTlRRzR4WA==" + }, + { + "server": "Episode 2", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZElzOHFpOW9YeGlEenVtQkpZUjhkaGFobmhVYnZRLzJDRTQ5SHNBRlowTis1QnpTOXFub1E3ZHE5cGpoUFhDVU1hbHNCbms5YXprWTh0N05UR09vOUN3TWI2WXFGUGh3SkdGUUFzSURPZlFMU3lvbk9LRW91T0xKZ1U5SGMyOUxsSFkySmlyZzBSYVBkbHBiS2dsblpMLw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=WjJOc2dvVG8yTTlocmRzTXdEZ3NqWTNQa1hOd1ZnRFU1RnV5aWRpR3djaXFZK1IwVXYzYWxLa3lBUDRpSmkrQQ==" + }, + { + "server": "Episode 3", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEp3RHNXZUxnK3l2VVVoL2hpLzdBckpCRTF2b1k2ZldidEhJMlpGc213Q0dUb3BIUlMwSW9ibmFtalBKSk9PQXJSRWZ3L3E3Yk1QdVA3NGloN21KVWo2L3hIaWV3QStmWGk3c0tWMS9neVRTU2swalV1bHhFM0ROeVFudTR4T00wSWVPNmpjR0dQK0U5NFl3SWNGRHZHRA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=YXN0eGVCaVRhL0hndU1JVTFqa3NRQlR0UE9YdEdEY1ZMOGxzRG8wbjQybldkWFc2MkR5MjR3WE9XS3QzZ2tZUA==" + }, + { + "server": "Episode 4", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtlSkVSTnJrbWVpZU9GK0lYTXVwV0xBMEtPaU9FTFNwaFJVNlBYWG4zMzYxazRqSkV2c2I2Q2FaSnBWVXNEZFRjMEg5bnVubEFDbnk3VUhxVXh6Sk9lWWhWejFvWmlUeXhrNjBXZ24vcU5pNVdMZ0JvNDZvUHZMS0hid3JYOVJYSENzem9BVUI0dHdCc2RpVjZUTXB1Rg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Q3IydEdlS0NXbUdkeSttRXdqWk9aZFZGcFVpME9wQXVFMTRKTGpKci9qR2lIKzVOSmlzNHV2VUF1NFF1ekJKZA==" + }, + { + "server": "Episode 5", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtZMi8rMURQS1IydSs2UzRmZzBxbTV6cUR5NGxXN0pxVzFzZHhteTN4dG92MUlpZlU0dFBOTTgyRGRiSS9wZStzdmR4SngyVHNkV3kwZkVuS1phTDNBNzZJR2VRQWJ4NmM5MkxISHdvRkZXd3FwcVF6NjhJY2RwR0FRMzlsb2c4WkFaN1BLcUFKcldwVFVnNmpvVDF1cw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=OWhTdjhaaS9uU2hSSzJTc2V1c0lGQmtFZHZ6eHRjKzFLQmhNNmlUSFJtVEc5dGVEdEFYQkF2aE1weFQrNTU5Rw==" + }, + { + "server": "Episode 6", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExFVkQ1Wm5Uc3pRcElVTW9rUE5IVXNHU3Ura0dXRVUzMHNrOWYreFU1WGRxd2wxd1RYYnJ5VnJadjRlM2tPcFVYdmE2dEVkZTRpU1h2TGVBVWhJQ1ZHaDZ4WnNDbVBFNVliWVNwQytPeGF5OEZLWndaZFNTbm1ORFVhZzY1NjhpZitIZ2NLZmYweVFwUnFGTyt4dkFaSA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=TTlaUm9vQXRjMVg2SXprZlFISDRrVDBpdzNwTUxyeG5RekVoWUp3Y3FGK214SFdTVTdkTzJBMDFHMU8xQ1VXdw==" + }, + { + "server": "Episode 7", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEplNERKdG0wYk1xSzRGdVY2cFNQYmN1RTJCTU5BMXUrdFcvN3NsNG9ieWtUMjZaU2FDMytPZWp5V0lkeTBzZkhiZVhaRitwOVB5RWl2R3ZDT3BNTGNBOHFLSzZSN2c0ZmkrVWpQZlhVTWlncXBWVHE5MlpFMmI2a3BKSWhTVVdYeHYzRzJpdllXM0tHU2xRQ2tkb2VqWA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=SFNGTGpTZE1wTU1DSUwrK3FiOStyU2pzV1V2MWY5NGNyVmVnQ1FRZWRmSGxuQUFVSElGNGVXbU9NNHdTR3hRUw==" + }, + { + "server": "Episode 8", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEs2SHp3TDFJcmxUQjBUNGlNYUorck5VMGdqbFlhZFhVRHk3YlRYdlRaVXJWZWtMenEybW8xWU1oNjgrNmJZNXp1cUVDd1BTVjBkbDJKZzh5bzgzamVITGF5Y0szamJwbW9paVYvSTA4OVpWVnV1V2dTZHpoVFJCbWg3R3UrUnd5VWx6VXhOYk95SEE1MXhPMHBnT2xVcQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=SmFzM2NEaTBkSjBBNW1MQkJEYlArdUJSUldGYWhxUlJoL1hQOVNPNUR2NnkycTl2aXhSN3FrMGhDcVJZTW4vVg==" + }, + { + "server": "Episode 9", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEl3TVBneUl4Nnc4MDIvQUFCSWk5R1RzSklPS2hjMFZXVncyZGFMYUlZNEFZQzhTNkxFVVhzNDFKREVkQ01TaGJGZWlMNEhZY21vMUVNN0U5cVpicXpaV0g3RG1rUi93clhWcmlubWgvWlBLRGJQdUpOOUlYUWhXMkFubU9OMjRBVk9lMnp2YUtBQlNobDRNWVdBOTdmRQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=djU0OCtyWkdrMC9vRmNnbHdGektUVG5PdUlEaXNKUG9jL0JrV0t3ZzZnUklKUWQ2M3pkYXAxOS9oaU9tYkpmRQ==" + }, + { + "server": "Episode 10", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExySXZEUkJUaktxSWlWd3BXOHp1d0tvMlZGekxHa2ZCK3lpYkpzTVVEc2FKcTZjbXl6L2ljaGlCNThSRzVFUEZnUmg5ejd0cm1rZTh4QkRSVmNJd2hVS0wwRW9vYmJicXNVamZRTldDU0V0VGZBTjhmUzhVUm85TnNhbTcrQTRWalVBdUpWbkIwSnhmOHRWTzl4ZVN1bA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=aEZoSFlxZHRiK0F0OWtCSmxDOVRZdFE1VnlwaUZnOWozYUg2WDNNd0lzcnJ4bjNzVlY5akZ6TmI2NmNNNURrNw==" + } + ] + }, + { + "quality": "Season 1 {Hindi-English} 1080p 10Bit Esubs [970MB] - Episode Links", + "driveseedRedirectLinks": [ + { + "server": "Episode 1", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEptWXBMMVZiYzVaZFYwYXp5emZBUjlkcmp5eG9PT1hYQjR2czJ1ME5MVmRyK2JtT0ZXci9uY1NVVEIvTFZ0WjVtUTR3ZzRqSFgwS3hhaWhseHpYWVFzOXpENS9ySlJ3U3AwbkRQdGR5cTVML1p0dzRVcys1V2oxUllZNU1CUXgxN3QxeUgvN01PYjNTN0JncE1nMmhxTA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=VlFVOVp3RThlc1phanBHdURQdm9HVVo2ZytmT1JqVGxkR0lqUS9ZUXBaLzE3RlhaL2JNbkxQcVV4SkJvNWY2dQ==" + }, + { + "server": "Episode 2", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExrc3ZYTXpxNWJoRFJFSWVjTFFTWXB4TWdaTUlhbFJUTW5MVEJhSm1oWDA5SmJLNGhxcjNnbFlHS1o3ZUZZVlE1U1BGaC9CWUlOTmhyWjZYazNsOHZudHkvQTBmNzFXd2NWcnpaUHlrQy96RWYrQ1dBVUVJdmtXelRnNis2ZFM3ZFI5N1FTdVd6VnlPZUF3Znp4ckZJaA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=czB5SG9hL0ZLaXY4dEJMdy9yQVZvckZTUmNaOU5MWW0yZjgxR3BZeUpIWUFxWHhNOGFwcDU0K1ZJYVdQL0ViUg==" + }, + { + "server": "Episode 3", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExFWGtXbkhCbUFBN1Z1ZEZJRXEvQ1BNVUZuZkczWXFVVjVFWjBoc3FqTDlrVklPT0VMNkRTbGpOenA2K3pzTWV2cnpqeUNBb2hsT0FvVmJmZDlSdFYxZkhaZGhPTldVakpBVzlQeXJsVTRMWXZDaHJIdzU2N3RPMDV5M1ZDaCtGQkFneE56QWp4Sk5QWndBUDY1QmZ6Zw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=K1VYdWloUnluSThFeFJiQkxkWS85VFJvT1JkMyt1MUNDYUZTUkthYXdzMDdDUS83WEZ3VXdiOU9SakRTODg0OQ==" + }, + { + "server": "Episode 4", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtlV0Z0ejRaQS9vT0dwMWNGZzhQR2RlSnR2Y09PQy9BTlc3RGVSMjUwMEVJT0lVV2oremZsV0JSd0s1SThqTFJIbEk0SERxM2pDQUZTTEV5R3dsVXk0WnNUbXIrNHl5YmdhS00yRWJRSUpnbDllUzRDWVlZalRjcEZZcGd3UmdvRitabnNTcHlZVWJBZWtTYzlTcjNxMQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=dXZEZFVPeXNnbzkzNjJPMFM5K1dkbGZGNXY5RzZZODYrRTlsZ2lCYzl5UkhWRTZXYTlBbjYvV0RiQUFLNFhoUA==" + }, + { + "server": "Episode 5", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEsrVkd1SkIyNnBnTVp2ZEJTcGJTMGNLem1Ja0JuMHlDUHQ1QTJYa20zVWdwL0I4VFhkaVNEdWNDZ2l2RkphWG1OQmYrWmhnRVhVL0V0RDBNRHZhNFNyU0JqWlV6K1FiMmxFVCs5N2p2YlV4eEh2RHUra0lrOGtkY3hRL1k2Sm1qZmlxRkROWEJ5cWw5bVMzYjMrbWt0Yw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=TUNyZGxZb1NRN3lseTZGRjFFRnhuY0dLUEhNL3VBN0txMElqVWF3eDJrS3ZXUy9GUHIxTXB6ZUduRlB5eHRITQ==" + }, + { + "server": "Episode 6", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEwxdklkdSttMFBENTBOTGlkOHE2Qm5zbU1VUlM1WFFqSnB6NkRRd2xTY2F2WVpaNGkzY0xzelZ1Wk9RNXZRTUR0MTJWWDRCZm82bUd2T1RDUllzZzcxNER0cXQyTzlaTlhNWmVCaENhcnRqeDRCM01rbU5UdmpweVl4cnVuWWFjK3NncnBlVlRiTHEvbHZYL3JzSTEwaQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=bzJpL3ptZ1V3UTJEMHRrcGJqVlVEeDJOdFp6S2pGY3VFSjd6ZUNXSmZKT0N5L1pGZFFkMGtnbW0vZlRsN2swbg==" + }, + { + "server": "Episode 7", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZElVS0FUQWdMcm5hVTE4Njh5NlVBMTFzMjJxcEsya0ZzT1pRMkZ6N092bWZUbTg5UHJPV1pPdm9YQ0tpNnNJNldnU01BOWppaUdTaW5zWVhQaU9qMXFiMVVISzZZNG8rTzY3WjI4Y2JQZStudzRGa3MxSmtKbWJXRTg0dmp2M0NENTNJaGtYZlUvNzhNemt2RFFsTEhlKw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=S213TDNGWVduQzE5SnVvS3Y2VWtLeWlkTmpNMlEzMUswb3NiQ1ZUL3h2RGorcXNmQm0xTjBWRzJwSTdxVWkzVQ==" + }, + { + "server": "Episode 8", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEl4bG05d2IzR05OLzNhY3VXYjVwL2xtZWNvanhmYVVCVk9mcklVdi96RW5xUW8wODMwZ1YwOEJibjgwaVZreU1ndGgxbzhJUUF4TTNXN2kvRVR5Sm9kY0VDdTlhenp0OGk5M1d1UzhhQTRhWHRNOUo0djNiQzFzNDExMXRuL05zb1Q2Y3ZhckJmcTV6QmhqOGxDRkUvOA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=SmJudHFnUjBpTnFUUjhDYWZuaU4vSXBrN2xzUUYyb0ZiN3ZTeGlTS1N4UzF4Q0xLc2VHK1FoK1ZGSkQ5dXU5TQ==" + }, + { + "server": "Episode 9", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEx1akRqKzRTOXIzNUVzbE1VVEtNSGt4OVJDV0xnTTkyVlo0S09udFcrbmU0cko4R1NWM2hGWmV6UXRvV01lQ3hxN1V3L3VKY3Q3YlMxazRZRHBNRSs4Y1RRQ2owZ1VjelJESGp3WXRiRGdmcGVOc21YVlhuT21QQW94MFhONy9KWTcyVnVtNnExTUlKTHlKNlQ0d1NIUQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=dHNReW9XQTM2emQra05ET3FZbmFrNEN4RzloUkdxQW9sYW16K0NTU2MvTWg2VUxpZTBnYTZNYW92bmdEZmtEdA==" + }, + { + "server": "Episode 10", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtpYTJKdlJ3c1F4R3grd1FDV3JpWnhPbEdyWjV2RnhQT2VEQWY4SXE1K0NVajI1aFgvK011am5JUWdPaXo5K0gvRVZGWDJiaGZUZDJPVEZKRWpOOE1oUE03NlgveFlLamNLMXA2UE9seWJma3cwanZmWDFtTy9XVnZyck9DbHRPdVczSVB6K3g2TEI5aCtEa0RnM1pjQg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Q3Y5TXdaMVpSNHpsVTRnWGpDMncxeVIrNXMxOVVmOGdNUXJadFcyb05GL2FPRFdweWlDNUZiS2srcGxTL2x5aw==" + } + ] + }, + { + "quality": "Season 1 {Hindi-English} 1080p x264 Esubs [1.2GB] - Episode Links", + "driveseedRedirectLinks": [ + { + "server": "Episode 1", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExZWXo0Mzh6anRBc1k2OWljeXFiYkdXSHEyV1lYMFdDVk10VTNkNkJCanZoSEtWd2g3aFYxdERITkx6OUlsalErYWRKcGtCVFNUbjFGVWEyLzNva251a2tmODhYZUZOallmN21TVFBVaTEzSWhwbGlVV2ZvSGtSTTBqZk5uMm9hdENIZmI5VjBwRXVSY2xrajQ5Ni9ZVQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=KytGSDUxVkV2Y2RSRUxoTXhwWnNYNlJBa3JWU29EeEs3cFFCZkxOTWQ4Vy9rVkZXV0pOMHU1NEJ5S2JvbVY2VA==" + }, + { + "server": "Episode 2", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEx5ME9yM1lWdHIvTGNRejJnSDB1Y0hGVXg5UXMxblU4VEh4aVFBUVFVNk5US3FEYXVEdW1iaEN3NkdyN2FyaDNucGxGbThtQ3VSa0IxN1hmWElsditkRUJpei9aWVA0RWpHd1dOQWQyOVM4Sk1FTzQyYlRYZ2V6eHUrTjVDWVZlTmFmdG5yMjAwdnoyUGs1VHhwWGZYMA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=VEdRMXJPeHVSZXJTckY0eUxjdDJ1TThKQVNvVUUySWRxdjBwUjNDRGU5SUc5TnlHZzRobWhmay9DOG9Bdnd6OQ==" + }, + { + "server": "Episode 3", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpwRStQMTBhangzQkU1MW9lcXB1RUlzMHh1WTBrdmVjaHpqMlpuYkEraDlUQ0gybmV1WlVjQ3cwd3p1ZDM5MmZhV0NIUEpoWWM2dGZxczRIZnZNQkV5VmVZMVF6VWd2STFUM3E1WWdBb2swUCtUUmZzMEoxSTY5OG1Xa29RRlR4bjF4RzBBeHlsSkxGY3hrM0s2WHBEdQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=NDRCaWx1RTM3SWNmN3QrSE9iQ0pKQUJoNzh6VGVlYVBKdmZVUDcwVXJGOGJ6TzIycDI5cnVNY0NzU1lwc1Znbg==" + }, + { + "server": "Episode 4", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEwrN2w0MHdjTHpTenJzRjByVlU5eUh1WEhCbDhaYzc5M2I0S1lsS3Z6Qy94OEtkaU1ybnlmNFV1VkFaVVUwMHUwSmkzZzJ1ZjNydkRYQTNFdWpMUWI0cit0S0JHT1Fwd1VibFNxRUNoL0NJVjBBTGpiTGFBUFhvcGQxY2xJT0VnU1o3ejQrQnNzZFVqdHR0MGhHTjRpNA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=a21MUG5FTFFlZURiZXRRaU5kS0pZYWNodFlMWUl0K09CU080WDhhMnFWbEp0YnF5d0lSaGRJRGw2U2d0bDIxNw==" + }, + { + "server": "Episode 5", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpDaTVoNkQvOVI4UnRNRzF3S3BYOWgrV25md0xnUzhINHZQbDZyV0xOallqb1FOeVRWaVpjWExvY0hFejhKVjFxVjJvb3Z2SUc2ZWNiaVowYWdxZVFOVWl3SXV6UlIyaWloOGFmTGx6SGdLWjNBWGZ6N2JRVGVPNDlWSlNpcHN3YkhuMEFpM3hzdjU3cHE1TTd5NzJqRQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=MUMzWENQeGFWUzhlOXpWNkQ0ekNqR0RuQUJPNG5xZktiSlZnbFFodkJpczY4Mm4vbTB0dUU1ZERWcjhvSVhWRg==" + }, + { + "server": "Episode 6", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpnd2pDOTBlVWhhUTZzOEJRTWhERVlTWkJ2Z0J1MTRFRisxdGczQ2VXSTY4dmNyeDRxMi9UU1Y2ckRsRllnL0wzN0MrZFVKZWVsQmYxdjFMYmhhVjd5SnplL003bnFlbXRFLzJZSjJSWjR4SVNPUlpULzZNYWd0TG9NWWhmemk2MzZqcHd5Qk9wVENRd0JxeHRzRlRmQg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=WHByMlZFUCtUVkhMSkFEaTY5UmtmNWQzRWxuRVVsZWZWNzJmVEE5dlg5NjgzUXlKeDNVbnZmVCt2VjZFNnZ0dw==" + }, + { + "server": "Episode 7", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEowUFJJRWdlWHl6TGZnUXJuczZhL3RPdVV4R1ZzTEJydE1xTUJxTXFSSmtaWkoxd2lReEl5bER1cmRBQ0ZETisrSHZ3MEp3QXRnRVZCd1dPdEMyWHltUGgwUURMbnhvbEFzY0xZMjhLUWIvMi9FOGNkR20vdnhDOFd4U0s4dXdzTkJxODBJbi9IRzJmVitPTXYxZUZGQQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=VXQzT3VWZ3R3NStPYXlOTDBNSjNEYkpVYmJnM1k1VTg1WXpldUEzMEZoWWtJWXdVUncrUEduWCtWeEp1Qi9nUA==" + }, + { + "server": "Episode 8", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpJNzhNdUxFQmM4bXA5Qm51eU14RDdFZzVhSEwwNE1weHZPajRzSEJwQk51djJsVnZJZGZQY1JZQmRvdHdjZ1RyS1RMUVRGZEVwYzdndUE3dUpudDAvMkV2bEo3NW0xRmRLMjVjWHJRR2I1Z2NyVVZPSTQvWkxZQi9neEtPZG4ybXRNdk9xaGUxNVdSNUpyMUhLNmVPUw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=dTJYSExoSXBjTGZkTTBjZWNINUNuVFVLMlZEazR2SWE2cjdpWFVzd09VY1FpRFFjTytOWVV6MGt4a2pCazgxZg==" + }, + { + "server": "Episode 9", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpJSTROcHA5UmV4cXhjYTFmQVMvZUNKZmNtV2lHYnpHakFiaEJLSDRseUdYa3BNdmN6R3loOUEvYlViNlExS3JnM0ZPK1JpSzY1SHpuN2s2MDZuYkh0a256YnhyUnQxU2VaWlVDV1Y5cVo1VUlnMGxIWmRaY2I0TUR1SHJUQ0pvUUNrdys4VWp0TWhha0p2bSs5TjQ2WQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=enB3enJJeE9HeG04cXBoVkJhL1V3ZWQyVlpPU0Q3NHRXUWJiWmlFVGdCZlN0UGtaalFwYnNsMkh5Mm0xT29jRg==" + }, + { + "server": "Episode 10", + "url": "https://tech.examzculture.in/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtraXJtMzcwWWYzL3F5M2YzcjRFOUxIenVQY3dvTld6Sk9pakxocHpaSDEyNDNOVHZ2WUVUNnRCZTIxVEgwbTBQZzRJSU1BbkozSEpJa0FXbzdPSFlNZzREUVlsaUNDa0Nxak1CSlVlSUN4ZE1kWUNvU2hwVjVwdVJvSjFqcGNPaXplakE5c1lxM0pnNXh5OFEvc09ZVg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=QmpLVFI1c3U2bnM3bTEwQU4wV3E1WnFMa3RxMVhscS9la2NqQUhjTmhjdXZXVEx5Mm9Xa1lsNjlSVVpZajdvYQ==" + } + ] + } + ] +} \ No newline at end of file diff --git a/providers/.cache/moviesmod/moviesmod_final_v13_293660_movie.json b/providers/.cache/moviesmod/moviesmod_final_v13_293660_movie.json new file mode 100644 index 0000000..835b37e --- /dev/null +++ b/providers/.cache/moviesmod/moviesmod_final_v13_293660_movie.json @@ -0,0 +1,64 @@ +{ + "data": [ + { + "quality": "720p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtpNjQ1ZFhZeDl4NlZVcm9rQ2lsL0hCM0k3VytEUzRpWWMvZ1FBZlNqRDhrTE5wQVdjeHNQYzJiRG5FMDJWd3lGSXc1LzFPT0hVWFlaWTBZOGw3aDN0V1lkNDVpK0NZVjFXLzh0UGZLSzUydUU2VW83U1YwRWJvdkhVMnh1MVk0Sk9tUm9Ra2FHWVpCQXZpS3R1RGdlNA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=MkR2QTY2K0pua0xqOS9xa0pmNVIycmNiTndtQzBxbGJ5VU5vVnU0eTh3RU9ML3AydUlJU214bUV5cGx6Rlc2cw==" + }, + { + "server": "🚀 Google Drive (Server 2)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEo1Qm4wbW1FSnJlWkpuWWoya0JZU3VPbXVCMTdlOFNlTEpycW9nUUpPN1Ric0lnbm5mVGQxS1FGdGFjbHZ5WHN1VllwMS93QXdoNzdYdE15Z1VuQkl5TStmTUpaVzA2dWdxSEZ2WmhxaFZaS3JML0RxQ1pTNlY2eUdzbjcrMFBBSit3TnlGRmNlamxvQXJISTNNS1Y2RQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=RURQY0lpbE1IWlNaZDhkNld1MFFnSEQ4V0xXNFJEeHZNNGFSZ3lnUW54aDZTLzUrRXdhVVRLaEhITno1ejFYdw==" + } + ] + }, + { + "quality": "1080p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZElqenM4UmhUeEJKTlpncjJnbVR1aldlTmZIb0kzcStJdm9vMGx6UmtGWUtKMjBWMXdYM1o5U3pseEJJMEMvN29McW9qeXZrZTVEa1F1ejlFbUgwRFBJb3dDTTV5TVoyVktJOGk3eEZYUys3Y29sQW5GcmtqaXZEMk9MSk1JWm9JSVlVTWdoSWdVQWNiQnpEYXp6Q054Vw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=dHV1dW9KeTlVMEM0UERzaVFaRWVTelN2TlVEUG5IUFdsSFdDYk4vZ29WamhPZThPcTBRRk9oc0lhTnppSlN0ag==" + }, + { + "server": "🚀 Google Drive (Server 2)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEtSYVErY0dNVXJDenhFZzFHZ05mR0ZOWWJ1eWJCNEgvdWtFRTlwY3orekF4QS84LzR1enRuTnpxMFZLT0ZGYkxVdXNuTHNWUklUUDh0SEkrYlYrbHI5MUFRcUo1UWNRSm93b2FScnA0YVU5T3dFeENHa2xHcjhYSXNBcXpodkE0alpOMW85L0ZoVS9MSzRFY2trS0NnTQ==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=dVNjL3hNRXhseGRrenJhQzFwQ24yekphRXhyL1JtUzBxUXlCTVgzUVNOSHRmbzhKK05BU3FjT0Q3MFhrMzlRYw==" + } + ] + }, + { + "quality": "720p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEsrRk5KdUcxZG1IblE5T2d2cGowNW9mT2dLd3ZHK0tzeXp1TnJVZGs0cGs1Mmp6d1kyK1lMY1lERitNL2dlNUtlMGJxa0JaYncrRFNzeVlZOEo2QUJLc0RWTGtuRVI2TTZ4Mk1hUVZCQTVlTUo2d3FmcUVrbUFOQnY1RUNFd3J1TmxHTnQvVE5yL1BoNkkwaHVrdVBiZA==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=ZjU4U21qeFVnN2x1RDhVbm55VHFJUWU1b2JHVEljRm96QzcySzV0NFZqRU1HU05uSlN5ck00TUs3bnFRS1ljWg==" + }, + { + "server": "🔗 Gdrive Links (Login)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZExBSThhUFBxd1BlaE81V0UwOCtVUGphK2lFL00xNXJ1OEQyaGJHckRxSi9SelBiNTFMQ3IzNENPWXhoeDg0SjRGMmo4WTFLMVYyOGhRWXVjSDNkajAramZtMHF6dHFpd2NqZGYwWTE3aUxqcGxYbHJyc2xHWUw0anNXUmpUS3E0SFVZc2cyU0RJVEl0Ky92SThreVVLdg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Z2luaGp1aXZ4WXkwSnFBU3pyZWxiU21Mb015bldhdTkzd1JTMkY5bU1CVVB3Q05sUTd1NlRKbHZJSUNnanREUA==" + } + ] + }, + { + "quality": "1080p", + "driveseedRedirectLinks": [ + { + "server": "✅ Fast Server (G-Drive)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpxbCtGRHB6dmUrTUp2ZUl2R3pHVGhyaDFTVUJCTDhsTnBTbXBmSFRwZ3BVUk5tS0xGRVJJd245eFgzanlKZ0Q4SzlPakFDQzNZZHhBdFVleFNCL1p4UGpxd1hFWUdXNXBWSm5XQ1FQWERXcDE1RSsrTjBVNGVmeHR6aDFwbGNrbkJSL004T1d2dTJ2MHlrYkhGSmlIQg==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=alBtU2J0bGprbXYxbzhJcmwrTXc3ZjhDMFhFV0xxZ25ocUliR2NZbkcxMkp5RER2QmlMNjNBWmxEZXhoeUpaRA==" + }, + { + "server": "🔗 Gdrive Links (Login)", + "url": "https://tech.unblockedgames.world/?sid=VWNwbWlPV1lMWFcwa1ZDb1dxQVBZcExWbFhIM3l3TExmMjg5TGlNcDcrSmhRZmlMWEs1b0pXRUlnRllnckQ5dWdJTDRiOGNLM3N1WWx5d0Y5Vk16SGl1MHN3ZDkzUnpPVW1vRUM3OFNRZEpPSnl1Ri9xazhmcVUwakZydFg2NFZVUzJRbUxqdjkvSktycFBKWmhML2F5VXpYMCt6c1draXQxVGYvWEhLK0xwNVJVTVZQSlRiWUtHTUd2TmNuSytybHd0czhlcFdwM3cvZnZnZ1YrcmNhTUdDSUxabU1nZ04veXlCYUIrSFIvbkJmSWpmSkFkOFVHTDJMVk5ibkw4Lw==", + "driveseedRedirectUrl": "https://driveseed.org/r?key=K09xNUEvbnBzaGh3Ym94RVQ2QW5aakdHV240a1M3RjhuRUViSHlYenpPVT0=&id=Q0o2RUdsdE9iZDhIYlQwMXlRdjEyMlA1NEVKZkRmRUNYZTcwdjNGa3RPa0xHZ29Na0taTkM4T2ZjWGZmRWxkQw==" + } + ] + } + ] +} \ No newline at end of file diff --git a/providers/.cache/showbox_final_url/v3_movie_1263256.json b/providers/.cache/showbox_final_url/v3_movie_1263256.json new file mode 100644 index 0000000..2857bb4 --- /dev/null +++ b/providers/.cache/showbox_final_url/v3_movie_1263256.json @@ -0,0 +1,4 @@ +{ + "showboxUrl": "NO_URL_FOUND", + "timestamp": 1757925353144 +} \ No newline at end of file diff --git a/providers/.cache/showbox_final_url/v3_movie_1893.json b/providers/.cache/showbox_final_url/v3_movie_1893.json new file mode 100644 index 0000000..ba724b9 --- /dev/null +++ b/providers/.cache/showbox_final_url/v3_movie_1893.json @@ -0,0 +1,4 @@ +{ + "showboxUrl": "NO_URL_FOUND", + "timestamp": 1757926777078 +} \ No newline at end of file diff --git a/providers/.cache/showbox_final_url/v3_movie_278.json b/providers/.cache/showbox_final_url/v3_movie_278.json new file mode 100644 index 0000000..27f2d6f --- /dev/null +++ b/providers/.cache/showbox_final_url/v3_movie_278.json @@ -0,0 +1,4 @@ +{ + "showboxUrl": "NO_URL_FOUND", + "timestamp": 1757926668402 +} \ No newline at end of file diff --git a/providers/.cache/showbox_final_url/v3_movie_293660.json b/providers/.cache/showbox_final_url/v3_movie_293660.json new file mode 100644 index 0000000..2791ed3 --- /dev/null +++ b/providers/.cache/showbox_final_url/v3_movie_293660.json @@ -0,0 +1,4 @@ +{ + "showboxUrl": "NO_URL_FOUND", + "timestamp": 1757950186614 +} \ No newline at end of file diff --git a/providers/.cache/showbox_search_results/26625ddb20d0988d0b6e7424b1119266.txt b/providers/.cache/showbox_search_results/26625ddb20d0988d0b6e7424b1119266.txt new file mode 100644 index 0000000..16f4458 --- /dev/null +++ b/providers/.cache/showbox_search_results/26625ddb20d0988d0b6e7424b1119266.txt @@ -0,0 +1,4 @@ +{ + "result": "NO_MATCH_FOUND", + "timestamp": 1757950186613 +} \ No newline at end of file diff --git a/providers/.cache/showbox_search_results/53df977907f5f20f1eceefca3ccc898a.txt b/providers/.cache/showbox_search_results/53df977907f5f20f1eceefca3ccc898a.txt new file mode 100644 index 0000000..07a05ea --- /dev/null +++ b/providers/.cache/showbox_search_results/53df977907f5f20f1eceefca3ccc898a.txt @@ -0,0 +1,4 @@ +{ + "result": "NO_MATCH_FOUND", + "timestamp": 1757926668401 +} \ No newline at end of file diff --git a/providers/.cache/showbox_search_results/9e500cc99ed9b9a4e816b2646064c346.txt b/providers/.cache/showbox_search_results/9e500cc99ed9b9a4e816b2646064c346.txt new file mode 100644 index 0000000..72337da --- /dev/null +++ b/providers/.cache/showbox_search_results/9e500cc99ed9b9a4e816b2646064c346.txt @@ -0,0 +1,4 @@ +{ + "result": "NO_MATCH_FOUND", + "timestamp": 1757926777077 +} \ No newline at end of file diff --git a/providers/.cache/showbox_search_results/f33b097143b0654432d600639f68b08f.txt b/providers/.cache/showbox_search_results/f33b097143b0654432d600639f68b08f.txt new file mode 100644 index 0000000..7f9e5c4 --- /dev/null +++ b/providers/.cache/showbox_search_results/f33b097143b0654432d600639f68b08f.txt @@ -0,0 +1,4 @@ +{ + "result": "NO_MATCH_FOUND", + "timestamp": 1757925353143 +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1263256-alternatives.json b/providers/.cache/tmdb_api/tmdb-movie-1263256-alternatives.json new file mode 100644 index 0000000..428a401 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1263256-alternatives.json @@ -0,0 +1,10 @@ +{ + "id": 1263256, + "titles": [ + { + "iso_3166_1": "VN", + "title": "Chàng Happy Gilmore 2", + "type": "" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1263256-external_ids.json b/providers/.cache/tmdb_api/tmdb-movie-1263256-external_ids.json new file mode 100644 index 0000000..40dd7d4 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1263256-external_ids.json @@ -0,0 +1,8 @@ +{ + "id": 1263256, + "imdb_id": "tt31868189", + "wikidata_id": "Q130269576", + "facebook_id": null, + "instagram_id": null, + "twitter_id": null +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1263256-images.json b/providers/.cache/tmdb_api/tmdb-movie-1263256-images.json new file mode 100644 index 0000000..b47cd29 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1263256-images.json @@ -0,0 +1,1224 @@ +{ + "backdrops": [ + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/ihUv6tsZnaBm7WM8oPzJ7zVG3gZ.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/rME9z7Ft1mfQanuoGARFsU97P4e.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/x5dVPttNDZaVRTvbk7pYrtGZoZN.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1350, + "iso_639_1": "zh", + "file_path": "/m7vBHmPQSokvN4hMQDxdJBdqAtJ.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2400 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/mRrOfAJKldUuXfkfHZU5OBlqfss.jpg", + "vote_average": 1.562, + "vote_count": 8, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1152, + "iso_639_1": null, + "file_path": "/6WlFTFswrSop08eD0SA6zWTyOEr.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 2048 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/88DDOXggxZLxobBolSRRLkaS8h7.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/3e0l5whLFcVYqC9OLWSVjez7HvB.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/xNKrcUlehKCIv1wSvYsqksSa1JV.jpg", + "vote_average": 1.222, + "vote_count": 4, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/nKYtIfeF1kPQnk7BkC5UpzgPvX6.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 960, + "iso_639_1": null, + "file_path": "/iJKgvzGmotmF9ASiDvOmfjSm4kB.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1707 + }, + { + "aspect_ratio": 1.777, + "height": 1082, + "iso_639_1": null, + "file_path": "/9yfLUT4ODjbx06wpil9NHTfV0uc.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1923 + }, + { + "aspect_ratio": 1.777, + "height": 1688, + "iso_639_1": null, + "file_path": "/p9heMCUK7E0YXqoDsojuAGwvPiy.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 3000 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/gorm72q6sBxfbC0K3hL7HmBMHxx.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2055, + "iso_639_1": null, + "file_path": "/wjexxhms10TlvHoW5Ie7B68lUJh.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 3653 + }, + { + "aspect_ratio": 1.778, + "height": 2064, + "iso_639_1": null, + "file_path": "/qrGM5Boooc2re48Q1w049Qys3Ry.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 3669 + }, + { + "aspect_ratio": 1.778, + "height": 2058, + "iso_639_1": null, + "file_path": "/pPK5Fsbps0DH6DgkesDGtLvKSfU.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 3659 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/stCEYCxA3SknIIne1H4LmaIJ8ii.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "en", + "file_path": "/grVku2u09NSW4PY2Hb47T0Ed1fs.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "en", + "file_path": "/rDq7TsiEMdcSxQHf0WcqA9eG1jq.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "hi", + "file_path": "/72YkyEygmXn4JwQhx681HsZW7wG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "en", + "file_path": "/s0ncoRPa1Rjt9cYlsw1FLTwXxce.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "hi", + "file_path": "/vTq5FRkWq4QEpyzqNSYf3xj4kvi.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/7bfqmA634d6U7FYtPu17oRC8qkH.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "de", + "file_path": "/qIhrIFic9xtyab7PlIoCIL5g9N0.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/vfGNV5Nkg7x4xeEPOl7b7avU7jj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "ka", + "file_path": "/9oiv7u0aa0JEXeeCsobSN3jPFj5.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + } + ], + "id": 1263256, + "logos": [ + { + "aspect_ratio": 8.5, + "height": 46, + "iso_639_1": "he", + "file_path": "/uXjdVSvmgYDaiPL2xQ1tfjzOPer.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 391 + }, + { + "aspect_ratio": 6.132, + "height": 53, + "iso_639_1": "es", + "file_path": "/r6mFJCqr2M9TbR6TwRGmHwgsBOf.png", + "vote_average": 3.334, + "vote_count": 0, + "width": 325 + }, + { + "aspect_ratio": 8.835, + "height": 206, + "iso_639_1": "he", + "file_path": "/tulJ40JokNBrKCIh8rb7wvLFhOT.png", + "vote_average": 3.334, + "vote_count": 2, + "width": 1820 + }, + { + "aspect_ratio": 7.395, + "height": 172, + "iso_639_1": "en", + "file_path": "/hdmcbySpSJckkxtJqJ9mP4Ocq1d.png", + "vote_average": 2.278, + "vote_count": 3, + "width": 1272 + }, + { + "aspect_ratio": 2.577, + "height": 744, + "iso_639_1": "en", + "file_path": "/9KVifMt6xExnDszNjFjX4qyjHkp.png", + "vote_average": 1.75, + "vote_count": 2, + "width": 1917 + }, + { + "aspect_ratio": 2.606, + "height": 307, + "iso_639_1": "en", + "file_path": "/664JRmHu2idytOr0W95AP5crJj9.png", + "vote_average": 1.75, + "vote_count": 2, + "width": 800 + }, + { + "aspect_ratio": 2.589, + "height": 309, + "iso_639_1": "en", + "file_path": "/bIiO6oSVPraROb3eh4FT1x3dV9V.png", + "vote_average": 1.75, + "vote_count": 2, + "width": 800 + }, + { + "aspect_ratio": 7.103, + "height": 185, + "iso_639_1": "en", + "file_path": "/blh0HC5EXahPOlB19DNujwEKIWM.png", + "vote_average": 1.434, + "vote_count": 5, + "width": 1314 + }, + { + "aspect_ratio": 6.849, + "height": 212, + "iso_639_1": "zh", + "file_path": "/eVmv47zzRQ0xmfU5PWgwkUf9BTk.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 1452 + }, + { + "aspect_ratio": 5.651, + "height": 63, + "iso_639_1": "ar", + "file_path": "/twVZ9bFApyNtLmyo85IpqHQNDni.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 356 + }, + { + "aspect_ratio": 11.706, + "height": 109, + "iso_639_1": "pt", + "file_path": "/dL92vYPSlK5V34muqK6h16JvL7F.png", + "vote_average": 0, + "vote_count": 0, + "width": 1276 + }, + { + "aspect_ratio": 7.407, + "height": 172, + "iso_639_1": "en", + "file_path": "/zN9Pzh5WxnqsuvC9tdIpJvNYRfp.png", + "vote_average": 0, + "vote_count": 0, + "width": 1274 + }, + { + "aspect_ratio": 9.652, + "height": 46, + "iso_639_1": "uk", + "file_path": "/zQiwlvlSAfLXyGdYWvFWVCeR5Pg.png", + "vote_average": 0, + "vote_count": 0, + "width": 444 + }, + { + "aspect_ratio": 4.908, + "height": 76, + "iso_639_1": "th", + "file_path": "/3eKn4bDyo2SGDsnuRMxdDJxv1Xp.png", + "vote_average": 0, + "vote_count": 0, + "width": 373 + }, + { + "aspect_ratio": 11.261, + "height": 46, + "iso_639_1": "ru", + "file_path": "/vF7f41GrcI8tki7OgqyyVuzFbAv.png", + "vote_average": 0, + "vote_count": 0, + "width": 518 + }, + { + "aspect_ratio": 3.897, + "height": 87, + "iso_639_1": "el", + "file_path": "/ttteRuMFzgCgvnj5UEya0SAH3fJ.png", + "vote_average": 0, + "vote_count": 0, + "width": 339 + }, + { + "aspect_ratio": 10.239, + "height": 46, + "iso_639_1": "it", + "file_path": "/6cGPLQaGgBj0wIu1bH52DLxQAT.png", + "vote_average": 0, + "vote_count": 0, + "width": 471 + }, + { + "aspect_ratio": 5.857, + "height": 63, + "iso_639_1": "hr", + "file_path": "/5CrdMSvItb5MJiGef7l52TciE8B.png", + "vote_average": 0, + "vote_count": 0, + "width": 369 + }, + { + "aspect_ratio": 10.674, + "height": 46, + "iso_639_1": "da", + "file_path": "/vGgAF2Ax6wigeoOctJOufhtQOxr.png", + "vote_average": 0, + "vote_count": 0, + "width": 491 + }, + { + "aspect_ratio": 11.261, + "height": 46, + "iso_639_1": "ru", + "file_path": "/eYaWniXSOdp2uAii3850AsxgUBN.png", + "vote_average": 0, + "vote_count": 0, + "width": 518 + }, + { + "aspect_ratio": 6.849, + "height": 53, + "iso_639_1": "zh", + "file_path": "/ju3Mj0XADpTluRvZHQId4XjzyfG.png", + "vote_average": 0, + "vote_count": 0, + "width": 363 + }, + { + "aspect_ratio": 4.724, + "height": 76, + "iso_639_1": "ja", + "file_path": "/3nJzRSrAdMXWUURjvZ0AoJHvfO6.png", + "vote_average": 0, + "vote_count": 0, + "width": 359 + }, + { + "aspect_ratio": 6.132, + "height": 53, + "iso_639_1": "es", + "file_path": "/q2HwfHrfuM3RMjsCwQ4BG1KuP6n.png", + "vote_average": 0, + "vote_count": 0, + "width": 325 + }, + { + "aspect_ratio": 3.586, + "height": 87, + "iso_639_1": "zh", + "file_path": "/fOdanOhGssviLpe0X6TFVfNGjjd.png", + "vote_average": 0, + "vote_count": 0, + "width": 312 + }, + { + "aspect_ratio": 6.849, + "height": 53, + "iso_639_1": "zh", + "file_path": "/aofR79CjciXZBe3wVhtR574m0ew.png", + "vote_average": 0, + "vote_count": 0, + "width": 363 + }, + { + "aspect_ratio": 9.652, + "height": 46, + "iso_639_1": "uk", + "file_path": "/5o2CC0LkTanwqEECa6uRFryihjb.png", + "vote_average": 0, + "vote_count": 0, + "width": 444 + }, + { + "aspect_ratio": 5.968, + "height": 63, + "iso_639_1": "ko", + "file_path": "/wvaNBIugFfDSpEMtaUQ3FJLDUgO.png", + "vote_average": 0, + "vote_count": 0, + "width": 376 + }, + { + "aspect_ratio": 6.849, + "height": 53, + "iso_639_1": "zh", + "file_path": "/aAhZBvE3azFx75K5OCf1ca4ehdN.png", + "vote_average": 0, + "vote_count": 0, + "width": 363 + }, + { + "aspect_ratio": 3.586, + "height": 87, + "iso_639_1": "zh", + "file_path": "/mokjoQV7nBZwWuWWELquGupDHEG.png", + "vote_average": 0, + "vote_count": 0, + "width": 312 + }, + { + "aspect_ratio": 5.048, + "height": 63, + "iso_639_1": "cs", + "file_path": "/jzRhdba9A3E1DHrAho0vcrmRBvT.png", + "vote_average": 0, + "vote_count": 0, + "width": 318 + }, + { + "aspect_ratio": 5.048, + "height": 63, + "iso_639_1": "cs", + "file_path": "/yCeKhWXwV1eCj7cUfwGNjZl9LZN.png", + "vote_average": 0, + "vote_count": 0, + "width": 318 + }, + { + "aspect_ratio": 11.174, + "height": 46, + "iso_639_1": "pt", + "file_path": "/jWAljLSQcW5WM1AKo57k27XeBxf.png", + "vote_average": 0, + "vote_count": 0, + "width": 514 + }, + { + "aspect_ratio": 7.609, + "height": 46, + "iso_639_1": "ro", + "file_path": "/xRBjKLgrCll3dtCJ01ezJx0zqzg.png", + "vote_average": 0, + "vote_count": 0, + "width": 350 + }, + { + "aspect_ratio": 10.587, + "height": 46, + "iso_639_1": "hu", + "file_path": "/cHW9exHZsmqQP0tVah040Lb06N9.png", + "vote_average": 0, + "vote_count": 0, + "width": 487 + }, + { + "aspect_ratio": 10.674, + "height": 46, + "iso_639_1": "da", + "file_path": "/mzJHUuOBen8Z3wQcdouta0e8OCk.png", + "vote_average": 0, + "vote_count": 0, + "width": 491 + }, + { + "aspect_ratio": 9.152, + "height": 46, + "iso_639_1": "tr", + "file_path": "/yYk5nv7mWjwSklECFYPVRxGnJ2z.png", + "vote_average": 0, + "vote_count": 0, + "width": 421 + }, + { + "aspect_ratio": 3.897, + "height": 87, + "iso_639_1": "el", + "file_path": "/4YjpNJ7jQAB1tv9ftmE8WRqch9Z.png", + "vote_average": 0, + "vote_count": 0, + "width": 339 + }, + { + "aspect_ratio": 8.5, + "height": 46, + "iso_639_1": "he", + "file_path": "/utEqHanKE2eGkC9cmu79WFw5odt.png", + "vote_average": 0, + "vote_count": 0, + "width": 391 + }, + { + "aspect_ratio": 4.684, + "height": 76, + "iso_639_1": "hi", + "file_path": "/ye6QUVuObWk1hfYo0UmCyMUOWLM.png", + "vote_average": 0, + "vote_count": 0, + "width": 356 + }, + { + "aspect_ratio": 10.304, + "height": 46, + "iso_639_1": "pl", + "file_path": "/nQlz6XwhAbKcsNrumothZJULXEX.png", + "vote_average": 0, + "vote_count": 0, + "width": 474 + }, + { + "aspect_ratio": 10.587, + "height": 46, + "iso_639_1": "hu", + "file_path": "/bhVLYirt219YfjnZX5gJ1sZqZxI.png", + "vote_average": 0, + "vote_count": 0, + "width": 487 + }, + { + "aspect_ratio": 11.174, + "height": 46, + "iso_639_1": "pt", + "file_path": "/2RwbjCBlW7cIz4Yk6UaEOJ793OW.png", + "vote_average": 0, + "vote_count": 0, + "width": 514 + }, + { + "aspect_ratio": 10.304, + "height": 46, + "iso_639_1": "pl", + "file_path": "/lOMnPYf6x0JsdIpqvVK8YGEDWsq.png", + "vote_average": 0, + "vote_count": 0, + "width": 474 + }, + { + "aspect_ratio": 4.684, + "height": 76, + "iso_639_1": "hi", + "file_path": "/uUY7USS9Wh8Sq1HeCMPH54eLJar.png", + "vote_average": 0, + "vote_count": 0, + "width": 356 + }, + { + "aspect_ratio": 5.857, + "height": 63, + "iso_639_1": "hr", + "file_path": "/ip7t2iKXf0T8kkgyy1gPw6Ru5r4.png", + "vote_average": 0, + "vote_count": 0, + "width": 369 + }, + { + "aspect_ratio": 5.968, + "height": 63, + "iso_639_1": "ko", + "file_path": "/4N7BF9UVEUFUWrIPjbUfuSIR6Hx.png", + "vote_average": 0, + "vote_count": 0, + "width": 376 + }, + { + "aspect_ratio": 7.609, + "height": 46, + "iso_639_1": "ro", + "file_path": "/43M2KWwzOpyLeBd0LP6yFwHSUrG.png", + "vote_average": 0, + "vote_count": 0, + "width": 350 + }, + { + "aspect_ratio": 5.651, + "height": 63, + "iso_639_1": "ar", + "file_path": "/5tREM7M0hnwfTRPItxfDdGaXklu.png", + "vote_average": 0, + "vote_count": 0, + "width": 356 + }, + { + "aspect_ratio": 4.724, + "height": 76, + "iso_639_1": "ja", + "file_path": "/iD5aR1Lm8ubG9MqGoJ2eWTfwo3i.png", + "vote_average": 0, + "vote_count": 0, + "width": 359 + }, + { + "aspect_ratio": 12.087, + "height": 46, + "iso_639_1": "pt", + "file_path": "/59NRe3tgzVK0pTmGUuuijo1TXXT.png", + "vote_average": 0, + "vote_count": 0, + "width": 556 + }, + { + "aspect_ratio": 10.239, + "height": 46, + "iso_639_1": "it", + "file_path": "/peUnI37dY8Lc8rKg5IhbamJuLqY.png", + "vote_average": 0, + "vote_count": 0, + "width": 471 + }, + { + "aspect_ratio": 11.304, + "height": 46, + "iso_639_1": "vi", + "file_path": "/dwM8bXEkvWChOSvkKxGCX0PlkZ3.png", + "vote_average": 0, + "vote_count": 0, + "width": 520 + }, + { + "aspect_ratio": 9.152, + "height": 46, + "iso_639_1": "tr", + "file_path": "/yivaVOVgmR6KT0OM1dEujscoA0h.png", + "vote_average": 0, + "vote_count": 0, + "width": 421 + }, + { + "aspect_ratio": 4.908, + "height": 76, + "iso_639_1": "th", + "file_path": "/eLS9pvfJRH7VXFRonQwYJ9Nqszd.png", + "vote_average": 0, + "vote_count": 0, + "width": 373 + }, + { + "aspect_ratio": 11.304, + "height": 46, + "iso_639_1": "vi", + "file_path": "/zyIa5gFtp9BCpBC0v3esB0qAL5Q.png", + "vote_average": 0, + "vote_count": 0, + "width": 520 + }, + { + "aspect_ratio": 7.407, + "height": 172, + "iso_639_1": "en", + "file_path": "/iFa2IjBerr9dO52BAmH2IRMSVV1.png", + "vote_average": 0, + "vote_count": 0, + "width": 1274 + }, + { + "aspect_ratio": 8.111, + "height": 72, + "iso_639_1": "sl", + "file_path": "/31m1br3Vpi7UekmqExvB4I8XsHM.png", + "vote_average": 0, + "vote_count": 0, + "width": 584 + }, + { + "aspect_ratio": 4.205, + "height": 205, + "iso_639_1": "zh", + "file_path": "/uR6cu24P8hFoxM7T9REqTNCRQbb.png", + "vote_average": 0, + "vote_count": 0, + "width": 862 + } + ], + "posters": [ + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "tr", + "file_path": "/4fFatsgZWh7a9WljDUfkuSSc25V.jpg", + "vote_average": 8.362, + "vote_count": 6, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/ynT06XivgBDkg7AtbDbX1dJeBGY.jpg", + "vote_average": 6.312, + "vote_count": 8, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/wLzfzKoVTfVkyiyWT2IZoVjwWtx.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1665, + "iso_639_1": null, + "file_path": "/j277mJqoflD9Dunb7fHbLpqr6en.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1110 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "pt", + "file_path": "/tUnY14keO33H2QfOQEWRUsccgZo.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/utIg6Vghn65A7rz8tH9ItHUuCzU.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/nRwDPfYUzzzUQarfMxvPlasxzpL.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1801, + "iso_639_1": "en", + "file_path": "/5o6zMz66lSiMTVj0S4ZluvFfjEY.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1201 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/E3dPHPJigkXwuiE0n1vzz0se8a.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/cA0K4wca6EZdtcNz5dMjJWMwvvR.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/cytAEwCbbMjXdX5m7XWBU271rwG.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/4ArZUoJObZZXBeFQyaZvJq8YyZw.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/8pEtr2o1aZEIyDaYDZgjbADNL4E.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1200, + "iso_639_1": "en", + "file_path": "/d7Viin538Zc9hDnZvJtjnRpcnLr.jpg", + "vote_average": 2.066, + "vote_count": 5, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": "en", + "file_path": "/1GMz5CGgm7NupnGPjwkEQHxfUcT.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1280 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/8B1WyuYiC6Lwz4EFBfgpoviDcC1.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/o11Nnq6WuAMk3qHPzSpSLmstqDL.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.666, + "height": 800, + "iso_639_1": "en", + "file_path": "/3rGS8N0vmjatrvvCYb6NE0mknYW.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 533 + }, + { + "aspect_ratio": 0.672, + "height": 1606, + "iso_639_1": "en", + "file_path": "/2mYFA2v0ja8VVFA1ToOZF7u838p.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 1080 + }, + { + "aspect_ratio": 0.667, + "height": 2496, + "iso_639_1": "tr", + "file_path": "/xB4paIImvj8rjm6vCsBkKBgnOyh.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1664 + }, + { + "aspect_ratio": 0.675, + "height": 2222, + "iso_639_1": "en", + "file_path": "/pOxzz1dB0PxZhDInRG3V3LKSC1C.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/p8xxeq6flmez6Xz5A9PSUUygecA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1665, + "iso_639_1": "uk", + "file_path": "/grlEij3dpGudZGqTvSiAR9h1OzP.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1110 + }, + { + "aspect_ratio": 0.667, + "height": 1457, + "iso_639_1": "uk", + "file_path": "/djJgoQqchRpAngiehwVlj0IxH3K.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 972 + }, + { + "aspect_ratio": 0.667, + "height": 1350, + "iso_639_1": "en", + "file_path": "/rgpzDWoHVo8BqcjSAVS2OWnDUaT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 900 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/hKUDPA6em4UEDE2zquPbE1Xkzsz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.713, + "height": 750, + "iso_639_1": "zh", + "file_path": "/6dYAxnwRQNdXILx621xdX61fJJB.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 535 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": "en", + "file_path": "/2Ri7KnMcQvleTdHrpyM4eSMZrTj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "th", + "file_path": "/x6ExSuFAgeNdjzfiw6xOyatzETo.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 1050, + "iso_639_1": "it", + "file_path": "/2HTLO8U9BWph27QVTKp2Hniyjt9.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 700 + }, + { + "aspect_ratio": 0.667, + "height": 1050, + "iso_639_1": "it", + "file_path": "/e6kWvwXnhLvj2nlE4zdvFV2S7CK.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 700 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "pt", + "file_path": "/xTVrJhDxonSaKlggr8R4vH1mYrA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/q50q4xc0YiccXMZ9QEsnuGrr1U8.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/lgGT2mFCIrt79916G2wc0TG9GKW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/art75HHKvh1H8LBYbxQwxfFgpd0.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ro", + "file_path": "/jLNyzbmMU86Vvu2tOMEF8oAQ8Rf.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/ftgvq4uSxATZuF5GaiYXLCmFXIp.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "he", + "file_path": "/bxwNplYBoJ7G43dJnykAmRPZhFt.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1665, + "iso_639_1": "hr", + "file_path": "/ixbEygtiPiQaXhsZDxvkoV8PcY.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1110 + }, + { + "aspect_ratio": 0.666, + "height": 2000, + "iso_639_1": "sl", + "file_path": "/pulZ1IkvGjG1N7CYqeqLEpkZUMR.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1333 + }, + { + "aspect_ratio": 0.667, + "height": 2222, + "iso_639_1": "ru", + "file_path": "/5ezAkKMAc6CwXiTI7JljyT1Epc6.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1481 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/eSP5aENJAZV8w8VJ0xCPbwq55NG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/cT5HicYNtvnDaRVVLbPxIRoJWve.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1801, + "iso_639_1": null, + "file_path": "/mklEmRlUY0wNwz0nSoViSafydva.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1201 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "bg", + "file_path": "/oR3IW31rRCyMvCImZYRDAmN2XXr.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1800, + "iso_639_1": "zh", + "file_path": "/b2xztxY13mLoZuTZLHdnWQ9YVrc.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1200 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/rH0vnjxVbc8dg1lmV6bQJaMmEri.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.706, + "height": 759, + "iso_639_1": "ar", + "file_path": "/cjoxRBMajRi0Ic1MejbmudKzdbf.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 536 + }, + { + "aspect_ratio": 0.667, + "height": 1665, + "iso_639_1": "ka", + "file_path": "/2ifImkVwh9OgX7MBowh0u7f5yUv.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1110 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/xIzSCh1MWH7vzgiRYeMWL8Qx0t8.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1263256.json b/providers/.cache/tmdb_api/tmdb-movie-1263256.json new file mode 100644 index 0000000..bda5ceb --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1263256.json @@ -0,0 +1,58 @@ +{ + "adult": false, + "backdrop_path": "/x5dVPttNDZaVRTvbk7pYrtGZoZN.jpg", + "belongs_to_collection": { + "id": 1263259, + "name": "Happy Gilmore Collection", + "poster_path": "/7nUOrnZHSgnhagLtydIYbD4rrDY.jpg", + "backdrop_path": "/mhrE9ij30cIvPFVFRXZSwwTchUg.jpg" + }, + "budget": 152000000, + "genres": [ + { + "id": 35, + "name": "Comedy" + } + ], + "homepage": "https://www.netflix.com/title/81696722", + "id": 1263256, + "imdb_id": "tt31868189", + "origin_country": [ + "US" + ], + "original_language": "en", + "original_title": "Happy Gilmore 2", + "overview": "Happy Gilmore isn't done with golf — not by a long shot. Since his retirement after his first Tour Championship win, Gilmore returns to finance his daughter's ballet classes.", + "popularity": 24.4786, + "poster_path": "/ynT06XivgBDkg7AtbDbX1dJeBGY.jpg", + "production_companies": [ + { + "id": 878, + "logo_path": "/s5j0xnTXvglZoz49CUaQclVv3s9.png", + "name": "Happy Madison Productions", + "origin_country": "US" + } + ], + "production_countries": [ + { + "iso_3166_1": "US", + "name": "United States of America" + } + ], + "release_date": "2025-07-25", + "revenue": 0, + "runtime": 118, + "spoken_languages": [ + { + "english_name": "English", + "iso_639_1": "en", + "name": "English" + } + ], + "status": "Released", + "tagline": "Happy Gilmore returns!", + "title": "Happy Gilmore 2", + "video": false, + "vote_average": 6.673, + "vote_count": 712 +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1893-alternatives.json b/providers/.cache/tmdb_api/tmdb-movie-1893-alternatives.json new file mode 100644 index 0000000..eef00b5 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1893-alternatives.json @@ -0,0 +1,305 @@ +{ + "id": 1893, + "titles": [ + { + "iso_3166_1": "US", + "title": "Star Wars: Episode I", + "type": "working title" + }, + { + "iso_3166_1": "US", + "title": "Star Wars I: The Phantom Menace", + "type": "video box title" + }, + { + "iso_3166_1": "CZ", + "title": "Skrytá hrozba", + "type": "short title" + }, + { + "iso_3166_1": "FR", + "title": "La menace fantôme", + "type": "short title" + }, + { + "iso_3166_1": "FI", + "title": "Tähtien sota - episodi I: Pimeä uhka", + "type": "TV title" + }, + { + "iso_3166_1": "DK", + "title": "Den usynlige fjende", + "type": "short title" + }, + { + "iso_3166_1": "RU", + "title": "Скрытая угроза", + "type": "short title" + }, + { + "iso_3166_1": "ES", + "title": "Star Wars: Episodio I - La amenaza fantasma", + "type": "" + }, + { + "iso_3166_1": "US", + "title": "The Phantom Menace", + "type": "short title" + }, + { + "iso_3166_1": "HK", + "title": "星球大戰前傳:魅影危機", + "type": "" + }, + { + "iso_3166_1": "US", + "title": "Star Wars: The Phantom Menace", + "type": "iTunes Title" + }, + { + "iso_3166_1": "TW", + "title": "星際大戰首部曲:威脅潛伏", + "type": "" + }, + { + "iso_3166_1": "KR", + "title": "스타워즈 에피소드1 보이지 않는 위험", + "type": "" + }, + { + "iso_3166_1": "HU", + "title": "Bajlós Árnyak", + "type": "" + }, + { + "iso_3166_1": "BR", + "title": "Star Wars: A Ameaça Fantasma", + "type": "short title" + }, + { + "iso_3166_1": "NO", + "title": "Star Wars: Episode I - Den skjulte trussel", + "type": "" + }, + { + "iso_3166_1": "FR", + "title": "Star Wars - Episode I - La Menace Fantôme", + "type": "" + }, + { + "iso_3166_1": "GR", + "title": "Ο Πόλεμος Των Άστρων: Επεισόδιο 1 - Η Αόρατη Απειλή", + "type": "" + }, + { + "iso_3166_1": "CA", + "title": "Star Wars : épisode I - La menace fantôme", + "type": "" + }, + { + "iso_3166_1": "CZ", + "title": "Hvězdné války: Epizoda I - Skrytá hrozba", + "type": "" + }, + { + "iso_3166_1": "KR", + "title": "스타 워즈 에피소드 1, 보이지 않는 위험", + "type": "" + }, + { + "iso_3166_1": "FR", + "title": "Star Wars : La menace fantôme", + "type": "" + }, + { + "iso_3166_1": "SK", + "title": "Star Wars: Skrytá hrozba", + "type": "" + }, + { + "iso_3166_1": "SK", + "title": "Hviezdné vojny: Epizoda I - Skrytá hrozba", + "type": "" + }, + { + "iso_3166_1": "RU", + "title": "Звёздные войны: Эпизод I - Скрытая угроза", + "type": "" + }, + { + "iso_3166_1": "RU", + "title": "Звёздные войны: Скрытая угроза", + "type": "" + }, + { + "iso_3166_1": "UA", + "title": "Зоряні війни: Прихована загроза", + "type": "" + }, + { + "iso_3166_1": "IT", + "title": "Star Wars - Episodio I - La minaccia fantasma", + "type": "" + }, + { + "iso_3166_1": "DE", + "title": "Star Wars Episode 1 - Die dunkle Bedrohung", + "type": "" + }, + { + "iso_3166_1": "JP", + "title": "スター・ウォーズ/ファントム・メナス", + "type": "iTunes title" + }, + { + "iso_3166_1": "KR", + "title": "스타워즈 에피소드 1 보이지 않는 위험", + "type": "" + }, + { + "iso_3166_1": "US", + "title": "Star Wars: The Phantom Menace (Episode I)", + "type": "Disney+" + }, + { + "iso_3166_1": "CN", + "title": "星球大战前传:魅影危机", + "type": "" + }, + { + "iso_3166_1": "PL", + "title": "Gwiezdne Wojny I - Mroczne Widmo", + "type": "" + }, + { + "iso_3166_1": "TW", + "title": "星球大戰前傳:魅影危機", + "type": "" + }, + { + "iso_3166_1": "FR", + "title": "Star Wars, Episode I - La Menace fantôme", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "星球大战1:幽灵的威胁", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "星球大战前传1:幽灵的威胁", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "星球大战前传:幽灵的威胁", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "星球大战:幽灵的威胁", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "星球大战前传1:魅影危机", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "星球大战:魅影危机", + "type": "" + }, + { + "iso_3166_1": "FR", + "title": "Star Wars, épisode I : La Menace fantôme", + "type": "" + }, + { + "iso_3166_1": "HU", + "title": "Csillagok Háborúja I. - Baljós Árnyak", + "type": "" + }, + { + "iso_3166_1": "GE", + "title": "ვარსკვლავური ომები: ფარული საფრთხე (ეპიზოდი I)", + "type": "Disney+" + }, + { + "iso_3166_1": "GE", + "title": "ვარსკვლავური ომები: ეპიზოდი I", + "type": "" + }, + { + "iso_3166_1": "GE", + "title": "ვარსკვლავური ომები I", + "type": "" + }, + { + "iso_3166_1": "GE", + "title": "ვარსკვლავური ომები 1", + "type": "short title" + }, + { + "iso_3166_1": "GE", + "title": "ვარსკვლავური ომები: ეპიზოდი I - ფარული საფრთხე", + "type": "" + }, + { + "iso_3166_1": "GE", + "title": "ვარსკვლავური ომები: ეპიზოდი 1", + "type": "" + }, + { + "iso_3166_1": "IL", + "title": "סטאר וורס פרק I: אימת הפאנטום", + "type": "" + }, + { + "iso_3166_1": "VN", + "title": "Chiến Tranh Giữa Các Vì Sao 1: Hiểm Họa Bóng Ma", + "type": "" + }, + { + "iso_3166_1": "ES", + "title": "La amenaza fantasma", + "type": "Titulo abreviado" + }, + { + "iso_3166_1": "MX", + "title": "Star Wars: La amenaza fantasma", + "type": "" + }, + { + "iso_3166_1": "JP", + "title": "スター・ウォーズ/ファントム・メナス (エピソード1)", + "type": "" + }, + { + "iso_3166_1": "US", + "title": "Star Wars Episode I - The Phantom Menace", + "type": "" + }, + { + "iso_3166_1": "DE", + "title": "Star Wars - Episode 1 - Die dunkle Bedrohung", + "type": "" + }, + { + "iso_3166_1": "IL", + "title": "מלחמת הכוכבים 1: אימת הפנטום", + "type": "" + }, + { + "iso_3166_1": "SG", + "title": "Star Wars Episode I:The Phantom Menace", + "type": "HK & Singapore Style English Asian Font Set" + }, + { + "iso_3166_1": "UZ", + "title": "Yulduzlar jangi-1: Yashirin tahdid", + "type": "" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1893-external_ids.json b/providers/.cache/tmdb_api/tmdb-movie-1893-external_ids.json new file mode 100644 index 0000000..b3e19c3 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1893-external_ids.json @@ -0,0 +1,8 @@ +{ + "id": 1893, + "imdb_id": "tt0120915", + "wikidata_id": "Q165713", + "facebook_id": "StarWars", + "instagram_id": "starwars", + "twitter_id": "starwars" +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1893-images.json b/providers/.cache/tmdb_api/tmdb-movie-1893-images.json new file mode 100644 index 0000000..7db6886 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1893-images.json @@ -0,0 +1,3897 @@ +{ + "backdrops": [ + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/wDe8LzwuvHYYiuwyNfxdYQq8ti4.jpg", + "vote_average": 5.682, + "vote_count": 11, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/5fu7fzy4NZTsL1Jap00UBIInAuB.jpg", + "vote_average": 5.25, + "vote_count": 22, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/qKnCpQl6ARxbSjw3CLqPlfm43vb.jpg", + "vote_average": 5.25, + "vote_count": 8, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1606, + "iso_639_1": null, + "file_path": "/dhkztgCspLkl1bKTdX9lR81PAPG.jpg", + "vote_average": 5.25, + "vote_count": 10, + "width": 2856 + }, + { + "aspect_ratio": 1.78, + "height": 863, + "iso_639_1": null, + "file_path": "/8MynmjcKSvGdcxjVwsx3TWwOTBa.jpg", + "vote_average": 5.25, + "vote_count": 8, + "width": 1536 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/aTXhYyxx23AGWAqrkrs1fNGhgSO.jpg", + "vote_average": 4.884, + "vote_count": 13, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/lpz6V7q0IxUQI1Ia6xENuc66zF5.jpg", + "vote_average": 4.722, + "vote_count": 9, + "width": 1920 + }, + { + "aspect_ratio": 1.779, + "height": 839, + "iso_639_1": null, + "file_path": "/a8SBSwSGcF6JvymKPjegDGrxOo2.jpg", + "vote_average": 4.722, + "vote_count": 9, + "width": 1493 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/fpEYSEpbPAQMppYRyRA66EZoWCX.jpg", + "vote_average": 3.954, + "vote_count": 11, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "es", + "file_path": "/qXulRWB56gUgW5LCBDg1asTlEXq.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/3TeGmKJfkik1D1rIoqGb1aR4k9c.jpg", + "vote_average": 3.334, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/h6yb2uoiw5SkoTuQorxgDVOhIym.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/wZaWy1IfKTZEn7oK1ZvVK90ZkrC.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/wujMxlOOIM68XRiSVHC5h2QtCwy.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/suLRx5wRkDyzB13K1FRGW2eRCn9.jpg", + "vote_average": 3.334, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.777, + "height": 1600, + "iso_639_1": null, + "file_path": "/k4olhqN9A1q3aDVTe5WC1F9nxTn.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2843 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/h0hTCg2aoG9tpAk8xILHU7aHRC5.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/9YCTvqzELOKyVwgTFnVI5JQGLuv.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/jOIpEbod3uK5wH1kF3NB3d2woQc.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/tJpMCH1jLW5GuJbJ6QHOJ16FtkY.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/qQOv9vs9OJe3gdApxoxnnlReVmW.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/sQUiouw94zhoG6LDEj9h8cPb61N.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/9RFS4KceFxAZX7w0m1Jr2euk8ds.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/dnUUhqSUKuhizUmXO8oqeh8gjJl.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/sHrXdhRmgMvEO0SV8GeHbJITZ7k.jpg", + "vote_average": 1.562, + "vote_count": 8, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/rxdSNzq3hofvyakEgKt2zfTN5tJ.jpg", + "vote_average": 1.562, + "vote_count": 8, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/zE7yQPLvDc2G88EOWEgKrIT0rWs.jpg", + "vote_average": 1.444, + "vote_count": 6, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/9r4IRZUJ564J38EcLRPM9uUZlVp.jpg", + "vote_average": 1.444, + "vote_count": 9, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/qDEvctVfAheD7x9Rzz8xcFRAGAU.jpg", + "vote_average": 1.444, + "vote_count": 9, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/qKkNhRpotW2bZjgDd5NvomApt7A.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/iYFvlq53FjhPeB5bjdP5UVeeJl2.jpg", + "vote_average": 1.31, + "vote_count": 7, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "pt", + "file_path": "/36LnijfQCOC89rCMOhn2OINXROI.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/bEw0vP5XMSHsrMDERbWKL6y3AVZ.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/4Z1i1wsrDEtFTsbTJH93WWQSELJ.jpg", + "vote_average": 1.13, + "vote_count": 9, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/wNmiOU8EQURI2sKT4RsIY6veclC.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 815, + "iso_639_1": null, + "file_path": "/4X7NkX3sVJrUM2a8uijmg4u7HPl.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 1449 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/jFyZR0DTBOUUuQiKTHksepfoLtc.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/IyL7yp2hfSyjwfYO8ZZfpDVfMU.jpg", + "vote_average": 0.972, + "vote_count": 6, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/ah3stF3tdlcF9BQeQHiDAUX24ko.jpg", + "vote_average": 0.972, + "vote_count": 6, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/FoZrNOfOdwSu1rq4UzSW2cdG0k.jpg", + "vote_average": 0.972, + "vote_count": 6, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/oWllTIYytLu54P02L9cXZDi4tsn.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/uHsVLd1najL79okB15T3CwxYUz2.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/4rSHRoP4tIpZWCIe6YjxoqM0v54.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/3nI2QCM7E9wodKGNTODb5simoyf.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/spED0jvA0BFIUcl35CuOv5PzaYn.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/aDViVKtARjq2bRHrdwahuioDeKj.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/gSGlCKabj8YG0MnNBhFvlNpOoQ7.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/eFsAx6qeCfn6nEM94njG8lhR7wI.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/8WObT9Ehx1MOzfbvNgk9RhCwNf6.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/zLbvZB7kk4dIDwn34Aj5S8UIihp.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/zQV6D3sGUPiGjm7SJMRWtMfSmtt.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/6IZFuLDEwgaIIojiypDwkQLhG1u.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/mqHwV2MSnD0eTb9vUK7Lhdyr01M.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/rRAQbgaUiHMGQqENowXh8vxOVou.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/hBgtnpZODcD7Yc04xRCswiHuDQM.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "es", + "file_path": "/64weXdeQj6Tn412KHzQQXsCoZPe.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/6lmyyTrKRSRJs1oZ5PE31lumPle.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/w7AmYht7mGk86OD7lQpKJRoann5.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/mXuUoH9zxbWDYLP6RJvWATPnY7c.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/8lWuaA7Y2pjFSnr3uAVZPNsDpWP.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "de", + "file_path": "/yW0CKgKmdHTjK32ZHivHByr5T86.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "pt", + "file_path": "/gytWWpRCNU5lSM1yAiWkLsR753v.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "pt", + "file_path": "/oS3gc0ahjVu4HU7grTmLr6tfUkp.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "hu", + "file_path": "/8K8jlcR3e6Pjyqgx68BgB9xwm9b.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "fr", + "file_path": "/4jbg2hkbpuZ1YD4RTafHjI6AsGn.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/ylpctivAsymQ7EidIl6Va361asv.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/uNDKAPQnfeaY3BktMKSW2rDm72Y.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/pC4FYVxwyblurrdHfHFtpmI3OfL.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/x1laoiWbdVIyS3WAeKCk7SQUtx9.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/xJRUL4myOrOWMd9CVgh59e5HsGc.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "zh", + "file_path": "/s55e62qVIlpoyxhyB64FIVTBVrX.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1440, + "iso_639_1": null, + "file_path": "/hNFrlJQgbv8bJIeM7GXUca8BP8n.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2560 + }, + { + "aspect_ratio": 1.776, + "height": 964, + "iso_639_1": "tr", + "file_path": "/vdRp7uUg8a9mU2NiJrfIAi89SAP.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1712 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/yINV04KajivVdIfr6PG9nzAyUtP.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.777, + "height": 768, + "iso_639_1": null, + "file_path": "/lQjLPLDpMVs7hhxcyi51xIXzZgf.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1365 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/b2vrlWEUKtYtte8ZmnoHKtu9Shi.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/fZv5IbgHlSzSWr9dkPIaxNTm8I1.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/y2AwspEjisfVTyThIZWB6tA5bhp.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/uZa8cBcnlFUYzk3RWFeQWbwUcnQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/rd4ykNxzdjXzD8yFGlmPl9psZIC.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/wAOdaqBYyrHnV46NSMnDKlcEvAY.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 814, + "iso_639_1": null, + "file_path": "/aYe6BBTBY4FWRG0fTbL9pjuRNbz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1447 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/bdU76w0oEj0qccYtbgKKKmE3g2Z.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/plNjCLzInjSi2qv5JJWIssn06u8.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/xzHLbGVB2XpymrkfRp3TwicagPF.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 790, + "iso_639_1": null, + "file_path": "/5Q8IQhvbZUIOYDt0BgZt2ppp3UO.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1405 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "it", + "file_path": "/lcbWfVH1NBe9zkUagNWS6IrgWOf.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "zh", + "file_path": "/iwoBzKVGpEkYXxX6sVghuQcezfT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "zh", + "file_path": "/79aPEApIRf9z96prT6mML1A1hyG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "ja", + "file_path": "/dPpeDcBht2BC3uq8agJ4QRwkX6s.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 1728, + "iso_639_1": "pt", + "file_path": "/cGuBZR7NTHXtnAdPvuvXiFhNzls.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3072 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/jzFzEHC0YLe0s7u2xX4p5qt7Q6o.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1728, + "iso_639_1": null, + "file_path": "/b9kkaRki4hIxFTFQRmUvtDeXTWj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3072 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/7lPxEsuINpZrS89xRfsGJfgkXbq.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1350, + "iso_639_1": null, + "file_path": "/g2qyHBLMimpiSDTti0ySEc6skKK.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2400 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/7yHeqj1gZAVyGFr2y9cgm8kKXCl.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/rbjFN4B7ajPUrYcu7LvCl5hd2du.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/CRF8TFzj2hLnOMUkJPPOMwEaat.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/wM6LN07bCGg1pn3ADDDebQgi10R.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/wYb1Qu1lkioidVRiO37MmdEYkeu.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/vldt6TykBdxRoRsRQUeVpWMihxX.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/ypIJxcNOdlIa3Tp44Kz3HZbDoQF.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1608, + "iso_639_1": null, + "file_path": "/cqxt3nzYRZrp3rTHi8Q15qyklH5.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2859 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "de", + "file_path": "/cLTQWAh7qrb0MmMZIjGnAiTjeQU.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + } + ], + "id": 1893, + "logos": [ + { + "aspect_ratio": 2.125, + "height": 1299, + "iso_639_1": "en", + "file_path": "/8bZhu9BzARNvwZ7beBuMk93WE1J.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 2760 + }, + { + "aspect_ratio": 3.201, + "height": 244, + "iso_639_1": "en", + "file_path": "/ng7NyKidNO3tpngil1jW6DNMPVx.png", + "vote_average": 3.334, + "vote_count": 3, + "width": 781 + }, + { + "aspect_ratio": 1.985, + "height": 677, + "iso_639_1": "de", + "file_path": "/s2OPnklfUDQExrhgMAHDrx27JOY.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 1344 + }, + { + "aspect_ratio": 2.923, + "height": 535, + "iso_639_1": "fr", + "file_path": "/sEaIX0ETCj1vzPEnYnl5aNRPwA2.png", + "vote_average": 3.334, + "vote_count": 2, + "width": 1564 + }, + { + "aspect_ratio": 1.483, + "height": 300, + "iso_639_1": "it", + "file_path": "/leivDqFnLgAkw5Cqh9mjPtsR4DE.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 445 + }, + { + "aspect_ratio": 0.873, + "height": 1146, + "iso_639_1": "zh", + "file_path": "/4UySdZVVyoZ289Y3E8ERdY5XUdu.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 3.162, + "height": 784, + "iso_639_1": "he", + "file_path": "/lPOUDPEVqGeMCjUke9z7k5ujC8n.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 2479 + }, + { + "aspect_ratio": 3.139, + "height": 244, + "iso_639_1": "en", + "file_path": "/eqiNYEn1mIdyYwrHk73y4sakqnw.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 766 + }, + { + "aspect_ratio": 2.421, + "height": 297, + "iso_639_1": "de", + "file_path": "/bPDXMsLXuGitnM1Faif5iKKnIs0.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 719 + }, + { + "aspect_ratio": 2.992, + "height": 262, + "iso_639_1": "de", + "file_path": "/inbmBStYnGaYjM1zF49OMYRqu8V.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 784 + }, + { + "aspect_ratio": 2.914, + "height": 269, + "iso_639_1": "fr", + "file_path": "/kew3bmV7a0HCnuGJFpgOoJJhi5Q.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 784 + }, + { + "aspect_ratio": 2.671, + "height": 295, + "iso_639_1": "de", + "file_path": "/nGjfdALcA1wWq4WDnS8Trhsqwph.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 788 + }, + { + "aspect_ratio": 2.568, + "height": 310, + "iso_639_1": "de", + "file_path": "/tlZ2FsW2HFlwXym6ypqFaVYioKD.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 796 + }, + { + "aspect_ratio": 3.375, + "height": 232, + "iso_639_1": "de", + "file_path": "/oGvrgzI4crgsXugiFxfBUfDDFw4.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 783 + }, + { + "aspect_ratio": 2.101, + "height": 1299, + "iso_639_1": "de", + "file_path": "/bAcPgi3Im2ZU0hPfu0iHEP38jbr.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 2729 + }, + { + "aspect_ratio": 3.365, + "height": 233, + "iso_639_1": "pl", + "file_path": "/dxaMfpBin7YwMPY5Va0mhxRp3go.png", + "vote_average": 0, + "vote_count": 0, + "width": 784 + }, + { + "aspect_ratio": 1.288, + "height": 292, + "iso_639_1": "fr", + "file_path": "/f4mly1dnkmROp5nbygx8gi9o9lg.png", + "vote_average": 0, + "vote_count": 0, + "width": 376 + }, + { + "aspect_ratio": 1.819, + "height": 293, + "iso_639_1": "es", + "file_path": "/b3W3Yqm7FGiNC1TFtkiJ3i6BJF4.png", + "vote_average": 0, + "vote_count": 0, + "width": 533 + }, + { + "aspect_ratio": 2.651, + "height": 298, + "iso_639_1": "en", + "file_path": "/3jFWmTRapw9iazjNRwam2pAiyIb.png", + "vote_average": 0, + "vote_count": 0, + "width": 790 + }, + { + "aspect_ratio": 3.333, + "height": 234, + "iso_639_1": "en", + "file_path": "/P8GGcFyUdZ4IDlcsX7YMJIK6Oj.png", + "vote_average": 0, + "vote_count": 0, + "width": 780 + }, + { + "aspect_ratio": 3.155, + "height": 251, + "iso_639_1": "ru", + "file_path": "/sU6Ypw503Wqi6ALwpaX0986QHYy.png", + "vote_average": 0, + "vote_count": 0, + "width": 792 + }, + { + "aspect_ratio": 3.415, + "height": 229, + "iso_639_1": "it", + "file_path": "/bA9lVFCayOjS2IsHQab4zM85XNk.png", + "vote_average": 0, + "vote_count": 0, + "width": 782 + }, + { + "aspect_ratio": 1.13, + "height": 308, + "iso_639_1": "es", + "file_path": "/87bYKBujSehFI5hRLVSX2MFQsbS.png", + "vote_average": 0, + "vote_count": 0, + "width": 348 + }, + { + "aspect_ratio": 3.004, + "height": 261, + "iso_639_1": "en", + "file_path": "/9Usl47fqsUa8NJBYtN2UGHDJQb0.png", + "vote_average": 0, + "vote_count": 0, + "width": 784 + }, + { + "aspect_ratio": 4.084, + "height": 191, + "iso_639_1": "en", + "file_path": "/47udRs2Cv6rEqqtpLBcgRSsYIFl.png", + "vote_average": 0, + "vote_count": 0, + "width": 780 + }, + { + "aspect_ratio": 1.483, + "height": 300, + "iso_639_1": "en", + "file_path": "/dYoXaCVrtQh8y4hOdnyTQ7CFi8Q.png", + "vote_average": 0, + "vote_count": 0, + "width": 445 + }, + { + "aspect_ratio": 2.528, + "height": 309, + "iso_639_1": "fr", + "file_path": "/5MvmXlAhV9oZfddvUx7CgkVoUdE.png", + "vote_average": 0, + "vote_count": 0, + "width": 781 + }, + { + "aspect_ratio": 3.237, + "height": 241, + "iso_639_1": "en", + "file_path": "/vie575AQVdGCDw61QZDwn6VwPPF.png", + "vote_average": 0, + "vote_count": 0, + "width": 780 + }, + { + "aspect_ratio": 1.819, + "height": 299, + "iso_639_1": "pl", + "file_path": "/neGwSUKgxrmHgfcRe6uwPNO6ciK.png", + "vote_average": 0, + "vote_count": 0, + "width": 544 + }, + { + "aspect_ratio": 2.094, + "height": 298, + "iso_639_1": "en", + "file_path": "/oTX79sMBCHc9t8GQ9qhpDaxy3FZ.png", + "vote_average": 0, + "vote_count": 0, + "width": 624 + }, + { + "aspect_ratio": 2.258, + "height": 298, + "iso_639_1": "en", + "file_path": "/aiPcbXat8pRE76yoR3CNIx22Ef8.png", + "vote_average": 0, + "vote_count": 0, + "width": 673 + }, + { + "aspect_ratio": 3.103, + "height": 253, + "iso_639_1": "ru", + "file_path": "/cmqeULEZhhKOXHYJ6vzMlXibbcZ.png", + "vote_average": 0, + "vote_count": 0, + "width": 785 + }, + { + "aspect_ratio": 2.051, + "height": 294, + "iso_639_1": "it", + "file_path": "/m4waWf0UM1DzZklnTmmtr8E09L6.png", + "vote_average": 0, + "vote_count": 0, + "width": 603 + }, + { + "aspect_ratio": 2.303, + "height": 290, + "iso_639_1": "ru", + "file_path": "/kRMHnL2WzklWd3hDBfO1931mime.png", + "vote_average": 0, + "vote_count": 0, + "width": 668 + }, + { + "aspect_ratio": 2.73, + "height": 289, + "iso_639_1": "pl", + "file_path": "/sH5ABmBvW5se3RDXA9sophxEVTu.png", + "vote_average": 0, + "vote_count": 0, + "width": 789 + }, + { + "aspect_ratio": 2.521, + "height": 309, + "iso_639_1": "en", + "file_path": "/ilphe6LHkTUOXRRfDAGDVKbYB42.png", + "vote_average": 0, + "vote_count": 0, + "width": 779 + }, + { + "aspect_ratio": 2.177, + "height": 727, + "iso_639_1": "sk", + "file_path": "/dwYd6qNWjmNUS0z1xQYCVKkiOzi.png", + "vote_average": 0, + "vote_count": 0, + "width": 1583 + }, + { + "aspect_ratio": 1.877, + "height": 716, + "iso_639_1": "pt", + "file_path": "/w2mJvdVm0LorIozVqCQuNALTft8.png", + "vote_average": 0, + "vote_count": 0, + "width": 1344 + }, + { + "aspect_ratio": 1.539, + "height": 228, + "iso_639_1": "hu", + "file_path": "/aYZ5vmeD6TDTiwzAyQIR7NCQiEC.png", + "vote_average": 0, + "vote_count": 0, + "width": 351 + }, + { + "aspect_ratio": 1.721, + "height": 810, + "iso_639_1": "ja", + "file_path": "/ifdZxDP40GDJei0qL6SYZFJQWpK.png", + "vote_average": 0, + "vote_count": 0, + "width": 1394 + }, + { + "aspect_ratio": 1.83, + "height": 853, + "iso_639_1": "en", + "file_path": "/ixpUM1tb5Agndhaz5Fh8MFUiul7.png", + "vote_average": 0, + "vote_count": 0, + "width": 1561 + }, + { + "aspect_ratio": 1.266, + "height": 290, + "iso_639_1": "fi", + "file_path": "/o9O5l07fNa10FFFHkuLTyQIw0Im.png", + "vote_average": 0, + "vote_count": 0, + "width": 367 + }, + { + "aspect_ratio": 4.079, + "height": 353, + "iso_639_1": "zh", + "file_path": "/kdAAjJFcUV0DBeTMYHw8QbRPRFx.png", + "vote_average": 0, + "vote_count": 0, + "width": 1440 + }, + { + "aspect_ratio": 3.006, + "height": 479, + "iso_639_1": "zh", + "file_path": "/17pjrC1jdTAYJudHRxywIyxyVR5.png", + "vote_average": 0, + "vote_count": 0, + "width": 1440 + }, + { + "aspect_ratio": 1.919, + "height": 1299, + "iso_639_1": "el", + "file_path": "/un6a1qjFebJTl4vnluZC9PKY1cr.png", + "vote_average": 0, + "vote_count": 0, + "width": 2493 + }, + { + "aspect_ratio": 1.845, + "height": 2076, + "iso_639_1": "he", + "file_path": "/sJC0LwbRZiW3cXn4j9ltXQeJmyB.png", + "vote_average": 0, + "vote_count": 0, + "width": 3831 + }, + { + "aspect_ratio": 3.429, + "height": 231, + "iso_639_1": "es", + "file_path": "/7GZcWmkKb00shSyM3qREEGOdJHJ.png", + "vote_average": 0, + "vote_count": 0, + "width": 792 + }, + { + "aspect_ratio": 1.682, + "height": 650, + "iso_639_1": "fr", + "file_path": "/xQ7UKKyhvth6lEgyzXJjx2wUsQT.png", + "vote_average": 0, + "vote_count": 0, + "width": 1093 + }, + { + "aspect_ratio": 2.473, + "height": 349, + "iso_639_1": "bg", + "file_path": "/wthCghAWPFvXZ6oZ8yROXlfjsdM.svg", + "vote_average": 0, + "vote_count": 0, + "width": 863 + }, + { + "aspect_ratio": 2.72, + "height": 917, + "iso_639_1": "es", + "file_path": "/8uPhhBqgP7Fp4fffaub8aFrDgqE.png", + "vote_average": 0, + "vote_count": 0, + "width": 2494 + }, + { + "aspect_ratio": 2.085, + "height": 1299, + "iso_639_1": "fr", + "file_path": "/tAWXblCLDwhmPMQ62Tp5ZggT5yc.png", + "vote_average": 0, + "vote_count": 0, + "width": 2709 + }, + { + "aspect_ratio": 4.034, + "height": 238, + "iso_639_1": "zh", + "file_path": "/btyCJPcb5vTYZrxycV0kP7TJbnd.png", + "vote_average": 0, + "vote_count": 0, + "width": 960 + }, + { + "aspect_ratio": 1.884, + "height": 292, + "iso_639_1": "hu", + "file_path": "/uZ2WzrkxbiPKqcyB9Yks6tQv6Ho.png", + "vote_average": 0, + "vote_count": 0, + "width": 550 + }, + { + "aspect_ratio": 3.162, + "height": 784, + "iso_639_1": "he", + "file_path": "/caphvmadWJHJqAwKJ9IlTKfPVu6.png", + "vote_average": 0, + "vote_count": 0, + "width": 2479 + }, + { + "aspect_ratio": 1.698, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/apZYsHS3nRbqQvLzcZt9w4URm8J.png", + "vote_average": 0, + "vote_count": 0, + "width": 2207 + }, + { + "aspect_ratio": 2.251, + "height": 1298, + "iso_639_1": "zh", + "file_path": "/tDIqxNfa58Jowg8XZ3DNY28RFTj.png", + "vote_average": 0, + "vote_count": 0, + "width": 2922 + }, + { + "aspect_ratio": 2.354, + "height": 1506, + "iso_639_1": "zh", + "file_path": "/8tXTLbPfByavI6J1j1kEDNtjz7c.png", + "vote_average": 0, + "vote_count": 0, + "width": 3545 + }, + { + "aspect_ratio": 1.714, + "height": 1792, + "iso_639_1": "pt", + "file_path": "/ygTZkCGxOhW0tmBZViPnwVtiZlO.png", + "vote_average": 0, + "vote_count": 0, + "width": 3072 + }, + { + "aspect_ratio": 1.993, + "height": 1343, + "iso_639_1": "pt", + "file_path": "/iAbNbkFAAt5EQdz6l6fu13Q9FPS.png", + "vote_average": 0, + "vote_count": 0, + "width": 2676 + }, + { + "aspect_ratio": 1.295, + "height": 1375, + "iso_639_1": "pt", + "file_path": "/wJFnyUfaEWqvZd4RWAfgiOO3t9L.png", + "vote_average": 0, + "vote_count": 0, + "width": 1780 + }, + { + "aspect_ratio": 3.576, + "height": 757, + "iso_639_1": "pt", + "file_path": "/sYo1yWKw8DUquJMUgueppizKPqf.png", + "vote_average": 0, + "vote_count": 0, + "width": 2707 + } + ], + "posters": [ + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/fpEC910v5DrMvZteRNlKzXeHiHY.jpg", + "vote_average": 8.596, + "vote_count": 7, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/mxhaOjcX1BdWw26s6c8vcZeKqzj.jpg", + "vote_average": 7.542, + "vote_count": 8, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/Aa0ZpMF0O653YQHifebdT2MRZvw.jpg", + "vote_average": 6.722, + "vote_count": 9, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/6wkfovpn7Eq8dYNKaG5PY3q2oq6.jpg", + "vote_average": 6.438, + "vote_count": 24, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/x5jfgaL2N3TpwUNuMwkfQi6Jev8.jpg", + "vote_average": 5.53, + "vote_count": 17, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/ytD3zCzQSC89lxfIwm2Seq6hW9S.jpg", + "vote_average": 4.934, + "vote_count": 15, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "zh", + "file_path": "/c9sZHxvxqrS0K10sgxWZ0gOT7v7.jpg", + "vote_average": 4.818, + "vote_count": 11, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/kzmx6YYSQ85hkLTIoRRjmkBR2y.jpg", + "vote_average": 4.818, + "vote_count": 11, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/pojM2jS4YOyBJ2acttFmpyEu9gh.jpg", + "vote_average": 4.722, + "vote_count": 9, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/xQzMnuiv81d0gfUIVstuleNutjA.jpg", + "vote_average": 4.722, + "vote_count": 9, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "en", + "file_path": "/uRg9EBTLAPeA3vXfo0vT2pTagHQ.jpg", + "vote_average": 4.722, + "vote_count": 9, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/njvYovI7hE19OjHsaWBjWNW2wpj.jpg", + "vote_average": 4.3, + "vote_count": 15, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1845, + "iso_639_1": "en", + "file_path": "/wFqsNrKru8xw1914kEx84yu651k.jpg", + "vote_average": 4.3, + "vote_count": 10, + "width": 1230 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/qRkOFWx9vJMsvjLk6fYapwmG7Rg.jpg", + "vote_average": 3.334, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ja", + "file_path": "/l2s53sR2LAFaP5xDot1CvrKPj8V.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "hu", + "file_path": "/7Xqynlkz7gb7y2xMXpkuZZaHg4h.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "sk", + "file_path": "/g0iGEX95UKl1a1b7SGYAQHxTNq1.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/d9CuwMqap3FoELmom1CmNrPqWnE.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.676, + "height": 1024, + "iso_639_1": "th", + "file_path": "/1RtekzgHqvD1tsn7H5vhNVC3NWb.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 692 + }, + { + "aspect_ratio": 0.7, + "height": 2100, + "iso_639_1": "ro", + "file_path": "/pWHvLQlfVy5D3pq7skqAGDeWe2p.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1470 + }, + { + "aspect_ratio": 0.75, + "height": 907, + "iso_639_1": "ro", + "file_path": "/o0LoIrIzieKepBXenrBoMJyraTa.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 680 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": "el", + "file_path": "/blj8pEa7Wppxy8QcA2bHMjAaPNd.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1600 + }, + { + "aspect_ratio": 0.67, + "height": 1009, + "iso_639_1": "ja", + "file_path": "/fJY6GCs4cOtYFdF9ERJMZM1612t.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 676 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/r9239j2aOUkLrVWUSAybmJb5d6c.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/m8v8KKP1ngTleyPKCqiilHMCsIw.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/zGJQmp9NvNHNlI0W93GrSm8SyRu.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/sLdq2nXI2x8J0wzv4HD1ON9gVcC.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "sv", + "file_path": "/sDhwrprRHvxxXuEG3we4EhEab52.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/A1rFFFukt7k7lBpkAlshLih1EOY.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "da", + "file_path": "/de1lO2Z60XWC3NlkX0SSOFRICLG.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/rJTIURr5HLheJV3HZGBMsAvkJGj.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": "pt", + "file_path": "/pfC6UU9Dik01e80aUPCHI9idDZ.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/gNk8UNAumXlfCdtaxDqsQe7ZGlt.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": null, + "file_path": "/x186WhXYsqOAE2gCfYLY71V3a31.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ru", + "file_path": "/l1LyrhQwDGur18rxRXKQJQhvx7Y.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/4e0X8XDjgLu3H2iKiCz44WEl7dA.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2943, + "iso_639_1": "en", + "file_path": "/lXdrEkSlBL4tK1Zem9HB7lI49vr.jpg", + "vote_average": 2.278, + "vote_count": 4, + "width": 1962 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "ru", + "file_path": "/9DkEtsmLSIvVpmnzRaldXqImyQw.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/ty1n7TPiH3XJ4s6aI7Sv79OTbz5.jpg", + "vote_average": 2.066, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "it", + "file_path": "/1er2Ry42ZdbpOCldUYiwGb9jde2.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/lGsKeSlS19YqjHryzEyDLumxHXA.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/k6tYEdxMfm3rHjiKMe9ySRSsMvU.jpg", + "vote_average": 1.75, + "vote_count": 7, + "width": 1000 + }, + { + "aspect_ratio": 0.666, + "height": 1426, + "iso_639_1": "ru", + "file_path": "/ettYNNm1eehROqF046LuJ7Ycd4n.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 950 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/noVm3w6RiIftkvLZbi7upH2Ws0S.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "pt", + "file_path": "/aj8CvBL1eLUEGjFDf9LH5BBLXCg.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1400 + }, + { + "aspect_ratio": 0.667, + "height": 1035, + "iso_639_1": "es", + "file_path": "/rJwpYgQWfebnNnIIKSUTUx3sBc4.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 690 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "it", + "file_path": "/7ozBHvOoDDi4UcBWbz3N7SGOKdm.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "it", + "file_path": "/a6BcynBYR1k8myxhzb76SGjoMhr.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "it", + "file_path": "/PpyS3rX2RviMxmtHnXxWz0aXj1.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/vP0yuokoHVewTeffFN5Qd2O5ZD6.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.657, + "height": 3000, + "iso_639_1": "en", + "file_path": "/onVDgjoghC31JPdkHki6bRqFRzg.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 1971 + }, + { + "aspect_ratio": 0.667, + "height": 1362, + "iso_639_1": "el", + "file_path": "/iAx1W7XZkl37xDl9gDWM4Rmnavj.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 908 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "tr", + "file_path": "/oHVjAucv1yMPIxwBX6WvEMNJvTj.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/sXzr8WEg9cx3m7gyPFKLaLCjINb.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/31NGgjKfHcp9GFe6enVPrNkjHsW.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/lxNRGnV6YHrI1x8ciTbtMdFM357.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/o1HNcvikeCpfCEe0ZlFTf0WCql4.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "uk", + "file_path": "/4JlMFS5g0ZOsYs1aWQmXpcTVpnV.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/k1YCqriXqMr3ylOndPvJkpGxb6o.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1426, + "iso_639_1": "en", + "file_path": "/1uNt0PVd7eU2u4Idnx2pdjiKuhT.jpg", + "vote_average": 1.75, + "vote_count": 3, + "width": 951 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "tr", + "file_path": "/rYorGW7FiUWz7G93qZgSXOJjniQ.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.665, + "height": 1067, + "iso_639_1": "en", + "file_path": "/ozM5jylBU1uO5zlN6yybrKoC77C.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 710 + }, + { + "aspect_ratio": 0.666, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/3aJgTQi5oqVUhZUJmPV1d1dKJUm.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 866 + }, + { + "aspect_ratio": 0.675, + "height": 2000, + "iso_639_1": "en", + "file_path": "/hacYNfEUEgbNuO9EFUcufOI92MR.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 1350 + }, + { + "aspect_ratio": 0.675, + "height": 1559, + "iso_639_1": "en", + "file_path": "/cu0ddfeY8gSkZs1SMZsZUia4JSX.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1052 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/xHAr8aJr3PitA5GlFet57yjEKs0.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/zJmdZWr68MNjxHOrZo65HWN2Se9.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.666, + "height": 2000, + "iso_639_1": "es", + "file_path": "/ceqY4pkxpMzeqPu2KB22i1APDIr.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 1333 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/5SltasuTDYRKERXSvLAVEwLP18d.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/icejFogSa3IFiGskyP6wT5JbAyg.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/uiieY7M3jPMrC8B3HArhxdtDF9c.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.67, + "height": 2967, + "iso_639_1": "en", + "file_path": "/oX2ifeqLkcPdPkUp9zRkYE6o2Cv.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1988 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/mPMLMegnfWc8GEYHrQWJO58XBgO.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": "en", + "file_path": "/ykqIumGYrFhk8G1NW7RCZD69OY6.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/alNrU6nvf9JnnZ1GJJdjP7ILR1L.jpg", + "vote_average": 1.714, + "vote_count": 7, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "es", + "file_path": "/iLCabaLrU2xSJ6rgVYCNE0ef0yK.jpg", + "vote_average": 1.714, + "vote_count": 7, + "width": 1400 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/uQiZgiph1ws2KXArHg51qx15pqC.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 2000 + }, + { + "aspect_ratio": 0.647, + "height": 1227, + "iso_639_1": "en", + "file_path": "/7dj5H1bsT3vayTIiBbpyqNZGXC4.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 794 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": "uk", + "file_path": "/wNLNSAjzwXIEGCHorO8PcF1cdtJ.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1280 + }, + { + "aspect_ratio": 0.68, + "height": 1000, + "iso_639_1": "fr", + "file_path": "/cMEyap16nz07KzAAuxg8S0wfSwD.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 680 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/tU9m4SyzhHczlFZJvEPsfoyHymq.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.655, + "height": 2963, + "iso_639_1": "en", + "file_path": "/m2A5oPofyjOla0Mfk3MGpWTwt2G.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1941 + }, + { + "aspect_ratio": 0.667, + "height": 1200, + "iso_639_1": "en", + "file_path": "/gFNDuzomx0Cuok9B6tYBVC5aoLN.jpg", + "vote_average": 1.31, + "vote_count": 7, + "width": 800 + }, + { + "aspect_ratio": 0.694, + "height": 1080, + "iso_639_1": "zh", + "file_path": "/7Dw52Z5IiZpCVu5o5ywD4zYL1U2.jpg", + "vote_average": 1.31, + "vote_count": 7, + "width": 750 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/nuJt3fhl2J9aiCY7PLXYrA0av92.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/gfAndXRvNCg98dm3ZmN027ogggl.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.666, + "height": 1000, + "iso_639_1": "en", + "file_path": "/nBIM1vh1jDjpg51k8ygKB0Ihk3C.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 666 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/lF0dGH7nyxzEbVzgRrwF7tMDpLN.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "es", + "file_path": "/q81EQKN0ZsqZ1z8gMbhR6Vvtdr3.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/62WhgFn1N6Xgt1F1f5m6yl78vB7.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/3WBuFlQWrGvKihImicuLbAmV9l2.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.649, + "height": 1850, + "iso_639_1": "en", + "file_path": "/pxaPGCQgoTvp9ou1gVIztvxZXqw.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1200 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/saAsRBOJHP6cn4P7BfumHaomdS2.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/sOL4akR5SFsufgMthsILSZWblTJ.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2562, + "iso_639_1": "pt", + "file_path": "/vAItX7xWJlkfAtPwBvP4rEcPdB0.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1708 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/tyhcgUpyLjtWU9py5nDcke2IzVc.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/5LJd9hCRZnZFerBdt4P12WMu0qw.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.699, + "height": 1431, + "iso_639_1": "en", + "file_path": "/6OffuMP9ZFUIecwzRoMKg99am4D.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1426, + "iso_639_1": "en", + "file_path": "/2oNYV77iyY0E6xsUdZM8QcQjTfZ.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 951 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/ikVBhc3TqYXKC5AJIOqHzjFWIi9.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1426, + "iso_639_1": "en", + "file_path": "/tSxFKmfkrnK6hrdbGoO5gHEXehy.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 951 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/4bQSbUcjl1VgEZXWuSzKg4AoGDO.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/m8d5eMFJbnC4qkVIdS31cVcvLEv.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1426, + "iso_639_1": "en", + "file_path": "/h1oZlAQuT23oJWZnh2KOVOxkAQM.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 951 + }, + { + "aspect_ratio": 0.667, + "height": 1426, + "iso_639_1": "en", + "file_path": "/obMZoW6sqyV12mUjfOPHfDa04BW.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 951 + }, + { + "aspect_ratio": 0.667, + "height": 1800, + "iso_639_1": "en", + "file_path": "/vERrNiXd2cGsmOnY8iH1JAbzkPk.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1200 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/fP25i4J7Xk99MKwmnQH9TGiCYzY.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/sDauK0psLmBZ5TmMpgDsN83moHl.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/yjPj7c7tZYRLJJ2ijLMZLvofR4V.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ru", + "file_path": "/g2C6ZhDinwzZ0GjNuZOzq2gRDhB.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/gCtB3mwcgoDkLEEV9nXPav3iY1N.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/imG8fTt9SvQZmustisAVxgJUz3n.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/k3UPNQn75SdyFKHL5Cz0wfQGfFW.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": "de", + "file_path": "/9QUZTdBViVHNgL6JYG7zef9wak8.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1280 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/uQ7i643c2uRrmZslySv7b7Nbece.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "en", + "file_path": "/mQqncx4XMYkW1AbtFzFCCn6A8nQ.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/kvMbOQErVY7jYjrvXJ1UuIHE69v.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/pB0iy9c54EomlWc4gmJazLfyCw4.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/lz1VTbZN4DUHFQZhWsgozK2BriI.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "en", + "file_path": "/9RjRyhKUz9reXaaDpVEJXpYtPdV.jpg", + "vote_average": 0.904, + "vote_count": 7, + "width": 1000 + }, + { + "aspect_ratio": 0.75, + "height": 2560, + "iso_639_1": "en", + "file_path": "/kJj1ZQ9AFuxPGxgZSJd8Uz6FdYf.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/9TXPOUiXKA1uXOtTlBScUu9KiiW.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/jlH7cI4uqV2S7KMzTZ8ljWCFSSb.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "fr", + "file_path": "/uvfyjh6JSIKYbyGwlB6PfvoNwFK.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "fr", + "file_path": "/sso7CWveqUuhllBePXzBPqy9pS0.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "sk", + "file_path": "/fpE8P5AhDO8vd2wXHHSB7AmpQbB.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "sk", + "file_path": "/w6OEh7vYkig2yXgfjHPLcF0VjF1.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ja", + "file_path": "/wVzY9Lo1b0dM57HGS9ciTgdPVFm.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/rGGbshitsZt6JXLf9StHT8UlUgk.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/2HeYOCwXwWLPtvLvyuKxU54xzBa.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "ja", + "file_path": "/g7YJGTK4bXuYNDVTIalwcjkglGG.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1400 + }, + { + "aspect_ratio": 0.665, + "height": 753, + "iso_639_1": "pt", + "file_path": "/aGECnGvJyfIRHQIlYuP56TfUJfN.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 501 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/gDWdsJEQycbuhtZeE6m5lqTpLl6.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "en", + "file_path": "/s3gTZQnmZuDkt2gPwWFwmcZl5zX.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "en", + "file_path": "/jRUKW5NOlY0UCtwTgnC6Zp6Fznl.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/39UaMHK4rszoL4Mf3gzyOLHzmH3.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "en", + "file_path": "/dbqdHitY8bwWMu3u57HEzlNXB0d.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "en", + "file_path": "/sCNwyRuh9KFgNhyOiP9tgWedvHL.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/vr70waqlh4ffir1prkuMMzz41if.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 999, + "iso_639_1": "en", + "file_path": "/bZBABmRrbRDyBbtIYVO9E7pW7Nw.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 666 + }, + { + "aspect_ratio": 0.667, + "height": 2700, + "iso_639_1": "da", + "file_path": "/oJIsJb0jCgHhWv66R4IiBJhytWa.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1800 + }, + { + "aspect_ratio": 0.705, + "height": 1452, + "iso_639_1": "de", + "file_path": "/nfSLiqfaGZ1dYjwLGJVg6lldXa0.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1024 + }, + { + "aspect_ratio": 0.709, + "height": 750, + "iso_639_1": "de", + "file_path": "/zzMXNeQznGXfgNYYH19OGHKm8Tz.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 532 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/60fiAA7HrWxfOy05IUWqhbAY9N6.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/eOrC5XuVULg8i7IbrOPXQlgeH6l.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "en", + "file_path": "/u1NtjwylC9PqiqeYrywo4vIYIww.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": "en", + "file_path": "/n3imUmur8pHufj7jCAqvlTtcAt3.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1280 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/a10s37SFMrBDUCmo1NGCkNmlVhZ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/xkwpfajkJ1ytQ5x2HoM2nslkIMp.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.713, + "height": 1860, + "iso_639_1": "de", + "file_path": "/n3nDPU27LquhbVlCVHf6c8GCeeM.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1326 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/fyH9lo8DpbuHiXanyir3lTvhgcL.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/yqdrkRwfpuJG2uCKGoBGeSzek3.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 960, + "iso_639_1": "de", + "file_path": "/qxB64T5vs9o7l2egw4mcQAfn8rz.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 640 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "hu", + "file_path": "/3FM1YuwLoJitOYlWXBPgNkAojNY.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/iHXUmgttJh7JK991HQDGYySLysX.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/Xjc6YygsO33i1VZvVVl24CMLPZ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/jfBv4vq25rMcvFcWVnzDP2GdYMf.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1200, + "iso_639_1": "de", + "file_path": "/eMzTIMJ9RiSRUDBbqxfAIqgUDse.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/qArqUPsQFrAWLfmOYD1KmfDqEDX.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.666, + "height": 1528, + "iso_639_1": "de", + "file_path": "/kuFdxNkrK5QJIJl65uhsgHTpWGQ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1018 + }, + { + "aspect_ratio": 0.71, + "height": 845, + "iso_639_1": "en", + "file_path": "/nzDShcMySru1bvcGsXPkg0jROqG.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 600 + }, + { + "aspect_ratio": 0.676, + "height": 1536, + "iso_639_1": "en", + "file_path": "/1bPVrijZq9wN7fDuqBl3nqFvoVn.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1038 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/8qgid4YvaoyNNEp1JMVT0PD6jc6.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/cQoGcwd3SUD0tzNrc9gqbr0bq5F.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/3A8i1DiGKClI7su7bl8AIIJzCI8.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "bg", + "file_path": "/1SiegFF674pN3O29Kozb0YF04rL.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1098, + "iso_639_1": "en", + "file_path": "/37XlDwZi3QMOnCqA6FsqskIUaEw.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 732 + }, + { + "aspect_ratio": 0.694, + "height": 1440, + "iso_639_1": "ko", + "file_path": "/pt7oxFkvQFzXD0ByCe1uJumL6vD.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "hu", + "file_path": "/bcoYmeQDtlEu8MrwM1FlIoWIY7p.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "cs", + "file_path": "/g0fFRDE3yrgm44dBY1n4PvnNlhh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "hu", + "file_path": "/ta7AQRs9yBAHL3eXXCYil1wfouZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1400 + }, + { + "aspect_ratio": 0.698, + "height": 859, + "iso_639_1": "it", + "file_path": "/A4KquUKtJ7yB9WY0MlD3XZw6F1r.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/9YC9HYu9O1LLf655AOrqrRVnZeR.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.748, + "height": 1069, + "iso_639_1": "hi", + "file_path": "/qgZdwXcjTOkEC4oAOkcNpGB9Jmd.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pl", + "file_path": "/l1kgucN5ZinWwurSFXH9YdM6QjY.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pl", + "file_path": "/igPuH7GCiYN8p5FUmiWB8OgWGXU.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ru", + "file_path": "/oeL5ClBRWl7gJZxFFaxiFsdTV5B.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.69, + "height": 1160, + "iso_639_1": "zh", + "file_path": "/jJBwlLW3gwfewqhnnYLeSfc1ocI.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 800 + }, + { + "aspect_ratio": 0.692, + "height": 1445, + "iso_639_1": "bg", + "file_path": "/bADF1Px6qwoTIp8idwgz7uqmRBB.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "cs", + "file_path": "/j4hW4jO4xfeskglNxQEqjZknaTE.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.707, + "height": 2246, + "iso_639_1": "it", + "file_path": "/1uGmCdmvhiFF72Xspzlq33ECzKL.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1588 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "it", + "file_path": "/vTiaQo1aqXNqoTPGiir03tcBHlh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.699, + "height": 2815, + "iso_639_1": "ko", + "file_path": "/1j2UhKIM2ZYNJ2IWKtHOqjKfqOH.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1969 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "th", + "file_path": "/wQ6zi5m0l6c2LmMasNQZGx9HhOA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2175, + "iso_639_1": "de", + "file_path": "/5DEIVbU0tUCH0x27KOKe3o6Mxtu.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1450 + }, + { + "aspect_ratio": 0.667, + "height": 1426, + "iso_639_1": "hu", + "file_path": "/nk64EySpwpA0xICymjmt3lgaT7H.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 951 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "sv", + "file_path": "/ph1lGcIDQ8RlDpqdc2aTVeE1Nd8.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1362, + "iso_639_1": "el", + "file_path": "/oGiXFb3fWTB7oDhdS3RsxDOEnPW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 908 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "hr", + "file_path": "/fIpO81njrqXPCJsNPKXXdw8U3vw.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fi", + "file_path": "/oeIZYfy98pVqsUs7v1DhrmdE2Dn.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "vi", + "file_path": "/a0GPS8G1IVOwsfKY8Quc9963RRE.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "tr", + "file_path": "/jcyNaqQE7CkSeQW7FDqiwij3bhx.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/p3oslbQr51A6y5mUdPbGDTtaE8b.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/f2h5JDCIS0PKAP9DYD7Twgs0r1b.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "en", + "file_path": "/b1PrMA3i4FqaXIjM42wiRGNjP14.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1365 + }, + { + "aspect_ratio": 0.75, + "height": 1067, + "iso_639_1": "en", + "file_path": "/csR9qYmOW2bPNdIuEaeRUH7J3Kj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/tVuQB7tV3n4Wv292H9qpmTnXkWW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/8WfzsM2kOWJK7Re6MNCE3jU2Q3d.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.666, + "height": 2000, + "iso_639_1": "de", + "file_path": "/b4V0HABuhjzWUhYErR20lJqJXfW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1333 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/bNpXQ3gFTxldFORsQORNmpriCxS.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/sYZANbmAt5KIc80wjT19xG6OqML.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/8GVP3zHXixHcX0WRSRYBBFzN1QC.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.666, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/tMtNBBzpGwk1nvA313wSCEU50fx.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 866 + }, + { + "aspect_ratio": 0.683, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/4H6EOlMEEQtRj59Ahzt8XInBr1d.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 888 + }, + { + "aspect_ratio": 0.666, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/wgQGrfwdJrSygB2MjCVijHgFJQL.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 866 + }, + { + "aspect_ratio": 0.666, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/wWzKgPz3PowjnpFYjlmS5cfaWXo.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 866 + }, + { + "aspect_ratio": 0.666, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/5N2wKWE2BEcdDZYbnTX8KGSqSmw.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 866 + }, + { + "aspect_ratio": 0.683, + "height": 1300, + "iso_639_1": "fr", + "file_path": "/63gg9zulkeJmr6NmFGRf5CapFca.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 888 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/34U5VzqJtq9kxeMFGqR73MMUCjh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "ru", + "file_path": "/j3o90rNUx9VqKPtpebkPwAxduuT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.702, + "height": 1280, + "iso_639_1": "ru", + "file_path": "/lWPtYHdX2iA79azURpslFRp7j6e.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 898 + }, + { + "aspect_ratio": 0.667, + "height": 2399, + "iso_639_1": "en", + "file_path": "/tDWqkQePaPVZ6rF6m4L9qVbAasC.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": "en", + "file_path": "/8Ra1TQThFijX85m74VzopyQmWSf.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "el", + "file_path": "/huPeNlDbr33hOcB8hT7uf9ykEdo.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "hu", + "file_path": "/g1JMPaVb4PeUC3XNP1OkPhr22yc.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.675, + "height": 2133, + "iso_639_1": "en", + "file_path": "/dqQ8iaVjnwfUQ08hbsWqiZGdBEZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1440 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "bg", + "file_path": "/lP7ibHWrwYF6Re0wntSuxaRRJye.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2943, + "iso_639_1": "en", + "file_path": "/29lgDxlfUb2uRVLwUzOWlsLs32D.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1962 + }, + { + "aspect_ratio": 0.667, + "height": 2943, + "iso_639_1": "en", + "file_path": "/hA87FQPNa4tJYBCNMX4Ts4UvlTy.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1962 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/73sJ39KdvYPrXyK10aZMs42lTxT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.656, + "height": 3000, + "iso_639_1": "en", + "file_path": "/sFWBbN74UG2pyWEvthk6t6zahR4.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1968 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/ogPKP0wSyTbc4n5uncdLb4YJmEz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/o7j1sXGxlm9iQsRHn3vzU7lJGQa.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/lG1sX5M39XSJwdzgq3C13DbjRoU.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/dOGPNupQQipf3d5UX3zHdpdQejX.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/k3DalI2fz5nMY6Ds00pW20abM37.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1200, + "iso_639_1": "en", + "file_path": "/r8N7DH8UOnH8pvVPMUHAEnhFzmz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/2BeSKt4uEwJTTdOmmC4lqi9zvCt.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.666, + "height": 1211, + "iso_639_1": "en", + "file_path": "/fevhMH2UI2kV6DaECLTAkQNMB3w.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 807 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "en", + "file_path": "/9ZvDif6j4bKlIAbMqwnaUuqhaGz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 500 + }, + { + "aspect_ratio": 0.679, + "height": 920, + "iso_639_1": "es", + "file_path": "/tGY10vF87nh9AsBOhWdh2gDmqnR.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 625 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/p4eOT5LNYNGm6SznEdleXKIuWoA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1314, + "iso_639_1": null, + "file_path": "/jNletvIKtZKQjQhbAhcmmLZ4vrG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 876 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "en", + "file_path": "/iAg2Xyzoswk64bbgp84fPQJKqkE.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "en", + "file_path": "/dGpm2E32pc2hGfyyuxnJEH7x9uB.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 2670, + "iso_639_1": "en", + "file_path": "/cisZBI1s3D5puRAeXozRHA7ppZg.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1780 + }, + { + "aspect_ratio": 0.667, + "height": 1209, + "iso_639_1": "en", + "file_path": "/hVGTPscQzRpC9i1m1505DzIOWps.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 806 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/amHi3LqwTWrfGukzlfI9D0FI39p.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/q997YT7rZYNs6Ml67Qq9vvyZnRm.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.75, + "height": 800, + "iso_639_1": "fr", + "file_path": "/aicfkI8htpRFQ5GenqkAq0P3Qrd.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": null, + "file_path": "/jaE2w22P6TJDQ2KMcIfWaejoMTK.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/1SiCdhpBnzEtq94HkkCTRp6gj66.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/t4RwVAzz7U4qJxdfBms72iEoSPW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/kZZO7e2zlmDszQkla6zeTstOfFq.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2859, + "iso_639_1": "en", + "file_path": "/vjtcDMOk2OxlfRPJM3PXT6o47WG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1906 + }, + { + "aspect_ratio": 0.667, + "height": 1008, + "iso_639_1": "en", + "file_path": "/ndklvqYnwYFN1HeymvXmHfdNW2x.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 672 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/g2DMvPDhDisC3IMfAan7lJHsT0K.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/iITWh6oLU6DQI1oTIpmAg2L3Dal.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.679, + "height": 750, + "iso_639_1": "zh", + "file_path": "/9kzGr45xLLUx0ed2bXmySVZLZyM.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 509 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/kYkeHi1jwTOkBmR03bAmcYEenq4.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/4rjatbWmGGmu0DZs6WNpXaUWqWN.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/kqZhdlwB0iZFrQGmfMoWeywHT4v.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1125, + "iso_639_1": null, + "file_path": "/e9Pf0x3bZGQL3NSU9BOeWqU1JMZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 750 + }, + { + "aspect_ratio": 0.67, + "height": 1044, + "iso_639_1": "en", + "file_path": "/4dXgACvaZnzDrH7nY1QhS0JRhNp.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 700 + }, + { + "aspect_ratio": 0.695, + "height": 1093, + "iso_639_1": "he", + "file_path": "/5Y1u3hUUfW3LxJ90e5BkaunOMHz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 760 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/cBTzOahpl5BypQSZtDItg5mkCLr.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/npYngi9SysMGPSb9w2dG3rMDJAL.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "no", + "file_path": "/dv6Pat0R1Puxgkj3cEpKd64iWkk.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1365 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/oopP8cDQexvXS5y6eXdALtucQXc.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "en", + "file_path": "/9KmvSD8vSAm51lvYXyBzmOZIVyv.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "en", + "file_path": "/5jTzcAo6A5HBn9O8ItEtuqjVxie.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1365 + }, + { + "aspect_ratio": 0.699, + "height": 2048, + "iso_639_1": "en", + "file_path": "/5xnghkcJASzPUk3R5wXZwXTDwHx.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1432 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/eDW5qJBMRwL1jYVwijbbtgWvPj9.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.714, + "height": 2100, + "iso_639_1": "en", + "file_path": "/3upRdskGl7ndnjPPKam5Pd7SZ1V.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": null, + "file_path": "/cbdQWgh0oE50pC5I9NKRpRxDi0P.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 0.667, + "height": 1920, + "iso_639_1": "en", + "file_path": "/8E4ct2agpsO8ADo4DcgQ85A9JzZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/2pD6Bks4O2bMlcgb6mRvlYLsLN7.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-1893.json b/providers/.cache/tmdb_api/tmdb-movie-1893.json new file mode 100644 index 0000000..8f805e3 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-1893.json @@ -0,0 +1,66 @@ +{ + "adult": false, + "backdrop_path": "/wDe8LzwuvHYYiuwyNfxdYQq8ti4.jpg", + "belongs_to_collection": { + "id": 10, + "name": "Star Wars Collection", + "poster_path": "/22dj38IckjzEEUZwN1tPU5VJ1qq.jpg", + "backdrop_path": "/4z9ijhgEthfRHShoOvMaBlpciXS.jpg" + }, + "budget": 115000000, + "genres": [ + { + "id": 12, + "name": "Adventure" + }, + { + "id": 28, + "name": "Action" + }, + { + "id": 878, + "name": "Science Fiction" + } + ], + "homepage": "http://www.starwars.com/films/star-wars-episode-i-the-phantom-menace", + "id": 1893, + "imdb_id": "tt0120915", + "origin_country": [ + "US" + ], + "original_language": "en", + "original_title": "Star Wars: Episode I - The Phantom Menace", + "overview": "Anakin Skywalker, a young slave strong with the Force, is discovered on Tatooine. Meanwhile, the evil Sith have returned, enacting their plot for revenge against the Jedi.", + "popularity": 7.5815, + "poster_path": "/6wkfovpn7Eq8dYNKaG5PY3q2oq6.jpg", + "production_companies": [ + { + "id": 1, + "logo_path": "/tlVSws0RvvtPBwViUyOFAO0vcQS.png", + "name": "Lucasfilm Ltd.", + "origin_country": "US" + } + ], + "production_countries": [ + { + "iso_3166_1": "US", + "name": "United States of America" + } + ], + "release_date": "1999-05-19", + "revenue": 924317558, + "runtime": 136, + "spoken_languages": [ + { + "english_name": "English", + "iso_639_1": "en", + "name": "English" + } + ], + "status": "Released", + "tagline": "Every saga has a beginning.", + "title": "Star Wars: Episode I - The Phantom Menace", + "video": false, + "vote_average": 6.566, + "vote_count": 15219 +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-278-alternatives.json b/providers/.cache/tmdb_api/tmdb-movie-278-alternatives.json new file mode 100644 index 0000000..280c954 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-278-alternatives.json @@ -0,0 +1,110 @@ +{ + "id": 278, + "titles": [ + { + "iso_3166_1": "SE", + "title": "Rita Hayworth - nyckel till flykten", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "肖申克的救赎", + "type": "Mandarin title" + }, + { + "iso_3166_1": "GE", + "title": "Gaqceva shoushenkidan", + "type": "" + }, + { + "iso_3166_1": "AZ", + "title": "Şouşenkdən qaçış", + "type": "" + }, + { + "iso_3166_1": "RU", + "title": "Искупление Шоушенком", + "type": "" + }, + { + "iso_3166_1": "AZ", + "title": "Shoushenkden Qacish", + "type": "" + }, + { + "iso_3166_1": "IR", + "title": "Rastgari Dar Shawshank", + "type": "" + }, + { + "iso_3166_1": "IL", + "title": "Homot Shel Tikva", + "type": "" + }, + { + "iso_3166_1": "JP", + "title": "Shôshanku no sora ni", + "type": "" + }, + { + "iso_3166_1": "RS", + "title": "Бекство из Шошенка", + "type": "" + }, + { + "iso_3166_1": "KR", + "title": "쇼생크 탈출", + "type": "" + }, + { + "iso_3166_1": "FR", + "title": "Les Évadés", + "type": "" + }, + { + "iso_3166_1": "PL", + "title": "Skazani na Shawshank", + "type": "" + }, + { + "iso_3166_1": "JP", + "title": "ショーシャンクの空に:1994", + "type": "" + }, + { + "iso_3166_1": "IR", + "title": "رستگاری در شاوشنگ", + "type": "" + }, + { + "iso_3166_1": "KR", + "title": "쇼생크탈출", + "type": "" + }, + { + "iso_3166_1": "BR", + "title": "Um Sonho de Liberdade", + "type": "" + }, + { + "iso_3166_1": "TW", + "title": "刺激1995", + "type": "" + }, + { + "iso_3166_1": "AM", + "title": "Փախուստ Շոուշենքից", + "type": "" + }, + { + "iso_3166_1": "AR", + "title": "Sueño de Libertad", + "type": "" + }, + { + "iso_3166_1": "BY", + "title": "Выкупленне з Шаўшэнку", + "type": "" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-278-external_ids.json b/providers/.cache/tmdb_api/tmdb-movie-278-external_ids.json new file mode 100644 index 0000000..878dd74 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-278-external_ids.json @@ -0,0 +1,8 @@ +{ + "id": 278, + "imdb_id": "tt0111161", + "wikidata_id": "Q172241", + "facebook_id": null, + "instagram_id": null, + "twitter_id": null +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-278-images.json b/providers/.cache/tmdb_api/tmdb-movie-278-images.json new file mode 100644 index 0000000..a75d663 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-278-images.json @@ -0,0 +1,2682 @@ +{ + "backdrops": [ + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "pt", + "file_path": "/jFkuJbWsciMwgcpOEkJIlxTElEp.jpg", + "vote_average": 10, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/pNjh59JSxChQktamG3LMp9ZoQzp.jpg", + "vote_average": 7.19, + "vote_count": 7, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/zfbjgQE1uSd9wiPTX4VzsLi0rGG.jpg", + "vote_average": 7.076, + "vote_count": 13, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/v8xVDqt8uCul3c3mgx4VpGCwxJC.jpg", + "vote_average": 6.722, + "vote_count": 9, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1440, + "iso_639_1": null, + "file_path": "/kXfqcdQKsToO0OUXHcrrNCHDBzO.jpg", + "vote_average": 6.38, + "vote_count": 21, + "width": 2560 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/9Xw0I5RV2ZqNLpul6lXKoviYg55.jpg", + "vote_average": 5.682, + "vote_count": 11, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/72rRSPAZ82p3KXoGLz2ddTioMQl.jpg", + "vote_average": 5.682, + "vote_count": 11, + "width": 3840 + }, + { + "aspect_ratio": 1.78, + "height": 1180, + "iso_639_1": null, + "file_path": "/avedvodAZUcwqevBfm8p4G2NziQ.jpg", + "vote_average": 5.566, + "vote_count": 15, + "width": 2100 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/irlfhYtHfhZuYpsq2LAoh308NFe.jpg", + "vote_average": 5.25, + "vote_count": 9, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/wPU78OPN4BYEgWYdXyg0phMee64.jpg", + "vote_average": 4.818, + "vote_count": 11, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/gZMgEUYbh0DIBNaRJT0ofxLDJ5T.jpg", + "vote_average": 4.722, + "vote_count": 9, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "pt", + "file_path": "/tXHpvlr5F7gV5DwgS7M5HBrUi2C.jpg", + "vote_average": 3.666, + "vote_count": 15, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1440, + "iso_639_1": null, + "file_path": "/swmgZbeiR1LeNeN3uJkyjr8bq8p.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2560 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/rvXJYSRoxsC2aezXTR4uLaPrSZ5.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "es", + "file_path": "/ftNEUipZUPFMcj87Ffx8MlY1pJs.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/2YYOTdAI7vN4Iid3ckvtfr4NhTE.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/f6YdUroFE8hNuR5EaWrI50Ue8GB.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/ddzwhOgb35Ezu0t1Lo8J7wa2P65.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1152, + "iso_639_1": null, + "file_path": "/qgOl7k1ZjSOWPccDG4D4eqfAHY7.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2048 + }, + { + "aspect_ratio": 1.778, + "height": 1440, + "iso_639_1": null, + "file_path": "/6UntLP7o96AbcN2WTcbVEhZpsF2.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2560 + }, + { + "aspect_ratio": 1.778, + "height": 1440, + "iso_639_1": null, + "file_path": "/b8iMOqi9WuNUKgpjvYCUthApAVL.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2560 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/ztijhkmSL0qikzjHiSRWFtJvmr.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/crLfhuTYadl39DucKK8HcEJctIf.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/6ihu1b2OA0aQY1gp95B7644qeyy.jpg", + "vote_average": 1.444, + "vote_count": 6, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/xXXFdqV965crlxCO3dj3PhtcCAf.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/mor5PrU9cQghuXp7qRw2LedyCRK.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "es", + "file_path": "/qCUjQId2jQS53edDKQXBJojd5sd.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.776, + "height": 964, + "iso_639_1": "de", + "file_path": "/wQP54Zdje3NO0xX8CbmzB07NXNp.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1712 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/odJPRSRkfc5M1HpBoIAFe46RlfI.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/gNCqY2Y6e3wV8cnSVy4Xqpdl6oE.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "fr", + "file_path": "/xcw36ItqqSyzigq7saC0Cj4W1xI.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/pdKcdpxqgCcI0vhDgUkfnFUkNZO.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "en", + "file_path": "/A8dxAysDvK3tL5Gy6oI3VT5nYNT.jpg", + "vote_average": 0.972, + "vote_count": 6, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/1c7EVzpMudkPRwqYU1vjrUnxXX2.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "pt", + "file_path": "/twUBY8YYVW4pgl6ESfdfooIO2qi.jpg", + "vote_average": 0.854, + "vote_count": 8, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/7xofUKLihje3kQGOMLpQpVRO0Bf.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "pt", + "file_path": "/maMr76DU7lMkHUPt8DGtVT5qAwA.jpg", + "vote_average": 0.5, + "vote_count": 6, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "de", + "file_path": "/dpSypP6IjUXJDSFYJAnNoS5KPKR.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "it", + "file_path": "/kIGUJwrRTjiuaDxphhkP1eIeril.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/1bGBTCPC1lcvrNTluh1bgr1dd2F.jpg", + "vote_average": 0.166, + "vote_count": 3, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/36ewyr1LdwwedDQhrlmhsi1nlnc.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/dNjXm72V84kzKW3qniHzYrBVFoC.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.779, + "height": 1536, + "iso_639_1": "fr", + "file_path": "/mz3bXh1VG4NvAfvAhS4UY2FVaK7.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 2732 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/rkIG2F13j9VXqs3Pez3yL9iXGBS.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "es", + "file_path": "/frrvscolmSemAAsDn49dlwhcQF0.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/tumYpUaRYo18cJYVSb89c8XmQE.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "zh", + "file_path": "/f8gJAFEUHiiIX7M5BdIEqJKXD2i.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/3YhI0q3TkT6QVIEVditIemlGmsC.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "ru", + "file_path": "/gwrLg3hlxS5sW9F4tVFZSx7dOiF.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/yM67XrFH3l0GqDbnGR0Q6UjzJoO.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/nC143EDrfsZaeknYcnsk5mHUAgT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/79Q3TAF7azTCGXoJqHuzM7IjEZ9.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "fi", + "file_path": "/n5QAkWiPPpPSZSMce5rpVb4LxbD.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "fi", + "file_path": "/hll6PtBag2KxOaFgIdwtf2qo6bs.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "tr", + "file_path": "/76efEiTtqoPWBIgkCPdRnynYZhU.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/qZNxW24zXzOewK369TbgAsE1dCP.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/e9oWuwOPjXNAE2vaOl1DBj2cjvY.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2034, + "iso_639_1": null, + "file_path": "/yPvBlSMfxbtTlnW4RRdh6VN867F.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3616 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/69JOwL5G1gVxi7734jhj04YNE4l.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "de", + "file_path": "/xU1OGe1Lg5UY3I0Eu6s8At41Gnw.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/yMXRZYGdFa8kcJN9ssl0zrmlhY5.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.777, + "height": 736, + "iso_639_1": null, + "file_path": "/hTBYnYBq7h7KdPGlcmfZZjSLc0L.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1308 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "zh", + "file_path": "/kBgXUIqO1KytikAR6HtyxVaZFMm.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "zh", + "file_path": "/mfMcITepx7XrkwtWmuaVxq5jsFQ.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1125, + "iso_639_1": "es", + "file_path": "/8VigOHKluuIJkOnpwE77Vz1lg2N.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/9h5d3eGBeIS8WEEKpeic63sPIDH.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/p8s2itKovPDMziDBCeuA5xwdIT7.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/sPJoiXSCFEUjkZrRqsQlGg1HF.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1280 + } + ], + "id": 278, + "logos": [ + { + "aspect_ratio": 6.984, + "height": 183, + "iso_639_1": "pt", + "file_path": "/hp0Dbsukf6dOCTltFHeWBEG9nE1.png", + "vote_average": 7.542, + "vote_count": 8, + "width": 1278 + }, + { + "aspect_ratio": 2.165, + "height": 699, + "iso_639_1": "zh", + "file_path": "/oW78Km1bhNE0awyMRo7YNZyTc3Y.png", + "vote_average": 5.87, + "vote_count": 23, + "width": 1513 + }, + { + "aspect_ratio": 3.467, + "height": 225, + "iso_639_1": "zh", + "file_path": "/tSrHl8p6hDaQ4PX0ST8x5ZG3BPy.png", + "vote_average": 5.024, + "vote_count": 21, + "width": 780 + }, + { + "aspect_ratio": 4.516, + "height": 847, + "iso_639_1": "zh", + "file_path": "/ymP8S0nu4mJcqcbNovMzdaOWKgn.png", + "vote_average": 4.934, + "vote_count": 15, + "width": 3825 + }, + { + "aspect_ratio": 4.517, + "height": 847, + "iso_639_1": "zh", + "file_path": "/kMTMkVwc8eg9lSyitAM56fxhYHg.png", + "vote_average": 4.884, + "vote_count": 13, + "width": 3826 + }, + { + "aspect_ratio": 4.517, + "height": 847, + "iso_639_1": "zh", + "file_path": "/iUGNARJHJNqkmpE3jWYdpWkuLz7.png", + "vote_average": 4.3, + "vote_count": 10, + "width": 3826 + }, + { + "aspect_ratio": 4.203, + "height": 187, + "iso_639_1": "ru", + "file_path": "/2FBRJDL06YPtoPTrwU4rTARLs76.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 786 + }, + { + "aspect_ratio": 5.03, + "height": 135, + "iso_639_1": "fr", + "file_path": "/eblAEOleGuhR4xWAGXBTr0rbptu.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 679 + }, + { + "aspect_ratio": 4.266, + "height": 94, + "iso_639_1": "fr", + "file_path": "/4jFpYGcYKqPHvCmZxj7MTqsGxlh.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 401 + }, + { + "aspect_ratio": 4.105, + "height": 190, + "iso_639_1": "zh", + "file_path": "/i3ZntvQU2j2XZCM1GtfcJMUVGyu.png", + "vote_average": 3.334, + "vote_count": 3, + "width": 780 + }, + { + "aspect_ratio": 4.893, + "height": 364, + "iso_639_1": "pt", + "file_path": "/sUfdYqk5ysAz5eZv5Zn1voDs6r4.png", + "vote_average": 2.278, + "vote_count": 3, + "width": 1781 + }, + { + "aspect_ratio": 5.184, + "height": 833, + "iso_639_1": "en", + "file_path": "/8pPq3gJG4oWYonbL6DaHslJeCaM.png", + "vote_average": 1.75, + "vote_count": 2, + "width": 4318 + }, + { + "aspect_ratio": 4.188, + "height": 356, + "iso_639_1": "pt", + "file_path": "/oHg06qP7D8VIRtu01Q84qrXdKbE.png", + "vote_average": 1.31, + "vote_count": 7, + "width": 1491 + }, + { + "aspect_ratio": 3.678, + "height": 214, + "iso_639_1": "pt", + "file_path": "/lYAg1CoC4PtnFCv3DhA5HJ5ueki.png", + "vote_average": 0.5, + "vote_count": 5, + "width": 787 + }, + { + "aspect_ratio": 3.7, + "height": 213, + "iso_639_1": "pt", + "file_path": "/wqBFEKPbpuqWGxfk3J32uXkfU1o.png", + "vote_average": 0.5, + "vote_count": 5, + "width": 788 + }, + { + "aspect_ratio": 5.133, + "height": 746, + "iso_639_1": "pt", + "file_path": "/wUNlm832MeXjYo9fnDzGtg0ZrQY.png", + "vote_average": 0.5, + "vote_count": 5, + "width": 3829 + }, + { + "aspect_ratio": 4.547, + "height": 137, + "iso_639_1": "pt", + "file_path": "/xT5X4J23fesyhRdJkGaQrzN5Na1.png", + "vote_average": 0.5, + "vote_count": 5, + "width": 623 + }, + { + "aspect_ratio": 4.925, + "height": 159, + "iso_639_1": "it", + "file_path": "/hEJz2la3V7w3yMjNWHwIWr5Hp0e.png", + "vote_average": 0.166, + "vote_count": 1, + "width": 783 + }, + { + "aspect_ratio": 5.303, + "height": 218, + "iso_639_1": "en", + "file_path": "/x7nYR0Ep7RwxxCoHidpovmF3qI0.svg", + "vote_average": 0, + "vote_count": 0, + "width": 1156 + }, + { + "aspect_ratio": 5.303, + "height": 218, + "iso_639_1": "en", + "file_path": "/aQWGy7rijv2cs7lUVi0Av3SDedn.svg", + "vote_average": 0, + "vote_count": 0, + "width": 1156 + }, + { + "aspect_ratio": 5.267, + "height": 150, + "iso_639_1": "fr", + "file_path": "/9AQhthshCSlWgL2A3MFZXDdadre.png", + "vote_average": 0, + "vote_count": 0, + "width": 790 + }, + { + "aspect_ratio": 4.4, + "height": 180, + "iso_639_1": "de", + "file_path": "/m01p4bi3FEjQ9VQHkG5lJfvxvhC.png", + "vote_average": 0, + "vote_count": 0, + "width": 792 + }, + { + "aspect_ratio": 2.003, + "height": 293, + "iso_639_1": "es", + "file_path": "/kWaSYmbGzkuln9nK4tmJBLEV0Tt.png", + "vote_average": 0, + "vote_count": 0, + "width": 587 + }, + { + "aspect_ratio": 6.653, + "height": 118, + "iso_639_1": "pl", + "file_path": "/p9cLcbaKyRp6XaT6BbWVwQ5hYqb.png", + "vote_average": 0, + "vote_count": 0, + "width": 785 + }, + { + "aspect_ratio": 5.267, + "height": 150, + "iso_639_1": "fr", + "file_path": "/eJR9LoDkGiUH4Zayp6gcrJewwVI.png", + "vote_average": 0, + "vote_count": 0, + "width": 790 + }, + { + "aspect_ratio": 4.302, + "height": 182, + "iso_639_1": "en", + "file_path": "/9D1HSLHZpTADqk8syKWWg5HSOXU.png", + "vote_average": 0, + "vote_count": 0, + "width": 783 + }, + { + "aspect_ratio": 3.995, + "height": 196, + "iso_639_1": "it", + "file_path": "/98qgchyf4m9MW381hDcenoUWMBC.png", + "vote_average": 0, + "vote_count": 0, + "width": 783 + }, + { + "aspect_ratio": 2.621, + "height": 298, + "iso_639_1": "es", + "file_path": "/iU2fT9lJYQZlquWGE36ULaaOJsw.png", + "vote_average": 0, + "vote_count": 0, + "width": 781 + }, + { + "aspect_ratio": 3.231, + "height": 242, + "iso_639_1": "fr", + "file_path": "/9JGraAI198iJ02os2UFGQqS4MQu.png", + "vote_average": 0, + "vote_count": 0, + "width": 782 + }, + { + "aspect_ratio": 6.429, + "height": 266, + "iso_639_1": "hu", + "file_path": "/yE7TB0jjzYBAecxV439GMfHnjBq.png", + "vote_average": 0, + "vote_count": 0, + "width": 1710 + }, + { + "aspect_ratio": 3.545, + "height": 220, + "iso_639_1": "fi", + "file_path": "/hDcbv5DkUUnNBYLGbzHPvYTR0y4.png", + "vote_average": 0, + "vote_count": 0, + "width": 780 + }, + { + "aspect_ratio": 2.518, + "height": 228, + "iso_639_1": "he", + "file_path": "/ywqSjpyD7J3aWzgOT4jiKu2WKlt.png", + "vote_average": 0, + "vote_count": 0, + "width": 574 + }, + { + "aspect_ratio": 2.727, + "height": 450, + "iso_639_1": "cs", + "file_path": "/wuksxoiLKFkdZ9WM03ZjR7Eg9aD.png", + "vote_average": 0, + "vote_count": 0, + "width": 1227 + }, + { + "aspect_ratio": 2.727, + "height": 450, + "iso_639_1": "cs", + "file_path": "/rKV6sj4pySfqUlBGV4l8YTqTIQ7.png", + "vote_average": 0, + "vote_count": 0, + "width": 1227 + }, + { + "aspect_ratio": 3.16, + "height": 257, + "iso_639_1": "zh", + "file_path": "/iNYFZsbQNsEgKXPRM2NAGlxLoCV.png", + "vote_average": 0, + "vote_count": 0, + "width": 812 + }, + { + "aspect_ratio": 3.076, + "height": 409, + "iso_639_1": "es", + "file_path": "/tCsVQm4fKPT7dSLopKJpjkWLU9h.png", + "vote_average": 0, + "vote_count": 0, + "width": 1258 + }, + { + "aspect_ratio": 2.811, + "height": 318, + "iso_639_1": "he", + "file_path": "/bG1JNKgeGUXczskZHaC1KEXuSHS.png", + "vote_average": 0, + "vote_count": 0, + "width": 894 + }, + { + "aspect_ratio": 1.859, + "height": 1177, + "iso_639_1": "ca", + "file_path": "/iso8ykpAgyq7Rx3epSn9DQQMcDn.png", + "vote_average": 0, + "vote_count": 0, + "width": 2188 + }, + { + "aspect_ratio": 6.091, + "height": 197, + "iso_639_1": "fi", + "file_path": "/pnXouV02leDv0SX59vSeZO2LYXR.png", + "vote_average": 0, + "vote_count": 0, + "width": 1200 + }, + { + "aspect_ratio": 5.662, + "height": 225, + "iso_639_1": "ro", + "file_path": "/1tdLmdgFXk7XhmWTQIN20R3qUqQ.png", + "vote_average": 0, + "vote_count": 0, + "width": 1274 + }, + { + "aspect_ratio": 3.464, + "height": 788, + "iso_639_1": "de", + "file_path": "/oHfeBiORzDEVbF0Z3UbYxOqZSMR.png", + "vote_average": 0, + "vote_count": 0, + "width": 2730 + }, + { + "aspect_ratio": 4.474, + "height": 348, + "iso_639_1": "de", + "file_path": "/AcZ6lNYPBscPTlrLeXYJOvaackB.png", + "vote_average": 0, + "vote_count": 0, + "width": 1557 + }, + { + "aspect_ratio": 5.29, + "height": 945, + "iso_639_1": "en", + "file_path": "/b1ZFSQ1df0LU7UzuWlSpOOe4V8R.png", + "vote_average": 0, + "vote_count": 0, + "width": 4999 + }, + { + "aspect_ratio": 5.29, + "height": 945, + "iso_639_1": "en", + "file_path": "/1K53E8WXQW76Scg8upBObXSrbgN.png", + "vote_average": 0, + "vote_count": 0, + "width": 4999 + }, + { + "aspect_ratio": 3.095, + "height": 1051, + "iso_639_1": "zh", + "file_path": "/p5SdUmfmjp36l78SB0X3ennTDjd.png", + "vote_average": 0, + "vote_count": 0, + "width": 3253 + }, + { + "aspect_ratio": 4.778, + "height": 734, + "iso_639_1": "ru", + "file_path": "/3DFboKRcFLz8dbrBzJ9ZsHJOBO2.png", + "vote_average": 0, + "vote_count": 0, + "width": 3507 + }, + { + "aspect_ratio": 2.5, + "height": 250, + "iso_639_1": "fr", + "file_path": "/gdT94Bp0Lsxg3OBEkge7qsUkCD9.png", + "vote_average": 0, + "vote_count": 0, + "width": 625 + }, + { + "aspect_ratio": 5.292, + "height": 1052, + "iso_639_1": "en", + "file_path": "/5erjifDR4YGHamcsr4X0P9uTS9q.png", + "vote_average": 0, + "vote_count": 0, + "width": 5567 + } + ], + "posters": [ + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/9cqNxx0GxF0bflZmeSMuL5tnGzr.jpg", + "vote_average": 7.5, + "vote_count": 19, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "sv", + "file_path": "/7JlNQZtNQn4h0iXWZ6rsq3eqMlH.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "uk", + "file_path": "/6BRshOK03BnxTedpAhZl2yZBLTY.jpg", + "vote_average": 10, + "vote_count": 8, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/u5hLebzUOBGbnPikIyxI1159lhc.jpg", + "vote_average": 10, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/t30GjttOdb5At1sYy8b3TOwFgWV.jpg", + "vote_average": 10, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ru", + "file_path": "/yvmKPlTIi0xdcFQIFcQKQJcI63W.jpg", + "vote_average": 8.362, + "vote_count": 6, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/uRRTV7p6l2ivtODWJVVAMRrwTn2.jpg", + "vote_average": 7.19, + "vote_count": 8, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/20f2GThu22hp5MgCA4dg3bZ3gTS.jpg", + "vote_average": 6.834, + "vote_count": 12, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/aAdnwqwkKX5PPcr8EdtaiA8AZVl.jpg", + "vote_average": 6.834, + "vote_count": 16, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/xSnM4ahmz692msbMTBsfBWHvR3M.jpg", + "vote_average": 5.928, + "vote_count": 21, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/lnu10JjbS3dhv38UCg832hmvQj3.jpg", + "vote_average": 5.928, + "vote_count": 50, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/umX3lBhHoTV7Lsci140Yr8VpXyN.jpg", + "vote_average": 5.82, + "vote_count": 26, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1827, + "iso_639_1": "zh", + "file_path": "/rlEE82K5m03rRZidFKNzCN67xQ2.jpg", + "vote_average": 5.788, + "vote_count": 106, + "width": 1218 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/q6y0Go1tsGEsmtFryDOJo3dEmqu.jpg", + "vote_average": 5.682, + "vote_count": 55, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/lyQBXzOQSuE59IsHyhrp0qIiPAz.jpg", + "vote_average": 5.682, + "vote_count": 33, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "zh", + "file_path": "/x6cLNyJWKK7jdaqL9UNPlvJJoVD.jpg", + "vote_average": 5.628, + "vote_count": 113, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/5YBgcdKcxGJJOULqsFWlU03vm3V.jpg", + "vote_average": 5.59, + "vote_count": 28, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1350, + "iso_639_1": "en", + "file_path": "/hBcY0fE9pfXzvVaY4GKarweriG2.jpg", + "vote_average": 5.5, + "vote_count": 19, + "width": 900 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/dc1fX265fZIIY5Hab8I7CdETyJy.jpg", + "vote_average": 5.25, + "vote_count": 12, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "en", + "file_path": "/hxcHfW0o5QhY6slqGc7dkEkvo6U.jpg", + "vote_average": 5.25, + "vote_count": 14, + "width": 1000 + }, + { + "aspect_ratio": 0.675, + "height": 1600, + "iso_639_1": "en", + "file_path": "/qTEApvOJ4H7pGWcwDMqr9OcQ5sc.jpg", + "vote_average": 5.25, + "vote_count": 8, + "width": 1080 + }, + { + "aspect_ratio": 0.701, + "height": 913, + "iso_639_1": "zh", + "file_path": "/rPKLWFUML5hf92AuTcpgOSbNFSr.jpg", + "vote_average": 4.918, + "vote_count": 43, + "width": 640 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/xqfTE9FjwD5vS1A6QnyoMdPQUvh.jpg", + "vote_average": 4.154, + "vote_count": 13, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pl", + "file_path": "/sBnhJ4f5KAzg6C3FwnEb8QFj8SB.jpg", + "vote_average": 3.334, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/9OxcvTJwZDjQTFvY2NxiwnSrQS6.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": null, + "file_path": "/jkgkQtCoNVmmKDzKk3ccQRFkAER.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.676, + "height": 1000, + "iso_639_1": "bg", + "file_path": "/8ERqVgbD5JM1DxqeMH89LQf5Wb5.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 676 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/78Pb6FMLMfpm1jUOKTniwREYgAN.jpg", + "vote_average": 3.334, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": null, + "file_path": "/8ns9BU3KmssqML3CFmthddt2qOb.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1200, + "iso_639_1": "pl", + "file_path": "/7Iwiu8Sj0BLlyAglSnfyymkk4t1.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 841 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "hu", + "file_path": "/oBZ36R1z6Ner9TYmZeSWPhHwF7r.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/8o6SYam6HizgkQamJqIs511rAaN.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/g6T9oQLxkv1WLK9KSQlysO6FHF.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/mFBoXMocZNwMO8op85Y9TUq5Lbr.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "tr", + "file_path": "/7T2SDS5efuJiK45oyKoEzf9RKjw.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "tr", + "file_path": "/hOHhVYz9SFtwryNL0oxsSntoYXq.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/tfSoxlIokmu1vPcYSVujy95fIBq.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.674, + "height": 1484, + "iso_639_1": "he", + "file_path": "/nZPmmw6CFaYv2CwXGf7qX3imU3o.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1024, + "iso_639_1": "en", + "file_path": "/bAEV6D3M4tRVGBZca69BMYtxxFv.jpg", + "vote_average": 3.334, + "vote_count": 3, + "width": 683 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ro", + "file_path": "/eQesWpskcj6FFulKEKO6Sycawff.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/vbKG1RbdN7Y6eEVXgeMApb2me9L.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ro", + "file_path": "/tsY4m4IH8MZly4kvxZszbommLKj.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/xSVtT2gi6FfBtkdnLsmqqNP3KmP.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.7, + "height": 2858, + "iso_639_1": "ko", + "file_path": "/qV9BQZdiM8foEzDz0Ag5hGWE5qM.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ca", + "file_path": "/4DUFGVxyTJdcyvD9zG40vNVUXhR.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ja", + "file_path": "/xQY1yhixcSSfKRhdlhzwN8Mra6q.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ru", + "file_path": "/dGoSk9yyfjiWZXZPpTjwKBBriME.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2700, + "iso_639_1": "ru", + "file_path": "/l38alxTRHxvWBiUwFytpcUgdQmD.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1800 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ar", + "file_path": "/9rZu8rnOE1MwN1hrTquwAPR1l0G.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1411, + "iso_639_1": "hr", + "file_path": "/iaefBZx7B3AoNWdoEG38l4fGPDJ.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 941 + }, + { + "aspect_ratio": 0.667, + "height": 2097, + "iso_639_1": "en", + "file_path": "/hJdaYSO7II8EUfPEMKIfjmjmgxy.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1398 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/uVJlB59STDVu8M5Q5p2bzDJ66H0.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/pi0YD6U6KDLJxH6LYUQbSAXiO5E.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/l6V3TEoJlGh3ztAFxK2hemHfDJ2.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "fa", + "file_path": "/kVzRXQ8JRi8aAZo7q7UN6CgZCHZ.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 500 + }, + { + "aspect_ratio": 0.701, + "height": 750, + "iso_639_1": "fa", + "file_path": "/iKc81aIlCahY7eyk93cXQpPZBSa.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 526 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "fa", + "file_path": "/7dhxu2oJxVhUmhafYfyOgXSzonV.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 500 + }, + { + "aspect_ratio": 0.701, + "height": 750, + "iso_639_1": "fa", + "file_path": "/8QvIkGbDENeTDZDlvK332TLmEvI.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 526 + }, + { + "aspect_ratio": 0.665, + "height": 2720, + "iso_639_1": "fr", + "file_path": "/wSb7ofZ0VbQa6smOuQmiUcaGc4q.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1808 + }, + { + "aspect_ratio": 0.665, + "height": 2720, + "iso_639_1": "fr", + "file_path": "/h8fPpGyNNT1TklnOAymA7hGknxF.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1808 + }, + { + "aspect_ratio": 0.665, + "height": 2720, + "iso_639_1": "fr", + "file_path": "/k1oflmpuJP6baDGkrnPM1Lw4WuL.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1808 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "pt", + "file_path": "/4BSuFpQ2gd2WtO5ZK1fMjaMPMRc.jpg", + "vote_average": 2.736, + "vote_count": 17, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 1800, + "iso_639_1": "zh", + "file_path": "/Aqo8yM5S5ZEdlcyeBBxj7s0vkTf.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 1200 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "cs", + "file_path": "/hF4aMQF3x0SGFS3gd5SoQecurNV.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/ltLIbF304D8FQvTPhzZSTnumZdR.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/ruRhPgeh1xSN7kBMkvbvMjsYW1Z.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/iYfVYSMNLQDl03nVFTxvqHr19RQ.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.676, + "height": 1776, + "iso_639_1": "he", + "file_path": "/7Gvzbduz2iApKA3g7nbyGcfoBCL.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1200 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/hLLpzEK6q8QQJy477KCx9mAqBBy.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/rL1YQLqUtHK3HdQyenHvuOCuWzO.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 2000 + }, + { + "aspect_ratio": 0.698, + "height": 2149, + "iso_639_1": "ko", + "file_path": "/oAt6OtpwYCdJI76AVtVKW1eorYx.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 2700, + "iso_639_1": "en", + "file_path": "/zFjb7BVXbKeGhSxC7Yg2TgTCSgr.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1800 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/orcTUEAuVyGYjUM47HRhb7DRLRa.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "tr", + "file_path": "/dXyIK3s8ZN7FH3AoaeyaBqX0eoJ.jpg", + "vote_average": 1.75, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/wJH9wMDQ2iEZkgYh76sp0wIhJOc.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/hoYr43FoLioV6M8s48KG5j1aVQS.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1350, + "iso_639_1": "en", + "file_path": "/4aR8q9eYyOFarByeHzJnGG25PZX.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 900 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/pVHyB857pFAl9pBgOGzWTChPwlK.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.75, + "height": 2560, + "iso_639_1": "ja", + "file_path": "/1FuwVDvsJqmKdLQjsN9lgNnwJm7.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "la", + "file_path": "/88MAvVVr6wJ6uNieCf2SdauEUVW.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 960, + "iso_639_1": "la", + "file_path": "/9tDQP1b1iffUP9gj1YCinNX3AcZ.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 640 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/vOTVk6ZAvhNef8l3devUFX28XiA.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2963, + "iso_639_1": "en", + "file_path": "/kd87OFsGRHWwYfbNZqiOFtu3qCJ.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1976 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/jXRpoV5VlwlasUxzI7MA5yOxNWO.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/u56XDbQfdhqLQgGHtxa5OFZWnOI.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ca", + "file_path": "/1qCRLvKcGUpiqfDaq3whdoe1tXk.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1425, + "iso_639_1": "en", + "file_path": "/qYcGVwSDrOkEuM2DoJnKs8stlns.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 950 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/tRWnPRolQJF0SNHIQYQRCnKj7lG.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/zxXfCuskvMxL3Am563xQBKfPLSx.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1800, + "iso_639_1": "zh", + "file_path": "/sk4U9hbqLba2qL4ybCNCPdvEJ6m.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1200 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "pt", + "file_path": "/vSw24SogM3ciF6EzyvgZhtEBJku.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "es", + "file_path": "/7ZpJgdxMQ3rD746xRmfhFbfYRw3.jpg", + "vote_average": 1.444, + "vote_count": 6, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/jLAipQvoHwQL13db70Xq5igfQQu.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/3Y5pedOGJLnGevsQOWevrhQ7UiA.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/voKPwraRvfp4IIlCAIbTzrg7O4i.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.682, + "height": 755, + "iso_639_1": "en", + "file_path": "/2GgerXCbCMgvt2kLwWEmJWCSG65.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 515 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": "de", + "file_path": "/ncnzihfDVOXuLb36pUnEVG5zvwe.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1600 + }, + { + "aspect_ratio": 0.744, + "height": 1600, + "iso_639_1": "fr", + "file_path": "/kkfCz0FZPMl5gOaiR6pKuUs4ddV.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1190 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/jxOLe6sQoJ6mwSJ78LVAj2r2r1c.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/6GZBRtAhzkSQcKfkZqmrG3cdfRQ.jpg", + "vote_average": 1.208, + "vote_count": 12, + "width": 2000 + }, + { + "aspect_ratio": 0.678, + "height": 2213, + "iso_639_1": "en", + "file_path": "/mPlopztbARoMahaSgl5oQvR0e4T.jpg", + "vote_average": 1.066, + "vote_count": 5, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "pt", + "file_path": "/zD5WqV8yswXYpDFScXgrBwGpcXa.jpg", + "vote_average": 1.066, + "vote_count": 10, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "es", + "file_path": "/vn2XvBmxgM906Olakmp8MpirVqa.jpg", + "vote_average": 0.958, + "vote_count": 5, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 1863, + "iso_639_1": "zh", + "file_path": "/reHZHHsdfQDqWlzcnczAoRFyH2C.jpg", + "vote_average": 0.774, + "vote_count": 31, + "width": 1242 + }, + { + "aspect_ratio": 0.676, + "height": 1480, + "iso_639_1": "en", + "file_path": "/pkDjn2aAg96XTL373w88hYEBZ3N.jpg", + "vote_average": 0.5, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "es", + "file_path": "/zZngO1m9BTOh5dGPHIHccHN2AZP.jpg", + "vote_average": 0.5, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.709, + "height": 776, + "iso_639_1": "ja", + "file_path": "/5NyJbE7JVfDJtP7c4CQzxgCLHFY.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 550 + }, + { + "aspect_ratio": 0.666, + "height": 3000, + "iso_639_1": "uk", + "file_path": "/7e7c8xYDpF9MxleV6zHLgnrv2tP.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1999 + }, + { + "aspect_ratio": 0.7, + "height": 1600, + "iso_639_1": "tr", + "file_path": "/eOZrLKszfq8VOqPUxOVlSLwpY5W.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1120 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "sv", + "file_path": "/wSnStw76OolZTtVtbBeAsK7xgtJ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/y3ULnBxPeEsUmgK2hSvFkzkIpYF.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.679, + "height": 1082, + "iso_639_1": "en", + "file_path": "/3v7VfHBDpNbEB3c0FRerKAMhEGO.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 735 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "de", + "file_path": "/yPGxk3cr5mAKxYAMroKdOyEVwzO.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.704, + "height": 2272, + "iso_639_1": "de", + "file_path": "/rBtVI5oCbsev8NoCtsQckXGkPKx.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1600 + }, + { + "aspect_ratio": 0.705, + "height": 1418, + "iso_639_1": "de", + "file_path": "/yqlq7KRqYMuatp9y24IfgRz54aL.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2400, + "iso_639_1": "de", + "file_path": "/42YJMRPbuGOPv8CdRNXtJ4flFwJ.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/1tqLnG5ibkG27Gx8HSCX3VYaAK2.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "es", + "file_path": "/j8IMbiv2LN0pSptfVgoVUkhWbPE.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "de", + "file_path": "/ivAuX9nENHF9UgVLQTHRxdkQR9M.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 1125, + "iso_639_1": "tr", + "file_path": "/6KauxOU76foQywzbyyeZducc9An.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 750 + }, + { + "aspect_ratio": 0.75, + "height": 2666, + "iso_639_1": "fr", + "file_path": "/2XSBog97WLC7iX5kJ8OL630v6HZ.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "hr", + "file_path": "/1Thadck9UBVw6ymxLLEDVnra1Ga.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1462, + "iso_639_1": "en", + "file_path": "/8xuf5l4l4hbYlSjmNpLxrBeFCue.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 975 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/akGgX7RIIg6HGVuqc5QkAgqX5XW.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/2vty1EcIvVawSvoFVxyCbZH7kDJ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1875, + "iso_639_1": "en", + "file_path": "/sTqKtdiTkm9XYsOrAdSpp2J5y5G.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1250 + }, + { + "aspect_ratio": 0.667, + "height": 1875, + "iso_639_1": "en", + "file_path": "/aGIbKzbvqBLvFocfxS9CoL9WhND.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1250 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fa", + "file_path": "/wr964aRv9tl6V0afR3crrQPi57i.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.714, + "height": 1644, + "iso_639_1": "en", + "file_path": "/zJZcQEjVLSmzTe7eGBAZMC2drNX.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1174 + }, + { + "aspect_ratio": 0.667, + "height": 1875, + "iso_639_1": "en", + "file_path": "/g8Om8s4hZwwGniqg8eMiiAs0NaB.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1250 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "sv", + "file_path": "/4j39r2UXXqrCZSJA0N2Tvl9EufS.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "it", + "file_path": "/hdBsFWCdcCYCl5F7ok2MvsNQ973.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "it", + "file_path": "/i4AxNN7MGjarGnN67V3eMgODY6k.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "hu", + "file_path": "/hhhYhZiubfKhl7RYd4BiDQabd55.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2148, + "iso_639_1": "ko", + "file_path": "/3hO6DIGRBaJQj2NLEYBMwpcz88D.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1432 + }, + { + "aspect_ratio": 0.666, + "height": 1046, + "iso_639_1": "it", + "file_path": "/dhstPYlWLdjjvubWrB3HvfST60r.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 697 + }, + { + "aspect_ratio": 0.676, + "height": 1776, + "iso_639_1": "he", + "file_path": "/m0lkTW9r7NCFQXcAcGfOG8TfTO3.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1200 + }, + { + "aspect_ratio": 0.704, + "height": 781, + "iso_639_1": "pl", + "file_path": "/1ZHjnqcy0ommhnjXRIFQ58mAiRu.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 550 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "no", + "file_path": "/mvM2jWXjGGxjA3H4mYgErMrYMTD.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "mn", + "file_path": "/rDqAuJxd1u2PoQ6yT7z8uGd6oCW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.704, + "height": 750, + "iso_639_1": "ja", + "file_path": "/nPuxODzbSWdDbxPCdt6fc32FSHh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 528 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fi", + "file_path": "/4O33Dfd3WV6A1rP30oelCGFIpa2.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.703, + "height": 2277, + "iso_639_1": "de", + "file_path": "/pRe80GfjBVhUFvQ1ACv4rdEcRAD.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1600 + }, + { + "aspect_ratio": 0.705, + "height": 1418, + "iso_639_1": "de", + "file_path": "/6yDAJdZzYyGysBZ0dkLh6oW3lkK.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.703, + "height": 1422, + "iso_639_1": "de", + "file_path": "/wDjWuPG69NgwImEY9ibAIY5podw.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.674, + "height": 1000, + "iso_639_1": "en", + "file_path": "/w6zm0soNQIFrLse5Lp5a1ZO9mhQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 674 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/nCMJaXS4DkbUbx2EctXO4YVb5Ly.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2650, + "iso_639_1": "en", + "file_path": "/p9F5HzPt7PJLTaTHA8h1Hg9mjC2.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 1768 + }, + { + "aspect_ratio": 0.75, + "height": 835, + "iso_639_1": "uz", + "file_path": "/zgyRWri2luavFepRC2vHwYQcT0t.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 626 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "vi", + "file_path": "/zLyG4nquaaZKCA3CJdQCEzTwN1R.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 500 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/oKUqKztiF3or2XEnMy2D9ZuQpeA.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.675, + "height": 1080, + "iso_639_1": "ko", + "file_path": "/1sms5568Ta20go9N0GseZ0LGsNQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 729 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "de", + "file_path": "/aPwNvUuBpXcw2ehCCUQTuKJIlz3.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/jVGdzN7DTuP68WElqqJeXsjjQQq.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 959, + "iso_639_1": "en", + "file_path": "/b6qnj9ebvqU9STQHUgch2bOUxuf.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 640 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/hjvrLaLFzC4FOouEH13R4DaV8b7.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ja", + "file_path": "/fzDcdO1VMPTxmCD3PZETATzwVlX.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1024, + "iso_639_1": "en", + "file_path": "/oA3MMsjuWC2MYEgFLMj6k6U14Ot.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 683 + }, + { + "aspect_ratio": 0.709, + "height": 1410, + "iso_639_1": "uk", + "file_path": "/iYqov9r2tMz8XATmYD6EpPLojjl.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.709, + "height": 2560, + "iso_639_1": "uk", + "file_path": "/sDaT7aGbAaUn2nxoHOHFk6gHR5J.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1814 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/tGFfw6S0qW5ukvwKRLQKm44leCl.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1499, + "iso_639_1": null, + "file_path": "/sk6SHy0bgTdRDaFj7vUyopqR47V.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/5OWFF1DhvYVQiX1yUrBE9CQqO5t.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fi", + "file_path": "/aClrpO0QRhgNXHQJdq4UXMuBGUX.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fi", + "file_path": "/15zQ0V9n0sBcf1YwCIs1M2xFDC7.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.7, + "height": 1000, + "iso_639_1": "el", + "file_path": "/A83tDJvKx41oMu4dqALmQjjp6rt.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 700 + }, + { + "aspect_ratio": 0.683, + "height": 1048, + "iso_639_1": "el", + "file_path": "/kWYHJdgfNZ7pYu9TieKlANct44G.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 716 + }, + { + "aspect_ratio": 0.75, + "height": 2667, + "iso_639_1": "it", + "file_path": "/qOburER4QhtP2Jj1I0NPAZvK6Ob.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2876, + "iso_639_1": "en", + "file_path": "/qsfaLB57yg0QhGKwjNjg7PP0Uuj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1917 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "bg", + "file_path": "/eOXL6YCP92VorHUgbjb8S5zxLaj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "bg", + "file_path": "/tITcu1W3sE8qaVv3kzNKhXhh8kk.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/6EtXxfHTbBANsOjpvsQo9B5LPU4.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/5ACk37KLpcQ1ecwEcb7Lm5RcVjL.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/9njC9T3BFRJGwXh4aE0nusS0tKa.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fi", + "file_path": "/nG6ihaz7hj8fX6vfsJJUm63Dfyr.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/82rldpJVwOfauJDpKaVo3uUnPuZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "vi", + "file_path": "/ewi0rJKHG87TDJMrcQA1cQZT4CW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ar", + "file_path": "/rDeu1T2bbUz068zhBpIezFVnpbH.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1875, + "iso_639_1": "en", + "file_path": "/xCrYLx56jCGEIpv9g6BbDW5nAJN.jpg", + "vote_average": 0, + "vote_count": 1, + "width": 1250 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/6jkwCXHckbQTVrFJ81UfiVt5T9d.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.763, + "height": 2097, + "iso_639_1": "ar", + "file_path": "/6hIfprzHYeITeYEHwYR5K6FE9jA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1601 + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-278.json b/providers/.cache/tmdb_api/tmdb-movie-278.json new file mode 100644 index 0000000..287c4d7 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-278.json @@ -0,0 +1,57 @@ +{ + "adult": false, + "backdrop_path": "/pNjh59JSxChQktamG3LMp9ZoQzp.jpg", + "belongs_to_collection": null, + "budget": 25000000, + "genres": [ + { + "id": 18, + "name": "Drama" + }, + { + "id": 80, + "name": "Crime" + } + ], + "homepage": "", + "id": 278, + "imdb_id": "tt0111161", + "origin_country": [ + "US" + ], + "original_language": "en", + "original_title": "The Shawshank Redemption", + "overview": "Imprisoned in the 1940s for the double murder of his wife and her lover, upstanding banker Andy Dufresne begins a new life at the Shawshank prison, where he puts his accounting skills to work for an amoral warden. During his long stretch in prison, Dufresne comes to be admired by the other inmates -- including an older prisoner named Red -- for his integrity and unquenchable sense of hope.", + "popularity": 31.7568, + "poster_path": "/9cqNxx0GxF0bflZmeSMuL5tnGzr.jpg", + "production_companies": [ + { + "id": 97, + "logo_path": "/qv3ih9pR9w2XNKZDsqDqAGuZjqc.png", + "name": "Castle Rock Entertainment", + "origin_country": "US" + } + ], + "production_countries": [ + { + "iso_3166_1": "US", + "name": "United States of America" + } + ], + "release_date": "1994-09-23", + "revenue": 28341469, + "runtime": 142, + "spoken_languages": [ + { + "english_name": "English", + "iso_639_1": "en", + "name": "English" + } + ], + "status": "Released", + "tagline": "Fear can hold you prisoner. Hope can set you free.", + "title": "The Shawshank Redemption", + "video": false, + "vote_average": 8.7, + "vote_count": 28866 +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-293660-alternatives.json b/providers/.cache/tmdb_api/tmdb-movie-293660-alternatives.json new file mode 100644 index 0000000..bc4d384 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-293660-alternatives.json @@ -0,0 +1,25 @@ +{ + "id": 293660, + "titles": [ + { + "iso_3166_1": "VN", + "title": "Quái Nhân Deadpool", + "type": "" + }, + { + "iso_3166_1": "CN", + "title": "死侍1", + "type": "" + }, + { + "iso_3166_1": "ES", + "title": "Deadpool: 1", + "type": "Castellano" + }, + { + "iso_3166_1": "DE", + "title": "Deadpool 1", + "type": "" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-293660-external_ids.json b/providers/.cache/tmdb_api/tmdb-movie-293660-external_ids.json new file mode 100644 index 0000000..1b4befa --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-293660-external_ids.json @@ -0,0 +1,8 @@ +{ + "id": 293660, + "imdb_id": "tt1431045", + "wikidata_id": "Q19347291", + "facebook_id": "DeadpoolMovie", + "instagram_id": "deadpoolmovie", + "twitter_id": "deadpoolmovie" +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-293660-images.json b/providers/.cache/tmdb_api/tmdb-movie-293660-images.json new file mode 100644 index 0000000..dbfa565 --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-293660-images.json @@ -0,0 +1,2160 @@ +{ + "backdrops": [ + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/en971MEXui9diirXlogOrPKmsEn.jpg", + "vote_average": 7.032, + "vote_count": 16, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/rFj9IKlL75B2pXhZA60jkNWvxeW.jpg", + "vote_average": 6.312, + "vote_count": 8, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/k2VX0gFu2BEJhvduQTq2ioYp8z7.jpg", + "vote_average": 6.312, + "vote_count": 8, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/n28I7FNYIT934OoHhKZn4IIDsrQ.jpg", + "vote_average": 4.3, + "vote_count": 10, + "width": 1920 + }, + { + "aspect_ratio": 1.776, + "height": 964, + "iso_639_1": "en", + "file_path": "/fY23D9UbnkYvy9HZtF7XliTysp6.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1712 + }, + { + "aspect_ratio": 1.778, + "height": 802, + "iso_639_1": null, + "file_path": "/rw3z3ZuTCxhhHCztfR4eqEqRpGV.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1426 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "ko", + "file_path": "/plwgBvI54nmBREDn7vdMzU1OP0u.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1694, + "iso_639_1": "en", + "file_path": "/75375iF3MfdSIRsh00iI5JKPTbR.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 3012 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/MJvUuCAgurK1JgXUJvGrDa37Ke.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/9zWEKQwaefQ5QIC8QfbbZD2aYCl.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/jNUYL4RroNF1KRGilpVqCSujWSf.jpg", + "vote_average": 1.75, + "vote_count": 6, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "en", + "file_path": "/38B4MIYNyWpehNBQ9pc22OQjsZ7.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1686, + "iso_639_1": null, + "file_path": "/wsPO5Jny82b0pksjSvjUHEYHDkz.jpg", + "vote_average": 1.562, + "vote_count": 8, + "width": 2998 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/z09QxlvUXAyQfZbgggjcL2w04QU.jpg", + "vote_average": 1.444, + "vote_count": 6, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/zZvBe8xGX2gPlWURJfRNwF40rF3.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/n4GiahbsK9qZe8JC5v6kPFENXlH.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/uXsE8WOKB55GxLMfvMxmNVq6yMk.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/hxNxbBuuWD7kw06g9g6jge9N7JZ.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/1aWpHzY3Y4bODkhQkSARTYLbXW.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/9aIeqazwPiIQ1ClfxhwhCQ0IGzA.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/bUcmY4GuJRIwQbZ8mYy1lWWDfNI.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": "en", + "file_path": "/zBgz8ZQveXkRRysFnZaYi0fD6QM.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 720, + "iso_639_1": null, + "file_path": "/mooabI47OLF0sZi6wsw7KmnF0AM.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1280 + }, + { + "aspect_ratio": 1.778, + "height": 1125, + "iso_639_1": null, + "file_path": "/yzrGHCY0iRwdTXJpn1iUFiFYKxH.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/v8P8WLP6R7HDHUUykHJvfFkJrzz.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/lcCaABDOzD8v3ZSIudT5msnrkQ7.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/bcwEXWvGCUF3DCXSyLypZkqgXxu.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/2c3NYVUbRvYQeHgaR4HqKBD5csc.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/igmvRtYSm6viwEFFKfna6ckGHRt.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.777, + "height": 1688, + "iso_639_1": "ko", + "file_path": "/bJ63tGI6ou0f9s7aTj0Qu5SOQJn.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3000 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/iov1XbPUAKRgoTAlfVbhorSbIj2.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": "en", + "file_path": "/qEKTokfD3n6ueo24GTiU9sg1EiA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "ka", + "file_path": "/bUpnpwCTNHCT7aZHZIKn6NGUFUW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "pt", + "file_path": "/lL5Jn3cjWw7vTBVleU4o212AcqA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1075, + "iso_639_1": null, + "file_path": "/8HzC4v2roWDJKg5YK58jFhUsUUk.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1911 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/bUILTt7RtX6YFtIjpqI1oaZm4Bh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/wLpLv0PzcvsbJOrw5Ocifn6JuiQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/hvZlJkVdVhop1z5eedtzQpaVaaS.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.781, + "height": 2156, + "iso_639_1": "en", + "file_path": "/cMp6bAeTxnsihEhGWkuSgbYo8Qy.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 2160, + "iso_639_1": null, + "file_path": "/wajlGQsw35aBPnWLthQlYChxkTF.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": null, + "file_path": "/h0zqhGfbN6gad3DCosyIAMijUTQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + }, + { + "aspect_ratio": 1.778, + "height": 1080, + "iso_639_1": "ja", + "file_path": "/36PThNOylBPqDxQ8C5MVIvqxaAT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1920 + } + ], + "id": 293660, + "logos": [ + { + "aspect_ratio": 4.081, + "height": 941, + "iso_639_1": "he", + "file_path": "/v5jX2Q6DBmnbvdOqH82DK4kY1s6.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 3840 + }, + { + "aspect_ratio": 1.934, + "height": 548, + "iso_639_1": "zh", + "file_path": "/CrzYEy5x4Uy4OibvlAEYzKaLwF.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 1060 + }, + { + "aspect_ratio": 1.378, + "height": 2160, + "iso_639_1": "zh", + "file_path": "/eIJpn5Gf6FjsgMFHe5HVCbNAxLo.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 2976 + }, + { + "aspect_ratio": 5.187, + "height": 539, + "iso_639_1": "fr", + "file_path": "/piuamNKC09lepRcjrWx9GfEa8hN.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 2796 + }, + { + "aspect_ratio": 4.324, + "height": 185, + "iso_639_1": "uk", + "file_path": "/wdltMg9Y1PceKmqizoEpGRCe6cN.png", + "vote_average": 3.334, + "vote_count": 1, + "width": 800 + }, + { + "aspect_ratio": 5.447, + "height": 389, + "iso_639_1": "en", + "file_path": "/zXyTWeQemn7yfvHLrEWWENkJzmT.png", + "vote_average": 0, + "vote_count": 0, + "width": 2119 + }, + { + "aspect_ratio": 4.384, + "height": 365, + "iso_639_1": "en", + "file_path": "/2RCCAVpLr3VtAVARpTjdONPmox2.png", + "vote_average": 0, + "vote_count": 0, + "width": 1600 + }, + { + "aspect_ratio": 7.31, + "height": 197, + "iso_639_1": "ja", + "file_path": "/tCw08ALwb7A0B3AxU0hd5hrXUaU.png", + "vote_average": 0, + "vote_count": 0, + "width": 1440 + }, + { + "aspect_ratio": 3.16, + "height": 243, + "iso_639_1": "he", + "file_path": "/jfx8C00ZsWBGh8AFKLEsmxqTV30.png", + "vote_average": 0, + "vote_count": 0, + "width": 768 + }, + { + "aspect_ratio": 4.364, + "height": 330, + "iso_639_1": "ko", + "file_path": "/x8MA3ybDOJjP5AW4bFhi0YbN8oT.png", + "vote_average": 0, + "vote_count": 0, + "width": 1440 + }, + { + "aspect_ratio": 4.426, + "height": 244, + "iso_639_1": "ru", + "file_path": "/r9du1OkNiEt7NRClK5sISgBjycB.png", + "vote_average": 0, + "vote_count": 0, + "width": 1080 + }, + { + "aspect_ratio": 4.411, + "height": 394, + "iso_639_1": "uk", + "file_path": "/4gHcaEXFKBLVbAfbht0RdprajSn.png", + "vote_average": 0, + "vote_count": 0, + "width": 1738 + }, + { + "aspect_ratio": 2.082, + "height": 1844, + "iso_639_1": "zh", + "file_path": "/bhHtI0ve1cfyJgt07wtb92w94yI.png", + "vote_average": 0, + "vote_count": 0, + "width": 3840 + }, + { + "aspect_ratio": 1.187, + "height": 1452, + "iso_639_1": "zh", + "file_path": "/9YIMKxR0tl65JPcGMkiVGehvzps.png", + "vote_average": 0, + "vote_count": 0, + "width": 1723 + }, + { + "aspect_ratio": 4.163, + "height": 509, + "iso_639_1": "en", + "file_path": "/kH1MbmJnLgIajwGfYzFwT0vLaPl.png", + "vote_average": 0, + "vote_count": 0, + "width": 2119 + }, + { + "aspect_ratio": 5.677, + "height": 811, + "iso_639_1": "en", + "file_path": "/cAN2qahGgyH3agmzLPlGAgAQmkA.png", + "vote_average": 0, + "vote_count": 0, + "width": 4604 + }, + { + "aspect_ratio": 5.68, + "height": 122, + "iso_639_1": "en", + "file_path": "/aNYT6NNSOhJ71dcSAxZMMawrCrU.svg", + "vote_average": 0, + "vote_count": 0, + "width": 693 + }, + { + "aspect_ratio": 1.613, + "height": 287, + "iso_639_1": "zh", + "file_path": "/tfoKUkwu1ySY4Z3kyP15F71TfXq.png", + "vote_average": 0, + "vote_count": 0, + "width": 463 + }, + { + "aspect_ratio": 3.931, + "height": 1099, + "iso_639_1": "ko", + "file_path": "/yePQm7R4Pj5SWse6JVAK34YVrIJ.png", + "vote_average": 0, + "vote_count": 0, + "width": 4320 + }, + { + "aspect_ratio": 4.385, + "height": 985, + "iso_639_1": "ko", + "file_path": "/eqzLui5lsAOjRpP2n8sOiyMmRhD.png", + "vote_average": 0, + "vote_count": 0, + "width": 4319 + }, + { + "aspect_ratio": 1.239, + "height": 1920, + "iso_639_1": "zh", + "file_path": "/m6kbAP34JF6DxjYIz2UNaW65onD.png", + "vote_average": 0, + "vote_count": 0, + "width": 2378 + }, + { + "aspect_ratio": 4.411, + "height": 394, + "iso_639_1": "uk", + "file_path": "/wmyfuT3507C16IX3UBbAQTUiaTD.png", + "vote_average": 0, + "vote_count": 0, + "width": 1738 + } + ], + "posters": [ + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/z5VjcCEioj2c2dvxmoqBW0Rj8Xj.jpg", + "vote_average": 6.722, + "vote_count": 6, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/3E53WEZJqP6aM84D8CckXx4pIHw.jpg", + "vote_average": 6.712, + "vote_count": 26, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/fSRb7vyIP8rQpL0I47P3qUsEKX3.jpg", + "vote_average": 5.808, + "vote_count": 34, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/zq8Cl3PNIDGU3iWNRoc5nEZ6pCe.jpg", + "vote_average": 5.726, + "vote_count": 20, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/pcZT1Ouq99dY6J2iGXjMxw16x6o.jpg", + "vote_average": 5.682, + "vote_count": 11, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/yGSxMiF0cYuAiyuve5DA6bnWEOI.jpg", + "vote_average": 5.53, + "vote_count": 17, + "width": 2000 + }, + { + "aspect_ratio": 0.673, + "height": 1127, + "iso_639_1": "en", + "file_path": "/8peYuPeLawgCFhuI4IcDjdrAAXw.jpg", + "vote_average": 5.25, + "vote_count": 9, + "width": 759 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "zh", + "file_path": "/wWzGAWmdX7IL1mOYyhiYKso0FrI.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1365 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "th", + "file_path": "/3Oft5fKQr1KHUhzqbfLrw9MDhwD.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "zh", + "file_path": "/qPJC6cNMkHLJhcD52jKHh56Fzxa.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1365 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "zh", + "file_path": "/uoEvIHCpli8qfMHnFRG6QxJA4tm.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1365 + }, + { + "aspect_ratio": 0.667, + "height": 2048, + "iso_639_1": "zh", + "file_path": "/ts2v8Lho9LJYqvKK7z0FGQ1cLLU.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1365 + }, + { + "aspect_ratio": 0.667, + "height": 2500, + "iso_639_1": "en", + "file_path": "/jTl9Xnhbvzmf5QRwzsUAfdcWrRT.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1667 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/VEfCqkbK062Egob26rYQWAJoE7.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.736, + "height": 2074, + "iso_639_1": "sk", + "file_path": "/kFOwg5obNkQN6KlsLHjKUeppEZZ.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1526 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "he", + "file_path": "/fJk1kspZ1Xo3R8sl7NhFziXudqt.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.676, + "height": 1837, + "iso_639_1": "en", + "file_path": "/pXBNcuhAZZ84yStZtD8b7T62q8W.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1242 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ka", + "file_path": "/yJiFPlmEcvkawa3oArVy933i8rD.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/vb9etggDUhIfz8YU2hJD45MN7O4.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/mY37sVR85vtdwo2d0W98SCKHNx5.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/eOCjxsaxpoIZcucQ2ucP95JEJUO.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/uSDLpH0E1jOj3axjqhTucNrliLN.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "tr", + "file_path": "/99p0n6EhX6PebGIScQ0uRZ8aUv8.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1400 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/7BYksRLQ9HtZbUtanhAIdeQO9eD.jpg", + "vote_average": 3.334, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ru", + "file_path": "/r5PYZGOiIQuGpaZas9TTplNZ5Ox.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ko", + "file_path": "/k1e0TlvDM4KsiSRyJENVrHxMqtK.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "it", + "file_path": "/zoSiiUUzg2ny6uzuil7PbP13z53.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2306, + "iso_639_1": "fr", + "file_path": "/AmTA3OrvsbjC4ejzFfKbzqm0Fs0.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 1537 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ja", + "file_path": "/zhqrRtBVHAbHqLl9O5dMYAHeyFH.jpg", + "vote_average": 3.334, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.705, + "height": 2179, + "iso_639_1": "fr", + "file_path": "/z4Fk3B8pWqZx8hF5hbf9WgBKREb.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 1537 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/v7dXwm78BHkdlDzwT3u4fywgz1b.jpg", + "vote_average": 2.542, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.717, + "height": 2788, + "iso_639_1": null, + "file_path": "/gBYgQQe5mmh8fIQTWRht8gzJV8G.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/xu1lMNQr4rM0VQCWBkYXJmenj4U.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/wg3MLoL0wEtY2r2pbtdK5aF6e6F.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "uk", + "file_path": "/uNgSXu6iveo9WQABOhFb72QH0qr.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/kxNMigoaWF1keHTC3KtYBjZr5iX.jpg", + "vote_average": 2.278, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 2104, + "iso_639_1": "uk", + "file_path": "/mErMIq92XNC3eWH4pYw7dKLezJ7.jpg", + "vote_average": 2.066, + "vote_count": 5, + "width": 1403 + }, + { + "aspect_ratio": 0.675, + "height": 2500, + "iso_639_1": "en", + "file_path": "/s2vj1zwydrQkwuz0711XBAEHdw4.jpg", + "vote_average": 2.066, + "vote_count": 5, + "width": 1688 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/2drDLdrmgq5zvxvWzAYhzv2pH0c.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "ru", + "file_path": "/7vEAHaoSXU5evsHMTETUFRVW3QW.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/geBTv3ktyaPnleK0r9jWN6GqiNT.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.675, + "height": 1600, + "iso_639_1": "en", + "file_path": "/jXQrgDkWcZogGAf2jWNRjf9Cmhv.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 1080 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/rfekMukNPQsKuXjXc561OezRSD6.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/nnEfdPrwaxKuZNjTKvQFAjbs8HF.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/nvM5H4dAPcCU1PqqK2OBK6C3l8i.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/swS3PsQYD3wGEWZwtgpUlGRMv1G.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/7P21qxw0GhXCWGznJWb1RkCNTtc.jpg", + "vote_average": 1.75, + "vote_count": 4, + "width": 2000 + }, + { + "aspect_ratio": 0.7, + "height": 2858, + "iso_639_1": "ko", + "file_path": "/nzGvrSKrjOjdG1ojrVOf0v7ApkW.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "fr", + "file_path": "/4D6VH2i8AqdUK9mY2rgmcrYUaMO.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ko", + "file_path": "/bzpAD4rd40zZYoh6Lqzrz1O1xh4.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "ru", + "file_path": "/tMOhkuXYfVtJ4ZxNFsG9QbLS7yh.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 600 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": "ru", + "file_path": "/jhLx7UQ2LOYjzUF1oH1ne4HZWhL.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/lGItu9eqKT91kRGbaSsHUSEi2jV.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/p5VMWZOEOzAKaV3xhebztRUgcuJ.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/wEGU0e47rmMdzdulkXirAIbCeXM.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.706, + "height": 2834, + "iso_639_1": "it", + "file_path": "/mdBGRd6OE9loKEQC8qAGm51qHya.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/3Wm440ayXLPVdRX56u9uuf7YAfd.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/xjZ8uAQ0QFKz8xrKFsQhB3RAchy.jpg", + "vote_average": 1.75, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/d2V5MyJxPM1GX7XcCNrTFHhYe3T.jpg", + "vote_average": 1.714, + "vote_count": 7, + "width": 1000 + }, + { + "aspect_ratio": 0.673, + "height": 1426, + "iso_639_1": "en", + "file_path": "/bm79nfBJb8ElpteFtnCMaKxdeV6.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 960 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/fOdFkicoeApMQMvxeVQsKZxexiV.jpg", + "vote_average": 1.434, + "vote_count": 5, + "width": 1000 + }, + { + "aspect_ratio": 0.702, + "height": 784, + "iso_639_1": "en", + "file_path": "/yVlGKF8J5Dd6xN7VigphGjlsyYG.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 550 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/gmYSK6mzEbeK4fEVvi8a7btzuNH.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/20bo8p996kwCQGVxMQxi0TTnfPe.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/bb5PrmnQrsMS35s4OUYPDLuiJbK.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 2000 + }, + { + "aspect_ratio": 0.696, + "height": 1171, + "iso_639_1": "tr", + "file_path": "/nMKpconh6JTJ86eCQoGOH6ypDMN.jpg", + "vote_average": 1.222, + "vote_count": 3, + "width": 815 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/5vtbOGLhlYvr0G3ZjjZNxuSCZUe.jpg", + "vote_average": 0.958, + "vote_count": 4, + "width": 1000 + }, + { + "aspect_ratio": 0.708, + "height": 1696, + "iso_639_1": "ja", + "file_path": "/gHP7eDdmTPoipbNEbb9GqZXFbBW.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1200 + }, + { + "aspect_ratio": 0.676, + "height": 888, + "iso_639_1": "th", + "file_path": "/15RL0ZcKDdVzXRMDQD29lQWWyQ9.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 600 + }, + { + "aspect_ratio": 0.676, + "height": 1024, + "iso_639_1": "th", + "file_path": "/eelT9lXdxTbsEVJSKncqb6zwqUb.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 692 + }, + { + "aspect_ratio": 0.676, + "height": 814, + "iso_639_1": "th", + "file_path": "/qTRBbmHGbaShM8Vm2W95vXsae8b.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 550 + }, + { + "aspect_ratio": 0.652, + "height": 830, + "iso_639_1": "th", + "file_path": "/bmOfSrMAQcGbxO2FAPsOJEY9RCa.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 541 + }, + { + "aspect_ratio": 0.675, + "height": 2048, + "iso_639_1": "es", + "file_path": "/3TUYy0XvhPQBhrXJwRIaOoYFOBO.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1382 + }, + { + "aspect_ratio": 0.667, + "height": 750, + "iso_639_1": "vi", + "file_path": "/cFi3j0Njdoe4Ty8xiqw3BKMnzRv.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 500 + }, + { + "aspect_ratio": 0.705, + "height": 2268, + "iso_639_1": "de", + "file_path": "/tdVPICyJLENwgmZHr8RsOgeWoyP.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1600 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/1YnUQABC6N7iu5c1G5jrUI7ZEbn.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "uk", + "file_path": "/78wOYwhjTj6edpen9YyBkBbIAmU.jpg", + "vote_average": 0.166, + "vote_count": 2, + "width": 2000 + }, + { + "aspect_ratio": 0.68, + "height": 1000, + "iso_639_1": null, + "file_path": "/hQWarU3816t1coKbULEIVFi2IH4.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 680 + }, + { + "aspect_ratio": 0.75, + "height": 1280, + "iso_639_1": "es", + "file_path": "/jTl6caQE4JOCJCl6ixaxQOTMKhZ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 960 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/wCssZpoguaHACgkfVTT9vRwxukt.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/yVzqwBlzemXyR4u3jNpfCKImIRP.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 2000 + }, + { + "aspect_ratio": 0.705, + "height": 2179, + "iso_639_1": "fr", + "file_path": "/wo7OlJV82uYSsht6Jt9eopQ7zmk.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1537 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "fr", + "file_path": "/195eLmtwDwe2t4RCPdAA8iEsltJ.jpg", + "vote_average": 0.166, + "vote_count": 1, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/8DB9m0ZUv4SUVqHD14pSgI802On.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "he", + "file_path": "/hhhBAcLfORujfe3gtz3lyF4QNEk.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.697, + "height": 2013, + "iso_639_1": "en", + "file_path": "/A9zSqJhTgJtzUgJJdupAIY4SsNs.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1403 + }, + { + "aspect_ratio": 0.619, + "height": 1256, + "iso_639_1": "bg", + "file_path": "/zVCFs9rtXRMvp88U7iFpttsPYph.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 777 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/lwWWsP4ffhKV9tM0otqkfqVPCAY.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.666, + "height": 1501, + "iso_639_1": "bg", + "file_path": "/6dimiL4vAuGk4W3Z2yVUEf5tTA3.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.7, + "height": 2858, + "iso_639_1": "ko", + "file_path": "/lljWMCR3CZcMv75gII3Q2FsLLN3.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "nl", + "file_path": "/jnaahY4s4ThMpCzBE6u0ZXAN8Xy.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/wYmtZIZZRa56UV2Lurei6w8PjSB.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/5ztk65r3yHCBjuxDcmgHO3eIGR4.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": null, + "file_path": "/pjibhQczMPNbsLVsacWFaLAuDzv.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/kf3Xch3cLrltqhfFtBIbfPN4vRx.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.7, + "height": 2858, + "iso_639_1": "ko", + "file_path": "/pTcC9h62CLSPeT9JeZlJjXi2CrW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.701, + "height": 1684, + "iso_639_1": "ko", + "file_path": "/aRqyldHBnkmaDiYDPleG7OSbXFu.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1181 + }, + { + "aspect_ratio": 0.696, + "height": 1696, + "iso_639_1": "ko", + "file_path": "/b2Gmv0e0wDiX4p2eQCNVCshfWIK.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1181 + }, + { + "aspect_ratio": 0.752, + "height": 1920, + "iso_639_1": "ko", + "file_path": "/40yIWj0tVVzAYi4l868yuMhY0QC.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1443 + }, + { + "aspect_ratio": 0.701, + "height": 1853, + "iso_639_1": "ko", + "file_path": "/kA7lGourGeXPTgjFh2UFq92bugT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1299 + }, + { + "aspect_ratio": 0.75, + "height": 800, + "iso_639_1": null, + "file_path": "/5Q94jybSKWDL8CKM58a64xY7Dkn.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.71, + "height": 2818, + "iso_639_1": "en", + "file_path": "/a8BDmomxRtrD8MvmPz8ndMOWIgQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "it", + "file_path": "/2ChHrqM2MIDCS7adxRMvlqTvyxG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/4dnjgufBAn6nKXGOqWKJtnHRY3E.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/cq7JSVCjyFX3TMRHYsYYPlTG24G.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2000, + "iso_639_1": "zh", + "file_path": "/aCZZLdK53CjbHkpwS8dthkZRIR9.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1335 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/aTlB4atQ8uPuMZfAGkcuZ8kPM6h.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "vi", + "file_path": "/kln2eqvULB8Y8a3tWYVVyX8Pjfr.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "vi", + "file_path": "/rNi0qDp2eOHH704GlzACYz2WH92.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "vi", + "file_path": "/ckKXQaEqjiC8CCWeiwSjUu4xzlw.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ka", + "file_path": "/3TzdBavRzxFYJCdQgAETQEHjbh9.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "de", + "file_path": "/5QudcynlZEgXKjaEAgImFIfjGHO.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.708, + "height": 1074, + "iso_639_1": "en", + "file_path": "/pRAJhu4Ez7BwuUhBK0TiHDrirm8.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 760 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/eU9rwsDCkyaU8SEtJ3ZhTQSwmUA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.676, + "height": 1480, + "iso_639_1": "th", + "file_path": "/5Ih4CMvlL0TUQveXgyCKL5IBj3P.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.669, + "height": 1237, + "iso_639_1": "en", + "file_path": "/6FMa9V6WPFUMvKGafAFRqkhiZSd.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 828 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/trR9niPKWoY7h8KeMEV8nbtEHA6.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.672, + "height": 2197, + "iso_639_1": "ro", + "file_path": "/oceifJ5EG8nQ3Qt5yPwkfsgdW3y.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1476 + }, + { + "aspect_ratio": 0.697, + "height": 2013, + "iso_639_1": null, + "file_path": "/rVCOxsUvh9tsnn3TkQwGKIDrQFQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1403 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/yt2RYW5dCyviUu5LPcaptqCTWZa.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/bWKWGQzwGAsb1MMkOQEwfDNx2Kf.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2475, + "iso_639_1": "en", + "file_path": "/12WI1GPKG1flidifterg7CN1Mgr.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1650 + }, + { + "aspect_ratio": 0.675, + "height": 1080, + "iso_639_1": "sk", + "file_path": "/iFD7sEyj7ePmFEwcgFPw668ymLh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 729 + }, + { + "aspect_ratio": 0.667, + "height": 1200, + "iso_639_1": "en", + "file_path": "/6hevaOt3X4dBXoPPj5QRLJETvxm.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/dmbytACR7x0DwMHI1Wz0MyVBNb3.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.7, + "height": 2048, + "iso_639_1": "lt", + "file_path": "/kIIqkdmBYS6Bjl79kIg5IgEzLc8.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1433 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/6sCHhfS58jYtWFSNDsZ0K7QKAZd.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1200, + "iso_639_1": "en", + "file_path": "/1A3EJHkBGSzMbYpFLOquC7NHpqZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 800 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/n5C3jAenNXTYZj8rx2jMb0g0e7j.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/lOQxPHzDlhVIU7stIzVjI0AuwPP.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.701, + "height": 1426, + "iso_639_1": null, + "file_path": "/nL3vovQSch7X2Oqa6mnWrlzpU7N.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/jAeZL0CH8kXSDmIryA7eYB761XN.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "ar", + "file_path": "/sxSvb0bb5MonuwiT21gxTcrrOL0.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.666, + "height": 1223, + "iso_639_1": "en", + "file_path": "/qB0XdQzwRnIzky1Sf1qNfup0mhq.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 815 + }, + { + "aspect_ratio": 0.667, + "height": 2127, + "iso_639_1": "zh", + "file_path": "/hlGgOYQ4hsyeFY39wGtqKXbHSj2.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1418 + }, + { + "aspect_ratio": 0.667, + "height": 1517, + "iso_639_1": "en", + "file_path": "/o5wicO0TFjMforWRJ6KM9VykTvW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1012 + }, + { + "aspect_ratio": 0.666, + "height": 1530, + "iso_639_1": "en", + "file_path": "/irzVTGFkqyth4SY3ABsF2egJr84.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1019 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "en", + "file_path": "/4lR8GVy3Vtbsien85AQ55epf8PR.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1400 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/cKHrwILTLsAZATjam6OrKQetXMj.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/6wztazU7lnVGGYqD2U41jSgyPuA.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/t8OvWQpIuCwfdLU08fKJtbmvKRI.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/ufdjnYVRBUTvNQXtUt1acpRmutZ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.666, + "height": 2500, + "iso_639_1": "en", + "file_path": "/bsYM7uynOe3wPcQk4WF9xW0Kw1A.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1666 + }, + { + "aspect_ratio": 0.666, + "height": 2818, + "iso_639_1": "en", + "file_path": "/ybTSFM2LMnsKQeqhgx4YgicIxjv.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1878 + }, + { + "aspect_ratio": 0.667, + "height": 2116, + "iso_639_1": "en", + "file_path": "/hJYoTgZislq4zB3us582Axh7pcR.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1411 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/kbNihG5y1do7vEcwU5NUsbAYSuL.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1000, + "iso_639_1": null, + "file_path": "/ux0ilYGw6sCLclwkKY6tezBtyQd.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 667 + }, + { + "aspect_ratio": 0.667, + "height": 1800, + "iso_639_1": "zh", + "file_path": "/uDvCPT8f3qwbK07ebrii65pXX3i.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1200 + }, + { + "aspect_ratio": 0.666, + "height": 857, + "iso_639_1": "mk", + "file_path": "/vHhyYc2kwXfVxMWVTjvaox38z4D.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 571 + }, + { + "aspect_ratio": 0.7, + "height": 2100, + "iso_639_1": "es", + "file_path": "/w9AyORnXXqDY6aKRHEf4vw57WJx.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1470 + }, + { + "aspect_ratio": 0.667, + "height": 2250, + "iso_639_1": "ru", + "file_path": "/9VlabWiOurYYPjBG70W8jgfikd.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.666, + "height": 1000, + "iso_639_1": null, + "file_path": "/kthJ0NvBQZpPh9FIQGxP5KGfgTz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 666 + }, + { + "aspect_ratio": 0.667, + "height": 1104, + "iso_639_1": "en", + "file_path": "/94OEkQH44vddh7K4aKXlDxeitUT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 736 + }, + { + "aspect_ratio": 0.703, + "height": 1000, + "iso_639_1": "ru", + "file_path": "/sMmGMIllJVlk6JHNBIGaeH4d6LD.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 703 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "es", + "file_path": "/ruWXzVrEsfZ2oyWN9PDTN9nlczW.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.657, + "height": 3000, + "iso_639_1": "en", + "file_path": "/bbkyshoUIviywEkPvIdLX89MdPr.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1970 + }, + { + "aspect_ratio": 0.681, + "height": 1200, + "iso_639_1": "pt", + "file_path": "/9it1qyyxxSW7TFKnKF7orVF9BpT.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 817 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/eaTi0cLpMVSp8Ibg66IjdBTpnJh.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 2100, + "iso_639_1": "en", + "file_path": "/o8yeqbSBcXvRTMHDzwSz0jD41Bb.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1400 + }, + { + "aspect_ratio": 0.682, + "height": 1800, + "iso_639_1": "fa", + "file_path": "/3Xf0zrWSK5SbLD2nLiSqh1atlSz.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1228 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "zh", + "file_path": "/w1JqStudDoV9vU8azgfa9OIARtQ.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 1620, + "iso_639_1": "ru", + "file_path": "/gjeZHVlbKaxE0H9Bjr0uTfTOt3D.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1080 + }, + { + "aspect_ratio": 0.704, + "height": 2130, + "iso_639_1": "ru", + "file_path": "/kAo21ZXNF5RWTJvBtujUDk6vD12.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.704, + "height": 2130, + "iso_639_1": "ru", + "file_path": "/ydaQcGupYNKB0Vuq0JMIcG1wtnC.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.704, + "height": 2130, + "iso_639_1": "ru", + "file_path": "/bLzW69ZmQZa5UrsiDGBH152apC2.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.704, + "height": 2130, + "iso_639_1": "ru", + "file_path": "/m09N1pa9aZ8TUVDro3GNnSYh7y.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.704, + "height": 2132, + "iso_639_1": "ru", + "file_path": "/hLe9dR5v1u60Ufb0GxtREuQfvtH.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1500 + }, + { + "aspect_ratio": 0.667, + "height": 1080, + "iso_639_1": "ru", + "file_path": "/2CPzyakbWjJB4i2gjcaS8P6Uy93.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 720 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/lNPDz5MA1217bJwViGO4K08fNaG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 900, + "iso_639_1": "en", + "file_path": "/iZSsNFqxxh3Ix8OkF0iy3Tyjcx5.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 600 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "cs", + "file_path": "/2VFhMD3UOG7kPVVkdv5bCzLjQe5.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 994, + "iso_639_1": "cs", + "file_path": "/GJoITmzUMmvRQNGql3nz4AZDLG.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 663 + }, + { + "aspect_ratio": 0.667, + "height": 1500, + "iso_639_1": "en", + "file_path": "/oNTRPmXSEsi1upDdVjCzZ76DmGq.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 1000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "en", + "file_path": "/fWZ21zxg8ItiMMWDqdTOe8UsTuY.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + }, + { + "aspect_ratio": 0.667, + "height": 3000, + "iso_639_1": "uk", + "file_path": "/riod9l8JPmHq6J08BVS1USMAHZ6.jpg", + "vote_average": 0, + "vote_count": 0, + "width": 2000 + } + ] +} \ No newline at end of file diff --git a/providers/.cache/tmdb_api/tmdb-movie-293660.json b/providers/.cache/tmdb_api/tmdb-movie-293660.json new file mode 100644 index 0000000..bcee82d --- /dev/null +++ b/providers/.cache/tmdb_api/tmdb-movie-293660.json @@ -0,0 +1,84 @@ +{ + "adult": false, + "backdrop_path": "/en971MEXui9diirXlogOrPKmsEn.jpg", + "belongs_to_collection": { + "id": 448150, + "name": "Deadpool Collection", + "poster_path": "/30c5jO7YEXuF8KiWXLg9m28GWDA.jpg", + "backdrop_path": "/dTq7mGyAR5eAydR532feWfjJjzm.jpg" + }, + "budget": 58000000, + "genres": [ + { + "id": 28, + "name": "Action" + }, + { + "id": 12, + "name": "Adventure" + }, + { + "id": 35, + "name": "Comedy" + } + ], + "homepage": "https://www.20thcenturystudios.com/movies/deadpool", + "id": 293660, + "imdb_id": "tt1431045", + "origin_country": [ + "US" + ], + "original_language": "en", + "original_title": "Deadpool", + "overview": "The origin story of former Special Forces operative turned mercenary Wade Wilson, who, after being subjected to a rogue experiment that leaves him with accelerated healing powers, adopts the alter ego Deadpool. Armed with his new abilities and a dark, twisted sense of humor, Deadpool hunts down the man who nearly destroyed his life.", + "popularity": 15.1616, + "poster_path": "/3E53WEZJqP6aM84D8CckXx4pIHw.jpg", + "production_companies": [ + { + "id": 25, + "logo_path": "/qZCc1lty5FzX30aOCVRBLzaVmcp.png", + "name": "20th Century Fox", + "origin_country": "US" + }, + { + "id": 431, + "logo_path": "/6dcR1MbRqYgt3jUVYxkHe68GFnZ.png", + "name": "The Donners' Company", + "origin_country": "US" + }, + { + "id": 28788, + "logo_path": "/Aqomtf9oh5dKtxBNEagkdlp3aGv.png", + "name": "Genre Films", + "origin_country": "US" + }, + { + "id": 7505, + "logo_path": "/837VMM4wOkODc1idNxGT0KQJlej.png", + "name": "Marvel Entertainment", + "origin_country": "US" + } + ], + "production_countries": [ + { + "iso_3166_1": "US", + "name": "United States of America" + } + ], + "release_date": "2016-02-09", + "revenue": 782837347, + "runtime": 108, + "spoken_languages": [ + { + "english_name": "English", + "iso_639_1": "en", + "name": "English" + } + ], + "status": "Released", + "tagline": "Feel the love.", + "title": "Deadpool", + "video": false, + "vote_average": 7.623, + "vote_count": 31904 +} \ No newline at end of file diff --git a/providers/.cache/tmdb_external_id/imdb-tt0111161-movie.json b/providers/.cache/tmdb_external_id/imdb-tt0111161-movie.json new file mode 100644 index 0000000..cb76124 --- /dev/null +++ b/providers/.cache/tmdb_external_id/imdb-tt0111161-movie.json @@ -0,0 +1,5 @@ +{ + "tmdbId": "278", + "tmdbType": "movie", + "title": "The Shawshank Redemption" +} \ No newline at end of file diff --git a/providers/.cache/tmdb_external_id/imdb-tt0120915-movie.json b/providers/.cache/tmdb_external_id/imdb-tt0120915-movie.json new file mode 100644 index 0000000..ccf1cbc --- /dev/null +++ b/providers/.cache/tmdb_external_id/imdb-tt0120915-movie.json @@ -0,0 +1,5 @@ +{ + "tmdbId": "1893", + "tmdbType": "movie", + "title": "Star Wars: Episode I - The Phantom Menace" +} \ No newline at end of file diff --git a/providers/.cache/tmdb_external_id/imdb-tt31868189-movie.json b/providers/.cache/tmdb_external_id/imdb-tt31868189-movie.json new file mode 100644 index 0000000..eb28927 --- /dev/null +++ b/providers/.cache/tmdb_external_id/imdb-tt31868189-movie.json @@ -0,0 +1,5 @@ +{ + "tmdbId": "1263256", + "tmdbType": "movie", + "title": "Happy Gilmore 2" +} \ No newline at end of file diff --git a/providers/.cache/uhdmovies/uhd_final_v18_1263256_movie.json b/providers/.cache/uhdmovies/uhd_final_v18_1263256_movie.json new file mode 100644 index 0000000..10b3e96 --- /dev/null +++ b/providers/.cache/uhdmovies/uhd_final_v18_1263256_movie.json @@ -0,0 +1,74 @@ +{ + "data": [ + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzbjJiSzNaUWpVaG5QM1F2NGJZUjhRVT0=", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.eu/1080p-uhd/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzaE5qZ1JnMXNxa1hHT1JiL3ZEZ2lNcz0=", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.eu/movies/" + }, + { + "quality": "4K | HDR", + "size": "16.68 GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2o4SUZUQjVyK3FDd1MyUXhZQlJ3TFJsdTNiUHhwd1Q4QTVGRlpUdGQxNVpPd0E2YmlWVUJ0c0lXZU9Sa0s1eXVuT2prMEd5dTVEc0xCdHl0Q0FZTTd2Nlhad1pLTnZzODg5L2tWRDR5aGp3ZEpZL014N1RRVVZRYUpWRXg5ZjRGQUtGZDZOTHJ0QVp0MitQUDY4WmVqbA==", + "rawQuality": "Happy Glimore 2 (2025).2160p NF WEB-DL HDR 10bit HEVC [Hindi DDP 5.1 + English DDP 5.1] x265 (HHWEB-UHDMovies) [16.68 GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=dWFxZDQrS3RwK2dZZFVoUHBydmRxQVlORUVHQVc0NkFsRm02UDk3ai80YjZHbE85N2dOWWVZcUhrMVh3U2JONA==" + }, + { + "quality": "4K", + "size": "11.14 GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2dBcGU3S01vY1JIWkxlYnRZUlpscVFDNFIxbEpDeGtTWVFxNCt3dlVsampCNlhrdVJlUXU3VkZCQVZPL0ttd0hPZ2Q3eU5KQ1VGZVI4cW5ZbWxmNUNXWEt0ejRiTUVBQ3FWQ1RZMjBmV2tPMWdZRVNnQURYZjZSWE56cjJUYjNHbnQ1OUZ2NG96VVZUclJlNlZKSGx6YQ==", + "rawQuality": "Happy Glimore 2 (2025).2160p NF WEB-DL SDR 10bit HEVC [Hindi DDP 5.1 + English DDP 5.1] x265 (HHWEB-UHDMovies) [11.14 GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=UHBTVjR3T3IybXRMS0RjY01tK3FHMVJqbGNzdWVEMFczNjkvdjdpWUh2SHl5ekwwVEFnNHFNdllKRFg2Z015TA==" + }, + { + "quality": "1080p", + "size": "5.28 GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2hiSUN6VHNPMnIyK1o2NHV4VkVpQmVnUmRqUmRoOFh1UkpKZkdhY3JmbWxOeXdMU1c2SVdnb0FwTnh1b2EySDVVZTVOK1hwTVk0RTIwNEgvN21BcEp4STc1OHlpbUV0Ylh6c1pyc0V5VjFQTEttS3luUXZPL0ZTQ3pycTlhYXgwcGpjWDcyZFdENmdKam5DUmxXUmFKcQ==", + "rawQuality": "Happy.Gilmore.2.2025.1080p.NF.WEB-DL.DUAL.DDP5.1.Atmos.H.264-ShiNobi [5.28 GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=cW5YYzgyZ2IwdW9pWmdXakRIMTRad2xkV3l2eGxkSEZtc0FwUE8vSEs4cjJTNEZLVWIvTjZvaUVPeHQrZ3p5bQ==" + }, + { + "quality": "1080p", + "size": "5.28 GB", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzdldUTFJiZlVQZVg0V2JWNkRGRU9uM2RPcjB5UTRtWmxvUXF0OUVLWU8yYw==", + "rawQuality": "Happy.Gilmore.2.2025.1080p.NF.WEB-DL.DUAL.DDP5.1.Atmos.H.264-ShiNobi [5.28 GB]", + "driveleechRedirectUrl": "https://uhdmovies.eu/1080p-60fps/" + }, + { + "quality": "1080p", + "size": "5.28 GB", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzcGJmM0lkMWZ4Zyt1Q2xiZ3VlQThqcXlHbHQ2ZUNaejFqbElUa1lXZm9PSg==", + "rawQuality": "Happy.Gilmore.2.2025.1080p.NF.WEB-DL.DUAL.DDP5.1.Atmos.H.264-ShiNobi [5.28 GB]", + "driveleechRedirectUrl": "https://uhdmovies.eu/1080p-10bit/" + }, + { + "quality": "1080p", + "size": "5.28 GB", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzdlJ5d0FSNm5XZjFtTlkrM3FmOFpLbz0=", + "rawQuality": "Happy.Gilmore.2.2025.1080p.NF.WEB-DL.DUAL.DDP5.1.Atmos.H.264-ShiNobi [5.28 GB]", + "driveleechRedirectUrl": "https://uhdmovies.eu/4k-hdr/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzamFGMjVxNDJ0ZTc0RFM2M0pUNFdYTW1tRlNzbVl2Uzk0N3pDSHdoTmZFUQ==", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.eu/2160p-movies/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzbDZUM21XeXB0Tzl6TTB6c1BDN0x0cz0=", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.eu/3d-movies/" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/uhdmovies/uhd_final_v18_1399_tv_s1e1.json b/providers/.cache/uhdmovies/uhd_final_v18_1399_tv_s1e1.json new file mode 100644 index 0000000..199ee1e --- /dev/null +++ b/providers/.cache/uhdmovies/uhd_final_v18_1399_tv_s1e1.json @@ -0,0 +1,25 @@ +{ + "data": [ + { + "quality": "4K | DV | BluRay", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2pvMHJ3OElxMDl5bFcwWjdSL2cvQWZBdGdnVTNZUE5uSUllcDBlZUc0N0FWb25JS2J4bDNLQVRXMTUwYytoRzFodExZa3pDNE00NWVrejVSS1R3bmlyaDZwR2diVkVMUFhLVkRWTlBWazNGNURYNWczYVFEZ080WWNydkNqNHRxajJuUitjdXJEZkZiNnNrRnBrZDlyMg==", + "rawQuality": "Game.of.Thrones.S01.UHD.BluRay.2160p.DV.HEVC.REMUX.[Hindi DD 2.0 – Eng TrueHD.Atmos.7.1]-MSubs~(Tom) FraMeSToR [25 GB/E]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=OEcxNEtwQ3ZrMFlaSEp2eFY1RGZYa1Mwa1V0NThXVGQ3T1FjZnpOM0NBY2poZjQyRFpRNmgwQ3hhZkxzeFpjRw==" + }, + { + "quality": "1080p | BluRay", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2oycFVobHI5cmZ3OVNWaG5RYWZEQTFyRmVkQWZ4amdycTVjU0J6Vnl1UUl5SmxPR1ZxdmJJWlRXL1doYUVKMitqN1FWdDdKdERiTUI2U3c4TVJ1M1lYdDZpMTd3WTc1bXM1WElFYVZLTGlrODFGbVNaN20wOFYzYzBIZkUyTlQvZWFRbXEvMXVndGh6dG1Ld2FwLy82OA==", + "rawQuality": "Game of Thrones (2011) S01 1080p BluRay [Hindi DD 2.0 + English DTS 5.1] x264-LiNG[AK47] [5 GB/E]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=eUc0QUdoUmt5VkxGdTNmWk1aOVlndTFwNHZlUHl5RHNIMFBMZjFZdEdXTkc1L2lqWXlQdU96Y3ZFRXl4UTNNbw==" + }, + { + "quality": "1080p | BluRay", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2pSNWFKd3dwNVR2MVpRd3lqN1cwYXFxQVJiaTdHOC9rWmhqcFNVTytydVVBUFFGVEd1aUJ5YjUxLzZFaFgxU1JjU1hFTEpVdDVpMXlGTWVNMmh0aFNWb2d4TzBaTlNaOU9EM3Y4SVM3bllGSmJQR0NvZzg1TWNObEdOOWZoNFVyazhBOGk3emhxZjhGVy9RY3NpYnB6MQ==", + "rawQuality": "Game of Thrones S01 1080p BluRay 10bit HEVC [Hindi DD 2.0 + English AAC 5.1] x265-Joy[AK47] [800 MB/E] [09 GB ZIP]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=U2lzTnlYK3lhbDg3a0JNb3NsUVZ5OCtLV1FvaysrMG5jRHJOSFpSUllrWW9qNm56UCtYdkRUcmREYlNxVkp4Ng==" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/uhdmovies/uhd_final_v18_293660_movie.json b/providers/.cache/uhdmovies/uhd_final_v18_293660_movie.json new file mode 100644 index 0000000..bdf363e --- /dev/null +++ b/providers/.cache/uhdmovies/uhd_final_v18_293660_movie.json @@ -0,0 +1,123 @@ +{ + "data": [ + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMza2Z2VFBEdEhydU93VlhXT3JOYXFGaUhtU3FyeGkwbjh6d1RoajJEaW5UbQ==", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.mov/4k-movies/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzbUoyR2JpV2JxSXVOcjZLK0dGKzFhNDdlR09GT3JsaHBmcXR6cFVXeEdCYw==", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.mov/2160p-hevc/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMza3ZQQ2I2VEZZM3p6ZWFPMDhBQWRoaEh6c21YSjRDQXV5dHNFdGhNZVF3UA==", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.mov/1080p-uhd/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzdlNJRWNQTHBvd0ZXZXQ2bXQzQ083ND0=", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.mov/movies/" + }, + { + "quality": "4K | HDR | DV | BluRay", + "size": "26GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2hGRTRnNzZRQUIrNUIxcWpDMk9xMEVRNXV2bncyNG8reHE3YVJtOUxBbjhvVzRSYTFjd2VsN2drOUlxM2VVVHd1K3YzcmRtSDg5N3FXMVRQY2hPYjhkUUFmcGlNNnVmb1hZMnJEL2R1WHQxb1dhNEJjV0U2RERKYjVEc2ZHOUk5TzZVbXlxanZHVFhFYVRsOUp0LzdYag==", + "rawQuality": "Deadpool (2016) 2160p UHD BluRay DV HDR 10bit HEVC [Hindi DDP 5.1 + English DDP 5.1] x265 (d3g-UHDMovies [26GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=bFZyc1p1MTVRSU94bXo5ZmJzQlJHcDByaGYwcXZSdnZVbm84ZzVQRlFvSVlLQlFOcTAzWHFGUzB5UGh5cERDRw==" + }, + { + "quality": "4K | HDR | DV | BluRay", + "size": "6GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2llRS9MRS9Md3BGVWZLWDkrQzk3N05kZVd0aFJwNFNJZGJOYjJ2c3U0aXFiVkNpQkxseWhsNkNWemZwYkk2RFRyOWh5VHJiVHFMTGk3ODU0c2xrcG82Yzk3cnJlSEU5R1JwSjBkYk8wN1JkUnJ3dE0wWCtLWHJxUXc3OVBSZEMySTg0azhDMlc4cnVUc3pDUldaQlBGTg==", + "rawQuality": "Deadpool (2016) 2160p UHD BluRay DV HDR 10bit HEVC [Hindi DDP 5.1 + English DDP 5.1] x265 (RARBG-UHDMovies) [6GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=L0VucTlwOXNCdmRjNFJUL01XS2lTNDNuRTNQbGtnYWFpNk5QOUNQSEN1cm1kRUtmUy8rZDhReDUzVEk0N1k2Mw==" + }, + { + "quality": "1080p | HDR | DV | BluRay", + "size": "12GB", + "link": "https://tech.unblockedgames.world/?sid=UldoSTVjL3N3QUU0K05LZzlkVXQxaDdNb0pJa0NJcXArK2RjL3RlQ1gvMD0=", + "rawQuality": "Deadpool (2016) 1080p UHD BluRay DV HDR 10bit HEVC [Hindi DDP 5.1 + English DDP 5.1] x265 (NMcT-UHDMovies [12GB]", + "driveleechRedirectUrl": "javascript:void(0);" + }, + { + "quality": "1080p | BluRay", + "size": "11GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2hBMkpOb2VJRHdGV1ROVTRVc2w5WGJERTNDVlhFUkE3TjdCUWdkcENqZXkwNXFlM1dRK0MwUjJucmpNTjJlUW5sRDZqWXlSamZRa3dHZThVbG9NelErbHA2VXp5eTBlbG1iY0g2NFNGZE1XL2lTSzlyR3VsTHd4YjVGQXF0NTBDSlpuTVhjVmpycGVKNEtGbmlJVVg2VQ==", + "rawQuality": "Deadpool (2016) 1080p UHD BluRay [Hindi DDP 5.1 + English DDP 5.1] x264 (LoRD-UHDMovies) [11GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=NUVMaXZ0dFJJWXd0WlJaWUZyMUpGaDFiRjhRUEt1SXRUT1JPd29JR3NMWEs1ZnNydWl1bjYxeVBCaFp0ZG52dA==" + }, + { + "quality": "1080p | BluRay", + "size": "21GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2pLSkd1UmpiYmdQRExHQnJZbS9UaEhmTUlYT09LQnI5QXIxR1ZGd3JzRy80SXdMbjB4OW9jR1R1S2llMkRTSk02SWdpdkJtSmVmZlVHZ3JBTHdyUkE2djg0VWdISXhiTXM3Q3NwVFg3R3E3UU5rVDJ0RDlUb290ckNuZDRWczdvVEgrSk40N3FpK3Q2UWE2TlVxa0M3ag==", + "rawQuality": "Deadpool (2016) 1080p BluRay REMUX AVC [Hindi DDP 5.1 + English DDP 5.1] x264 (CC-UHDMovies) [21GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=a3lXeUFGT29ZaVFZZFRua2lqOFZ3ZGF2bFRidFNaTWFqSGVYUWgrajZmMXl5TVVKclZWeHJFc1c1eDFFV2s3eQ==" + }, + { + "quality": "1080p | BluRay", + "size": "11.6GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2g5N3pSVmlGNnNibnMrdktudm9QWk9STklic3VrRFZBRE5PWXphOExvcUY0Z1BmRno1cFRKRXZIaHBhV3NIRjVYSWZPa0hwbnBJR1pxSEhGME52RllGcUxvdGx0ZVpqdkVyK3BUdmtlbUlJWE9LRVd2MUlQUFZhZnE5ZTErWUVtNTJnNnVKbE83UkpiTURrZ21UeHZzcQ==", + "rawQuality": "Deadpool (2016) 1080p BluRay AVC [Hindi DDP 5.1 + English DTS 5.1] x264 (HDMaNiAcS-UHDMovies) [11.6GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=bEtkV1ZOemMvVkFMdEVFRGtzK1ladkVndWFBYXhWMWVQSWN1aS96S0kvY2w4R0hUWm1MS25RbHIwVVk3N0RNVg==" + }, + { + "quality": "1080p | BluRay", + "size": "6GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2dYWHN4ODgzeXUrOURvQTVPbHhOVEZUWnJOZzRBdTd5UkhDTmV6bDIyNnFwUFd6VDBMaXdaVFh6U05ZeVl2U3lIMTE3ZjZOTWlEMVgxWFMvTVFHMzBoWHQvK0p1Y3p3UHRsREJjT0w4bVhtekduMnh1dWRKS0NMSTV4bXV6M3dtampiMXlLWDVpdVZLell1WC83b2tnLw==", + "rawQuality": "Deadpool (2016) 1080p BluRay 10bit HEVC [Hindi DDP 5.1 + English AAC 5.1] x265 (BeiTai-UHDMovies) [6GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=OGlEbjNEN1JGVVBueGE5elVCWjY3bTdVYUpPdm5tZGMrTnNna0lsTWIwMzVSQThUbmdQOEE5WkVVbDVRZTFLUg==" + }, + { + "quality": "1080p | BluRay", + "size": "2GB", + "link": "https://tech.unblockedgames.world/?sid=bnpxOTF5Uk9VOVFZM2lEMkxXUmp0VTdoWDBEcGZMVWlrSmRYNlplRk9lQUdoYmJPbisvYi83VjZWNEdWbXVUai8vc3hQdGRwQ3lFRWtlZVVMR3YxSnR1MGV5dE1HTWs0bEtqM0x1bHhCT2dLSjBXTVNJWXVPK0FxeVZrUVZPUDhJMDJLcjRYOXZ4TVZXYlJ5dndpTDNsM0tmbkpQWVJ5em91NU41YndacERXSTNjemxCNE5GVnowM2F5QkYrVlE1SmhQVGcxelZIVjlNNXBONVJLYTcwK0dDNk42cWNMalE3Qk1WY0x1MVA1MFR0NkVGNGZkWkNRZnp6dS85Zml5Yw==", + "rawQuality": "Deadpool (2016) 1080p BluRay 10bit HEVC [Hindi DDP 5.1 + English AAC 5.1] x265 (RARBG-UHDMovies) [2GB]", + "driveleechRedirectUrl": "https://driveleech.net/r?key=UkVwSTIzU1gzQ3czMFBpQlBmeHB6NklzQjRRZFdMYStJaWI4UnZLdVd4QT0=&id=aVl6ZkFvQTZzUHdIUVE4SStONG02YmlONzkydzdVaUY0dDhIdHpxQVpjK2wrNmpUNkhCeHBwZWI3Q3Zwby9HLw==" + }, + { + "quality": "1080p | BluRay", + "size": "2GB", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzbVhDeGlwbGZ5alNmd1dGSExtbllZNmlHQU1hd21Fd00xRGV5R081Ym1xSQ==", + "rawQuality": "Deadpool (2016) 1080p BluRay 10bit HEVC [Hindi DDP 5.1 + English AAC 5.1] x265 (RARBG-UHDMovies) [2GB]", + "driveleechRedirectUrl": "https://uhdmovies.mov/1080p-60fps/" + }, + { + "quality": "1080p | BluRay", + "size": "2GB", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzbTlTYS9SYXVlWmVCNUpiM3VLMGY5VFpGMUMwRnBhRllXMXFWeUE3Q3dGcA==", + "rawQuality": "Deadpool (2016) 1080p BluRay 10bit HEVC [Hindi DDP 5.1 + English AAC 5.1] x265 (RARBG-UHDMovies) [2GB]", + "driveleechRedirectUrl": "https://uhdmovies.mov/1080p-10bit/" + }, + { + "quality": "1080p | BluRay", + "size": "2GB", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzaEtZenp1aENhajVZeG5sTXNFcFVRTT0=", + "rawQuality": "Deadpool (2016) 1080p BluRay 10bit HEVC [Hindi DDP 5.1 + English AAC 5.1] x265 (RARBG-UHDMovies) [2GB]", + "driveleechRedirectUrl": "https://uhdmovies.mov/4k-hdr/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzb3U1SmhRbk5yN0NDdGxPcmZNbUx4QkNPcEZ3bnQvM1R0Y1dsV2p1RFFGRQ==", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.mov/2160p-movies/" + }, + { + "quality": "Unknown Quality", + "size": "Unknown", + "link": "https://tech.unblockedgames.world/?sid=dmpORG1pUDNaSE4zMWt4RTFDVDMzdFBXM3RQUkFjRkF6T05icGNaL0FKejdzT0FXVGhwVVhCdVFkM294c2w4ag==", + "rawQuality": "Unknown Quality", + "driveleechRedirectUrl": "https://uhdmovies.mov/3d-movies/" + } + ] +} \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/1aad53a15787411b795b5524d51152d8.txt b/providers/.cache/xprime_stream_sizes/1aad53a15787411b795b5524d51152d8.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/1aad53a15787411b795b5524d51152d8.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/228c2e738c6cd080cac60a7d469be0a7.txt b/providers/.cache/xprime_stream_sizes/228c2e738c6cd080cac60a7d469be0a7.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/228c2e738c6cd080cac60a7d469be0a7.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/23f2e2575e9a53275b4e65e81f1513e3.txt b/providers/.cache/xprime_stream_sizes/23f2e2575e9a53275b4e65e81f1513e3.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/23f2e2575e9a53275b4e65e81f1513e3.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/30366ba90dc476972dc55b9c3288818c.txt b/providers/.cache/xprime_stream_sizes/30366ba90dc476972dc55b9c3288818c.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/30366ba90dc476972dc55b9c3288818c.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/4000906de5113a825f1e539ed233b1f0.txt b/providers/.cache/xprime_stream_sizes/4000906de5113a825f1e539ed233b1f0.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/4000906de5113a825f1e539ed233b1f0.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/417fb0a29f17b39113fe276a48113094.txt b/providers/.cache/xprime_stream_sizes/417fb0a29f17b39113fe276a48113094.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/417fb0a29f17b39113fe276a48113094.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/48741a5793088283d4d0ed2c6ebbe2da.txt b/providers/.cache/xprime_stream_sizes/48741a5793088283d4d0ed2c6ebbe2da.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/48741a5793088283d4d0ed2c6ebbe2da.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/51895d57ffb6928f37314b9857f9c02b.txt b/providers/.cache/xprime_stream_sizes/51895d57ffb6928f37314b9857f9c02b.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/51895d57ffb6928f37314b9857f9c02b.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/59df54de2c32254e3393fd8e7f3396eb.txt b/providers/.cache/xprime_stream_sizes/59df54de2c32254e3393fd8e7f3396eb.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/59df54de2c32254e3393fd8e7f3396eb.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/5ad6676fd79ba4e616d4bf30fbeac22e.txt b/providers/.cache/xprime_stream_sizes/5ad6676fd79ba4e616d4bf30fbeac22e.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/5ad6676fd79ba4e616d4bf30fbeac22e.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/659030e85029e6bd29f3776fdb947c5c.txt b/providers/.cache/xprime_stream_sizes/659030e85029e6bd29f3776fdb947c5c.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/659030e85029e6bd29f3776fdb947c5c.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/823fa5aa59cbe94cae6434846fe7429e.txt b/providers/.cache/xprime_stream_sizes/823fa5aa59cbe94cae6434846fe7429e.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/823fa5aa59cbe94cae6434846fe7429e.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/83202d7c20aac5625749f059374b0994.txt b/providers/.cache/xprime_stream_sizes/83202d7c20aac5625749f059374b0994.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/83202d7c20aac5625749f059374b0994.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/871cdc7cd959d5b93f2f1604de80c6f5.txt b/providers/.cache/xprime_stream_sizes/871cdc7cd959d5b93f2f1604de80c6f5.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/871cdc7cd959d5b93f2f1604de80c6f5.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/8f4ff27a0b288b211c0b54e9e063dd38.txt b/providers/.cache/xprime_stream_sizes/8f4ff27a0b288b211c0b54e9e063dd38.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/8f4ff27a0b288b211c0b54e9e063dd38.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/a9f2b84096292e5beddaf83202b669ea.txt b/providers/.cache/xprime_stream_sizes/a9f2b84096292e5beddaf83202b669ea.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/a9f2b84096292e5beddaf83202b669ea.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/b16713fa6fa939275df6fee6eccceecd.txt b/providers/.cache/xprime_stream_sizes/b16713fa6fa939275df6fee6eccceecd.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/b16713fa6fa939275df6fee6eccceecd.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/ba11809a580e18ecea164232540c91ab.txt b/providers/.cache/xprime_stream_sizes/ba11809a580e18ecea164232540c91ab.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/ba11809a580e18ecea164232540c91ab.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/bf2e8662e91c220a1dbfd3396a5e262e.txt b/providers/.cache/xprime_stream_sizes/bf2e8662e91c220a1dbfd3396a5e262e.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/bf2e8662e91c220a1dbfd3396a5e262e.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/c00fb6bcf578bf8bb8063a5504295aff.txt b/providers/.cache/xprime_stream_sizes/c00fb6bcf578bf8bb8063a5504295aff.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/c00fb6bcf578bf8bb8063a5504295aff.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/c80f68293909d1cdc490eedbd09d9162.txt b/providers/.cache/xprime_stream_sizes/c80f68293909d1cdc490eedbd09d9162.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/c80f68293909d1cdc490eedbd09d9162.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/.cache/xprime_stream_sizes/c9f286b6cbbd5807e4175a82c3a004f5.txt b/providers/.cache/xprime_stream_sizes/c9f286b6cbbd5807e4175a82c3a004f5.txt new file mode 100644 index 0000000..efc4e60 --- /dev/null +++ b/providers/.cache/xprime_stream_sizes/c9f286b6cbbd5807e4175a82c3a004f5.txt @@ -0,0 +1 @@ +Unknown size \ No newline at end of file diff --git a/providers/4khdhub.js b/providers/4khdhub.js new file mode 100644 index 0000000..4ccf07c --- /dev/null +++ b/providers/4khdhub.js @@ -0,0 +1,1764 @@ +const https = require('https'); +const http = require('http'); +const { URL } = require('url'); +const cheerio = require('cheerio'); +const fs = require('fs').promises; +const path = require('path'); + +// Configuration +const DOMAINS_URL = 'https://raw.githubusercontent.com/phisher98/TVVVV/refs/heads/main/domains.json'; +let cachedDomains = null; + +// --- Caching Configuration --- +const CACHE_ENABLED = process.env.DISABLE_CACHE !== 'true'; +console.log(`[4KHDHub] Internal cache is ${CACHE_ENABLED ? 'enabled' : 'disabled'}.`); +const CACHE_DIR = process.env.VERCEL ? path.join('/tmp', '.4khdhub_cache') : path.join(__dirname, '.cache', '4khdhub'); + +// Caching layer simplified: currently inert placeholders (extend for FS persistence if desired) + +// --- Caching Helper Functions --- +const ensureCacheDir = async () => { + if (!CACHE_ENABLED) return; + try { + await fs.mkdir(CACHE_DIR, { recursive: true }); + } catch (error) { + if (error.code !== 'EEXIST') { + console.error(`[4KHDHub Cache] Error creating cache directory: ${error.message}`); + } + } +}; + +const getFromCache = async (key) => { + if (!CACHE_ENABLED) return null; + return null; // no-op +}; + +const saveToCache = async (key, data) => { + if (!CACHE_ENABLED) return; + // no-op (placeholder for future FS caching) +}; + +// Initialize cache directory on startup +ensureCacheDir(); + +// Utility functions +function base64Decode(str) { + return Buffer.from(str, 'base64').toString('utf-8'); +} + + +function rot13(str) { + return str.replace(/[A-Za-z]/g, function(char) { + const start = char <= 'Z' ? 65 : 97; + return String.fromCharCode(((char.charCodeAt(0) - start + 13) % 26) + start); + }); +} + +function validateUrl(url) { + return new Promise((resolve) => { + try { + const urlObj = new URL(url); + + // Skip validation for known reliable hosting services + const trustedHosts = [ + 'pixeldrain.dev', + 'r2.dev' + ]; + + const isTrustedHost = trustedHosts.some(host => urlObj.hostname.includes(host)); + if (isTrustedHost) { + console.log(`[4KHDHub] Skipping validation for trusted host: ${urlObj.hostname}`); + resolve(true); + return; + } + + const protocol = urlObj.protocol === 'https:' ? https : http; + + const options = { + method: 'HEAD', + timeout: 15000, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' + } + }; + + const req = protocol.request(url, options, (res) => { + // Consider 2xx and 3xx status codes as valid, including 206 (Partial Content) + const isValid = res.statusCode >= 200 && res.statusCode < 400; + console.log(`[4KHDHub] URL validation for ${url}: ${res.statusCode} - ${isValid ? 'VALID' : 'INVALID'}`); + res.destroy(); // Close connection immediately + resolve(isValid); + }); + + req.on('error', (err) => { + console.log(`[4KHDHub] URL validation error for ${url}: ${err.message}`); + resolve(false); + }); + + req.on('timeout', () => { + console.log(`[4KHDHub] URL validation timeout for ${url}`); + req.destroy(); + resolve(false); + }); + + req.setTimeout(15000); + req.end(); + } catch (error) { + console.log(`[4KHDHub] URL validation parse error for ${url}: ${error.message}`); + resolve(false); + } + }); +} + +function makeRequest(url, options = {}) { + return new Promise((resolve, reject) => { + const urlObj = new URL(url); + const isHttps = urlObj.protocol === 'https:'; + const httpModule = isHttps ? https : http; + + const requestOptions = { + hostname: urlObj.hostname, + port: urlObj.port || (isHttps ? 443 : 80), + path: urlObj.pathname + urlObj.search, + method: options.method || 'GET', + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + ...options.headers + }, + timeout: 30000 + }; + + const req = httpModule.request(requestOptions, (res) => { + if (options.allowRedirects === false && (res.statusCode === 301 || res.statusCode === 302 || res.statusCode === 303 || res.statusCode === 307 || res.statusCode === 308)) { + resolve({ statusCode: res.statusCode, headers: res.headers }); + return; + } + + let data = ''; + res.on('data', chunk => data += chunk); + res.on('end', () => { + if (options.parseHTML && data) { + const $ = cheerio.load(data); + resolve({ $: $, body: data, statusCode: res.statusCode, headers: res.headers }); + } else { + resolve({ body: data, statusCode: res.statusCode, headers: res.headers }); + } + }); + }); + + req.on('error', reject); + req.on('timeout', () => reject(new Error('Request timeout'))); + req.end(); + }); +} + +// Helper function to decode URL-encoded filenames and make them human-readable +function decodeFilename(filename) { + if (!filename) return filename; + + try { + // Handle UTF-8 prefix and decode URL encoding + let decoded = filename; + + // Remove UTF-8 prefix if present + if (decoded.startsWith('UTF-8')) { + decoded = decoded.substring(5); + } + + // Decode URL encoding (%20 -> space, etc.) + decoded = decodeURIComponent(decoded); + + return decoded; + } catch (error) { + console.log(`[4KHDHub] Error decoding filename: ${error.message}`); + return filename; // Return original if decoding fails + } +} + +function getFilenameFromUrl(url) { + return new Promise((resolve) => { + try { + const urlObj = new URL(url); + const isHttps = urlObj.protocol === 'https:'; + const httpModule = isHttps ? https : http; + + const requestOptions = { + hostname: urlObj.hostname, + port: urlObj.port || (isHttps ? 443 : 80), + path: urlObj.pathname + urlObj.search, + method: 'HEAD', + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' + }, + timeout: 10000 + }; + + const req = httpModule.request(requestOptions, (res) => { + const contentDisposition = res.headers['content-disposition']; + let filename = null; + + if (contentDisposition) { + const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/i); + if (filenameMatch && filenameMatch[1]) { + filename = filenameMatch[1].replace(/["']/g, ''); + } + } + + if (!filename) { + // Extract from URL path + const pathParts = urlObj.pathname.split('/'); + filename = pathParts[pathParts.length - 1]; + if (filename && filename.includes('.')) { + filename = filename.replace(/\.[^.]+$/, ''); // Remove extension + } + } + + // Decode the filename to make it human-readable + const decodedFilename = decodeFilename(filename); + resolve(decodedFilename || null); + }); + + req.on('error', () => resolve(null)); + req.on('timeout', () => resolve(null)); + req.end(); + } catch (error) { + resolve(null); + } + }); +} + +function getDomains() { + if (cachedDomains) { + return Promise.resolve(cachedDomains); + } + + return makeRequest(DOMAINS_URL) + .then(response => { + cachedDomains = JSON.parse(response.body); + return cachedDomains; + }) + .catch(error => { + console.error('[4KHDHub] Failed to fetch domains:', error.message); + return null; + }); +} + +function getRedirectLinks(url) { + return makeRequest(url) + .then(response => { + const doc = response.body; + const regex = /s\('o','([A-Za-z0-9+/=]+)'|ck\('_wp_http_\d+','([^']+)'/g; + let combinedString = ''; + let match; + + while ((match = regex.exec(doc)) !== null) { + const extractedValue = match[1] || match[2]; + if (extractedValue) { + combinedString += extractedValue; + } + } + + try { + const decodedString = base64Decode(rot13(base64Decode(base64Decode(combinedString)))); + const jsonObject = JSON.parse(decodedString); + const encodedurl = base64Decode(jsonObject.o || '').trim(); + const data = base64Decode(jsonObject.data || '').trim(); + const wphttp1 = (jsonObject.blog_url || '').trim(); + + if (encodedurl) { + return Promise.resolve(encodedurl); + } + + if (wphttp1 && data) { + return makeRequest(`${wphttp1}?re=${data}`, { parseHTML: true }) + .then(resp => resp.document.body.textContent.trim()) + .catch(() => ''); + } + + return Promise.resolve(''); + } catch (e) { + console.error('[4KHDHub] Error processing links:', e.message); + return Promise.resolve(''); + } + }) + .catch(error => { + console.error('[4KHDHub] Error fetching redirect links:', error.message); + return Promise.resolve(''); + }); +} + +function getIndexQuality(str) { + const match = (str || '').match(/(\d{3,4})[pP]/); + return match ? parseInt(match[1]) : 2160; +} + +function getBaseUrl(url) { + try { + const urlObj = new URL(url); + return `${urlObj.protocol}//${urlObj.host}`; + } catch (e) { + return ''; + } +} + +function cleanTitle(title) { + // Decode URL-encoded title first + const decodedTitle = decodeFilename(title); + const parts = decodedTitle.split(/[.\-_]/); + + const qualityTags = ['WEBRip', 'WEB-DL', 'WEB', 'BluRay', 'HDRip', 'DVDRip', 'HDTV', 'CAM', 'TS', 'R5', 'DVDScr', 'BRRip', 'BDRip', 'DVD', 'PDTV', 'HD']; + const audioTags = ['AAC', 'AC3', 'DTS', 'MP3', 'FLAC', 'DD5', 'EAC3', 'Atmos']; + const subTags = ['ESub', 'ESubs', 'Subs', 'MultiSub', 'NoSub', 'EnglishSub', 'HindiSub']; + const codecTags = ['x264', 'x265', 'H264', 'HEVC', 'AVC']; + + const startIndex = parts.findIndex(part => + qualityTags.some(tag => part.toLowerCase().includes(tag.toLowerCase())) + ); + + const endIndex = parts.map((part, index) => { + const hasTag = [...subTags, ...audioTags, ...codecTags].some(tag => + part.toLowerCase().includes(tag.toLowerCase()) + ); + return hasTag ? index : -1; + }).filter(index => index !== -1).pop() || -1; + + if (startIndex !== -1 && endIndex !== -1 && endIndex >= startIndex) { + return parts.slice(startIndex, endIndex + 1).join('.'); + } else if (startIndex !== -1) { + return parts.slice(startIndex).join('.'); + } else { + return parts.slice(-3).join('.'); + } +} + +// Enhanced title normalization with better handling of special cases +function normalizeTitle(title) { + return title + .toLowerCase() + // Handle common title variations + .replace(/&/g, 'and') // & -> and + .replace(/\b(the|a|an)\b/g, '') // Remove articles + // Handle common abbreviations and expansions + .replace(/\bvs\b/g, 'versus') + .replace(/\bversus\b/g, 'vs') + .replace(/\bdr\b/g, 'doctor') + .replace(/\bdoctor\b/g, 'dr') + .replace(/\bmr\b/g, 'mister') + .replace(/\bmister\b/g, 'mr') + .replace(/\bst\b/g, 'saint') + .replace(/\bsaint\b/g, 'st') + .replace(/\bmt\b/g, 'mount') + .replace(/\bmount\b/g, 'mt') + .replace(/[^a-z0-9\s]/g, ' ') // Remove special characters + .replace(/\s+/g, ' ') // Normalize whitespace + .trim(); +} + +// Extract year from title if present +function extractYear(title) { + const yearMatch = title.match(/\((19|20)\d{2}\)/); + return yearMatch ? parseInt(yearMatch[0].replace(/[()]/g, '')) : null; +} + +// Remove year from title for cleaner comparison +function removeYear(title) { + return title.replace(/\s*\((19|20)\d{2}\)\s*/g, ' ').trim(); +} + +// Generate alternative search queries for better matching +function generateAlternativeQueries(title, originalTitle = null) { + const queries = new Set(); + + // Add the original title + queries.add(title); + + // Add original title if different + if (originalTitle && originalTitle !== title) { + queries.add(originalTitle); + } + + // Remove year and try again + const titleWithoutYear = removeYear(title); + if (titleWithoutYear !== title) { + queries.add(titleWithoutYear); + } + + // Remove colons and other punctuation + queries.add(title.replace(/:/g, '')); + queries.add(title.replace(/[^a-zA-Z0-9\s]/g, ' ').replace(/\s+/g, ' ').trim()); + + // Handle common title variations + const variations = [ + title.replace(/\bPart\s+(\d+)\b/gi, 'Part $1'), + title.replace(/\bPart\s+(\d+)\b/gi, '$1'), + title.replace(/\b(\d+)\b/g, match => { + const num = parseInt(match); + const romans = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X']; + return romans[num] || match; + }), + title.replace(/\b(I{1,3}|IV|V|VI{0,3}|IX|X)\b/g, match => { + const romans = { 'I': '1', 'II': '2', 'III': '3', 'IV': '4', 'V': '5', + 'VI': '6', 'VII': '7', 'VIII': '8', 'IX': '9', 'X': '10' }; + return romans[match] || match; + }) + ]; + + variations.forEach(v => { + if (v && v !== title) queries.add(v); + }); + + // Remove duplicates and filter out empty strings + return Array.from(queries).filter(q => q && q.trim().length > 0); +} + +// Enhanced similarity calculation with multiple algorithms +function calculateSimilarity(str1, str2) { + const s1 = normalizeTitle(str1); + const s2 = normalizeTitle(str2); + + if (s1 === s2) return 1.0; + + // Levenshtein distance + const levenshtein = calculateLevenshteinSimilarity(s1, s2); + + // Jaccard similarity (word-based) + const jaccard = calculateJaccardSimilarity(s1, s2); + + // Longest common subsequence + const lcs = calculateLCSSimilarity(s1, s2); + + // Weighted combination of different similarity measures + return (levenshtein * 0.4) + (jaccard * 0.4) + (lcs * 0.2); +} + +// Levenshtein distance similarity +function calculateLevenshteinSimilarity(s1, s2) { + const len1 = s1.length; + const len2 = s2.length; + + if (len1 === 0) return len2 === 0 ? 1.0 : 0.0; + if (len2 === 0) return 0.0; + + const matrix = Array(len1 + 1).fill().map(() => Array(len2 + 1).fill(0)); + + for (let i = 0; i <= len1; i++) matrix[i][0] = i; + for (let j = 0; j <= len2; j++) matrix[0][j] = j; + + for (let i = 1; i <= len1; i++) { + for (let j = 1; j <= len2; j++) { + const cost = s1[i - 1] === s2[j - 1] ? 0 : 1; + matrix[i][j] = Math.min( + matrix[i - 1][j] + 1, // deletion + matrix[i][j - 1] + 1, // insertion + matrix[i - 1][j - 1] + cost // substitution + ); + } + } + + const maxLen = Math.max(len1, len2); + return (maxLen - matrix[len1][len2]) / maxLen; +} + +// Jaccard similarity for word-based comparison +function calculateJaccardSimilarity(s1, s2) { + const words1 = new Set(s1.split(' ').filter(w => w.length > 0)); + const words2 = new Set(s2.split(' ').filter(w => w.length > 0)); + + const intersection = new Set([...words1].filter(w => words2.has(w))); + const union = new Set([...words1, ...words2]); + + return union.size === 0 ? 0 : intersection.size / union.size; +} + +// Longest Common Subsequence similarity +function calculateLCSSimilarity(s1, s2) { + const len1 = s1.length; + const len2 = s2.length; + + if (len1 === 0 || len2 === 0) return 0; + + const dp = Array(len1 + 1).fill().map(() => Array(len2 + 1).fill(0)); + + for (let i = 1; i <= len1; i++) { + for (let j = 1; j <= len2; j++) { + if (s1[i - 1] === s2[j - 1]) { + dp[i][j] = dp[i - 1][j - 1] + 1; + } else { + dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + + const maxLen = Math.max(len1, len2); + return dp[len1][len2] / maxLen; +} + +// Enhanced word containment check with fuzzy matching +function containsWords(title, query) { + const titleWords = normalizeTitle(title).split(' ').filter(w => w.length > 1); + const queryWords = normalizeTitle(query).split(' ').filter(w => w.length > 1); + + let matchedWords = 0; + + for (const queryWord of queryWords) { + const found = titleWords.some(titleWord => { + // Exact match + if (titleWord === queryWord) return true; + + // Substring match + if (titleWord.includes(queryWord) || queryWord.includes(titleWord)) return true; + + // Fuzzy match for longer words (allow 1 character difference) + if (queryWord.length > 3 && titleWord.length > 3) { + const similarity = calculateLevenshteinSimilarity(titleWord, queryWord); + return similarity > 0.8; + } + + return false; + }); + + if (found) matchedWords++; + } + + // Require at least 70% of query words to be matched + return matchedWords / queryWords.length >= 0.7; +} + +// Enhanced best match finder with improved scoring +function findBestMatch(results, query, tmdbYear = null) { + if (results.length === 0) return null; + if (results.length === 1) return results[0]; + + console.log(`[4KHDHub] Finding best match for: "${query}" (Year: ${tmdbYear || 'N/A'})`); + + // Strict year gating: if TMDB year is known, only consider exact matches first, + // then allow unknown-year entries as fallback. Reject clear mismatches. + let candidateResults = results; + if (tmdbYear) { + const tmdbYearInt = parseInt(tmdbYear); + const exactYearMatches = results.filter(r => { + const y = r.year || extractYear(r.title); + return y && parseInt(y) === tmdbYearInt; + }); + if (exactYearMatches.length > 0) { + candidateResults = exactYearMatches; + console.log(`[4KHDHub] Year filter: using ${exactYearMatches.length} exact year matches for ${tmdbYearInt}`); + } else { + const unknownYear = results.filter(r => { + const y = r.year || extractYear(r.title); + return !y; + }); + if (unknownYear.length > 0) { + candidateResults = unknownYear; + console.log(`[4KHDHub] Year filter: no exact matches; falling back to ${unknownYear.length} unknown-year results`); + } else { + console.log(`[4KHDHub] Year filter: no exact or unknown-year matches for ${tmdbYearInt}; rejecting results`); + return null; + } + } + } + + // Score each result + const scoredResults = candidateResults.map(result => { + let score = 0; + // Use year from search result metadata if available, otherwise extract from title + const resultYear = result.year || extractYear(result.title); + const queryWithoutYear = removeYear(query); + const resultWithoutYear = removeYear(result.title); + + // Exact match gets highest score (without year) + if (normalizeTitle(resultWithoutYear) === normalizeTitle(queryWithoutYear)) { + score += 100; + } + + // Enhanced similarity score (0-60 points) + const similarity = calculateSimilarity(resultWithoutYear, queryWithoutYear); + score += similarity * 60; + + // Word containment bonus (0-25 points) + if (containsWords(result.title, query)) { + score += 25; + } + + // Year matching bonus (strict): only reward exact match when TMDB year is known + if (tmdbYear && resultYear) { + if (parseInt(tmdbYear) === parseInt(resultYear)) { + score += 30; // Strong reward for exact year + } + } else if (resultYear && !tmdbYear) { + score += 5; // Slight bonus for having year info when TMDB year unknown + } + + // Length similarity bonus (0-10 points) + const lengthDiff = Math.abs(resultWithoutYear.length - queryWithoutYear.length); + score += Math.max(0, 10 - lengthDiff / 3); + + // Prefer results with quality indicators + if (result.title.match(/\b(1080p|720p|4K|2160p|BluRay|WEB-DL)\b/i)) { + score += 3; + } + + // Penalty for results with too many extra words + const queryWordCount = queryWithoutYear.split(' ').filter(w => w.length > 0).length; + const resultWordCount = resultWithoutYear.split(' ').filter(w => w.length > 0).length; + if (resultWordCount > queryWordCount * 2) { + score -= 10; + } + + return { ...result, score, similarity, resultYear }; + }); + + // Sort by score (highest first) + scoredResults.sort((a, b) => b.score - a.score); + + console.log('[4KHDHub] Title matching scores:'); + scoredResults.slice(0, 5).forEach((result, index) => { + console.log(`${index + 1}. ${result.title} (Score: ${result.score.toFixed(1)}, Similarity: ${(result.similarity * 100).toFixed(1)}%, Year: ${result.resultYear || 'N/A'})`); + }); + + // Additional validation: ensure the best match has a reasonable score + const bestResult = scoredResults[0]; + // Final guard: if TMDB year is known and best has a conflicting year, reject + if (tmdbYear && bestResult.resultYear && parseInt(bestResult.resultYear) !== parseInt(tmdbYear)) { + console.log(`[4KHDHub] Best match year mismatch (best=${bestResult.resultYear}, tmdb=${tmdbYear}), rejecting`); + return null; + } + if (bestResult.score < 30) { + console.log(`[4KHDHub] Best match score too low (${bestResult.score.toFixed(1)}), rejecting`); + return null; + } + + return bestResult; +} + +function extractHubCloudLinks(url, referer) { + console.log(`[4KHDHub] Starting HubCloud extraction for: ${url}`); + const baseUrl = getBaseUrl(url); + + return makeRequest(url, { parseHTML: true }) + .then(response => { + const $ = response.$; + console.log(`[4KHDHub] Got HubCloud page, looking for download element...`); + + // Check if this is already a hubcloud.php URL + let href; + if (url.includes('hubcloud.php')) { + href = url; + console.log(`[4KHDHub] Already a hubcloud.php URL: ${href}`); + } else { + const downloadElement = $('#download'); + if (downloadElement.length === 0) { + console.log('[4KHDHub] Download element #download not found, trying alternatives...'); + // Try alternative selectors + const alternatives = ['a[href*="hubcloud.php"]', '.download-btn', 'a[href*="download"]']; + let found = false; + + for (const selector of alternatives) { + const altElement = $(selector).first(); + if (altElement.length > 0) { + const rawHref = altElement.attr('href'); + if (rawHref) { + href = rawHref.startsWith('http') ? rawHref : `${baseUrl.replace(/\/$/, '')}/${rawHref.replace(/^\//, '')}`; + console.log(`[4KHDHub] Found download link with selector ${selector}: ${href}`); + found = true; + break; + } + } + } + + if (!found) { + throw new Error('Download element not found with any selector'); + } + } else { + const rawHref = downloadElement.attr('href'); + if (!rawHref) { + throw new Error('Download href not found'); + } + + href = rawHref.startsWith('http') ? rawHref : `${baseUrl.replace(/\/$/, '')}/${rawHref.replace(/^\//, '')}`; + console.log(`[4KHDHub] Found download href: ${href}`); + } + } + + console.log(`[4KHDHub] Making request to HubCloud download page: ${href}`); + return makeRequest(href, { parseHTML: true }); + }) + .then(response => { + const $ = response.$; + + console.log(`[4KHDHub] Processing HubCloud download page...`); + + // Extract quality and size information + const size = $('i#size').text() || ''; + const header = $('div.card-header').text() || ''; + const quality = getIndexQuality(header); + const headerDetails = cleanTitle(header); + + console.log(`[4KHDHub] Extracted info - Size: ${size}, Header: ${header}, Quality: ${quality}, HeaderDetails: ${headerDetails}`); + + // Extract just the quality for clean naming + const qualityLabel = quality ? ` - ${quality}p` : ''; + + // We'll build the title format later after getting actual filename from HEAD request + + // Find download buttons + const downloadButtons = $('div.card-body h2 a.btn'); + console.log(`[4KHDHub] Found ${downloadButtons.length} download buttons`); + + if (downloadButtons.length === 0) { + // Try alternative selectors for download buttons + const altSelectors = ['a.btn', '.btn', 'a[href]']; + for (const selector of altSelectors) { + const altButtons = $(selector); + if (altButtons.length > 0) { + console.log(`[4KHDHub] Found ${altButtons.length} buttons with alternative selector: ${selector}`); + altButtons.each((index, btn) => { + const $btn = $(btn); + const link = $btn.attr('href'); + const text = $btn.text(); + console.log(`[4KHDHub] Button ${index + 1}: ${text} -> ${link}`); + }); + break; + } + } + } + + const promises = downloadButtons.get().map((button, index) => { + return new Promise((resolve) => { + const $button = $(button); + const link = $button.attr('href'); + const text = $button.text(); + + console.log(`[4KHDHub] Processing button ${index + 1}: "${text}" -> ${link}`); + + if (!link) { + console.log(`[4KHDHub] Button ${index + 1} has no link`); + resolve(null); + return; + } + + const buttonBaseUrl = getBaseUrl(link); + + if (text.includes('FSL Server')) { + console.log(`[4KHDHub] Button ${index + 1} is FSL Server`); + // Get actual filename from HEAD request + getFilenameFromUrl(link) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - FSL Server${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - FSL Server${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }); + } else if (text.includes('Download File')) { + console.log(`[4KHDHub] Button ${index + 1} is Download File`); + // Get actual filename from HEAD request + getFilenameFromUrl(link) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - HubCloud${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - HubCloud${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }); + } else if (text.includes('BuzzServer')) { + console.log(`[4KHDHub] Button ${index + 1} is BuzzServer, following redirect...`); + // Handle BuzzServer redirect + makeRequest(`${link}/download`, { + parseHTML: false, + allowRedirects: false, + headers: { 'Referer': link } + }) + .then(response => { + const redirectUrl = response.headers['hx-redirect'] || response.headers['location']; + if (redirectUrl) { + console.log(`[4KHDHub] BuzzServer redirect found: ${redirectUrl}`); + const finalUrl = buttonBaseUrl + redirectUrl; + // Get actual filename from HEAD request + getFilenameFromUrl(finalUrl) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - BuzzServer${qualityLabel}`, + title: finalTitle, + url: finalUrl, + quality: quality + }); + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - BuzzServer${qualityLabel}`, + title: finalTitle, + url: finalUrl, + quality: quality + }); + }); + } else { + console.log(`[4KHDHub] BuzzServer redirect not found`); + resolve(null); + } + }) + .catch(err => { + console.log(`[4KHDHub] BuzzServer redirect failed: ${err.message}`); + resolve(null); + }); + } else if (link.includes('pixeldra')) { + console.log(`[4KHDHub] Button ${index + 1} is Pixeldrain`); + + // Convert pixeldrain.net/u/ID format to pixeldrain.net/api/file/ID format + let convertedLink = link; + const pixeldrainMatch = link.match(/pixeldrain\.net\/u\/([a-zA-Z0-9]+)/); + if (pixeldrainMatch) { + const fileId = pixeldrainMatch[1]; + convertedLink = `https://pixeldrain.net/api/file/${fileId}`; + console.log(`[4KHDHub] Converted Pixeldrain URL from ${link} to ${convertedLink}`); + } + + // Get actual filename from HEAD request + getFilenameFromUrl(convertedLink) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - Pixeldrain${qualityLabel}`, + title: finalTitle, + url: convertedLink, + quality: quality + }); + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - Pixeldrain${qualityLabel}`, + title: finalTitle, + url: convertedLink, + quality: quality + }); + }); + } else if (text.includes('S3 Server')) { + console.log(`[4KHDHub] Button ${index + 1} is S3 Server`); + // Get actual filename from HEAD request + getFilenameFromUrl(link) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - S3 Server${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - S3 Server${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }); + } else if (text.includes('10Gbps')) { + console.log(`[4KHDHub] Button ${index + 1} is 10Gbps server, following redirects...`); + // Handle 10Gbps server with multiple redirects + let currentLink = link; + + const followRedirects = () => { + return makeRequest(currentLink, { + parseHTML: false, + allowRedirects: false + }) + .then(response => { + const redirectUrl = response.headers['location']; + if (!redirectUrl) { + throw new Error('No redirect found'); + } + + console.log(`[4KHDHub] 10Gbps redirect: ${redirectUrl}`); + + if (redirectUrl.includes('id=')) { + // Final redirect, extract the link parameter + const finalLink = redirectUrl.split('link=')[1]; + if (finalLink) { + console.log(`[4KHDHub] 10Gbps final link: ${finalLink}`); + const decodedUrl = decodeURIComponent(finalLink); + // Get actual filename from HEAD request + return getFilenameFromUrl(decodedUrl) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + return { + name: `4KHDHub - 10Gbps Server${qualityLabel}`, + title: finalTitle, + url: decodedUrl, + quality: quality + }; + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + return { + name: `4KHDHub - 10Gbps Server${qualityLabel}`, + title: finalTitle, + url: decodedUrl, + quality: quality + }; + }); + } + throw new Error('Final link not found'); + } else { + currentLink = redirectUrl; + return followRedirects(); + } + }); + }; + + followRedirects() + .then(result => { + console.log(`[4KHDHub] 10Gbps processing completed`); + resolve(result); + }) + .catch(err => { + console.log(`[4KHDHub] 10Gbps processing failed: ${err.message}`); + resolve(null); + }); + } else { + console.log(`[4KHDHub] Button ${index + 1} is generic link`); + // Generic link - Get actual filename from HEAD request + getFilenameFromUrl(link) + .then(actualFilename => { + const displayFilename = actualFilename || headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - HubCloud${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }) + .catch(() => { + const displayFilename = headerDetails || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + resolve({ + name: `4KHDHub - HubCloud${qualityLabel}`, + title: finalTitle, + url: link, + quality: quality + }); + }); + } + }); + }); + + return Promise.all(promises) + .then(results => { + const validResults = results.filter(result => result !== null); + console.log(`[4KHDHub] HubCloud extraction completed, found ${validResults.length} valid links`); + return validResults; + }); + }) + .catch(error => { + console.error(`[4KHDHub] HubCloud extraction error for ${url}:`, error.message); + return []; + }); +} + +function searchContent(query) { + return getDomains() + .then(domains => { + if (!domains || !domains['4khdhub']) { + throw new Error('Failed to get domain information'); + } + + const baseUrl = domains['4khdhub']; + const searchUrl = `${baseUrl}/?s=${encodeURIComponent(query)}`; + return makeRequest(searchUrl, { parseHTML: true }) + .then(response => ({ response, baseUrl })); + }) + .then(({ response, baseUrl }) => { + const $ = response.$; + const results = []; + + $('div.card-grid a').each((index, card) => { + const $card = $(card); + const title = $card.find('h3').text(); + const href = $card.attr('href'); + const posterUrl = $card.find('img').attr('src'); + + // Extract year from movie-card-meta element + const metaElement = $card.find('.movie-card-meta'); + let year = null; + if (metaElement.length > 0) { + const metaText = metaElement.text().trim(); + const yearMatch = metaText.match(/(19|20)\d{2}/); + if (yearMatch) { + year = parseInt(yearMatch[0]); + } + } + + if (title && href) { + // Convert relative URLs to absolute URLs + const absoluteUrl = href.startsWith('http') ? href : `${baseUrl}${href.startsWith('/') ? '' : '/'}${href}`; + results.push({ + title: title.trim(), + url: absoluteUrl, + poster: posterUrl || '', + year: year + }); + } + }); + + return results; + }); +} + +function loadContent(url) { + return makeRequest(url, { parseHTML: true }) + .then(response => { + const $ = response.$; + const title = $('h1.page-title').text().split('(')[0].trim() || ''; + const poster = $('meta[property="og:image"]').attr('content') || ''; + const tags = $('div.mt-2 span.badge').map((i, el) => $(el).text()).get(); + const year = parseInt($('div.mt-2 span').text()) || null; + const description = $('div.content-section p.mt-4').text().trim() || ''; + const trailer = $('#trailer-btn').attr('data-trailer-url') || ''; + + const isMovie = tags.includes('Movies'); + + // Try multiple selectors to find download links + let hrefs = []; + const selectors = [ + 'div.download-item a', + '.download-item a', + 'a[href*="hubdrive"]', + 'a[href*="hubcloud"]', + 'a[href*="drive"]', + '.btn[href]', + 'a.btn' + ]; + + for (const selector of selectors) { + const links = $(selector) + .map((i, a) => $(a).attr('href')) + .get() + .filter(href => href && href.trim()); + if (links.length > 0) { + hrefs = links; + console.log(`[4KHDHub] Found ${links.length} links using selector: ${selector}`); + break; + } + } + + if (hrefs.length === 0) { + console.log('[4KHDHub] No download links found. Available links on page:'); + const allLinks = $('a[href]') + .map((i, a) => $(a).attr('href')) + .get() + .filter(href => href && href.includes('http')) + .slice(0, 10); // Show first 10 links + console.log(allLinks); + } + + const content = { + title, + poster, + tags, + year, + description, + trailer, + type: isMovie ? 'movie' : 'series' + }; + + if (isMovie) { + content.downloadLinks = hrefs; + return Promise.resolve(content); + } else { + // Handle TV series episodes + const episodesMap = new Map(); // used to dedupe episodes below + + console.log(`[4KHDHub] Looking for episode structure...`); + const seasonItems = $('div.episodes-list div.season-item'); + console.log(`[4KHDHub] Found ${seasonItems.length} season items`); + + if (seasonItems.length === 0) { + // Try alternative episode structure selectors + const altSelectors = [ + 'div.season-item', + '.episode-item', + '.episode-download', + 'div[class*="episode"]', + 'div[class*="season"]' + ]; + + for (const selector of altSelectors) { + const items = $(selector); + if (items.length > 0) { + console.log(`[4KHDHub] Found ${items.length} items with selector: ${selector}`); + break; + } + } + + // If no episode structure found, treat all found links as general series links + if (hrefs.length > 0) { + console.log(`[4KHDHub] No episode structure found, using general links for series`); + // Create a single episode entry with all links + content.episodes = [{ + season: 1, + episode: 1, + downloadLinks: hrefs + }]; + } else { + content.episodes = []; + } + } else { + seasonItems.each((i, seasonElement) => { + const $seasonElement = $(seasonElement); + const seasonText = $seasonElement.find('div.episode-number').text() || ''; + const seasonMatch = seasonText.match(/S?([1-9][0-9]*)/); + const season = seasonMatch ? parseInt(seasonMatch[1]) : null; + + const episodeItems = $seasonElement.find('div.episode-download-item'); + episodeItems.each((j, episodeItem) => { + const $episodeItem = $(episodeItem); + const episodeText = $episodeItem.find('div.episode-file-info span.badge-psa').text() || ''; + const episodeMatch = episodeText.match(/Episode-0*([1-9][0-9]*)/); + const episode = episodeMatch ? parseInt(episodeMatch[1]) : null; + + const episodeHrefs = $episodeItem.find('a') + .map((k, a) => $(a).attr('href')) + .get() + .filter(href => href && href.trim()); + + if (season && episode && episodeHrefs.length > 0) { + const key = `${season}-${episode}`; + if (!episodesMap.has(key)) { + episodesMap.set(key, { + season, + episode, + downloadLinks: [] + }); + } + episodesMap.get(key).downloadLinks.push(...episodeHrefs); + } + }); + }); + + content.episodes = Array.from(episodesMap.values()).map(ep => ({ + ...ep, + downloadLinks: [...new Set(ep.downloadLinks)] // Remove duplicates + })); + } + + console.log(`[4KHDHub] Found ${content.episodes.length} episodes with links`); + return Promise.resolve(content); + } + }); +} + +function extractStreamingLinks(downloadLinks) { + console.log(`[4KHDHub] Processing ${downloadLinks.length} download links...`); + + const promises = downloadLinks.map((link, index) => { + return new Promise((resolve) => { + console.log(`[4KHDHub] Processing link ${index + 1}: ${link}`); + + // Check if link needs redirect processing + if (link.toLowerCase().includes('id=')) { + console.log(`[4KHDHub] Link ${index + 1} needs redirect processing`); + getRedirectLinks(link) + .then(resolvedLink => { + if (resolvedLink) { + console.log(`[4KHDHub] Link ${index + 1} resolved to: ${resolvedLink}`); + processExtractorLink(resolvedLink, resolve, index + 1); + } else { + console.log(`[4KHDHub] Link ${index + 1} redirect resolution failed`); + resolve(null); + } + }) + .catch(err => { + console.error(`[4KHDHub] Redirect failed for link ${index + 1} (${link}):`, err.message); + resolve(null); + }); + } else { + processExtractorLink(link, resolve, index + 1); + } + }); + }); + + return Promise.all(promises) + .then(results => { + const validResults = results.filter(result => result !== null); + const flatResults = validResults.flat(); + // Filter out .zip files + const filteredResults = flatResults.filter(link => { + return link && link.url && !link.url.toLowerCase().endsWith('.zip'); + }); + // Note: Link count will be logged after validation completes + return filteredResults; + }); +} + +function extractHubDriveLinks(url, referer) { + console.log(`[4KHDHub] Starting HubDrive extraction for: ${url}`); + + return makeRequest(url, { parseHTML: true }) + .then(response => { + const $ = response.$; + + console.log(`[4KHDHub] Got HubDrive page, looking for download button...`); + + // Extract filename and size information + const size = $('i#size').text() || ''; + const header = $('div.card-header').text() || ''; + const quality = getIndexQuality(header); + const headerDetails = cleanTitle(header); + + console.log(`[4KHDHub] HubDrive extracted info - Size: ${size}, Header: ${header}, Quality: ${quality}, HeaderDetails: ${headerDetails}`); + + // Extract filename from header for title display + let filename = headerDetails || header || 'Unknown'; + // Clean up the filename by removing common prefixes and file extensions + filename = filename.replace(/^4kHDHub\.com\s*[-_]?\s*/i, '') + .replace(/\.[a-z0-9]{2,4}$/i, '') + .replace(/[._]/g, ' ') + .trim(); + + // Use the exact selector from Kotlin code + const downloadBtn = $('.btn.btn-primary.btn-user.btn-success1.m-1').first(); + + if (downloadBtn.length === 0) { + console.log('[4KHDHub] Primary download button not found, trying alternative selectors...'); + // Try alternative selectors + const alternatives = [ + 'a.btn.btn-primary', + '.btn-primary', + 'a[href*="download"]', + 'a.btn' + ]; + + let foundBtn = null; + for (const selector of alternatives) { + foundBtn = $(selector).first(); + if (foundBtn.length > 0) { + console.log(`[4KHDHub] Found download button with selector: ${selector}`); + break; + } + } + + if (!foundBtn || foundBtn.length === 0) { + throw new Error('Download button not found with any selector'); + } + + const href = foundBtn.attr('href'); + if (!href) { + throw new Error('Download link not found'); + } + + console.log(`[4KHDHub] Found HubDrive download link: ${href}`); + return processHubDriveLink(href, referer, filename, size, quality); + } + + const href = downloadBtn.attr('href'); + if (!href) { + throw new Error('Download link not found'); + } + + console.log(`[4KHDHub] Found HubDrive download link: ${href}`); + return processHubDriveLink(href, referer, filename, size, quality); + }) + .catch(error => { + console.error(`[4KHDHub] Error extracting HubDrive links for ${url}:`, error.message); + return []; + }); +} + +function processHubDriveLink(href, referer, filename = 'Unknown', size = '', quality = 1080) { + // Check if it's a HubCloud link + if (href.toLowerCase().includes('hubcloud')) { + console.log('[4KHDHub] HubDrive link redirects to HubCloud, processing...'); + return extractHubCloudLinks(href, '4KHDHub'); + } else { + console.log('[4KHDHub] HubDrive direct link found'); + // Direct link or other extractor + const qualityLabel = quality ? ` - ${quality}p` : ''; + + // Build labelExtras like the original extractor + const labelExtras = []; + if (filename && filename !== 'Unknown') labelExtras.push(`[${filename}]`); + if (size) labelExtras.push(`[${size}]`); + // labelExtra removed (not used) + + // Get actual filename from HEAD request + return getFilenameFromUrl(href) + .then(actualFilename => { + const displayFilename = actualFilename || filename || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + return [{ + name: `4KHDHub - HubDrive${qualityLabel}`, + title: finalTitle, + url: href, + quality: quality + }]; + }) + .catch(() => { + const displayFilename = filename || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + if (size) titleParts.push(size); + const finalTitle = titleParts.join('\n'); + + return [{ + name: `4KHDHub - HubDrive${qualityLabel}`, + title: finalTitle, + url: href, + quality: quality + }]; + }); + } +} + +function processExtractorLink(link, resolve, linkNumber) { + const linkLower = link.toLowerCase(); + + console.log(`[4KHDHub] Checking extractors for link ${linkNumber}: ${link}`); + + if (linkLower.includes('hubdrive')) { + console.log(`[4KHDHub] Link ${linkNumber} matched HubDrive extractor`); + extractHubDriveLinks(link, '4KHDHub') + .then(links => { + console.log(`[4KHDHub] HubDrive extraction completed for link ${linkNumber}:`, links); + resolve(links); + }) + .catch(err => { + console.error(`[4KHDHub] HubDrive extraction failed for link ${linkNumber} (${link}):`, err.message); + resolve(null); + }); + } else if (linkLower.includes('hubcloud')) { + console.log(`[4KHDHub] Link ${linkNumber} matched HubCloud extractor`); + extractHubCloudLinks(link, '4KHDHub') + .then(links => { + console.log(`[4KHDHub] HubCloud extraction completed for link ${linkNumber}:`, links); + resolve(links); + }) + .catch(err => { + console.error(`[4KHDHub] HubCloud extraction failed for link ${linkNumber} (${link}):`, err.message); + resolve(null); + }); + } else { + console.log(`[4KHDHub] No extractor matched for link ${linkNumber}: ${link}`); + // Try to extract any direct streaming URLs from the link + if (link.includes('http') && (link.includes('.mp4') || link.includes('.mkv') || link.includes('.avi'))) { + console.log(`[4KHDHub] Link ${linkNumber} appears to be a direct video link`); + // Extract filename from URL + const urlParts = link.split('/'); + const filename = urlParts[urlParts.length - 1].replace(/\.[^/.]+$/, '').replace(/[._]/g, ' '); + + // Build labelExtras like the original extractor + const labelExtras = []; + if (filename) labelExtras.push(`[${filename}]`); + labelExtras.push('[Direct Link]'); + // labelExtra removed (not used) + + // Get actual filename from HEAD request + getFilenameFromUrl(link) + .then(actualFilename => { + const displayFilename = actualFilename || filename || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + titleParts.push('[Direct Link]'); + const finalTitle = titleParts.join('\n'); + + resolve([{ + name: '4KHDHub Direct Link', + title: finalTitle, + url: link, + quality: 1080 + }]); + }) + .catch(() => { + const displayFilename = filename || 'Unknown'; + const titleParts = []; + if (displayFilename) titleParts.push(displayFilename); + titleParts.push('[Direct Link]'); + const finalTitle = titleParts.join('\n'); + + resolve([{ + name: '4KHDHub Direct Link', + title: finalTitle, + url: link, + quality: 1080 + }]); + }); + } else { + resolve(null); + } + } +} + +// Helper function to get TMDB details +async function getTMDBDetails(tmdbId, mediaType) { + const { getTmdbApiKey } = require('../utils/tmdbKey'); + const TMDB_API_KEY = getTmdbApiKey(); + if(!TMDB_API_KEY){ + console.warn('[4KHDHub] TMDB API key missing; skipping TMDB metadata fetch'); + return null; + } + + try { + console.log(`[4KHDHub] Fetching ${mediaType} details for TMDB ID: ${tmdbId}`); + const response = await makeRequest(`https://api.themoviedb.org/3/${mediaType}/${tmdbId}?api_key=${TMDB_API_KEY}`); + const data = JSON.parse(response.body); + + if (mediaType === 'movie') { + return { + title: data.title, + original_title: data.original_title, + year: data.release_date ? data.release_date.split('-')[0] : null + }; + } else { + return { + title: data.name, + original_title: data.original_name, + year: data.first_air_date ? data.first_air_date.split('-')[0] : null + }; + } + } catch (error) { + console.error(`[4KHDHub] Error fetching details from TMDB:`, error.message); + return null; + } +} + +// Main function to get streams for the addon +async function get4KHDHubStreams(tmdbId, type, season = null, episode = null) { + try { + console.log(`[4KHDHub] Starting search for TMDB ID: ${tmdbId}, Type: ${type}${season ? `, Season: ${season}` : ''}${episode ? `, Episode: ${episode}` : ''}`); + + // Create cache key for resolved file hosting URLs + const cacheKey = `4khdhub_resolved_urls_v3_${tmdbId}_${type}${season ? `_s${season}e${episode}` : ''}`; + + let streamingLinks = []; + + // 1. Check cache for resolved file hosting URLs first + const cachedResolvedUrls = await getFromCache(cacheKey); + if (cachedResolvedUrls && cachedResolvedUrls.length > 0) { + console.log(`[4KHDHub] Cache HIT for ${cacheKey}. Using ${cachedResolvedUrls.length} cached resolved URLs.`); + // Process cached resolved URLs directly to final streaming links + console.log(`[4KHDHub] Processing ${cachedResolvedUrls.length} cached resolved URLs to get streaming links.`); + streamingLinks = await extractStreamingLinks(cachedResolvedUrls); + } else { + if (cachedResolvedUrls && cachedResolvedUrls.length === 0) { + console.log(`[4KHDHub] Cache contains empty data for ${cacheKey}. Refetching from source.`); + } else { + console.log(`[4KHDHub] Cache MISS for ${cacheKey}. Fetching from source.`); + } + + // Map type to TMDB API format + const tmdbType = type === 'series' ? 'tv' : type; + + // Get TMDB details to get the actual title + const tmdbDetails = await getTMDBDetails(tmdbId, tmdbType); + if (!tmdbDetails || !tmdbDetails.title) { + console.log(`[4KHDHub] Could not fetch TMDB details for ID: ${tmdbId}`); + return []; + } + + console.log(`[4KHDHub] TMDB Details: ${tmdbDetails.title} (${tmdbDetails.year || 'N/A'})`); + + // Enhanced search with fallback strategies + let searchResults = []; + let bestMatch = null; + + // Primary search using the actual title + const searchQuery = tmdbDetails.title; + searchResults = await searchContent(searchQuery); + console.log(`[4KHDHub] Primary search found ${searchResults.length} results`); + + if (searchResults.length > 0) { + bestMatch = findBestMatch(searchResults, tmdbDetails.title, tmdbDetails.year); + } + + // Fallback search strategies if no good match found + if (!bestMatch && searchResults.length > 0) { + console.log(`[4KHDHub] No good match from primary search, trying fallback strategies...`); + + // Try search without year + const titleWithoutYear = removeYear(tmdbDetails.title); + if (titleWithoutYear !== tmdbDetails.title) { + console.log(`[4KHDHub] Trying search without year: "${titleWithoutYear}"`); + const fallbackResults = await searchContent(titleWithoutYear); + if (fallbackResults.length > 0) { + const fallbackMatch = findBestMatch(fallbackResults, tmdbDetails.title, tmdbDetails.year); + if (fallbackMatch && (!bestMatch || fallbackMatch.score > bestMatch.score)) { + bestMatch = fallbackMatch; + searchResults = fallbackResults; + } + } + } + + // Try search with comprehensive alternative title formats + if (!bestMatch) { + const alternativeQueries = generateAlternativeQueries( + tmdbDetails.title, + tmdbDetails.original_title + ).filter(query => query !== tmdbDetails.title); // Exclude the original title we already tried + + for (const altQuery of alternativeQueries) { + console.log(`[4KHDHub] Trying alternative search: "${altQuery}"`); + const altResults = await searchContent(altQuery); + if (altResults.length > 0) { + const altMatch = findBestMatch(altResults, tmdbDetails.title, tmdbDetails.year); + if (altMatch && (!bestMatch || altMatch.score > bestMatch.score)) { + bestMatch = altMatch; + searchResults = altResults; + console.log(`[4KHDHub] Found better match with query: "${altQuery}" (score: ${altMatch.score})`); + break; + } + } + } + } + } + + if (searchResults.length === 0) { + console.log(`[4KHDHub] No search results found for any query variation`); + return []; + } + + if (!bestMatch) { + console.log(`[4KHDHub] No suitable match found for: ${tmdbDetails.title}`); + return []; + } + + console.log(`[4KHDHub] Using best match: ${bestMatch.title}`); + + const content = await loadContent(bestMatch.url); + + let downloadLinks = []; + + if (type === 'movie') { + downloadLinks = content.downloadLinks || []; + } else if ((type === 'series' || type === 'tv') && season && episode) { + console.log(`[4KHDHub] Looking for Season ${season}, Episode ${episode}`); + console.log(`[4KHDHub] Available episodes:`, content.episodes?.map(ep => `S${ep.season}E${ep.episode} (${ep.downloadLinks?.length || 0} links)`)); + + const targetEpisode = content.episodes?.find(ep => + ep.season === parseInt(season) && ep.episode === parseInt(episode) + ); + + if (targetEpisode) { + console.log(`[4KHDHub] Found target episode S${targetEpisode.season}E${targetEpisode.episode} with ${targetEpisode.downloadLinks?.length || 0} links`); + downloadLinks = targetEpisode.downloadLinks || []; + } else { + console.log(`[4KHDHub] Target episode S${season}E${episode} not found`); + } + } + + if (downloadLinks.length === 0) { + console.log(`[4KHDHub] No download links found`); + return []; + } + + // Resolve redirect URLs to actual file hosting URLs + console.log(`[4KHDHub] Resolving ${downloadLinks.length} redirect URLs to file hosting URLs...`); + const resolvedUrls = []; + + for (let i = 0; i < downloadLinks.length; i++) { + const link = downloadLinks[i]; + console.log(`[4KHDHub] Resolving link ${i + 1}/${downloadLinks.length}: ${link}`); + + try { + if (link.toLowerCase().includes('id=')) { + // This is a redirect URL, resolve it + const resolvedUrl = await getRedirectLinks(link); + if (resolvedUrl && resolvedUrl.trim()) { + console.log(`[4KHDHub] Link ${i + 1} resolved to: ${resolvedUrl}`); + resolvedUrls.push(resolvedUrl); + } else { + console.log(`[4KHDHub] Link ${i + 1} resolution failed or returned empty`); + } + } else { + // Direct URL, use as-is + console.log(`[4KHDHub] Link ${i + 1} is direct URL: ${link}`); + resolvedUrls.push(link); + } + } catch (error) { + console.error(`[4KHDHub] Error resolving link ${i + 1} (${link}):`, error.message); + } + } + + if (resolvedUrls.length === 0) { + console.log(`[4KHDHub] No URLs resolved successfully`); + return []; + } + + // Cache the resolved file hosting URLs + console.log(`[4KHDHub] Caching ${resolvedUrls.length} resolved URLs for key: ${cacheKey}`); + await saveToCache(cacheKey, resolvedUrls); + + // Process resolved URLs to get final streaming links + console.log(`[4KHDHub] Processing ${resolvedUrls.length} resolved URLs to get streaming links.`); + streamingLinks = await extractStreamingLinks(resolvedUrls); + } + + // Filter out suspicious AMP/redirect URLs + const filteredLinks = streamingLinks.filter(link => { + const url = link.url.toLowerCase(); + const suspiciousPatterns = [ + 'www-google-com.cdn.ampproject.org', + 'bloggingvector.shop', + 'cdn.ampproject.org' + ]; + + const isSuspicious = suspiciousPatterns.some(pattern => url.includes(pattern)); + if (isSuspicious) { + console.log(`[4KHDHub] Filtered out suspicious URL: ${link.url}`); + return false; + } + return true; + }); + + // Remove duplicates based on URL + const uniqueLinks = []; + const seenUrls = new Set(); + + for (const link of filteredLinks) { + if (!seenUrls.has(link.url)) { + seenUrls.add(link.url); + uniqueLinks.push(link); + } + } + + console.log(`[4KHDHub] Processing ${uniqueLinks.length} unique links (${streamingLinks.length - filteredLinks.length} suspicious URLs filtered, ${filteredLinks.length - uniqueLinks.length} duplicates removed)`); + + // Validate URLs if DISABLE_4KHDHUB_URL_VALIDATION is false + let validatedLinks = uniqueLinks; + const disableValidation = process.env.DISABLE_4KHDHUB_URL_VALIDATION === 'true'; + + if (!disableValidation) { + console.log(`[4KHDHub] URL validation enabled, validating ${uniqueLinks.length} links...`); + const validationPromises = uniqueLinks.map(async (link) => { + const isValid = await validateUrl(link.url); + return isValid ? link : null; + }); + + const validationResults = await Promise.all(validationPromises); + validatedLinks = validationResults.filter(link => link !== null); + + console.log(`[4KHDHub] URL validation complete: ${validatedLinks.length}/${uniqueLinks.length} links are valid`); + } else { + console.log(`[4KHDHub] URL validation disabled, skipping validation`); + } + + // Normalize to generic stream object format + const streams = validatedLinks.map(link => ({ + name: link.name, // Don't add prefix since it's already included + title: link.title || link.name, + url: link.url, + quality: `${link.quality}p`, + behaviorHints: { + bingeGroup: '4khdhub-streams' + } + })); + + console.log(`[4KHDHub] Returning ${streams.length} streams`); + return streams; + + } catch (error) { + console.error(`[4KHDHub] Error getting streams:`, error.message); + return []; + } +} + +module.exports = { + get4KHDHubStreams +}; \ No newline at end of file diff --git a/providers/MP4Hydra.js b/providers/MP4Hydra.js new file mode 100644 index 0000000..3081eb7 --- /dev/null +++ b/providers/MP4Hydra.js @@ -0,0 +1,506 @@ +const axios = require('axios'); +const FormData = require('form-data'); + +// Helper function to generate slug from title +function generateSlug(title) { + return title.toLowerCase() + .replace(/[^\w\s-]/g, '') // Remove special characters + .replace(/\s+/g, '-') // Replace spaces with hyphens + .replace(/-+/g, '-'); // Replace multiple hyphens with a single hyphen +} + +// Process episode data from MP4Hydra response +function processEpisode(episode, baseServer, serverName, serverNumber) { + const videoUrl = `${baseServer}${episode.src}`; + const subtitles = episode.subs ? episode.subs.map(sub => ({ + label: sub.label, + url: `${baseServer}${sub.src}` + })) : []; + + return { + title: episode.show_title || episode.title, + episode: episode.title, + type: episode.type, + quality: episode.quality || episode.label, + videoUrl: videoUrl, + server: serverName, + serverNumber: serverNumber, + subtitles: subtitles + }; +} + +// Main function to get streams from MP4Hydra +async function getMP4HydraStreams(tmdbId, mediaType, seasonNum = null, episodeNum = null) { + try { + console.log(`[MP4Hydra] Fetching streams for TMDB ID: ${tmdbId}, Type: ${mediaType}, Season: ${seasonNum}, Episode: ${episodeNum}`); + + // Get TMDB details + const details = await getTMDBDetails(tmdbId, mediaType); + if (!details) { + console.log(`[MP4Hydra] Could not fetch details for TMDB ID: ${tmdbId}`); + return []; + } + + console.log(`[MP4Hydra] Found title: ${details.title} (${details.year})`); + + // Generate slug in the format "movie-name-year" + let slug = details.slug; + if (mediaType === 'movie' && details.year) { + slug = `${details.slug}-${details.year}`; + } + console.log(`[MP4Hydra] Using slug: ${slug}`); + + // Create form data for multipart/form-data request + const formData = new FormData(); + formData.append('v', '8'); + formData.append('z', JSON.stringify([{ + s: slug, + t: mediaType, + se: seasonNum, + ep: episodeNum + }])); + + // Make request to MP4Hydra API + const response = await axios({ + method: 'post', + url: 'https://mp4hydra.org/info2?v=8', + data: formData, + headers: { + ...formData.getHeaders(), + 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36', + 'Accept': '*/*', + 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8', + 'Origin': 'https://mp4hydra.org', + 'Referer': `https://mp4hydra.org/${mediaType}/${slug}`, + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin' + }, + timeout: 10000 + }); + + // Process response + if (response.data && response.data.playlist && response.data.playlist.length > 0) { + const playlist = response.data.playlist; + const servers = response.data.servers; + + console.log(`[MP4Hydra] Found ${playlist.length} videos`); + console.log(`[MP4Hydra] Available servers: ${Object.keys(servers).join(', ')}`); + + // For TV shows, find the specific episode + if (mediaType === 'tv' && seasonNum && episodeNum) { + const paddedSeason = seasonNum.toString().padStart(2, '0'); + const paddedEpisode = episodeNum.toString().padStart(2, '0'); + const seasonEpisode = `S${paddedSeason}E${paddedEpisode}`; + + const targetEpisode = playlist.find(item => + item.title && item.title.toUpperCase() === seasonEpisode.toUpperCase() + ); + + if (!targetEpisode) { + console.log(`[MP4Hydra] Could not find ${seasonEpisode}`); + return []; + } + + console.log(`[MP4Hydra] Found episode: ${targetEpisode.show_title || targetEpisode.title}`); + + // Process streams from main servers + const streams = []; + const serverConfig = [ + { name: 'Beta', number: '#1' }, + { name: 'Beta#3', number: '#2' } + ]; + + serverConfig.forEach(server => { + const serverName = server.name; + const serverNumber = server.number; + + if (servers[serverName]) { + const baseServer = servers[serverName]; + console.log(`[MP4Hydra] Processing server: ${serverName} (${baseServer})`); + + const processedEpisode = processEpisode(targetEpisode, baseServer, serverName, serverNumber); + + // Convert to standard stream format + streams.push({ + title: `${details.title} - ${seasonEpisode} - ${processedEpisode.quality} [MP4Hydra ${serverNumber}]`, + url: processedEpisode.videoUrl, + quality: processedEpisode.quality, + provider: "MP4Hydra", + size: "Unknown size", + behaviorHints: { + notWebReady: true, + headers: { + 'Referer': 'https://mp4hydra.org/' + } + } + }); + + // Add subtitle tracks if available + if (processedEpisode.subtitles && processedEpisode.subtitles.length > 0) { + streams[streams.length - 1].subtitles = processedEpisode.subtitles.map(sub => ({ + url: sub.url, + lang: sub.label + })); + } + } + }); + + return streams; + } + + // For movies, process all videos + const streams = []; + const serverConfig = [ + { name: 'Beta', number: '#1' }, + { name: 'Beta#3', number: '#2' } + ]; + + serverConfig.forEach(server => { + const serverName = server.name; + const serverNumber = server.number; + + if (servers[serverName]) { + const baseServer = servers[serverName]; + console.log(`[MP4Hydra] Processing server: ${serverName} (${baseServer})`); + + playlist.forEach(item => { + const processedItem = processEpisode(item, baseServer, serverName, serverNumber); + + // Convert to standard stream format + streams.push({ + title: `${details.title} - ${processedItem.quality} [MP4Hydra ${serverNumber}]`, + url: processedItem.videoUrl, + quality: processedItem.quality, + provider: "MP4Hydra", + size: "Unknown size", + behaviorHints: { + notWebReady: true, + headers: { + 'Referer': 'https://mp4hydra.org/' + } + } + }); + + // Add subtitle tracks if available + if (processedItem.subtitles && processedItem.subtitles.length > 0) { + streams[streams.length - 1].subtitles = processedItem.subtitles.map(sub => ({ + url: sub.url, + lang: sub.label + })); + } + }); + } + }); + + return streams; + } else { + // Try with original title if the first attempt failed + if (details.title !== details.original_title) { + return await tryAlternativeTitle(details, mediaType, seasonNum, episodeNum); + } + + // Try without year for movies + if (mediaType === 'movie' && details.year) { + return await tryWithoutYear(details, mediaType, seasonNum, episodeNum); + } + + console.log('[MP4Hydra] No streaming links found'); + return []; + } + } catch (error) { + console.error(`[MP4Hydra] Error fetching streams:`, error.message); + return []; + } +} + +// Helper function to try with original title +async function tryAlternativeTitle(details, mediaType, seasonNum, episodeNum) { + try { + console.log(`[MP4Hydra] Retrying with original title: ${details.original_title}`); + const originalSlug = generateSlug(details.original_title); + let originalFullSlug = originalSlug; + + if (mediaType === 'movie' && details.year) { + originalFullSlug = `${originalSlug}-${details.year}`; + } + + // Create new form data with original title + const formData = new FormData(); + formData.append('v', '8'); + formData.append('z', JSON.stringify([{ + s: originalFullSlug, + t: mediaType, + se: seasonNum, + ep: episodeNum + }])); + + const response = await axios({ + method: 'post', + url: 'https://mp4hydra.org/info2?v=8', + data: formData, + headers: { + ...formData.getHeaders(), + 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36', + 'Accept': '*/*', + 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8', + 'Origin': 'https://mp4hydra.org', + 'Referer': `https://mp4hydra.org/${mediaType}/${originalFullSlug}`, + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin' + }, + timeout: 10000 + }); + + // Process response + if (response.data && response.data.playlist && response.data.playlist.length > 0) { + const playlist = response.data.playlist; + const servers = response.data.servers; + + console.log(`[MP4Hydra] Found ${playlist.length} videos with original title`); + + // For TV shows, find the specific episode + if (mediaType === 'tv' && seasonNum && episodeNum) { + const paddedSeason = seasonNum.toString().padStart(2, '0'); + const paddedEpisode = episodeNum.toString().padStart(2, '0'); + const seasonEpisode = `S${paddedSeason}E${paddedEpisode}`; + + const targetEpisode = playlist.find(item => + item.title && item.title.toUpperCase() === seasonEpisode.toUpperCase() + ); + + if (!targetEpisode) { + console.log(`[MP4Hydra] Could not find ${seasonEpisode} with original title`); + return []; + } + + // Process streams from main servers + const streams = []; + const serverConfig = [ + { name: 'Beta', number: '#1' }, + { name: 'Beta#3', number: '#2' } + ]; + + serverConfig.forEach(server => { + const serverName = server.name; + const serverNumber = server.number; + + if (servers[serverName]) { + const baseServer = servers[serverName]; + console.log(`[MP4Hydra] Processing server: ${serverName} (${baseServer})`); + + const processedEpisode = processEpisode(targetEpisode, baseServer, serverName, serverNumber); + + // Convert to standard stream format + streams.push({ + title: `${details.original_title} - ${seasonEpisode} - ${processedEpisode.quality} [MP4Hydra ${serverNumber}]`, + url: processedEpisode.videoUrl, + quality: processedEpisode.quality, + provider: "MP4Hydra", + size: "Unknown size", + behaviorHints: { + notWebReady: true, + headers: { + 'Referer': 'https://mp4hydra.org/' + } + } + }); + + // Add subtitle tracks if available + if (processedEpisode.subtitles && processedEpisode.subtitles.length > 0) { + streams[streams.length - 1].subtitles = processedEpisode.subtitles.map(sub => ({ + url: sub.url, + lang: sub.label + })); + } + } + }); + + return streams; + } + + // For movies, process all videos + const streams = []; + const serverConfig = [ + { name: 'Beta', number: '#1' }, + { name: 'Beta#3', number: '#2' } + ]; + + serverConfig.forEach(server => { + const serverName = server.name; + const serverNumber = server.number; + + if (servers[serverName]) { + const baseServer = servers[serverName]; + console.log(`[MP4Hydra] Processing server: ${serverName} (${baseServer})`); + + playlist.forEach(item => { + const processedItem = processEpisode(item, baseServer, serverName, serverNumber); + + // Convert to standard stream format + streams.push({ + title: `${details.original_title} - ${processedItem.quality} [MP4Hydra ${serverNumber}]`, + url: processedItem.videoUrl, + quality: processedItem.quality, + provider: "MP4Hydra", + size: "Unknown size", + behaviorHints: { + notWebReady: true, + headers: { + 'Referer': 'https://mp4hydra.org/' + } + } + }); + + // Add subtitle tracks if available + if (processedItem.subtitles && processedItem.subtitles.length > 0) { + streams[streams.length - 1].subtitles = processedItem.subtitles.map(sub => ({ + url: sub.url, + lang: sub.label + })); + } + }); + } + }); + + return streams; + } + + return []; + } catch (error) { + console.error(`[MP4Hydra] Error with alternative title:`, error.message); + return []; + } +} + +// Helper function to try without year +async function tryWithoutYear(details, mediaType, seasonNum, episodeNum) { + try { + console.log(`[MP4Hydra] Retrying with title only (without year): ${details.title}`); + const titleOnlySlug = details.slug; + + // Create new form data with title only + const formData = new FormData(); + formData.append('v', '8'); + formData.append('z', JSON.stringify([{ + s: titleOnlySlug, + t: mediaType, + se: seasonNum, + ep: episodeNum + }])); + + const response = await axios({ + method: 'post', + url: 'https://mp4hydra.org/info2?v=8', + data: formData, + headers: { + ...formData.getHeaders(), + 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36', + 'Accept': '*/*', + 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8', + 'Origin': 'https://mp4hydra.org', + 'Referer': `https://mp4hydra.org/${mediaType}/${titleOnlySlug}`, + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin' + }, + timeout: 10000 + }); + + // Process response + if (response.data && response.data.playlist && response.data.playlist.length > 0) { + const playlist = response.data.playlist; + const servers = response.data.servers; + + console.log(`[MP4Hydra] Found ${playlist.length} videos with title only`); + + // For movies, process all videos + const streams = []; + const serverConfig = [ + { name: 'Beta', number: '#1' }, + { name: 'Beta#3', number: '#2' } + ]; + + serverConfig.forEach(server => { + const serverName = server.name; + const serverNumber = server.number; + + if (servers[serverName]) { + const baseServer = servers[serverName]; + console.log(`[MP4Hydra] Processing server: ${serverName} (${baseServer})`); + + playlist.forEach(item => { + const processedItem = processEpisode(item, baseServer, serverName, serverNumber); + + // Convert to standard stream format + streams.push({ + title: `${details.title} - ${processedItem.quality} [MP4Hydra ${serverNumber}]`, + url: processedItem.videoUrl, + quality: processedItem.quality, + provider: "MP4Hydra", + size: "Unknown size", + behaviorHints: { + notWebReady: true, + headers: { + 'Referer': 'https://mp4hydra.org/' + } + } + }); + + // Add subtitle tracks if available + if (processedItem.subtitles && processedItem.subtitles.length > 0) { + streams[streams.length - 1].subtitles = processedItem.subtitles.map(sub => ({ + url: sub.url, + lang: sub.label + })); + } + }); + } + }); + + return streams; + } + + return []; + } catch (error) { + console.error(`[MP4Hydra] Error with title-only:`, error.message); + return []; + } +} + +// Helper function to get TMDB details +async function getTMDBDetails(tmdbId, mediaType) { + const { getTmdbApiKey } = require('../utils/tmdbKey'); + const TMDB_API_KEY = getTmdbApiKey(); + if(!TMDB_API_KEY){ + console.warn('[MP4Hydra] TMDB API key missing; skipping TMDB metadata fetch'); + return null; + } + + try { + console.log(`[MP4Hydra] Fetching ${mediaType} details for TMDB ID: ${tmdbId}`); + const response = await axios.get(`https://api.themoviedb.org/3/${mediaType}/${tmdbId}?api_key=${TMDB_API_KEY}`); + + if (mediaType === 'movie') { + return { + title: response.data.title, + original_title: response.data.original_title, + year: response.data.release_date ? response.data.release_date.split('-')[0] : null, + slug: generateSlug(response.data.title) + }; + } else { + return { + title: response.data.name, + original_title: response.data.original_name, + year: response.data.first_air_date ? response.data.first_air_date.split('-')[0] : null, + slug: generateSlug(response.data.name) + }; + } + } catch (error) { + console.error(`[MP4Hydra] Error fetching details from TMDB:`, error.message); + return null; + } +} + +module.exports = { getMP4HydraStreams }; \ No newline at end of file diff --git a/providers/Showbox.js b/providers/Showbox.js new file mode 100644 index 0000000..dc38020 --- /dev/null +++ b/providers/Showbox.js @@ -0,0 +1,3139 @@ +require('dotenv').config(); +console.log(`Current DISABLE_CACHE value: '${process.env.DISABLE_CACHE}' (Type: ${typeof process.env.DISABLE_CACHE})`); +const axios = require('axios'); +const cheerio = require('cheerio'); +const fs = require('fs').promises; +const path = require('path'); +const crypto = require('crypto'); +// Redis removed: all caching now uses filesystem only. + +// --- Cookie Management --- (removed unused cookieIndex/detectedOssGroup) + + +// Add configurable default region +const DEFAULT_OSS_REGION = process.env.FEBBOX_REGION || 'USA7'; +console.log(`Using FebBox region setting: ${DEFAULT_OSS_REGION}`); + +// Global variable to store the user's region preference from the request +global.currentRequestRegionPreference = null; + +// Add a global variable to track region availability +global.regionAvailabilityStatus = {}; +const US_FALLBACK_REGIONS = ['USA7', 'USA6', 'USA5']; // Prioritized US regions for fallback + +// Modify the getCookieForRequest function to handle region fallbacks +// Quota-aware cookie selection: if global.currentRequestConfig.cookies exists (array), +// select the best cookie by querying flow from FebBox and choosing the highest remaining. +// Fallback to existing single-cookie/rotation behavior. +const getCookieForRequest = async (regionPreference = null, userCookie = null) => { + let detectedOssGroup = null; + const originalRegion = regionPreference; + let usingFallback = false; + let baseCookieToUse = null; + + // Region detection + if (regionPreference) { + if (global.regionAvailabilityStatus && global.regionAvailabilityStatus[regionPreference] === false) { + usingFallback = true; + for (const fallback of US_FALLBACK_REGIONS) { + if (!global.regionAvailabilityStatus || global.regionAvailabilityStatus[fallback] !== false) { + detectedOssGroup = fallback; + console.log(`[CookieManager] Region ${regionPreference} unavailable, fallback to ${detectedOssGroup}`); + break; + } + } + if (!detectedOssGroup) { + detectedOssGroup = regionPreference; + console.log(`[CookieManager] All fallbacks unavailable, trying original ${detectedOssGroup}`); + } + } else { + detectedOssGroup = regionPreference; + console.log(`[CookieManager] Using explicit region: ${detectedOssGroup}`); + } + } else { + detectedOssGroup = DEFAULT_OSS_REGION; + console.log(`[CookieManager] No region preference; defaulting to ${detectedOssGroup}`); + } + + global.lastRequestedRegion = { original: originalRegion, used: detectedOssGroup, usingFallback }; + + // Select cookie (simplified legacy logic retained) + if (!baseCookieToUse && global.currentRequestConfig) { + try { + const array = Array.isArray(global.currentRequestConfig.cookies) ? global.currentRequestConfig.cookies.filter(Boolean) : []; + if (array.length > 0) { + // Just pick first for now (quota logic removed here if previously elsewhere) + baseCookieToUse = array[0]; + } + } catch (e) { + console.warn(`[CookieManager] Cookie array selection error: ${e.message}`); + } + } + + // Check if a base cookie has already been chosen and cached for this specific request cycle + if (global.currentRequestConfig && global.currentRequestConfig.chosenFebboxBaseCookieForRequest) { + console.log(`[CookieManager] Re-using request-cached base cookie for this cycle.`); + baseCookieToUse = global.currentRequestConfig.chosenFebboxBaseCookieForRequest; + } else if (!baseCookieToUse) { + // No request-cached cookie, so we need to select one. + // 1. Prioritize user-supplied cookie passed directly to this function + if (userCookie) { + console.log('[CookieManager] Using user-supplied cookie passed to function for this cycle.'); + baseCookieToUse = userCookie; + } + // 2. Prioritize user-supplied cookie from global (fallback for backward compatibility) + else if (global.currentRequestUserCookie) { + console.log('[CookieManager] Using user-supplied cookie from global state (legacy mode) for this cycle.'); + baseCookieToUse = global.currentRequestUserCookie; + } + // No file-based fallback rotation (env-only) + else { + console.log('[CookieManager] No user-supplied cookies available for this cycle.'); + baseCookieToUse = ''; + } + + // Cache the chosen base cookie for this request cycle + if (global.currentRequestConfig) { + global.currentRequestConfig.chosenFebboxBaseCookieForRequest = baseCookieToUse; + console.log(`[CookieManager] Cached base cookie for this request cycle.`); + } + } + + // Now, apply the detected OSS group to the chosen base cookie + if (baseCookieToUse && baseCookieToUse.trim() !== '') { + if (detectedOssGroup) { + console.log(`[CookieManager] Applying region: ${detectedOssGroup} to chosen base cookie.`); + return `${baseCookieToUse}; oss_group=${detectedOssGroup}`; + } + return baseCookieToUse; // Return base cookie if no region detected/needed + } else { + if (detectedOssGroup) return `oss_group=${detectedOssGroup}`; + return ''; + } +}; + +// Helper function to fetch stream size using a HEAD request +const fetchStreamSize = async (url) => { + const cacheSubDir = 'stream_sizes'; + // Create a cache key from the URL using hash to avoid long filenames + const urlHash = crypto.createHash('md5').update(url).digest('hex'); + const urlCacheKey = `${urlHash}.txt`; + + const cachedSize = await getFromCache(urlCacheKey, cacheSubDir); + if (cachedSize !== null) { // Check for null specifically, as 'Unknown size' is a valid cached string + // console.log(` CACHE HIT for stream size: ${url} -> ${cachedSize}`); + return cachedSize; + } + // console.log(` CACHE MISS for stream size: ${url}`); + + try { + // For m3u8, Content-Length is for the playlist file, not the stream segments. + if (url.toLowerCase().includes('.m3u8')) { + return 'Playlist (size N/A)'; // Indicate HLS playlist + } + const response = await axios.head(url, { timeout: 5000 }); // 5-second timeout for HEAD request + if (response.headers['content-length']) { + const sizeInBytes = parseInt(response.headers['content-length'], 10); + if (!isNaN(sizeInBytes)) { + if (sizeInBytes < 1024) return `${sizeInBytes} B`; + if (sizeInBytes < 1024 * 1024) return `${(sizeInBytes / 1024).toFixed(2)} KB`; + if (sizeInBytes < 1024 * 1024 * 1024) return `${(sizeInBytes / (1024 * 1024)).toFixed(2)} MB`; + return `${(sizeInBytes / (1024 * 1024 * 1024)).toFixed(2)} GB`; + } + } + return 'Unknown size'; + } catch (error) { + // console.warn(` Could not fetch size for ${url}: ${error.message}`); + // Cache the error/unknown result too, to prevent re-fetching a known problematic URL quickly + await saveToCache(urlCacheKey, 'Unknown size', cacheSubDir); + return 'Unknown size'; + } +}; + +const FEBBOX_PLAYER_URL = "https://www.febbox.com/file/player"; +const FEBBOX_FILE_SHARE_LIST_URL = "https://www.febbox.com/file/file_share_list"; +// MODIFICATION: Remove SCRAPER_API_URL +// const SCRAPER_API_URL = 'https://api.scraperapi.com/'; +// TMDB key now sourced from config/env; no hardcoded public key +const { getTmdbApiKey } = require('../utils/tmdbKey'); +function obtainTmdbKey(){ + const k = getTmdbApiKey(); + if(!k) console.warn('[Showbox] No TMDB API key available (multi-key set empty).'); + return k; +} +const TMDB_BASE_URL = 'https://api.themoviedb.org/3'; +// Determine cache directory based on environment +// Use /tmp/.cache when running on Vercel, otherwise use local .cache directory +// Allow external override to keep cache writes out of watched tree during dev +const CACHE_DIR = process.env.SHOWBOX_CACHE_DIR + ? process.env.SHOWBOX_CACHE_DIR + : (process.env.VERCEL ? path.join('/tmp', '.cache') : path.join(require('os').tmpdir(), 'tmdb-embed-showbox-cache')); +console.log(`Using cache directory: ${CACHE_DIR}`); +// MODIFICATION: Remove hardcoded SHOWBOX_PROXY_URL, will use environment variable +// const SHOWBOX_PROXY_URL = "https://starlit-valkyrie-39f5ab.netlify.app/?destination="; + +// Ensure cache directories exist +const ensureCacheDir = async (dirPath) => { + try { + await fs.mkdir(dirPath, { recursive: true }); + } catch (error) { + if (error.code !== 'EEXIST') { + console.warn(`Warning: Could not create cache directory ${dirPath}: ${error.message}`); + } + } +}; + +// Cache helpers +const getFromCache = async (cacheKey, subDir = '') => { + if (process.env.DISABLE_CACHE === 'true') { + console.log(` CACHE DISABLED: Skipping read for ${path.join(subDir, cacheKey)}`); + return null; + } + + // File system cache only (Redis removed) + const cachePath = path.join(CACHE_DIR, subDir, cacheKey); + try { + const fileData = await fs.readFile(cachePath, 'utf-8'); + console.log(` FILE SYSTEM CACHE HIT for: ${path.join(subDir, cacheKey)}`); + // Redis removed: no cross-population + try { + return JSON.parse(fileData); + } catch (e) { + return fileData; // Return as string if not JSON + } + } catch (error) { + if (error.code !== 'ENOENT') { + console.warn(` FILE SYSTEM CACHE READ ERROR for ${cacheKey}: ${error.message}`); + } else { + console.log(` FILE SYSTEM CACHE MISS for: ${path.join(subDir, cacheKey)}`); + } + return null; + } +}; + +const saveToCache = async (cacheKey, content, subDir = '') => { + if (process.env.DISABLE_CACHE === 'true') { + console.log(` CACHE DISABLED: Skipping write for ${path.join(subDir, cacheKey)}`); + return; + } + + const dataToSave = typeof content === 'string' ? content : JSON.stringify(content, null, 2); + // Save to file system cache + const fullSubDir = path.join(CACHE_DIR, subDir); + await ensureCacheDir(fullSubDir); + const cachePath = path.join(fullSubDir, cacheKey); + try { + await fs.writeFile(cachePath, dataToSave, 'utf-8'); + console.log(` SAVED TO FILE SYSTEM CACHE: ${path.join(subDir, cacheKey)}`); + } catch (error) { + console.warn(` FILE SYSTEM CACHE WRITE ERROR for ${cacheKey}: ${error.message}`); + } +}; + +// NEW HELPER FUNCTIONS + +// Function to create URL-friendly slugs +const slugify = (text) => { + if (!text) return ''; + return text + .toString() + .toLowerCase() + .trim() + .replace(/&/g, 'and') // Replace & with 'and' + .replace(/[_\s]+/g, '-') // Replace spaces and underscores with - + .replace(/[^\w-]+/g, '') // Remove all non-word chars (except -) + .replace(/--+/g, '-') // Replace multiple - with single - + .replace(/^-+/, '') // Trim - from start of text + .replace(/-+$/, ''); // Trim - from end of text +}; + +// Function to normalize titles for comparison +const normalizeTitleForComparison = (title) => { + if (!title) return ''; + // Remove common season/episode patterns, year in parenthesis, and normalize + return title + .toLowerCase() + .replace(/\(?\d{4}\)?$/, '') // Remove year like (2023) at the end + .replace(/\s*-\s*(season|s)\s*\d+\s*(episode|e)\s*\d+/i, '') // Remove SXXEXX patterns + .replace(/\s*(season|s)\s*\d+/i, '') // Remove SXX patterns + .replace(/\s*(episode|e)\s*\d+/i, '') // Remove EXX patterns + .replace(/[^\w\s]|_/g, "") // Remove punctuation except spaces + .replace(/\s+/g, ' ') // Normalize multiple spaces to one + .trim(); +}; + +// Function to validate if a ShowBox page title matches TMDB titles +const validateShowboxTitle = (showboxPageTitle, tmdbMainTitle, tmdbOriginalTitle, tmdbAlternativeTitles = []) => { + if (!showboxPageTitle || !tmdbMainTitle) { + console.log(` [Validation] Missing titles. SB: "${showboxPageTitle}", TMDB Main: "${tmdbMainTitle}"`); + return false; + } + + const normalizedPageTitle = normalizeTitleForComparison(showboxPageTitle); + + // Collect all TMDB titles for comparison (main, original, alternatives) + const titlesToCompare = [tmdbMainTitle, tmdbOriginalTitle, ...tmdbAlternativeTitles.map(alt => alt.title)] + .filter(Boolean) // Remove any null/undefined titles + .map(normalizeTitleForComparison); // Normalize all titles + + // Check for exact matches + if (titlesToCompare.some(normTmdbTitle => normalizedPageTitle === normTmdbTitle && normTmdbTitle.length > 0)) { + console.log(` [Validation] SUCCESS: Exact match. SB: "${normalizedPageTitle}" == TMDB: One of "${titlesToCompare.filter(t => t.length > 0).join('", "')}"`); + return true; + } + + // Check for partial matches (e.g., "Title" in "Title: The Series" or vice versa) + if (titlesToCompare.some(normTmdbTitle => + normTmdbTitle.length > 3 && normalizedPageTitle.length > 3 && // ensure titles aren't too short + (normalizedPageTitle.includes(normTmdbTitle) || normTmdbTitle.includes(normalizedPageTitle)) + )) { + console.log(` [Validation] SUCCESS: Partial match. SB: "${normalizedPageTitle}" vs TMDB: One of "${titlesToCompare.filter(t => t.length > 0).join('", "')}"`); + return true; + } + + console.log(` [Validation] FAILED: No strong match. SB: "${normalizedPageTitle}" vs TMDB Titles: "${titlesToCompare.filter(t => t.length > 0).join('", "')}"`); + return false; +}; + +// NEW HELPER FUNCTION: Extract TMDB image path from ShowBox detail page HTML +const extractTmdbImagePathFromShowboxHtml = (htmlContent) => { + if (!htmlContent) return null; + // Log the beginning of the HTML content for debugging + console.log(` [ImageExtract DEBUG] HTML content (first 500 chars): ${String(htmlContent).substring(0, 500)}`); + try { + const $ = cheerio.load(htmlContent); + const coverDiv = $('div.cover_follow'); + if (coverDiv.length) { + const styleAttr = coverDiv.attr('style'); + console.log(` [ImageExtract DEBUG] Found div.cover_follow. Style attribute: ${styleAttr}`); // Log the style attribute + if (styleAttr) { + // MODIFIED REGEX: Made " optional + const urlMatch = styleAttr.match(/url\((?:")?(https?:\/\/image\.tmdb\.org\/t\/p\/original)?([^&]+?)(?:")?\)/); + if (urlMatch && urlMatch[2]) { + // Ensure it's a path, not a full URL if accidentally captured + const imagePath = urlMatch[2].startsWith('/') ? urlMatch[2] : '/' + urlMatch[2]; + console.log(` [ImageExtract] Extracted TMDB image path from ShowBox HTML: ${imagePath}`); + return imagePath; + } + } + } + } catch (e) { + console.error(` [ImageExtract] Error parsing ShowBox HTML for TMDB image: ${e.message}`); + } + console.log(` [ImageExtract] Could not find TMDB image path in ShowBox HTML.`); + return null; +}; + +// NEW HELPER FUNCTION: Validate ShowBox TMDB image path against TMDB API backdrop paths +const validateTmdbImage = (showboxImagePath, tmdbApiBackdropPaths = []) => { + if (!showboxImagePath || !tmdbApiBackdropPaths || tmdbApiBackdropPaths.length === 0) { + return false; + } + const match = tmdbApiBackdropPaths.some(apiPath => apiPath === showboxImagePath); + if (match) { + console.log(` [ImageValidation] SUCCESS: ShowBox image path "${showboxImagePath}" matches a TMDB API backdrop path.`); + } else { + console.log(` [ImageValidation] FAILED: ShowBox image path "${showboxImagePath}" does not match any of TMDB API backdrop paths (${tmdbApiBackdropPaths.slice(0, 3).join(', ')}...).`); + } + return match; +}; + + + +// Function to extract special title forms for anime (e.g., Romaji) +const extractSpecialTitles = (tmdbData, alternativeTitles = []) => { + const specialTitles = []; + console.log(` [TITLE] Alternative titles available: ${alternativeTitles.length}`); + if (alternativeTitles.length > 0) { + console.log(` [TITLE] Available alternatives: ${alternativeTitles.map(t => `"${t.title}" (${t.iso_3166_1 || 'unknown'}-${t.iso_639_1 || 'unknown'})`).join(', ')}`); + } + + // Get original title + const originalTitle = tmdbData.original_title || tmdbData.original_name || ''; + const originalLanguage = tmdbData.original_language || ''; + + // Check if original title uses non-Latin script + // This regex covers most non-Latin scripts: CJK (Chinese, Japanese, Korean), Arabic, Cyrillic, etc. + const hasNonLatinChars = /[\u0400-\u04FF\u0500-\u052F\u1100-\u11FF\u3000-\u303F\u3040-\u309F\u30A0-\u30FF\u3130-\u318F\u31F0-\u31FF\u3400-\u4DBF\u4E00-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF\uFF00-\uFFEF]/.test(originalTitle); + + if (hasNonLatinChars) { + console.log(` [ROMAN] Detected non-Latin title: "${originalTitle}" (Language: ${originalLanguage}). Looking for Romanized version.`); + + // Get language name for better logging + const languageNames = { + 'ko': 'Korean', + 'ja': 'Japanese', + 'zh': 'Chinese', + 'ru': 'Russian', + 'ar': 'Arabic', + 'th': 'Thai', + 'hi': 'Hindi' + // Add more as needed + }; + const languageName = languageNames[originalLanguage] || originalLanguage; + + // STEP 1: Try to find explicitly labeled romanized titles + const romanizedCandidates = alternativeTitles.filter(alt => + // Any alt title labeled as "Romanized" or has "Romaji"/"Romanization" in type + (alt.type && ( + alt.type.toLowerCase().includes('roman') || + alt.type.toLowerCase().includes('romaji') + )) || + // Special case: original language country code with Latin script + (alt.iso_3166_1 === originalLanguage.toUpperCase() && + /^[a-zA-Z0-9\s\-:;,.!?()&'"]+$/.test(alt.title) && + alt.iso_639_1 !== 'en') + ); + + if (romanizedCandidates.length > 0) { + romanizedCandidates.forEach(rc => { + console.log(` [ROMAN] Found labeled Romanized title: "${rc.title}" (${rc.iso_3166_1 || 'unknown'}-${rc.iso_639_1 || 'unknown'}${rc.type ? ', Type: ' + rc.type : ''})`); + specialTitles.push(rc.title); + }); + } else { + console.log(` [ROMAN] No explicitly labeled Romanized titles found in alternatives.`); + + // STEP 2: Identify Romanized by language and character set + // For non-Latin scripts, look for titles that: + // 1. Use Latin script + // 2. Are from the same country/language (if available) + // 3. Are not English + const nonEnglishLatinTitles = alternativeTitles.filter(alt => + // Must use Latin script + /^[a-zA-Z0-9\s\-:;,.!?()&'"]+$/.test(alt.title) && + // Should not be English if we can determine it + (alt.iso_639_1 !== 'en' || !alt.iso_639_1) + ); + + // Try to find titles from the same country/region first + const sameRegionTitles = nonEnglishLatinTitles.filter(alt => + alt.iso_3166_1 && + (alt.iso_3166_1 === originalLanguage.toUpperCase() || + // Special case for languages that don't map directly to country codes + (originalLanguage === 'zh' && ['CN', 'TW', 'HK'].includes(alt.iso_3166_1)) || + (originalLanguage === 'ja' && alt.iso_3166_1 === 'JP') || + (originalLanguage === 'ko' && alt.iso_3166_1 === 'KR')) + ); + + if (sameRegionTitles.length > 0) { + sameRegionTitles.forEach(title => { + console.log(` [ROMAN] Found likely ${languageName} Romanized title: "${title.title}" (matched region)`); + specialTitles.push(title.title); + }); + } else if (nonEnglishLatinTitles.length > 0) { + // If no same-region titles, try any non-English Latin title + // Prefer longer titles as they're often more descriptive/accurate + nonEnglishLatinTitles.sort((a, b) => b.title.length - a.title.length); + const bestCandidate = nonEnglishLatinTitles[0]; + console.log(` [ROMAN] Using best non-English Latin title as Romanized version: "${bestCandidate.title}"`); + specialTitles.push(bestCandidate.title); + } else { + // STEP 3: Language-specific fallbacks based on patterns + // For Korean: Look for titles with particles like "-eui", "-ui", "-ga", "-reul", etc. + // For Japanese: Look for titles with particles like "no", "ga", "wo", "ni", etc. + // For Chinese: Look for titles with pinyin patterns + + const languagePatterns = { + 'ko': /\b(ui|eui|ga|reul|neun|eun|leul|seo|e|ro)\b/i, // Korean particles + 'ja': /\b(no|ga|wo|ni|to|wa|ka|he|mo|de|kun|san|chan|sama|sensei)\b/i, // Japanese particles + 'zh': /\b(de|le|ba|ma|ne|ge|zai|shi)\b/i // Common Mandarin particles + }; + + if (languagePatterns[originalLanguage]) { + const patternMatches = alternativeTitles.filter(alt => + // Must use Latin script + /^[a-zA-Z0-9\s\-:;,.!?()&'"]+$/.test(alt.title) && + // Should match language pattern + languagePatterns[originalLanguage].test(alt.title.toLowerCase()) + ); + + if (patternMatches.length > 0) { + patternMatches.forEach(match => { + console.log(` [ROMAN] Found likely ${languageName} Romanized title: "${match.title}" (matched language particles)`); + specialTitles.push(match.title); + }); + } else { + console.log(` [ROMAN] No titles matching ${languageName} language patterns found.`); + + // STEP 4: Last resort - use any longer alternative title in Latin script + const latinTitles = alternativeTitles.filter(alt => + /^[a-zA-Z0-9\s\-:;,.!?()&'"]+$/.test(alt.title) + ); + + if (latinTitles.length > 0) { + // Prefer longer titles as they're often the romanized version + latinTitles.sort((a, b) => b.title.length - a.title.length); + const longestLatin = latinTitles[0]; + console.log(` [ROMAN] Using longest Latin script title as fallback: "${longestLatin.title}"`); + specialTitles.push(longestLatin.title); + } else { + console.log(` [ROMAN] Could not find any suitable Romanized alternative for "${originalTitle}"`); + } + } + } else { + // For languages without specific patterns, just use the longest Latin title + const latinTitles = alternativeTitles.filter(alt => + /^[a-zA-Z0-9\s\-:;,.!?()&'"]+$/.test(alt.title) + ); + + if (latinTitles.length > 0) { + // Prefer longer titles as they're often the romanized version + latinTitles.sort((a, b) => b.title.length - a.title.length); + const longestLatin = latinTitles[0]; + console.log(` [ROMAN] Using longest Latin script title for ${languageName}: "${longestLatin.title}"`); + specialTitles.push(longestLatin.title); + } else { + console.log(` [ROMAN] Could not find any suitable Romanized alternative for "${originalTitle}"`); + } + } + } + } + } else if (originalLanguage && originalLanguage !== 'en') { + // For Latin-script non-English titles, still check for alternative titles + console.log(` [TITLE] Original title already uses Latin script: "${originalTitle}" (${originalLanguage})`); + + // Some Latin-script languages might have alternative spellings/titles worth trying + const nonEnglishAlts = alternativeTitles.filter(alt => + alt.iso_639_1 && alt.iso_639_1 !== 'en' && alt.title !== originalTitle + ); + + if (nonEnglishAlts.length > 0) { + nonEnglishAlts.forEach(alt => { + console.log(` [TITLE] Adding non-English alternative title: "${alt.title}"`); + specialTitles.push(alt.title); + }); + } + } + + return specialTitles; +}; + +// NEW FUNCTION: Search ShowBox and extract the most relevant URL +const _searchAndExtractShowboxUrl = async (searchTerm, originalTmdbTitle, mediaYear, showboxScraperInstance, tmdbType, regionPreference = null, tmdbAllTitles = []) => { + const cacheSubDir = 'showbox_search_results'; + + // mediaTypeString removed (was unused after scoring refactor) + + // Add a cache version to invalidate previous incorrect cached results + const CACHE_VERSION = "v15"; // Increment this whenever the search algorithm significantly changes + + // Create a proper hash for the cache key to avoid filename issues with special characters + const cacheKeyData = `${CACHE_VERSION}_${tmdbType}_${originalTmdbTitle}_${mediaYear || 'noYear'}`; + const cacheKeyHash = crypto.createHash('md5').update(cacheKeyData).digest('hex'); + const searchTermKey = `${cacheKeyHash}.txt`; + + // Log what we're looking for to help with debugging + console.log(` Searching for ShowBox match for: "${originalTmdbTitle}" (${mediaYear || 'N/A'}) [Cache key: ${cacheKeyHash}]`); + + // Check if DISABLE_CACHE is set to 'true' + if (process.env.DISABLE_CACHE !== 'true') { + const cachedResult = await getFromCache(searchTermKey, cacheSubDir); + if (cachedResult) { + // Handle both old string format and new object format + if (typeof cachedResult === 'string') { + console.log(` CACHE HIT for ShowBox search best match URL (${originalTmdbTitle} ${mediaYear || ''}): ${cachedResult}`); + if (cachedResult === 'NO_MATCH_FOUND') return { url: null, score: -1 }; + return { url: cachedResult, score: 10 }; + } else if (cachedResult.result === 'NO_MATCH_FOUND') { + // For stream searches, always retry immediately - content availability can change anytime + console.log(` CACHE HIT: Previously no match found for ${originalTmdbTitle} ${mediaYear || ''}, but retrying immediately for fresh content.`); + // Continue to search logic below to retry immediately + } else { + console.log(` CACHE HIT for ShowBox search best match URL (${originalTmdbTitle} ${mediaYear || ''}): ${cachedResult}`); + return { url: cachedResult, score: 10 }; + } + } + } else { + console.log(` Cache disabled, skipping cache check for ShowBox search.`); + } + + // Special characters often cause search issues, create a cleaned version of the search term + // Replace special characters with spaces, ensure words are properly separated + const cleanedSearchTerm = searchTerm.replace(/[&\-_:;,.]/g, ' ').replace(/\s+/g, ' ').trim(); + console.log(` Using cleaned search term: "${cleanedSearchTerm}" (Original: "${searchTerm}")`); + + // Try multiple search strategies if needed + const searchStrategies = []; + + // Track strategy effectiveness (could be persisted to disk in a production system) + // Higher priority strategies should be tried first + const STRATEGY_PRIORITIES = { + "original_with_year": 10, + "cleaned_with_year": 9, + "special_title_with_year": 8, + "original_only": 7, + "and_replacement_with_year": 6, + "first_part_with_year": 5, + "alternative_with_year": 4, + "alternative_only": 3, + "first_word_with_year": 2, + "year_only": 1 + }; + + // STRATEGY 1: Original TMDB title with year (highest priority) + if (mediaYear) { + searchStrategies.push({ + term: `${originalTmdbTitle} ${mediaYear}`, + description: "original TMDB title with year", + priority: STRATEGY_PRIORITIES.original_with_year + }); + } + + // STRATEGY 2: Cleaned search term with year + if (mediaYear) { + searchStrategies.push({ + term: `${cleanedSearchTerm} ${mediaYear}`, + description: "cleaned search term with year", + priority: STRATEGY_PRIORITIES.cleaned_with_year + }); + } else { + searchStrategies.push({ + term: cleanedSearchTerm, + description: "cleaned search term", + priority: STRATEGY_PRIORITIES.cleaned_with_year + }); + } + + // STRATEGY 3: Special titles (like anime romanizations) with year + const specialTitlesFromAll = tmdbAllTitles.filter(title => + title !== originalTmdbTitle && + (title.length > originalTmdbTitle.length || + /[\u0080-\uFFFF]/.test(originalTmdbTitle)) + ).slice(0, 2); + + specialTitlesFromAll.forEach((specialTitle, idx) => { + if (mediaYear) { + searchStrategies.push({ + term: `${specialTitle} ${mediaYear}`, + description: `special title ${idx + 1} with year`, + priority: STRATEGY_PRIORITIES.special_title_with_year + }); + } + }); + + // STRATEGY 4: Original TMDB title only + searchStrategies.push({ + term: originalTmdbTitle, + description: "original TMDB title only", + priority: STRATEGY_PRIORITIES.original_only + }); + + // STRATEGY 5: For titles with "&", try "and" replacement + if (originalTmdbTitle.includes('&')) { + const andTitle = originalTmdbTitle.replace(/&/g, 'and'); + if (mediaYear) { + searchStrategies.push({ + term: `${andTitle} ${mediaYear}`, + description: "& replaced with 'and', with year", + priority: STRATEGY_PRIORITIES.and_replacement_with_year + }); + } + } + + // STRATEGY 6: First part before "&" with year + if (originalTmdbTitle.includes('&')) { + const firstPart = originalTmdbTitle.split('&')[0].trim(); + if (firstPart.length > 3 && mediaYear) { + searchStrategies.push({ + term: `${firstPart} ${mediaYear}`, + description: "first part before &, with year", + priority: STRATEGY_PRIORITIES.first_part_with_year + }); + } + } + + // STRATEGY 7-8: Alternative titles (limit to 2 alternatives to reduce API calls) + const limitedAlternatives = tmdbAllTitles + .filter(altTitle => altTitle && altTitle !== originalTmdbTitle) + .slice(0, 2); + + limitedAlternatives.forEach((altTitle, index) => { + if (mediaYear) { + searchStrategies.push({ + term: `${altTitle} ${mediaYear}`, + description: `alternative title ${index + 1} with year`, + priority: STRATEGY_PRIORITIES.alternative_with_year + }); + } + searchStrategies.push({ + term: altTitle, + description: `alternative title ${index + 1}`, + priority: STRATEGY_PRIORITIES.alternative_only + }); + }); + + // STRATEGY 9: First word with year (for potentially shortened titles) + const titleWords = originalTmdbTitle.split(/\s+/); + if (titleWords.length > 1) { + const firstWord = titleWords[0]; + if (firstWord.length > 3 && !searchStrategies.some(s => s.term === firstWord) && mediaYear) { + searchStrategies.push({ + term: `${firstWord} ${mediaYear}`, + description: "first word of title with year", + priority: STRATEGY_PRIORITIES.first_word_with_year + }); + } + } + + // STRATEGY 10: Year only (last resort for popular movies) + if (mediaYear) { + searchStrategies.push({ + term: mediaYear, + description: "year only (for popular movies)", + priority: STRATEGY_PRIORITIES.year_only + }); + } + + // Sort strategies by priority + searchStrategies.sort((a, b) => b.priority - a.priority); + + // For debugging + console.log(` Search strategies in order of priority:`); + searchStrategies.forEach((strategy, idx) => { + console.log(` ${idx + 1}. ${strategy.description} (Priority: ${strategy.priority}): "${strategy.term}"`); + }); + + let bestResult = { url: null, score: -1, strategy: null }; + + // Generate all possible slugs from TMDB titles + const allPossibleSlugs = tmdbAllTitles.map(title => slugify(title)).filter(Boolean); + console.log(` Generated ${allPossibleSlugs.length} possible slugs for matching: ${allPossibleSlugs.join(', ')}`); + + // Track strategy effectiveness + const strategyResults = {}; + + // Limit the number of strategies to try (to reduce API calls) + const MAX_STRATEGIES_TO_TRY = 5; + let strategiesAttempted = 0; + + for (const strategy of searchStrategies) { + // Limit the number of strategies we try + if (strategiesAttempted >= MAX_STRATEGIES_TO_TRY) { + console.log(` Reached maximum number of search strategies (${MAX_STRATEGIES_TO_TRY}). Stopping search.`); + break; + } + + strategiesAttempted++; + const searchUrl = `https://www.showbox.media/search?keyword=${encodeURIComponent(strategy.term)}`; + console.log(` Searching ShowBox with URL: ${searchUrl} (Strategy: ${strategy.description})`); + + const htmlContent = await showboxScraperInstance._makeRequest(searchUrl); + if (!htmlContent) { + console.log(` Failed to fetch ShowBox search results for strategy: ${strategy.description}`); + // Track failed strategy + strategyResults[strategy.description] = { success: false, score: 0 }; + continue; // Try next strategy + } + + const $ = cheerio.load(htmlContent); + const searchResults = []; + + // Helper for simple string similarity (case-insensitive, removes non-alphanumeric) + const simplifyString = (str) => str.toLowerCase().replace(/[^a-z0-9]/g, ''); + const simplifiedTmdbTitle = simplifyString(originalTmdbTitle); + + // Create normalized versions of all TMDB titles for comparison + const normalizedTmdbTitles = tmdbAllTitles.map(title => normalizeTitleForComparison(title)); + + $('div.film-poster').each((i, elem) => { + const linkElement = $(elem).find('a.film-poster-ahref'); + const itemTitle = linkElement.attr('title'); + const itemHref = linkElement.attr('href'); + + if (itemTitle && itemHref) { + const simplifiedItemTitle = simplifyString(itemTitle); + const normalizedItemTitle = normalizeTitleForComparison(itemTitle); + + // Extract slug from URL + const urlSlugMatch = itemHref.match(/\/(movie|tv)\/([mt]-[a-z0-9-]+-\d{4})/); + const itemSlug = urlSlugMatch ? urlSlugMatch[2] : ''; + + // Check if the slug matches any of our generated slugs + const slugMatchScore = allPossibleSlugs.some(slug => + itemSlug.includes(slug) || // Direct inclusion of our slug in their slug + allPossibleSlugs.some(ourSlug => ourSlug.includes(itemSlug.replace(/^[mt]-/, ''))) // Their slug in our slug + ) ? 10 : 0; + + // Attempt to extract year from title if present, e.g., "Title (YYYY)" + let itemYear = null; + const yearMatch = itemTitle.match(/\((\d{4})\)$/); + if (yearMatch && yearMatch[1]) { + itemYear = yearMatch[1]; + } + + // Extract year from URL if possible + if (!itemYear && itemHref) { + const urlYearMatch = itemHref.match(/-(20\d{2})$/); + if (urlYearMatch) { + itemYear = urlYearMatch[1]; + } + } + + // IMPROVED SCORING LOGIC + let score = 0; + + // Extra points for URLs that match our expected pattern + const correctMediaType = (tmdbType === 'movie' && itemHref.includes('/movie/')) || + (tmdbType === 'tv' && itemHref.includes('/tv/')); + + // Strong bonus for matching the expected media type + if (correctMediaType) { + score += 12; // Significantly increase importance of correct media type + } else { + score -= 15; // Heavy penalty for wrong media type + } + + // Strong bonus for slug match + score += slugMatchScore; + + // Exact title match (any of our titles) + if (normalizedTmdbTitles.some(normTitle => normTitle === normalizedItemTitle)) { + score += 15; // Very strong bonus for exact normalized match + } + // Title contains our title or vice versa (any of our titles) + else if (normalizedTmdbTitles.some(normTitle => + normTitle.length > 3 && normalizedItemTitle.length > 3 && + (normalizedItemTitle.includes(normTitle) || normTitle.includes(normalizedItemTitle)) + )) { + score += 10; // Good bonus for partial match + } + // Simplified title contains the entire simplified TMDB title + else if (simplifiedItemTitle.includes(simplifiedTmdbTitle)) { + score += 7; // Moderate bonus + } + // TMDB title contains the simplified item title (could be abbreviation/shortened) + else if (simplifiedTmdbTitle.includes(simplifiedItemTitle) && simplifiedItemTitle.length > 3) { + score += 3; // Small bonus for being contained in the TMDB title + } + + // Word-by-word match calculation for multi-word titles + const tmdbWords = originalTmdbTitle.toLowerCase().split(/\s+/); + const itemWords = itemTitle.toLowerCase().split(/\s+/); + + let wordMatchCount = 0; + for (const tmdbWord of tmdbWords) { + if (tmdbWord.length <= 2) continue; // Skip very short words + // More strict word matching - require exact word matches or very close matches + if (itemWords.some(itemWord => { + // Exact match + if (itemWord === tmdbWord) return true; + // Allow for very close matches (like plurals or slight variations) + if (tmdbWord.length > 3 && itemWord.length > 3) { + return (itemWord.includes(tmdbWord) && itemWord.length - tmdbWord.length <= 2) || + (tmdbWord.includes(itemWord) && tmdbWord.length - itemWord.length <= 2); + } + return false; + })) { + wordMatchCount++; + } + } + + // Add score based on percentage of words matched, but require at least some match + if (tmdbWords.length > 0 && wordMatchCount > 0) { + const wordMatchPercent = wordMatchCount / tmdbWords.length; + score += wordMatchPercent * 5; // Up to 5 points for word matches + } else if (tmdbWords.length > 1 && wordMatchCount === 0) { + // Heavy penalty for multi-word titles with no word matches + score -= 10; + } + + // YEAR MATCHING - now much more important + if (mediaYear && itemYear) { + if (mediaYear === itemYear) { + score += 18; // MUCH stronger bonus for exact year match + } else { + // Penalty for year mismatch, larger for bigger differences + const yearDiff = Math.abs(parseInt(mediaYear) - parseInt(itemYear)); + if (yearDiff <= 1) { + score -= 3; // Small penalty for 1 year difference + } else if (yearDiff <= 3) { + score -= 10; // Medium penalty for 2-3 year difference + } else { + score -= 20; // Large penalty for > 3 year difference + } + } + } else if (mediaYear && !itemYear) { + // If we have a year but the item doesn't, apply a small penalty + score -= 5; + } + + searchResults.push({ + title: itemTitle, + href: itemHref, + year: itemYear, + score: score, + slug: itemSlug, + isMovie: itemHref.includes('/movie/'), + isTv: itemHref.includes('/tv/') + }); + } + }); + + // Sort by score and pick the best one + searchResults.sort((a, b) => b.score - a.score); + + if (searchResults.length > 0) { + console.log(` Search results for strategy "${strategy.description}":`); + searchResults.slice(0, 3).forEach((result, i) => { + console.log(` ${i + 1}. Title: "${result.title}", Year: ${result.year || 'N/A'}, Score: ${result.score.toFixed(1)}, URL: ${result.href}, Media Type: ${result.isMovie ? 'Movie' : (result.isTv ? 'TV' : 'Unknown')}`); + }); + + const bestMatch = searchResults[0]; + if (bestMatch.score > bestResult.score) { + bestResult = { + url: `https://www.showbox.media${bestMatch.href}`, + score: bestMatch.score, + strategy: strategy.description, + title: bestMatch.title, + year: bestMatch.year, + isCorrectType: (tmdbType === 'movie' && bestMatch.isMovie) || (tmdbType === 'tv' && bestMatch.isTv) + }; + + // Track successful strategy + strategyResults[strategy.description] = { + success: true, + score: bestMatch.score, + correctType: bestResult.isCorrectType + }; + } else { + // Track strategy that didn't beat our current best + strategyResults[strategy.description] = { + success: true, + score: bestMatch.score, + correctType: (tmdbType === 'movie' && bestMatch.isMovie) || (tmdbType === 'tv' && bestMatch.isTv), + notBest: true + }; + } + } else { + console.log(` No results found for strategy "${strategy.description}"`); + // Track failed strategy + strategyResults[strategy.description] = { success: false, score: 0 }; + } + + // INCREASED THRESHOLD: Require higher confidence for matches to avoid false positives + if (bestResult.score > 35 && bestResult.isCorrectType) { + console.log(` Found good match with score ${bestResult.score.toFixed(1)} using strategy "${bestResult.strategy}", stopping search`); + break; + } + } + + // Log strategy effectiveness summary + console.log(` Strategy effectiveness summary:`); + Object.entries(strategyResults).forEach(([strategy, result]) => { + if (result.success) { + const status = result.notBest ? "Found results but not best" : + (result.correctType ? "Found correct type" : "Found wrong type"); + console.log(` - ${strategy}: ${status} (Score: ${result.score.toFixed(1)})`); + } else { + console.log(` - ${strategy}: No results found`); + } + }); + + // Final decision based on all strategies + if (bestResult.url) { + let useResult = false; + + // Use score-based confidence for validation - increased threshold to prevent false positives + if (bestResult.score >= 40 && bestResult.isCorrectType) { + useResult = true; + } else { + console.log(` Low confidence match (Score: ${bestResult.score.toFixed(1)}). Discarding - requires score >= 40.`); + useResult = false; + } + + if (useResult && bestResult.url) { + console.log(` Best overall match: ${bestResult.url} (Score: ${bestResult.score.toFixed(1)}, Strategy: ${bestResult.strategy})`); + + // Save high-score results to cache + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(searchTermKey, bestResult.url, cacheSubDir); + } + return { url: bestResult.url, score: bestResult.score }; + } + } + + // This block will now be reached if the initial search found nothing, or if AI rejected the candidate. + console.log(` No suitable match found on ShowBox search for: ${originalTmdbTitle} (${mediaYear || 'N/A'})`); + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(searchTermKey, { result: 'NO_MATCH_FOUND', timestamp: Date.now() }, cacheSubDir); + } + return { url: null, score: -1 }; +}; + +// TMDB helper function to get ShowBox URL from TMDB ID +// MODIFICATION: Enhanced for better anime and title matching +const getShowboxUrlFromTmdbInfo = async (tmdbType, tmdbId, regionPreference = null) => { + const urlCacheSubDir = 'showbox_final_url'; + const urlCacheKey = `v3_${tmdbType}_${tmdbId}.json`; + const disableCache = process.env.DISABLE_CACHE === 'true'; + + // 1. Check for the final, validated URL in the cache first. + if (!disableCache) { + const cachedResult = await getFromCache(urlCacheKey, urlCacheSubDir); + if (cachedResult) { + if (cachedResult.showboxUrl === 'NO_URL_FOUND') { + // For stream searches, always retry immediately - content availability can change anytime + console.log(` [Final URL Cache] HIT: Previously no URL found for ${tmdbType}/${tmdbId}, but retrying immediately for fresh content.`); + // Continue to search logic below to retry immediately + } else { + console.log(` [Final URL Cache] HIT: Found cached ShowBox result for ${tmdbType}/${tmdbId}.`); + return cachedResult; + } + } + } + + // 2. If no cached final URL, proceed with the discovery logic. + console.time('getShowboxUrlFromTmdbInfo_total'); + const mainCacheSubDir = 'tmdb_api'; + const mainCacheKey = `tmdb-${tmdbType}-${tmdbId}.json`; + let tmdbData = await getFromCache(mainCacheKey, mainCacheSubDir); + + if (!tmdbData || process.env.DISABLE_CACHE === 'true') { + const TMDB_API_KEY = obtainTmdbKey(); + const tmdbApiUrl = `${TMDB_BASE_URL}/${tmdbType}/${tmdbId}?api_key=${TMDB_API_KEY}`; + console.log(` Fetching TMDB data from: ${tmdbApiUrl}`); + try { + const response = await axios.get(tmdbApiUrl, { timeout: 10000 }); + tmdbData = response.data; + if (tmdbData) { + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(mainCacheKey, tmdbData, mainCacheSubDir); + } + } else { + console.log(' No TMDB data received.'); + console.timeEnd('getShowboxUrlFromTmdbInfo_total'); + return null; + } + } catch (error) { + console.log(` Error fetching TMDB main data: ${error.message}`); + console.timeEnd('getShowboxUrlFromTmdbInfo_total'); + return null; + } + } + + if (!tmdbData) { + console.log(` Could not fetch TMDB data for ${tmdbType}/${tmdbId}. Cannot proceed.`); + console.timeEnd('getShowboxUrlFromTmdbInfo_total'); + return null; + } + + // Fetch alternative titles + const altTitlesCacheKey = `tmdb-${tmdbType}-${tmdbId}-alternatives.json`; + let tmdbAlternativeTitlesData = await getFromCache(altTitlesCacheKey, mainCacheSubDir); + + if (!tmdbAlternativeTitlesData || process.env.DISABLE_CACHE === 'true') { + const TMDB_API_KEY = obtainTmdbKey(); + const altTitlesApiUrl = `${TMDB_BASE_URL}/${tmdbType}/${tmdbId}/alternative_titles?api_key=${TMDB_API_KEY}`; + console.log(` Fetching TMDB alternative titles from: ${altTitlesApiUrl}`); + try { + const response = await axios.get(altTitlesApiUrl, { timeout: 10000 }); + tmdbAlternativeTitlesData = response.data; + if (tmdbAlternativeTitlesData) { + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(altTitlesCacheKey, tmdbAlternativeTitlesData, mainCacheSubDir); + } + } + } catch (error) { + console.log(` Error fetching TMDB alternative titles: ${error.message}`); + tmdbAlternativeTitlesData = { titles: [] }; + } + } + + // Get alternative titles array, or empty array if none + const alternativeTitles = tmdbAlternativeTitlesData?.titles || []; + + // NEW: Fetch TMDB images + const imagesCacheKey = `tmdb-${tmdbType}-${tmdbId}-images.json`; + let tmdbImagesData = await getFromCache(imagesCacheKey, mainCacheSubDir); + let tmdbBackdropPaths = []; + + if (!tmdbImagesData || process.env.DISABLE_CACHE === 'true') { + const TMDB_API_KEY = obtainTmdbKey(); + const imagesApiUrl = `${TMDB_BASE_URL}/${tmdbType}/${tmdbId}/images?api_key=${TMDB_API_KEY}`; + console.log(` Fetching TMDB images from: ${imagesApiUrl}`); + try { + const response = await axios.get(imagesApiUrl, { timeout: 10000 }); + tmdbImagesData = response.data; + if (tmdbImagesData) { + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(imagesCacheKey, tmdbImagesData, mainCacheSubDir); + } + } + } catch (error) { + console.log(` Error fetching TMDB images: ${error.message}`); + tmdbImagesData = { backdrops: [], posters: [] }; // Default to empty if error + } + } + if (tmdbImagesData && tmdbImagesData.backdrops) { + tmdbBackdropPaths = tmdbImagesData.backdrops.map(img => img.file_path).filter(Boolean); + console.log(` Collected ${tmdbBackdropPaths.length} TMDB backdrop paths.`); + if (tmdbBackdropPaths.length > 0) { + console.log(` Sample TMDB backdrop paths: ${tmdbBackdropPaths.slice(0, 3).join(', ')}`); + } + } + + // Log anime genres to help identify anime content + if (tmdbData.genres && Array.isArray(tmdbData.genres)) { + const animeGenre = tmdbData.genres.find(g => g.name === 'Animation'); + if (animeGenre) { + console.log(` [ANIME] Content identified as Animation genre, will check for anime-specific titles`); + } + } + + // Extract main titles and year + let mainTitle = null; // Primary/localized title + let originalTitle = null; // Original title (could be in non-Latin script) + let year = null; + + if (tmdbType === 'movie') { + mainTitle = tmdbData.title; // Prioritize .title for movies (localized) + originalTitle = tmdbData.original_title; + if (tmdbData.release_date && String(tmdbData.release_date).length >= 4) { + year = String(tmdbData.release_date).substring(0, 4); + } + } else if (tmdbType === 'tv') { + mainTitle = tmdbData.name; // Prioritize .name for TV (localized) + originalTitle = tmdbData.original_name; + const rawFirstAirDate = tmdbData.first_air_date; + if (rawFirstAirDate && String(rawFirstAirDate).length >= 4) { + year = String(rawFirstAirDate).substring(0, 4); + } + } + + if (!mainTitle && !originalTitle) { + console.log(` Could not determine any title from TMDB data for ${tmdbType}/${tmdbId}.`); + console.timeEnd('getShowboxUrlFromTmdbInfo_total'); + return null; + } + + // If mainTitle is missing, use originalTitle as fallback + if (!mainTitle) mainTitle = originalTitle; + + // Extract special titles like Romaji for anime + const specialTitles = extractSpecialTitles(tmdbData, alternativeTitles); + + // Collect all available titles in one array for processing + const allTitles = [mainTitle, originalTitle, ...specialTitles, ...alternativeTitles.map(alt => alt.title)] + .filter(Boolean) // Remove nulls/undefined + .filter((value, index, self) => self.indexOf(value) === index); // Remove duplicates + + console.log(` Collected ${allTitles.length} unique titles for "${mainTitle || originalTitle}":`); + allTitles.forEach((title, idx) => { + console.log(` [${idx + 1}] "${title}"`); + }); + + const MAX_DIRECT_URL_ATTEMPTS = 3; // Configurable limit for direct URL construction + const titlesForDirectAttempt = allTitles.slice(0, MAX_DIRECT_URL_ATTEMPTS); + console.log(` Limiting direct URL construction attempts to first ${titlesForDirectAttempt.length} titles out of ${allTitles.length} total unique titles.`); + + // Initialize ShowBox scraper instance + const showboxScraperInstance = new ShowBoxScraper(regionPreference); + const mediaTypeString = tmdbType === 'movie' ? 'movie' : 'tv'; + const mediaTypePrefix = tmdbType === 'movie' ? 'm' : 't'; + + // This is a new inner function to contain all the discovery logic. + const findUrl = async () => { + // If we have a year, try direct URL construction with all titles + if (year) { + console.log(` Attempting direct ShowBox URL construction for ${tmdbType} "${mainTitle}" (${year}) with ${titlesForDirectAttempt.length} title variants.`); + + for (const candidateTitle of titlesForDirectAttempt) { + const slug = slugify(candidateTitle); + if (!slug) { + console.log(` Skipping empty slug for title: "${candidateTitle}"`); + continue; + } + + const directShowboxUrl = `https://www.showbox.media/${mediaTypeString}/${mediaTypePrefix}-${slug}-${year}`; + console.log(` Trying direct URL: ${directShowboxUrl} (from title: "${candidateTitle}")`); + + const htmlContent = await showboxScraperInstance._makeRequest(directShowboxUrl); + if (htmlContent) { + console.log(` Successfully fetched content from direct URL: ${directShowboxUrl}`); + const pageInfo = showboxScraperInstance.extractContentIdAndType(directShowboxUrl, htmlContent); + + if (pageInfo && pageInfo.title) { + const titleIsValid = validateShowboxTitle(pageInfo.title, mainTitle, originalTitle, alternativeTitles); + const showboxTmdbImagePath = extractTmdbImagePathFromShowboxHtml(htmlContent); + const imageIsValid = validateTmdbImage(showboxTmdbImagePath, tmdbBackdropPaths); + + if (titleIsValid && imageIsValid) { + console.log(` SUCCESS (TITLE & IMAGE VALIDATED): Validated title and TMDB image for ${directShowboxUrl}. Using this URL.`); + return { showboxUrl: directShowboxUrl, year: year, title: mainTitle }; + } + } + } + } + } + + // ... (rest of the discovery logic: special slugs, AI search, _searchAndExtractShowboxUrl call) + // Note: all 'return { showboxUrl: ... }' statements will now return from this inner function. + // ... (this part of the code remains the same but is conceptually inside findUrl) + + // The original search call at the end + console.log(` No validated ShowBox URL found through direct construction. Falling back to search...`); + const searchResult = await _searchAndExtractShowboxUrl(mainTitle, mainTitle, year, showboxScraperInstance, tmdbType, regionPreference, allTitles); + if (searchResult && searchResult.url) { + console.log(` Search found a result. Title: ${searchResult.title}, Year: ${searchResult.year}`); + return { showboxUrl: searchResult.url, year: year, title: mainTitle }; + } + + return null; // Return null if all methods fail + }; + + // Execute the discovery function + const finalResult = await findUrl(); + + // 3. Cache the result of the discovery, whether successful or not. + if (!disableCache) { + if (finalResult && finalResult.showboxUrl) { + console.log(` [Final URL Cache] SAVING result for ${tmdbType}/${tmdbId}: ${finalResult.showboxUrl}`); + await saveToCache(urlCacheKey, finalResult, urlCacheSubDir); + } else { + console.log(` [Final URL Cache] SAVING 'NO_URL_FOUND' for ${tmdbType}/${tmdbId}.`); + await saveToCache(urlCacheKey, { showboxUrl: 'NO_URL_FOUND', timestamp: Date.now() }, urlCacheSubDir); + } + } + + console.timeEnd('getShowboxUrlFromTmdbInfo_total'); + return finalResult; +}; + +// Function to fetch sources for a single FID +// MODIFICATION: Remove scraperApiKey parameter +const fetchSourcesForSingleFid = async (fidToProcess, shareKey, regionPreference = null, userCookie = null, retryAttempt = 0) => { + const MAX_RETRIES_SAME_REGION = 1; // Retry once on the same region before falling back + + const targetPostData = new URLSearchParams(); + targetPostData.append('fid', fidToProcess); + targetPostData.append('share_key', shareKey); + + const cookieForRequest = await getCookieForRequest(regionPreference, userCookie); + + const baseHeaders = { + 'Cookie': `ui=${cookieForRequest}`, + 'Content-Type': 'application/x-www-form-urlencoded' + }; + + const finalPostUrl = FEBBOX_PLAYER_URL; + const postDataForAxios = targetPostData.toString(); + const axiosConfig = { headers: baseHeaders, timeout: 20000 }; + + console.log(` Fetching fresh player data for video FID: ${fidToProcess} (Share: ${shareKey}) directly to ${FEBBOX_PLAYER_URL}`); + + try { + const response = await axios.post(finalPostUrl, postDataForAxios, axiosConfig); + const playerContent = response.data; + + // Mark the region as available if the request succeeded + if (global.lastRequestedRegion && global.lastRequestedRegion.used) { + global.regionAvailabilityStatus[global.lastRequestedRegion.used] = true; + // If we successfully used a fallback, notify through a global flag + if (global.lastRequestedRegion.usingFallback) { + global.usedRegionFallback = { + original: global.lastRequestedRegion.original, + fallback: global.lastRequestedRegion.used + }; + } + } + + const sourcesMatch = playerContent.match(/var sources = (.*?);\s*/s); + if (!sourcesMatch) { + console.log(` Could not find sources array in player response for FID ${fidToProcess}`); + if (playerContent.startsWith('http') && (playerContent.includes('.mp4') || playerContent.includes('.m3u8'))) { + return [{ "label": "DirectLink", "url": playerContent.trim() }]; + } + try { + const jsonResponse = JSON.parse(playerContent); + if (jsonResponse.msg) { + console.log(` FebBox API Error: ${jsonResponse.code} - ${jsonResponse.msg}`); + // Check for region-specific errors + if (jsonResponse.code === 1002 || + jsonResponse.msg.includes("region") || + jsonResponse.msg.includes("location") || + jsonResponse.msg.includes("unavailable")) { + + // --- BEGIN: Retry Logic --- + if (retryAttempt < MAX_RETRIES_SAME_REGION) { + console.log(` Region error on attempt ${retryAttempt + 1}. Retrying same region: ${global.lastRequestedRegion.used}`); + await new Promise(resolve => setTimeout(resolve, 1000)); // Wait 1 second + return fetchSourcesForSingleFid(fidToProcess, shareKey, regionPreference, userCookie, retryAttempt + 1); + } + // --- END: Retry Logic --- + + // Mark the region as unavailable after retries have failed + if (global.lastRequestedRegion && global.lastRequestedRegion.used) { + console.log(` Marking region ${global.lastRequestedRegion.used} as unavailable after ${retryAttempt + 1} failed attempts.`); + global.regionAvailabilityStatus[global.lastRequestedRegion.used] = false; + + // Try again with a US fallback region if we haven't already + if (!global.lastRequestedRegion.usingFallback) { + for (const fallbackRegion of US_FALLBACK_REGIONS) { + if (fallbackRegion !== global.lastRequestedRegion.used) { + console.log(` Retrying with fallback US region: ${fallbackRegion}`); + // Reset retryAttempt for the new region + return fetchSourcesForSingleFid(fidToProcess, shareKey, fallbackRegion, userCookie, 0); + } + } + } + } + } + } + } catch (e) { /* Not a JSON error message */ } + return []; + } + + const sourcesJsArrayString = sourcesMatch[1]; + const sourcesData = JSON.parse(sourcesJsArrayString); + const fidVideoLinks = []; + for (const sourceItem of sourcesData) { + if (sourceItem.file && sourceItem.label) { + let detailedFilename = null; + try { + const urlParams = new URLSearchParams(new URL(sourceItem.file).search); + if (urlParams.has('KEY5')) { + detailedFilename = urlParams.get('KEY5'); + } + } catch (e) { + // console.warn('Could not parse URL to get KEY5:', sourceItem.file, e.message); + } + fidVideoLinks.push({ + "label": String(sourceItem.label), + "url": String(sourceItem.file), + "detailedFilename": detailedFilename + }); + } + } + + if (fidVideoLinks.length > 0) { + console.log(` Extracted ${fidVideoLinks.length} fresh video link(s) for FID ${fidToProcess}`); + } + return fidVideoLinks; + } catch (error) { + console.log(` Request error for FID ${fidToProcess}: ${error.message}`); + + // Check for region-specific errors and mark the region as unavailable + if ((error.message.includes('timeout') || + error.message.includes('network') || + (error.response && (error.response.status === 403 || error.response.status === 404)))) { + + // --- BEGIN: Retry Logic --- + if (retryAttempt < MAX_RETRIES_SAME_REGION) { + console.log(` Network error on attempt ${retryAttempt + 1}. Retrying same region: ${global.lastRequestedRegion.used}`); + await new Promise(resolve => setTimeout(resolve, 1000)); // Wait 1 second + return fetchSourcesForSingleFid(fidToProcess, shareKey, regionPreference, userCookie, retryAttempt + 1); + } + // --- END: Retry Logic --- + + if (global.lastRequestedRegion && global.lastRequestedRegion.used) { + console.log(` Marking region ${global.lastRequestedRegion.used} as potentially unavailable after ${retryAttempt + 1} failed attempts due to error.`); + global.regionAvailabilityStatus[global.lastRequestedRegion.used] = false; + + // Try again with a US fallback region if we haven't already + if (!global.lastRequestedRegion.usingFallback) { + for (const fallbackRegion of US_FALLBACK_REGIONS) { + if (fallbackRegion !== global.lastRequestedRegion.used) { + console.log(` Retrying with fallback US region: ${fallbackRegion}`); + // Reset retryAttempt for the new region + return fetchSourcesForSingleFid(fidToProcess, shareKey, fallbackRegion, userCookie, 0); + } + } + } + } + } + + console.log(` Fresh fetch failed for FID ${fidToProcess}.`); + return []; + } +}; + +// ShowBox scraper class +class ShowBoxScraper { + constructor(regionPreference = null, userCookie = null) { + // Store the region preference and user cookie + this.regionPreference = regionPreference; + this.userCookie = userCookie; + // ScraperAPI key support removed + + // Initialize proxy rotation counter for this instance + this.proxyCounter = Math.floor(Math.random() * 1000); // Random start to avoid patterns + + this.baseHeaders = { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', + 'Accept-Language': 'en-US,en;q=0.9', + 'Accept-Encoding': 'gzip, deflate, br', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + 'Sec-Fetch-Dest': 'document', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-User': '?1', + 'DNT': '1', + 'Sec-GPC': '1' + }; + } + + // Get the next proxy URL from the rotation + getNextProxy() { + // Read proxy configuration from environment + const useRotatingProxy = process.env.SHOWBOX_USE_ROTATING_PROXY === 'true'; + const primaryProxy = process.env.SHOWBOX_PROXY_URL_VALUE; + const alternateProxy = process.env.SHOWBOX_PROXY_URL_ALTERNATE; + + // Increment the counter for this instance + this.proxyCounter++; + + // ScraperAPI support removed; simple proxy rotation only + + // Return direct connection if both proxies are missing + if (!primaryProxy && !alternateProxy) return null; + + // If rotation disabled or alternate proxy not set, just use primary proxy + if (!useRotatingProxy || !alternateProxy) return primaryProxy; + + // Use modulo to alternate between available proxies + const proxyIndex = this.proxyCounter % 2; + const selectedProxy = proxyIndex === 0 ? primaryProxy : alternateProxy; + + console.log(`[Rotating Proxy] Selected proxy ${proxyIndex + 1}/2 for request #${this.proxyCounter}`); + return selectedProxy; + } + + async _makeRequest(url, isJsonExpected = false) { + // Removed unused timerLabel variable (profiling optional) + + // For JSON requests, we still cache normally since they're small + if (isJsonExpected) { + const cacheSubDir = 'showbox_generic'; + const urlHash = crypto.createHash('md5').update(url).digest('hex'); + const cacheKey = `${urlHash}.json`; + + const cachedData = await getFromCache(cacheKey, cacheSubDir); + if (cachedData && typeof cachedData === 'object') { + return cachedData; + } + } + // For HTML requests, we don't cache the raw HTML anymore - it's too large and wasteful + + // Get the next proxy URL from the rotation + const selectedProxy = this.getNextProxy(); + let requestUrl = url; + // removed unused isUsingScraperApi flag + + if (selectedProxy) { + if (typeof selectedProxy === 'function') { + requestUrl = selectedProxy(url); // Direct transformation + } else if (selectedProxy.trim() !== '') { + // This is a regular proxy URL + requestUrl = `${selectedProxy}${encodeURIComponent(url)}`; + console.log(`ShowBoxScraper: Making request to: ${url} via Proxy: ${selectedProxy}`); + } + } else { + console.log(`ShowBoxScraper: Making direct request to: ${url} (no proxy available)`); + } + + // Removed console.time call (timerLabel removed) + + // Get the cookie with region preference if site requires it + let cookieValue = null; + if (url.includes('febbox.com')) { + if (this.regionPreference) { + console.log(`[ShowBoxScraper] Getting cookie with explicit region preference: ${this.regionPreference}`); + cookieValue = await getCookieForRequest(this.regionPreference, this.userCookie); + } else { + console.log(`[ShowBoxScraper] Getting cookie with default region (no preference specified)`); + cookieValue = await getCookieForRequest(null, this.userCookie); + } + } + + const currentHeaders = { ...this.baseHeaders }; + if (isJsonExpected) { + currentHeaders['Accept'] = 'application/json, text/javascript, */*; q=0.01'; + currentHeaders['X-Requested-With'] = 'XMLHttpRequest'; + currentHeaders['Sec-Fetch-Dest'] = 'empty'; + currentHeaders['Sec-Fetch-Mode'] = 'cors'; + delete currentHeaders['Upgrade-Insecure-Requests']; + } + + if (cookieValue) { + currentHeaders['Cookie'] = `ui=${cookieValue}`; + } + + try { + const response = await axios.get(requestUrl, { + headers: currentHeaders, + timeout: 30000 // Consider increasing if proxy adds significant latency + }); + const responseData = response.data; + + // Only cache JSON responses, not HTML (HTML is too large and wasteful) + if (responseData && isJsonExpected) { + const cacheSubDir = 'showbox_generic'; + const urlHash = crypto.createHash('md5').update(url).digest('hex'); + const cacheKey = `${urlHash}.json`; + await saveToCache(cacheKey, responseData, cacheSubDir); + } + // timerLabel removed; profiling disabled + return responseData; + } catch (error) { + const errorMessage = error.response ? `${error.message} (Status: ${error.response.status})` : error.message; + console.log(`ShowBoxScraper: Request failed for ${url}: ${errorMessage}`); + // timerLabel removed; profiling disabled + return null; + } + } + + extractContentIdAndType(url, htmlContent) { + let contentId = null; + let contentTypeVal = null; + let title = "Unknown Title"; + let sourceOfId = "unknown"; + + const urlMatchDetail = url.match(/\/(movie|tv)\/detail\/(\d+)(?:-([a-zA-Z0-9-]+))?/); + if (urlMatchDetail) { + const contentTypeStr = urlMatchDetail[1]; + contentId = urlMatchDetail[2]; + contentTypeVal = contentTypeStr === 'movie' ? '1' : '2'; + const slugTitle = urlMatchDetail[3]; + if (slugTitle) { + title = slugTitle.replace(/-/g, ' ').split(' ').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' '); + } + sourceOfId = "url_direct"; + } + + if (htmlContent) { + const $ = cheerio.load(htmlContent); + let extractedHtmlTitle = null; + const titleElementH2 = $('h2.heading-name a'); + if (titleElementH2.length) { + extractedHtmlTitle = titleElementH2.text().trim(); + } else { + const titleElementH1 = $('h1.heading-name, h1.title'); + if (titleElementH1.length) { + extractedHtmlTitle = titleElementH1.text().trim(); + } else { + const titleElementMeta = $('meta[property="og:title"]'); + if (titleElementMeta.length) { + extractedHtmlTitle = titleElementMeta.attr('content')?.trim(); + } else { + const titleElementPlain = $('title, .movie-title, .tv-title'); + if (titleElementPlain.length) { + extractedHtmlTitle = titleElementPlain.first().text().trim(); + } + } + } + } + + if (extractedHtmlTitle) { + title = extractedHtmlTitle; + if (title.includes(" - ShowBox")) title = title.split(" - ShowBox")[0].trim(); + if (title.includes("| ShowBox")) title = title.split("| ShowBox")[0].trim(); + } + + if (!contentId || !contentTypeVal) { + const headingLinkSelector = 'h2.heading-name a[href*="/detail/"], h1.heading-name a[href*="/detail/"]'; + const headingLink = $(headingLinkSelector).first(); + if (headingLink.length) { + const href = headingLink.attr('href'); + if (href) { + const idTypeMatchHtml = href.match(/\/(movie|tv)\/detail\/(\d+)/); + if (idTypeMatchHtml) { + contentId = idTypeMatchHtml[2]; + contentTypeVal = idTypeMatchHtml[1] === 'movie' ? '1' : '2'; + sourceOfId = "html_heading_link"; + } + } + } + + if (!contentId) { + const shareDiv = $('div.sharethis-inline-share-buttons'); + if (shareDiv.length) { + let linkElements = shareDiv.find('a[href*="/movie/detail/"], a[href*="/tv/detail/"]'); + const dataUrlOnDiv = shareDiv.attr('data-url'); + if (linkElements.length === 0 && dataUrlOnDiv) { + const dummyLinkSoup = cheerio.load(``); + if (dummyLinkSoup('a').length) linkElements = dummyLinkSoup('a'); + } + + linkElements.each((i, el) => { + const href = $(el).attr('href'); + if (href) { + const idTypeMatchShare = href.match(/\/(movie|tv)\/detail\/(\d+)/); + if (idTypeMatchShare) { + contentId = idTypeMatchShare[2]; + contentTypeVal = idTypeMatchShare[1] === 'movie' ? '1' : '2'; + sourceOfId = "html_share_div"; + return false; // break loop + } + } + }); + } + } + } + } + + if (contentId && contentTypeVal) { + return { "id": contentId, "type": contentTypeVal, "title": title, "source": sourceOfId }; + } + + return null; + } + + async extractFebboxShareLinks(showboxUrl) { + const timerLabel = `extractFebboxShareLinks_total_${showboxUrl.replace(/[^a-zA-Z0-9]/g, '')}`; + console.log(`ShowBoxScraper: Attempting to extract FebBox share link from: ${showboxUrl}`); + console.time(timerLabel); + + try { + let htmlContent = null; + let contentInfo = this.extractContentIdAndType(showboxUrl, null); + + if (!contentInfo || !contentInfo.id || !contentInfo.type) { + console.log("ShowBoxScraper: ID/Type not in URL, fetching HTML."); + htmlContent = await this._makeRequest(showboxUrl); + if (!htmlContent) { + console.log(`ShowBoxScraper: Failed to fetch HTML for ${showboxUrl}.`); + console.timeEnd(timerLabel); + return []; + } + contentInfo = this.extractContentIdAndType(showboxUrl, htmlContent); + } + + if (!contentInfo || !contentInfo.id || !contentInfo.type) { + console.log(`ShowBoxScraper: Could not determine content ID/type for ${showboxUrl}.`); + // console.timeEnd removed (timerLabel eliminated) + return []; + } + + const { id: contentId, type: contentType, title } = contentInfo; + + if (htmlContent) { + const $ = cheerio.load(htmlContent); + let directFebboxLink = null; + + $('a[href*="febbox.com/share/"]').each((i, elem) => { + const href = $(elem).attr('href'); + if (href && href.includes("febbox.com/share/")) { + directFebboxLink = href; + return false; + } + }); + + if (!directFebboxLink) { + const scriptContents = $('script').map((i, el) => $(el).html()).get().join('\n'); + const shareKeyMatch = scriptContents.match(/['"](https?:\/\/www\.febbox\.com\/share\/[a-zA-Z0-9-]+)['"]/); + if (shareKeyMatch && shareKeyMatch[1]) { + directFebboxLink = shareKeyMatch[1]; + } + } + + if (directFebboxLink) { + console.log(`ShowBoxScraper: Successfully fetched FebBox URL: ${directFebboxLink} from HTML`); + console.timeEnd(timerLabel); + return [{ + "showbox_title": title, + "febbox_share_url": directFebboxLink, + "showbox_content_id": contentId, + "showbox_content_type": contentType + }]; + } + } + + // API call if direct parsing didn't work + console.log(`ShowBoxScraper: Making API call for ${title} (ID: ${contentId}, Type: ${contentType})`); + const shareApiUrl = `https://www.showbox.media/index/share_link?id=${contentId}&type=${contentType}`; + const apiTimerLabel = `extractFebboxShareLinks_apiCall_${contentId}`; + console.time(apiTimerLabel); + const apiResponseStr = await this._makeRequest(shareApiUrl, true); + console.timeEnd(apiTimerLabel); + + if (!apiResponseStr) { + console.log(`ShowBoxScraper: Failed to get response from ShowBox share_link API`); + // console.timeEnd removed (timerLabel eliminated) + return []; + } + + try { + const apiResponseJson = (typeof apiResponseStr === 'string') ? JSON.parse(apiResponseStr) : apiResponseStr; + if (apiResponseJson.code === 1 && apiResponseJson.data && apiResponseJson.data.link) { + const febboxShareUrl = apiResponseJson.data.link; + console.log(`ShowBoxScraper: Successfully fetched FebBox URL: ${febboxShareUrl} from API`); + // timerLabel removed; profiling disabled + return [{ + "showbox_title": title, + "febbox_share_url": febboxShareUrl, + "showbox_content_id": contentId, + "showbox_content_type": contentType + }]; + } else { + console.log(`ShowBoxScraper: ShowBox share_link API did not succeed for '${title}'.`); + // timerLabel removed; profiling disabled + return []; + } + } catch (e) { + console.log(`ShowBoxScraper: Error decoding JSON from ShowBox share_link API: ${e.message}`); + // timerLabel removed; profiling disabled + return []; + } + } catch (error) { + // Catch any unexpected errors from the outer logic + console.error(`ShowBoxScraper: Unexpected error in extractFebboxShareLinks for ${showboxUrl}: ${error.message}`); + // console.timeEnd removed (timerLabel eliminated) + return []; + } + } +} + +// Function to extract FIDs from FebBox share page +// MODIFICATION: Accept scraperApiKey -> MODIFICATION: Remove scraperApiKey +const extractFidsFromFebboxPage = async (febboxUrl, regionPreference = null, userCookie = null) => { + // Removed timerLabel profiling label from extractFidsFromFebboxPage + let directSources = []; // Initialize directSources + const cacheSubDirParsed = 'febbox_parsed_page'; // Only cache parsed data + const urlHash = crypto.createHash('md5').update(febboxUrl).digest('hex'); + const cacheKeyParsed = `${urlHash}.json`; // Parsed data will be JSON + + // Check for cached parsed data first + const cachedParsedData = await getFromCache(cacheKeyParsed, cacheSubDirParsed); + if (cachedParsedData && typeof cachedParsedData === 'object') { // Ensure it's an object + // console.log(` CACHE HIT for parsed FebBox page data: ${febboxUrl}`); + // profiling disabled (timerLabel removed) + return cachedParsedData; // Return { fids, shareKey, directSources } + } + // console.log(` CACHE MISS for parsed FebBox page data: ${febboxUrl}`); + + // Fetch HTML content directly without caching it + let contentHtml = null; + const cookieForRequest = await getCookieForRequest(regionPreference, userCookie); // Pass region preference and user cookie + const baseHeaders = { 'Cookie': `ui=${cookieForRequest}` }; + const fetchTimerLabel = `extractFidsFromFebboxPage_fetch_${febboxUrl.replace(/[^a-zA-Z0-9]/g, '')}`; + + // MODIFICATION: Removed ScraperAPI conditional logic + // const useScraperApi = process.env.USE_SCRAPER_API === 'true'; + // const scraperApiKey = process.env.SCRAPER_API_KEY_VALUE; + + const finalGetUrl = febboxUrl; + const axiosConfig = { headers: baseHeaders, timeout: 20000 }; + + // if (useScraperApi && scraperApiKey) { + // finalGetUrl = SCRAPER_API_BASE_URL; // Use defined base URL + // axiosConfig.params = { api_key: scraperApiKey, url: febboxUrl, keep_headers: 'true' }; + // console.log(`Fetching FebBox page content from URL: ${febboxUrl} via ScraperAPI`); + // } else { + // console.log(`Fetching FebBox page content from URL: ${febboxUrl} directly`); + // } + console.log(`Fetching FebBox page content from URL: ${febboxUrl} directly`); + + try { + // console.time(fetchTimerLabel); + const response = await axios.get(finalGetUrl, axiosConfig); + // console.timeEnd(fetchTimerLabel); + contentHtml = response.data; + // Note: No longer caching the raw HTML content + } catch (error) { + console.log(`Failed to fetch FebBox page: ${error.message}`); + if (fetchTimerLabel) console.timeEnd(fetchTimerLabel); // Ensure timer ends on error if started + // console.timeEnd(timerLabel); + return { fids: [], shareKey: null, directSources: [] }; + } + + let shareKey = null; + // Update regex to include hyphens in share key pattern + const matchShareKeyUrl = febboxUrl.match(/\/share\/([a-zA-Z0-9-]+)/); + if (matchShareKeyUrl) { + shareKey = matchShareKeyUrl[1]; + } else if (contentHtml) { + // Update regex to include hyphens in share key pattern + const matchShareKeyHtml = contentHtml.match(/(?:var share_key\s*=|share_key:\s*|shareid=)"?([a-zA-Z0-9-]+)"?/); + if (matchShareKeyHtml) { + shareKey = matchShareKeyHtml[1]; + } + } + + if (!shareKey) { + console.log(`Warning: Could not extract share_key from ${febboxUrl}`); + // console.timeEnd(timerLabel); + return { fids: [], shareKey: null }; + } + + // Extract FIDs from the content HTML + const $ = cheerio.load(contentHtml); + const videoFidsFound = []; + + // Direct player source check + const playerSetupMatch = contentHtml.match(/jwplayer\("[a-zA-Z0-9_-]+"\)\.setup/); + if (playerSetupMatch) { + const sourcesMatchDirect = contentHtml.match(/var sources = (.*?);\s*/s); + if (sourcesMatchDirect) { + try { + const sourcesJsArrayString = sourcesMatchDirect[1]; + const sourcesData = JSON.parse(sourcesJsArrayString); + directSources = sourcesData.map(source => ({ + label: String(source.label || 'Default'), + url: String(source.file) + })).filter(source => !!source.url); + return { + fids: [], + shareKey, + directSources + }; + } catch (e) { + console.log(`Error decoding direct jwplayer sources: ${e.message}`); + } + } + } + + // File list check + const fileElements = $('div.file'); + if (fileElements.length === 0 && !(directSources && directSources.length > 0)) { // Check if directSources also not found + console.log(`No files or direct sources found on FebBox page: ${febboxUrl}`); + // console.timeEnd(timerLabel); + return { fids: [], shareKey, directSources: [] }; // Return empty directSources as well + } + + fileElements.each((index, element) => { + const feEl = $(element); + const dataId = feEl.attr('data-id'); + if (!dataId || !/^\d+$/.test(dataId) || feEl.hasClass('open_dir')) { + return; // Skip folders or invalid IDs + } + videoFidsFound.push(dataId); + }); + + // At the end of the function, before returning, save the parsed data + const parsedResult = { fids: [...new Set(videoFidsFound)], shareKey, directSources }; + await saveToCache(cacheKeyParsed, parsedResult, cacheSubDirParsed); + // console.log(` SAVED PARSED FebBox page data to cache: ${febboxUrl}`); + // profiling disabled (timerLabel removed) + return parsedResult; +}; + +// Function to convert IMDb ID to TMDB ID using TMDB API +// MODIFICATION: Accept expectedType parameter to prioritize correct content type +const convertImdbToTmdb = async (imdbId, regionPreference = null, expectedType = null) => { + console.time(`convertImdbToTmdb_total_${imdbId}`); + if (!imdbId || !imdbId.startsWith('tt')) { + console.log(' Invalid IMDb ID format provided for conversion.', imdbId); + console.timeEnd(`convertImdbToTmdb_total_${imdbId}`); + return null; + } + console.log(` Attempting to convert IMDb ID: ${imdbId} to TMDB ID${expectedType ? ` (expected type: ${expectedType})` : ''}.`); + + const cacheSubDir = 'tmdb_external_id'; + // Include expected type in cache key to avoid conflicts between movie/tv requests + const cacheKey = `imdb-${imdbId}${expectedType ? `-${expectedType}` : ''}.json`; + const cachedData = await getFromCache(cacheKey, cacheSubDir); + + if (cachedData) { + console.log(` IMDb to TMDB conversion found in CACHE for ${imdbId}:`, cachedData); + // Ensure cached data has the expected structure + if (cachedData.tmdbId && cachedData.tmdbType) { + console.timeEnd(`convertImdbToTmdb_total_${imdbId}`); + return cachedData; + } + console.log(' Cached data for IMDb conversion is malformed. Fetching fresh.'); + } + + const TMDB_API_KEY = obtainTmdbKey(); + const findApiUrl = `${TMDB_BASE_URL}/find/${imdbId}?api_key=${TMDB_API_KEY}&external_source=imdb_id`; + console.log(` Fetching from TMDB find API: ${findApiUrl}`); + console.time(`convertImdbToTmdb_apiCall_${imdbId}`); + + try { + const response = await axios.get(findApiUrl, { timeout: 10000 }); + console.timeEnd(`convertImdbToTmdb_apiCall_${imdbId}`); + const findResults = response.data; + + if (findResults) { + let result = null; + + // Context-aware prioritization based on expected type + if (expectedType === 'tv' || expectedType === 'series') { + // For series requests, prioritize TV results + if (findResults.tv_results && findResults.tv_results.length > 0) { + result = { tmdbId: String(findResults.tv_results[0].id), tmdbType: 'tv', title: findResults.tv_results[0].name || findResults.tv_results[0].original_name }; + console.log(` Prioritized TV result for series request: ${result.title}`); + } else if (findResults.movie_results && findResults.movie_results.length > 0) { + result = { tmdbId: String(findResults.movie_results[0].id), tmdbType: 'movie', title: findResults.movie_results[0].title || findResults.movie_results[0].original_title }; + console.log(` Fallback to movie result for series request: ${result.title}`); + } + } else if (expectedType === 'movie') { + // For movie requests, prioritize movie results + if (findResults.movie_results && findResults.movie_results.length > 0) { + result = { tmdbId: String(findResults.movie_results[0].id), tmdbType: 'movie', title: findResults.movie_results[0].title || findResults.movie_results[0].original_title }; + console.log(` Prioritized movie result for movie request: ${result.title}`); + } else if (findResults.tv_results && findResults.tv_results.length > 0) { + result = { tmdbId: String(findResults.tv_results[0].id), tmdbType: 'tv', title: findResults.tv_results[0].name || findResults.tv_results[0].original_name }; + console.log(` Fallback to TV result for movie request: ${result.title}`); + } + } else { + // Default behavior: prioritize movie results, then tv results (backward compatibility) + if (findResults.movie_results && findResults.movie_results.length > 0) { + result = { tmdbId: String(findResults.movie_results[0].id), tmdbType: 'movie', title: findResults.movie_results[0].title || findResults.movie_results[0].original_title }; + } else if (findResults.tv_results && findResults.tv_results.length > 0) { + result = { tmdbId: String(findResults.tv_results[0].id), tmdbType: 'tv', title: findResults.tv_results[0].name || findResults.tv_results[0].original_name }; + } + } + + if (findResults.person_results && findResults.person_results.length > 0 && !result) { + // Could handle other types if necessary, e.g. person, but for streams, movie/tv are key + console.log(` IMDb ID ${imdbId} resolved to a person, not a movie or TV show on TMDB.`); + } else if (!result) { + console.log(` No movie or TV results found on TMDB for IMDb ID ${imdbId}. Response:`, JSON.stringify(findResults).substring(0, 200)); + } + + if (result && result.tmdbId && result.tmdbType) { + console.log(` Successfully converted IMDb ID ${imdbId} to TMDB ${result.tmdbType} ID ${result.tmdbId} (${result.title})`); + await saveToCache(cacheKey, result, cacheSubDir); + console.timeEnd(`convertImdbToTmdb_total_${imdbId}`); + return result; + } else { + console.log(` Could not convert IMDb ID ${imdbId} to a usable TMDB movie/tv ID.`); + } + } + } catch (error) { + if (console.timeEnd && typeof console.timeEnd === 'function') console.timeEnd(`convertImdbToTmdb_apiCall_${imdbId}`); // Ensure timer ends on error + const errorMessage = error.response ? `${error.message} (Status: ${error.response.status})` : error.message; + console.log(` Error during TMDB find API call for IMDb ID ${imdbId}: ${errorMessage}`); + } + console.timeEnd(`convertImdbToTmdb_total_${imdbId}`); + return null; +}; + +// Public API: fetch streams by TMDB reference +const getStreamsFromTmdbId = async (tmdbType, tmdbId, seasonNum = null, episodeNum = null, regionPreference = null, userCookie = null) => { + const mainTimerLabel = `getStreamsFromTmdbId_total_${tmdbType}_${tmdbId}` + (seasonNum ? `_s${seasonNum}` : '') + (episodeNum ? `_e${episodeNum}` : ''); + console.time(mainTimerLabel); + console.log(`Getting streams for TMDB ${tmdbType}/${tmdbId}${seasonNum !== null ? `, Season ${seasonNum}` : ''}${episodeNum !== null ? `, Episode ${episodeNum}` : ''}`); + + // PRIMARY METHOD: Try PStream API first (if enabled) + + try { + // Get TMDB data to extract IMDB ID + const tmdbData = await getTmdbDataForPStream(tmdbType, tmdbId); + if (tmdbData && tmdbData.imdbId) { + console.log(`[PStream Primary] Attempting PStream API for IMDB ID: ${tmdbData.imdbId}`); + + const pstreamStreams = await getStreamsFromPStreamAPI( + tmdbData.imdbId, + tmdbType, + seasonNum, + episodeNum, + regionPreference, + userCookie + ); + + if (pstreamStreams && pstreamStreams.length > 0) { + console.log(`[PStream Primary] SUCCESS: Found ${pstreamStreams.length} streams from PStream API`); + + // Fetch sizes for PStream streams + if (pstreamStreams.length > 0) { + const sizePromises = pstreamStreams.map(async (stream) => { + stream.size = await fetchStreamSize(stream.url); + return stream; + }); + await Promise.all(sizePromises); // removed unused streamsWithSizes var + } + + const sortedStreams = sortStreamsByQuality(pstreamStreams); + console.timeEnd(mainTimerLabel); + return sortedStreams; + } else { + console.log(`[PStream Primary] No streams found from PStream API, falling back to FebBox`); + } + } else { + console.log(`[PStream Primary] Could not get IMDB ID from TMDB data, falling back to FebBox`); + } + } catch (error) { + console.error(`[PStream Primary] Error with PStream API: ${error.message}, falling back to FebBox`); + } + + // FALLBACK METHOD: Use original FebBox/ShowBox logic + console.log(`[Fallback] Using FebBox/ShowBox method`); + const tmdbInfo = await getShowboxUrlFromTmdbInfo(tmdbType, tmdbId, regionPreference); + + // Then, get the ShowBox URL from TMDB ID + if (!tmdbInfo || !tmdbInfo.showboxUrl) { + console.log(`Could not construct ShowBox URL for TMDB ${tmdbType}/${tmdbId}`); + console.timeEnd(mainTimerLabel); + return []; + } + const showboxUrl = tmdbInfo.showboxUrl; + const mediaYear = tmdbInfo.year; // Year from TMDB + + // Check if we have cached FebBox share links to avoid redundant ShowBox requests + let febboxShareInfos = tmdbInfo.febboxShareInfos; + + if (!febboxShareInfos) { + // Only make ShowBox request if FebBox links are not cached + console.log(`No cached FebBox links found, extracting from ShowBox: ${showboxUrl}`); + const showboxScraper = new ShowBoxScraper(regionPreference, userCookie); + febboxShareInfos = await showboxScraper.extractFebboxShareLinks(showboxUrl); + + if (!febboxShareInfos || febboxShareInfos.length === 0) { + console.log(`No FebBox share links found for ${showboxUrl}`); + console.timeEnd(mainTimerLabel); + return []; + } + + // Update cache with FebBox share links to avoid future ShowBox requests + if (process.env.DISABLE_CACHE !== 'true') { + const updatedTmdbInfo = { ...tmdbInfo, febboxShareInfos }; + const urlCacheSubDir = 'showbox_final_url'; + const urlCacheKey = `v3_${tmdbType}_${tmdbId}.json`; + await saveToCache(urlCacheKey, updatedTmdbInfo, urlCacheSubDir); + console.log(`[Final URL Cache] UPDATED with FebBox links for ${tmdbType}/${tmdbId}`); + } + } else { + console.log(`[Final URL Cache] Using cached FebBox links, skipping ShowBox request for ${showboxUrl}`); + } + + // MODIFIED: Process FebBox share links in parallel + const streamPromises = febboxShareInfos.map(async (shareInfo) => { + const streamsFromThisShareInfo = []; + try { + const febboxUrl = shareInfo.febbox_share_url; + let baseStreamTitle = shareInfo.showbox_title || "Unknown Title"; + if (tmdbType === 'movie' && mediaYear) { + baseStreamTitle = `${baseStreamTitle} (${mediaYear})`; + } + + console.log(`Processing FebBox URL: ${febboxUrl} (${baseStreamTitle})`); + + if (tmdbType === 'tv' && seasonNum !== null) { + // Call refactored processShowWithSeasonsEpisodes (which now returns streams) + const tvStreams = await processShowWithSeasonsEpisodes(febboxUrl, baseStreamTitle, seasonNum, episodeNum, true, regionPreference, userCookie); + streamsFromThisShareInfo.push(...tvStreams); + } else { + // Handle movies or TV shows without season/episode specified + const { fids, shareKey, directSources } = await extractFidsFromFebboxPage(febboxUrl, regionPreference, userCookie); + + if (directSources && directSources.length > 0) { + for (const source of directSources) { + const streamTitle = `${baseStreamTitle} - ${source.label}`; + let key5FromDirectSource = null; + try { + const urlParams = new URLSearchParams(new URL(source.url).search); + if (urlParams.has('KEY5')) { + key5FromDirectSource = urlParams.get('KEY5'); + } + } catch (e) { /* ignore if URL parsing fails */ } + streamsFromThisShareInfo.push({ + title: streamTitle, + url: source.url, + quality: parseQualityFromLabel(source.label), + codecs: extractCodecDetails(key5FromDirectSource || streamTitle) + }); + } + // If direct sources are found, original code used 'continue', + // effectively skipping FID processing for this shareInfo. + // This behavior is maintained as FID processing is in the 'else if' block. + } else if (fids.length > 0 && shareKey) { // Only process FIDs if no directSources were found + const fidPromises = fids.map(fid => fetchSourcesForSingleFid(fid, shareKey, regionPreference, userCookie)); + const fidSourcesArray = await Promise.all(fidPromises); + + for (const sources of fidSourcesArray) { + if (!sources || !Array.isArray(sources)) { + console.log(` Warning: Invalid sources data received: ${typeof sources}`); + continue; + } + + for (const source of sources) { + if (!source || !source.url || !source.label) { + console.log(` Warning: Invalid source object: ${JSON.stringify(source)}`); + continue; + } + + const streamTitle = `${baseStreamTitle} - ${source.label}`; + streamsFromThisShareInfo.push({ + title: streamTitle, + url: source.url, + quality: parseQualityFromLabel(source.label), + codecs: extractCodecDetails(source.detailedFilename || streamTitle) + }); + } + } + } else if (!directSources || directSources.length === 0) { + console.log(`No FIDs or share key found, and no direct sources for ${febboxUrl}`); + } + } + } catch (error) { + console.error(`Error processing share info for ${shareInfo.febbox_share_url}: ${error.message}`); + } + return streamsFromThisShareInfo; + }); + + const nestedStreams = await Promise.all(streamPromises); + const allStreams = nestedStreams.flat(); + + // Fetch sizes for all streams concurrently + if (allStreams.length > 0) { + console.time(`getStreamsFromTmdbId_fetchStreamSizes_${tmdbType}_${tmdbId}`); + const sizePromises = allStreams.map(async (stream) => { + stream.size = await fetchStreamSize(stream.url); + return stream; + }); + await Promise.all(sizePromises); // removed unused streamsWithSizes var + console.timeEnd(`getStreamsFromTmdbId_fetchStreamSizes_${tmdbType}_${tmdbId}`); + } + + // Sort streams by quality before returning + const sortedStreams = sortStreamsByQuality(allStreams); + + // Filter out 360p and 480p streams + const streamsToShowBoxFiltered = sortedStreams.filter(stream => { + const quality = stream.quality ? String(stream.quality).toLowerCase() : ''; + if (quality === '360p' || quality === '480p') { + console.log(` Filtering out potential ShowBox low-quality stream: ${stream.title} (${stream.quality})`); + return false; + } + return true; + }); + + // Apply size limit if not using a personal cookie + let finalFilteredStreams = streamsToShowBoxFiltered; + if (!userCookie && !global.currentRequestUserCookie) { + console.log('[SizeLimit] No personal cookie detected. Applying 9GB size limit to ShowBox streams.'); + const NINE_GB_IN_BYTES = 9 * 1024 * 1024 * 1024; + finalFilteredStreams = streamsToShowBoxFiltered.filter(stream => { + const sizeInBytes = parseSizeToBytes(stream.size); + if (sizeInBytes >= NINE_GB_IN_BYTES) { + console.log(`[SizeLimit] Filtering out ShowBox stream due to size (${stream.size || 'Unknown size'}): ${stream.title}`); + return false; + } + return true; + }); + } + + if (finalFilteredStreams.length > 0) { + console.log(`Found ${finalFilteredStreams.length} streams (sorted, ShowBox-low-quality-filtered, and size-limited if applicable):`); + finalFilteredStreams.slice(0, 5).forEach((stream, i) => { + console.log(` ${i + 1}. ${stream.quality} (${stream.size || 'Unknown size'}) [${(stream.codecs || []).join(', ') || 'No codec info'}]: ${stream.title}`); + }); + if (finalFilteredStreams.length > 5) { + console.log(` ... and ${finalFilteredStreams.length - 5} more streams`); + } + } + console.timeEnd(mainTimerLabel); + return finalFilteredStreams; +}; + +// Function to handle TV shows with seasons and episodes +// MODIFICATION: Accept scraperApiKey -> MODIFICATION: Remove scraperApiKey +// New parameter: resolveFids, defaults to true. If false, skips fetching sources for FIDs. +const processShowWithSeasonsEpisodes = async (febboxUrl, showboxTitle, seasonNum, episodeNum, resolveFids = true, regionPreference = null, userCookie = null, retryAttempt = 0) => { + const processTimerLabel = `processShowWithSeasonsEpisodes_total_s${seasonNum}` + (episodeNum ? `_e${episodeNum}` : '_all') + (resolveFids ? '_resolve' : '_noresolve') + (retryAttempt > 0 ? `_retry${retryAttempt}` : ''); + console.time(processTimerLabel); + console.log(`Processing TV Show: ${showboxTitle}, Season: ${seasonNum}, Episode: ${episodeNum !== null ? episodeNum : 'all'}${resolveFids ? '' : ' (FIDs not resolved)'}${retryAttempt > 0 ? ` (Retry attempt ${retryAttempt})` : ''}`); + + const streamsForThisCall = []; // Initialize local array to store streams for this call + let selectedEpisode = null; // Ensure selectedEpisode is declared here + + // Cache for the main FebBox page + const cacheSubDirMain = 'febbox_page_html'; + const urlHash = crypto.createHash('md5').update(febboxUrl).digest('hex'); + const cacheKeyMain = `${urlHash}.html`; + + // Try to get the main page from cache first (skip cache on retry) + let contentHtml = retryAttempt > 0 ? null : await getFromCache(cacheKeyMain, cacheSubDirMain); + + if (!contentHtml) { + // If not cached, fetch the HTML content + const fetchMainPageTimer = `processShowWithSeasonsEpisodes_fetchMainPage_s${seasonNum}`; + console.time(fetchMainPageTimer); + + const cookieForRequest = await getCookieForRequest(regionPreference, userCookie); + + const finalFebboxUrl = febboxUrl; + const axiosConfigMainPage = { + headers: { 'Cookie': `ui=${cookieForRequest}` }, + timeout: 20000 + }; + + console.log(`Fetching main FebBox page ${febboxUrl} directly${retryAttempt > 0 ? ' (forced refresh for missing season)' : ''}`); + + try { + const response = await axios.get(finalFebboxUrl, axiosConfigMainPage); + contentHtml = response.data; + if (typeof contentHtml === 'string' && contentHtml.length > 0) { + await saveToCache(cacheKeyMain, contentHtml, cacheSubDirMain); + } + console.timeEnd(fetchMainPageTimer); + } catch (error) { + console.log(`Failed to fetch HTML content from ${febboxUrl}: ${error.message}`); + console.timeEnd(fetchMainPageTimer); + console.timeEnd(processTimerLabel); + return; + } + } + + if (!contentHtml) { + console.log(`No HTML content available for ${febboxUrl}`); + console.timeEnd(processTimerLabel); + return; + } + + // Parse the HTML to find folders (seasons) + const $ = cheerio.load(contentHtml); + const shareKey = contentHtml.match(/(?:var share_key\s*=|share_key:\s*|shareid=)"?([a-zA-Z0-9-]+)"?/)?.[1]; + + if (!shareKey) { + console.log(`Could not extract share_key from ${febboxUrl}`); + console.timeEnd(processTimerLabel); + return; + } + + const folders = []; + const fileElements = $('div.file.open_dir'); + + fileElements.each((index, element) => { + const feEl = $(element); + const dataId = feEl.attr('data-id'); + if (!dataId || !/^\d+$/.test(dataId)) { + return; // Skip if data-id is missing or not a number + } + + const folderNameEl = feEl.find('p.file_name'); + const folderName = folderNameEl.length ? folderNameEl.text().trim() : feEl.attr('data-path') || `Folder_${dataId}`; + + // Extract season number from folder name for more accurate matching + let extractedSeasonNum = null; + const folderNameLower = folderName.toLowerCase(); + + // Try more specific season number extraction patterns + const seasonPatterns = [ + /season\s+(\d+)/i, // Season 1 + /s(\d+)/i, // S1 + /season(\d+)/i // Season1 + ]; + + for (const pattern of seasonPatterns) { + const match = folderNameLower.match(pattern); + if (match && match[1]) { + extractedSeasonNum = parseInt(match[1], 10); + break; + } + } + + // If no specific pattern matched, look for any standalone numbers + if (extractedSeasonNum === null) { + const numMatches = folderNameLower.match(/\b(\d+)\b/g); + if (numMatches && numMatches.length === 1) { // Only if exactly one number is found + extractedSeasonNum = parseInt(numMatches[0], 10); + } + } + + folders.push({ + id: dataId, + name: folderName, + extractedSeasonNum: extractedSeasonNum + }); + }); + + if (folders.length === 0) { + console.log(`No season folders found on ${febboxUrl}`); + // It might be directly files, so try the original logic as fallback + console.time(`processShowWithSeasonsEpisodes_fallbackDirect_s${seasonNum}`); + const { fids, directSources } = await extractFidsFromFebboxPage(febboxUrl, regionPreference, userCookie); + console.timeEnd(`processShowWithSeasonsEpisodes_fallbackDirect_s${seasonNum}`); + + if (directSources && directSources.length > 0) { + for (const source of directSources) { + const streamTitle = `${showboxTitle} - ${source.label}`; + streamsForThisCall.push({ // MODIFIED: Push to streamsForThisCall + title: streamTitle, + url: source.url, + quality: parseQualityFromLabel(source.label), + codecs: extractCodecDetails(source.detailedFilename || streamTitle) + }); + } + console.timeEnd(processTimerLabel); + return streamsForThisCall; + } + + if (fids.length > 0) { + console.time(`processShowWithSeasonsEpisodes_fallbackFids_s${seasonNum}_concurrent`); + const fallbackFidPromises = fids.map(fid => fetchSourcesForSingleFid(fid, shareKey, regionPreference, userCookie)); + const fallbackFidSourcesArray = await Promise.all(fallbackFidPromises); + console.timeEnd(`processShowWithSeasonsEpisodes_fallbackFids_s${seasonNum}_concurrent`); + + for (const sources of fallbackFidSourcesArray) { + for (const source of sources) { + const streamTitle = `${showboxTitle} - ${source.label}`; + streamsForThisCall.push({ // MODIFIED: Push to streamsForThisCall + title: streamTitle, + url: source.url, + quality: parseQualityFromLabel(source.label), + codecs: extractCodecDetails(source.detailedFilename || streamTitle) + }); + } + } + } + console.timeEnd(processTimerLabel); + return streamsForThisCall; + } + + console.log(`Found ${folders.length} season folders:`, folders.map(f => + `"${f.name}" (ID: ${f.id}, Extracted Season: ${f.extractedSeasonNum !== null ? f.extractedSeasonNum : 'None'})` + ).join(', ')); + + // Find matching season folder + let selectedFolder = null; + + // First, look for exact season number match using extracted season numbers + for (const folder of folders) { + if (folder.extractedSeasonNum === seasonNum) { + selectedFolder = folder; + console.log(`Found exact season match: "${folder.name}" with extracted season number ${folder.extractedSeasonNum}`); + break; + } + } + + // If no exact match by extracted number, try the text pattern matches (legacy approach) + if (!selectedFolder) { + for (const folder of folders) { + const folderNameLower = folder.name.toLowerCase(); + + // More precise matching patterns to avoid partial matches + if ( + folderNameLower === `season ${seasonNum}` || + folderNameLower === `s${seasonNum}` || + folderNameLower === `season${seasonNum}` || + // Match with word boundaries to avoid Season 1 matching Season 10 + folderNameLower.match(new RegExp(`\\bseason\\s+${seasonNum}\\b`)) || + folderNameLower.match(new RegExp(`\\bs${seasonNum}\\b`)) + ) { + selectedFolder = folder; + console.log(`Found season match via text pattern: "${folder.name}"`); + break; + } + } + } + + // If still no match, sort folders by extracted season number and try index-based approach + if (!selectedFolder && seasonNum > 0 && seasonNum <= folders.length) { + // First try to sort by extracted season number (if available) + const sortedFolders = [...folders].sort((a, b) => { + // If both have extracted season numbers, compare them + if (a.extractedSeasonNum !== null && b.extractedSeasonNum !== null) { + return a.extractedSeasonNum - b.extractedSeasonNum; + } + // If only one has extracted season number, put it first + if (a.extractedSeasonNum !== null) return -1; + if (b.extractedSeasonNum !== null) return 1; + // Otherwise, keep original order + return 0; + }); + + // Log the sorted folders for debugging + console.log(`Sorted folders by season number:`, sortedFolders.map(f => + `"${f.name}" (ID: ${f.id}, Extracted Season: ${f.extractedSeasonNum !== null ? f.extractedSeasonNum : 'None'})` + ).join(', ')); + + // Check if any folder has an extracted season number matching the requested season + const exactExtractedMatch = sortedFolders.find(f => f.extractedSeasonNum === seasonNum); + if (exactExtractedMatch) { + selectedFolder = exactExtractedMatch; + console.log(`Found exact season match in sorted folders: "${selectedFolder.name}" with season ${selectedFolder.extractedSeasonNum}`); + } + // Otherwise, if we have folders with extracted season numbers, use them for mapping + else if (sortedFolders.some(f => f.extractedSeasonNum !== null)) { + // If we have some season numbers, try to find the appropriate folder + // This approach is better than using index because folders might be out of order + const validFolders = sortedFolders.filter(f => f.extractedSeasonNum !== null); + if (seasonNum <= validFolders.length) { + selectedFolder = validFolders[seasonNum - 1]; + console.log(`Using sorted folder by extracted number index: "${selectedFolder.name}" at position ${seasonNum}`); + } + } + // Last resort: use index-based approach on original folder order + else { + selectedFolder = folders[seasonNum - 1]; + console.log(`Using original folder order index: "${selectedFolder.name}" at position ${seasonNum}`); + } + } + + if (!selectedFolder) { + // If season not found and this is the first attempt, try refreshing the cache + if (retryAttempt === 0) { + console.log(`Season ${seasonNum} not found in cached data. Attempting fresh fetch...`); + console.timeEnd(processTimerLabel); + // Recursive call with retry attempt to force fresh fetch + return await processShowWithSeasonsEpisodes(febboxUrl, showboxTitle, seasonNum, episodeNum, resolveFids, regionPreference, userCookie, 1); + } else { + console.log(`Could not find season ${seasonNum} folder in ${febboxUrl} even after fresh fetch. Aborting.`); + console.timeEnd(processTimerLabel); + return streamsForThisCall; + } + } + + console.log(`Selected season folder: ${selectedFolder.name} (ID: ${selectedFolder.id})`); + + // Cache for season folder content + const cacheSubDirFolderHtml = 'febbox_season_folders'; + const cacheSubDirFolderParsed = 'febbox_parsed_season_folders'; + const cacheKeyFolderHtml = `share-${shareKey}_folder-${selectedFolder.id}.html`; + const cacheKeyFolderParsed = `share-${shareKey}_folder-${selectedFolder.id}_parsed.json`; + + let folderHtml = null; + const episodeDetails = []; // Declare episodeDetails here, initialized as an empty array + const episodeFids = []; // Declare episodeFids here, initialized as an empty array + + const cachedParsedEpisodeList = await getFromCache(cacheKeyFolderParsed, cacheSubDirFolderParsed); + if (cachedParsedEpisodeList && Array.isArray(cachedParsedEpisodeList)) { + console.log(` CACHE HIT for parsed episode list: Season ${seasonNum}, Folder ${selectedFolder.id}`); + episodeDetails.push(...cachedParsedEpisodeList); // Populate if cache hit + } else { + // Parsed list not in cache, so we need to process HTML + // console.log(` CACHE MISS for parsed episode list: Season ${seasonNum}, Folder ${selectedFolder.id}`); + folderHtml = await getFromCache(cacheKeyFolderHtml, cacheSubDirFolderHtml); // Assign to the higher-scoped folderHtml + + if (!folderHtml) { + const fetchFolderTimer = `processShowWithSeasonsEpisodes_fetchFolder_s${seasonNum}_id${selectedFolder.id}`; + console.time(fetchFolderTimer); + try { + const targetFolderListUrl = `${FEBBOX_FILE_SHARE_LIST_URL}?share_key=${shareKey}&parent_id=${selectedFolder.id}&is_html=1&pwd=`; + + const cookieForRequestFolder = await getCookieForRequest(regionPreference, userCookie); // Simplified cookie call + const finalFolderUrl = targetFolderListUrl; + const axiosConfigFolder = { + headers: { + 'Cookie': `ui=${cookieForRequestFolder}`, + 'Referer': febboxUrl, + 'X-Requested-With': 'XMLHttpRequest' + }, + timeout: 20000 + }; + + console.log(`Fetching FebBox folder ${targetFolderListUrl} directly`); + + const folderResponse = await axios.get(finalFolderUrl, axiosConfigFolder); + console.log(` FebBox folder list response status: ${folderResponse.status}`); + console.log(` FebBox folder list response content-type: ${folderResponse.headers['content-type']}`); + // Log the beginning of the data to inspect its structure + const responseDataPreview = (typeof folderResponse.data === 'string') + ? folderResponse.data.substring(0, 500) + : JSON.stringify(folderResponse.data).substring(0, 500); + console.log(` FebBox folder list response data (preview): ${responseDataPreview}`); + + if (folderResponse.data && typeof folderResponse.data === 'object' && folderResponse.data.html) { + folderHtml = folderResponse.data.html; + console.log(` Successfully extracted HTML from FebBox folder list JSON response.`); + } else if (typeof folderResponse.data === 'string') { + folderHtml = folderResponse.data; + console.log(` Received direct HTML string from FebBox folder list response.`); + } else { + console.log(` Invalid or unexpected response format from FebBox folder API for ${selectedFolder.id}. Data: ${JSON.stringify(folderResponse.data)}`); + // folderHtml remains null + } + + if (folderHtml && folderHtml.trim().length > 0) { // Also check if html is not just whitespace + await saveToCache(cacheKeyFolderHtml, folderHtml, cacheSubDirFolderHtml); + console.log(` Cached FebBox folder HTML for ${selectedFolder.id}`); + } else { + console.log(` Folder HTML from FebBox was empty or null for ${selectedFolder.id}. Not caching.`); + folderHtml = null; // Ensure it's explicitly null if empty + } + console.timeEnd(fetchFolderTimer); + } catch (error) { + console.error(` ERROR fetching FebBox folder content for ${selectedFolder.id}: ${error.message}`); + if (error.response) { + console.error(` FebBox Error Status: ${error.response.status}`); + console.error(` FebBox Error Data: ${JSON.stringify(error.response.data)}`); + } + // console.timeEnd(fetchFolderTimer); // fetchFolderTimer might not be defined if cache hit for HTML but miss for parsed + console.timeEnd(processTimerLabel); // End outer timer + return streamsForThisCall; // Return empty streams array if fetching folder content fails + } + } + } + + // If episodeDetails is populated from cache, folderHtml might be null. That's okay. + // If episodeDetails is still empty, we must have folderHtml to parse. + if (episodeDetails.length === 0) { // Only proceed if we didn't get data from parsed cache + if (!folderHtml) { // If still no folderHtml (e.g. HTML cache miss and fetch fail), then error out + console.log(`No folder HTML content available (and no cached parsed list) for folder ${selectedFolder.id}`); + console.timeEnd(processTimerLabel); + return streamsForThisCall; + } + + // Parse the folderHtml since we didn't have a cached parsed list + const $folder = cheerio.load(folderHtml); + $folder('div.file').each((index, element) => { + const feEl = $folder(element); + const dataId = feEl.attr('data-id'); + if (!dataId || !/^\d+$/.test(dataId) || feEl.hasClass('open_dir')) { + return; + } + + const fileNameEl = feEl.find('p.file_name'); + const fileName = fileNameEl.length ? fileNameEl.text().trim() : `File_${dataId}`; + + episodeDetails.push({ + fid: dataId, + name: fileName, + episodeNum: getEpisodeNumberFromName(fileName) + }); + }); + + // After parsing, save the extracted episodeDetails to its cache + // This will also save an empty array if parsing yields no episodes, preventing re-parsing of empty folders + await saveToCache(cacheKeyFolderParsed, episodeDetails, cacheSubDirFolderParsed); + if (episodeDetails.length > 0) { + // console.log(` SAVED PARSED episode list to cache: Season ${seasonNum}, Folder ${selectedFolder.id}`); + } + } + + // Sort episodes by their number (whether from cache or freshly parsed) + // Ensure episodeDetails is sorted if populated + if (episodeDetails.length > 0) { + episodeDetails.sort((a, b) => a.episodeNum - b.episodeNum); + } + + // If episode number specified, find matching episode + if (episodeNum !== null) { + // First try exact episode number match + for (const episode of episodeDetails) { + if (episode.episodeNum === episodeNum) { + selectedEpisode = episode; + break; + } + } + + // If no match by number, try index-based (episode 1 = first file) + if (!selectedEpisode && episodeNum > 0 && episodeNum <= episodeDetails.length) { + selectedEpisode = episodeDetails[episodeNum - 1]; + } + + if (!selectedEpisode) { + console.log(`Could not find episode ${episodeNum} in season folder ${selectedFolder.name}`); + console.timeEnd(processTimerLabel); + return streamsForThisCall; + } + + console.log(`Found episode: ${selectedEpisode.name} (FID: ${selectedEpisode.fid})`); + episodeFids.push(selectedEpisode.fid); // Now episodeFids is already declared + } else { + // If no episode specified, process all episodes + // Ensure episodeDetails is populated before mapping + if (episodeDetails.length > 0) { + episodeFids.push(...episodeDetails.map(ep => ep.fid)); // episodeFids is already declared + } else { + console.log(` No episode details found for folder ${selectedFolder.name} to extract FIDs for all episodes.`); + } + } + + // Get video sources for each episode FID + if (resolveFids && episodeFids.length > 0) { // Check resolveFids flag here + const episodeTimerLabel = `processShowWithSeasonsEpisodes_fetchEpisodeSources_s${seasonNum}` + (episodeNum ? `_e${episodeNum}` : '_allEp_concurrent'); + console.time(episodeTimerLabel); + const episodeSourcePromises = episodeFids.map(fid => + fetchSourcesForSingleFid(fid, shareKey, regionPreference, userCookie) + .then(sources => ({ fid, sources })) + ); + const episodeSourcesResults = await Promise.all(episodeSourcePromises); + console.timeEnd(episodeTimerLabel); + + for (const result of episodeSourcesResults) { + // Check if result is defined and has sources + if (result && result.fid && result.sources && Array.isArray(result.sources)) { + const { fid, sources } = result; + + for (const source of sources) { + const episodeDetail = episodeDetails.find(ep => ep.fid === fid); + const episodeName = episodeDetail ? episodeDetail.name : ''; + + const streamTitle = `${showboxTitle} - S${seasonNum}${episodeNum && selectedEpisode && fid === selectedEpisode.fid ? `E${episodeNum}` : (episodeDetail ? `E${episodeDetail.episodeNum}` : '')} - ${episodeName} - ${source.label}`; + streamsForThisCall.push({ // MODIFIED: Push to streamsForThisCall + title: streamTitle, + url: source.url, + quality: parseQualityFromLabel(source.label), + codecs: extractCodecDetails(source.detailedFilename || streamTitle) + }); + } + } else { + console.log(` Warning: Invalid result structure for an episode source: ${JSON.stringify(result)}`); + } + } + } else if (!resolveFids && episodeFids.length > 0) { + console.log(` Skipping FID resolution for ${episodeFids.length} episodes in S${seasonNum} as per request.`); + } + console.timeEnd(processTimerLabel); + return streamsForThisCall; // MODIFIED: Return the collected streams +}; + +// Helper function to get episode number from filename +const getEpisodeNumberFromName = (name) => { + const nameLower = name.toLowerCase(); + + // Common TV episode naming patterns + const patterns = [ + /[._\s-]s\d{1,2}[._\s-]?e(\d{1,3})[._\s-]?/, // S01E01, s1e1 + /[._\s-]e[cp]?[._\s-]?(\d{1,3})[._\s-]?/, // E01, EP01 + /episode[._\s-]?(\d{1,3})/, // Episode 1 + /part[._\s-]?(\d{1,3})/, // Part 1 + /ep[._\s-]?(\d{1,3})/, // Ep 1 + /pt[._\s-]?(\d{1,3})/ // Pt 1 + ]; + + for (const pattern of patterns) { + const match = nameLower.match(pattern); + if (match && match[1]) { + return parseInt(match[1], 10); + } + } + + // Try to find standalone numbers that might be episode numbers + const simpleNumMatches = nameLower.match(/(? 0 && num < 200 && + !((simpleNumMatches[0] + "p") === nameLower) && + !nameLower.includes("x" + simpleNumMatches[0]) && + !nameLower.includes("h" + simpleNumMatches[0]) && + (nameLower.split(simpleNumMatches[0]).length - 1 <= 1 || !["1", "2"].includes(simpleNumMatches[0])) + ) { + return num; + } + } + + // Default to infinity (for sorting purposes) + return Infinity; +}; + +// Helper function to parse quality from label +const parseQualityFromLabel = (label) => { + if (!label) return "ORG"; + + const labelLower = String(label).toLowerCase(); + + if (labelLower.includes('1080p') || labelLower.includes('1080')) { + return "1080p"; + } else if (labelLower.includes('720p') || labelLower.includes('720')) { + return "720p"; + } else if (labelLower.includes('480p') || labelLower.includes('480')) { + return "480p"; + } else if (labelLower.includes('360p') || labelLower.includes('360')) { + return "360p"; + } else if (labelLower.includes('2160p') || labelLower.includes('2160') || + labelLower.includes('4k') || labelLower.includes('uhd')) { + return "2160p"; + } else if (labelLower.includes('hd')) { + return "720p"; // Assuming HD is 720p + } else if (labelLower.includes('sd')) { + return "480p"; // Assuming SD is 480p + } + + // Use ORG (original) label for unknown quality + return "ORG"; +}; + +// Helper function to parse size string to bytes +const parseSizeToBytes = (sizeString) => { + if (!sizeString || typeof sizeString !== 'string') return Number.MAX_SAFE_INTEGER; + + const sizeLower = sizeString.toLowerCase(); + + if (sizeLower.includes('unknown') || sizeLower.includes('n/a')) { + return Number.MAX_SAFE_INTEGER; // Sort unknown/NA sizes last + } + + const units = { + gb: 1024 * 1024 * 1024, + mb: 1024 * 1024, + kb: 1024, + b: 1 + }; + + const match = sizeString.match(/([\d.]+)\s*(gb|mb|kb|b)/i); + if (match && match[1] && match[2]) { + const value = parseFloat(match[1]); + const unit = match[2].toLowerCase(); + if (!isNaN(value) && units[unit]) { + return Math.floor(value * units[unit]); + } + } + return Number.MAX_SAFE_INTEGER; // Fallback for unparsed strings +}; + +// Helper function to extract codec details from a string (filename/label) +const extractCodecDetails = (text) => { + if (!text || typeof text !== 'string') return []; + const details = new Set(); + const lowerText = text.toLowerCase(); + + // Video Codecs & Technologies + if (lowerText.includes('dolby vision') || lowerText.includes('dovi') || lowerText.includes('.dv.')) details.add('DV'); + if (lowerText.includes('hdr10+') || lowerText.includes('hdr10plus')) details.add('HDR10+'); + else if (lowerText.includes('hdr')) details.add('HDR'); // General HDR if not HDR10+ + if (lowerText.includes('sdr')) details.add('SDR'); + + if (lowerText.includes('av1')) details.add('AV1'); + else if (lowerText.includes('h265') || lowerText.includes('x265') || lowerText.includes('hevc')) details.add('H.265'); + else if (lowerText.includes('h264') || lowerText.includes('x264') || lowerText.includes('avc')) details.add('H.264'); + + // Audio Codecs + if (lowerText.includes('atmos')) details.add('Atmos'); + if (lowerText.includes('truehd') || lowerText.includes('true-hd')) details.add('TrueHD'); + if (lowerText.includes('dts-hd ma') || lowerText.includes('dtshdma') || lowerText.includes('dts-hdhr')) details.add('DTS-HD MA'); + else if (lowerText.includes('dts-hd')) details.add('DTS-HD'); // General DTS-HD if not MA/HR + else if (lowerText.includes('dts') && !lowerText.includes('dts-hd')) details.add('DTS'); // Plain DTS + + if (lowerText.includes('eac3') || lowerText.includes('e-ac-3') || lowerText.includes('dd+') || lowerText.includes('ddplus')) details.add('EAC3'); + else if (lowerText.includes('ac3') || (lowerText.includes('dd') && !lowerText.includes('dd+') && !lowerText.includes('ddp'))) details.add('AC3'); // Plain AC3/DD + + if (lowerText.includes('aac')) details.add('AAC'); + if (lowerText.includes('opus')) details.add('Opus'); + if (lowerText.includes('mp3')) details.add('MP3'); + + // Bit depth (less common but useful) + if (lowerText.includes('10bit') || lowerText.includes('10-bit')) details.add('10-bit'); + else if (lowerText.includes('8bit') || lowerText.includes('8-bit')) details.add('8-bit'); + + return Array.from(details); +}; + +// Utility function to sort streams by quality in order of resolution +const sortStreamsByQuality = (streams) => { + // Quality ranking for output ordering + const qualityOrder = { + "ORG": 1, // ORG will show at the top (since it's at the bottom of the list) + "2160p": 2, + "1080p": 3, + "720p": 4, + "480p": 5, + "360p": 6 // 360p will show at the bottom + }; + + // Provider priority ordering (lower number = higher priority) + const providerSortKeys = { + 'ShowBox': 1, + 'Xprime.tv': 2, + 'HollyMovieHD': 3, + 'Soaper TV': 4, + // Default for unknown providers + default: 99 + }; + + return [...streams].sort((a, b) => { + const qualityA = a.quality || "ORG"; + const qualityB = b.quality || "ORG"; + + const orderA = qualityOrder[qualityA] || 10; + const orderB = qualityOrder[qualityB] || 10; + + // First, compare by quality order + if (orderA !== orderB) { + return orderA - orderB; + } + + // If qualities are the same, compare by size (descending - larger sizes first means earlier in array) + const sizeAInBytes = parseSizeToBytes(a.size); + const sizeBInBytes = parseSizeToBytes(b.size); + + if (sizeAInBytes !== sizeBInBytes) { + return sizeBInBytes - sizeAInBytes; + } + + // If quality AND size are the same, compare by provider + const providerA = a.provider || 'default'; + const providerB = b.provider || 'default'; + + const providerOrderA = providerSortKeys[providerA] || providerSortKeys.default; + const providerOrderB = providerSortKeys[providerB] || providerSortKeys.default; + + return providerOrderA - providerOrderB; + }); +} + +// Initialize the cache directory +ensureCacheDir(CACHE_DIR).catch(console.error); + +// Fallback cookie loader removed (legacy loadFallbackCookies was deprecated). +// No-op now: runtime only uses user-supplied cookies from config/override. + +// PStream API Configuration +const PSTREAM_API_BASE_URL = 'https://fed-api.pstream.mov'; +const PSTREAM_ACCEPT_HEADER = 'pstream.org'; + +// Region mapping for PStream API (FebBox regions -> PStream regions) +const PSTREAM_REGION_MAPPING = { + // US Regions + 'USA7': 'East', + 'USA6': 'West', + 'USA5': 'East', + 'USA4': 'West', + 'USA3': 'West', + 'USA2': 'West', + 'USA1': 'West', + + // European Regions + 'UK3': 'Europe', + 'FR1': 'Europe', + 'DE2': 'Europe', + 'EU1': 'Europe', + 'EU2': 'Europe', + + // Asian Regions + 'HK1': 'Asia', + 'IN1': 'Asia', + 'SZ': 'Asia', + 'ASIA1': 'Asia', + 'ASIA2': 'Asia', + + // Other Regions + 'CA1': 'East', // Canada maps to East (US East) + 'AU1': 'Asia' // Australia maps to Asia +}; + +// Function to map FebBox region to PStream region +const mapRegionForPStream = (febboxRegion) => { + if (!febboxRegion) { + return PSTREAM_REGION_MAPPING[DEFAULT_OSS_REGION] || 'East'; + } + + const mappedRegion = PSTREAM_REGION_MAPPING[febboxRegion]; + if (mappedRegion) { + return mappedRegion; + } + + // Fallback to East if region not found + console.log(`[PStream] Region ${febboxRegion} not found in mapping, using East as fallback`); + return 'East'; +}; + +// Function to fetch streams from PStream API (new primary method) +const getStreamsFromPStreamAPI = async (imdbId, tmdbType, seasonNum = null, episodeNum = null, regionPreference = null, userCookie = null) => { + const timerLabel = `getStreamsFromPStreamAPI_${imdbId}_${tmdbType}` + (seasonNum ? `_s${seasonNum}` : '') + (episodeNum ? `_e${episodeNum}` : ''); + console.time(timerLabel); + + try { + // Build the PStream API URL + let apiUrl; + if (tmdbType === 'movie') { + apiUrl = `${PSTREAM_API_BASE_URL}/movie/${imdbId}`; + } else if (tmdbType === 'tv' && seasonNum !== null && episodeNum !== null) { + apiUrl = `${PSTREAM_API_BASE_URL}/tv/${imdbId}/${seasonNum}/${episodeNum}`; + } else { + console.log(`[PStream] Invalid parameters for ${tmdbType}: season=${seasonNum}, episode=${episodeNum}`); + return []; + } + + console.log(`[PStream] Making request to: ${apiUrl}`); + + // Get the region for PStream API + const pstreamRegion = mapRegionForPStream(regionPreference || global.lastRequestedRegion?.used); + + // Prepare headers for PStream API + const headers = { + 'accept': PSTREAM_ACCEPT_HEADER, + 'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8', + 'origin': 'https://pstream.mov', + 'referer': `https://pstream.mov/media/tmdb-${tmdbType}-${imdbId}`, + 'region': pstreamRegion, + 'sec-ch-ua': '"Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"macOS"', + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-site', + 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' + }; + + // Add ui-token if available + const uiToken = await getUiTokenForPStream(userCookie); + if (uiToken) { + headers['ui-token'] = uiToken; + console.log(`[PStream] Using ui-token for authentication`); + } else { + console.log(`[PStream] No ui-token available, making unauthenticated request`); + } + + // Check if proxy should be used + const useProxy = process.env.SHOWBOX_PROXY_URL_VALUE && process.env.SHOWBOX_PROXY_URL_VALUE.trim() !== ''; + let finalApiUrl = apiUrl; + + if (useProxy) { + finalApiUrl = `${process.env.SHOWBOX_PROXY_URL_VALUE}${encodeURIComponent(apiUrl)}`; + console.log(`[PStream] Using proxy for request: ${finalApiUrl}`); + } else { + console.log(`[PStream] Making direct request (no proxy configured)`); + } + + // Make the request + const response = await axios.get(finalApiUrl, { + headers: headers, + timeout: 30000 + }); + + if (!response.data) { + console.log(`[PStream] No data received from API`); + return []; + } + + console.log(`[PStream] Response received, processing streams...`); + + // Process the PStream API response + const streams = processPStreamResponse(response.data, tmdbType, seasonNum, episodeNum); + + console.timeEnd(timerLabel); + console.log(`[PStream] Found ${streams.length} streams`); + return streams; + + } catch (error) { + console.error(`[PStream] Error fetching streams: ${error.message}`); + if (error.response) { + console.error(`[PStream] Status: ${error.response.status}, Data: ${JSON.stringify(error.response.data).substring(0, 200)}`); + } + console.timeEnd(timerLabel); + return []; + } +}; + +// Function to process PStream API response and convert to standard stream format +const processPStreamResponse = (apiResponse, tmdbType, seasonNum, episodeNum) => { + const streams = []; + + try { + // Log the actual response structure for debugging + console.log(`[PStream] API Response structure:`, JSON.stringify(apiResponse, null, 2).substring(0, 1000)); + console.log(`[PStream] API Response type:`, typeof apiResponse); + console.log(`[PStream] API Response keys:`, apiResponse ? Object.keys(apiResponse) : 'null/undefined'); + + // Check if response has streams object (PStream API format) + if (apiResponse && apiResponse.streams && typeof apiResponse.streams === 'object') { + console.log(`[PStream] Found streams object with ${Object.keys(apiResponse.streams).length} quality levels`); + + // Process streams object format + for (const [quality, url] of Object.entries(apiResponse.streams)) { + if (url && typeof url === 'string') { + // Use "Auto" for name and actual filename for title + const streamName = "Auto"; + const streamTitle = apiResponse.name || `${tmdbType === 'movie' ? 'PStream' : `PStream - S${seasonNum}E${episodeNum}`} - ${quality}`; + + streams.push({ + name: streamName, + title: streamTitle, + url: url, + quality: parseQualityFromLabel(quality), + codecs: extractCodecDetails(apiResponse.name || quality), // Use filename for codec detection + size: apiResponse.size || 'Unknown size', + provider: 'PStream' + }); + } + } + + console.log(`[PStream] Successfully parsed ${streams.length} streams from streams object`); + return streams; + } + + // Check if response has sources array (alternative format) + if (apiResponse && Array.isArray(apiResponse.sources)) { + console.log(`[PStream] Found sources array with ${apiResponse.sources.length} sources`); + + for (const source of apiResponse.sources) { + if (!source.url || !source.quality) { + continue; + } + + const streamName = "Auto"; + const streamTitle = apiResponse.name || `${tmdbType === 'movie' ? 'PStream' : `PStream - S${seasonNum}E${episodeNum}`} - ${source.quality}`; + + streams.push({ + name: streamName, + title: streamTitle, + url: source.url, + quality: parseQualityFromLabel(source.quality), + codecs: source.codec ? [source.codec] : [], + size: source.size || 'Unknown size', + provider: 'PStream' + }); + } + + return streams; + } + + // Check if response has data array (another alternative format) + if (apiResponse && Array.isArray(apiResponse.data)) { + console.log(`[PStream] Found 'data' array instead of 'sources'`); + + for (const item of apiResponse.data) { + if (item.url || item.file) { + const streamName = "Auto"; + const streamTitle = apiResponse.name || `${tmdbType === 'movie' ? 'PStream' : `PStream - S${seasonNum}E${episodeNum}`} - ${item.quality || item.label || 'Unknown'}`; + + streams.push({ + name: streamName, + title: streamTitle, + url: item.url || item.file, + quality: parseQualityFromLabel(item.quality || item.label), + codecs: item.codec ? [item.codec] : [], + size: item.size || 'Unknown size', + provider: 'PStream' + }); + } + } + + return streams; + } + + // No recognized format found + console.log(`[PStream] No recognized stream format found in response`); + if (apiResponse && apiResponse.message) { + console.log(`[PStream] API returned message:`, apiResponse.message); + } else if (apiResponse && apiResponse.error) { + console.log(`[PStream] API returned error:`, apiResponse.error); + } + + return streams; + + } catch (error) { + console.error(`[PStream] Error processing API response: ${error.message}`); + } + + return streams; +}; + +// Function to get TMDB data specifically for PStream API (extracts IMDB ID) +const getTmdbDataForPStream = async (tmdbType, tmdbId) => { + const cacheSubDir = 'tmdb_api'; + const cacheKey = `tmdb-${tmdbType}-${tmdbId}.json`; + + // Try cache first + let tmdbData = await getFromCache(cacheKey, cacheSubDir); + + if (!tmdbData || process.env.DISABLE_CACHE === 'true') { + const TMDB_API_KEY = obtainTmdbKey(); + const tmdbApiUrl = `${TMDB_BASE_URL}/${tmdbType}/${tmdbId}?api_key=${TMDB_API_KEY}`; + console.log(` [PStream] Fetching TMDB data from: ${tmdbApiUrl}`); + + try { + const response = await axios.get(tmdbApiUrl, { timeout: 10000 }); + tmdbData = response.data; + if (tmdbData) { + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(cacheKey, tmdbData, cacheSubDir); + } + } + } catch (error) { + console.log(` [PStream] Error fetching TMDB data: ${error.message}`); + return null; + } + } + + if (!tmdbData) { + console.log(` [PStream] No TMDB data found for ${tmdbType}/${tmdbId}`); + return null; + } + + // Extract IMDB ID + let imdbId = null; + const externalIdsCacheKey = `tmdb-${tmdbType}-${tmdbId}-external_ids.json`; + let externalIdsData = await getFromCache(externalIdsCacheKey, cacheSubDir); + + if (!externalIdsData || process.env.DISABLE_CACHE === 'true') { + const TMDB_API_KEY = obtainTmdbKey(); + const externalIdsApiUrl = `${TMDB_BASE_URL}/${tmdbType}/${tmdbId}/external_ids?api_key=${TMDB_API_KEY}`; + console.log(` [PStream] Fetching TMDB external IDs from: ${externalIdsApiUrl}`); + + try { + const response = await axios.get(externalIdsApiUrl, { timeout: 10000 }); + externalIdsData = response.data; + if (externalIdsData) { + if (process.env.DISABLE_CACHE !== 'true') { + await saveToCache(externalIdsCacheKey, externalIdsData, cacheSubDir); + } + } + } catch (error) { + console.log(` [PStream] Error fetching TMDB external IDs: ${error.message}`); + } + } + + if (externalIdsData && externalIdsData.imdb_id) { + imdbId = externalIdsData.imdb_id; + } + + if (!imdbId) { + console.log(` [PStream] No IMDB ID found for ${tmdbType}/${tmdbId}`); + return null; + } + + return { + imdbId: imdbId, + title: tmdbType === 'movie' ? tmdbData.title : tmdbData.name, + year: tmdbData.release_date ? new Date(tmdbData.release_date).getFullYear() : + tmdbData.first_air_date ? new Date(tmdbData.first_air_date).getFullYear() : null + }; +}; + +// Function to get ui-token for PStream API (handles JWT tokens) +const getUiTokenForPStream = async (userCookie = null) => { + // If user provided a JWT token directly, use it + if (userCookie && userCookie.startsWith('eyJ')) { + console.log('[PStream CookieManager] Using user-provided JWT token as ui-token'); + return userCookie; + } + + // If user provided a regular cookie, try to convert it to JWT format + if (userCookie && !userCookie.startsWith('eyJ')) { + console.log('[PStream CookieManager] Regular cookie provided, attempting to use as ui-token'); + // For now, pass it through as-is - the API might handle conversion + return userCookie; + } + + // Check global cookie + if (global.currentRequestUserCookie && global.currentRequestUserCookie.startsWith('eyJ')) { + console.log('[PStream CookieManager] Using JWT token from global state'); + return global.currentRequestUserCookie; + } + + // Try intelligent selection from cookies array if available + if (global.currentRequestConfig && Array.isArray(global.currentRequestConfig.cookies) && global.currentRequestConfig.cookies.length > 0) { + try { + const candidates = global.currentRequestConfig.cookies.filter(Boolean); + const flowResults = await Promise.all(candidates.map(async (c) => { + try { + const headers = { 'Cookie': c.startsWith('ui=') ? c : `ui=${c}`, 'Accept': 'application/json, text/javascript, */*; q=0.01' }; + const resp = await axios.get('https://www.febbox.com/console/user_cards', { headers, timeout: 10000, validateStatus: () => true }); + if (resp.status === 200 && resp.data && resp.data.data && resp.data.data.flow) { + const flow = resp.data.data.flow; + const remaining = (Number(flow.traffic_limit_mb) || 0) - (Number(flow.traffic_usage_mb) || 0); + return { cookie: c, remainingMB: remaining, ok: true }; + } + } catch (e) { /* ignore per-candidate error */ } + return { cookie: c, remainingMB: -1, ok: false }; + })); + flowResults.sort((a, b) => (b.remainingMB - a.remainingMB)); + const best = flowResults[0]; + if (best && best.ok) { + global.currentRequestUserCookie = best.cookie; + global.currentRequestUserCookieRemainingMB = best.remainingMB; + console.log(`[PStream CookieManager] Selected best ui-token by remaining quota: ${best.remainingMB} MB`); + // Return JWT directly if it is JWT, otherwise return as-is + return best.cookie; + } + } catch (e) { + console.warn(`[PStream CookieManager] Multi-cookie selection failed: ${e.message}`); + } + } + + console.log('[PStream CookieManager] No valid ui-token available'); + return null; +}; + +module.exports = { + getStreamsFromTmdbId, + parseQualityFromLabel, + convertImdbToTmdb, + getShowboxUrlFromTmdbInfo, + ShowBoxScraper, + extractFidsFromFebboxPage, + processShowWithSeasonsEpisodes, + sortStreamsByQuality, + getStreamsFromPStreamAPI, + processPStreamResponse, + getTmdbDataForPStream, + getUiTokenForPStream +}; \ No newline at end of file diff --git a/providers/VidZee.js b/providers/VidZee.js new file mode 100644 index 0000000..42f260f --- /dev/null +++ b/providers/VidZee.js @@ -0,0 +1,129 @@ +const axios = require('axios'); + +// Removed unused parseArgs helper + +const getVidZeeStreams = async (tmdbId, mediaType, seasonNum, episodeNum) => { + if (!tmdbId) { + console.error('[VidZee] Error: TMDB ID (tmdbId) is required.'); + return []; + } + + if (!mediaType || (mediaType !== 'movie' && mediaType !== 'tv')) { + console.error('[VidZee] Error: mediaType is required and must be either "movie" or "tv".'); + return []; + } + + if (mediaType === 'tv') { + if (!seasonNum) { + console.error('[VidZee] Error: Season (seasonNum) is required for TV shows.'); + return []; + } + if (!episodeNum) { + console.error('[VidZee] Error: Episode (episodeNum) is required for TV shows.'); + return []; + } + } + + const servers = [1,2,3,4,5,6,7,8,9,10]; // VidZee server identifiers + + const streamPromises = servers.map(async (sr) => { + let targetApiUrl = `https://player.vidzee.wtf/api/server?id=${tmdbId}&sr=${sr}`; + + if (mediaType === 'tv') { + targetApiUrl += `&ss=${seasonNum}&ep=${episodeNum}`; + } + + let finalApiUrl; + const headers = { + 'Referer': `https://player.vidzee.wtf/embed/movie/${tmdbId}` // Default for proxy method + }; + const timeout = 7000; // Reduced timeout + + const proxyBaseUrl = process.env.VIDZEE_PROXY_URL || process.env.SHOWBOX_PROXY_URL_VALUE; + if (proxyBaseUrl) { + finalApiUrl = proxyBaseUrl + encodeURIComponent(targetApiUrl); + } else { + finalApiUrl = targetApiUrl; + } + + console.log(`[VidZee] Fetching from server ${sr}: ${targetApiUrl}`); + + try { + const response = await axios.get(finalApiUrl, { + headers: headers, + timeout: timeout + }); + + const responseData = response.data; + + if (!responseData || typeof responseData !== 'object') { + console.error(`[VidZee S${sr}] Error: Invalid response data from API.`); + return []; + } + + if (responseData.tracks) { + delete responseData.tracks; + } + + let apiSources = []; + if (responseData.url && Array.isArray(responseData.url)) { + apiSources = responseData.url; + } else if (responseData.link && typeof responseData.link === 'string') { + apiSources = [responseData]; + } + + if (!apiSources || apiSources.length === 0) { + console.log(`[VidZee S${sr}] No stream sources found in API response.`); + return []; + } + + const streams = apiSources.map(sourceItem => { + // Prefer sourceItem.name as label, fallback to sourceItem.type, then 'VidZee Stream' + const label = sourceItem.name || sourceItem.type || 'VidZee'; + // Ensure quality has 'p' if it's a resolution, or keep it as is + let quality = String(label).match(/^\d+$/) ? `${label}p` : label; + // Normalize non-numeric or ambiguous quality labels to a baseline so they survive minQuality filter + if (!/(\d{3,4})p/.test(quality.toLowerCase())) { + quality = '720p'; + } + const language = sourceItem.language || sourceItem.lang; + + return { + title: `VidZee S${sr} - ${quality}`, + url: sourceItem.link, // Use sourceItem.link for the URL + quality: quality, + language: language, + provider: "VidZee", + size: "Unknown size", + behaviorHints: { + notWebReady: true, + headers: { + 'Referer': 'https://core.vidzee.wtf/' + } + } + }; + }).filter(stream => stream.url); + + console.log(`[VidZee S${sr}] Successfully extracted ${streams.length} streams. Qualities: ${streams.map(s=>s.quality).join(', ')}`); + return streams; + + } catch (error) { + if (error.response) { + console.error(`[VidZee S${sr}] Error fetching: ${error.response.status} ${error.response.statusText}`); + } else if (error.request) { + console.error(`[VidZee S${sr}] Error fetching: No response received.`); + } else { + console.error(`[VidZee S${sr}] Error fetching:`, error.message); + } + return []; + } + }); + + const allStreamsNested = await Promise.all(streamPromises); + const allStreams = allStreamsNested.flat(); + + console.log(`[VidZee] Found a total of ${allStreams.length} streams from servers ${servers.join(', ')}.`); + return allStreams; +}; + +module.exports = { getVidZeeStreams }; \ No newline at end of file diff --git a/providers/moviesmod.js b/providers/moviesmod.js new file mode 100644 index 0000000..d9d3201 --- /dev/null +++ b/providers/moviesmod.js @@ -0,0 +1,1225 @@ +/** + * MoviesMod provider (standalone API) + * Supports both movies and TV series + */ + +const axios = require('axios'); +const cheerio = require('cheerio'); +const FormData = require('form-data'); +const { CookieJar } = require('tough-cookie'); +const { URLSearchParams, URL } = require('url'); +const fs = require('fs').promises; +const path = require('path'); +const { findBestMatch } = require('string-similarity'); + +// Dynamic import for axios-cookiejar-support +let axiosCookieJarSupport = null; +const getAxiosCookieJarSupport = async () => { + if (!axiosCookieJarSupport) { + axiosCookieJarSupport = await import('axios-cookiejar-support'); + } + return axiosCookieJarSupport; +}; + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +// --- Proxy Configuration --- +const MOVIESMOD_PROXY_URL = process.env.MOVIESMOD_PROXY_URL; +if (MOVIESMOD_PROXY_URL) { + console.log(`[MoviesMod] Proxy support enabled: ${MOVIESMOD_PROXY_URL}`); +} else { + console.log('[MoviesMod] No proxy configured, using direct connections'); +} + +// --- Domain Fetching --- +let moviesModDomain = 'https://moviesmod.chat'; // Fallback domain +let domainCacheTimestamp = 0; +const DOMAIN_CACHE_TTL = 4 * 60 * 60 * 1000; // 4 hours + +async function getMoviesModDomain() { + const now = Date.now(); + if (now - domainCacheTimestamp < DOMAIN_CACHE_TTL) { + return moviesModDomain; + } + + try { + console.log('[MoviesMod] Fetching latest domain...'); + const response = await makeRequest('https://raw.githubusercontent.com/phisher98/TVVVV/refs/heads/main/domains.json', { timeout: 10000 }); + if (response.data && response.data.moviesmod) { + moviesModDomain = response.data.moviesmod; + domainCacheTimestamp = now; + console.log(`[MoviesMod] Updated domain to: ${moviesModDomain}`); + } else { + console.warn('[MoviesMod] Domain JSON fetched, but "moviesmod" key was not found. Using fallback.'); + } + } catch (error) { + console.error(`[MoviesMod] Failed to fetch latest domain, using fallback. Error: ${error.message}`); + } + return moviesModDomain; +} + +// --- Caching Configuration --- +const CACHE_ENABLED = process.env.DISABLE_CACHE !== 'true'; +console.log(`[MoviesMod Cache] Internal cache is ${CACHE_ENABLED ? 'enabled' : 'disabled'}.`); +const CACHE_DIR = process.env.VERCEL ? path.join('/tmp', '.moviesmod_cache') : path.join(__dirname, '.cache', 'moviesmod'); + +// Caching layer simplified: placeholders only (extend for FS persistence if needed) + +// --- Caching Helper Functions --- +const ensureCacheDir = async () => { + if (!CACHE_ENABLED) return; + try { + await fs.mkdir(CACHE_DIR, { recursive: true }); + } catch (error) { + if (error.code !== 'EEXIST') { + console.error(`[MoviesMod Cache] Error creating cache directory: ${error.message}`); + } + } +}; + +const getFromCache = async (key) => { + if (!CACHE_ENABLED) return null; + return null; // no-op +}; + +const saveToCache = async (key, data) => { + if (!CACHE_ENABLED) return; + // no-op (placeholder for future FS caching) +}; + +// Initialize cache directory on startup +ensureCacheDir(); + +// Proxy wrapper function +const makeRequest = async (url, options = {}) => { + if (MOVIESMOD_PROXY_URL) { + // Route through proxy + const proxiedUrl = `${MOVIESMOD_PROXY_URL}${encodeURIComponent(url)}`; + console.log(`[MoviesMod] Making proxied request to: ${url}`); + return axios.get(proxiedUrl, options); + } else { + // Direct request + console.log(`[MoviesMod] Making direct request to: ${url}`); + return axios.get(url, options); + } +}; + +// Helper function to create a proxied session for SID resolution +const createProxiedSession = async (jar) => { + const { wrapper } = await getAxiosCookieJarSupport(); + + const sessionConfig = { + jar, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'Accept-Language': 'en-US,en;q=0.5', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1' + } + }; + + const session = wrapper(axios.create(sessionConfig)); + + // Helper function to extract cookies from jar for a given URL + const getCookiesForUrl = async (url) => { + try { + const cookies = await jar.getCookies(url); + return cookies.map(cookie => `${cookie.key}=${cookie.value}`).join('; '); + } catch (error) { + console.error(`[MoviesMod] Error getting cookies for ${url}: ${error.message}`); + return ''; + } + }; + + // If proxy is enabled, wrap the session methods to use proxy + if (MOVIESMOD_PROXY_URL) { + console.log(`[MoviesMod] Creating SID session with proxy: ${MOVIESMOD_PROXY_URL}`); + const originalGet = session.get.bind(session); + const originalPost = session.post.bind(session); + + session.get = async (url, options = {}) => { + const proxiedUrl = `${MOVIESMOD_PROXY_URL}${encodeURIComponent(url)}`; + console.log(`[MoviesMod] Making proxied SID GET request to: ${url}`); + + // Extract cookies from jar and add to headers + const cookieString = await getCookiesForUrl(url); + if (cookieString) { + console.log(`[MoviesMod] Adding cookies to proxied request: ${cookieString}`); + options.headers = { + ...options.headers, + 'Cookie': cookieString + }; + } + + return originalGet(proxiedUrl, options); + }; + + session.post = async (url, data, options = {}) => { + const proxiedUrl = `${MOVIESMOD_PROXY_URL}${encodeURIComponent(url)}`; + console.log(`[MoviesMod] Making proxied SID POST request to: ${url}`); + + // Extract cookies from jar and add to headers + const cookieString = await getCookiesForUrl(url); + if (cookieString) { + console.log(`[MoviesMod] Adding cookies to proxied request: ${cookieString}`); + options.headers = { + ...options.headers, + 'Cookie': cookieString + }; + } + + return originalPost(proxiedUrl, data, options); + }; + } + + return session; +}; + +// Helper function to extract quality from text +function extractQuality(text) { + if (!text) return 'Unknown'; + + const qualityMatch = text.match(/(480p|720p|1080p|2160p|4k)/i); + if (qualityMatch) { + return qualityMatch[1]; + } + + // Try to extract from full text + const cleanMatch = text.match(/(480p|720p|1080p|2160p|4k)[^)]*\)/i); + if (cleanMatch) { + return cleanMatch[0]; + } + + return 'Unknown'; +} + +function parseQualityForSort(qualityString) { + if (!qualityString) return 0; + const match = qualityString.match(/(\d{3,4})p/i); + return match ? parseInt(match[1], 10) : 0; +} + +function getTechDetails(qualityString) { + if (!qualityString) return []; + const details = []; + const lowerText = qualityString.toLowerCase(); + if (lowerText.includes('10bit')) details.push('10-bit'); + if (lowerText.includes('hevc') || lowerText.includes('x265')) details.push('HEVC'); + if (lowerText.includes('hdr')) details.push('HDR'); + return details; +} + +// Search for content on MoviesMod +async function searchMoviesMod(query) { + try { + const baseUrl = await getMoviesModDomain(); + const searchUrl = `${baseUrl}/?s=${encodeURIComponent(query)}`; + const { data } = await makeRequest(searchUrl); + const $ = cheerio.load(data); + + const results = []; + $('.latestPost').each((i, element) => { + const linkElement = $(element).find('a'); + const title = linkElement.attr('title'); + const url = linkElement.attr('href'); + if (title && url) { + results.push({ title, url }); + } + }); + + return results; + } catch (error) { + console.error(`[MoviesMod] Error searching: ${error.message}`); + return []; + } +} + +// Extract download links from a movie/series page +async function extractDownloadLinks(moviePageUrl) { + try { + const { data } = await makeRequest(moviePageUrl); + const $ = cheerio.load(data); + const links = []; + const contentBox = $('.thecontent'); + + // Get all relevant headers (for movies and TV shows) in document order + const headers = contentBox.find('h3:contains("Season"), h4'); + + headers.each((i, el) => { + const header = $(el); + const headerText = header.text().trim(); + + // Define the content block for this header + const blockContent = header.nextUntil('h3, h4'); + + if (header.is('h3') && headerText.toLowerCase().includes('season')) { + // TV Show Logic + const linkElements = blockContent.find('a.maxbutton-episode-links, a.maxbutton-batch-zip'); + linkElements.each((j, linkEl) => { + const buttonText = $(linkEl).text().trim(); + const linkUrl = $(linkEl).attr('href'); + if (linkUrl && !buttonText.toLowerCase().includes('batch')) { + links.push({ + quality: `${headerText} - ${buttonText}`, + url: linkUrl + }); + } + }); + } else if (header.is('h4')) { + // Movie Logic + const linkElement = blockContent.find('a[href*="modrefer.in"]').first(); + if (linkElement.length > 0) { + const link = linkElement.attr('href'); + const cleanQuality = extractQuality(headerText); + links.push({ + quality: cleanQuality, + url: link + }); + } + } + }); + + return links; + } catch (error) { + console.error(`[MoviesMod] Error extracting download links: ${error.message}`); + return []; + } +} + +// Resolve intermediate links (dramadrip, episodes.modpro.blog, modrefer.in) +async function resolveIntermediateLink(initialUrl, refererUrl, quality) { + try { + const urlObject = new URL(initialUrl); + + if (urlObject.hostname.includes('dramadrip.com')) { + const { data: dramaData } = await makeRequest(initialUrl, { headers: { 'Referer': refererUrl } }); + const $$ = cheerio.load(dramaData); + + let episodePageLink = null; + const seasonMatch = quality.match(/Season \d+/i); + // Extract the specific quality details, e.g., "1080p x264" + const specificQualityMatch = quality.match(/(480p|720p|1080p|2160p|4k)[ \w\d-]*/i); + + if (seasonMatch && specificQualityMatch) { + const seasonIdentifier = seasonMatch[0].toLowerCase(); + // Clean up the identifier to get only the essential parts + const specificQualityIdentifier = specificQualityMatch[0].toLowerCase().replace(/msubs.*/i, '').replace(/esubs.*/i, '').replace(/\{.*/, '').trim(); + const qualityParts = specificQualityIdentifier.split(/\s+/); // -> ['1080p', 'x264'] + + $$('a[href*="episodes.modpro.blog"], a[href*="cinematickit.org"]').each((i, el) => { + const link = $$(el); + const linkText = link.text().trim().toLowerCase(); + const seasonHeader = link.closest('.wp-block-buttons').prevAll('h2.wp-block-heading').first().text().trim().toLowerCase(); + + const seasonIsMatch = seasonHeader.includes(seasonIdentifier); + // Ensure that the link text contains all parts of our specific quality + const allPartsMatch = qualityParts.every(part => linkText.includes(part)); + + if (seasonIsMatch && allPartsMatch) { + episodePageLink = link.attr('href'); + console.log(`[MoviesMod] Found specific match for "${quality}" -> "${link.text().trim()}": ${episodePageLink}`); + return false; // Break loop, we found our specific link + } + }); + } + + if (!episodePageLink) { + console.error(`[MoviesMod] Could not find a specific quality match on dramadrip page for: ${quality}`); + return []; + } + + // Pass quality to recursive call + return await resolveIntermediateLink(episodePageLink, initialUrl, quality); + + } else if (urlObject.hostname.includes('cinematickit.org')) { + // Handle cinematickit.org pages + const { data } = await makeRequest(initialUrl, { headers: { 'Referer': refererUrl } }); + const $ = cheerio.load(data); + const finalLinks = []; + + // Look for episode links on cinematickit.org + $('a[href*="driveseed.org"]').each((i, el) => { + const link = $(el).attr('href'); + const text = $(el).text().trim(); + if (link && text && !text.toLowerCase().includes('batch')) { + finalLinks.push({ + server: text.replace(/\s+/g, ' '), + url: link, + }); + } + }); + + // If no driveseed links found, try other patterns + if (finalLinks.length === 0) { + $('a[href*="modrefer.in"], a[href*="dramadrip.com"]').each((i, el) => { + const link = $(el).attr('href'); + const text = $(el).text().trim(); + if (link && text) { + finalLinks.push({ + server: text.replace(/\s+/g, ' '), + url: link, + }); + } + }); + } + + return finalLinks; + + } else if (urlObject.hostname.includes('episodes.modpro.blog')) { + const { data } = await makeRequest(initialUrl, { headers: { 'Referer': refererUrl } }); + const $ = cheerio.load(data); + const finalLinks = []; + + $('.entry-content a[href*="driveseed.org"], .entry-content a[href*="tech.unblockedgames.world"], .entry-content a[href*="tech.creativeexpressionsblog.com"], .entry-content a[href*="tech.examzculture.in"]').each((i, el) => { + const link = $(el).attr('href'); + const text = $(el).text().trim(); + if (link && text && !text.toLowerCase().includes('batch')) { + finalLinks.push({ + server: text.replace(/\s+/g, ' '), + url: link, + }); + } + }); + return finalLinks; + + } else if (urlObject.hostname.includes('modrefer.in')) { + const encodedUrl = urlObject.searchParams.get('url'); + if (!encodedUrl) { + console.error('[MoviesMod] Could not find encoded URL in modrefer.in link.'); + return []; + } + + const decodedUrl = Buffer.from(encodedUrl, 'base64').toString('utf8'); + const { data } = await makeRequest(decodedUrl, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + 'Referer': refererUrl, + } + }); + + const $ = cheerio.load(data); + const finalLinks = []; + + $('.timed-content-client_show_0_5_0 a').each((i, el) => { + const link = $(el).attr('href'); + const text = $(el).text().trim(); + if (link) { + finalLinks.push({ + server: text, + url: link, + }); + } + }); + return finalLinks; + } else { + console.warn(`[MoviesMod] Unknown hostname: ${urlObject.hostname}`); + return []; + } + } catch (error) { + console.error(`[MoviesMod] Error resolving intermediate link: ${error.message}`); + return []; + } +} + +// Function to resolve tech.unblockedgames.world links to driveleech URLs (adapted from UHDMovies) +async function resolveTechUnblockedLink(sidUrl) { + console.log(`[MoviesMod] Resolving SID link: ${sidUrl}`); + const { origin } = new URL(sidUrl); + const jar = new CookieJar(); + + // Create session with proxy support + const session = await createProxiedSession(jar); + + try { + // Step 0: Get the _wp_http value + console.log(" [SID] Step 0: Fetching initial page..."); + const responseStep0 = await session.get(sidUrl); + let $ = cheerio.load(responseStep0.data); + const initialForm = $('#landing'); + const wp_http_step1 = initialForm.find('input[name="_wp_http"]').val(); + const action_url_step1 = initialForm.attr('action'); + + if (!wp_http_step1 || !action_url_step1) { + console.error(" [SID] Error: Could not find _wp_http in initial form."); + return null; + } + + // Step 1: POST to the first form's action URL + console.log(" [SID] Step 1: Submitting initial form..."); + const step1Data = new URLSearchParams({ '_wp_http': wp_http_step1 }); + const responseStep1 = await session.post(action_url_step1, step1Data, { + headers: { 'Referer': sidUrl, 'Content-Type': 'application/x-www-form-urlencoded' } + }); + + // Step 2: Parse verification page for second form + console.log(" [SID] Step 2: Parsing verification page..."); + $ = cheerio.load(responseStep1.data); + const verificationForm = $('#landing'); + const action_url_step2 = verificationForm.attr('action'); + const wp_http2 = verificationForm.find('input[name="_wp_http2"]').val(); + const token = verificationForm.find('input[name="token"]').val(); + + if (!action_url_step2) { + console.error(" [SID] Error: Could not find verification form."); + return null; + } + + // Step 3: POST to the verification URL + console.log(" [SID] Step 3: Submitting verification..."); + const step2Data = new URLSearchParams({ '_wp_http2': wp_http2, 'token': token }); + const responseStep2 = await session.post(action_url_step2, step2Data, { + headers: { 'Referer': responseStep1.request.res.responseUrl, 'Content-Type': 'application/x-www-form-urlencoded' } + }); + + // Step 4: Find dynamic cookie and link from JavaScript + console.log(" [SID] Step 4: Parsing final page for JS data..."); + let finalLinkPath = null; + let cookieName = null; + let cookieValue = null; + + const scriptContent = responseStep2.data; + const cookieMatch = scriptContent.match(/s_343\('([^']+)',\s*'([^']+)'/); + const linkMatch = scriptContent.match(/c\.setAttribute\("href",\s*"([^"]+)"\)/); + + if (cookieMatch) { + cookieName = cookieMatch[1].trim(); + cookieValue = cookieMatch[2].trim(); + } + if (linkMatch) { + finalLinkPath = linkMatch[1].trim(); + } + + if (!finalLinkPath || !cookieName || !cookieValue) { + console.error(" [SID] Error: Could not extract dynamic cookie/link from JS."); + return null; + } + + const finalUrl = new URL(finalLinkPath, origin).href; + console.log(` [SID] Dynamic link found: ${finalUrl}`); + console.log(` [SID] Dynamic cookie found: ${cookieName}`); + + // Step 5: Set cookie and make final request + console.log(" [SID] Step 5: Setting cookie and making final request..."); + await jar.setCookie(`${cookieName}=${cookieValue}`, origin); + + const finalResponse = await session.get(finalUrl, { + headers: { 'Referer': responseStep2.request.res.responseUrl } + }); + + // Step 6: Extract driveleech URL from meta refresh tag + $ = cheerio.load(finalResponse.data); + const metaRefresh = $('meta[http-equiv="refresh"]'); + if (metaRefresh.length > 0) { + const content = metaRefresh.attr('content'); + const urlMatch = content.match(/url=(.*)/i); + if (urlMatch && urlMatch[1]) { + const driveleechUrl = urlMatch[1].replace(/"/g, "").replace(/'/g, ""); + console.log(` [SID] SUCCESS! Resolved Driveleech URL: ${driveleechUrl}`); + return driveleechUrl; + } + } + + console.error(" [SID] Error: Could not find meta refresh tag with Driveleech URL."); + return null; + + } catch (error) { + console.error(` [SID] Error during SID resolution: ${error.message}`); + if (error.response) { + console.error(` [SID] Status: ${error.response.status}`); + } + return null; + } +} + + +// Resolve Resume Cloud link to final download URL +async function resolveResumeCloudLink(resumeUrl) { + try { + const { data } = await makeRequest(resumeUrl, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + 'Referer': 'https://driveseed.org/', + } + }); + const $ = cheerio.load(data); + const downloadLink = $('a:contains("Cloud Resume Download")').attr('href'); + return downloadLink || null; + } catch (error) { + console.error(`[MoviesMod] Error resolving Resume Cloud link: ${error.message}`); + return null; + } +} + +// Resolve Worker Seed link to final download URL +async function resolveWorkerSeedLink(workerSeedUrl) { + try { + console.log(`[MoviesMod] Resolving Worker-seed link: ${workerSeedUrl}`); + + const jar = new CookieJar(); + + // Get the wrapper function from dynamic import + const { wrapper } = await getAxiosCookieJarSupport(); + const session = wrapper(axios.create({ + jar, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + } + })); + + // Step 1: GET the page to get the script content and cookies + console.log(`[MoviesMod] Step 1: Fetching page to get script content and cookies...`); + const { data: pageHtml } = await session.get(workerSeedUrl); + + // Step 2: Use regex to extract the token and the correct ID from the script + const scriptTags = pageHtml.match(/ + + + +
+ +
+ + + +
+
+

Server Status

+
+
+

Metrics

+
loading...
+
+
+

Providers

+ + +
+
+
+

Endpoints

+
loading...
+
+
+ +
+
+

Core Settings

+
+
+
+
+
+
+

Quality & Filtering

+
+ +
+
+ +
+
+
+

API Keys

+
+ +
+
+

FebBox / PStream

+

ShowBox fetches content from a cloud storage provider called FebBox. Each FebBox user gets 100GB/month of fast streaming before speeds are reduced.

+ Febbox Website +
+
+ +
+ +
    +
  1. + Open Febbox.com
    + Go to https://febbox.com in your web browser. +
  2. +
  3. + Log in with Google
    + Use a Google account to log in to the Febbox site.
    + Tip: For safety, it’s recommended to use a fresh account. +
  4. +
  5. + Open Developer Tools
    + Press the F12 key on your keyboard.
    + Alternatively, right-click anywhere on the page and select + Inspect or Inspect Element. +
  6. +
  7. + Navigate to Cookies
    + In the Developer Tools panel, go to the Application tab.
    + Expand the Storage section and click on Cookies. +
  8. +
  9. + Find the "ui" Cookie
    + In the list of cookies, look for the cookie with the name ui. +
  10. +
  11. + Copy the value
    + Copy the cookie value and paste it above then click add cookie. +
  12. +
+
+
+

Advanced & Providers

+

These settings allow you to customize the behavior of the api and will effect timings.

+
+ + + + +
+

Proxy / Paths

+

Provider enable/disable & feature flags apply immediately. Click toggles to enable (highlighted) or disable (dim).

+
+
+
+
+
+
+
+
+
+
+
+

Live Configuration

+

Merged

+

This section shows the currently active configuration, including all merged settings from various sources.

+
loading...
+

Overrides (user-config.json)

+

These are the user-defined settings from this panel that override the default configuration.

+
(none)
+
+
+
+ + + + + +
+
+ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..04a41be --- /dev/null +++ b/public/index.html @@ -0,0 +1,65 @@ + + + + + TMDB Embed Login + + + + + + +
+ +

TMDB Embed Admin

+
+
+ + +
+
+ + +
+
+ +
+
+
+
+

Change Password

+
+
+
+
+
+
+
+ +
Sessions expire after 12h or on server restart.
+ +
+
+ + + diff --git a/public/index.js b/public/index.js new file mode 100644 index 0000000..e8f44e9 --- /dev/null +++ b/public/index.js @@ -0,0 +1,573 @@ +// Admin panel logic (refactored into IIFE, no inline handlers) +(function(){ +async function fetchConfig(){ + const r = await fetch('/api/config'); + if(!r.ok) throw new Error('Failed to fetch config'); + return r.json(); +} +async function fetchProviders(){ + const r = await fetch('/api/providers'); + if(!r.ok) throw new Error('Failed to fetch providers'); + return r.json(); +} + +function setFebboxCookies(cookiesArray){ + const listEl = document.getElementById('febboxCookieList'); + const hidden = document.querySelector('input[name="febboxCookiesHidden"]'); + if(!listEl || !hidden) return; + const arr = Array.isArray(cookiesArray)? cookiesArray.filter(c=>c && typeof c==='string') : []; + hidden.value = arr.join(','); + listEl.innerHTML = arr.length? arr.map((c,i)=>``).join('') : '
No cookies added
'; +} +function addFebboxCookie(){ + const input = document.getElementById('febboxCookieInput'); + const val = (input.value||'').trim(); + if(!val) return; + const hidden = document.querySelector('input[name="febboxCookiesHidden"]'); + const existing = hidden.value? hidden.value.split(',').filter(Boolean):[]; + if(existing.includes(val)) { input.value=''; return; } + existing.push(val); + setFebboxCookies(existing); + input.value=''; + validate(); +} +function removeFebboxCookie(idx){ + const hidden = document.querySelector('input[name="febboxCookiesHidden"]'); + const existing = hidden.value? hidden.value.split(',').filter(Boolean):[]; + const next = existing.filter((_,i)=> i!=idx); + setFebboxCookies(next); + validate(); +} +document.addEventListener('click', (e)=>{ + const btn = e.target.closest('#addFebboxCookieBtn'); + if(btn){ addFebboxCookie(); } + const rm = e.target.closest('.cookie-item button.remove'); + if(rm){ const idx = rm.dataset.idx; removeFebboxCookie(idx); } +}); +document.addEventListener('keydown',(e)=>{ if(e.key==='Enter' && e.target.id==='febboxCookieInput'){ e.preventDefault(); addFebboxCookie(); }}); + +// TMDB multi-key management +function setTmdbKeys(keys){ + const listEl = document.getElementById('tmdbKeyList'); + const hidden = document.querySelector('input[name="tmdbApiKeysHidden"]'); + if(!listEl || !hidden) return; + const arr = Array.isArray(keys)? keys.filter(k=>k && typeof k==='string') : []; + hidden.value = arr.join(','); + listEl.innerHTML = arr.length? arr.map((k,i)=>`
${k}
`).join('') : '
No TMDB keys
'; +} +function addTmdbKey(){ + const input = document.getElementById('tmdbKeyInput'); + const val = (input.value||'').trim(); + if(!val) return; + const hidden = document.querySelector('input[name="tmdbApiKeysHidden"]'); + const existing = hidden.value? hidden.value.split(',').filter(Boolean):[]; + if(existing.includes(val)) { input.value=''; return; } + existing.push(val); + setTmdbKeys(existing); + input.value=''; + validate(); +} +function removeTmdbKey(idx){ + const hidden = document.querySelector('input[name="tmdbApiKeysHidden"]'); + const existing = hidden.value? hidden.value.split(',').filter(Boolean):[]; + setTmdbKeys(existing.filter((_,i)=> i!=idx)); + validate(); +} +document.addEventListener('click',(e)=>{ + if(e.target.closest('#addTmdbKeyBtn')) addTmdbKey(); + const rm = e.target.closest('.key-item button.remove'); + if(rm){ removeTmdbKey(rm.dataset.idx); } +}); +document.addEventListener('keydown',(e)=>{ if(e.key==='Enter' && e.target.id==='tmdbKeyInput'){ e.preventDefault(); addTmdbKey(); }}); + +function fillForm(data){ + const merged = data.merged || {}; + const override = data.override || {}; + const f = document.getElementById('cfgForm'); + const fields = ['port']; + fields.forEach(k=>{ if(!f.elements[k]) return; const ov = override[k]; f.elements[k].value = ov !== undefined ? ov : (merged[k]||''); }); + if (f.elements['defaultRegion']) { + const val = override.defaultRegion !== undefined ? override.defaultRegion : (merged.defaultRegion || ''); + f.elements['defaultRegion'].value = val || ''; + } + f.elements['defaultProviders'].value = (override.defaultProviders || merged.defaultProviders || []).join(','); + (function(){ + let cookiesVal = override.febboxCookies || merged.febboxCookies || []; + if(typeof cookiesVal === 'string') { + const trimmed = cookiesVal.trim(); + if(trimmed.startsWith('[') && trimmed.endsWith(']')) { try { const arr = JSON.parse(trimmed); if(Array.isArray(arr)) cookiesVal = arr; } catch{} } + else if (trimmed.includes(',') || trimmed.includes('\n') || trimmed.includes(';')) { + cookiesVal = trimmed.split(/[\n;,]+/).map(s=>s.trim()).filter(Boolean); + } else if(trimmed) cookiesVal = [trimmed]; else cookiesVal = []; + } + if(!Array.isArray(cookiesVal)) cookiesVal = []; + setFebboxCookies(cookiesVal); + })(); + (function(){ + let keys = override.tmdbApiKeys || merged.tmdbApiKeys || []; + if(!Array.isArray(keys)) { + if (override.tmdbApiKey) keys = [override.tmdbApiKey]; + else if (merged.tmdbApiKey) keys = [merged.tmdbApiKey]; + else keys = []; + } + setTmdbKeys(keys); + })(); + const mqRaw = override.minQualitiesRaw !== undefined ? override.minQualitiesRaw : (merged.minQualitiesRaw || ''); + const presetValues = ['all','480p','720p','1080p','1440p','2160p']; + let matchedPreset = presetValues.includes((mqRaw||'').toLowerCase()) ? mqRaw.toLowerCase() : (mqRaw? 'custom':'all'); + const presetInput = document.querySelector(`input[name="qualityPreset"][value="${matchedPreset}"]`) || document.querySelector('input[name="qualityPreset"][value="all"]'); + if (presetInput) presetInput.checked = true; + const customField = document.querySelector('textarea[name="minQualitiesRaw"]'); + if (customField) { + if (matchedPreset === 'custom') { customField.disabled = false; customField.value = mqRaw; } + else { customField.disabled = true; customField.value = ''; } + } + const excRaw = override.excludeCodecsRaw !== undefined ? override.excludeCodecsRaw : (merged.excludeCodecsRaw || ''); + let parsed = null; try { if(excRaw && /[\{\[]/.test(excRaw)) parsed = JSON.parse(excRaw); } catch {} + let mode = 'all'; + if(parsed){ + const dv = parsed.excludeDV === true; + const hdr = parsed.excludeHDR === true; + if(dv && !hdr) mode = 'dv'; + else if(hdr && !dv) mode = 'hdr'; + else if(dv && hdr) mode = 'advanced'; + else mode = 'advanced'; + } else if(excRaw){ + if(/excludeDV":true/.test(excRaw) && !/excludeHDR":true/.test(excRaw)) mode='dv'; + else if(/excludeHDR":true/.test(excRaw) && !/excludeDV":true/.test(excRaw)) mode='hdr'; + else mode='advanced'; + } + const presetInputC = document.querySelector(`input[name="codecPreset"][value="${mode}"]`) || document.querySelector('input[name="codecPreset"][value="all"]'); + if(presetInputC) presetInputC.checked = true; + const codecTa = document.querySelector('textarea[name="excludeCodecsRaw"]'); + if(mode==='advanced') { codecTa.disabled=false; codecTa.value = excRaw || JSON.stringify({excludeDV:false,excludeHDR:false}); } + else { codecTa.disabled=true; codecTa.value=''; } + document.getElementById('currentCfg').textContent = JSON.stringify(merged, null, 2); + document.getElementById('overrideCfg').textContent = Object.keys(override).length? JSON.stringify(override,null,2): '(none)'; + document.getElementById('bootWarn').style.display = (!merged.febboxCookies || merged.febboxCookies.length===0)? 'block':'none'; + // Removed version & overrides pills from UI; logic deleted + const cacheBanner = document.getElementById('cacheDisabledBanner'); if(cacheBanner) cacheBanner.style.display = merged.disableCache? 'block':'none'; + const tmdbBanner = document.getElementById('tmdbMissingBanner'); + if(tmdbBanner){ + const tmdbMissing = !((override.tmdbApiKeys && override.tmdbApiKeys.length) || (merged.tmdbApiKeys && merged.tmdbApiKeys.length) || override.tmdbApiKey || merged.tmdbApiKey); + const tmdbProvidersEnabled = [ + merged.enableShowboxProvider !== false, + merged.enable4khdhubProvider !== false, + merged.enableMoviesmodProvider !== false, + merged.enableMp4hydraProvider !== false + ].some(Boolean); + tmdbBanner.style.display = (tmdbMissing && tmdbProvidersEnabled)? 'block':'none'; + } + const advBools = [ + ['enableXprimeProvider','adv_enableXprime'], + ['enable4khdhubProvider','adv_enable4khdhub'], + ['enableMoviesmodProvider','adv_enableMoviesmod'], + ['enableMp4hydraProvider','adv_enableMp4hydra'], + ['enableVidzeeProvider','adv_enableVidzee'], + ['enableVixsrcProvider','adv_enableVixsrc'], + ['disableCache','adv_disableCache'], + ['enablePStreamApi','adv_enablePStream'], + ['showboxUseRotatingProxy','adv_showboxRotatingProxy'], + ['disableUrlValidation','adv_disableUrlValidation'], + ['disable4khdhubUrlValidation','adv_disable4khdhubValidation'] + ]; + advBools.forEach(([cfgKey, elName])=>{ const el = f.elements[elName]; if(!el) return; const src = (override[cfgKey]!==undefined? override[cfgKey] : merged[cfgKey]); if(el.type==='checkbox'){ el.checked = !!src; } else { el.value = src? 'true':''; } }); + const advTexts = [ + ['showboxCacheDir','adv_showboxCacheDir'], + ['showboxProxyPrimary','adv_showboxProxyPrimary'], + ['showboxProxyAlternate','adv_showboxProxyAlternate'], + ['xprimeProxyUrl','adv_xprimeProxyUrl'], + ['vidzeeProxyUrl','adv_vidzeeProxyUrl'], + ['vidsrcProxyUrl','adv_vidsrcProxyUrl'], + ['moviesmodProxyUrl','adv_moviesmodProxyUrl'] + ]; + advTexts.forEach(([cfgKey, elName])=>{ const el = f.elements[elName]; if(!el) return; const val = override[cfgKey]!==undefined? override[cfgKey] : merged[cfgKey]; el.value = val || ''; }); + // Sync checkbox style advanced flags + const advFlagMap = { + adv_disableCache: 'disableCache', + adv_showboxRotatingProxy: 'showboxUseRotatingProxy', + adv_disableUrlValidation: 'disableUrlValidation', + adv_disable4khdhubValidation: 'disable4khdhubUrlValidation' + }; + Object.entries(advFlagMap).forEach(([inputName, cfgKey]) => { + const el = f.elements[inputName]; + if(!el) return; + const val = override[cfgKey] !== undefined ? override[cfgKey] : merged[cfgKey]; + el.checked = !!val; + }); +} + +async function reload(){ + try { + const data = await fetchConfig(); + fillForm(data); + renderProviderMatrix(data.merged); + validate(); + setStatus(''); + } catch(e){ setStatus('Load failed: '+e.message,true); } +} + +function setStatus(msg, isErr){ + const el = document.getElementById('status'); + el.textContent = msg; + el.style.color = isErr? '#dc2626':'inherit'; +} + +async function save(){ + const f = document.getElementById('cfgForm'); + const payload = {}; + const dp = f.elements['defaultProviders'].value.trim(); + if (dp) payload.defaultProviders = dp.split(/[\s,]+/).filter(Boolean); + ['port'].forEach(k=>{ + if(!f.elements[k]) return; + const v = f.elements[k].value.trim(); + payload[k] = v? v : null; + }); + const selPreset = document.querySelector('input[name="qualityPreset"]:checked'); + if (selPreset) { + if (selPreset.value === 'custom') { + const cv = f.elements['minQualitiesRaw'].value.trim(); + if (cv) payload.minQualitiesRaw = cv; else payload.minQualitiesRaw = null; + } else { + payload.minQualitiesRaw = selPreset.value === 'all' ? 'all' : selPreset.value; + } + } + const cPreset = document.querySelector('input[name="codecPreset"]:checked'); + if(cPreset){ + if(cPreset.value==='all') payload.excludeCodecsRaw = null; + else if(cPreset.value==='dv') payload.excludeCodecsRaw = JSON.stringify({excludeDV:true,excludeHDR:false}); + else if(cPreset.value==='hdr') payload.excludeCodecsRaw = JSON.stringify({excludeDV:false,excludeHDR:true}); + else if(cPreset.value==='advanced') { + const raw = document.querySelector('textarea[name="excludeCodecsRaw"]').value.trim(); + payload.excludeCodecsRaw = raw || null; + } + } + const drSel = f.elements['defaultRegion']; + if (drSel) payload.defaultRegion = drSel.value ? drSel.value : null; + const cookiesHidden = f.elements['febboxCookiesHidden']; + if(cookiesHidden){ + const cookiesVal = cookiesHidden.value.trim(); + payload.febboxCookies = cookiesVal? cookiesVal.split(',').filter(Boolean) : []; + } + const boolMap = { + adv_enableXprime:'enableXprimeProvider', + adv_enable4khdhub:'enable4khdhubProvider', + adv_enableMoviesmod:'enableMoviesmodProvider', + adv_enableMp4hydra:'enableMp4hydraProvider', + adv_enableVidzee:'enableVidzeeProvider', + adv_enableVixsrc:'enableVixsrcProvider', + adv_disableCache:'disableCache', + adv_enablePStream:'enablePStreamApi', + adv_showboxRotatingProxy:'showboxUseRotatingProxy', + adv_disableUrlValidation:'disableUrlValidation', + adv_disable4khdhubValidation:'disable4khdhubUrlValidation' + }; + Object.entries(boolMap).forEach(([formName,cfgKey])=>{ const el = f.elements[formName]; if(el) payload[cfgKey] = !!el.checked; }); + const textMap = { + adv_showboxCacheDir:'showboxCacheDir', + adv_showboxProxyPrimary:'showboxProxyPrimary', + adv_showboxProxyAlternate:'showboxProxyAlternate', + adv_xprimeProxyUrl:'xprimeProxyUrl', + adv_vidzeeProxyUrl:'vidzeeProxyUrl', + adv_vidsrcProxyUrl:'vidsrcProxyUrl', + adv_moviesmodProxyUrl:'moviesmodProxyUrl' + }; + Object.entries(textMap).forEach(([formName,cfgKey])=>{ const el = f.elements[formName]; if(!el) return; const v = el.value.trim(); payload[cfgKey] = v? v : null; }); + const tmdbHidden = f.elements['tmdbApiKeysHidden']; + if (tmdbHidden){ + const raw = tmdbHidden.value.trim(); + payload.tmdbApiKeys = raw? raw.split(',').filter(Boolean) : []; + payload.tmdbApiKey = null; + } + try { + const r = await fetch('/api/config',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); + const js = await r.json(); + if(!js.success) throw new Error(js.error||'Save failed'); + setStatus('Saved ✔'); + fillForm(js); + } catch(e){ setStatus(e.message,true); } +} + +async function clearAll(){ + if(!confirm('Remove ALL overrides?')) return; + const payload = { port:null, defaultRegion:null, defaultProviders:[], minQualitiesRaw:null, excludeCodecsRaw:null, febboxCookies:null, + enableXprimeProvider:null, enable4khdhubProvider:null, enableMoviesmodProvider:null, enableMp4hydraProvider:null, enableVidzeeProvider:null, enableVixsrcProvider:null, + disableCache:null, enablePStreamApi:null, showboxUseRotatingProxy:null, disableUrlValidation:null, disable4khdhubUrlValidation:null, + showboxCacheDir:null, showboxProxyPrimary:null, showboxProxyAlternate:null, xprimeProxyUrl:null, vidzeeProxyUrl:null, vidsrcProxyUrl:null, moviesmodProxyUrl:null }; + try { + const r = await fetch('/api/config',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)}); + const js = await r.json(); + if(!js.success) throw new Error(js.error||'Clear failed'); + setStatus('Overrides cleared'); + fillForm(js); + } catch(e){ setStatus(e.message,true); } +} + +function setTheme(t){ + document.documentElement.dataset.theme = t; + localStorage.setItem('ns_theme', t); +} +function initTheme(){ + const saved = localStorage.getItem('ns_theme'); + setTheme(saved || 'dark'); +} +function toggleTheme(){ + setTheme(document.documentElement.dataset.theme === 'dark' ? 'light':'dark'); +} +function navTo(id){ + document.querySelectorAll('.panel').forEach(p=>p.classList.toggle('active', p.id===id)); + document.querySelectorAll('.nav-item').forEach(a=>a.classList.toggle('active', a.dataset.target===id)); + if(history.replaceState) history.replaceState(null,'', '#'+id); + if(id==='panel-status') loadServerStatus(); +} +function attachCoreListeners(){ + const saveBtn = document.getElementById('saveBtn'); + const reloadBtn = document.getElementById('reloadBtn'); + const clearBtn = document.getElementById('clearBtn'); + if(saveBtn) saveBtn.addEventListener('click', save); + if(reloadBtn) reloadBtn.addEventListener('click', reload); + if(clearBtn) clearBtn.addEventListener('click', clearAll); +} +function bindNavigation(){ + document.querySelectorAll('.nav .nav-item[data-target]').forEach(btn=>{ + btn.addEventListener('click', ()=> navTo(btn.dataset.target)); + }); + const themeBtn = document.querySelector('.nav .theme-toggle'); + if(themeBtn) themeBtn.addEventListener('click', toggleTheme); +} +function bindShellControls(){ + const burger = document.querySelector('.burger'); + if(burger) burger.addEventListener('click', ()=> toggleSidebar()); + const overlay = document.querySelector('.overlay'); + if(overlay) overlay.addEventListener('click', ()=> toggleSidebar(false)); +} +async function verifySession(){ + try { + const r = await fetch('/auth/session',{cache:'no-store'}); + const j = await r.json(); + if(!j.authenticated){ location.replace('/?expired=1'); } + } catch { location.replace('/?expired=1'); } +} + +async function loadServerStatus(){ + const metricsEl = document.getElementById('statusMetrics'); + const endpointsEl = document.getElementById('statusEndpoints'); + const provEnhanced = document.getElementById('statusProvidersEnhanced'); + if(!metricsEl) return; + metricsEl.textContent = 'Loading...'; + if(endpointsEl) endpointsEl.textContent = 'Loading...'; + if(provEnhanced) provEnhanced.innerHTML = '
Loading...
'; + try { + const r = await fetch('/api/status'); + if(!r.ok) throw new Error('Status fetch failed'); + const j = await r.json(); + if(!j.success) throw new Error('Status error'); + metricsEl.textContent = JSON.stringify(j.metrics, null, 2); + if(endpointsEl) endpointsEl.textContent = (j.endpoints||[]).join('\n'); + if(provEnhanced){ + provEnhanced.innerHTML = ''; + const header = document.createElement('div'); + header.className='prov-row header'; + header.innerHTML = 'NameEnabledCookie ReqCookie OKFunctionalNotes'; + provEnhanced.appendChild(header); + j.providers.forEach(p=>{ + const row = document.createElement('div'); + row.className = 'prov-row'; + row.dataset.provider = p.name; + row.innerHTML = `${p.name}`+ + `${p.enabled? 'on':'off'}`+ + `${p.cookieRequired? 'yes':'no'}`+ + `${p.cookieOk? 'ok':'missing'}`+ + `?`+ + ``; + provEnhanced.appendChild(row); + }); + } + } catch(e){ + metricsEl.textContent = 'Failed: '+e.message; + if(endpointsEl) endpointsEl.textContent = 'n/a'; + if(provEnhanced) provEnhanced.innerHTML = '
Status load failed
'; + } +} +async function runProviderFunctionalChecks(){ + const targetTmdb = '293660'; // TMDB ID provided + const provEnhanced = document.getElementById('statusProvidersEnhanced'); + const summary = document.getElementById('providerCheckSummary'); + if(!provEnhanced) return; + summary.textContent = 'Running checks...'; + const rows = Array.from(provEnhanced.querySelectorAll('.prov-row:not(.header)')); + let completed=0, passed=0; + for(const row of rows){ + const name = row.dataset.provider; + const funcBadge = row.querySelector('[data-role="functional"]'); + const notesEl = row.querySelector('[data-role="notes"]'); + if(funcBadge){ funcBadge.textContent='…'; funcBadge.className='badge'; } + if(notesEl) notesEl.textContent=''; + // Skip disabled providers + if(row.querySelector('.badge.ok, .badge.off') && row.children[1].textContent==='off'){ + if(funcBadge){ funcBadge.textContent='skip'; funcBadge.className='badge off'; } + completed++; continue; + } + try { + const r = await fetch(`/api/streams/${name}/movie/${targetTmdb}`); + if(!r.ok) throw new Error('HTTP '+r.status); + const j = await r.json(); + const isOk = j && Array.isArray(j.streams) && j.streams.length>0; + if(isOk){ + passed++; + if(funcBadge){ funcBadge.textContent='ok'; funcBadge.className='badge ok'; } + if(notesEl) notesEl.textContent = `${j.streams.length} streams`; + }else{ + if(funcBadge){ funcBadge.textContent='none'; funcBadge.className='badge fail'; } + if(notesEl) notesEl.textContent = 'No streams array'; + } + }catch(err){ + if(funcBadge){ funcBadge.textContent='fail'; funcBadge.className='badge fail'; } + if(notesEl) notesEl.textContent = err.message; + } + completed++; + summary.textContent = `Progress: ${completed}/${rows.length} (passed: ${passed})`; + } + summary.textContent = `Checks complete: ${passed}/${rows.length} passed`; +} +document.addEventListener('DOMContentLoaded', ()=> { + initTheme(); + attachCoreListeners(); + bindNavigation(); + bindShellControls(); + const logoutBtn = document.getElementById('logoutBtn'); + if(logoutBtn){ + logoutBtn.addEventListener('click', async ()=>{ + try { await fetch('/auth/logout',{method:'POST'}); } catch {} + // Use replace to avoid creating extra history entry + location.replace('/?loggedOut=1'); + }); + } + reload(); + const h = location.hash.slice(1); + navTo(h||'panel-core'); + // Revalidate session on back-forward cache navigation or visibility + window.addEventListener('pageshow', (e)=>{ + if(e.persisted){ verifySession(); } + }); + document.addEventListener('visibilitychange', ()=>{ if(document.visibilityState==='visible') verifySession(); }); + // Advanced flag checkbox change -> validation + document.getElementById('advFlags')?.addEventListener('change', (e)=>{ + if(e.target.matches('.adv-flag-item input[type="checkbox"]')) { + validate(); + } + }); + const rsb = document.getElementById('refreshStatusBtn'); + if(rsb) rsb.addEventListener('click', loadServerStatus); + const rpc = document.getElementById('runProviderChecksBtn'); + if(rpc) rpc.addEventListener('click', runProviderFunctionalChecks); +}); +function toggleSidebar(force){ + const sb = document.getElementById('sidebar'); + const showing = force !== undefined ? force : !sb.classList.contains('open'); + sb.classList.toggle('open', showing); + document.querySelector('.overlay').classList.toggle('show', showing); +} +function validate(){ + const f = document.getElementById('cfgForm'); + const errors = []; + const qp = document.querySelector('input[name="qualityPreset"]:checked'); + if(qp && qp.value==='custom') { + const mq = f.elements['minQualitiesRaw'].value.trim(); + if(mq && /[\{\[]/.test(mq)) { try { JSON.parse(mq); } catch(e){ errors.push('Min Qualities invalid JSON'); markInvalid(f.elements['minQualitiesRaw']); } } + } + const codecPreset = document.querySelector('input[name="codecPreset"]:checked'); + if(codecPreset && codecPreset.value==='advanced') { + const ec = f.elements['excludeCodecsRaw'].value.trim(); + if(ec && /[\{\[]/.test(ec)) { try { JSON.parse(ec); } catch(e){ errors.push('Exclude Codecs invalid JSON'); markInvalid(f.elements['excludeCodecsRaw']); } } + } + const p = f.elements['port'].value.trim(); + if(p) { const pn = Number(p); if(!(pn>0 && pn<=65535)) { errors.push('Port must be 1-65535'); markInvalid(f.elements['port']); } } + const dp = f.elements['defaultProviders'].value.trim(); + if(dp && !/^[a-z0-9_,\-\s]+$/.test(dp)) { errors.push('Default Providers contains invalid chars'); markInvalid(f.elements['defaultProviders']); } + const sum = document.getElementById('validationSummary'); + if(errors.length){ sum.textContent = errors.join(' • '); sum.classList.add('has-errors'); } + else { sum.textContent=''; sum.classList.remove('has-errors'); } + document.getElementById('saveBtn').disabled = errors.length>0; + return errors.length===0; +} +function markInvalid(el){ el.classList.add('invalid'); setTimeout(()=>el.classList.remove('invalid'), 3000); } +document.addEventListener('input', (e)=>{ + if(e.target.closest('#cfgForm')) validate(); +}); +document.addEventListener('change', (e)=>{ + const t = e.target; + if(t.name === 'qualityPreset') { + const customField = document.querySelector('textarea[name="minQualitiesRaw"]'); + if(t.value === 'custom') { customField.disabled = false; } else { customField.disabled = true; customField.value=''; } + validate(); + } + if(t.name === 'codecPreset') { + const ta = document.querySelector('textarea[name="excludeCodecsRaw"]'); + if(t.value==='advanced') { ta.disabled=false; if(!ta.value.trim()) ta.value = JSON.stringify({excludeDV:false,excludeHDR:false}); } + else { ta.disabled=true; ta.value=''; } + validate(); + } +}); +async function renderProviderMatrix(merged){ + if(!merged){ try { const data = await fetchConfig(); merged = data.merged||{}; } catch { return; } } + const container = document.getElementById('providerMatrix'); if(!container) return; + const defaults = (merged.defaultProviders||[]).map(s=>s.toLowerCase()); + const providers = [ + ['showbox','enableShowboxProvider'], + ['4khdhub','enable4khdhubProvider'], + ['moviesmod','enableMoviesmodProvider'], + ['mp4hydra','enableMp4hydraProvider'], + ['vidzee','enableVidzeeProvider'], + ['vixsrc','enableVixsrcProvider'], + ['xprime','enableXprimeProvider'] + ]; + container.innerHTML = providers.map(([name,flag])=>{ + const enabled = merged[flag] !== false; + const isDefault = defaults.includes(name); + return `
` + +`` + +`${name}` + +`` + +`
`; + }).join(''); + const hidden = document.querySelector('input[name="defaultProviders"]'); if(hidden) hidden.value = defaults.join(','); + if(!container._bound){ + container.addEventListener('click', async (e)=>{ + const btn = e.target.closest('button[data-action]'); if(!btn) return; + const item = btn.closest('.pm-item'); if(!item) return; + const prov = item.dataset.prov; const flag = item.dataset.flag; + let data; try { data = await fetchConfig(); } catch(err){ setStatus('Provider fetch failed',true); return; } + const mergedNow = data.merged||{}; + let defaultsNow = (mergedNow.defaultProviders||[]).slice(); + const patch = {}; + if(btn.dataset.action==='toggle-enable'){ + const currentlyEnabled = item.dataset.enabled==='true'; + patch[flag] = !currentlyEnabled; + if(currentlyEnabled){ defaultsNow = defaultsNow.filter(d=>d!==prov); patch.defaultProviders = defaultsNow; } + } else if(btn.dataset.action==='toggle-default'){ + const isDefault = item.dataset.default==='true'; + if(isDefault){ defaultsNow = defaultsNow.filter(d=>d!==prov); } + else { if(!defaultsNow.includes(prov)) defaultsNow.push(prov); patch[flag] = true; } + patch.defaultProviders = defaultsNow; + } + try { + await fetch('/api/config',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(patch)}); + const updated = await fetchConfig(); + fillForm(updated); + renderProviderMatrix(updated.merged); + reloadLiveOnly(); + } catch(err){ setStatus('Update failed: '+err.message,true); } + }); + container._bound = true; + } +} +function reloadLiveOnly(){ + fetchConfig().then(c=>{ + document.getElementById('currentCfg').textContent = JSON.stringify(c.merged||{},null,2); + document.getElementById('overrideCfg').textContent = (c.override && Object.keys(c.override).length)? JSON.stringify(c.override,null,2):'(none)'; + }).catch(()=>{}); +} + +// No globals exported; all handlers bound programmatically +})(); diff --git a/public/login.js b/public/login.js new file mode 100644 index 0000000..7d62f8d --- /dev/null +++ b/public/login.js @@ -0,0 +1,127 @@ +/* eslint-env browser */ +(function(){ + const $ = sel => document.querySelector(sel); + async function checkSession(){ + try { + const r = await fetch('/auth/session'); + const j = await r.json(); + if (j.authenticated) { + window.location.href = '/config.html'; + } + } catch(e) { /* ignore */ } + } + + async function login(username, password){ + const status = $('#status'); + status.textContent = 'Authenticating...'; + status.className = 'status'; + try { + const r = await fetch('/auth/login', { method:'POST', headers:{ 'Content-Type':'application/json' }, body: JSON.stringify({ username, password }) }); + const j = await r.json(); + if (!j.success) { + if (j.error === 'LOCKED' || j.error === 'TOO_MANY_ATTEMPTS') { + showLockout(j.retryAfter); + status.textContent = 'Locked due to excessive attempts'; + } else if (j.error === 'INVALID_CREDENTIALS') { + status.textContent = 'Invalid credentials'; + if (typeof j.remaining === 'number') { + status.textContent += ` (${j.remaining} attempts left)`; + } + } else { + status.textContent = j.error || 'Login failed'; + } + status.classList.add('error'); + return false; + } + status.textContent = 'Success! Redirecting...'; + status.classList.add('success'); + setTimeout(()=>{ window.location.href = '/config.html'; }, 400); + return true; + } catch (e) { + status.textContent = 'Network error'; + status.classList.add('error'); + return false; + } + } + + // Lockout handling + let lockoutTimer = null; + function showLockout(retryAfterSeconds){ + if (!retryAfterSeconds || retryAfterSeconds <= 0) return; + const banner = $('#lockoutBanner'); + const countdownEl = $('#lockoutCountdown'); + banner.style.display = 'block'; + const end = Date.now() + (retryAfterSeconds * 1000); + if (lockoutTimer) clearInterval(lockoutTimer); + lockoutTimer = setInterval(()=>{ + const remain = end - Date.now(); + if (remain <= 0){ + clearInterval(lockoutTimer); + banner.style.display = 'none'; + countdownEl.textContent = '00:00'; + return; + } + const sec = Math.ceil(remain/1000); + const m = String(Math.floor(sec/60)).padStart(2,'0'); + const s = String(sec%60).padStart(2,'0'); + countdownEl.textContent = `${m}:${s}`; + }, 1000); + } + + async function changePassword(oldPassword, newPassword){ + const pwStatus = $('#pwStatus'); + pwStatus.textContent = 'Updating...'; + pwStatus.className = 'status'; + try { + const r = await fetch('/auth/change-password', { method:'POST', headers:{ 'Content-Type':'application/json' }, body: JSON.stringify({ oldPassword, newPassword }) }); + const j = await r.json(); + if (!j.success) { + pwStatus.textContent = j.error || 'Update failed'; + pwStatus.classList.add('error'); + return; + } + pwStatus.textContent = 'Password updated'; + pwStatus.classList.add('success'); + setTimeout(()=>{ $('#pwForm').reset(); }, 600); + } catch(e){ + pwStatus.textContent = 'Network error'; + pwStatus.classList.add('error'); + } + } + + document.addEventListener('DOMContentLoaded', () => { + // Flash messaging based on query params + const params = new URLSearchParams(location.search); + const status = $('#status'); + if(params.has('loggedOut')) { status.textContent = 'Logged out successfully'; status.classList.add('success'); } + else if(params.has('expired')) { status.textContent = 'Session expired. Please login again.'; status.classList.add('error'); } + if(params.has('loggedOut') || params.has('expired')) { + // Remove params from URL without reloading + history.replaceState(null,'', location.pathname); + } + checkSession(); + $('#loginForm').addEventListener('submit', e => { + e.preventDefault(); + const u = $('#username').value.trim(); + const p = $('#password').value; + if (!u || !p) return; + login(u,p); + }); + $('#togglePw').addEventListener('click', () => { + const chg = $('#pwChange'); + const visible = chg.style.display === 'block'; + chg.style.display = visible ? 'none' : 'block'; + }); + $('#pwForm').addEventListener('submit', e => { + e.preventDefault(); + const oldPw = $('#oldPw').value; + const newPw = $('#newPw').value; + if (newPw.length < 8) { + $('#pwStatus').textContent = 'Password too short'; + $('#pwStatus').classList.add('error'); + return; + } + changePassword(oldPw, newPw); + }); + }); +})(); diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..511a2e8 --- /dev/null +++ b/public/style.css @@ -0,0 +1,366 @@ +/*TMDB Embed Admin Panel Styles */ +:root { + --bg: #f7f9fc; + --bg-alt: #ffffff; + --bg-accent: #eef2f7; + --border: #d8e0ea; + --border-strong: #b6c2cf; + --text: #1f2933; + --text-dim: #5a6b7b; + --primary: #2563eb; + --primary-accent: #1d4ed8; + --primary-fg: #ffffff; + --danger: #dc2626; + --warn: #b45309; + --radius-sm: 4px; + --radius: 8px; + --shadow: 0 1px 2px rgba(0,0,0,.05), 0 4px 16px -4px rgba(0,0,0,.08); + --mono: "SFMono-Regular",Consolas,Menlo,monospace; + --transition: .18s cubic-bezier(.4,0,.2,1); +} +:root[data-theme='dark'] { + --bg: #0f141a; + --bg-alt: #161d25; + --bg-accent: #1e2630; + --border: #29323d; + --border-strong: #3a4654; + --text: #e5edf3; + --text-dim: #a0b1c0; + --primary: #3b82f6; + --primary-accent: #1d4ed8; + --primary-fg: #f0f6ff; + --danger: #f87171; + --warn: #f59e0b; + --shadow: 0 2px 4px rgba(0,0,0,.4), 0 8px 28px -6px rgba(0,0,0,.55); +} +* { box-sizing: border-box; } +html, body { height: 100%; } +body { + margin: 0; + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif; + background: var(--bg); + color: var(--text); + display: flex; + min-height: 100vh; + overflow: hidden; /* Prevent body scroll; main will scroll */ +} +.bmc-btn { + min-width: 50px !important; + color: #ffffff !important; + background-color: #5F7FFF !important; + height: 40px !important; + border-radius: 12px !important; + font-size: 12px !important; + font-weight: Bold !important; + border: none !important; + padding: 0px 24px !important; + line-height: 27px !important; + text-decoration: none !important; + display: inline-flex !important; + align-items: center !important; + font-family: 'Bree Serif', cursive !important; + -webkit-box-sizing: border-box !important; + box-sizing: border-box !important; +} +.bmc-btn-container{ + text-align: center; +} +::-webkit-scrollbar { width: 10px; height: 10px; } +::-webkit-scrollbar-track { background: var(--bg-alt); } +::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 20px; } +::-webkit-scrollbar-thumb:hover { background: var(--primary); } +.sidebar { + width: 250px; + background: linear-gradient(180deg, var(--bg-alt), var(--bg-accent)); + border-right: 1px solid var(--border); + display: flex; + flex-direction: column; + padding: 16px 14px 10px; + gap: 12px; + position: fixed; + top: 0; left: 0; bottom: 0; + overflow-y: auto; + z-index: 45; +} +/* Mobile burger */ +.burger { + position: fixed; top:10px; left:12px; z-index:60; background: var(--primary); color: var(--primary-fg); + border:1px solid var(--primary-accent); border-radius: var(--radius-sm); padding:8px 10px; font-size:1rem; cursor:pointer; display:none; + box-shadow: var(--shadow); +} +.overlay { position: fixed; inset:0; background:rgba(0,0,0,.45); backdrop-filter: blur(2px); z-index:40; display:none; } +.overlay.show { display:block; } +#sidebar { transition: transform var(--transition); } +@media (max-width: 880px){ + .burger { display:block; } + #sidebar { position:fixed; inset:0 auto 0 0; transform: translateX(-100%); z-index:50; width:240px; } + #sidebar.open { transform: translateX(0); } + body { padding-left:0; } + .actions-bar { left:0; } +} +.brand { + font-weight: 700; + font-size: 1.05rem; + letter-spacing: .5px; + display: flex; + align-items: center; + gap: 8px; +} +.pill { background: var(--primary); color: var(--primary-fg); padding: 2px 8px; border-radius: 999px; font-size: .65rem; letter-spacing: .5px; text-transform: uppercase; } +.nav { display: flex; flex-direction: column; gap: 4px; } +.nav-item { + background: transparent; + border: 1px solid transparent; + color: var(--text-dim); + padding: 10px 12px; + text-align: left; + border-radius: var(--radius-sm); + font-size: .85rem; + font-weight: 600; + letter-spacing: .5px; + cursor: pointer; + display: flex; + align-items: center; + gap: 8px; + transition: background var(--transition), color var(--transition), border-color var(--transition); +} +.nav-item:hover { background: var(--bg-accent); color: var(--text); } +.nav-item.active { background: var(--primary); color: var(--primary-fg); } +.nav-item.theme-toggle { margin-top: 12px; } +.nav-item#logoutBtn { border:1px solid var(--danger); color: var(--danger); font-weight:700; } +.nav-item#logoutBtn:hover { background: var(--danger); color:#fff; } +.grow { flex-grow: 1; } +.side-footer { font-size: .65rem; opacity: .6; line-height: 1.4; text-align: center;} +.main { + flex: 1; + display: flex; + flex-direction: column; + position: relative; + min-width: 0; + max-width: 1400px; + margin-left: 250px; /* compensate for fixed sidebar */ + height: 100vh; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} +.panels { flex: 1; display: flex; flex-direction: column; padding: 28px 36px 140px; gap: 0; } +.panel { display: none; animation: fade .35s ease; max-width: 760px; } +.panel.active { display: block; } +@keyframes fade { from { opacity: 0; transform: translateY(6px);} to { opacity:1; transform:translateY(0);} } +.panel h1 { margin: 0 0 1.2rem; font-size: 1.4rem; } +.field { margin-bottom: 18px; } +.field label { font-size: .75rem; letter-spacing: .5px; text-transform: uppercase; font-weight: 700; display: flex; flex-direction: column; gap: 6px; color: var(--text-dim); } +.field input[type=text], .field textarea, .field select { + background: var(--bg-alt); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + padding: 10px 12px; + font-family: var(--mono); + color: var(--text); + font-size: .85rem; + outline: none; + transition: border-color var(--transition), + background var(--transition); + resize: vertical; +} +.field select { cursor: pointer; appearance: none; -webkit-appearance: none; line-height:1.2; padding-right: 36px; background-image: linear-gradient(45deg, transparent 50%, var(--text-dim) 50%), linear-gradient(135deg, var(--text-dim) 50%, transparent 50%); background-position: calc(100% - 20px) 16px, calc(100% - 14px) 16px; background-size: 6px 6px, 6px 6px; background-repeat: no-repeat; } +.field input[type=text]:focus, .field input[type=password]:focus, .field textarea:focus, .field select:focus { border-color: var(--primary); outline: none; } +.field select:disabled { opacity:.55; cursor: not-allowed; } +textarea { min-height: 110px; } +.hint { + font-size: .65rem; + opacity: .75; + margin-top: -4px; + letter-spacing: .5px; + text-transform: none; + font-weight: 500; + display: flex; + flex-direction: column; + gap: 6px; + color: var(--text-dim); +} +.login-hint { + font-size: .65rem; + opacity: .75; + margin-top: -4px; + letter-spacing: .5px; + text-transform: none; + font-weight: 500; + display: flex; + flex-direction: column; + gap: 6px; + color: orange; +} +.provider-toggle-list { display:flex; flex-wrap:wrap; gap:8px; margin-top:8px; } +/* Uniform provider width: auto-fill responsive sizing */ +.prov-item { background: var(--bg-alt); border:1px solid var(--border); padding:6px 10px; border-radius: var(--radius-sm); font-size:.65rem; letter-spacing:.5px; text-transform:uppercase; display:flex; align-items:center; gap:6px; cursor:pointer; user-select:none; box-shadow: var(--shadow); flex: 0 0 132px; width:132px; justify-content:center; } +.prov-item input { accent-color: var(--primary); cursor:pointer; } +.prov-item:hover { border-color: var(--primary); } +.disabled-hint { font-style:normal; color: var(--warn); } +/* Quality presets */ +.quality-presets, .codec-toggles { display:flex; flex-wrap:wrap; gap:10px; margin-top:10px; } +.quality-presets label, .codec-toggles label.codec-item { text-align: center; background: var(--bg-alt); border:1px solid var(--border); padding:6px 12px; border-radius: var(--radius-sm); font-size:.65rem; letter-spacing:.5px; text-transform:uppercase; display:flex; align-items:center; gap:6px; cursor:pointer; user-select:none; box-shadow: var(--shadow); } +.quality-presets .q-item { flex:0 0 100px; justify-content:center; } +.quality-presets .q-item.adv { background: var(--bg-accent); } +.quality-json { display:block; width:100%; margin-top:10px; font-size:.65rem; font-family: var(--mono); min-height:90px; background: var(--bg-alt); border:1px solid var(--border); border-radius: var(--radius-sm); padding:10px 12px; } +.quality-json[disabled] { opacity:.4; } +.json-adv { + display: block; + width: 100%; + margin-top: 10px; + font-size: .65rem; + font-family: var(--mono); + min-height: 90px; + background: var(--bg-alt); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + padding: 10px 12px; +} +.codec-presets { display:flex; flex-wrap:wrap; gap:10px; margin-top:10px; } +.codec-presets .c-item { background: var(--bg-alt); border:1px solid var(--border); padding:6px 12px; border-radius: var(--radius-sm); font-size:.65rem; letter-spacing:.5px; text-transform:uppercase; display:flex; align-items:center; gap:6px; cursor:pointer; user-select:none; box-shadow: var(--shadow); flex:0 0 130px; justify-content:center; } +.codec-presets .c-item.adv { background: var(--bg-accent); } +.codec-presets input[type=radio] { accent-color: var(--primary); cursor:pointer; } +.codec-presets .c-item:hover { border-color: var(--primary); } +.quality-presets input[type=radio], .codec-toggles input[type=checkbox] { accent-color: var(--primary); cursor:pointer; } +.quality-presets label:hover, .codec-toggles label.codec-item:hover { border-color: var(--primary); } +.quality-presets label.custom-q { position:relative; } +.quality-presets .mini { width:170px; margin-left:4px; font-size:.65rem; padding:6px 8px; font-family: var(--mono); } +.codec-toggles .json-adv { flex: 1 1 100%; margin-top:4px; font-size:.65rem; font-family: var(--mono); min-height:90px; display:block; } +.codec-toggles .json-adv[disabled] { opacity:.4; } +.codec-toggles label.adv { background: var(--bg-accent); } +.alert { padding: 12px 16px; border-radius: var(--radius-sm); margin: 20px 36px 0; font-size: .75rem; font-weight: 600; letter-spacing: .5px; background: var(--bg-accent); border: 1px solid var(--border); } +.alert.warning { color: var(--warn); border-color: var(--warn); background: rgba(180,83,9,.08); } +[data-theme='dark'] .alert.warning { background: rgba(245,158,11,.12); } +.actions-bar { + position: sticky; + bottom: 0; left: 0; right: 0; + background: linear-gradient(90deg,var(--bg-alt),var(--bg-accent)); + border-top: 1px solid var(--border); + display: flex; + gap: 14px; + align-items: center; + padding: 14px 36px; + backdrop-filter: blur(6px); + margin-left: 0; +} +button { font-family: inherit; } +button.primary { background: var(--primary); border: 1px solid var(--primary-accent); color: var(--primary-fg); } +button.primary:hover { background: var(--primary-accent); } +button.danger { background: var(--danger); border: 1px solid var(--danger); color: #fff; } +button.danger:hover { filter: brightness(.9); } +button { border-radius: var(--radius-sm); padding: 10px 18px; font-size: .75rem; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; border: 1px solid var(--border); background: var(--bg-alt); color: var(--text-dim); cursor: pointer; transition: background var(--transition), color var(--transition), border-color var(--transition), transform .15s ease; } +button:hover { background: var(--bg-accent); color: var(--text); } +.status { font-size: .7rem; letter-spacing: .5px; font-weight: 600; } +pre { background: var(--bg-alt); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 14px 16px; line-height: 1.35; font-size: .7rem; box-shadow: var(--shadow); overflow: auto; } +pre code { font-family: var(--mono); } +#currentCfg, #overrideCfg { max-height: 380px; } +::-moz-selection { background: var(--primary); color: var(--primary-fg); } +::selection { background: var(--primary); color: var(--primary-fg); } +@media (max-width: 880px) { + body { overflow: auto; } + .sidebar { position: fixed; inset:0 auto 0 0; width:210px; transform: translateX(-100%); transition: transform var(--transition); } + #sidebar.open { transform: translateX(0); } + .main { margin-left:0; height:auto; overflow-y:visible; } + .actions-bar { position: fixed; left:0; right:0; bottom:0; } + .panels { padding: 24px 20px 140px; } +} +/* Validation */ +.validation-summary { font-size:.65rem; margin-left:12px; color: var(--danger); font-weight:600; letter-spacing:.5px; } +.adv-flag-grid { display:flex; flex-wrap:wrap; gap:14px; margin:14px 0 28px; } +.adv-flag-item { position:relative; background: var(--bg-alt); border:1px solid var(--border); padding:16px 18px 14px; border-radius: var(--radius-sm); font-size:.55rem; letter-spacing:.55px; text-transform:uppercase; font-weight:700; display:flex; flex-direction:column; align-items:center; gap:10px; cursor:pointer; user-select:none; box-shadow: var(--shadow); width:170px; min-height:92px; transition: background var(--transition), border-color var(--transition), color var(--transition), transform .15s ease; } +.adv-flag-item:hover { border-color: var(--primary); } +.adv-flag-item.on { background: var(--primary); border-color: var(--primary-accent); color: var(--primary-fg); } +[data-theme='dark'] .adv-flag-item.on { background: var(--primary); } +.adv-flag-item input { appearance:none; -webkit-appearance:none; accent-color: var(--primary); width:15px; height:15px; border:2px solid var(--primary); border-radius:6px; display:inline-flex; align-items:center; justify-content:center; position:relative; background:transparent; cursor:pointer; margin-top:2px; } +.adv-flag-item input:focus-visible { outline:2px solid var(--primary); outline-offset:3px; } +.adv-flag-item input:checked { background: var(--primary); } +.adv-flag-item input:checked:after { width:7px; height:12px; border:2px solid var(--primary-fg); border-top:none; border-left:none; transform: rotate(45deg); position:absolute; } +.adv-flag-item span { text-align:center; line-height:1.25; display:block; width:100%; } +.adv-flag-item.on input { border-color: var(--primary-fg); } +.adv-group .field.small input { background: var(--bg-alt); border:1px solid var(--border); } +.adv-group .field.small input:focus { border-color: var(--primary); outline:none; } +.validation-summary.has-errors:before { content:'⚠ '; } +input.invalid, textarea.invalid { border-color: var(--danger)!important; animation: pulse-invalid 1.2s ease; } +@keyframes pulse-invalid { 0%{ box-shadow:0 0 0 0 rgba(220,38,38,.6);} 70%{ box-shadow:0 0 0 6px rgba(220,38,38,0);} 100%{ box-shadow:0 0 0 0 rgba(220,38,38,0);} } +.adv-flag-item input:checked { border-color: var(--primary); } +/* Provider Matrix */ +.provider-matrix { display:flex; flex-wrap:wrap; gap:10px; margin-top:10px; } +.pm-item { background: var(--bg-alt); border:1px solid var(--border); border-radius: var(--radius-sm); padding:6px 10px; display:flex; align-items:center; gap:8px; font-size:.65rem; letter-spacing:.5px; text-transform:uppercase; box-shadow: var(--shadow); } +.pm-item[data-enabled='false'] { opacity:.45; filter:saturate(.5); } +.pm-item .pm-enable, .pm-item .pm-default { background: var(--bg-accent); border:1px solid var(--border); padding:4px 8px; font-size:.7rem; cursor:pointer; border-radius: var(--radius-sm); line-height:1; display:flex; align-items:center; justify-content:center; } +.pm-item .pm-enable { color: var(--primary); } +.pm-item[data-enabled='false'] .pm-enable { color: var(--danger); } +.pm-item .pm-default { color: gold; } +.pm-item[data-default='false'] .pm-default { opacity:.5; color: var(--text-dim); } +.pm-item .pm-enable:hover, .pm-item .pm-default:hover { border-color: var(--primary); } +.pm-name { min-width:70px; } + +/* FebBox Cookie Manager */ +.cookie-add-row { display:flex; gap:10px; align-items:center; } +.cookie-add-row input { flex:1; } +.cookie-add-row button.small { padding:8px 14px; font-size:.65rem; } +.cookie-list { margin-top:10px; display:flex; flex-direction:column; gap:6px; background: var(--bg-alt); border:1px solid var(--border); padding:10px 12px; border-radius: var(--radius-sm); max-height:220px; overflow:auto; } +.cookie-item { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size:.65rem; background: var(--bg-accent); border:1px solid var(--border); padding:6px 10px; border-radius: var(--radius-sm); font-family: var(--mono); } +.cookie-item code { font-family: var(--mono); word-break: break-all; flex:1; } +.cookie-item button.remove { background: var(--danger); border:1px solid var(--danger); color:#fff; padding:4px 8px; font-size:.6rem; cursor:pointer; border-radius: var(--radius-sm); } +.cookie-item button.remove:hover { filter:brightness(.9); } +.cookie-list .empty { opacity:.55; font-size:.65rem; font-style:italic; } + +/* TMDB Keys Manager */ +.key-add-row { display:flex; gap:10px; align-items:center; } +.key-add-row input { flex:1; } +.key-add-row button.small { padding:8px 14px; font-size:.65rem; } +.key-list { margin-top:10px; display:flex; flex-direction:column; gap:6px; background: var(--bg-alt); border:1px solid var(--border); padding:10px 12px; border-radius: var(--radius-sm); max-height:220px; overflow:auto; } +.key-item { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size:.65rem; background: var(--bg-accent); border:1px solid var(--border); padding:6px 10px; border-radius: var(--radius-sm); font-family: var(--mono); } +.key-item code { font-family: var(--mono); word-break: break-all; flex:1; } +.key-item button.remove { background: var(--danger); border:1px solid var(--danger); color:#fff; padding:4px 8px; font-size:.6rem; cursor:pointer; border-radius: var(--radius-sm); } +.key-item button.remove:hover { filter:brightness(.9); } +.key-list .empty { opacity:.55; font-size:.65rem; font-style:italic; } + +/* Server Status Enhancements */ +.status-grid { display:grid; grid-template-columns: 1fr; gap:24px; margin-bottom:24px; } +.status-block { background: var(--bg-alt); border:1px solid var(--border); border-radius: var(--radius); padding:18px 20px 20px; box-shadow: var(--shadow); position:relative; } +.status-block h2 { margin:0 0 12px; font-size:1rem; letter-spacing:.5px; } +.status-block.wide { grid-column: 1 / -1; } +.status-pre { max-height:260px; } +.providers-table { display:flex; flex-direction:column; gap:6px; font-size:.65rem; } +.prov-row { display:grid; grid-template-columns: 110px 70px 90px 90px 110px 1fr; gap:6px; align-items:center; background: var(--bg-accent); border:1px solid var(--border); padding:6px 8px; border-radius: var(--radius-sm); } +.prov-row.header { background: var(--primary); color: var(--primary-fg); font-weight:700; text-transform:uppercase; letter-spacing:.5px; border-color: var(--primary-accent); } +.badge { display:inline-flex; align-items:center; justify-content:center; padding:2px 8px; border-radius:999px; font-size:.55rem; font-weight:600; letter-spacing:.5px; text-transform:uppercase; background: var(--bg-accent); border:1px solid var(--border); min-width:54px; } +.badge.ok { background:#065f46; border-color:#065f46; color:#ecfdf5; } +[data-theme='dark'] .badge.ok { background:#059669; border-color:#059669; } +.badge.fail { background:#7f1d1d; border-color:#7f1d1d; color:#fee2e2; } +[data-theme='dark'] .badge.fail { background:#dc2626; border-color:#dc2626; } +.badge.warn { background:#92400e; border-color:#92400e; color:#fef3c7; } +[data-theme='dark'] .badge.warn { background:#d97706; border-color:#d97706; } +.badge.off { background:#374151; border-color:#374151; color:#e5e7eb; } +[data-theme='dark'] .badge.off { background:#4b5563; border-color:#4b5563; } +.inline-actions { display:flex; gap:14px; align-items:center; } +.inline-actions button { margin:0; } +.functional-status { display:flex; flex-direction:column; gap:6px; margin-top:10px; } +.prov-row .spinner { width:14px; height:14px; border:2px solid rgba(255,255,255,.3); border-top-color:#fff; border-radius:50%; animation: spin 1s linear infinite; } +@keyframes spin { to { transform: rotate(360deg); } } + +/* Responsive adjustments for Server Status */ +/* Previously two-column; intentionally stacked for readability even on wide screens */ +/* If a future toggle is desired, we can add a class to re-enable multi-column */ +@media (max-width: 760px){ + .prov-row { grid-template-columns: 90px 60px 70px 70px 90px 1fr; font-size:.55rem; } + .status-block { padding:14px 14px 16px; } + .status-block h2 { font-size:.9rem; } + .badge { min-width:40px; padding:2px 6px; font-size:.5rem; } +} +@media (max-width: 560px){ + .providers-table { gap:10px; } + .prov-row.header { display:none; } + .prov-row { grid-template-columns: 1fr 1fr; grid-template-areas: 'name name' 'enabled cookieReq' 'cookieOk functional' 'notes notes'; position:relative; padding:10px 12px; } + .prov-row strong { grid-area: name; } + .prov-row > span:nth-child(2){ grid-area: enabled; } + .prov-row > span:nth-child(3){ grid-area: cookieReq; } + .prov-row > span:nth-child(4){ grid-area: cookieOk; } + .prov-row > span:nth-child(5){ grid-area: functional; } + .prov-row > span:nth-child(6){ grid-area: notes; justify-self:start; } + .prov-row { background: var(--bg-alt); } + .providers-table .prov-row { border:1px solid var(--border); } + .prov-row strong { font-size:.7rem; letter-spacing:.5px; } +} diff --git a/screenshots/Screenshot 2025-09-16 174931.png b/screenshots/Screenshot 2025-09-16 174931.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0d5def9f234e4250f4cd43bf40fe5d63b9b115 GIT binary patch literal 21328 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�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 z�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 AZU6uP literal 0 HcmV?d00001 diff --git a/screenshots/Screenshot 2025-09-16 175020.png b/screenshots/Screenshot 2025-09-16 175020.png new file mode 100644 index 0000000000000000000000000000000000000000..f6d30e8f5356b040a97202d4e0acf72a55ba9925 GIT binary patch literal 67462 zcma&O2UJr_7d8x{pn@RMyMpv4Aib$H5fG5xn-F?0p#>DFK@gD+Mnpk+?@f9qAiahj zYAB(F5ctBqSMPoQ^?z%9XRRz&&N-RcGqY!x=h;J~#!IC;w`p(V;NaX*elGtC2j>O^ z2M3SkCO-B~Z-KJ__7ASdE2U>RMT7Jk*e}-sPt~5{;FQJ^o?G0&e!u1V+`t0|hq&$P zgWKiu<24S><#%QIr`kZ%?Kz)d?J?Bl{z*pJd)`B?l0yo8KT^``+8UaVMWUl3Q#oig zAC3QrMCF#Uwj5WozFR73td2lHE=n<^&Ld?k$o{TPhfZvWtHhQSjH^9kq{ zdM;fYUb{Lg=|d@n-YXa`3lt@b!|z`{vZTgm4MnFvApL!bKQkW0jSK5^C64%gb(7|F z0POZuwR$kjzpwr5t6M~Jwb0*pnE$@@>4fL^oqIu<9dHeA+Y-0eV6Gxy;Cm%!&fm|N z_suIDVQP_?zrOfNF%l(#Keh%Ae)!#E1pNc9`UiJD3#k~&|Gr|Rcx6;Vaz;VFC5=1v z7|V-us1|To$F?pFo+m(`p{%^0irBsjsyod7K2>QrxH69ON(JvEBzWUQ_3{I9#I3n9Fl{)N=Vdb6DBcRk> zco|&|gW14Q7I#M5KZA3>E>(L!F1G1JB3xmGL$W3n8U#wCfP1>fOuMIy?FJ+t3Bzp+ zSvvZ%g$}BP97Jxxf<}1GAn415G63put>xR8BLz)0hI6~-K}X*yI>OaUQ=fXg45y_ECHNng@Ih zH``3Rv(P0+!*De^>hGa;FOG8HGRibZ+qrxz5s*EWJ)nv^%}2>gIIK&c!|(HMJ!A{r zxy)(Oq%5*xkU<*j1|UU(^0vY|e}R30l=q2GQ?JE z`&vbaCCyyZY@AZao8EX_EOzbq2KgV+yHJF&n-DP4~dRmE4vSDIQ zf@CpW!Y8l9Q@q92L9uUo@Q-vT6j#wB+fR3QDR4-|?I40?{vS_Dz$0s((rLxxU}mBp&EIJV81W9wWJ7AcJ9}MyIM@+L={b=(9d~TWY`_ z%D_L}aL4=}OWChr%LCX&qH%D46Dd63V)sN&W}Lwz%KIDwaA>^uXA=P3Q@q30TdIUD zql=A|`96$WiNy!Y9`9UVDRZ}W4Osv!N{-RPJ3<`_J4P$kJc+?R5^!$pf(nn|f7fhq zl)ykM4+=Aogbboik3<8J!e+&%Q54|Mt7Us+B9fsnqTAzD>+PIi84JT7kj@3d3u-r$ zfv)q;q83M|AOw#jXsSHm0Ns7|%Pu7QU=Y&scy}#hZ+avpq%DTjY2HSy=lxP8Pbvza z>&&d}mo*+pJl|C`;4m=|X1EK5)>fKE{@#4grE1^iwzjAa;~mQ}FAIyrG4V9IO+B0z z#uF+0wx)LzKbERW<#fNk!%(#_P6SBH{Z=?81L^Uyi&EgSB0vTq`$)TtnU@!0U=f&F zxqMKvGjdzT=E>!o!^5%*TC#DM9+Nzj*@DUvdW;&_MS0MVfej@ltueB>g(kXLVvzS1 z`>C`e<=gJ$RzO4<2a=Fcv|$Yy;Q$mkf0w3v02q09YXAqLp*d-aRn$JlN9&P}1a`2V^Cge|GBBe2 z5{emJm#E_%y+5}1o|5+ffaMdX-xtvPZs6%@zk0zhnhbmrw)d9fpo3SFlr77lJNKk6 zATVOynzcblfB&A^TX@VLu#% zS8zP*FSl4hnX!ZP%J${>F4>F8c%3vGkw+GINiW_!J0%RKL(L@F55Q0tqY^Oa510RH zbD4uoS|(NrjvVAWSvt+mqAOc?U|1FMeic8P~IKnfC)>=Wm6^1ku zkLeEr&?=R1DqrLJHKeH7{;_nNho`B!38tb&t8n?cgV;>UNRX*r($3A!W>jji9?wc` zUw`WKSPHykDXsX_uR~myhInhe60vK|QuvY1G1VFXG%_m}G4Oxv;%{KE zq(_f)|K56}kvS|H$SE9~1A~~#GvoB~

3}aMQ8r0o{gk%`1EUHJ#s>ul&r+d`!%H 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

  • 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 PNkLP}+(eT4cDeM4=l@L9s70kD{YTXJSE2@p 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
    1IX$%EcC{w7mJQpV-6~BxB1djXL!VTjZ|+ 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 literal 0 HcmV?d00001 diff --git a/screenshots/Screenshot 2025-09-16 175033.png b/screenshots/Screenshot 2025-09-16 175033.png new file mode 100644 index 0000000000000000000000000000000000000000..aa2d5ca8ad52300af569130319673a125e8c5684 GIT binary patch literal 103572 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 KfVuBj%-;dJS9&`D literal 0 HcmV?d00001 diff --git a/screenshots/Screenshot 2025-09-16 175040.png b/screenshots/Screenshot 2025-09-16 175040.png new file mode 100644 index 0000000000000000000000000000000000000000..d710ae98fc4e9bd442ff633fff985b20f8457c8e GIT binary patch literal 114075 zcmagG2Ut^C*EWnIFbIN(^frQkNbemiRHck4y$b}84g#SC6$Pau(o0kjkluTh8bXM) z&})Fu0))^*`3^JA%=5hO|9{`P6t3hXd#}A$+iTtT;lm#~>esF^UnL?Ux~8e2qDMqT zl14;CeCIb(;GOTUl->isE_vyxKOidZXI%weT(Q5eeV>S^EQaF5ngn=F?yh0%MMOl^ ze)0cOw_Bbq5z+ZKO_lr4z!n?RzJbs5&(3k986RWS+`b&lT;^20!gA+p>(z*QejgHw z-|G`k>#DcbitCH7*50k%-+XiV4ap~-M^9rpNniiGa^(T}s(4CWi}Gfl?J_9zEBVL8 z(_I>5I$ri*#%pVeDKwtiKC(W_H0}K}ch?#g%8>NJ_WjuRe_a~SB-gSBKYMruh}X%g z^YtNZwu&hOG_v))##mJDa-OQGs{D277$7FRvD!qpxeYtn7~I_Gzwb(n3naX;cDqjV z*CiW$c=yA8&h;d?i`$J~cOCE682>#$v^6VN5SH;)T<@cJgdQI&o|^2}H)&{&5PuG~ zllu2`D!m3BwqAD#;zncT_vs898@spy!hgy9Uc)gW*_o=yiABJ9ed=y8*e`05@bAsl zK`~}MzOjnW|BRLW(y`q5F3FN)#NQ))5_BpbZ|-vW99c(NybzvL0iKKd``-IcH2=4o zaW=wPG<}p&svZH4Z+Bt^<8-V~WEB6IYf)Nm-_}b+T!Q}M-p!gC6}fjf^zO~Sml`+Q zlQ&sg<;X~yt2PF2uch=Gw*);J7X@>*=~(C+A^#vYrmh1suNi*A2~q3;ksSFcgj z1IhVpIk{bhA>p^Uf-;(nv-QN+q+ElZ4_U?ZSs_Z7_ffB0`ZlC4gNi|5@dECE5%JxY zRm6hO{G=OHb7K2Eq#&n!QCLxvZ+V@LSCk85L z50aQB7Xx3RfF5>5n?K~x84i$^CdRR|8X zP3`4wQs4h;m2u&B`KU5kf~n5*va)d{S_J0W{bNlH$I+Mp>q+Hd z$zB!j!f9!i{?sk|?Vn}Q(7||l`w5U<%n0-jZm0^PuRQS%)SEUWDKq4}#UV7YS88cR z*iXoFjYz-2rWcgzK>yd2eB5>HhjWuMLTigvVJeFfG_vE)=QU^Zdtqv^s3LjC>3VUm zhLK8_M19?eo<;-q2I*p%A0g4tFowO>!pJVCxTyr{<>;||^ zsft-dt}!I&WS)SPdX+Y-&~=odwl_dL5qH^n(lx^#Urepm5%S0^24wy|-8H)Tyw|8k zRfnA5{!4$0H83F&jmRO(T2&oGDk84fOa5Q&${etKw(L`+**`ba3yKc8%pKXK{7f3n z$3ShT3KDPZn-QT_J}+&liHco~CiB^++S8tNF?hGM?Zhz^9zi6XKuSF$=jP6eXAn~A z`$j>cL&fFLQHPwMD!H%04lP-^<%XUWHBEHZBGrHQ-0b%FLNCM_#HSXv$WU6U@` z#>?8UO%kPgN6A=}wfdNfl@%wOSDqU75BlHc{QI)&ykteHC!$*^K%W(aHL1SD=Yo7L zv28WF+$x1CzUK3rD?{@W9Aw7mldE=S&Tx*ZQR7kRmJ$B+1y5$&gZ+Ga4Hnm>r<2_b z6K;=mH%}mv1*3u8sUmz-%H&zJG;ANDhPX6$M8^OJo{ZU^q}lj;AoW^QK$Nc*9@f(H>1$pBnLME2QVa#F_%EfqoVdDbNC-gzMi6KO2*)n0vs0ox@ zRTx@zaAWi!{|t45*%`{zGgl1(xz<$YP0!{3L?!lMvFI4Ol1T6M|42XyVkQ;iL^HOl zJWkcJ0YjsW##8dUc^#ljkCciy22!*Tg=io{myleZLoYqX+HKino96XT!te;hz$LO9P4w+$Tl^$Msvp* z!*PSlf_(k8`rq!)si$^vX5e3adRHN7GRm59(Uz?`thcYw)Tcqd7j=~J%;d*G znLXccZb@i<|2mrS=TJRcZ7I)+Q0@C_ap7I_FP}4#X8yPwkk@B6KGe?3GPS>K!<@1_ z-#KuUz2&uywEmlk&h#rf01Q z_WrA*_3t~C>%hw~29s4miZ7k#>|we>9}8NYMwdM%Up**Z$9z%y3Ja%XAVR!2@|#Ec zO)2KZ77)Oik>W=_4G~I$5y}4g?5hFktbL;3TN$px2X}3&gOo7+GIc9A`HG$R~_RW4X-gK@Cyc+-V}9t$&RVU zEp*SFMNk->#7CGRanKga_09W7Cr4UteS{*=SJ+T+A7=AD39xZ+T|&AHTl#R5w}3Bo zFQzbY0D54#9y8r!Hrd_IpiIA2p$q4nX%tEtXljgA!2cB*pNwxN?RXqU79^`!-_lOim2Z?t-E33RL_6XtHOE zzbaL;$Tr@sI&pJ$>G}7xiLsfRdW(DRGG5S&GYbXW+2DKmLLw?_r_H)`q)DMeKG+;I zGht38l>VtN&rx%uznsS?)07eUF8(7E!GLp|1T_M7wN?mDPgMz7gVamoFU4+2)&~1r zwwcw+c7t;=kM2GdY+H=`LLxA+_!WufGb5OAo|@2kc-RZWYwE{JC)-M0+4~)qxvJ`6 z^85>2T@QaB+TLovdbpI=MiQ^LvIo8z-(2_rO0QJBY2MQ$eq&`1dDG(fZnQiZ{m;^g zvKW@lPzd{i+4j`J-A+p?=IaVj3SMsfXv~e3@jmt0L{+mR&l?z}j2{)2iD$|Uas>%V z+-c@hhoBo3qxDRZf*(%Dxq0h#zBv)-Kc+ajZ?-(Gb@vqGuaU=^>+pL}#aEaHq#R^5 zbR-41%CFdV4BxgeXGS9I83ya4W0W&it$z^6(+{++`Ub`lwbpu3)H%(4CoJhn3 z%}Q#CM(5OgymRNS?$*g)-b)uEmiA5Wj&KSBI3YcIyp4W&FCE_7#WL3XUKsKcEit#M zyey78c~Gn{)Lu-eqOlJUZ70QUVowpm9uQ z!)5PB*bKJp}th=yoC~sW4309S@Np)xPrqL?#!N+TQNZrVlZG zEYkwxdOJ06#nfZj27Q{C{-PUk_rZ3^2N2n{#oz)o5#Szeuc}pTmsqlICwD7s#`ar$ zEJ#it@9S=_pdIra{v4k6Q)FOK8)qqdAL8YAZr%-v3EAXO3A)cU6-j zD@?kl&qt+c^TN)%AQr9)@OJMY#ll%^b^tBMC=`f-=E^SXM|p8pp<=g9M{)Q;$+{`` z#IU&Oru6Ch_tyf_zx4IKAP24BT74|o*-ctUf*Qe1u^374MKlvO`zkBJjXg|Qi5WKRy6lZ-Dseu=(ZV6M9Jedl3aw+LxduN)8A?)(# z$9wyS!DpY4E|{BxIn6Owq;qX4?{#=ExZZ6h%jZsR1nVm?c<*{1yd&9tv5fxMZ?Va4 zbPtFMOH4w=tJryt;L>Pg{&Cw=q)twBKX3mfmIFDzg>nVGg4DuE^AmsB0=p-}m;kV} zFw!CuxiZ79ph~K|AvnXM5HSWRQ5F+`!Ur2KBJ8O;oAb<;fM_ur8JiYMMmOqIXQzo& zII2Il^fy=K?)DBmMO}SOSdn!JqQZn8H?3p1qWHOo>}hcyrux#m$PHI>d8p=!qzK>+ z{!;idhl(_mclfM&`_}v%eo!unXCo>Po%~=RXfe)yJEfN?^YIgU%C@x;r zP~D;2YdD>Hkja*S%;X{sqbP)pU8#ZDJjB;weq5H?^j^RvOBAm0)?B9w)4qYZdGDj7 za$ih9#!29qW|hj}N!Uv8nDqB~F8**(ZT>R})D>-K*f%Qt!5j@-#K8Cxv(8u4O zdybNkYgy8E3ld*Vt{Fgd#>ZbwZ%2wY!oVAHW+&w#(hQ@Ass4$zZZjf;LL{va51#Y^o+?#)4`8E$ObCc}FT+|9jY!yAE-`vxy3* zx-B|{ik(n-HAK$O?_k+%Vz`QjJOtT}k0{b2WP<^LJ6*PT)S5CaPgWKNG4YH*z@C8d zV4oHRWcApKEMrxg$Jes;*_5+#c*@pG+l-6CIlG2iv}r;wwL^6mUK^9=I#ceWC-gm1 z1P%ufW74#aCX>j%E%f1f;gx!6+!Oh6JQ9xDlp`T((%dP57Qc z$zPLj(iwSr~Eqg9SVW`4;dep1|1Fck%Il_I9l8Lkj!mVJDu$ZQdo^Vh(y@PQgCz_XE~t+D2Qs zk-4$g?FB<x4xoWl`Ng z7YV>VFW!x1VKgz};)u#8!1&+JPje>K{uW+M{R$c*<6w~s-r?!DUT`-`X&k5~R~Bk5 zta6phIhL7}!ZF-zj#Lv_KfrUCN2aIt&2Uj|vOi zw2w9aO-CJu;mk96qlvXWv@Rj0HR7l~Hxi?gIdp6Z0fMsji`2+X{hn^Lr=xMV?q2+q zIWW2 z?I3}1)>8%sgwqjtE5~f&+i^F+Rmv@2TiH{_$b|!NQvd`3Wb^3?8C!G_g z!Xa}H|J%#L&!{VD!P9C1nSa%`x21~43(NIB0jI$BD>*^>@Aj{q3~N>LNK2hAWINGv zkp3)>hNfSZNheJ9_pRQ^oFZqyh0Eys=7dH*#6v7^Yf6uOydkf{`pVrKyTPEu3CbSoR2k zC@s!~Y%SC|S=}niVwFy8d~oQK6tQ@hXR}muK~bIc+2h@zW(cnN5xSlOAq^}f`a6X3 zvr~L4^Emr<+RxHZ=qE6(;inIUSx2b1Gim&VmW*aHd?`!?(@ze36(*@<#{7Ej7qu$V zX&2&8AxZJodndO$+ZUjP!eI)Z>`(QGKD%CJyw~7wpmx03PDov@*y129vTTR_@417539?APy!fl(>JB4ULyAHut1s z9B7AU3+He5Ox?Xnx}0BQCnp1Z_6e`BrHc<5m()0mMII~@>+IXh*P@BnljP@}y1d>T z`2SILMSQImwej-f4Y$D>JDSH*4J$K!>hOAqYoOo{OnurRWp;A-XtL81lHDrpQDTDJcf0ojuxU> zU77yqfm<5hl6F>{v>_MDvbHoq58-4FPer6fp3s{4EKIX_UDQ?OMLOj>*UsE@Es{!-McXdeR33nHm=w%h|Mc=>uCY zg6uni*|mk~C7gn$4r|TG?2cl{thRPC-fl>i7DaGz9KVE%w^ipbOW{&aTv~80NEg z0#uVdeIBL$x$%Hs&b_`x(joh3bM#7%&RI3UNJZMp>3jt0uXgZc+0ML_tvn2Kgv zv9XDhy@mYT_$IP-A61KV!z>-C>N8GMy*GhDGE*61MyZp&(b=P!TU9d@0?YW0uh>gm zD>yoGcc#JT5%P4Z0&EW>*T+j!p<6z+jFT;|g3oSo;0+65@_7$w zpwYMUGIHR+#|#VByh&gN0$l5 zcKx)iIEi*;`=h7S)nbY&UYn3Ur7V7HnPKk3i3M=9Ryger%;!C-bMxm+vk5%PxmZ-s zmTEkLGgmsx6)lxxebfF`Di3P`M6>;wiJ`Vobip&f@W(BV<(&BI{9@DzwaPXl3F88P z)rxv&05r0=>!X)~5Z+&H>*7*3PVwtuzaeX97TWf+>)Mg5a12b@wK^=zvtb(O;s5Hk zV*t3u(_ef|($VWdJR(Wr(Kl63vG^ffXHVVi!X}7;?&gsz8{sNvOCUe9ozySbU;`WlWC_29YlE3~sO$MaUDD=-@ zcD>eD#O}oqh*2?3=E}!MO%R=h%zts2a_=8bQl_$B4d}l^cD+na()$!0fnz=i@yCUY zs9%HZIC;BlpmQzL_dztW+Kk?5m7?u#{Kxfvc z@bjF*4l0++2a8|waNF4F&8N!als~^#LnGw;fL0dv)~}wpEV=UOg6+OsO;erLh58p6 z_fjimzZjQVf$%$}0(xH;O+tq7Kl}Qv_qDav z+tZFhGJ4+kOorxrPtB>PIz-X)dp!h;e>&NZQiz8-Btpi&Tz|q_$lk*l#YF7_?Py@2 zvR0oZF@@9?4-2q{X4FEe!|?0HT$NGLAsfgSmklK<##T% zvZXC)a+&aG8pWd|M^bjvN!8i2EB%(ZA#qp9&Skv;)j*Xmx&n9(_$>dytxfxVw+|4Z)~WQM4<#5&!f=BHUEh zV*~v8KTHo^4e}CsDDf!6VI8ejV)_Gpt+vse(|EO@mJ_}v@7>N*9jnpZrJ0-qi_b85 z8g<%uzK7)Ax6i4Z|N3mK{5hR3*>m5LSuJ|+)q$RTvUk;jt}<$-ySM@ioi*-F*x2d6 zD|RLkOAAqM)B1U5?+<#%NU+iL4f>KqtqdzCqu^IBM)GYK`6P5Md6thoXFORid^{$* zbHgW^^~W0?QnkGo&nkSFJOp0Jjp+S|W|Ez`*DgBoHO6w!Q%~4Kw`=oXmD|C4ovA=! z>;;raPDLF@awp|f_-m_zB1;1ljh5$Ff;npoA+1g#r6xt7;F35$+@H0qNnbfO!TdR4 z&WQLL4VvFoNY*uBsg&|;Y|`c1U-l3D{3OU<57W?i6cEZ$2 zfY?T^>KmQkNhv=AajpF*M8g$PtHbvi`=&uuBzki`jMZV}%Qc(Jljj8$RU2Kt%BFjQ z#(uF=vG{x@#@k*NSt?@OSxKcTy@6&%7BIP_>jmI}w zk$3wW#9;CiJD281@z6;oP2Oj2Jze@v z@C)|GG50@}E?i7YS2?C){Si$=TqsO?;_th7_{Kgc9hW3P7c+Av-_5lNyMrsm{)Y;g z{&dHb+7DRMijCI$iT3Q}VJZ*?UN7BxGa(U5&vL5Chkv`@6Yq_g(V3ecp-B(bj^zR> zG`{)tNv6s6Pt?-j?tEJqn4}Z#1aI>iDEz_jFCyms|NaP_QN?&76LS%J=6zf!&8(h&jTtI=7`JZVBXyFQsjs%A9a?#lQH*ZSr2&kt7_cq>Nhun4$gS9VnO^A!@lP0r5^s$Cn)Nb1h!kPh2K+Dx~!bTeG( zua^v)oYAh7{xw=p$#7FyjMQF`f@Dd!;xnGg$j}~`?7U=Jh>+u_N9&(#11fs>(Bj$# zAa=PgRjDD6B*`?%f0BFtuQUxvqozwP*iWf%hTCEH<*)cf%E+D?vc2eRnN%=wj@EXj z=5f7f0N4;MwN=0U+U5(Vqzhv*QsJsi3|-4N?C|&aXPxgqk*MDxmiYM@Xo;0sO#N+< zoSb%T)~P%ouv#AQh1Pnpw114I*8l(r4MHx)0p9*5@$H%D2j4XYM!n;gZZKSjytZEc z3j3dC8aEV=ayDqv8;&s5aRaa&fjapx0EQuQ&>KQFNG}g&=giJjy$u~X33T@oqTm7H z_oik0(qh|{&tr9=iK-VLZy;L=JFYIkpd;kNC)INNjQn+}fKOJe^gC}d8(mM`K1L?^ z3Dk?HsruUCOK6Tnd4H%K?38ZzI|EIdcN0HqP6;ATlR*EV#4MgcuKP1EJ$NZq0XTwD zI$L&x*?2jaV-7JvcLA}_Bsrn)d_m%z2>1{ezBa#Rbf)N;{$mlpgDx{*=8Z40=Rltt zgZ6STDL9lno&9zcsB{bSb~A-`AUg+YT(g)6Zhi!x4%s;ZMA}~#dxFC3m~z+lNwj<#qh1Ov*utC3>*fVy0dx=>_?~tl`(H@pqP! zagLd^%?!HBQ*TO^eBCO$u3pE8_^symRMUFvyR9qUY4d(Qnb8Bi)a}K2Fo&Coc{6I= zrm_xcI8FcY-jX;>8QOOGuH}4uy)3=QC}bgn2N~Im*)ZtdGM&%?rMGl`4~(I^(9?Y< zsR9e*wNAlY<*-YJ2Rj|J$KI()Q&K(UrH)j-Om6Vi$htVtZ=GF*jAM zT5BFRSu(ve*J!WDxTkjmfDmiHSmG?#paAN_k;^mixgNTS2G(Nek3!&}C zjoTUZ*mrG-IFyMOPcuPkzR*`@V?N$y!=RXaU2pkb6DXBFzYA14e%Ogd+SHf)B^Pb< z1$~t8gI+yI+>_-41B6QaE%U~}N}g!()Z>-O^7s6fItx>|Pr>`}yZf8DMIGSU#xOF> zDvsX6Oi6iIQ)=~RtACM?!(6VWHtlQ)c)an%n^n3gK?O4K;k?d=Gnn*KD7uMbDd5^B zG^16rgxkYsowHu5{P@fQY5xUjwdpS%yfJ^P|4DU;+r<{g^?sG9Fuo{_6O;NtuQ(1E zYcqJ-hd6mbPCTiN+qnwOwOnDk-I$*>oj6|CkbO2u5lRiG4K7jkdWoI5v&XwFBU?zH z?fpkioOfa7fzxX_$v6G4`G69qidET^$vw6=d%<$j0-T~sVwnkUu}_IUSQ8?;mM%)E za)tIz-t}oBi2^&j>ktohD&6RwEPp!X5{tBMjt0|lsIFOJ_lgDkarK?&o3*S;9MJZ6 zY@8+9BX@ZKFrm!qxzssZ#^XnH;?G;eUCYYz3IJfh-vwxF$i}?$H3?eR7x$Z62n66e z@ul9t#6h!A1RJX@^ zvvvXF^^98Bawe{wWpw!o@6p&Og%wtZ0aLkm10y1vRTtAPOFDjpy8Y=AceIBGuP|2t zmHA^M|&V=9PDB8epYPZeZ2m7gEI**?1na8q=Cx4TTw_2xp-yp9fi_{9|`ntXs&m6&Cy zf1Es4MNCRB4t|YRUTgAh^q7qCEgXGNP!G|vn!H2?oP%zXDW;i>^7V+!t<9iXo`KPF zP9LXRd*7S^XavPpA83ID)dIP|x&Wx?af81SX!_&h8a1U*U;IvoodM4`xMLIKM~QCb zK{?fTrHf7?@T&`I+C!VPq}t^BMhLsnDNzK2yN8k=P~M$Od2-Yti%7=Yz)oBqE_$J8 z7;*Ly(IcU&LRz7iCOc8rxqxE=U>hr|xijo+{rgBQGIprsnZxL9Ns&a?sK94HKiOg&CQT9f&-HEGpV2rQMN zJKF8>G?;&A6f0s}-`NR3^3OaT4lzT{&NMH}Q_0n0Gp?Y{%mUBMS&mkK&R2pkFRsRz z{AT989Ba=;81y_%#o|jF6C%(I|AG@4_~c!Ie}DskZIl+XceOxUlWS;u?pC^)4|X+C ziz-a0G@)zKw&?1uwAl4qMcufEZQo-8B?|(l_#@KC5 z-r1O#+G|nqv6lr0`LRCCxh=k5q%z1%$g`}nU0c>Zr8s;U#LA%k2!s_{_s=od6EANF zlULTT`Vl}*x#_IfLNvn}|77S!O0`60oMPen%>p-zTL99~vqQ;?sls(M=NWEvNw8iQq2fSU@}&0OF6=~)I+R}33~$0|*qp8s!=p5jdpzEV zyg%Bd1b_=34cZf^gLqWld$$_X7J;i4(8rm&w{G>JYHx3dNUB3pNvm z`p?h8O96HzrV=M+9|WV^ZWfGKL5+3OLOTJhUlhqbQAOe|W3@m=-dLrO=|xQ2UZx^n zV`E&^u8NmKWqT8zaTNI6RF)nnh7AOUn1@|EuDtWrPf%Hj)?n)nggR5S%W>1}q;LSCrr_np_xH+#=K6h&#{Mx=5@6oF1}9G+f;D&l$sqoe^HZ7m z+4pkJr1_ZMkdo@!v7nB*aPjb@@|EGA-4hu)T2||q$YA=P)doL6N54X+B#M?W<*w`o zF1}CZqMBT?Uht?Y#hrGo4SW=$Thde!2Tltn3~pVjXnMd9Fs95ZJ9gP{^T zkFH@XhJI%^PeEyX4ut5p(UsbQd6vFNiw90Mp(tNhy&>C|B@dL?lODt6APea{@M^j5 z30DA}#hLy#DaO{g>#cyPIoN3tm8~pbs2f(#4OOCd@qEJA!&#VUr68FM=24unI< zs^V|eg-ece^vUcVQl@ts^#gb&hw%|)lM!26&vTWf*Y%~Bo?lM&oNelc{k1dawc zL^7;DwRALepEY__Cksx|6S_{kkl8q5SfT+bOl??(0PST>G5`I}S!!hZAY7$I~cq+6Zo_ zv>plsKJnG?KmadTxSU(=*AfE6%KmmzoRC8rbHi5jL(+FjAsY|e<(@+y1M4KMqrQOWP!A9Gd3x`hYjF{qBATO-|Fid5BIMi07) zx^{(amwXuHsnwfj04*lH+%LDSh_H+{ndI0q+bEf|yj;@6Rre()`D?~xne(*U-swYW zY73}7b-1@SpwFRiWie+(5s$RY)B+IB<6BmHRJ?8$N!@H11{Hy8H0#J$Ab_*rdo_r( zflA)daMrhP{U*F@CWh$76i>`G1ZML!N#mKeLPLzqb0sK|E`%PLa;`Ps7o1c2qM@pU zSeB}K!`EF+oI^2CWRJ&G zS^oYS;SoyJ?qyv}SZ}rh;cnSnW?1@eK;cD&uHoo;MY-PO8%^)|GxNRhXVi~9gc!7} zfXL%8+sbjwTbl;)7_9oRhnzM=;o_eXg?Z_oG*)v++}VCG$^%KX?>J)tMaV%yz40PW zF0AaqxU&o@ch&JiZ$)K&GoE0G?1u{q)=Dn2{|$uSHc&8=cnY_^xf!58#0fKqm38UTzPe@sOq%w z%qAo~9|RKahg6sl0J6ew(aS6VO0$yuLYt~8f1OvH%u~mc2|caOHmo7>-4dajwRZLg zXyvstueMWaEoFQ@s(hS#Lut(_Ag4{TgvWFKHb1`$9Ky?|Ul=q}vYdN=4{a_A{{fx4 zC?Szy8LX6Pk>Ng+0iaFqAc~YGp=hA?pL3WyvB@y3Y@P>7&B&E`yFmthu&pcIRpJ&e zFr;knBr1qMPBHA-&ebnA`5eS6%!dzP093hw^l|SdBfo$jf$D24!%jPASi8((2)lL! z6MTyxOBW?fbjl@R$*$3#FD`s-4ca?duqk})PKgtW2j~ua1t##)4Js{9($4zPatcbo z?z|ub&M7LR1Fyx1^_ob6QOUcEu#DSX52H%=a`9K^C(Qv0WpeHF#&5Q)FZBf5n02xF zJbe0E)%J3S)-{s-Jd&q@DeOQ)8v?+7lT;?7wAzII|ZFw_nZU>r?HO=fN%Mto&*T40r6{!zisjNz`VY}|rX-5vmqsXWdZk(~zIPcd;L9;>+wTqO( zA~YepL~l~E8t?a4q0FaUEt#f0X;K3KPNHj_)V(o(ft-iJrEW#8*#dh150`(U%tguhKp*ZUFqEmq>?z1^wtNob@yHXyn%mxjarS@u{xCG>0 z&fL~s2d>z6CRLAc4AvQi?S7=fLecj3COP|G7`fL6^8?2xr9 z-MptigbLu%EGP%}+W_p?FNGuQ+JSww+`N^AA=CBHj18pdBP}&mdD7NuVjZDP+oJIk zfN5q!VAw_~FWRJ{yd0E;eXW{ro6G`X{Rd}=y%3U%d*-%HONe^dlGo$&H+h!N94>Da zMxtXB6#@eTsIY6sm`e2L5M5M5il?8_1u!}A1(jNP1%=HF3J?m`!0+sbgRAYkHk}yO z&49?Eiqvd3hZS1_=Ce~Z+nKuySVof1kP{W=8>E+Pki+W2a>Lh(& zxI0_8pwzo1Wc~Oi00={qip$TcRQ}kG_(M4T6YH_qFmMii3wg4O)!`Kf4*BN`m-EAl z5?F*#RZ%?R-EC_bI+?YFugF4gUS~L_YwCo!)&ME#q^@kV#TYmhwwaN^tJT;gCM02d z%o~bpR=SC=nd}zCCY*AdxHveXt58leyAdHl#+~S>J^NOqI&0vzIV&={*S;THw;{ha z2M64xWC+(UiXuFbD9h9(2zPFvHau@^iH+|@#1{r~EgQA7A*8=HD|7RViMpUZXEpaXE!9? zZrEv%=XkbDi)hO#J*E zUZF!(hx1ehF4Ys?VW9iQD+I^PP}7e2eWcZI$yN3_82sizL)|Z@Xdz#=>tx)a%GRVH zLfB=ukG-TI${BND&{=UT^O!WjFc&V1Dp|w8Xh;+YOKvP-d+)+Y`i!t3SRz_C8v1^a z*;MBA0?NGcJ-~*;WsLxSF$3eJJZ1i0xE|0*Pe}Mm8GL)mwCYMc(C0vZEM^Dj$7jAl zAQl5Wz70|LtF?&?nC)`pyr&azZi-!gJrwwr$!gVrA()?+7IEe5Q=Prq^Y7XsnbA67 zUX7IzNe8Zdb_k(vj~22y@YNtx(n$hJ#mg~TJGlAJ1np-Bcb0OF_iV|@yf<{qSM2zN zC%g92tj_Wb?#|MDECiMjubWE4djNlmW}g2H!uMr~5`s`$9bsojiOv*gd~j3o{7 z3^O~t$2G;_6jpe%&5V->m%v0ej@dpu{uRik?x1+{c40tLn5D^Yk&7t45C`S~d68(f zVDyJe#*LomUd}%#cd^}H71f>MHwxk4fPq#I&5R?6;b$wQRlj^LARqh&- z#^Xuw)6mGpM*jftL1tPJmKXWMmSk%>So~n>Ow1|Tgiz}{g*d@@IYHUTs=2H!c`9|X zSggb{Fx}IAiZw_ZGQUEh!)dDF6M8B~4uUoCxLm{m*mK zqxkZk{rc|%jTC&FA8~WUgngphhTp>ZV>TXIiNqwN;T93nq$gW6_HdTO^lppi0ct{2lFv_)Gec|uHLyvQD9iJQ(aAPtPq%|cIDeJjf z=nsT|SjBbK8FQPx>20jePFht~3yWOFz?Fmjmjq3h0rdH$#bUmc?N*K9bVVLw`z@kf1#3=_XJ`bxrN+0A-npDwWC7Bt74%mnV% zu@c;O>`|=y;VeH%$2mbYo4Ow+Sl`l@QO!8 zOMG4KTc=OQZvJTob$CbmjYpsLa}zrWrg+I!^{0*_zSkWEr<~2DSS-hIe;NRwt|m0Q z&Ha_%O3`Rhg_BzNZMgtyQeXxwy$f z{&$Io-`4(5b{~=5O*vt3UR0IehHq>^x zI1b~-T0s0^CnI^ryo}U2sS^a^nU_kzHY8ya*A~|@+uWd*ZPM#_N4YuH)bfOcf{ktp zp2AS<>Fx1AIZHh+ ze$662vrM|_@6W8OlhQ?d&Z^S8?AK?e&*~;OY@&vS@gY4`!xpfYWVT7Yn%`BoyM4}J zX|=-a2(lJEWijkxmKuwOdUjn?I7+W-nIwIOB@^jE6AoHH>KPVhlG%10ho;fTWar7x zT@HHY)|@lsBdV-%&q?)>SgrOfQ)Al0%MaQ$?DhS5yoW*uBsNYSnliR_B^}Kg8do;1 z(VXF?o|=sdCE2;PI7FSxjACj>4RMxq!jRwpHJ7%$$?PbW${|DI9Fm^XO%FIb1enI-E z?+>ZGg>b{SGXF$Z8XCT*RQ$6;zb%H+CnbKwhVxsnqyO`+DZmr4Te=fM{m*RKT5pTS zoh^wCy+`=}P(1wOU%OEO09by4xB}O3^>PsaJz~Ijcz%fw;E1;>K^5O@zk_#uI^o6& zpO*gKcHq_p@>IxbxBcZJm;HHtB3Ji7F{ZU#7%2KA@stWcmVZ63s$e*gs3tpoc$1J*L z6SrT!-Egy99vC%zyT;kQ;91x9>c9W+!2dc2CA6g?GOkRLhOY6X1 zqnIn@K{Q8uR!K>uM_|I;tWTlX{(tvI&(5?Wg>gxE67!KmWT^!hjERtB10V?(07PVz4J75q=8{xN5j z-q?`2iRw@qjVo0NyeuV|?+GhZsI5Cpx_JxBKarN|&d}2#i*hzsvoEKT^FR2W`Yo*T zf3G>Vvp7CXYMp4fH_~sWY{#stmC{=j@@Vt?ZI`_;UCC_^oyTY%Ei3HtwL&?{(Eh&_nl0w_>Vu=nIP?iTJ}RK`56J|B zkw;w-fqzsC7z59JOk{u5OID9|G$GI5Sj2k-&m-LMjz7z2y+bBx&D7AKO*UU~B$B`G z{I6x2Px)Y=oNXU^^a~8dUyiv4Bv)2SOnJBh{{{yKH|E9YSWORg3q2A;Et&%G9r3z) zH5N_p_h<3U>4kt;$j=?1q(m`dyCdB) zk*SJRs{sU=W2qu~n)Btfmn#zQ*O99aE^9u+f+a`y3J_=B5o6j$``_abp}xyyd|w#2 z!fGg;IbNotflyXiOXEY4p@u3n4jDyvuH(u<2Smmo$aYwImI?KHC6_eS-~Kdn{*0ymkIEDC zOlS&Cb<^JUErqihcV0lFB=sNY@PDM`*QT#U3*C%^s4u7us-?RuY0 zmC^o;WHHB&ie_tPXJa;zjIuX~O1j|`NM&6>=+&Rqf}`eM+71hqg?8*R*Zl+YOYS?e z$k}Q*Ed2ckB(lXWSej1Ep^_Z-Mo+!szBzJ-COR0J;XH5p)|n;W0}>m->9ZChQ$ER{ z$RsW;4L-|p)N&)GWInz{JV!Uzx;=DvbBOm@@Z1^U@vdpJGt;PLfXlEQ-;bIyimk0Z z@X=PVrQGJCtNY3QeQYQdOFuESqK2N{4by68YwW?Sx)z9xFmXUDVRQWQ)qAJwtigxP zkgx!mxKmvOV5X3gV2WgJiZr_SQyX7JlR5~~y zAV}{$DhkpSl-_&qod6=zq)G2YrHNGOJ@n9n(h0qH2pvMmf5VLPzTfw)_20FendKxW z=bp3A-uroWIZhE%Q@T6#tNO+DE7ZWk;y;a~78EVl;0`9CY6YZ_A@!93utju}Rgo#R z;*Nt4r<`^|bEH0K4MN|YN|iv5CkOfHTb5t6!pm){?G;l5!qOb-cwLoSZ2Xilmlvmt zGKiU?uzh;Tf%m1A`QjCJG(F$#C$rgrRSO+w0V}rn$;rtbN|al?0R3aLV}`WaQ~Nto zzO)d%DZmb1Z1ktUu@5Jy|`Y7}X5uH%_@bKGPrtMAV=bN@u6>Jq3GOEse zfMAg#HoMn>W#ZJXc;DQy~*0z2A?0h1%mDoZHY4Y)28mB zIgQQS@S!3|BrD{W*;{eOmA!fCLfxO& zufu=-?UewkZRwWT`yX$$0uHWkp5P914BU99cXV4*7_jdC z=eG^yv)nVpzJ|>kt~l20nNfcL>4|%MO0BK8Uj8w-f9F@Cvj`b6jZlSff(;-cE5POk zQ}(`(&(*Y%{#Uu(i?Xzt`cdrNQJ`l3kz1PV(#*YO`Tjr3@UNb1(x%ziBbxN2q?<$_;*6?iEeVAZ9I9l=Cz{Z+;f| ze0zTLb%|Cvi!sd~3Ha1ZW*4agctMUwvs!?ri3XkB0L+g*?y>R zQsVvIq=OL+g8;jTUjufSOZ3;x;d&KFGTN8`GEQRe-&<52-1Lf9cTeGdAbj~7vx4Pp zQ(z;F8jF%KY=G|0soAr=b3A{my=jkGnSO~s9tYbl;L7&Mzo9-B#|Tg~#pAt690U~m zUDAtfhpzsR!T-rY_iy|i zD1>S#PqxCB&%-`!nKM^0wS8-%{J9%o71A6U^uHN!JW1qUUH1pkInia&;Tvv*bIaI8 zn*&2Lcarh|O1Kz$to?8MhF3v`0G-xZk-MM>0Eq8c0P&D@vlK1(aJd~Y)LwI6@#W;@ zje8S0iRk#+Xa4alvfut!(rI0#ZceCX{8cqqFnS_9o1_wskdF8CiQ15nPpuYEwzkgI8y0u{f1+^QGZZ~tcO1h)Ri z2(rk@s(>xH<=;uS!cOG>8A*YJ$<`O~l+m*LZ@(K-gZ^({boo}XolY4x7aHhvMces5 zCicUmaKhH?W1=l!viB*3|L0HI^qU(Ox)rFJ-DFex_dT;Yw17eef-mgv)Te&?t^Qf| z&{z4+FNz&(P=Cp%0YD4(Kc@h&s*|Hc@N)q>tuN3YJIaf#Km8ZB9=vlB{krxV52BLR zs^PQGBO3RFzA+#*9JbdAF7U6n$(*m#HgK688p1^>WW#G%sYb=(Zjws%H82Hac+_N| zVCsu$$mpLut_`JVCs4G(@Mkdt4!9JK{+Vy~eiPY^dfPyKo1Pg~P=Br&>6oYm6PY~{&FN$8FYAkm* zp_;$UfYHVr+C6W%DEwvUrk&h{6LW7P^Ws;NiD-sG*)SUQaq2hYm!GP`%b?9df^p=3 zo!r7FdMx4`|LxRTz$Wt(qRD?GT93P_@Xuy2s^T$@*>-aHUD#~CBX?XiEkiqcf~62A zwNA{MM_=}~!#6Xi;?*PRY*yo-mXbPZ+RidV3ut^X8CsxrZp)2a(S@5(N>^GxWI$kA z2(k_uUks?Tq4Y&i{PeqQ{qAJh8Wfkef4Y=E<*x)^Sj4X;Rd4ImkjU*qU&}tM34pPx zEF-&5TF@`O zbJG%;AoF4V28s$E@5D$Ys!u)VVMN>6p8oS_`3MJ;w>xdnbQ-9I!sOx|e%>$FliMrX zq4cC&Sx&R3yb{OfJ)wbAMr~|PzO4vc5YEJGW1lY|YzBsO8-}Q;XxQFf!De^KY}CL} zAgaq`l{FeUE(zz^e61!E)fkXlg$&vSO`blno2vV-<(H8Mv=Fz7*yX`xyMBi9f*!~uS97Jf}Cq1=z% zANuz{`J23q$d&N~If!jm(|&ziYi;Ti&o_Db#H``8>_5B=)nhaOBZ;I^4(SUT^lHw3 zS$HmVBdBKb*-;wc9_^9-i9~w=AyEjQV05*-K%5&&%nc zCD_^tDlzPk3iC*^TC#IV)F-R`UE=ERW#?<3BQ zIROYT)t1Wz>k)>rLbB}}y_Z&2_D^IlqbJJEC+q*IOp7PHD*uYw6SOCY2Ljmh8|p{# zJ^*3?@U+^R#jjZA!;NXg%=SmrKVJw9O)tI<7$FHq4LxujRp_qM^&l9$Id{40)-STcC!WKXv0CZo7a*0b!d_X1+AP(!{?_pz$%)-LL zjQ=u(s`@wh(g;kk-t{vDpo77uj@rdNPf45#%U_JfVG(~56cYNRPCGTFMgJPeo@jvC z!xwv8>=_h_zX1h`U)!SS5G_^lGN*T`#ocX5m0rp6`|M1Gx@B0vGiW{?ZA_=VR7fm! z8e&l|((gauZlLs*02mM)EF>pGK+!WkWQZH6n{=C=&yIbgpo=6vf80K@{71$m6A?hP zVPRR6-ttTmU4w+(Rj~TV{S~>`$*`SH zy|x8qB50|8B_<}yOnV!W0tyIVR>>K#stG zIHqCnE;SVu6|E?^y(%cdEIl>#c0j~33xICmiv~ zoQTWLeuUG6+R*_#+8fOPEHlS6`F{0FZ$~PdL;lzSRZ)>bFx+qk%koxM(4%Jnl80Pd zKFcYK1ppF@N1j^c=8=t?1O<9|$}grDk4jBYQK418O+lG|l<}?iOchl{z}M@rUso^I zB-55(Og|W4W@8I$3nBgK+;Q7y>@Jo#9uvU{bP z3YBO!NmRtkyq1x{103&YOTtu18y26Fots~P!xTX!E_81bK${NG6a6smTNMbXKS)2C z;<}A6DV-4QdjNPRp7KG-C1<*~)c%alj*o4P;2fVPXU=b=V0A~+;LKCOvJWE6Jq-1L zNC9Xz3|L6y#%9S-=`&oPle<_95S1}n1|S}ulbs>h%zfoOPu6;sKc_4I^vWAn)s9xi zpI5L-@48D3pp}J{H2aA24j%*Gqj!CUYmU+(L`Hz0Pi6<{%b;==*LG#{CY!@VSr9PW@jsPD?2eq3_kHnVQupB2SoKuP6Mz3G$UrRw#tlU0g;4cLUali47k0J^ zRapO5_`}4!`=z_yUBb&*a*hJ2&%F*c$rX5EIJD<0FEc$I`kkWu8<1@JREyYMyedz= zs_Ow3B&_Iv+l|UDz_u<#ytX}x3&*9b@s65T$tXJo_xPW7+jNN51!%ycmz$6#UR#mx zC}|9gcJKl#6iOa-Savf@i^oA-#d;g?rnzWjR=*`k_$G~Dx=)~>7A#>KU-zE{N&$XD z2|-;Ats}{fn9F@be2P5E)AIZxV!xakd;(uYktUX9?W9CBct7%u9pm>HRaaCbu~=UG zp$$pQXM>4m0u|y<_5K{C7d?vcf@#~!C1KKSQmcakE`kTbOE25=fzULI%5qq@TCJJk zmy;MOa2aECl_YifV!6iny*21!BSp&3N+IdXeeO%49r@I{ZCIEa7|4it@ULEvDO)Jr zmn_FoHX^FgjqNZDFr%Z4kGVsNNE3|Y=O3)@<3QDw5)Txq!`zW-*f$lcyRHy zJ@q)>J<_Adszx*`C4BbjIsB~V#|R6rwyxWVO7?$=P43pHZD+P++r3PTCpR%SUGH+n z-DZKW)~v;87mU#=elalCsL&~?Em-@~7Oz^NUmRq~n8)euMeThBiS{lA(=|DPC+Xk5XVcTJ7;IAF^)8jXkPNbqqoTR)U~PB_6joGxD` z4Q@y1SL{wD9B0(4zFk_5(D%*PsweUBn<035lv-JHSoTE3bq_~$V&ZuE!df|xJg+x$ zc6V_BbP=;5XdM)FX2Z;y$8#9%ztVhZ(AC@jGsM6Al%3%8)2FqGJcf+A+@Ed-EIvuI z?{sw~{GiacFbauPzg7LGX(Sn4kAr+OL%s8f&lVviS#sft6}E`tw>!~}EjA++UW8mV zo|K^7@!-7DLBNwq-;%;3rh0&+4mUgfUa*Hk19Q$9F7`dO$(|Kmg$#=H$fq4=h@cvt zWn&zj8Nhm6tRx}0&{?9!=(k1sjc;f31{lC>t9l|I3k#WOrIM{klWOA{^RUaB?OgD` zdm_5LudFJ1clR-{WY`c`QWuR)zm)|$rM7u=P`=Eg{X(o zpDSHDc8p|aII-Xu^kwv?I%tg7r>lD(ufuYfic5tdLX#D{?PmUU!P(iSK5H6;pw(rC zq|&8u__kh;Vw`z@cXzk>F=mGC2*q@vy*{km`TXRoLsY`bny%jI#S3=+EPcSMBFj2H2;vSfDB9bTfb35*8yX}As2!#JAP{MM(!Gf-s&vq)Dz%`Uvc0=dy~pks zofCfKJ#S4O2d*OR>gBz!fwt#HxD+If5j8a;3*@Q<3 zR}I=N%0by4&}$bBF8JHx9xZBX^Q#$%Q*-2X9P6=s7&BAJLtfq(hS4Hs?$yV@2ii2= zer#J_T3p|KQ|_K|chxqP1t*`FhJP(~-cvGYYo;>p^wbllNvq*~cyOdCk^=I(@Z}RR z_swTJzp^+m=De#Uv=Iax7;7@SNsnyrqf`-H<-|TreBBYv$EaP`TFt!)+Vc$I&)St6 zr8cYX$CnLp)PgoKwf+p8lNA;#ClSPeC)wTt4POccJOk@DVE3XW=sl?3g6``)FHS3y4~JW+MTn#gtW;Y$^r zc*yZtTivdcn4asp6P|uFK6Dli!}ugM;SLZ^yS$_)HQ-E!H!EQ7h`EE)#a;b%`Hb%c z&p(p-D-%-fVB*uMUU#z5o4!8kN5UZ1bsWJ-L@#um{M7zztYUNgW>T+`E|@la#h2Qt zD3MdE`8^>XKPFD=Q2gY&^=M(_(6;&5F_AjBGE_lEpQ;X0m77<7+6#Za`rvJzzAv6G zPcqzGiQ9>*JQv!lwW@ok?u23>P5LC$R|LHFP|$kxI>PsLxjWr?hRZd8d4I&3SGv>- z&sT301ODGaS_h$g#Ofw9A)tWXWWOzlYIAfHK;2?!I*_rn)$>W0Lk&zj!fGdK-JZ-A zor<{@R`7c}oen-z=hUIz09khNSdSHj^wNdQu4Z*@{>3YrQu1H`wt65twFs;TAQ;78 z+D051tgrH@YI^O2;mXx9eoOZ`L;+qGD|k<4u!$Zp+jDj|88uYiJ6wi?u7V)n~Nca zd)Q&{v8#cf(57^1wKW}*ez0H{M=DJ)Lx@f+$+KTq!1j?ipHR7^Nx0i?e`ZTi-rlT>WO0l;F9G&3B1W zlkT+)O{WbBxJLQ?tyYY}=IUXo-KGlo5-Hmb>xfaU6j7_PKB6AI(f5t}IXOR0H`_?d zHJVXyFR9JgV2%zc2}7UhYE;p1v0Bo=H2jM`8V`IpLvyiPq;YCKpR|QprWp0BW@L0J z_1Y9VMf=Toxv@V<;`(Z~S=HX5@%14$M3jHVV)eLaxBx=E!9ZaU)Smr_gh8r3mRlV@VUj+6h^!>0)vm)X9!Hb||FhD@A$pqfchE z63N{kR6r!#4!yaqy2|+dI+cI1v86zM3x71m=RY~v{^TIyXb6()?j9~wi>{!zC^KF+ z#{T9k$9Y-1D6Z{v89_BdsXWmxG(3EDRZrX!(Zqyu$Mo$?i(3s>h=z5`-O>EO1P1uA z!n}8gV-B6N&nE^L?j}YCPJ}kq4^R%Kd6mKcqc|6R^ceZkc)w2d*V4f@@sg&l;9ZT7 z$t(hWXyj&-#fY%MPX{=>W@;yS?8mb}ne4YkowB>o4hk2Gn8`0>Bi5s>t4C#yGkJvu zXim4*okkM^P?FHLxa<@v1$Ba`m$jVzNw^8cM4cG;hXopy{CtS=q!zZ52S2~g(1gP4 zP2_4fSc+c540Rr5ml!AjW}tFoBs{dEY&p+W3UkWz3H%a#jttqFsEpefu}Q3f*$fv4 z&F-%D!dE_Dwt1&kTK12HH<_;BJH(}B06Hh(?ukr6m0h&x%-%`z)>amC)$AVHnuNY@ zDUF%%)cg$+)fE*{M1~^p_Z=?OW8H9zJn}o<7FLjkb&0t?cIEbJ4C395VKx8{obN)J zxIsx;7$2IF>d=pmHr<}akM*m7>_cm~ZAPnRxLap&aTXTHjhoC{J33xAQQ)zrhB+&# znEF3$cd_xOLqL+W-8N)=uZ{~DnJArT;S_w1lvlnZs~QWnpioVlkA8dyxPFs0nSjms zVim6b_4vp}9XYWTy*AaziiXnw7Uz-p=B;&_QRI3d)##(rb(qFd_&6kEXuZ|wo=P1G z><9LPB>Y9&b(cg#^D{icV|HmS08K=5#H#v31GamjMp?DvR^hudnGn$C_!?AsElt=i z`_0gbsRi8%jChv+Ah0?gGWj_?1jAdQB%qHFEQ1`(2jVjs>z4?B1K|V*kO>K?7(IJT zQ`e>QvAXn5-cZo&>gp;T0&CzC{VVTWCw~TWIb0+2J2NBA81jDo`ZERZuZbKV6)|_Y z#XJW8FAs$&LWZu9;Lm(}yhs%1cFLnAOY-Zdf^bV#Xb>Z4 zEcLNV9plNmt7zfkjbuMi)37|=v4exBcPe4f!Av<7gEMH(8 zNvfYL)b5@6o}#4`n|DFSzBUwoT*`R|rzd{nzH^SEf0bs;SI~!)N5j@R=&KRSo%0bF zIU{F*A+ew1Uv#RZHA`FyvhespXJuomZ$YXbyOvDsBC|qB7EjI|cfrFw?K8Mol|#sC z@)&m`zcJ48!e}n(hYDX7+(l3Ny`p4sR{3;k;O>?maJQJm6Y)>-k634T|dqG;1#<` zzPS%A>A&i^sdR+YJ}1E#iYfcMKn4oiVn<#5-MLBtWo|kAr~<;dP6GtF&xVdnM6x_U zqrMo!iIVqk&XJuj>(eCZ{@A1^L+X_YCcKz59PHS~pU*zwIkz_7h7(9huahTQ)}Zwj)2lz2Yh3#qhOn<~Q3DsGA?hcmRp#oY&M ztX%L&>7FIDe+)&B+rh`>_3eew19Y!22i)J3(RjyPI7=(0amn#rDHcc3mb0;!Od~d< z#)uUN<78tHz4d6Z!frXy?9@>y z{Hwu?2FGs#&Cit=2e>8AGKOQvavwt9XD^uoKI=8PZuLaJ3Y(*YsO_&lhZikLWk-3g zWzn<*h`1bmYiX|fee1h-qtFdEx2GEm+8Y_}ZA*>Uv1M>g56qEj=qio;7->DeH@%aA z;PsUXjy~ttt2?O(VPoGP{9)%a>9%1@no(ggz33%cyER=IUOpfS3Fm6$*vkCWAnd+7 z?%szChQa_E?tA<3%`-2+4{+U{iL)Ll2$_-H5VW+MefQCFOmGyX#ev|j${duut8lu> zGU-dDbh^oRA$V{wVCTByhlkZDL)$F8qHGI|rCo~z+gVG3l9!jQFa7CcrMNi}72%${ z4VG&RB7px9ivAnOr*l0A2-Xy`A!j@m^LBv@Y`F1sx6-`)tu0`)mLp~?cr7~Xmmtj_ zC)fLUh-gXh{h*L%(!px4UpFssOI3P2QOl@v&$GA2eE=2$u#Vo1k}&vc*2%=GYM#BM zR3F@v{oAuFmP6%4=DjR@%mqzTo~|20_mw+}5LY=&w=SGP5;ZrTzfiu}HiJz*&Up$X?XtqY z&sG#^Nj%9@HS6H$g`1XJIeZ>^tLl84?Oj2v+Y--N05|OuxGookpv~A%KCf^vt(5Eg zZze@Sx&$J$B-SIvfkVr!0!k!w5}{+{zWqmK>XqKacge}G1x{_*mX()p>G=r*&H-SK z@hI=zTXI?&{0kteMYpMr@c`990Q4Q~>i)@>rZCW-|5od(eA0nyhON*xG3?|CmZ*=B z?hO+?x}bcl-+F}6Sv62+agdz#X}CAQE03z=h&=M;1&q4ixUGGCh(V^X&<7NI63la^uI`WuFKs90^Upe zCwEL_YE9o^XHfBafnPo>*f0w#m9OLmmNqKstIQV_ZH$$Hb}E`;v?PE=y?H$Ll!`|| zg2+ZRihP$17*17;$Vd9^SADW+6H&G-3UwQEe#Z5(JDwRqvf zf=$)VlW>dc?n3T5)-n>rzL(s;J8b3qw8G*ez~}+N z{)-Nkeu^8ZUm5p8+p|sY#uXS*j+&l?5$-$#ULd>hqrbVB)X*WIn_lYMlia8#*vjlMM(4}gs=Uf{COQV~k~+Uji@o34r*G86z?4BKJ{ zX5>uGe=ToF&Us|xZOI$LB=JnZ<1B1T!D`R=_`W7dah$gE@%!f-4=%p~9lWxQuf)OW zqdBZ^jzi07x?%*F?o?;*+c})C(pscVPAAPYH0nN^^x{)(QIhV=?&m4J0ahF z*UFQs+!%$;y9P;l+yvQc^;}3NVRs>Yh4zkbqz*ves%xo#VohbzE=sY-3YRl%*&RUQ z#6JAWdExEt_jI{Dy5VA}j#%zECbZA|1B4hLM?Q=y=o!LdULu{a5s;q0LfXQ_xn^dF z-WyShWE6+OHDe$FjPzIA&8(I_Vf&u!Z&Ed1f5RBf+;cdC2 z41eFbcmh_oDhMom<*~AyZ%cdUSoC#H&nMkKk&@6?DZCrPHWt(YXEnds;7gyN1}fD* zTBNs(XFkF-dG`G1q1jGr%|Mv86*QySElO^%)M_5kdC|z>b0BAq`5X-}xH}9(Vey8T zNXXv8@C5A*B5lXcku0j%MEU#p_m+3e`tjj=^Cz;rX?k!;@*$B6sL$!{Z*aQBRLiW) znEA*orjs@0S7%yJ(22wgL}WCN*}%-gaWYKh%X){0^N3fZoD=S)9+(fwd#r~h8asM* z>yTtz3WCa}Ztvk)0aok>^DE!d272ib6KUk$E=SF)I zr^aRYKKh1jHP*FWEN{#gnOapLj5~L71~7XpOlTjXHmjm-+dHT2W(1P#XF$10_SE|S z>77cZji?e(FoeNOY8);!cW5w=39oO{PB#}U79GR%4UCRR6(wec{TTVHMsnd_!lh9G zdSEF(q7yXQW?wwL?dJA1{s1A3Xpq3pjAiDgdUaa-)RY57r>6$e5sP1z#n z8eZBA`lC|R08#zPZST4oxv??2FvYSW4imG36_!a;+Fi$5 z{)q$MQ>T+MGY6@fDfMZ7h}NvRYB{hY{zqJCTZ@E=#a|EYcFoWf;oo4my7?M|wMJ6n z!o}BiZS{RGZT9P23z4;sz@((kUhY88`h2wD+~Y*mUZ-+wceVlND9U+&ehXBbW(48 z9GP3M!Q(G`=;>I7`c>~eug#lr(o_w&db`Nqxa3|dS&G_vUXpF8A$An^mc1qRH}Lk= z5Wn;NJTZEGX~4u-B9<8(3M(eXGo|ZO?X{ykgJBq7Ue4)v>);kqqs8lfy6w4Jovs_8 z_@?csQg{8_`=6ZY+1oOcRPP>@sF|<%|5^kTC*%DWNQ;a$%(o}x~#!65z*;X5N%8C|ajTqvi0WumP&8A^l}j>A%ygGdjpO}1IVm^{!awZjVuh_4Nw$Wnn! z|0M4K>p18&+~9!EMVRH+>i(}`qD=>oJx_ z)O`g4X-#llKnk#F6UsKR$xev-wG26n?$pPNq@d_hBn{r+iucZi#~kgY=;!$UgOsD9 zZ7?n(zHs#bjju5AW>vA6`Zwbp()7ip=2)iArvtVb%~8aVIYN8P5uSUE_HUP`&yh7m zU1wlo9rT&4wpbb?)1BKiQ1m$hUZUEe@GA`cZoS?6CI2aRn^ny|_XTup3;WhFLmf!a zCN1=;iR4=W8FcP8`}}J2jq?bf*h~bbWhwe(GEntetuB|M;#D_O*6$+aqULzf1T5<8 zm9x89er*p-Ef@%P!Ovx&0)gce(Q_-+e~(&M`9KkWBacSLWQ`UhKl0Me<03Lw|b_xzz&?mncM zjLlXKSPukfkCuBB?(0*3briHoY@9jx$ln5~GP;fNFLu~pKj}c@W;3uo%5lfN%GT{# z=R8dLe%khi&0i7gX#gIKUB5XKBNO&JijA~df?h0$I_3HNv~BDTTs<*ENmvh&nf6uC zs&nm?4F(|N`vsyE6EmT-09WfF0bV805lz)Yan!5!2UqW1&mPt-U_JR8aH?iknYe}1 zia^CJJhTA@J2aFx{OTFbnf;LtD4M@Xm$oI4elaEb4 z$EfFx%tGwv@--Nig7NjA1i59<3>HhDCXrnR`+A6kx8VBxzVqJwkcKb0B>>___aS5Q zmqVA=p)Kuq;>SDuo=@usi?Qz92hk!ag{$GU2uy`^tgsoe^OlPw* ziu@cfpAFlSM8BR7BRIg#sz`|yuvCaB;p*Nn&--%EwMMVL6seFih@zRR$z04>GQTgL zi&Q2o)`R8u-b&u--oCqlt(z!=GK8$lv}zaOd=?(Ah3vHJAQmFF$-V<=OpJbD%T#}B z&g_!U`9@MCI1WNs{c~UNi_>kkDBID2i&(pfQFrcH(GR^cQFD=W^nB{*u__H<_tprH*y8>QkVMz&PQyz*1o-X@og{emjnQ8ZJ5uGRs{Z?j|=-+O8k57B; z4txEu)JH1@_4P0RngdYTZZ7q3i0>7Kclu6d*46PBjk7Pci<|PlF?##d;TAevCTqox* zQr3`aU;6=Z?oMG!?sl|Cg^x&FaIdy4zz7bnQxCe#X<6R1z%Cc?#OyP#07cpn?m!Mp z5>i#;0qTNSb<*kVkgAVr&Zwmx(u#tV8`^|T@CWykj7CyvgD=2156}iR* z^=IFe0`A5WePrVC7cqB6YY04DWqW!Ze80=u9*R?rXEu^ShgHroOopT+>Xb#CVkd+l2W=Ps&qs7bpAg zjRLq--;S{>tm2e66sBbabnOLRQ$G5tx$q~pa-fy-$5C67Vkeq6cr1hR6+l{vX!yT5 zI8(QvU+8};$H!`lTgXgOw6rgU^9 zU8brSke91RwGX)0OdX3@)j1T-Oh;AKInePp3$9V~c>g9^0ZRn->g3!wPw((`=rbAs zWE$hio<(zFdWi9fAk-daY#Ondk$&y#s zOj&%1dQLgMr}sX{%fDOOug_X}ETF2beQ$lXWVvkFXS@*%sN#l1*%j?=Vt5+tlWbb~ z#xh3R#JW1|#NeD8qotAHmqd(LH#kuHiI>U2d>x*$mHD8H(GQf-{N1R_S69!Ud5nai zrJ0J}TVM2cXrAM=2p82Qix2fNq2ew0Qf)WC*3qQDr;C^4B4!_6Pd}exl4C3GaqugL ziLzWGvv|JX1J(p%pDu?7F8wR7Wh^7E3Q-`r$lE2Kr{~|X&LMI37E$m$h{|!P^<|zZ z>I=_-np6h#)AUsHCVWb!9=BlJZy2|@bem?3g_*0+@47oTWxHPQ;`#)rG%5scqQuC3 zP8toZd_e8f6=eg9Ustm{Z9`p*Rr$U)dRFDe4Z(BY)s6uCAbL;`AEfcbtMSt;Jg&jS_cv|qq$&MqU=RXdd;AN&t1^T(s402z9 z@uxdMnc&d9oPs|m9Y~Pz8**pCGkl((s04F_XIMQd_K6NL(7$I5@>mGh9p`X#ElH9_ zK+QXQcYg|!Qb%~lBlY~|NANRE;s_}7bv@zIhoYzSq!e){ZpXH>5^$NDKVy2K|X6O-O%AerPiA$_d8{8Bu47WJ??r)XjFNv0?e zss+3~QMLc=!@Dh76NQks@f4Ek%tPl$?-~7nOh^!*=grly|@>+#mvdVc`2PNLy#!_+4az4@F zQgU=b2m?H|rr7IvL|2oQCv%R9+OURuCD%uGaAS~B-`kMUKf{sG-}mr7-v=6o>1G@9 z&iyfh>b-HAC(?-BbQi)CCCXl=I0~nlk=LEGuDr#-s-3UvB@H#B_|LM}z*wsl09UC)(>1kU7b^ z_*ylMGN?OYogfbXCZXSW#?xMYZ{yU@V0RsAT6v2J8S){;N%nl{^go!Pgv+|4gn{hta{R&Lc{RuG$YElO0O7w5Tv7i@(~o@C&McU3mapx{?7h-h&i?Pmtk)>j{2_ToMGyPo=CA7-{Q~wWhu5nQ z^FI~12@e!J2$e?GRV61Y*~Imck?dA&$bxj>Q9qQ{#+`8NXw3K9@-}&St%jgg^uLmPIb|K~5DSWfvzjGR5d;1EXMP);qmy0anPyt%>~wIs z%7r^Uw#t?g5l=3s!rI+>H9y}UZ(1WCwO9VKY?fhJ>Vs=w7SK|gKEV}`;j*(-5>T07 z;o$shzwcSVq7D%e*g$1I&MtC&h^fVz|Dnl@_pz`@Tv{=`Oj~>GV)gmN0Bih2`qL2- z4ab9*oa2~&m~925WMlc8{?DmqwGyc=Vn9u*3Cqgh$y%W>TWBBf@NxzQ17aZ{$a@jv z*n^Y$YV(%-51~(d@(Mrf9&(XsG8R7@|5%f-@gNbMun~Ljgs=?NO<~PbOnc#ci@|uR zPk=*O^-I{x#Rp0X#6@=qKim#uoEN#19AN6_-(V5jEly5y`#RDqZ$5SNsBUJrc4n8# zK3Ai-Avf}CT$f%G$!gu1X|fAl_duK0g5l9r{Fg7ph`}#AgE83=N-gxXsGiuxVPv`e&PlV5E2W%uMVs^xMqYd57+fg3|n3y;hmgJGmEH`7EB&cQr%jNqBFW?O&67w@I0huIUi#bV{aDRV4YJ$r%au<9xgG+9G?=z^U)yfTwm!ac^Kk|2P_!&mh3qP+Q zasS8WBB4HXf6TneC9FkkT)sM4^KPLX|IffhM8^lSzVr{|>!5MsCH*D3NXsPM7c- zPOrnkfJhB`v)rAs2#EHma>P^9)yfAM!abUi4$Pp`ujWv7{+H?W;+zWjD&n#OfX z$7&euc)idmW}J@E=j9?7q;ILg(|NXwnXOgf?TOf^MB@hp(0t=8U&25*cvSY zV;$@8rC7oQzRTlO5AHYiq&uX9UhLKPI{W7=8sNw@yWtfIRbrm87Rc@_Y>T%%pJ#UC zy;s1d4b1?j+tbM#E0x3mK+zqmbKmW5PIC|pxn^l^{S6tP7VTjVyZa!j!}vn#3liE~ zLWCz%ed(T(6IcT{aFzDs)1=ALoXWzPrViUAE}Ba^+qZ{p)eDZPZTojGHnjzV&Vt^S zaL*+i;b=*?yKt(2!~zy1?M=Ft*v6S=^9+}7_e6K{vouCcZm^RGdOPjrFJx?JZv?zN z<9>7DPFx=ai#sh{w-S4OxvNG6Ey}F3Bc}v8u^$LgBiByPmN-?IcH-pKaoS&$dC0Nn zhqHg*OuSWYVdy~-E5@6!3aZ#22W}la(4ds!BG@Ev3;V&Aeb3WZeb5bOJuYsqA*JUu z?A`F0iB`T4$-NT8GaK>HsyrHIUSo;3pg4K!H=KvK-mp7LxPrw&5)d70+L|Uneo(sx za|G&~OA}Ks>9_^{pt`P?wHJbEBN`a$Ef2rU#2`(a)@vni6wEb{#Io!> zm*XAsbE6d1xibT{UkgIg_nyBPL>RvyV1C-Ke;Z(VeQPzD{FcdJIjX zF`=fx`F`S!^WCrVwukY9+T+L8`gU5Ec1(P5-(w-84~bz!dxJbCQh~cNU#* zc(nShRs}Z3bl1r1Nj&&I)=>3na{O0ca$?7!RrgfYkn1fReTnv10VBLD{Iet{58*pj z9&=#9l;(WZmEzVE`!=yhbgPUQ*u34W?2U)Umoj^A%dBwjE^`rykfiW+k`hX{B`y;RtjMd++{9W zw76k^%w*<3`koBmV!uPavs z;D7&N4XE1jA7A~&lKky*%?~FZv|k&b2gY}G`MPydq*tciEt#dcwEXVUlY$Vr)I^HJ z(kr(}4by@c7Tb{N%w9L7xJchSiE{X`olY#25=RnlxWu^dQHjOI|4b5-<(ilBy=mg2 zsdx7xAmDRtS3tSx{aO=51U3$aea=R2X_bqrheZ$V!d0n7<{Hk#Uy# zFCck`eH!n)=ZQahRXmQpXH)~J|4uXk5x|G}Y^d#{(`7a%$x1M1<{f zEbUd(QYt9Z+BPhPsQA5We!&OY{+4Nrur_FU4LZG0?ZC<2ac-(K<(n7NwJy(&jzm@b zf!|=i6^7NBlk0Hw7|9xg!wp3jdH?>FGFEgTD|bh&L>Aijy5Zg4nRDC%2;m{Z#skvT zqLn%nYvXmr)MFRhs_i%C0fN~MwMB)wrDuQ0eHyAu+{7{fMp`KQBUxQ?rOD>WPWPPl zPv5v~T))6bfH|WlJ0e+lnhjX%YQrvZ9Xht99)JfEkV~q%SwFt-#3>)Po`iKz$sQj* z$8lDm`z#dT^|aHOg0v}3-n|2?t00j*`e@%>myJ}3`;hy4>uKtXbVWn3JzlT;c0=5; zK+t%piZYAWl4a*%$$V27ca?Z`i+_{=6Fg4ADe8xDgFn}`7T9v4ZLY_BQPuN)bH(qwEjRK|XT}SygCz(VIXX-AL z?^kkJs8wpuJXhU0jOH~tI!VtXF=ze_v-@h7qYNiHV%YXrx|_k%==Y+-3$BZD$D=zu zAupRoIB@N2(f^OJvkr^0?bbesh)5|SNQ+;gdpFtMWz$BF&5=EBy|<3$0sNItn0=o$=^mN&qzWcp&LKVvn0 z>qZ)BsO z+T~+4!b*1M-K*T@filVH0 zn8n2rz%H_O{uXim2bGj7jLRhWwd^hzCL0#n``zpgC#Vd(y}E{ksGe#n%FL)93YlwzC90@s3PW6UPjF}@m;;0A^8M=bqydAuF1U*l{bZ4&iuh}JQ zIW%_K=K0leX=6&%l&_wTee3ToqRoo=kUl$c$=oYn9@%2(V|&5JRIhZDW;L(;q0H30 z!%>TEL{79or=Fb>z>W-oGx_F~ngqx@-6n^aoq$5m(aFb^Wf60QhOoOUsiZzmg%Ruc zo2Z-HEa^-7MMvfmToNe1=DF-|J=9uo0Q(X?$mI^y_c4D;Zk7$SYEG~N7> zM+OE|G0wLNQ}Z<)r7f4&s3Ul`H^;>7tuhG6GkCY|8XCGD+}@Q@Qh$jvSa@F=`kmeS ziR}b*I<-@AsX?yDd%6%Rd>=UDYhMi!ps6*3SP(Bho7dF#yvI3u1NVVJ+Yd#?%as~GEQtO-LtG6`|9PhH^@KqYZ0&uQ z7b%1pM?sL#Aal2$!bC9>!CnQj_U}0G(N2pZ?*UHV4@;^DINy#$onRDgFV~TSI|s)D z1%@mKukk!f+7NW9WLKKx78kcf&NS$}G+(q`!v9b)FEDr=B9oVHc5!jJT`o0zZr)?L zyHdmzgm7hL_A1L{VR~LwC=wP!vVF@a+(@S7N>j1DpdtUy<|<2g=CddI(N5apB43Yb)p z&ijX|_Mj>EpT($LG3}1;gnhiOpP1>WCaxg&X4SSW`{f4un>-^vW zHg=KgtNSO5GsI6(3}SkRVA3ut7v{31Mrk~&Y0#ritkKp3QcgNGkPs}M=~VxT2cF-` zr2YM%Ha@c?eN585{m!xk^LtY}X$!-M+d{$Z71&&ckj9g>=W@XxR3w%3|9Ke$H$(>d zw3^+{Ra73=v(G2<*P9R>@MC(o4fYT9RDfdm7pt zB=GsNC7a-BV0RID;(!$IVa2=|RvXfIDu!2c*ft%=z{DCM&#J8uI2y;&rJ zOcYPize||M55}aMM7>Qy*-Y}HMJL;rOst2&r0T^7o=Bowm?39s}b$-(%Z@R8mZL8g#h$@#JZv?UZdDk!p!!MKOtL z9|b1l`VaG@7k|0z=6>1tYBoUU6|;|uH$v}8_Ub?P7=i%(Lo*t> zjB_jps5*@4G)w*7&QXk9GJ}=jboof};hN^>C@|5xeFxWm_c79OiOBNwd#P@sT|H)9lJ4~SoK3CVGSzDm|c(vj~s|f_deUbIaT5<$qqci3PmZ<0` z9j;|41lT?F%}u>f*4Mb|D~K}rNTy33T;B8JEzp*}B+t6JjntEfosKVBRBq+LPPLzF zWvRykHuG2Fr$()0zGLJyf2<5TzRac2adzXsT&9=|ncCfWgpPy}t6x2UIxzAsrMDkx2Qu_)Lwd80s8ARNHK0Ap7*npY zl?@obYG993F^eh$4~j!a)NalhZ$*T%C;MGldf=`=2l4%4=F?3l!KAhZ1&HTv2SecdD^^jN*Uxka z;6Ty_Z0*<4O#-M6Unk$Qcf*{}%fYnX@w2%1WIv)7Zd1>p0trBJ-S6u9`SWlY+30iK z50$0<7vZYAvDf>U#nnagMCRCRcK%9e*mg&|g&WOU5=EuHA2Rl_kmio|&HMsZcPzfV zO{3pt#Z_{C35E5`=`}TVL=A`f;RbU381m5f32*wGY8Mc>)}M(-vbx zP{{kdtn;F^m@_r|>XYnBGz^UPF35r9g&alFw;Pg)te0)SI%e24HZ zz$K7-^CcYmdIU(|xq5c`{ipiK?ro@2&Zwyg6rA(kR?tPdib!^HUZMqe3S}SXv_$>T z?O!UIhebB`3-6Voo6Z;8O}iM~D6OuJvzTV&FG|{IUxiiN1s+4a@LqUJB>_uahs0xj zomzq2^Bm+$sLtUsnC4d$t+WF~5E`VPZ?BVMc9MbPlO3s0iAutbKUJ`6je+W{c$vX? z&r~Y9bbV=LQoO6B9;lB2r_Ta^&_&|?WJFP?+Xgj`Ed=hzQ%7^|C#8jCn)tj7Vb$Z} zWw2Fc1kJ+ND0)RsjG?G*ZR=)Kvi z0K0?`nSG&5WvMp{Wet(D8iV;-2jWh<6TL|p)~O8FYkJRj1n9|s=|D@b@1qPy9fe05 zW^&^f(VF?O?_7*b!@~CB5Ne40k?uU2pD-?=j*=&~<1+d|R5nQNM4<2k;)T2atj(+# zsSmNuo^89#`D zp-z7Eu6OoTP&Yxvk2}o1+%aCh`XS+6Nv}STGkw0CC*_La@@{f8I7n*A|0sTYT1^Yb?zD4}U^C?Jyg&uwiXt>N`jGp1Ty1I_ z(y<%M|5{bP;>6JQBGgym>7{|{A~?)}Y066q8UIz^ z2n&nSq$Ykf`%~UPV!0D>gD;O&eX-_IMK5KWu?eazINyJN* zaLX^f<~U!0C1neh-+)(AmD>}_?8!_Rpu z!|G}SGAuoIG&RXO`YD_bqC?$7)8)|my8TCA7MQG~TA@ItD?d@n>N17#N%NS&nazMV z(Mr44*2EsDbYm6UC5qQOl|ouBij`Bi*mx|+C>+rx>PlJI^nyNY?~@&W0=vBPRo|=; z8tDTBQ~&nbWu-pr!!y9UdB5LiJ?}*MWJuVYGahj6HVbV|WOj#9+!}PWYPsB6Kxj2r zEe6W00RS)?_`PHtkk5Yz`t&{zf7w$H($Z0)JvebptK08Vi9dUjVea|cCA%I7uB3{H zG{75k0m|dYId7;&?@|_~SxhokQk{aKyNnVwxx56YIYib8(I6kWHP!g?Z_@(ExqJD~ zS^V$n%bXwT^OPSHwLLC1&H^XmCIr2QafQ~-KyY>NZaS%MZ{aFJy;_$y5`LT0vtjl> z6|&Lhs%6?#0lGlD+~PA@{D|@pYJ8Rht4!AsW5cx771h|NfZ`rE#+eTm^OAuqX$EEs zcHQr1*_@d^%qfb#H>47nX#4KFOj8yD6w+l+#*&zx0op*Z4VNa9S8njv*|Q#8>E@<2 zx8X;B7vc{(lv~3>BjHkN7n4?TOm{Uvc_M(GfW9Bk_(?*!GOlZD=b(B{x^&w=ZezY* z(^hfG?DxU&aSrVHc0N+Z_h8LWc;HM$R6HV9Z18%bK~S0 z52@cEE9>qyc$n9KN-X_EOz!kf|MG=s$*muhPj9j>g<{KM{pj3N{8v4tA6__auxET# za(V*J%6B5)xFB}Sw&{mg#%M=yxxc%~I*Bcki@{CAs*5qT`k2R`dTp--)%Kx!!r)f{KAZ@i#ynPx$qAtrtrHvWW+z}*m%gmIbGfD&zt6- z{^p?QBR(0E?{{T{_eqJ5dmY7_bZsGUyywfWSa>!G2uD{6JdW2_@oycMLw8VZ!D$DR zH#N@(02_Fycl;qx5!w)n{pxUYL0E%p?FG7Ga*ZVRdwPyUmqjGvg@q+CtZg4iqJguH z!5VrDe$bvYwm6^?zd+w~gcOA5Jh#q)S*&0)Ru43bVy~#C$7H!L^h5xnkM7#|1s+Ok zs=mG_(WCxZaR}rbFpSjRw&@rY&VwfBdBpCUuSk@T#WR^-2E7OZ*(0Msqi<Za&=m zmN$-XH3mxCVhr%HDDk_G^0U-nhT&JhsR%*9!!$-rF7O}+5OE#!m-l@@66TgltvW2?L$Bdfh%B;(1_A3UI9LKxn1{em9jbEh;-;>P~k zn+BnulA1QFW!Tay{MHE*oV(n16Wm5VMclNg zUYFPe;OEE}u^(RAQkr+fRD0KKj%FB|p?8n6zp|qswK4GtskB}4H+)QDErw3fm?)%* zANsEA6)@+KC~~QESi&guP#APp9Ne>TfDa_S?;|y66c zVoUq?+|2Ojs6Jq%48&w;)a?P5j_GPy5NbqUNG6L=h^nPIo^jQBSF2ur(5gaZbKWMW zc9O5)rK}ekx>88sQka2e=MV)M5BmWowtX&H$)}38~vK zX<%c_S!c`K(^hI2Q@pPRC0!7^zG8(Sfx$!pAUVQ`jWe)7UQc=Ji$$4ceZ-ewsWhow zer`-a_u3;#geC@`1!6~yKxwK$WxWu?in%cim`-LN?aUqs%!;Rh_6Um8d3tO72nkN2 ze5g~=%OrD1ttAHz`FjB|vDs5|rI3u&Zz<4)@Q0~J&1QqtdP8X^c=|r9QivcYZYBQY zU+J+adLK_!2R`BIZ)ch{(>1C$jW7{#&|+5*csV@u9vq-#DyuY5Zn#v*XTi$hMT4V7 zugksHF*X3RY%_32qQDGsnID21Y(yZZaCkpcUCf{$IAQm?W49Rk;PS}@JCT&faqOF4};3DOS1@tL}hZN?W~ z=m~a za71h?JZYWH$j)h_LpEGS4c(E+aF#X-W*%&|cao|us;lvL`4n^&9wuLz0*aja+p0lV z`o|4Z4J2wGJp=UFi(-M3`1JDjBzEyDwmqMFz3Tu*&mQe%3P2YRxcClZuYalkLuZq> zSM1lp%T7FEAPt)ugq6uDyf@s`(Gu=fJ1@~NnnG3<#oGIQlKOiv2JWSVvzhqqi_1xV z+B4qxXw&CXZ1JSI{*@*o@X>+2C<}nnS29Gc`Ivu{uXgu_VtIEFunCP7s@~ZOn35H? z~ZiImq_IE+=R+moH?GSQFSobqDH|7%EPw#m;lpz_t@SLs<_*cj8a=^f=cj_Zy- zWcvLQv-)JF**y?9_B-QM{Z*#QbS_#Z$f1M$H%?$HlQ=AudqK}%IoA(wVOMA)C zVZ@Scf1?YG)U7;Sm2Nm3=)uL3AOpjf+> zfcuagTPR}h3j2DeazG8pye&YENT>`R@-dtn%R0?(Z;%^m)c8FSQjj`-+IjdW@jyKf zDe+SQ8`-CvR-39P+cPmB$EYpvwev}Kb|X>%*Cpw8g`-XfgmXJu!Cd)DXzii|{Ch9K zlJ|pv?U5CkQ)}m}+C!`H0?t+3nc(v5S?EE3eZqnXg3*aU9k`#HjEro6lLb3_MDP%e z{+pZIqsN52_19OG8+kjArqXE_7QS%p?~=ys#e7-a;>Be#c!gAd85E5)CtUAz^)$|g zd~XkV^Gbubx3|u!KmT}f(!}Q7b3_zHmwBR$8 zDcGTQmGxHJyo>8QQ2nHj0cYsH{IZWgM4NZrzifjRRJFL6i)ooK-NipHq#z@2#hux# z$!7|`jeN}fv^`NwQ6YuN0_&&sXE?@+=-tX)bo_qyri~W^uYnqCzsPSat(Utt0jNr@ zPQ?DXaF#f*KL{Brl&Yk1J1w#Wiiu5IRr~qn`8n9G3Q=975uLW<2GIK-oUz#-8wllC z`nv7z79<>8v@1|K2WZ99E*)goj*niB*2lH}VKBDEThv4fF!2c{PoIm5h1y$(QacRugc<)O~r-1^b6-#45P05U3Aa!IYR-k`sK0t8P20}2Jfdky{Ji?1!` zr%OVUDh1jypBoBKEHxd4`P7&i#-+I3=ul`tQpzI1WK4z{KweeoKDSigunATYt^_OQ z%(!G*Fy@Uh__EhR)r2x#sh_mP-1u*s0STrTvCCi!Ot3}Yi+*QN!U&EgFA;6-UtGb{-6&}e39x=GPqeSmvCUm|^OvC63wqW$t_W^>p0s1*>eH$1fQ*Y8|8bCG#+3qfDe=}~KJm31ExJ>q zVfh^P{uwP3&$7ZnEdL)h4S@T!vXgDj9z3vWQ6)CUGWFEUS(xA_FG%a_auvN(uiVqL zD5z(}`u+PV?csoAcNB4YP}SaDFN)wvE}=KlS$+tul(N^8=t)~^DF%uk8%K50@+ZCZ z&xALxP07o+h4kb}j-)wp)mP|JVHd(8(GAV$v;x88Vh#`0>VrGi%SY+6Ww7GZ+ky-X z2Y=~thY#DOmO(#$|jk$O)f(y}p=>jW9@$K25 zOU_(V|-@5L&jxbGe5i8>3x25;^o~($;{{c!dLm>JhqD( z9V_(%mm$Wz)_Q<=_vP?byn_VTUixGZ!7<1{8Pz*TX6GPnj~}u1&D|jq^%Td1`wI_T zr|7r$-|Gy{+zjl&f*EPgp-*V|Pwo_GEISp|+jjiILiXV@AZMP2cIveI56YP=c$xhcWDLX;D@jH z5j_l>O=a@wu$_4ojep6bmq$@!(qj0WQMf}zfaMuEWfc{-T4N?#Koft747K^5TWaI3 zQ4%(IKk=B+6WrvY4>f_5Zs>dp=uvG1LzDda{>g*Qm}PI_=(z)mcYHQ%y{Bxpml^Dq z@Yi6XEf)TAK)a@E$au7+Z*|-PbC{=VPTd%13gAiOwPyfnX_kv`b%Fr>>@(y?KA}+EOn`kRjgmDnU4>AhsjZ_5 z98Fy+C$tAa^m&_hCYY#`DP298cjDi3q&dhS}Uu#e+VAWS}~FO-bXeLvg8OP z7h)V)|CGC#79IYfEKePPpJ*BgZkRh!3tVn4J81dQwfosmLX~62WWZ=SyoR#9Z-4$~ zj{-k6j871Z!%yZhug{bPQ08AAg{43K&Cb+~W@+9kfsKiNwEM#?czxE3Rom(j2gJ7H z0?$ucRTyaUX1SKQemXnQ-LsT_HR-BY0a#gN`CJD{XG}erCBdXjKZ*HMN@QN)lf|04 zb^Y&ex4%aEvUvOo-5l`h+Kg@6{b8{Q)Q-Y{=u;0m_>f+l@yFizuK`zYlkECT9AIl= zqRYgY#_Bcjb=A9G;^dVpF8S#nkWv2&g88yxAiY^izv0JD#*B3^ZKoRNTFzPtm_Cu^ zW4$d8mhwy&s7x2K#svpA+0@C8y5zXx7^3(92J^U0D`uy{q;_F(3(Yp=TMf3!j=jrD z+^du_mFMbk(A*}e#fDOnT?f)mM|H+L%y83M*JtL-TGHAGDS;|w{_MbagP06$e$Yme zYae`Oj}c7(J3bDZY1_&RM-8i8NYLTkb!4c&2Nx`RJW4EkrI=tGCZH_9QC7$D!__LF zyjt{tfNkXqmvQFaWNG|w%BD0uRjZiRhCk!n@SNxA5yA%$9VRhoyKaNV>9m>nN3nK4 z3uKFw-wcLu!f4g=wC!qUj(&UR+JBf|qH?Qjr;Ibce?@(DAkkL{--DS3J-(lRXSP;h zzt;Z5h;?>)XQ&*5=d=;y=|H_oN6oq6g+*3u?+6wE=-1u|iU=Bi7s54SsL!(s-L;8h z8=^QUF+j+dcJwGdl$jGVZ{8)pR5=uD3lVOB2>Rpo0Gw%N~3u1bYNi*C)-& z@k@8bV{i|2f!^mVp*)t#IpX6njlc^_F+|H5Ocyh#Nc5YL@VDeUg#mMtcB(M0*L9vR z%Ut!n{NqJu_n8(!nHp}7NY;zrr+}&=ylIngLH75otVuE-OW0oXQU-{)jln*PPG3a= zYAXVUbb$#^4FL1D+RL9vrHg)QI?#FzA(s|g32>`Y{=?Rjw&=s{zVvZojt<{Pa4a5+ zKe>*dt^!~+F-l&sTs8BfGd6HICzfL@hn?E^6R~?= zEOmxm4kYqc?xjVaYV3flwkKPGJ+HfQob7!WJWD>VD!_ZvsSxcyR{}-&orgi1Oc7%TtczWotdHrS9{Mrmpga{mo%DSEV zLDzo*raWs_#d6udW0-^PU0RR*oBID6_Wn!xg_1hF{isg}0?;`Pw_e+JRFo5?id9oZ+E?b*=MQZ{ihTWcDayJGhrkd!Vbxdp%q|1)+Jr;GoO=Y~JL4 zwLmrkzL{DE+yeF80mQxXUf%hs!{%u>`gFVKcQ&rTwqWwJ?!Nl6P7F`{hC)*Q4A>&d z@z#ux#1MN_e=Ot_nYA<7>CNJadoY(B6XZwRUMvak({L951?$<)D-7TH?dol{f%(Rk zmgzU^$pH-GFgDvm9d``kPv>(m?#JYx$d<`@zRV}M2ovzc9UfY2SMPw<*EiNCl96iF z?c=Sl*Dp9G`m~D8vhds))$Oo{(o@xU@T=U5#t;fm(ilnE<6gmW{cRnZb@VX`3Lch1 z4#BF*|6+8$SP@ao9`)FNA=(fnqwiJ;YUXGH^pkrC`rUFGc1FDaQmWZSJ;oLdsnQ+v zb8Sts7tPk|86N}Ko|HB7ZnP9!D%NPrcP1NJP5r&_J(KS@L~0e_erH^ExEe+wjAeWA zoymChj^WEr*A)mX0qx$M2T+@W2YUF1!W7*79(3DA&wgw-oavc$zcX89Po-0LBB~6Y zBB1^ir$=P(wO||}8lN8yS^*Bk2iV){SOud>H^+E~cT!SP(U+o5m+I(_XD_B;mn&hQ zhBT4r)4c$&?-(SJKY)nu!w1vTjxSY~8*SS&)s+W*oa4u{_S1OrZ{q75Ur{UdBVcg7 zQGr3~?GMHJn3+w_4|UHE*P7$F?JLfp(Pyj1#DxdVu`R8wz&=(!5fQX_hkb$QvwQub zj`uMzk|$Pfbe*>oJ`4J~m%lLcrsO{m&*v59ewScm-+pHDCBZ_!Xx?qc=FC33ukSBz zsJy`Zy#L~5wi$o_a)}-JVpmDFn^iq`E>!M+VYTt{UouvpX0osWGE3a{V ztY=3@m}xpbe&s?NzWjOHC_3cS-MyL5!fQ!VowVIQHbGyK6%U>Hv>hHBMLFQ6_F~+3 z3ACvpsa!6KdgmkDTgbd&s5V*r*ZXt>On`c2HpBn{E@hY#-q*&Nt_4-&k{ zN?%#Gir4Xcqbt{bGO_9Dsu(%}+nX5|1d{el=1I>2x+pPRw40*><@Rf!^y_32GhHgv zJzgo*c`hn!6zggF9s(l>ps7$I+&f&^oG?dyIxrVg_Z)O>L(Dp3@mPi6^6Qjg`CfSa z

    ww*9wD6| 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 literal 0 HcmV?d00001 diff --git a/scripts/publish-docker.ps1 b/scripts/publish-docker.ps1 new file mode 100644 index 0000000..80a9830 --- /dev/null +++ b/scripts/publish-docker.ps1 @@ -0,0 +1,67 @@ +Param( + [string]$ImageName = "tmdb-embed-api", + [string]$Registry = "docker.io", + [string]$Repo = "yourdockeruser", # e.g. docker hub username or org + [string]$Tag = "latest", + [switch]$UseGitTag, + [switch]$Push, + [switch]$MultiArch, + [string]$Platforms = "linux/amd64,linux/arm64" +) + +# Usage examples: +# .\scripts\publish-docker.ps1 -Repo youruser -Tag test -Push +# .\scripts\publish-docker.ps1 -Repo youruser -UseGitTag -Push +# .\scripts\publish-docker.ps1 -Repo youruser -UseGitTag -Push -MultiArch + +$ErrorActionPreference = 'Stop' + +function Write-Info($msg){ Write-Host "[INFO] $msg" -ForegroundColor Cyan } +function Write-Warn($msg){ Write-Host "[WARN] $msg" -ForegroundColor Yellow } +function Write-Err($msg){ Write-Host "[ERR] $msg" -ForegroundColor Red } + +# Derive tag from git if requested +if($UseGitTag){ + if(Test-Path .git){ + $gitTag = git describe --tags --abbrev=0 2>$null + if(-not $gitTag){ Write-Err "No git tag found. Create one or omit -UseGitTag."; exit 1 } + $Tag = $gitTag + } else { + Write-Err "No .git directory. Cannot derive tag."; exit 1 + } +} + +# Normalize registry prefix +if($Registry -in @('docker.io','index.docker.io','')){ + $FullImage = "$Repo/$ImageName:$Tag" +} else { + $FullImage = "$Registry/$Repo/$ImageName:$Tag" +} + +Write-Info "Building image: $FullImage" + +if($MultiArch){ + # Ensure buildx exists + $bx = docker buildx version 2>$null + if($LASTEXITCODE -ne 0){ + Write-Info "Creating buildx builder (first time)" + docker buildx create --use --name multiarch-builder | Out-Null + } + docker buildx use multiarch-builder + docker buildx inspect --bootstrap | Out-Null + Write-Info "Building multi-arch for: $Platforms" + docker buildx build --platform $Platforms --build-arg VERSION=$Tag -t $FullImage --push:$Push . + if(-not $Push){ + Write-Warn "Multi-arch buildx without --push stores result in registry only when --push is set; local images may not exist." + } +} else { + docker build --build-arg VERSION=$Tag -t $FullImage . + if($Push){ + Write-Info "Pushing $FullImage" + docker push $FullImage + } else { + Write-Info "Skipping push (add -Push to push)." + } +} + +Write-Info "Done." \ No newline at end of file diff --git a/src/api.js b/src/api.js deleted file mode 100644 index 2954911..0000000 --- a/src/api.js +++ /dev/null @@ -1,102 +0,0 @@ -import { getTwoEmbed } from "./workers/sites/2Embed.js"; -import { getAutoembed } from "./workers/sites/AutoEmbed.js"; -import { getEmbedSu } from "./workers/sites/Embedsu.js"; -import { getVidSrcSu } from "./workers/sites/VidsrcSU.js"; - -export async function getMovie(media, provider = null) { - const combinedResponse = []; - const tmdb_id = media.tmdbId; - - if (provider) { - try { - let result; - switch (provider) { - case '2embed': - result = await getTwoEmbed(tmdb_id); - break; - case 'embedsu': - result = await getEmbedSu(tmdb_id); - break; - case 'autoembed': - result = await getAutoembed(tmdb_id); - break; - case 'vidsrcsu': - result = await getVidSrcSu(tmdb_id); - break; - default: - throw new Error(`Unknown provider: ${provider}`); - } - if (result) combinedResponse.push(result); - } catch (e) { - console.error(`Error fetching from ${provider}:`, e); - } - return combinedResponse; - } - - const providers = [ - { name: '2embed', func: getTwoEmbed }, - { name: 'embedsu', func: getEmbedSu }, - { name: 'autoembed', func: getAutoembed }, - { name: 'vidsrcsu', func: getVidSrcSu } - ]; - - for (const { name, func } of providers) { - try { - const result = await func(tmdb_id); - if (result) combinedResponse.push(result); - } catch (e) { - console.error(`Error fetching from ${name}:`, e); - } - } - - return combinedResponse; -} - -export async function getTv(media, season, episode, provider = null) { - const combinedResponse = []; - const tmdb_id = media.tmdbId; - - if (provider) { - try { - let result; - switch (provider) { - case '2embed': - result = await getTwoEmbed(tmdb_id, season, episode); - break; - case 'embedsu': - result = await getEmbedSu(tmdb_id, season, episode); - break; - case 'autoembed': - result = await getAutoembed(tmdb_id, season, episode); - break; - case 'vidsrcsu': - result = await getVidSrcSu(tmdb_id, season, episode); - break; - default: - throw new Error(`Unknown provider: ${provider}`); - } - if (result) combinedResponse.push(result); - } catch (e) { - console.error(`Error fetching from ${provider}:`, e); - } - return combinedResponse; - } - - const providers = [ - { name: '2embed', func: getTwoEmbed }, - { name: 'embedsu', func: getEmbedSu }, - { name: 'autoembed', func: getAutoembed }, - { name: 'vidsrcsu', func: getVidSrcSu } - ]; - - for (const { name, func } of providers) { - try { - const result = await func(tmdb_id, season, episode); - if (result) combinedResponse.push(result); - } catch (e) { - console.error(`Error fetching from ${name}:`, e); - } - } - - return combinedResponse; -} \ No newline at end of file diff --git a/src/extractors/2Embed.js b/src/extractors/2Embed.js deleted file mode 100644 index 3154e7c..0000000 --- a/src/extractors/2Embed.js +++ /dev/null @@ -1,388 +0,0 @@ -import fetch from "node-fetch"; -import JsUnpacker from '../utils/jsunpack.js'; -import * as cheerio from 'cheerio'; - -const DOMAIN = "https://www.2embed.cc"; -const PLAYER_URL = "https://uqloads.xyz"; - -let subtitles = []; -let sources = []; - -const headers = { - 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - 'Referer': DOMAIN, - 'Origin': DOMAIN, -}; - -function parseQuality(qualityString) { - if (!qualityString) return 0; - const q = qualityString.toUpperCase(); - if (q === '4K') return 4000; - if (q.includes('1080P')) return 1080; - if (q.includes('720P')) return 720; - const numMatch = q.match(/(\d+)/); - return numMatch ? parseInt(numMatch[1], 10) : 0; -} - -function createErrorObject(errorMessage) { - return { - provider: "2Embed", - ERROR: [{ - error: `ERROR`, - what_happened: errorMessage, - report_issue: 'https://github.com/Inside4ndroid/TMDB-Embed-API/issues' - }] - }; -} - -export async function getTwoEmbed(tmdb_id, s, e) { - subtitles = []; - sources = []; - - const tmdbId = tmdb_id; - const initialReferer = s && e ? `${DOMAIN}/embedtv/${tmdbId}&s=${s}&e=${e}` : `${DOMAIN}/embed/${tmdbId}`; - const url = initialReferer; - - try { - const response = await fetch(url, { - method: "POST", - headers: { - Referer: url, - "Content-Type": "application/x-www-form-urlencoded", - "User-Agent": headers['User-Agent'], - }, - body: "pls=pls" - }); - - if (!response.ok) { - return { sources: [createErrorObject(`HTTP error fetching initial URL! Status: ${response.status}`)] }; - } - - const data = await response.text(); - let extractedValue = null; - let isSwishId = false; - - let match = data.match(/swish\?id=(?[\w\d]+)/); - - if (match && match.groups && match.groups.id) { - extractedValue = match.groups.id; - isSwishId = true; - } else { - match = data.match(/'(.*?player4u.*?)'/); - if (match && match[1]) { - extractedValue = match[1]; - } else { - return { sources: [createErrorObject("No relevant swish ID or player4u URL found in initial data.")] }; - } - } - - if (extractedValue) { - if (isSwishId) { - const streamUrl = await resolve(`${PLAYER_URL}/e/${extractedValue}`, DOMAIN); - if (!streamUrl) { - return { sources: [createErrorObject(`Could not resolve stream URL for swish ID: ${extractedValue}`)] }; - } - - const parsedSources = await parseM3U8(streamUrl, PLAYER_URL); - - if (parsedSources.length > 0) { - sources.push({ - provider: "2Embed/Swish", - files: parsedSources, - subtitles: subtitles, - headers: { - "Referer": PLAYER_URL, - "User-Agent": headers['User-Agent'], - "Origin": PLAYER_URL - } - }); - } else { - return { sources: [createErrorObject("No valid sources found in M3U8 for swish ID")] }; - } - } else { - const listPageResponse = await fetch(extractedValue, { - headers: { - Referer: url, - "User-Agent": headers['User-Agent'] - } - }); - - if (!listPageResponse.ok) { - return { sources: [createErrorObject(`Failed to fetch player4u list page (${extractedValue}): ${listPageResponse.status}`)] }; - } - - const listPageHtml = await listPageResponse.text(); - - const $ = cheerio.load(listPageHtml); - let highestQuality = -1; - let bestPartialUrl = null; - - $('li.slide-toggle a.playbtnx').each((index, element) => { - const linkText = $(element).text(); - const onclickAttr = $(element).attr('onclick'); - - if (!linkText || !onclickAttr) return; - - const qualityMatch = linkText.match(/\s*(\d+p|4K)\s*/i); - const qualityString = qualityMatch ? qualityMatch[1].toUpperCase() : null; - - const urlMatch = onclickAttr.match(/go\('([^']+)'\)/); - const partialUrl = urlMatch ? urlMatch[1] : null; - - if (!qualityString || !partialUrl) return; - - const qualityValue = parseQuality(qualityString); - - if (qualityValue > highestQuality) { - highestQuality = qualityValue; - bestPartialUrl = partialUrl; - } - }); - - if (bestPartialUrl) { - const idMatch = bestPartialUrl.match(/\?id=([\w\d]+)/); - if (idMatch && idMatch[1]) { - const player4uId = idMatch[1]; - const resolveUrl = `${PLAYER_URL}/e/${player4uId}`; - - const streamUrl = await resolve(resolveUrl, extractedValue); - if (!streamUrl) { - return { sources: [createErrorObject(`Could not resolve stream URL for player4u ID: ${player4uId}`)] }; - } - - const parsedSources = await parseM3U8(streamUrl, PLAYER_URL); - - if (parsedSources.length > 0) { - sources.push({ - provider: "2Embed/Player4u", - files: parsedSources, - subtitles: subtitles, - headers: { - "Referer": PLAYER_URL, - "User-Agent": headers['User-Agent'], - "Origin": PLAYER_URL - } - }); - } else { - return { sources: [createErrorObject("No valid sources found in M3U8 for player4u ID")] }; - } - } else { - return { sources: [createErrorObject("Could not extract player4u ID from best quality URL")] }; - } - } else { - return { sources: [createErrorObject("No valid quality options found on player4u page")] }; - } - } - } - - return { sources: sources.length > 0 ? { sources } : [createErrorObject("No sources found after processing")] }; - - } catch (error) { - return { sources: [createErrorObject(`Unexpected error: ${error.message}`)] }; - } -} - -async function resolve(url, referer) { - try { - const response = await fetch(url, { - headers: { - Referer: referer, - "User-Agent": headers['User-Agent'] - } - }); - - if (!response.ok) { - console.error(`Resolve failed for ${url}: Status ${response.status}`); - return null; - } - - const data = await response.text(); - const packedDataRegex = /eval\(function(.*?)split.*\)\)\)/s; - const packedDataMatch = data.match(packedDataRegex); - - if (packedDataMatch) { - const packedJS = packedDataMatch[0]; - const unpacker = new JsUnpacker(packedJS); - - if (unpacker.detect()) { - const unpackedJS = unpacker.unpack(); - if (!unpackedJS) { - console.error("JsUnpacker failed to unpack"); - return null; - } - - await parseSubs(unpackedJS); - - const docheck = unpackedJS.includes("\"hls2\":\"https"); - - if (docheck) { - const fileRegex = /links=.*hls2\":\"(.*?)\"};/; - - const matchUri = unpackedJS.match(fileRegex); - - if (matchUri && matchUri[1]) { - return matchUri[1]; - } else { - console.error("Could not find file URL in unpacked JS"); - return null; - } - } else { - const fileRegex = /sources\s*:\s*\[\s*\{\s*file\s*:\s*"([^"]+)"/; - - const matchUri = unpackedJS.match(fileRegex); - - if (matchUri && matchUri[1]) { - return matchUri[1]; - } else { - console.error("Could not find file URL in unpacked JS"); - return null; - } - } - - - } else { - console.error("JsUnpacker could not detect packed data in resolve response"); - return null; - } - } else { - console.error("No packed JS data found in resolve response for:", url); - if (url.includes('.m3u8')) return url; - return null; - } - } catch (error) { - console.error(`Error during resolve for ${url}:`, error); - return null; - } -} - -async function parseM3U8(m3u8Url, referer) { - const parsedSources = []; - try { - const response = await fetch(m3u8Url, { - headers: { - "User-Agent": headers['User-Agent'], - "Referer": referer - } - }); - - if (!response.ok) { - console.error(`Failed to fetch M3U8 ${m3u8Url}: Status ${response.status}`); - return []; - } - - const m3u8Content = await response.text(); - const lines = m3u8Content.split('\n'); - let currentQuality = null; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i].trim(); - - if (line.startsWith('#EXT-X-STREAM-INF:')) { - currentQuality = null; - const resolutionMatch = line.match(/RESOLUTION=\d+x(\d+)/); - if (resolutionMatch && resolutionMatch[1]) { - currentQuality = resolutionMatch[1] + "p"; - } else { - const bwMatch = line.match(/BANDWIDTH=(\d+)/); - if (bwMatch) { - currentQuality = `bw${bwMatch[1]}`; - } - } - } else if (currentQuality && (line.startsWith('http') || (line.includes('.m3u8') && !line.startsWith('#')))) { - let resolvedUrl = line; - if (!line.startsWith('http')) { - const baseUrl = new URL(m3u8Url); - resolvedUrl = new URL(line, baseUrl.origin + baseUrl.pathname.substring(0, baseUrl.pathname.lastIndexOf('/') + 1)).href; - } - - parsedSources.push({ - file: resolvedUrl, - type: 'hls', - quality: currentQuality, - lang: 'en' - }); - currentQuality = null; - } - } - parsedSources.sort((a, b) => parseQuality(b.quality) - parseQuality(a.quality)); - - return parsedSources; - } catch (error) { - console.error(`Error parsing M3U8 ${m3u8Url}:`, error); - return []; - } -} - -async function parseSubs(scriptstring) { - if (typeof subtitles === 'undefined') { - console.error("Subtitles array is not accessible in parseSubs"); - return; - } - - try { - // First extract the links object from the script - const linksMatch = scriptstring.match(/var links\s*=\s*({[^;]*});/); - if (!linksMatch) { - console.error("Could not find links object in script"); - return; - } - - let linksStr = linksMatch[1] - .replace(/'/g, '"') // Replace single quotes with double quotes for JSON - .replace(/([{,]\s*)([a-zA-Z0-9_$]+)(\s*:)/g, '$1"$2"$3'); // Ensure proper JSON keys - - const links = JSON.parse(linksStr); - const videoUrl = links.hls2; // Use hls2 as fallback if hls4 doesn't exist - - // Now extract the JWPlayer setup configuration - const setupMatch = scriptstring.match(/jwplayer\(["']vplayer["']\)\.setup\((\{[\s\S]*?\})\);[\s\S]*?$/); - if (!setupMatch || !setupMatch[1]) { - console.error("Could not find JWPlayer setup configuration"); - return; - } - - let setupStr = setupMatch[1]; - - // Replace JavaScript expressions with actual values - setupStr = setupStr.replace(/links\.hls4\s*\|\|\s*links\.hls2/g, `"${videoUrl}"`); - - // Clean the string for JSON parsing - setupStr = setupStr - .replace(/\\'/g, "'") - .replace(/([{,]\s*)([a-zA-Z0-9_$]+)(\s*:)/g, '$1"$2"$3') - .replace(/'/g, '"') - .replace(/,\s*([}\]])/g, '$1') - .replace(/"true"/g, 'true') - .replace(/"false"/g, 'false') - .replace(/"null"/g, 'null'); - - let setupConfig; - try { - setupConfig = JSON.parse(setupStr); - } catch (err) { - console.error("JSON parse error:", err, "in string:", setupStr); - return; - } - - if (!setupConfig.tracks) { - console.log("No tracks found in setup configuration"); - return; - } - - const subtitleTracks = (setupConfig.tracks || []).filter(track => - track && (track.kind === "captions" || track.kind === "subtitles") && track.file - ).map(track => ({ - url: track.file, - lang: track.label || track.kind - })); - - subtitleTracks.forEach(newSub => { - if (!subtitles.some(existingSub => existingSub.url === newSub.url && existingSub.lang === newSub.lang)) { - subtitles.push(newSub); - } - }); - - } catch (error) { - console.error("Error during subtitle parsing:", error); - } -} \ No newline at end of file diff --git a/src/extractors/embedsu.js b/src/extractors/embedsu.js deleted file mode 100644 index 3fdcbb4..0000000 --- a/src/extractors/embedsu.js +++ /dev/null @@ -1,183 +0,0 @@ -import fetch from 'node-fetch'; - -function createErrorObject(errorMessage) { - return { - provider: "EmbedSU", - ERROR: [{ - error: `ERROR`, - what_happened: errorMessage, - report_issue: 'https://github.com/Inside4ndroid/TMDB-Embed-API/issues' - }] - }; -} - -export async function getEmbedSu(tmdb_id, s, e) { - const DOMAIN = "https://embed.su"; - const headers = { - 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - 'Referer': DOMAIN, - 'Origin': DOMAIN, - }; - - try { - const urlSearch = s && e ? `${DOMAIN}/embed/tv/${tmdb_id}/${s}/${e}` : `${DOMAIN}/embed/movie/${tmdb_id}`; - const htmlSearch = await fetch(urlSearch, { method: 'GET', headers }); - - if (!htmlSearch.ok) { - return { sources: [createErrorObject(`Failed to fetch initial page: HTTP ${htmlSearch.status}`)] }; - } - - const textSearch = await htmlSearch.text(); - const hashEncodeMatch = textSearch.match(/JSON\.parse\(atob\(\`([^\`]+)/i); - const hashEncode = hashEncodeMatch ? hashEncodeMatch[1] : ""; - - if (!hashEncode) { - return { sources: [createErrorObject("No encoded hash found in initial page")] }; - } - - let hashDecode; - try { - hashDecode = JSON.parse(await stringAtob(hashEncode)); - } catch (e) { - return { sources: [createErrorObject(`Failed to decode initial hash: ${e.message}`)] }; - } - - const mEncrypt = hashDecode.hash; - if (!mEncrypt) { - return { sources: [createErrorObject("No encrypted hash found in decoded data")] }; - } - - let firstDecode; - try { - firstDecode = (await stringAtob(mEncrypt)).split(".").map(item => item.split("").reverse().join("")); - } catch (e) { - return { sources: [createErrorObject(`Failed to decode first layer: ${e.message}`)] }; - } - - let secondDecode; - try { - secondDecode = JSON.parse(await stringAtob(firstDecode.join("").split("").reverse().join(""))); - } catch (e) { - return { sources: [createErrorObject(`Failed to decode second layer: ${e.message}`)] }; - } - - if (!secondDecode || secondDecode.length === 0) { - return { sources: [createErrorObject("No valid sources found after decoding")] }; - } - - const sources = []; - const subtitles = []; - - for (const item of secondDecode) { - try { - const urlDirect = `${DOMAIN}/api/e/${item.hash}`; - const dataDirect = await requestGet(urlDirect, { - "Referer": DOMAIN, - "User-Agent": headers['User-Agent'], - "Origin": DOMAIN - }); - - if (!dataDirect || !dataDirect.source) { - console.warn(`No source found for hash ${item.hash}`); - continue; - } - - const tracks = (dataDirect.subtitles || []).map(sub => ({ - url: sub.file, - lang: sub.label ? sub.label.split('-')[0].trim() : 'en' - })).filter(track => track.url); - - const requestDirectSize = await fetch(dataDirect.source, { headers, method: "GET" }); - if (!requestDirectSize.ok) { - console.warn(`Failed to fetch source ${dataDirect.source}: HTTP ${requestDirectSize.status}`); - continue; - } - - const parseRequest = await requestDirectSize.text(); - const patternSize = parseRequest.split('\n').filter(item => item.includes('/proxy/')); - - const directQuality = patternSize.map(patternItem => { - try { - const sizeQuality = getSizeQuality(patternItem); - let dURL = `${DOMAIN}${patternItem}`; - dURL = dURL.replace(".png", ".m3u8"); - return { file: dURL, type: 'hls', quality: `${sizeQuality}p`, lang: 'en' }; - } catch (e) { - console.warn(`Failed to process quality for pattern: ${patternItem}`, e); - return null; - } - }).filter(item => item !== null); - - if (!directQuality.length) { - console.warn(`No valid qualities found for source ${dataDirect.source}`); - continue; - } - - sources.push({ - provider: "EmbedSu", - files: directQuality, - subtitles: tracks, - headers: { - "Referer": DOMAIN, - "User-Agent": headers['User-Agent'], - "Origin": DOMAIN - } - }); - } catch (e) { - console.error(`Error processing item ${item.hash}:`, e); - // Continue to next item instead of failing entire request - } - } - - if (sources.length === 0) { - return { sources: [createErrorObject("No valid sources found after processing all items")] }; - } - - return { sources }; - } catch (e) { - return { sources: [createErrorObject(`Unexpected error: ${e.message}`)] }; - } -} - -function getSizeQuality(url) { - try { - const parts = url.split('/'); - const base64Part = parts[parts.length - 2]; - const decodedPart = atob(base64Part); - return Number(decodedPart) || 1080; - } catch (e) { - console.warn(`Failed to get size quality for URL ${url}:`, e); - return 720; // Default quality if parsing fails - } -} - -async function stringAtob(input) { - const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - let str = input.replace(/=+$/, ''); - let output = ''; - - if (str.length % 4 === 1) { - throw new Error("'atob' failed: The string to be decoded is not correctly encoded."); - } - - for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) { - buffer = chars.indexOf(buffer); - } - - return output; -} - -async function requestGet(url, headers = {}) { - try { - const response = await fetch(url, { method: 'GET', headers }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return await response.json(); - } catch (error) { - console.error(`Request failed for ${url}:`, error); - return null; - } -} \ No newline at end of file diff --git a/src/utils/jsunpack.js b/src/utils/jsunpack.js deleted file mode 100644 index ca7360d..0000000 --- a/src/utils/jsunpack.js +++ /dev/null @@ -1,106 +0,0 @@ -export default class JsUnpacker { - static Unbase = class { - constructor(radix) { - this.ALPHABET_62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - this.ALPHABET_95 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; - this.alphabet = null; - this.dictionary = {}; - this.radix = radix; - - if (radix > 36) { - if (radix < 62) { - this.alphabet = this.ALPHABET_62.substring(0, radix); - } else if (radix > 62 && radix < 95) { - this.alphabet = this.ALPHABET_95.substring(0, radix); - } else if (radix === 62) { - this.alphabet = this.ALPHABET_62; - } else if (radix === 95) { - this.alphabet = this.ALPHABET_95; - } - - for (let i = 0; i < this.alphabet.length; i++) { - this.dictionary[this.alphabet[i]] = i; - } - } - } - - unbase(str) { - let ret = 0; - - if (this.alphabet === null) { - ret = parseInt(str, this.radix); - } else { - const tmp = str.split('').reverse().join(''); - for (let i = 0; i < tmp.length; i++) { - ret += Math.pow(this.radix, i) * this.dictionary[tmp[i]]; - } - } - return ret; - } - }; - - constructor(packedJS) { - this.packedJS = packedJS; - } - - detect() { - const js = this.packedJS.replace(/\s/g, ''); - const regex = /eval\(function\(p,a,c,k,e,(?:r|d)/; - return regex.test(js); - } - - unpack() { - let js = this.packedJS; - try { - const regex = /\}\s*\('(.*)',\s*(.*?),\s*(\d+),\s*'(.*?)'\.split\('\|'\)/s; - const match = js.match(regex); - if (match && match.length === 5) { - let payload = match[1].replace(/\\'/g, "'"); - const radixStr = match[2]; - const countStr = match[3]; - const symtab = match[4].split('|'); - - let radix = 36; - let count = 0; - try { - radix = parseInt(radixStr); - } catch (e) { - } - try { - count = parseInt(countStr); - } catch (e) { - } - - if (symtab.length !== count) { - throw new Error("Unknown p.a.c.k.e.r. encoding"); - } - - const unbase = new this.constructor.Unbase(radix); - const wordRegex = /\b\w+\b/g; - let decoded = payload; - let replaceOffset = 0; - let wordMatch; - - while ((wordMatch = wordRegex.exec(payload)) !== null) { - const word = wordMatch[0]; - const x = unbase.unbase(word); - let value = null; - if (x < symtab.length) { - value = symtab[x]; - } - - if (value && value.length > 0) { - const start = wordMatch.index + replaceOffset; - const end = start + word.length; - decoded = decoded.substring(0, start) + value + decoded.substring(end); - replaceOffset += (value.length - word.length); - } - } - return decoded; - } - } catch (e) { - return null; - } - return null; - } -} \ No newline at end of file diff --git a/src/workers/sites/2Embed.js b/src/workers/sites/2Embed.js deleted file mode 100644 index e86f724..0000000 --- a/src/workers/sites/2Embed.js +++ /dev/null @@ -1,386 +0,0 @@ -import fetch from "node-fetch"; -import JsUnpacker from '../utils/jsunpack.js'; -import * as cheerio from 'cheerio'; - -const DOMAIN = "https://www.2embed.cc"; -const PLAYER_URL = "https://uqloads.xyz"; - -let subtitles = []; -let sources = []; - -const headers = { - 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - 'Referer': DOMAIN, - 'Origin': DOMAIN, -}; - -function parseQuality(qualityString) { - if (!qualityString) return 0; - const q = qualityString.toUpperCase(); - if (q === '4K') return 4000; - if (q.includes('1080P')) return 1080; - if (q.includes('720P')) return 720; - const numMatch = q.match(/(\d+)/); - return numMatch ? parseInt(numMatch[1], 10) : 0; -} - -function createErrorObject(errorMessage) { - return { - provider: "2Embed", - ERROR: [{ - error: `ERROR`, - what_happened: errorMessage, - report_issue: 'https://github.com/Inside4ndroid/TMDB-Embed-API/issues' - }] - }; -} - -export async function getTwoEmbed(tmdb_id, s, e) { - subtitles = []; - sources = []; - - const tmdbId = tmdb_id; - const initialReferer = s && e ? `${DOMAIN}/embedtv/${tmdbId}&s=${s}&e=${e}` : `${DOMAIN}/embed/${tmdbId}`; - const url = initialReferer; - - try { - const response = await fetch(url, { - method: "POST", - headers: { - Referer: url, - "Content-Type": "application/x-www-form-urlencoded", - "User-Agent": headers['User-Agent'], - }, - body: "pls=pls" - }); - - if (!response.ok) { - return { sources: createErrorObject(`HTTP error fetching initial URL! Status: ${response.status}`) }; - } - - const data = await response.text(); - let extractedValue = null; - let isSwishId = false; - - let match = data.match(/swish\?id=(?[\w\d]+)/); - - if (match && match.groups && match.groups.id) { - extractedValue = match.groups.id; - isSwishId = true; - } else { - match = data.match(/'(.*?player4u.*?)'/); - if (match && match[1]) { - extractedValue = match[1]; - } else { - return { sources: createErrorObject("No relevant swish ID or player4u URL found in initial data.") }; - } - } - - if (extractedValue) { - if (isSwishId) { - const streamUrl = await resolve(`${PLAYER_URL}/e/${extractedValue}`, DOMAIN); - if (!streamUrl) { - return { sources: createErrorObject(`Could not resolve stream URL for swish ID: ${extractedValue}`) }; - } - - const parsedSources = await parseM3U8(streamUrl, PLAYER_URL); - - if (parsedSources.length > 0) { - return { - source: { - provider: "2Embed/Swish", - files: parsedSources, - subtitles: subtitles, - headers: { - "Referer": PLAYER_URL, - "User-Agent": headers['User-Agent'], - "Origin": PLAYER_URL - } - } - }; - } else { - return { sources: createErrorObject("No valid sources found in M3U8 for swish ID") }; - } - } else { - const listPageResponse = await fetch(extractedValue, { - headers: { - Referer: url, - "User-Agent": headers['User-Agent'] - } - }); - - if (!listPageResponse.ok) { - return { sources: createErrorObject(`Failed to fetch player4u list page (${extractedValue}): ${listPageResponse.status}`) }; - } - - const listPageHtml = await listPageResponse.text(); - - const $ = cheerio.load(listPageHtml); - let highestQuality = -1; - let bestPartialUrl = null; - - $('li.slide-toggle a.playbtnx').each((index, element) => { - const linkText = $(element).text(); - const onclickAttr = $(element).attr('onclick'); - - if (!linkText || !onclickAttr) return; - - const qualityMatch = linkText.match(/\s*(\d+p|4K)\s*/i); - const qualityString = qualityMatch ? qualityMatch[1].toUpperCase() : null; - - const urlMatch = onclickAttr.match(/go\('([^']+)'\)/); - const partialUrl = urlMatch ? urlMatch[1] : null; - - if (!qualityString || !partialUrl) return; - - const qualityValue = parseQuality(qualityString); - - if (qualityValue > highestQuality) { - highestQuality = qualityValue; - bestPartialUrl = partialUrl; - } - }); - - if (bestPartialUrl) { - const idMatch = bestPartialUrl.match(/\?id=([\w\d]+)/); - if (idMatch && idMatch[1]) { - const player4uId = idMatch[1]; - const resolveUrl = `${PLAYER_URL}/e/${player4uId}`; - - const streamUrl = await resolve(resolveUrl, extractedValue); - if (!streamUrl) { - return { sources: createErrorObject(`Could not resolve stream URL for player4u ID: ${player4uId}`) }; - } - - const parsedSources = await parseM3U8(streamUrl, PLAYER_URL); - - if (parsedSources.length > 0) { - return { - source: { - provider: "2Embed/Player4u", - files: parsedSources, - subtitles: subtitles, - headers: { - "Referer": PLAYER_URL, - "User-Agent": headers['User-Agent'], - "Origin": PLAYER_URL - } - } - }; - } else { - return { sources: createErrorObject("No valid sources found in M3U8 for player4u ID") }; - } - } else { - return { sources: createErrorObject("Could not extract player4u ID from best quality URL") }; - } - } else { - return { sources: createErrorObject("No valid quality options found on player4u page") }; - } - } - } - return { sources: createErrorObject("No sources found after processing") }; - - } catch (error) { - return { sources: createErrorObject(`Unexpected error: ${error.message}`) }; - } -} - -async function resolve(url, referer) { - try { - const response = await fetch(url, { - headers: { - Referer: referer, - "User-Agent": headers['User-Agent'] - } - }); - - if (!response.ok) { - console.error(`Resolve failed for ${url}: Status ${response.status}`); - return null; - } - - const data = await response.text(); - const packedDataRegex = /eval\(function(.*?)split.*\)\)\)/s; - const packedDataMatch = data.match(packedDataRegex); - - if (packedDataMatch) { - const packedJS = packedDataMatch[0]; - const unpacker = new JsUnpacker(packedJS); - - if (unpacker.detect()) { - const unpackedJS = unpacker.unpack(); - if (!unpackedJS) { - console.error("JsUnpacker failed to unpack"); - return null; - } - - await parseSubs(unpackedJS); - - const docheck = unpackedJS.includes("\"hls2\":\"https"); - - if (docheck) { - const fileRegex = /links=.*hls2\":\"(.*?)\"};/; - - const matchUri = unpackedJS.match(fileRegex); - - if (matchUri && matchUri[1]) { - return matchUri[1]; - } else { - console.error("Could not find file URL in unpacked JS"); - return null; - } - } else { - const fileRegex = /sources\s*:\s*\[\s*\{\s*file\s*:\s*"([^"]+)"/; - - const matchUri = unpackedJS.match(fileRegex); - - if (matchUri && matchUri[1]) { - return matchUri[1]; - } else { - console.error("Could not find file URL in unpacked JS"); - return null; - } - } - - - } else { - console.error("JsUnpacker could not detect packed data in resolve response"); - return null; - } - } else { - console.error("No packed JS data found in resolve response for:", url); - if (url.includes('.m3u8')) return url; - return null; - } - } catch (error) { - console.error(`Error during resolve for ${url}:`, error); - return null; - } -} - -async function parseM3U8(m3u8Url, referer) { - const parsedSources = []; - try { - const response = await fetch(m3u8Url, { - headers: { - "User-Agent": headers['User-Agent'], - "Referer": referer - } - }); - - if (!response.ok) { - console.error(`Failed to fetch M3U8 ${m3u8Url}: Status ${response.status}`); - return []; - } - - const m3u8Content = await response.text(); - const lines = m3u8Content.split('\n'); - let currentQuality = null; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i].trim(); - - if (line.startsWith('#EXT-X-STREAM-INF:')) { - currentQuality = null; - const resolutionMatch = line.match(/RESOLUTION=\d+x(\d+)/); - if (resolutionMatch && resolutionMatch[1]) { - currentQuality = resolutionMatch[1] + "p"; - } else { - const bwMatch = line.match(/BANDWIDTH=(\d+)/); - if (bwMatch) { - currentQuality = `bw${bwMatch[1]}`; - } - } - } else if (currentQuality && (line.startsWith('http') || (line.includes('.m3u8') && !line.startsWith('#')))) { - let resolvedUrl = line; - if (!line.startsWith('http')) { - const baseUrl = new URL(m3u8Url); - resolvedUrl = new URL(line, baseUrl.origin + baseUrl.pathname.substring(0, baseUrl.pathname.lastIndexOf('/') + 1)).href; - } - - parsedSources.push({ - file: resolvedUrl, - type: 'hls', - quality: currentQuality, - lang: 'en' - }); - currentQuality = null; - } - } - parsedSources.sort((a, b) => parseQuality(b.quality) - parseQuality(a.quality)); - - return parsedSources; - } catch (error) { - console.error(`Error parsing M3U8 ${m3u8Url}:`, error); - return []; - } -} - -async function parseSubs(scriptstring) { - if (typeof subtitles === 'undefined') { - console.error("Subtitles array is not accessible in parseSubs"); - return; - } - - try { - const linksMatch = scriptstring.match(/var links\s*=\s*({[^;]*});/); - if (!linksMatch) { - console.error("Could not find links object in script"); - return; - } - - let linksStr = linksMatch[1] - .replace(/'/g, '"') - .replace(/([{,]\s*)([a-zA-Z0-9_$]+)(\s*:)/g, '$1"$2"$3'); - - const links = JSON.parse(linksStr); - const videoUrl = links.hls2; - - const setupMatch = scriptstring.match(/jwplayer\(["']vplayer["']\)\.setup\((\{[\s\S]*?\})\);[\s\S]*?$/); - if (!setupMatch || !setupMatch[1]) { - console.error("Could not find JWPlayer setup configuration"); - return; - } - - let setupStr = setupMatch[1]; - - setupStr = setupStr.replace(/links\.hls4\s*\|\|\s*links\.hls2/g, `"${videoUrl}"`); - - setupStr = setupStr - .replace(/\\'/g, "'") - .replace(/([{,]\s*)([a-zA-Z0-9_$]+)(\s*:)/g, '$1"$2"$3') - .replace(/'/g, '"') - .replace(/,\s*([}\]])/g, '$1') - .replace(/"true"/g, 'true') - .replace(/"false"/g, 'false') - .replace(/"null"/g, 'null'); - - let setupConfig; - try { - setupConfig = JSON.parse(setupStr); - } catch (err) { - console.error("JSON parse error:", err, "in string:", setupStr); - return; - } - - if (!setupConfig.tracks) { - return; - } - - const subtitleTracks = (setupConfig.tracks || []).filter(track => - track && (track.kind === "captions" || track.kind === "subtitles") && track.file - ).map(track => ({ - url: track.file, - lang: track.label || track.kind - })); - - subtitleTracks.forEach(newSub => { - if (!subtitles.some(existingSub => existingSub.url === newSub.url && existingSub.lang === newSub.lang)) { - subtitles.push(newSub); - } - }); - - } catch (error) { - console.error("Error during subtitle parsing:", error); - } -} \ No newline at end of file diff --git a/src/workers/sites/AutoEmbed.js b/src/workers/sites/AutoEmbed.js deleted file mode 100644 index 02ea27d..0000000 --- a/src/workers/sites/AutoEmbed.js +++ /dev/null @@ -1,144 +0,0 @@ -import fetch from "node-fetch"; - -const DOMAIN = "https://autoembed.cc/"; - -const headers = { - 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - 'Referer': DOMAIN, - 'Origin': DOMAIN, -}; - -function createErrorObject(errorMessage) { - return { - provider: "AutoEmbed", - ERROR: [{ - error: `ERROR`, - what_happened: errorMessage, - report_issue: 'https://github.com/Inside4ndroid/TMDB-Embed-API/issues' - }] - }; -}; - -export async function getAutoembed(tmdb_id, s, e) { - const providerName = "AutoEmbed"; - const url = s && e - ? `https://tom.autoembed.cc/api/getVideoSource?type=tv&id=${tmdb_id}/${s}/${e}` - : `https://tom.autoembed.cc/api/getVideoSource?type=movie&id=${tmdb_id}`; - - try { - const response = await fetch(url, { - headers: { - 'Referer': DOMAIN, - 'User-Agent': headers['User-Agent'] - } - }); - - if (!response.ok) { - return createErrorObject(`HTTP error! Status: ${response.status}`); - } - - const data = await response.json(); - - if (data.error) { - return createErrorObject(data.error || "No stream with ID found"); - } - - if (!data.videoSource) { - return createErrorObject("No video source found in response"); - } - - const m3u8Url = data.videoSource; - - try { - const m3u8Response = await fetch(m3u8Url); - if (!m3u8Response.ok) { - return createErrorObject(`Failed to fetch m3u8: HTTP ${m3u8Response.status}`); - } - - const m3u8Content = await m3u8Response.text(); - const sources = parseM3U8(m3u8Content); - - if (!sources || sources.length === 0) { - return createErrorObject("No valid streams found in m3u8 file"); - } - - const formattedSources = sources.map(source => ({ - file: source.url, - type: "hls", - quality: source.quality || 'unknown', - lang: 'en' - })); - - const subs = data.subtitles ? mapSubtitles(data.subtitles) : []; - - return { - source: { - provider: providerName, - files: formattedSources, - subtitles: subs, - headers: { - "Referer": DOMAIN, - "User-Agent": headers['User-Agent'], - "Origin": DOMAIN - } - } - }; - - } catch (m3u8Error) { - return createErrorObject(`Failed to process m3u8: ${m3u8Error.message}`); - } - - } catch (error) { - return createErrorObject(`Network/API error: ${error.message}`); - } -} - -function parseM3U8(m3u8Content) { - try { - const lines = m3u8Content.split('\n'); - const sources = []; - let currentSource = {}; - - for (let i = 0; i < lines.length; i++) { - const line = lines[i].trim(); - - if (line.startsWith('#EXT-X-STREAM-INF:')) { - const resolutionMatch = line.match(/RESOLUTION=(\d+x\d+)/); - if (resolutionMatch) { - const resolution = resolutionMatch[1]; - const quality = resolution.split('x')[1]; - currentSource.quality = quality + 'p'; - } - } else if (line.startsWith('http')) { - currentSource.url = line; - sources.push({ ...currentSource }); - currentSource = {}; - } - } - - return sources; - } catch (error) { - console.error('Error parsing m3u8:', error); - return []; - } -} - -function mapSubtitles(subtitles) { - try { - return subtitles.map(subtitle => { - const lang = (subtitle.label || 'unknown').split(' ')[0].toLowerCase(); - const fileUrl = subtitle.file || ''; - const fileExtension = fileUrl.split('.').pop().toLowerCase(); - const type = fileExtension === 'vtt' ? 'vtt' : 'srt'; - - return { - url: fileUrl, - lang: lang, - type: type - }; - }).filter(sub => sub.url); - } catch (error) { - console.error('Error mapping subtitles:', error); - return []; - } -} \ No newline at end of file diff --git a/src/workers/sites/Embedsu.js b/src/workers/sites/Embedsu.js deleted file mode 100644 index 24e990e..0000000 --- a/src/workers/sites/Embedsu.js +++ /dev/null @@ -1,185 +0,0 @@ -import fetch from 'node-fetch'; - -function createErrorObject(errorMessage) { - return { - provider: "EmbedSU", - ERROR: [{ - error: `ERROR`, - what_happened: errorMessage, - report_issue: 'https://github.com/Inside4ndroid/TMDB-Embed-API/issues' - }] - }; -} - -export async function getEmbedSu(tmdb_id, s, e) { - const DOMAIN = "https://embed.su"; - const headers = { - 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - 'Referer': DOMAIN, - 'Origin': DOMAIN, - }; - - try { - const urlSearch = s && e ? `${DOMAIN}/embed/tv/${tmdb_id}/${s}/${e}` : `${DOMAIN}/embed/movie/${tmdb_id}`; - const htmlSearch = await fetch(urlSearch, { method: 'GET', headers }); - - if (!htmlSearch.ok) { - return { sources: [createErrorObject(`Failed to fetch initial page: HTTP ${htmlSearch.status}`)] }; - } - - const textSearch = await htmlSearch.text(); - const hashEncodeMatch = textSearch.match(/JSON\.parse\(atob\(\`([^\`]+)/i); - const hashEncode = hashEncodeMatch ? hashEncodeMatch[1] : ""; - - if (!hashEncode) { - return { sources: [createErrorObject("No encoded hash found in initial page")] }; - } - - let hashDecode; - try { - hashDecode = JSON.parse(await stringAtob(hashEncode)); - } catch (e) { - return { sources: [createErrorObject(`Failed to decode initial hash: ${e.message}`)] }; - } - - const mEncrypt = hashDecode.hash; - if (!mEncrypt) { - return { sources: [createErrorObject("No encrypted hash found in decoded data")] }; - } - - let firstDecode; - try { - firstDecode = (await stringAtob(mEncrypt)).split(".").map(item => item.split("").reverse().join("")); - } catch (e) { - return { sources: [createErrorObject(`Failed to decode first layer: ${e.message}`)] }; - } - - let secondDecode; - try { - secondDecode = JSON.parse(await stringAtob(firstDecode.join("").split("").reverse().join(""))); - } catch (e) { - return { sources: [createErrorObject(`Failed to decode second layer: ${e.message}`)] }; - } - - if (!secondDecode || secondDecode.length === 0) { - return { sources: [createErrorObject("No valid sources found after decoding")] }; - } - - const sources = []; - const subtitles = []; - - for (const item of secondDecode) { - try { - const urlDirect = `${DOMAIN}/api/e/${item.hash}`; - const dataDirect = await requestGet(urlDirect, { - "Referer": DOMAIN, - "User-Agent": headers['User-Agent'], - "Origin": DOMAIN - }); - - if (!dataDirect || !dataDirect.source) { - console.warn(`No source found for hash ${item.hash}`); - continue; - } - - const tracks = (dataDirect.subtitles || []).map(sub => ({ - url: sub.file, - lang: sub.label ? sub.label.split('-')[0].trim() : 'en' - })).filter(track => track.url); - - const requestDirectSize = await fetch(dataDirect.source, { headers, method: "GET" }); - if (!requestDirectSize.ok) { - console.warn(`Failed to fetch source ${dataDirect.source}: HTTP ${requestDirectSize.status}`); - continue; - } - - const parseRequest = await requestDirectSize.text(); - const patternSize = parseRequest.split('\n').filter(item => item.includes('/proxy/')); - - const directQuality = patternSize.map(patternItem => { - try { - const sizeQuality = getSizeQuality(patternItem); - let dURL = `${DOMAIN}${patternItem}`; - dURL = dURL.replace(".png", ".m3u8"); - return { file: dURL, type: 'hls', quality: `${sizeQuality}p`, lang: 'en' }; - } catch (e) { - console.warn(`Failed to process quality for pattern: ${patternItem}`, e); - return null; - } - }).filter(item => item !== null); - - if (!directQuality.length) { - console.warn(`No valid qualities found for source ${dataDirect.source}`); - continue; - } - - return { - source: { - provider: "EmbedSu", - files: directQuality, - subtitles: tracks, - headers: { - "Referer": DOMAIN, - "User-Agent": headers['User-Agent'], - "Origin": DOMAIN - } - } - }; - } catch (e) { - console.error(`Error processing item ${item.hash}:`, e); - // Continue to next item instead of failing entire request - } - } - - if (sources.length === 0) { - return { sources: [createErrorObject("No valid sources found after processing all items")] }; - } - - return { sources }; - } catch (e) { - return { sources: [createErrorObject(`Unexpected error: ${e.message}`)] }; - } -} - -function getSizeQuality(url) { - try { - const parts = url.split('/'); - const base64Part = parts[parts.length - 2]; - const decodedPart = atob(base64Part); - return Number(decodedPart) || 1080; - } catch (e) { - console.warn(`Failed to get size quality for URL ${url}:`, e); - return 720; // Default quality if parsing fails - } -} - -async function stringAtob(input) { - const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; - let str = input.replace(/=+$/, ''); - let output = ''; - - if (str.length % 4 === 1) { - throw new Error("'atob' failed: The string to be decoded is not correctly encoded."); - } - - for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++); ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0) { - buffer = chars.indexOf(buffer); - } - - return output; -} - -async function requestGet(url, headers = {}) { - try { - const response = await fetch(url, { method: 'GET', headers }); - - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - - return await response.json(); - } catch (error) { - console.error(`Request failed for ${url}:`, error); - return null; - } -} \ No newline at end of file diff --git a/src/workers/sites/VidsrcSU.js b/src/workers/sites/VidsrcSU.js deleted file mode 100644 index 1011674..0000000 --- a/src/workers/sites/VidsrcSU.js +++ /dev/null @@ -1,80 +0,0 @@ -import fetch from 'node-fetch'; - -const DOMAIN = "https://vidsrc.su/"; - -const headers = { - 'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36", - 'Referer': DOMAIN, - 'Origin': DOMAIN, -}; - -function createErrorObject(errorMessage) { - return { - provider: "EmbedSU", - ERROR: [{ - error: `ERROR`, - what_happened: errorMessage, - report_issue: 'https://github.com/Inside4ndroid/TMDB-Embed-API/issues' - }] - }; -}; - -export async function getVidSrcSu(tmdb_id, s, e) { - - const embedUrl = s && e ? `https://vidsrc.su/embed/tv/${tmdb_id}/${s}/${e}` : `https://vidsrc.su/embed/movie/${tmdb_id}`; - - try { - const response = await fetch(embedUrl, { headers }); - if (!response.ok) { - throw new Error(`HTTP error! status: ${response.status}`); - } - const html = await response.text(); - - let subtitles = []; - - const servers = [...html.matchAll(/label: 'Server (3|4|5|7|8|9|10|12|13|15|17|18|19)', url: '(https.*)'/g)].map(match => ({ - file: match[2], - type: "hls", - lang: "en" - })); - - const subtitlesMatch = html.match(/const subtitles = \[(.*)\];/g); - if (subtitlesMatch && subtitlesMatch[0]) { - try { - subtitles = JSON.parse(subtitlesMatch[0].replace('const subtitles = ', '').replaceAll(';', '')); - subtitles.shift(); - subtitles = subtitles.map(subtitle => ({ - url: subtitle.url, - lang: subtitle.language, - type: subtitle.format - })); - } catch (parseError) { - console.error("Error parsing subtitles:", parseError); - subtitles = []; - } - } - - try { - servers.forEach(server => { - // smth - }); - } catch (error) { - return createErrorObject("No valid video streams found after parsing all servers"); - } - - return { - source: { - provider: "VidsrcSU", - files: servers, - subtitles: subtitles, - headers: { - "Referer": DOMAIN, - "User-Agent": headers['User-Agent'], - "Origin": DOMAIN - } - } - }; - } catch (error) { - return createErrorObject(`Unexpected error: ${error.message}`); - } -} \ No newline at end of file diff --git a/src/workers/tmdb.js b/src/workers/tmdb.js deleted file mode 100644 index 51a4e71..0000000 --- a/src/workers/tmdb.js +++ /dev/null @@ -1,52 +0,0 @@ -import dotenv from 'dotenv'; - -dotenv.config(); -const apiKey = process.env.TMDB_API_KEY; - -export async function getMovieFromTmdb(tmdb_id) { - try { - const url = `https://api.themoviedb.org/3/movie/${tmdb_id}?api_key=${apiKey}`; - const response = await fetch(url); - const data = await response.json(); - if (new Date(data.release_date) > new Date().getTime()) { - return new Error("Media not released yet"); - } - let info = { - type: "movie", - title: data.original_title, - releaseYear: data.release_date ? Number(data.release_date.split("-")[0]) : null, - tmdbId: tmdb_id, - imdbId: data.imdb_id - } - return info; - } catch (e) { - return new Error("An error occurred" + e); - } -} - -export async function getTvFromTmdb(tmdb_id, season, episode) { - try { - const url = `https://api.themoviedb.org/3/tv/${tmdb_id}/season/${season}/episode/${episode}?api_key=${apiKey}&append_to_response=external_ids`; - const response = await fetch(url); - const data = await response.json(); - if (new Date(data.air_date) > new Date().getTime()) { - return new Error("Not released yet"); - } - let secondData = await fetch(`https://api.themoviedb.org/3/tv/${tmdb_id}?api_key=${apiKey}`); - secondData = await secondData.json(); - let title = secondData.name; - let info = { - type: "tv", - title: title, - releaseYear: data.air_date ? data.air_date.split("-")[0] : null, - tmdbId: tmdb_id, - imdbId: data.external_ids.imdb_id, - season: season, - episode: episode, - episodeName: data.name - } - return info; - } catch (e) { - return new Error("An error occurred" + e); - } -} diff --git a/src/workers/utils/jsunpack.js b/src/workers/utils/jsunpack.js deleted file mode 100644 index ca7360d..0000000 --- a/src/workers/utils/jsunpack.js +++ /dev/null @@ -1,106 +0,0 @@ -export default class JsUnpacker { - static Unbase = class { - constructor(radix) { - this.ALPHABET_62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - this.ALPHABET_95 = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; - this.alphabet = null; - this.dictionary = {}; - this.radix = radix; - - if (radix > 36) { - if (radix < 62) { - this.alphabet = this.ALPHABET_62.substring(0, radix); - } else if (radix > 62 && radix < 95) { - this.alphabet = this.ALPHABET_95.substring(0, radix); - } else if (radix === 62) { - this.alphabet = this.ALPHABET_62; - } else if (radix === 95) { - this.alphabet = this.ALPHABET_95; - } - - for (let i = 0; i < this.alphabet.length; i++) { - this.dictionary[this.alphabet[i]] = i; - } - } - } - - unbase(str) { - let ret = 0; - - if (this.alphabet === null) { - ret = parseInt(str, this.radix); - } else { - const tmp = str.split('').reverse().join(''); - for (let i = 0; i < tmp.length; i++) { - ret += Math.pow(this.radix, i) * this.dictionary[tmp[i]]; - } - } - return ret; - } - }; - - constructor(packedJS) { - this.packedJS = packedJS; - } - - detect() { - const js = this.packedJS.replace(/\s/g, ''); - const regex = /eval\(function\(p,a,c,k,e,(?:r|d)/; - return regex.test(js); - } - - unpack() { - let js = this.packedJS; - try { - const regex = /\}\s*\('(.*)',\s*(.*?),\s*(\d+),\s*'(.*?)'\.split\('\|'\)/s; - const match = js.match(regex); - if (match && match.length === 5) { - let payload = match[1].replace(/\\'/g, "'"); - const radixStr = match[2]; - const countStr = match[3]; - const symtab = match[4].split('|'); - - let radix = 36; - let count = 0; - try { - radix = parseInt(radixStr); - } catch (e) { - } - try { - count = parseInt(countStr); - } catch (e) { - } - - if (symtab.length !== count) { - throw new Error("Unknown p.a.c.k.e.r. encoding"); - } - - const unbase = new this.constructor.Unbase(radix); - const wordRegex = /\b\w+\b/g; - let decoded = payload; - let replaceOffset = 0; - let wordMatch; - - while ((wordMatch = wordRegex.exec(payload)) !== null) { - const word = wordMatch[0]; - const x = unbase.unbase(word); - let value = null; - if (x < symtab.length) { - value = symtab[x]; - } - - if (value && value.length > 0) { - const start = wordMatch.index + replaceOffset; - const end = start + word.length; - decoded = decoded.substring(0, start) + value + decoded.substring(end); - replaceOffset += (value.length - word.length); - } - } - return decoded; - } - } catch (e) { - return null; - } - return null; - } -} \ No newline at end of file diff --git a/utils/auth-users.json b/utils/auth-users.json new file mode 100644 index 0000000..588c488 --- /dev/null +++ b/utils/auth-users.json @@ -0,0 +1,9 @@ +{ + "info": "Initial default credentials. CHANGE THE PASSWORD IMMEDIATELY using /auth/change-password after logging in.", + "users": [ + { + "username": "admin", + "hash": "7fffd5f131a733035eaf443cd99905c0:f1cfa876f9b84fede40cd618a4352221f7ab36e4f8bead432ba5d866b06cb9fcc2903ce623d8286bb541f8d28490fc692d0bf3fadda08002265374915cdb27b5" + } + ] +} \ No newline at end of file diff --git a/utils/auth.js b/utils/auth.js new file mode 100644 index 0000000..c9ab5dd --- /dev/null +++ b/utils/auth.js @@ -0,0 +1,137 @@ +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); + +// Path for auth users file +const AUTH_FILE = path.join(process.cwd(), 'utils/auth-users.json'); + +// In-memory cache +let usersCache = null; +let lastLoaded = 0; +const LOAD_INTERVAL_MS = 30 * 1000; // reload at most every 30s + +function ensureAuthFile() { + if (fs.existsSync(AUTH_FILE)) return; + const defaultPassword = 'change-me'; + const { hash } = hashPassword(defaultPassword); + const data = { + info: 'Initial default credentials. CHANGE THE PASSWORD IMMEDIATELY using /auth/change-password after logging in.', + users: [ { username: 'admin', hash } ] + }; + fs.writeFileSync(AUTH_FILE, JSON.stringify(data, null, 2)); + console.warn('[auth] Created default auth-users.json with username "admin" and password "change-me". CHANGE IT NOW.'); +} + +function loadUsers(force=false){ + if (!force && usersCache && (Date.now() - lastLoaded) < LOAD_INTERVAL_MS) return usersCache; + ensureAuthFile(); + try { + const raw = fs.readFileSync(AUTH_FILE, 'utf8'); + const parsed = JSON.parse(raw); + usersCache = Array.isArray(parsed.users) ? parsed.users : []; + lastLoaded = Date.now(); + } catch (e) { + console.error('[auth] Failed loading users file:', e.message); + usersCache = []; + } + return usersCache; +} + +function hashPassword(password, salt){ + salt = salt || crypto.randomBytes(16).toString('hex'); + const derived = crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512').toString('hex'); + return { hash: `${salt}:${derived}`, salt }; +} + +function verifyPassword(password, stored){ + if (!stored || !stored.includes(':')) return false; + const [salt, derived] = stored.split(':'); + const test = crypto.pbkdf2Sync(password, salt, 100000, 64, 'sha512').toString('hex'); + return crypto.timingSafeEqual(Buffer.from(derived,'hex'), Buffer.from(test,'hex')); +} + +function findUser(username){ + return loadUsers().find(u => u.username === username); +} + +function updatePassword(username, newPassword){ + const users = loadUsers(true); + const u = users.find(x => x.username === username); + if (!u) return false; + u.hash = hashPassword(newPassword).hash; + try { + fs.writeFileSync(AUTH_FILE, JSON.stringify({ users }, null, 2)); + usersCache = users; + lastLoaded = Date.now(); + return true; + } catch (e) { + console.error('[auth] Failed writing updated password:', e.message); + return false; + } +} + +// Session issuance & validation +const SESSION_SECRET = crypto.randomBytes(32); // ephemeral; restart invalidates sessions +const SESSION_TTL_MS = 12 * 60 * 60 * 1000; // 12h + +function base64url(input){ + return Buffer.from(input).toString('base64').replace(/=/g,'').replace(/\+/g,'-').replace(/\//g,'_'); +} + +function sign(payloadB64){ + return base64url(crypto.createHmac('sha256', SESSION_SECRET).update(payloadB64).digest()); +} + +function issueSession(username){ + const payload = { u: username, exp: Date.now() + SESSION_TTL_MS }; + const payloadB64 = base64url(JSON.stringify(payload)); + const sig = sign(payloadB64); + return `${payloadB64}.${sig}`; +} + +function parseCookies(req){ + const h = req.headers.cookie; if (!h) return {}; + return h.split(';').map(v=>v.trim()).reduce((acc, part)=>{ const eq = part.indexOf('='); if(eq>0){ acc[part.slice(0,eq)] = decodeURIComponent(part.slice(eq+1)); } return acc; },{}); +} + +function validateSessionToken(token){ + if (!token || !token.includes('.')) return null; + const [payloadB64, sig] = token.split('.'); + if (sign(payloadB64) !== sig) return null; + try { + const payload = JSON.parse(Buffer.from(payloadB64.replace(/-/g,'+').replace(/_/g,'/'),'base64').toString('utf8')); + if (typeof payload.exp !== 'number' || Date.now() > payload.exp) return null; + return payload; + } catch (e) { + return null; + } +} + +function authenticate(username, password){ + const user = findUser(username); + if (!user) return false; + return verifyPassword(password, user.hash); +} + +function getSession(req){ + const cookies = parseCookies(req); + if (!cookies.session) return null; + return validateSessionToken(cookies.session); +} + +function requireAuth(req, res, next){ + const sess = getSession(req); + if (!sess) return res.status(401).json({ success:false, error:'AUTH_REQUIRED' }); + req.session = sess; + next(); +} + +module.exports = { + loadUsers, + authenticate, + issueSession, + requireAuth, + getSession, + updatePassword, + AUTH_FILE +}; diff --git a/utils/config.js b/utils/config.js new file mode 100644 index 0000000..69ad7de --- /dev/null +++ b/utils/config.js @@ -0,0 +1,195 @@ +require('dotenv').config(); +const fs = require('fs'); +const path = require('path'); +// Relocated user-config.json into utils directory; maintain backward-compatible fallback +const NEW_OVERRIDE_PATH = path.join(process.cwd(), 'utils', 'user-config.json'); +const LEGACY_OVERRIDE_PATH = path.join(process.cwd(), 'user-config.json'); +const OVERRIDE_PATH = (fs.existsSync(NEW_OVERRIDE_PATH) || !fs.existsSync(LEGACY_OVERRIDE_PATH)) ? NEW_OVERRIDE_PATH : LEGACY_OVERRIDE_PATH; +const CONFIG_SCHEMA_VERSION = 1; // Increment when structure / semantics change + +function parseJsonMaybe(val) { + if (!val) return null; + const trimmed = val.trim(); + if (!trimmed) return null; + if (trimmed.startsWith('{') || trimmed.startsWith('[')) { + try { return JSON.parse(trimmed); } catch { return null; } + } + return null; +} + +function parseCookies(raw) { + if (!raw) return []; + const text = raw.trim(); + if (!text) return []; + let arr = []; + const json = parseJsonMaybe(text); + if (Array.isArray(json)) arr = json; else { + arr = text.split(/[,;\n]+/).map(s => s.trim()).filter(Boolean); + } + return Array.from(new Set(arr.map(c => c.replace(/^ui=/,'').trim()).filter(Boolean))); +} + +function readOverrideFile() { + try { + if (fs.existsSync(OVERRIDE_PATH)) { + const raw = fs.readFileSync(OVERRIDE_PATH, 'utf8'); + const data = JSON.parse(raw); + return data && typeof data === 'object' ? data : {}; + } + } catch (e) { + console.warn('[config] Failed to read override file:', e.message); + } + return {}; +} + +function writeOverrideFile(obj) { + try { + fs.writeFileSync(OVERRIDE_PATH, JSON.stringify(obj, null, 2)); + return true; + } catch (e) { + console.error('[config] Failed to write override file:', e.message); + return false; + } +} + +function normalizeConfig(base) { + const cfg = { ...base }; + // Marker: if user explicitly provided an empty array for tmdbApiKeys in override file we should not resurrect legacy key + const explicitEmptyKeys = Array.isArray(cfg.tmdbApiKeys) && cfg.tmdbApiKeys.length === 0 && Object.prototype.hasOwnProperty.call(base,'tmdbApiKeys'); + if (!cfg.configVersion) cfg.configVersion = CONFIG_SCHEMA_VERSION; + // Derive structured views + cfg.minQualities = parseJsonMaybe(cfg.minQualitiesRaw) || (cfg.minQualitiesRaw ? { default: cfg.minQualitiesRaw } : null); + cfg.excludeCodecs = parseJsonMaybe(cfg.excludeCodecsRaw) || null; + cfg.febboxCookies = Array.isArray(cfg.febboxCookies) ? cfg.febboxCookies : parseCookies(cfg.febboxCookies); + // TMDB multi-key support: allow tmdbApiKeys (array) or legacy single tmdbApiKey + if (cfg.tmdbApiKeys && !Array.isArray(cfg.tmdbApiKeys)) { + if (typeof cfg.tmdbApiKeys === 'string') { + // split by newline/comma/semicolon + cfg.tmdbApiKeys = cfg.tmdbApiKeys.split(/[\n,;]+/).map(s=>s.trim()).filter(Boolean); + } else cfg.tmdbApiKeys = []; + } + if (!cfg.tmdbApiKeys || !cfg.tmdbApiKeys.length) { + if (!explicitEmptyKeys && cfg.tmdbApiKey) cfg.tmdbApiKeys = [cfg.tmdbApiKey]; + else cfg.tmdbApiKeys = []; + } + // If user explicitly cleared tmdbApiKeys via override, also clear legacy single key so it is not shown + if (explicitEmptyKeys) { + cfg.tmdbApiKey = null; + } + // Ensure dedupe + trim + cfg.tmdbApiKeys = Array.from(new Set(cfg.tmdbApiKeys.map(k=>String(k).trim()).filter(Boolean))); + // Booleans normalization + const boolKeys = [ + 'enableShowboxProvider','enableXprimeProvider','enable4khdhubProvider','enableMoviesmodProvider','enableMp4hydraProvider','enableVidzeeProvider','enableVixsrcProvider', + 'disableCache','enablePStreamApi','showboxUseRotatingProxy','disableUrlValidation','disable4khdhubUrlValidation' + ]; + boolKeys.forEach(k=>{ if (cfg[k] === 'true') cfg[k] = true; else if (cfg[k] === 'false') cfg[k] = false; }); + // Default values if undefined + if (cfg.enableShowboxProvider === undefined) cfg.enableShowboxProvider = true; + if (cfg.enableXprimeProvider === undefined) cfg.enableXprimeProvider = true; + if (cfg.enable4khdhubProvider === undefined) cfg.enable4khdhubProvider = true; + if (cfg.enableMoviesmodProvider === undefined) cfg.enableMoviesmodProvider = true; + if (cfg.enableMp4hydraProvider === undefined) cfg.enableMp4hydraProvider = true; + if (cfg.enableVidzeeProvider === undefined) cfg.enableVidzeeProvider = true; + if (cfg.enableVixsrcProvider === undefined) cfg.enableVixsrcProvider = true; + if (cfg.disableCache === undefined) cfg.disableCache = false; + if (cfg.enablePStreamApi === undefined) cfg.enablePStreamApi = true; + if (cfg.showboxUseRotatingProxy === undefined) cfg.showboxUseRotatingProxy = false; + if (cfg.disableUrlValidation === undefined) cfg.disableUrlValidation = false; + if (cfg.disable4khdhubUrlValidation === undefined) cfg.disable4khdhubUrlValidation = false; + return cfg; +} + +function applyConfigToEnv(cfg){ + // Mirror config values into process.env so legacy provider code continues to work without .env file + if (cfg.port) process.env.API_PORT = String(cfg.port); + // Backward compat: set single TMDB_API_KEY env to first key if available + if (cfg.tmdbApiKeys && cfg.tmdbApiKeys.length) process.env.TMDB_API_KEY = cfg.tmdbApiKeys[0]; + else if (cfg.tmdbApiKey) process.env.TMDB_API_KEY = cfg.tmdbApiKey; else delete process.env.TMDB_API_KEY; + if (cfg.defaultProviders) process.env.DEFAULT_PROVIDERS = cfg.defaultProviders.join(','); + if (cfg.minQualitiesRaw) process.env.MIN_QUALITIES = cfg.minQualitiesRaw; else delete process.env.MIN_QUALITIES; + if (cfg.excludeCodecsRaw) process.env.EXCLUDE_CODECS = cfg.excludeCodecsRaw; else delete process.env.EXCLUDE_CODECS; + if (cfg.febboxCookies && cfg.febboxCookies.length) process.env.FEBBOX_COOKIES = cfg.febboxCookies.join(','); + else delete process.env.FEBBOX_COOKIES; + if (cfg.defaultRegion) process.env.DEFAULT_REGION = cfg.defaultRegion; else delete process.env.DEFAULT_REGION; + // Provider enable flags + process.env.ENABLE_SHOWBOX_PROVIDER = cfg.enableShowboxProvider ? 'true':'false'; + process.env.ENABLE_XPRIME_PROVIDER = cfg.enableXprimeProvider ? 'true':'false'; + process.env.ENABLE_4KHDHUB_PROVIDER = cfg.enable4khdhubProvider ? 'true':'false'; + process.env.ENABLE_MOVIESMOD_PROVIDER = cfg.enableMoviesmodProvider ? 'true':'false'; + process.env.ENABLE_MP4HYDRA_PROVIDER = cfg.enableMp4hydraProvider ? 'true':'false'; + process.env.ENABLE_VIDZEE_PROVIDER = cfg.enableVidzeeProvider ? 'true':'false'; + process.env.ENABLE_VIXSRC_PROVIDER = cfg.enableVixsrcProvider ? 'true':'false'; + // Caching / validation / PStream + process.env.DISABLE_CACHE = cfg.disableCache ? 'true':'false'; + process.env.ENABLE_PSTREAM_API = cfg.enablePStreamApi ? 'true':'false'; + process.env.DISABLE_URL_VALIDATION = cfg.disableUrlValidation ? 'true':'false'; + process.env.DISABLE_4KHDHUB_URL_VALIDATION = cfg.disable4khdhubUrlValidation ? 'true':'false'; + // Showbox specific + if (cfg.showboxCacheDir) process.env.SHOWBOX_CACHE_DIR = cfg.showboxCacheDir; else delete process.env.SHOWBOX_CACHE_DIR; + process.env.SHOWBOX_USE_ROTATING_PROXY = cfg.showboxUseRotatingProxy ? 'true':'false'; + if (cfg.showboxProxyPrimary) process.env.SHOWBOX_PROXY_URL_VALUE = cfg.showboxProxyPrimary; else delete process.env.SHOWBOX_PROXY_URL_VALUE; + if (cfg.showboxProxyAlternate) process.env.SHOWBOX_PROXY_URL_ALTERNATE = cfg.showboxProxyAlternate; else delete process.env.SHOWBOX_PROXY_URL_ALTERNATE; + // Other provider proxies + if (cfg.xprimeProxyUrl) process.env.XPRIME_PROXY_URL = cfg.xprimeProxyUrl; else delete process.env.XPRIME_PROXY_URL; + if (cfg.vidzeeProxyUrl) process.env.VIDZEE_PROXY_URL = cfg.vidzeeProxyUrl; else delete process.env.VIDZEE_PROXY_URL; + if (cfg.vidsrcProxyUrl) process.env.VIDSRC_PROXY_URL = cfg.vidsrcProxyUrl; else delete process.env.VIDSRC_PROXY_URL; + if (cfg.moviesmodProxyUrl) process.env.MOVIESMOD_PROXY_URL = cfg.moviesmodProxyUrl; else delete process.env.MOVIESMOD_PROXY_URL; + if (cfg.defaultRegion) process.env.FEBBOX_REGION = cfg.defaultRegion; // alias +} + +function loadConfig() { + // Start with env for backward compat, then override with user-config.json + const envCfg = { + port: Number(process.env.API_PORT) || 8787, + defaultRegion: process.env.DEFAULT_REGION || process.env.FEBBOX_REGION || null, + defaultProviders: (process.env.DEFAULT_PROVIDERS || '').split(/[\s,]+/).map(p=>p.trim().toLowerCase()).filter(Boolean), + minQualitiesRaw: process.env.MIN_QUALITIES || null, + excludeCodecsRaw: process.env.EXCLUDE_CODECS || null, + tmdbApiKey: process.env.TMDB_API_KEY || null, + tmdbApiKeys: parseJsonMaybe(process.env.TMDB_API_KEYS) || null, + febboxCookies: parseCookies(process.env.FEBBOX_COOKIES), + // Extended advanced config (may not exist in env) + enableShowboxProvider: process.env.ENABLE_SHOWBOX_PROVIDER, + enableXprimeProvider: process.env.ENABLE_XPRIME_PROVIDER, + enable4khdhubProvider: process.env.ENABLE_4KHDHUB_PROVIDER, + enableMoviesmodProvider: process.env.ENABLE_MOVIESMOD_PROVIDER, + enableMp4hydraProvider: process.env.ENABLE_MP4HYDRA_PROVIDER, + enableVidzeeProvider: process.env.ENABLE_VIDZEE_PROVIDER, + enableVixsrcProvider: process.env.ENABLE_VIXSRC_PROVIDER, + disableCache: process.env.DISABLE_CACHE, + enablePStreamApi: process.env.ENABLE_PSTREAM_API, + showboxUseRotatingProxy: process.env.SHOWBOX_USE_ROTATING_PROXY, + showboxCacheDir: process.env.SHOWBOX_CACHE_DIR || null, + showboxProxyPrimary: process.env.SHOWBOX_PROXY_URL_VALUE || null, + showboxProxyAlternate: process.env.SHOWBOX_PROXY_URL_ALTERNATE || null, + xprimeProxyUrl: process.env.XPRIME_PROXY_URL || null, + vidzeeProxyUrl: process.env.VIDZEE_PROXY_URL || null, + vidsrcProxyUrl: process.env.VIDSRC_PROXY_URL || null, + moviesmodProxyUrl: process.env.MOVIESMOD_PROXY_URL || null, + disableUrlValidation: process.env.DISABLE_URL_VALIDATION, + disable4khdhubUrlValidation: process.env.DISABLE_4KHDHUB_URL_VALIDATION + }; + const override = readOverrideFile(); + const merged = { ...envCfg, ...override }; + const normalized = normalizeConfig(merged); + applyConfigToEnv(normalized); // ensure providers see updated process.env values + return normalized; +} + +const config = loadConfig(); + +function saveConfigPatch(patch) { + const currentOverride = readOverrideFile(); + const updated = { ...currentOverride, ...patch }; + if (!updated.configVersion) updated.configVersion = CONFIG_SCHEMA_VERSION; + // Remove keys set to null to fall back to env + Object.keys(updated).forEach(k => { if (updated[k] === null) delete updated[k]; }); + if (writeOverrideFile(updated)) { + Object.assign(config, loadConfig()); + return true; + } + return false; +} + +module.exports = { config, reloadConfig: () => Object.assign(config, loadConfig()), saveConfigPatch, OVERRIDE_PATH, CONFIG_SCHEMA_VERSION }; diff --git a/utils/streamFilters.js b/utils/streamFilters.js new file mode 100644 index 0000000..2560ee9 --- /dev/null +++ b/utils/streamFilters.js @@ -0,0 +1,49 @@ +function parseQuality(qualityString) { + if (!qualityString || typeof qualityString !== 'string') return 0; + const q = qualityString.toLowerCase(); + if (q.includes('auto')) return 1080; + if (q.includes('4k') || q.includes('2160')) return 2160; + if (q.includes('1440')) return 1440; + if (q.includes('1080')) return 1080; + if (q.includes('720')) return 720; + if (q.includes('576')) return 576; + if (q.includes('480')) return 480; + if (q.includes('360')) return 360; + if (q.includes('240')) return 240; + const kbps = q.match(/(\d+)k/); if (kbps) return parseInt(kbps[1],10)/1000; + if (q.includes('hd')) return 720; + if (q.includes('sd')) return 480; + if (q.includes('cam')) return 100; + if (q.includes('ts')) return 200; + if (q.includes('scr')) return 300; + if (q.includes('dvdscr')) return 350; + if (q.includes('r5') || q.includes('r6')) return 400; + if (q.includes('org')) return 4320; + return 0; +} +function filterByMinQuality(streams, minQualitySetting) { + if (!minQualitySetting || minQualitySetting.toLowerCase() === 'all') return streams; + const minNumeric = parseQuality(minQualitySetting); + if (minNumeric === 0 && minQualitySetting.toLowerCase() !== 'all') return streams; + return streams.filter(s => parseQuality(s.quality) >= minNumeric); +} +function filterByCodecs(streams, exclude) { + if (!exclude || (!exclude.excludeDV && !exclude.excludeHDR)) return streams; + return streams.filter(s => { + if (!Array.isArray(s.codecs)) return true; + if (exclude.excludeDV && s.codecs.includes('DV')) return false; + if (exclude.excludeHDR && s.codecs.some(c => ['HDR','HDR10','HDR10+'].includes(c))) return false; + return true; + }); +} +function applyFilters(streams, providerName, minQualitiesConfig, excludeCodecsConfig) { + let minQuality = null; + if (minQualitiesConfig) { + if (typeof minQualitiesConfig === 'string') minQuality = minQualitiesConfig; + else if (minQualitiesConfig.default) minQuality = minQualitiesConfig.default; + } + let filtered = filterByMinQuality(streams, minQuality); + filtered = filterByCodecs(filtered, excludeCodecsConfig); + return filtered; +} +module.exports = { applyFilters }; \ No newline at end of file diff --git a/utils/tmdb.js b/utils/tmdb.js new file mode 100644 index 0000000..db1f784 --- /dev/null +++ b/utils/tmdb.js @@ -0,0 +1,38 @@ +const fetch = (...args) => import('node-fetch').then(m => m.default(...args)); +const { config } = require('./config'); + +const cache = { + imdbByTmdb: new Map(), + details: new Map(), +}; +const TTL_MS = 6 * 60 * 60 * 1000; +function isFresh(entry) { return entry && (Date.now() - entry.ts) < TTL_MS; } + +async function tmdbFetchJson(url) { + if (!config.tmdbApiKey) throw new Error('TMDB_API_KEY missing'); + const sep = url.includes('?') ? '&' : '?'; + const full = `${url}${sep}api_key=${config.tmdbApiKey}`; + const res = await fetch(full, { timeout: 15000 }); + if (!res.ok) throw new Error(`TMDB request failed ${res.status}`); + return res.json(); +} +async function getExternalIds(type, tmdbId) { + const key = `${type}:${tmdbId}`; + const cached = cache.imdbByTmdb.get(key); + if (isFresh(cached)) return cached.data; + const json = await tmdbFetchJson(`https://api.themoviedb.org/3/${type}/${tmdbId}/external_ids`); + cache.imdbByTmdb.set(key, { data: json, ts: Date.now() }); + return json; +} +async function getDetails(type, tmdbId) { + const key = `${type}:${tmdbId}:details`; + const cached = cache.details.get(key); + if (isFresh(cached)) return cached.data; + const json = await tmdbFetchJson(`https://api.themoviedb.org/3/${type}/${tmdbId}`); + cache.details.set(key, { data: json, ts: Date.now() }); + return json; +} +async function resolveImdbId(type, tmdbId) { + try { const ext = await getExternalIds(type, tmdbId); return ext.imdb_id || null; } catch { return null; } +} +module.exports = { getExternalIds, getDetails, resolveImdbId }; \ No newline at end of file diff --git a/utils/tmdbKey.js b/utils/tmdbKey.js new file mode 100644 index 0000000..eb9882a --- /dev/null +++ b/utils/tmdbKey.js @@ -0,0 +1,12 @@ +const { config } = require('./config'); + +function getTmdbApiKey() { + if (config.tmdbApiKeys && config.tmdbApiKeys.length) { + const idx = Math.floor(Math.random() * config.tmdbApiKeys.length); + return config.tmdbApiKeys[idx]; + } + // Fallback legacy single value (config or env) + return config.tmdbApiKey || process.env.TMDB_API_KEY || null; +} + +module.exports = { getTmdbApiKey }; diff --git a/utils/user-config.json b/utils/user-config.json new file mode 100644 index 0000000..e8c6d31 --- /dev/null +++ b/utils/user-config.json @@ -0,0 +1,6 @@ +{ + "defaultProviders": [], + "configVersion": 1, + "tmdbApiKeys": [], + "enableShowboxProvider": true +} \ No newline at end of file