From a91ffa4c124dd7db3629de366be4b49ca21a0b8d Mon Sep 17 00:00:00 2001 From: VineFeeder Date: Wed, 18 Mar 2026 12:33:44 +0000 Subject: [PATCH] upstream updates --- README.md | 15 +- UPDATES.md | 5 - packages/envied/pyproject.toml | 95 +- packages/envied/src/envied/CHANGELOG.md | 152 + packages/envied/src/envied/binaries/ML-Worker | Bin 0 -> 2339264 bytes packages/envied/src/envied/commands/dl.bak | 2774 +++++++++++++++++ packages/envied/src/envied/commands/dl.py | 639 ++-- packages/envied/src/envied/core/__init__.py | 2 +- packages/envied/src/envied/core/__main__.py | 1 + .../src/envied/core/api/download_manager.py | 56 +- .../envied/src/envied/core/api/handlers.py | 166 +- packages/envied/src/envied/core/api/routes.py | 141 +- packages/envied/src/envied/core/config.py | 97 +- .../src/envied/core/downloaders/aria2c.py | 24 +- .../envied/core/downloaders/n_m3u8dl_re.py | 3 + .../envied/src/envied/core/drm/playready.py | 41 +- .../envied/src/envied/core/manifests/dash.py | 37 +- .../envied/src/envied/core/manifests/hls.py | 12 + .../envied/src/envied/core/manifests/ism.py | 9 +- .../src/envied/core/providers/__init__.py | 428 +++ .../envied/src/envied/core/providers/_base.py | 97 + .../src/envied/core/providers/imdbapi.py | 123 + .../envied/src/envied/core/providers/simkl.py | 172 + .../envied/src/envied/core/providers/tmdb.py | 199 ++ packages/envied/src/envied/core/service.py | 125 +- packages/envied/src/envied/core/session.py | 17 +- .../envied/src/envied/core/title_cacher.py | 205 +- .../envied/src/envied/core/titles/episode.py | 193 +- .../envied/src/envied/core/titles/movie.py | 145 +- .../envied/src/envied/core/titles/song.py | 59 +- .../envied/src/envied/core/titles/title.py | 123 + .../src/envied/core/tracks/attachment.py | 4 +- .../envied/src/envied/core/tracks/audio.py | 2 +- .../envied/src/envied/core/tracks/hybrid.py | 491 ++- .../envied/src/envied/core/tracks/track.py | 31 +- .../envied/src/envied/core/tracks/tracks.py | 144 +- .../envied/src/envied/core/tracks/video.py | 37 +- packages/envied/src/envied/core/utilities.py | 2 +- .../envied/src/envied/core/utils/animeapi.py | 92 + .../src/envied/core/utils/click_types.py | 27 + .../src/envied/core/utils/language_tags.py | 79 + .../envied/src/envied/core/utils/selector.py | 374 ++- packages/envied/src/envied/core/utils/tags.py | 629 +--- .../envied/core/utils/template_formatter.py | 162 + .../src/envied/envied-working-example.yaml | 70 +- .../envied/src/envied/services/CR/__init__.py | 400 ++- .../envied/src/envied/services/CR/config.yaml | 5 +- .../envied/src/envied/services/DSNP/README.md | 43 + .../src/envied/services/DSNP/__init__.py | 853 ++--- .../src/envied/services/DSNP/config.yaml | 29 +- .../src/envied/services/DSNP/queries.py | 3 +- packages/envied/src/envied/services/README.md | 2 +- .../src/envied/services/RTDE/__init__.py | 472 +++ .../src/envied/services/RTDE/config.yaml | 12 + .../envied/src/envied/services/UNXT/README.md | 19 + .../src/envied/services/UNXT/__init__.py | 662 ++++ .../src/envied/services/UNXT/config.yaml | 12 + .../vinefeeder/services/BBC/config.yaml.save | 22 + uv.lock | 462 ++- 59 files changed, 9134 insertions(+), 2161 deletions(-) create mode 100644 packages/envied/src/envied/binaries/ML-Worker create mode 100644 packages/envied/src/envied/commands/dl.bak create mode 100644 packages/envied/src/envied/core/providers/__init__.py create mode 100644 packages/envied/src/envied/core/providers/_base.py create mode 100644 packages/envied/src/envied/core/providers/imdbapi.py create mode 100644 packages/envied/src/envied/core/providers/simkl.py create mode 100644 packages/envied/src/envied/core/providers/tmdb.py create mode 100644 packages/envied/src/envied/core/utils/animeapi.py create mode 100644 packages/envied/src/envied/core/utils/language_tags.py create mode 100644 packages/envied/src/envied/core/utils/template_formatter.py create mode 100644 packages/envied/src/envied/services/DSNP/README.md create mode 100644 packages/envied/src/envied/services/RTDE/__init__.py create mode 100644 packages/envied/src/envied/services/RTDE/config.yaml create mode 100644 packages/envied/src/envied/services/UNXT/README.md create mode 100644 packages/envied/src/envied/services/UNXT/__init__.py create mode 100644 packages/envied/src/envied/services/UNXT/config.yaml create mode 100644 packages/vinefeeder/src/vinefeeder/services/BBC/config.yaml.save diff --git a/README.md b/README.md index d9e73f3..7141575 100644 --- a/README.md +++ b/README.md @@ -17,12 +17,17 @@ TwinVine is the easy way to handle your download tasks. **usage** - - + +TwinVine is a sophisticated piece of software engineering, (if I am allowed to say that) , handling two Python packages at once, each inter-playing with the other. It needs treating differently from anything you will have used before. + +All access must be done via the package manager - uv. You have two ways in + ``` - uv run envied dl (options) (service) (program url) - uv run vinefeeder - to open the interactive GUI for search, browse, etc. - To go to the command line use of 'envied' after using the GUI: close the GUI directly, or ctrl+c in terminal. + uv run vinefeeder + uv run envied dl --select-titles + + + To go to the command line use of 'envied', on Linix you may select 'run envied' after clicking the GUI envied button. On Windows, close the GUI directly, or ctrl+c to end the program and return to the terminal. ``` diff --git a/UPDATES.md b/UPDATES.md index a2e893c..388bdaa 100644 --- a/UPDATES.md +++ b/UPDATES.md @@ -1,10 +1,5 @@ **Updates** -**16 Feb 2026** - -- upstream envied to 3.0.0 - envied's --select-titles option now follows dev branch of unshackle. - **19 Jan 2026** - upstream envied to 2.3.0 diff --git a/packages/envied/pyproject.toml b/packages/envied/pyproject.toml index 0c8ef60..5a65ec3 100644 --- a/packages/envied/pyproject.toml +++ b/packages/envied/pyproject.toml @@ -4,10 +4,10 @@ build-backend = "uv_build" [project] name = "envied" -version = "3.0.0" +version = "4.0.0" description = "Modular Movie, TV, and Music Archival Software." authors = [{ name = "rlaphoenix and others" }] -requires-python = ">=3.10,<3.13" +requires-python = ">=3.10,<=3.14" readme = "README.md" license = "GPL-3.0-only" keywords = [ @@ -26,57 +26,60 @@ classifiers = [ "Topic :: Security :: Cryptography", ] dependencies = [ - "appdirs>=1.4.4,<2", - "Brotli>=1.1.0,<2", - "click>=8.1.8,<9", - "construct>=2.8.8,<3", - "crccheck>=1.3.0,<2", - "fonttools>=4.61.1,<5", - "jsonpickle>=4.1.1,<5", - "langcodes>=3.5.0,<4", - "lxml>=6.0.2,<7", - "pproxy>=2.7.9,<3", - "protobuf>=6.33.3,<7", - "pycaption>=2.2.6,<3", - "pycryptodomex>=3.23.0,<4", - "PyJWT>=2.10.1,<3", - "pymediainfo>=6.1.0,<8", - "pymp4>=1.4.0,<2", - "pymysql>=1.1.0,<2", - "pywidevine[serve]>=1.9.0,<2", - "PyYAML>=6.0.1,<7", - "requests[socks]>=2.32.5,<3", - "rich>=14.2.0,<15", - "rlaphoenix.m3u8>=3.4.0,<4", - "ruamel.yaml>=0.19.1,<0.20", - "sortedcontainers>=2.4.0,<3", - "subtitle-filter>=1.4.9,<2", - "Unidecode>=1.3.8,<2", - "urllib3>=2.6.2,<3", - "chardet>=5.2.0,<6", - - # curl-cffi is 0.x; keep a tighter cap to avoid accidental breaking changes. - "curl-cffi>=0.14.0,<0.15", - "pyplayready>=0.8.2,<0.9", - "httpx>=0.28.1,<0.29", - "cryptography>=45.0.6,<46.0.0", - - # These were unpinned in your list; consider adding bounds once you confirm versions you’ve tested with. - "subby", + + "appdirs>=1.4.4,<2", + "Brotli>=1.1.0,<2", + "click>=8.1.8,<9", + "construct>=2.8.8,<3", + "crccheck>=1.3.0,<2", + "filelock>=3.20.3,<4", + "fonttools>=4.60.2,<5", + "jsonpickle>=3.0.4,<5", + "langcodes>=3.4.0,<4", + "lxml>=5.2.1,<7", + "pproxy>=2.7.9,<3", + "protobuf>=4.25.3,<7", + "pycaption>=2.2.6,<3", + "pycryptodomex>=3.20.0,<4", + "pyjwt>=2.8.0,<3", + "pymediainfo>=6.1.0,<8", + "pymp4>=1.4.0,<2", + "pymysql>=1.1.0,<2", + "pywidevine[serve]>=1.8.0,<2", + "PyYAML>=6.0.1,<7", + "requests[socks]>=2.32.5,<3", + "rich>=13.7.1,<15", + "rlaphoenix.m3u8>=3.4.0,<4", + "ruamel.yaml>=0.18.6,<0.19", + "sortedcontainers>=2.4.0,<3", + "subtitle-filter>=1.4.9,<2", + "Unidecode>=1.3.8,<2", + "urllib3>=2.6.3,<3", + "chardet>=5.2.0,<6", + "curl-cffi>=0.7.0b4,<0.14", + "pyplayready>=0.8.3,<0.9", + "httpx>=0.28.1,<0.29", + "cryptography>=45.0.0,<47", + "subby", + "aiohttp>=3.13.3,<4", + "aiohttp-swagger3>=0.9.0,<1", + "pysubs2>=1.7.0,<2", + "PyExecJS>=1.5.1,<2", + "pycountry>=24.6.1", + "language-data>=1.4.0", + "wasmtime>=41.0.0", + "animeapi-py>=0.6.0", + # envied specifix "webvtt-py>=0.5.1,<0.6", "isodate>=0.7.2,<0.8", - #"beaupy>=3.10.2,<4", "scrapy>=2.14.0,<3", "mypy>=1.19.1,<2", - "pysubs2>=1.7.0,<2", - "PyExecJS>=1.5.1,<2", - "pycountry>=24.6.1", - "language-data>=1.4.0", - "wasmtime>=41.0.0", + + # Keeping your existing cap style here; latest visible is 0.10.0. - "aiohttp-swagger3>=0.10.0,<1", + #"aiohttp-swagger3>=0.10.0,<1", ] diff --git a/packages/envied/src/envied/CHANGELOG.md b/packages/envied/src/envied/CHANGELOG.md index 954da95..0d7f5d8 100644 --- a/packages/envied/src/envied/CHANGELOG.md +++ b/packages/envied/src/envied/CHANGELOG.md @@ -5,6 +5,158 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.0.0] - 2026-03-17 + +### Features + +- *hybrid*: Add L5 active area and dynamic L6 luminance metadata +- *debug*: Add JSONL debug logging to decryption, muxing, and all downloaders +- *debug*: Log binary tool versions at session start +- *dl*: Add --repack flag to insert REPACK tag in output filenames +- *core*: Add TrackRequest system for multi-codec/multi-range support +- *dl*: Add --output option to override download directory +- *tracks*: Add edition tags to output filenames +- *templates*: [**breaking**] Add customizable output filename templates +- *templates*: Add configurable language tagging rule engine +- Update unshackle version to 4.0.0 +- *dl*: Add --animeapi and --enrich options for anime metadata and tagging +- *dl*: Add skip messages for --no-audio and --no-chapters flags +- *dl*: Extract closed captions from HLS manifests and improve CC extraction +- *dl*: Add --worst flag and SHIELD OkHttp fingerprint preset + +### Bug Fixes + +- *n_m3u8dl_re*: Pass all content keys for DualKey DRM decryption +- *hybrid*: Skip bitrate filter for DV tracks in HYBRID mode +- *attachment*: Sanitize filenames with illegal Windows characters +- *hybrid*: Accept HDR10+ tracks as valid base layer for HYBRID mode +- *dl*: Allow selection of audio tracks for 'all' languages in addition to 'best' +- *dl*: Overwrite existing files on re-download and use atomic replace +- *dl*: Handle cross-device moves when temp and downloads differ +- *track*: Fallback to requests downloader from n_m3u8dl_re for unsupported track types +- *n_m3u8dl_re*: Disable segment count validation for duration-based DASH +- Correct formatting and add missing newlines in selector and EXAMPLE service +- *dependencies*: Update pyplayready version to 0.8.3 and adjust dependencies +- *drm*: Update PlayReady KID extraction for pyplayready 0.8.3 compatibility +- *api*: Resolve Sentinel serialization, missing params, and add search endpoint +- *dash*: Pass period_filter to n_m3u8dl_re via filtered MPD file +- *title*: Add HDR Vivid Format HDR Tag +- *ism*: Prevent duplicate track IDs for audio tracks with same lang/codec/bitrate +- *aria2c*: Correct progress bar tracking for HLS downloads +- *dl*: Filter CC subtitle languages with --s-lang and extract all manifest CCs + +### Documentation + +- Update and correct configuration documentation + +### Changes + +- *hybrid*: Replace log.info with console status and add JSONL debug logging +- *dl*: Remove legacy multi-fetch loop for unmigrated services +- *example*: Migrate EXAMPLE service to track_request pattern +- *providers*: Extract metadata providers into modular system + +## [3.0.0] - 2026-02-15 + +### Features + +- *titles*: Use track source attribute for service name in filenames +- *debug*: Add download output verification logging +- Gluetun VPN integration and remote service enhancements +- *gluetun*: Improve VPN connection display and Windscribe support +- *serve*: Add PlayReady CDM support alongside Widevine +- *cdm*: Add remote PlayReady CDM support via pyplayready RemoteCdm +- *env*: Add ML-Worker binary for DRM licensing +- *video*: Detect interlaced scan type from MPD manifests +- *drm*: Add MonaLisa DRM support to core infrastructure +- *audio*: Codec lists and split muxing +- *proxy*: Add specific server selection for WindscribeVPN +- *cdm*: Normalize CDM detection for local and remote implementations +- *HLS*: Improve audio codec handling with error handling for codec extraction +- *tracks*: Prioritize Atmos audio tracks over higher bitrate non-Atmos + +### Bug Fixes + +- *subs*: Update SubtitleEdit CLI syntax and respect conversion_method +- *n_m3u8dl_re*: Include language in DASH audio track selection +- *hls*: Prefer media playlist keys over session keys for accurate KID matching +- *deps*: Upgrade vulnerable dependencies for security alerts +- *serve*: Use correct pywidevine users config format +- *cdm*: Correct error key casing in Decrypt Labs API response parsing +- *api*: Validate Bearer prefix before extracting API key +- *serve*: Correct PlayReady RemoteCDM server validation +- *n_m3u8dl_re*: Remove duplicate --write-meta-json argument causing download failures +- *manifests*: Correct DRM type selection for remote PlayReady CDMs +- *proxies*: Fixes WindscribeVPN server authentication +- *subs*: Route pycaption-unsupported formats to pysubs2 in auto mode +- *proxy*: Remove regional restrictions from WindscribeVPN +- *proxy*: Collect servers from all locations in WindscribeVPN +- *downloader*: Correct progress bar tracking for segmented downloads +- *binaries*: Search subdirectories for binary files +- *dash*: Handle high startNumber in SegmentTimeline for DVR manifests +- *drm*: Hide Shaka Packager message for MonaLisa decryption +- *dash*: Add CENC namespace support for PSSH extraction +- *dash*: Preserve MPD DRM instead of overwriting from init segment +- *subtitles*: Preserve sidecar originals +- *mux*: Avoid audio codec suffix on split-audio outputs +- *dl*: Prevent attachment downloads during --skip-dl +- *progress*: Force track bar completion on terminal states +- *progress*: Bind per-track bars and force terminal completion +- *dl*: Keep descriptive and standard audio for requested langs +- *dl*: Always clean up hybrid temp hevc outputs +- *hls*: Finalize n_m3u8dl_re outputs +- *downloader*: Restore requests progress for single-url downloads +- *dl*: Invert audio codec suffixing when splitting +- *dl*: Support snake_case keys for RemoteCdm +- *aria2c*: Warn on config mismatch and wait for RPC ready +- *serve*: [**breaking**] Make PlayReady users config consistently a mapping +- *dl*: Preserve proxy_query selector (not resolved URI) +- *gluetun*: Stop leaking proxy/vpn secrets to process list +- *monalisa*: Avoid leaking secrets and add worker safety +- *dl*: Avoid selecting all variants when multiple audio codecs requested +- *hls*: Keep range offset numeric and align MonaLisa licensing +- *titles*: Remove trailing space from HDR dynamic range label +- *config*: Normalize playready_remote remote_cdm keys +- *titles*: Avoid None/double spaces in HDR tokens +- *naming*: Keep technical tokens with scene_naming off +- *api*: Log PSSH extraction failures +- *proxies*: Harden surfshark and windscribe selection +- *service*: Redact proxy credentials in logs +- *monalisa*: Harden wasm calls and license handling +- *hls*: Remove no-op encryption_data reassignment +- *serve*: Default PlayReady access to none +- *tracks*: Close temp session and improve path type error +- *main*: Update copyright year dynamically in version display + +### Reverts + +- *monalisa*: Pass key via argv again + +### Documentation + +- Add configuration documentation WIP +- *changelog*: Add 2.4.0 release notes +- *changelog*: Update cliff config and regenerate changelog +- *changelog*: Complete 2.4.0 notes +- *config*: Clarify sdh_method uses subtitle-filter + +### Performance Improvements + +- *aria2c*: Improve download performance with singleton manager + +### Changes + +- *remote_auth*: Remove unused requests.Session +- Remove remote-service code until feature is more complete + +### Maintenance + +- *api*: Remove remote services + +### Chore + +- *release*: [**breaking**] Bump version to 3.0.0 + ## [2.3.0] - 2026-01-18 ### Added diff --git a/packages/envied/src/envied/binaries/ML-Worker b/packages/envied/src/envied/binaries/ML-Worker new file mode 100644 index 0000000000000000000000000000000000000000..fbc9b2b2521265d7dd3c75ef145d5b07e05d16bd GIT binary patch literal 2339264 zcmb<-^>JfjWMqH=W(GS35O2dyCa{nLm}FpJSfvbOF*q<-Fz_-sFvv5=F|aW(Ft9K% zFu>HI(>EZ-Fu-UIs42`)eG(uB0|Ns(Edx~tqd{&034v&keIPbAtgs$pA&h1afT#lL zV+AocK;#+FXilEBp$tq73;IY4SaW`Oj7 z)PM{IsRyM25F3O+{J9Ja;5-TPKL_JNrv`=sHjvnS1_p+O3=9n492PiSOg)#I7Mdtv z`KepRWRh)*6>sb2_-T`2*#~443Qpl+U=TtPfpDzZu!|eXIWKY8 z>x;vkeK^G5b6_`L7>B*PaM=45hxt-C%rR%dZf`6Oa{_RvpT~vWoNu_?i9>xQ4trB@ z#LE*L=5XNyQc_;dzP?cSN{ix ze_e67GaE78$6@|d9Old7@K+)ec7OS^Vi#Y5BY)N4a8C}7c>IgQJsCLS z(GQ2e@^RQ3kHcO;9O@%+h)dxRUxXuGEO4k7$Kl^l9O6Pa+rInFr3K@~^-U5mr~798et;Rw$!IK*$`NLR0M*jtPvoOj_c zzYmA_W*p|b;}AcBqrTXUBRw19Foy+4xLwB~&VeIeB;jz+7994f;xPXWj&wB*NBN+Q zBRn&4q#qR=_FlkY&MzGK`Y{fF8R0M|3x|3u9R5&kdhQpkrILvv4qh46g$-tll@gfRo!Gm3VB_{)eAcG9UffbN( z6WDmeGj53Z12plkOdxak8Seds^tPWvZ7IXyFG(EX$q*l(o|~T+UtE${R1zQ05bqh{ z8=sO|l$xGdT#{N8;_IA~pO+evn3R(Wk;5(%TKv5Vq_2>Uy@OjUmgz;j!!Kr$}bA=P6n9{wjb=@V6bhZ zTV@{b8=sO`lIR)$F%TZa`GYHn4dZ>|lM@RPlQT;yU2_qBHv$I}QqsWdZu89I`22#@ zJcuUm;7qghj{C!h>rvWp>D5MMgN5r58P>ohb1`7%GRxTL5wxx_QTJK5E> zEF?bIA|8|u((;SS6N^&fGfPs75=-)n;!6_K!2y9grQ>#?f3OKS#gLOei%XM=ONv}` zA%T@?Qk0sQ;u?^g196N+W`1#eQettciDzDB2_hJY%DX5L6kK9x4omz=i7D}kIXU^s zWelKfofw~#nx2^#pPX2doB_5Ml%t)ET!XwpIUzp1q9VQ^wWv5hFEJ;xq%ywD0IZ1Q zkTL=14Ny)bBOxRPyTbA*$rd{sg7oGFc?TPV;|Z42K~4!SF|t4jm!hJ?%J{rgSP=nI z;}@K7T3(b{k_s{g95dde7Y-(AnRzK71Hds&wgExj!6xxwBM>Dx-fU``oReRiN^bs3 z3grI3nfx(5=c=Fc6wepG{jKz6ZwUUC8%sEN=+Bbmer-?gWrea`KZCb0F0yDTxLtnFp5`TEen)PJVi3GHNwXy0eVp9YLjK zd`4zUY7wX~Nro0Bp?T$*c`5Nhsl}zasSIi9sU^h>#U(|_1(giNB`KMC4C$#Qsd*(u z`302>1tl4vvOT`2JSRUnJ3b|~xTGk*k|7OLg_@bbrL$8j<5N;|QcF@9K#`i2TL3aK z4{T&*adLiM8bfhLZej^TN={-*N)bac*tGQ2l9Ei26N*w(8PY)ZFchaImlmbQgI!Pt zH$FcvIh7$kKC!qswWuUMEip3(WL!!KTmjU1MJXV2;iAQcT2aD~mYSaivY;R{1?~k<4%vIiqpj6)a2X(hQyNmOprg5K_1P88IzNllniZ?=O$+6 z!7T;FW-_>(fD1tbxHJzXfT5!0MPSk5l9begnQ%j0rVOyM90t>dZg3^*?hO#uMH6_XE zsU?XeB}EJ%iDFPX%1g{)h>y=K&QG?qj4v)uPRvVV0J#@raY=G9RC#epQAvJj4%iI^ zl?-W_IjMR13~A+{Dw&};H3t+PAh+ihFccQ&7nLxS<|TqMLvd+o2`F~+Kv5kZ59>U|Czhn;7iBZ#WF{4t zq$F!=gC=IpK-~1?W-+?}1{jr9x|oFgI}ojl_W^^El_8Qgt5otz^g z;*Ir8^o-EBW=Kkr6(Y0sj0_>%cq2VyILjQ)GDI+q5%Pv6a0SMCMo4TVaRk%I6t2QZ z&lJ=}Wny4vV1hzc1||kJ1`r9tOkfr}140D{0~=T+L>45^3DylWff=lW4QvJ%12Y2~ z12+Q?SOpUUF9RP`H%K024nG6P1OWzSunJZNW(Gkp3+5V_sUWo=F&H1D3xpBkAe%rc zSi$y#SRhw}T*(GD5u_5t1IfVH5Yr&)*csRuco~=&7#W11CO~BQz+xbA2p{26Rt6Su zNPy%(rh?|v85w$c8NkafK;tk0YL(!g|59F1D1+qL80w(%1q=)fl^54@gH*4DidFuY z&cwjL#jp#?F9Y*A8BRj^m)B>rGBB_++<@{+G$(N|Ft9Q_hVl!+>X{kd!|mf@m<^Q! zxj;BGlNU5{@ee8{4(9VSaPWa#!N4$m;xsk}20jKMD1S4U&&wbS1c>+!G;x^v18Cx}5+Uj(Rw{xW z408`my#kteR}w^h1)4ZaeFK`faxz5y4K#6>`Uhy@ox^$lp^u<*QrCJs~o08Jbgo)&AdyT<`d92TB4(8OWpFF+HAh35}6ahQ6Bb*T2j z!ZQL*9Hu@2O&k`UJJ7^o>JOla!@^TyJ*vGh^$KX>u<)!v6Njm9Kof_B=M6M*nED53 z;;`_v*nsLDsRBs4bwCp@FM)`Apo!1PfQVpFaxCff}(Q1fz1)4a_oCY*;m^mxZ#9`*#Kof_V z^8ig8W)8<@RQJQou|N~gZHKti0ZqKM10p^HO&q3v0h%~W{SP#8n0kgSsP2KOk3bWL zsZT%?hpFFzCJs}708JdGUScb%y)g9(XyP#S6=>qoy^wHdKoj@thlqEeiBFmW5nq8O zF4GMWzkwzWGyegaIL!PPXyP#QIkutt3ue9rnmEjS2Q+b*`5tKEF!M9e#9`)lpoz0x zg7|9!n)pGe_zX1h&dU(>JJ7@huRz2@)Aq8%ycA$w%K*d*}i7P?HH=v1YLd6fDi63|gS-*Y(P23Tx z{sx-38&v!Sn)orOIX}?ElcDMvcB6(*I#gT$P5dm>90fG-Y^Zt-H1T|>xCNT{Rj4^0 zXyV0C^#N$&vH$2AcSHs5vjt#1BK&e?SvI4;5$FgBp(vuOR7108RV}RJ{b6_y?%C z2AVi0)Eo;maaK-9`gcGR=Yom{pot4X%}GELSB0w2z#(3NCN2y$rvpt~3u?{;G;v+1 z_yRO>QK&f^(8MjE>UW@tTS3K7povRB&AEXl?gmx=08QKjD*gdYTpDT)!(P;Q427!a zKogIEic6r0%R$Z2Koie_sy9Fr&x49PpouF&%?UsguZOCSKof6*if5pSt3b`EKog${ zRo{RnJ{KxJ0Zm*TYR&>Q@r6+JD{zSKKoi%7nsWk8d^yyd3pm6dpotqp&G~>Pz6om1 z4;4Ba*Y zs5u<_QR7h$YK{P!xEWMj0ZqILYK{S#xE)lz1)8`URNMniydG*!1e&-XRDA-Pco1cpOxH2by>qRD1@Scqi1H6=>plQ1u(o#LJ=L7tq8TpyD^s#5nP6VSwGLfu(_CVmX6 zz5-4B98`P;n)o%S_yRQXdr8{{v9iZYBXyU7(_I99& z`$E-EKobvziZ4JD-wZWp1Dbd&RQ(P#@ieIT4K(q5sQ3dM;vdk&cR=lBID{H6rBHJ? zaEMEwi64NPqk$&g1U1J1hqwcp_(`Za0chfrq2@&35YIppzXUa>0!@5A)SLz!;uFxs zZ$r&lfF`~cYR(EA;ycj9pFqtyfhN8aYR&~5;t$Zo-$Kp#fF^zlYR(TF;v9!jJ5X~JaEKeAiT{V1iSE&(-X2by?1RQ&-o@hqtL1vGI5s5uYN#A~7IU!aM1Ld7|b zpvKo!sJH-{_#&vd0h;)FsJI21_-?3p1e*A9sCWXJ_!X#l1Dg0lsCWmO_%o>Z3^Z{K zXgI7u6Mqd=zX47B3sn37nz%01oC|2;T)dEUasy3V2rB*pP23D>&JQ$kS*Uu3qp0Dp z3KbVX6Ssz%qktxE4ppy#ChiUuw?GqjfSTihCLRk_AAmzV0ZrT!YEA)~cnZ{<3N-OT zsCWmOco5W_8EE2-Q1uJY#CxFP8_>kVq2?Sw6Q2)Ne*#T>B~<(dns@@#oEK=~yP@ho zpoyP`iZdKTjmJ!=IRa?nkD=-%(8Rw&#Wm2xi=gIMpot6cLDHcEnz$@fJOE9+8fs1g znz#{EeFmDi15~^MO}qtaP6wKJI8^-vH1Tw(_yRQXUZ^=6(8L>{>UW@tcR|HZpovd| znsWn9d^S}512pkfQ1K6F;`5>AFdRpX#}iQX9BASfq2d~7;iLKoggNicdfjUkf#70h+ijRQ(DxaSy2Y4m9x% zP;*Y8iDy97UqBPDfQmmr6W<52YqXyP}Z z;s$8qJE7({poxEks`o$>{|yz7Koj2sH75g2oL2x6Uj=C5ics+eH1YjVb0(mP+d|dP zKogIEimyNuKLj;r2by>VRQ&-o@p`EE1vK%aP;(xjiMK)3zd#f3g^F{WM2)X0P;mh? z@!3#u12pkPP;m=1@s&{V2sH5xQ1Jvb@vTtt0yOb+P=7U`iSL4{??4kj3>BY&CVmNO z&I&Z~^HB90(8RAn#V??V--U|bKofrf75{-I{uwIHa0)e?zd^+X(8RAn-Kl^k&L9X$ zpBiZ5%usO)H1V5Ib3D+*xuNOmQ-CHe0yU=sO4p8w8XyPxS<{Us1kB6#1fhL{>6~BQd{swB!3pDXksQM2$#2HSb#^Xn*IRa?n zO;B?raENQ5iGP8bV}T~#0X4?~hj;**_;;u|325R|pyp(tiO++ISD=aif|}ETCcXly zegc~KCaCxZH1R!9@f~R5$Draj(8Mo5#UG%F--3!WoIwr$Cs1(?9O4pa;>>R#{ZI`w z@n2AL4A8`xg&_IP0Zp6-YEA%}I6qW<1e&-6RJ;OBToEeXfF`a36`z16E)2DI0h+i4 zRQ(DxaT}=k4m5EIs5vLl#J!;EFQAEsK*b-RiOWOHkvNMQFL6-y3TWavP;mn^aTTaJ z4rt=FQ1u>Y;;m5e2sCjms5u#E;=NGy1!&?^q2d$J#OFfAXP}8Mg^KS$6JHAzKY%8_ z6)Mhg4mEuCLd6Bp#1BEm70|?up#CyI6Tb{qZ-FNM1S;-#Sfr~`$EmRfF^DPReu9b+!iYS z0!=&=YR(Td@o1=ehV!WLm<|;eKogIJnxlXwUIJCGfhOJp6}LbWPlcM}fhIl;sy+Zs zd@)o!0Zlv?YEA)~_(rJu3N-NpQ1K2l@lvQcGtk5zLDern6aN4e-+(4w4>jiinz)b% zB>kK~6PJOC-#`=ZgqrgLP23Wy{sWr0Jye|G0%|-?hMFUQCLRk_FM%eW0TtIk6Q2t; z#{x~f1FGHuO}q~(9)Kpk9BNJin)qs{`V2JjEl}|aH1Q2kb2`w(&qLKuKoh?S6<>fR zz8PxH1~l;xQ1v^|#Q#IZPoRl!gPL;#O`Km867LVt#KocFAJD{iLd{{gh#HStQ1u*W z;?_`c2{iG2P;)fU#Dk&g4ba4sq2dl`;wPZy1fYpmLDff~iFZK7Gtk5@LCvW^6JH5c z-+(5*11dfNP5chjoCRp&H=*iRpozbNitj)Ze+D(@1e!RT7$m+fpoxn?#UG%Fe}J0v z0ZrTxs{RKKagIx<@%syEjs%*x1=Jh`9O4FO;;e5W?LY@KaUZBT9yr7!(8L9x=47CW zhd|9Kz#-m%CN2#%X9AjdG}N3KIK)?=iK{`)*?}gW3N_~d4)F_U;)YOj9-xVrLd|)B zL;MGtxDC`Cj?1X=*aS640Ef5&nz$>}90N4*UZ^=1IK(~B#QmV=M4*Y!g_@IqL%aY@ zJOXM?1Dg0+s5u=t#Al$1Cqd0wfhN8cYR(26;s?;gbD-v2Koj2$HRlEn@fT>~rBHKz zpot%Xn!|7fH6CH&0%+oOP;(T}#Lq*`(LfWw2^F_M6K{i>WZ-km-fhN8as@?%j{18+; z08M-s)SLt~@q1A98EE29q2d*2;zyw7bfAfUhpL}|Lwo_6_*tkq8_>l6K+V~KL;M7q z_ywprH_*g6Bp~VS0S@sGXyTWl<}h4CjYmGHIUG2|CD6ogLCw)X6BmJ+V}K^E0Tp*Z z6MqObCjd>{6{_)Dlc6=>pKP;(m4#6zIs6VSvzLd{u#CLRw}zXDA>8!Em7 zP5dX+oD*o`6;SmT(8Oz?;vdk&8=&Gp(8PP7;vCmeI=}sk3+>9(8Rf*=1f2nzXVl31Bdtu zG;sl_IXlqAZ$QmCfJ6KOnz#hioCj#)_n_vyKofrg75{-It^hTM;|6LxzJ{t7z#*=H zCawuJ#{fJ*OBGANHBq8NY0uJ#4G;v#~ISpvy0#I{0aEQ-96L*K2 zvjRz`TtE}ogqm{$hxiLL@o1`EzrdCq2_p?iHAVV3BVzqfF@oAHKzbgJQZqA1rG5JH1SrbIWy42%b?~g zz#+Z?O?(2>oCE0MP;*Y;5Wj&YJ{xMz3pDW!P;)-u5NEiB8js7M<_MsPUx1n;fkRva zO?)HN91Aq@4^VR)aEJ$>iSL1$lYl19F9pe`892l%(8P~J&FMfBSB9E10f+bkH1SJN zb2gxfTR_d(fkXTRn)qF)IXBS61EA(Sz#;wtP5cGa9ERJd@t6WNhXaSW1e*9~s5u&F z;uTPH3~-1$po#y3niGH~J^^Y@1P<{GG;z-Nkovs>O?(a1oCX}?6VSv(pyn(<6F&(x zX9W)N9cbe6P;*Y8i9dmwa{-6=12l0hs5u|d#Q#Cf`GG^6;|^;4nnKNyKoggehU5zc z9O4FO;to)A9MHs#pyqhs5RX6;_lBC2fi4a;rvQg|1Dbdk)SL-u;u%nLX5bKCfhL{^ zHD?E!cpKE5131Jlpo!-|&3S+(J{xMz3moD<(8SB3=5X9ajmI5Oa|CdRE1-!tLCrBh z6Tb>I#{!4A2by><)SL)3@efdQ5^#tYpo!0bn$v(L&MyN=haEV?XP}8MhMKbiO=LQb(7ii);q2~NR6VHH}!*CBZ9%14FXyQkp<|v?vcRrJisCT0ZrTkY7WB#)Oh5UgQOo09O4pa;=xdJG|MfF^DQH75dxcm|qyCe)k?H1S}lISn|(C!mR!K+RczCY}j3X9W)N z9cbe9P;*Y8iPu5Rxqw6b0h)Lh)SM4!;uE0e{JoIq2}yB z6X%eJ-gbo}k8~JJcKjG;tZIITAR;HPFQU zpypVhi7P|Ralj!SfF>RaH75a0TnlPW1`hEGH1QayIUQ)?hEQ`R;1FMcCY}s6X9JqJ z8`PW~IK)q&iDyI2xq&7g4K?Qh4)G6Y;>A#N7@nfWV*%704jkeVXyVmSb2QMzTcPF{ z;1G8}6K{r^6M!Z@5o%5Z4)F{$@ouO&6=>pfpyo8-5TAf1J{fAx0yObWP;*w`5Z{3& zJ{xMz2{iE&P;)Ne5PyIsz8GrG2Q=}^P;-9Z5a)P?8o#Td=18E4zk!;gfJ58>O?)%d z90xRURz*m8=z&8#0!@53)SL`7acQVI1vtbT(8Lcz&6$8EZVEML1`hERXyT`#=IlTd zcZ8aA0EhSmH1W$&a~`0H`$ElmfkXTUn)q#~IULVX<1q$mjsTi?7F1jTP5d#`90N4* zN~n4Z9O52m;;*6RM4*YcLCs0PAzpwc{uydc1Dg0$s5u=t#Al$1|Av~g0!@4o)SL}C z#1Ei}Gk=1#qb{I{uZ5a(1BdtvG;waIIX}?E_d(5Jc!3&^FmVAiabc)A3TWb2pyp`c z5Vt@Rmxh|-fhPV6YEA$S@dPw+WvDp?XyRX?=2W1GvnWBzfetirZKydj(8NWd>KCAi zD?-ILpotqp%{hQ3t_M|r0!`ckDt-e^+!|`m3p8ptp1T^uB!4B~5HCOz{|+^$0Zm*RYEB0Z@fm3144)zG zmKA8?ZcuYJ;1EB6Ce8^p=K`8|G}N3MIK*F|i3>r^`GF>$2Q`P`EowZ%#0AjArJ?31 zpov#Q&C$RiZh)1sRNxTrKod8Hnll4Ud<)c^ z1vtbvpov>U%{hQ3ehg~P2^``#(8Qgg=Da`?zXLVr0}gS9cc}5`4K+sqP5dL&90?ra z8ffCdP;)HM#F-3(&+jK+Rc! zLwpCC_+qFzC(y)?Le05=L;L}n_-d#*AJD|FK+XAqL!9FSYW!}7nj?WG{sL-_0uFHl zH1XX~a~#mb|3J<0z#$%iCVm)dP6nE|pc*8<7vK~vxH{CF892mOpow3G znzI8<+y!dR0UY8N(8O;;&3S+(9u76<1rG5aXyT8d=5TyOjmIpgIRZGu70|?AL(Pdm z6R(4slYm3K08RWe)SL!1@gAr-9XP~ipo#y6nzI5;dI;xnM?C!mS1f{HId6HkVkvjI(fA5{GgH1Q)) z@e^p`IZ$(MpoyP{s(*kceibVI0ZqIVY7WB})OdUdRnLJY{uL@NfhJxDHAe$YoL>Wy zzYNgC#i8O3XyWZqa{|!BRiWx5(8P_Q;u&b-6QJf)pozOf)ia*2sCtI)sPR|{6&FAge+@N90ZqICs$K(!xCNT{d#E`cXyUC6;-XM{Ezrc-wIJn# z0}k;3G;s;2ISFXuf>3iZ(8ML7;uUD(GEj3m(8Tqi>L=h3Uw|gA3N>c~nz$9zoE>Q5 zK2Y%!XyUq1b8euCr$g00z#;wtP23b}4#Q8>_$r5*!+}Fw0!`c&YK{h)cn#DX12pkI zsJH`~xC7Lj05tIxQ1uaL;=7>Y8EE3pP;)BK#Lq$1H=v0>fQnB*6L*7}vj9yTmi|}Z z5I=z?{vT@o1vGIkZAf~4fF|wxF}Tp4;+Ay9K>;1FMdCY}v7X9t>i zJk*>6IK(fYi5El7d4MLK1vTdd4)Gso;?+=dIDVtXV=2@e0UY8AXyVOKa}3bL8=&S` z;1Ksf6Yqwa6M-%cH75awcmbODWT-g}XyVhL=5*i?pMfSm8*0u9H1TCnb2gxfuY-yo zKoegCHRl4F_(7=p8))KZq2e#l#8*Sj`GF>W6RMu!4{AI-X3pDYWQ1uRI;!C080chfXpyni?iEo6e&p;F33l*c0lG;x2ZxCENGBGeoWH1Qm$dIL1^CaAarnz#nkoB%ZO zSy1&6IK(s1#Py-(RG^8^hnmxXLwo|7xB=9h1!&@nq2{c>A-)4m+!$)k2{iHLP;)Ne z5PyIsZUr^x1Dg0+s5w7yh;#f$jbA6IITC2%2cYIC;1D-J6ZeLi5$L4)F*y z@ersv8EE3qpym|d5N|*ekA<2u0Zsf9)SMYO#8;q+r$NoxfhNwR2gzRtaEM<(6EA?8 z^8ig;25Qa=9O6IF#H*m@a4;x=?_1^olMDA)dA15JDp)SMM);$Bd5HsBCHfF`~MYR&~T z@kppSH*ko*Koj2vHRlJKcqY^w21e9)goz8Fi64NPqktw}3^hjshqwir_$jD49%$n2 zP;&xsh$om)SMG& z;;~S3F5nPG;toNIU8_@A3zg-12yLY znz$&`oEtdAU!aM9gPQXLO`Ezrcdpyqg> ziQ7QU3BVzqfF>>iHKzbg+#7061rG5JG;ukoIWy42W1;3Oz#+Z?OY^XUW zaERYP6E}jI^8!u05o*o{9O4Y@sPSk6HAetVd>Ygo2^``YXyR^Ab1cxrS3%8jz#$%h zCLRDaCjm`-Kh&HI9O4yd;!#j@I?%+=K+TzeLwo_6cnZ{<4QS#Iq2}zsA$|f)JP&Hl z4K(q0P;(yO5dVNCUI8_Sfde%je?raSz#%SyCf)=!M*~fq#}HDE8Q>6iKojqQniGH~ zt^_qF0*818n)o!RITdK)7Ep5$3RTa*jT-(iaRD^(A5e1?(8Tkg=4jv$w?GsB4K>FDO}r9nP5_#CD^xrI zP5d9!oB}lQIZ*W#IK(^9#2J4=+G8`&#Fs(MS%5=)1DZGs)SLro;#;8RoWLP|15KO* zYR(HZ@xxGaKHv~%;6aT?9;i72XyO;4=1AZW*FX~&fSO~0CVmfUjsp(y05owCs5uE} z;?JSxWZ)35KoggMn$v+M{sn5z1RUZE(8Oh+=4?O{=QM`o_Z>LIPoRk_K+U;`=RDsz#;wsP22`* z&IdH{c~EnH;1K8FLycbts5ug7;_IR2DBut`KofU?n&W^begJBY2M+NFG;t58IT>i; zm!Rep;1F*>6Ze6dGXYKfDb$=9IK)?=i3dQ<*?}hh18U9z9O4(y#6zIwJU|oYGJ)jx z7dXU!povF7&EeojjYoN?IRZGu70|?Epyn8$i5o-BvA`kjfhL{+H75d1+yiP(0uJ#4 zH1QOuISpvyF;H_laEQ-96VHH}vjR;#2Wrj+9O4Ji#i8b0KohTpnsWn(_zN`g0;oAZ z(8T+o<}e7L#v@Ez08P9EYK{V$_(G^T8aTu)(8MdC=6IlqZ-tr@fI~b1O}qwbP63+u zNvJs$IK(^9#2cXI%s>;r1vO^@4)G0W;w?~f4xov@ftqsyhxiRN@eZgtFVMvQLCyJq zL!3bnH6DAQ<_MsP3zO?(d2oDFE=iBNNP;1EB7CcXe_&J8s2N~k#xaEO0E6JG)~ zhd~H69w$Q0;lLp-fhN8JYK{h)_;RQ@1~|kW(8Sk3%?Usg-wQP-0*818n)n8&ITdK) z7op}f;1HjHCcXt~&H^;?$53-t;1J(|CcXn|&IvT}FHmzX;1GX+CcX!1&IdGcHZw^6 z`hi27Ll`xF4?xY4KoggOnxlY2+yG7d2-F-0G;vL+IUYE~BhbW8K+VZO6Ss$&Q-DLf z0Zsf2)SL-u;=xdJX5bKCfhK+dYR(Qc@f4^z2XKgAKoh?LHRl1Ecq!DJ7dXU!po!mr zn!_Q28jtNza|CdRE1-$rftq80CO!*ljs*^J4>a)yP;(;C#MeO0Nx&gqfF}L~YEA>1 z__goz8FiGP8bqktwZVh+jg8aTu)(8Pa0&GA4JSAm)nfI~b1P5ckkoB}j)Q>Zx= zIK(^9#2J1;$A8eoU7_YIz#+Z?O`HX4&H*&>2&g$HaERYP6X$@M^8!sg2Wrj-9O4XO zsPV`HHAetVydG+f1P*ZxG;sl_ITmQ*6QJfe;1CZ$6BmJ+lYl0^2x?9S4)F>!aS5n7 z9cbd4q2^4$A-(`jTn1{+1~l>GP;++R5I=z?t^hUX2AcRCs5uXCh<`v6SAm+tAdVW3 zAE4%N;1HKU6W4&6qk$&QZUM=s1~|kW(8P71<^-UL%R$YFz#*Q2CT;*Vrvgpf2x?9P z4)Fv{FK~$eKogIE zn!_Q98jmtia|CdRE1-$TK+Q2g6W4;8V}T}a0u}c_6HkDe6M-h~167}ZL%aY@JOye_ z1DbdY)SM0+;xo|1Goa?IKoif0nzI3i_yIKW9H==L(8L>{=G?#`{sK+B0BX(;H1SDL za~Pyh;}IqK^y1Df~} zs5uNWsPVW9s-6RfxCEN`3aB|6XyT`#<{01*cR&+g3pFPIP5dU*oCqA^8EE30pypJd ziNA)L(||*K0-E@Cs5uMJ#2Kw2`CFBO*|2*-UCfMA1WS!CVmlWP6nEI zBUF6>n)no`cmtaFb*MQL(8QNP)z3f^-vJe0fhK+zYR(Qc@$*pi2hhYHLd7qji9d## z^8ii!Csh3l9O6IF#9usNx&gqfF}MGYEA>1xGU704jke$(8Pa2%~^pa9s)II0}k;6XySjN=3GD%&xD$D z1BdtvG;zk?knxQlXyTPna~R}NlLB$Ku#MeN@E6~LEK*eXEiJyUrFF+H20TthXCN2(j=K(Zv7F$R#H*m<325T& zQ1J{j@hMR84m9zFQ1J<9;_IN|8_>jeL&bNXiJyRq-#`<;3Kf5VCjJO2&Y*}IZttPu z9BAS{pyC>6;*55X_%%Qi=Yom{pot4Z#Us$f6`|r4XyW=%@dh+;Td4Q~G;wdJ_zE=f zAgK5bG;tkhIyr$Ro&Z&U0f+blG;w{XIUmr(v!Ukvz#-0|gc|-vP;(^E#EYQjD4>Zq zK*bHv#4VxbIG~BogR1vH6W<6Gk3bW5gqo9qCcY1IKlm1EJyyXyU0*a}3bLGok7&(8Noi;vQ(?c~EmA(8PP7>J!k!r$faH(8SB3 z<}{#*uZODdKoj2v6`z47-T*ac1)BI?sQL|P;zyw32hhYjq2^pb6F&`Ae*;bY5>)&J zn)oEBIX}?EZ$i~GsG!E<1E{zFn)qy}ISOdv&!OryaEM!=i7$bgRta;1IuoCcYMG z&I>eg6R0^KaELRgqQ>J^s5t^?;x24)FzO;y0k?Y(NuFf||1fhxiFJ@dr?IZlH zIKv-E|Dpm-d?wVK1{~rO(8M{Q<}5%HUjj8}1rG5YXyO7;b55X%uZNm*0f+blG;s;2 zIUmr(cR|hhfkT`_9W{Oxpyo)Ri64cUqku!)08Ly2YK{Y%_ywpr9yr7!(8LX(=47CW z--en~fJ3|iP22)%&IB~^XHauy;1FMdChh<=X9t@2N2oamaEM<(6Ze3c^8ii!57e9& zIK+RTi3dQ<;m|;hM|MX@y(54_Tmely0&0!{nz#_u919%c9%$kTP;(;C#ATu8B;XJ) zKoie^n$v(Lt^qZt1BdtwH1PtcIV;e_jiBaiz#)DBO}rFp&IL4a8>l%qaEQM^6R(1r z^8-!X4QdX9CTcvoLB$0$QN`<_<|v?v2SC+p;1IV!6K{c<-cqi1H z0yOays5uol#5>T$`=I8`Koie{nzI0h_y#ob$xw3+pov#N%{hTX{05r%45&FT(8Qad z=6t{*&Y*=FUvr`62%w4gK+TcBA+CWYz6ffL1)BIYs5uTe!~@X8mqX1-Koeg8H75gy zcmpBh;J?XyRL-=Ip>BegaK=8`PW|XyW^z<~+b5{sB#V zH`E*kZPa)?0X2sMhqwfq_yMRn8ffB|pyn9h5O+WmKMFM`08RW3)SL($;u&b-r=aFk zpou?&n$v(od;*&Id8j!H(8NDL%~^p%d`~jNyO{h5^(8O7s zAobu69O4{0sPTIbYK{b&I3Ls;1sviAXyT8d<~X2z#$%iCjJ6yP6nE|64aam z9O4aV;%}kmOh6OYftoV|hxiIK@lQ~5cA$xyLCraUL;M1o_;;u|575LNpys^5A^rnR z{14O|4qeoE^n#irfJ0mXO`P#Bq+eiwCLRJc#{!4A2bwq=)SL)3@i?eC2{^ZOOQ4B|L(S1Z6Sst_H$W5jf{Ht!i6=qL2|yE%hN_Q16VHK) zXP}AaLd~f_6R(A;Z$K08gNjc;6EB6Dvj9zeK2-e*H1Q2k@f~R5wNP_Tpot%Zs=t6H zehDi608P9VYR(5V@yAg0KhVU#K*c!>QRBB4YK{b&IIAlpohYD*i$TQ=(8Q-g&2c~z zSBI+iKohrwif5pSdqc$w(8Ob*;uFxs^P%E1(8L>|;ycj9Cqu;#pouSqia$UT-wqXj zfhK+uD$Zeq8lJbI;sR*mZ=vD_XyX5&;udJ)0&bA-_dpY$3k~N8G;u|!`UEs_BdB-* zn)p(vISpvy&QSFoXyPGI@fm31YoX?>Kod`es^5Sn-T)OpfF`~bYR&~T@g-38H_*fn zK*e96iSK}#^8-!%5mY^cF=~8$fr<;DiSLG*l%O(8SxI>UW@t&w`4dKokE0HRlGJ_*$s?2WaBEq2eFV#Q#FgVK7CF$170v95}=! z(8SsPLHaKmXyVVI<`|%fe}RfSpo#NA%?UsgXYzpLiwGRz8EE2SP;)BK#ATu8G~f`Q zfF`a8HD>{uxGB_}6*$Cqpo!~1%{hT4?gBOE0uJ#9XyT?&b3UMn2Sd&IfkT|b3^ji3 zpyo)Ri6=qLQNST?fF|w^HOB!>yb@}T2M+NFG;u$uIT>i;eNb}>aELdciHAbXnSds~ z0BX(*9O5g`#ABi6>_8LW1U2UX4)F_U;;B$`9-xUIftvFIhxiXP@m#1m9OkI;cnxZf z01j~lH1SfXIRK)L;-J#+EXyVtQ<|LqrM?%$Spou3y z#VgRn??TP#Koc*3s-J)+UJeysfF}MJYR(2U@m8q%9XP~qpovd_s(*kcJ`*bb0ZsfR z)LsTF)c9HrRnLJYz6UBUfhPVQYK{h)_ywqX12pj`P;mz|@vl&G0?@>NLe)p0iF12H z(pv_a_;08=6=>oLQ1uNs#3!JMGyaFP-xi>WdqB-ufkS);nm7m4oD*o`8BlXB;1GX+ zCe9Bv=L4E}2h^M&IK(-uQR7z(YK{b&_$sJ53OK|K(8Oh-<~X2R3Oh6Nt@PVY0892mOpotqn&Dnt_?f^CC01ojBXyTSoa~`0H zXF$z)fkXTUnz#eh91a`Qc$@(>M*xSo0-Crx)Eome@e@#UEO3Z>po#lI&51x0{|GfF z0f%@2ns_MGoCY*;0bfXbb>I-6fhHaUHD?8yxCPXl4LHOPpou3#&AEUko&YuH1`hET zXyRE=bAF(ScR2;v3M!d!gnWKoj?XnsWk&_zg7iDNu7> zpotei&G~>soWTw?9%n<%5kM240X0Vghqwls_#&t|7HHxJpyoK>5D!2TUkNoQ0Zse^ z)SL_);uUD(8=&TNpovTQL*jh`4)FzO;@hF-Y(Nv&fts@ehxiFJ@qJKpZlH-fLd|)A zL;M4p_)(}i4ECt;7z{Os1BbW-n)n&0IT~o<8BlW!(8L>{;tpuym!akapouSps*gYu zUj-GVKe#?|_PPIH1PwZ>TvEXyOl{>J`w$pFzbP(8OOu z#XZo(zeB|%(8QS;AmNjNCe9xS5idX!mxhWrpo#N9&6$8Et`Ai|15Ml$D!u|uoF8h= z4m9yNsQLpq#4n(Ui$l$MfF_;=HRlBm@gHd7Qc!a^98u$|8fuOJ4siuEaapK22591) zP;)GBh zIe;ea12yLa4)Ggk;&xDTUZ9DmK+XApL!7}GH69(I<_MsPS3u2?z#*=IChh_?#{x}! z3e+429O40J;_gs$641nFL(R#+Azpzd?gcfc15JD()SL-8#2286`$EmxfF`~UYR(QE z;wR9=1EA*IKoj2vHRk~i@egR?!BBG;Tu|fjFw`6l9O4pa;$cv8G|0H`?%IK&Om#IvF1IG~9q zLCx{NAs&Gyo(DB215G?1YEA(T@dh;ULZ~?t(8TMZ=FGq$z5-3W1ZvI>H1Ww$a}MAT zzknuQ4mIZin)q_4IWKUC|3DM3f||qOh8mCSq2>tS5LZAGuZ5apfF`~lYK{e(_z|dh z1e*9ssCWXJ_;sjw0h)LR)ZPX(@yAg09cbboq2e>p#3w?{S%D`07pi^(4)FtM;sQLvs#5bUc zUx1o(08M-z)SMG&;;W$IFVMudLB&6yi64TB3wWT$*Ey)T1e*9QsJI21_%o=u0}k;3 zH1V5Ie_8JYgNmO( z6aNJ@=LVX%FI4>lH1Qy)_y;uce^7H6JW=B%9IBoJO*{!IE`cV_&Ikzy4K(o_sCol5 z@d~K81Dd!1)SLh`@fN812sH5tQ1J{jaS5n76=>pfpz0gY#8*Pa7odr6gNm;}6F&nL zKY=Fx2r7O7P5cK``~#XeUl=6ZexQk~K*c4zP~*i4Dz1Pg?g|w*KoeJhhJyo|xIa|A z2by>sR6GJrToYd*0GfCO)SL@w z;@_d>+`u9J0!_RTYR(TdarSUXeq``LjYpWc0GfCg)EosgadD_Q8aTu)(8MQ0&GA4J zSBIJtfI~b1O?(d2oB}j)bEr8LIK(^9#Fs+NnSmzm4mD>1ns^XYd;^;JI;c4Z(8Lp< z>QCShzkw#c9cs=CH1Q6oIUjI{Gx(y$;{m8S0%+nJpyo*65Z6ExKL$0&0!{n|)EoyK z;sI#lXQ1XJpoud?K+<6b4)F>!@k>y1I?%*5pyo`#A-(`j{07vV4QS#4P;++R5I=z? z{t#-;4K(ovs5uXCh<`v6e-1T=!4EYaH$ctdz#%SyCjJ&`js}|e1E@I$IK&;$#6LsL z2|yF)jD*Bj1P<{EG;tBA`UV{03(&+>pz2qkiQ7QMPoRm1K*cYhiRVDYKcI=XK*fKc ziO+$GOZcOP{}!mY0-E>{sJH=|_)loKIiQK(hN|~K6MqX8k3bV=W`cxs2AViq6hyoL zOX4>a*8sCtG#)bP)SiVL8L2SLqIKohTls@Fgh?}Lh4povF8&GA4JUjS7ffF`~X zDxQEQo&+_g08RW5RDA`S_+_Yg2by>m)SMY;;!mLJ7odrMg^F)L6EA|Aa{x`8Ee4Vv zPN0cPK*evMiC00*d4VRb1y%n6P23tP&Jctek4;c>1kl8Npz0;i#ABi28ffBOP;)HM z#Pgu)9ni$M!6Be}E=_7HZB1H1Rg5IX}?EXF$a{LQv!J3e+44H1R!9^$KX>7og$> zXySLE<~X2JQ)$zknwG8*0u2H1QWub6%i{bHqdZ`vXm!i5Vi!5sDg*8c_8D zXyP7FaRoGSE~q&MXyU0*^%gk9J>pHKzehyaQ@Z2M+NW zXyOV`b5@{ z+ze`t0-88O0wg_X;1IV!6Ssw$N9YNSD=a4 zL(SDlW&w(cXA1W?^CO!>njs}{zSP~@N8sHEQKoeJls*k`SUV$dA16ALELwo_6 zxH(k)3LN4m(8S%L>M!6B|9~bQ4psjHhqy!}YB;Au)hpl-cR&*_hpP9$A)bLI-VRk? zfJ1x&n)r06`Wa~AE1}{$(8PB`#Sfr~AAyQLKodU;6@P&yegi8015JE3G+l8-p@!QN zsCof3@wZTM12pk(P;m=1@&8b94>a+`Pp#fF`~gYEA>1xE)k| z2b#DCRD1@S_-3d%E6~K#q3SoFiC03!51@(fhMIE$O}quF{sx-(G^qFsH1WewbAF(S zFNCURh(?XCHBfN@H1X3=a}?0TcRotDUkHgfhPVKYR(KaadD{n1vtbvpozbRnsWe6ToG!{2{dsdsQ3*u z@sCh*UZ9D)Le+mj6ZeOTGsK|A;}57g0%+nXQ1ucx#5K^w|3l5OKoie~n&W^&JOE9c zi3Jk=325R4P;)ZS#7m*#9cbcJQ1J<9;tf#o4QS%+Q1KmT;{8zZ8))J)pyChE#OFc9 z8Ddexc_~z!15JD*R9pj1d>>TY08RV^R6GDp{4!KL0!{obRJ;OB`~_6J0ZsfJRD1!N z_*ba-3N-QGQ1KIJ;!LTKc)Wln&IuL&fF>>o75{-IE(sNvh(ireC8)Rpnz#;B+yPD8 z94hXCCTTlo>e}N`04K?Qnn)p|!ISdJ?;R6#FKoeJknxlXwE}RBQ&l)(yEzrab zq2_p?iOWLG2|yE9gNhfRiR(kfE6~Kvq2e>p#O@<@p7no2{iE*sJI52xGU5g3pDYGQ1uRI;`5;50chfW zP;(N{#8*SrXP}AifQnb3iHAeY=|B@d3ROP=P5cs6d;ywx0@R!hXyW&w>UW@tzk!OM zKoie|nsWn9{3lfX12l2AbVz#sfF@o9HHRSyH6Deb>N(KF6`Lbv^L!jarXyUz4b1Klp6QSxG(8Tkg;uFxsr$NnGfF@oI zRlfpFyaOt}15JEB)SMG&;!~mOFQADpf{H&t6JG%}=L4GfdZ_vzXySXI;vC7S@w*Xf zjs%+cNvL`SH1TUtaRW5*T~Koz(8M1@)q9|ce}sx>po#y7iWi`X^JYNO?F2M&X{h)N zG;vL+_zpC2bExFNBI~pow!r&9OieUjR+IVOXoo1>j#?nYN$CJnW*uo0aY)6ChiRt zS3ncr0yW0~O*{gs-U3a$8Y=FACcYPHP6V2G2UL9mn)qs{cmbODF{n8WXyQAd>O0WH zk3z*~poyP{nzI5;{1R0C1~l>eQ1Jt3;y0k?TtE|l166+mP5dWR`~{l$L#R1F(8Sqt zA@R$Qg&L2-P;mh?@mElD6wt&Kpz1Zy#C4(K7HHz1q2_p?iCaO{2cU_&L&X!&#Q#9e zDL@ksfvT^-AwC05JPxXU0S@s4XyO@A^(SzMzd#c&f~x<3LtG#mHT-L!>LqZ9TcC-z zLDf5;iT6Oo1JJ}-*&y+rfF`~Ssy+ivd<|5*0!^G3YEB25_;INE325Tyq2deB#6_Xz zY(Nvg4pqMcP5eGo`~;e~EYzGEXyVVI>K~wqzlVx{KoeJmn!}KT8ZY0W>N(KF8S)_E zDS;-g3pGarO`H>|-T+Np5Gw9~CTcpoxb<)nC9N{s2up0BX($H1TMtIX`fS zbL67NZz$9p2{iFks5uH~;+ar!12pkys5uU3;<-@u9%$mFQ1J*f@nonu8EE2NQ1u09 z;xnP*4QS%oP;(}riEo9fpMfTR1S-A)O}qqZ&JHy32T=6~aEM<(6R(Au^8ihpBOj8F zUZ9B^K*fKciMK+{;mAXc#|Wr;0W|RjsJH@}cpuap12pmFQ1uo##68f&r$fz&KoegF zH75awcmbODET}mRXyRL;=5(Nm?}v)dKoegGHD?8y_!X%74QS$zpyCJ6#8*Sjxqv3l zPymUq8))KuQ1KUN;@hC+{6G`efvRW7M~z2osJH-{_(7;S3TWbyQ1u#U;@MDf3pDXF zP;)%c#G9e&1JJ~Kq2dW>;@6<&6rhPOfU2)R6JHG#??4lO05xX@n)nH*`UPm>m!aYt z(8OOu%{hQ3{uZkK1e*9asQ3*u@gGogUZ9CH7eeCw1DZGwRGgszH6B^nA?gLt#3iBX zCD6o`pyC>6;zCe!EYQUDq3Rvb#4VuW0chg#P;(N{#9g84Gtk8SpyCy1;yO@sI?%+U zq3S1~iKjrt7odq-Le1HLCSC|tzXMIY3MzgAP23G?&J8s2cBuLXXyOx~;vdk&gQ4ay z6r#rCT&Q{uH1TCnaS1f>1gJS0XyTip>J8Au_dvxR(8P10<^-ULpMM!6Be}E?5 z2{q>fnz#kjoF6#EIf_u@cOujr2{iExs5uHa#0}8IXF<(zKoeg8HOB*ocm$gGVyHP8 zXyO;3<`m!%Z$J}Y4K-&1nm9)>B)(?g5MO~Nz6EN|4m5Fls5u94h+jYx-wQS80h)LK z)SMSM#DAcPAAy>~QH&ao6;N{oaEL3QiJyU*V}K^U0&0#04sj1O@vBgCBGAMyK+Q?O zAzpwceiv#^1DZHP2_(Kc(8M*M;xo|1pFz!8fhHaRRlfmEyaFnI08RWo)SL@w;tQba zZ=i{vfQr9B6aN7<=Leejd#HMb64ZEvi7TLq|Aea7z#;B|CeB<63AX?o;st2pyioNO zIK*e5iHk$kFTf#w08LyGs{RBH@fT>~+EDc$aELRMqJ|qI2gJVuXySHIb0lzxYoLj9 zLe23&6QAA1!Tt8e;yO_A3N-P+9*Fu4XyQD*5b+&o;*+7`3}vYPeGV1p zKoh^*2QkM3O}uD5L_7dZTx$bFJOWMp%SMQJ1)8|^8HjiXnt1&ti1-XNal;)D@fB#| z-?l=;Z=i{<+657RfhPWHH$eiNnJIO&lH$XyWj2Kof_B zLj#)ly0Z{_JJ7^o;WGhE9HxE-nm8=n7%Fi17fl@QUo>&^rx5o9pou#^gNR3ji}~}L&Yu7#Py)! z4rt;Jpy5)0CawVGPk_=K;8e`O05fL?nz#eh`~zs>F!Mj4i7$Zi1)5OZ4>QLBP5i-B zNInWc6Bm3835NzWahUoEXyW2f^#{@q3RpZ#9`_upotqn)gM3;hq>nhnz$8IJwpo)_oInBLe(3fi6=nIu>dsjFsS+j zH1PwkAo0?HCY~+=Nl6pX#Fs(EXP}Ayf{O1z6PFZ)nDYTm{5Dkl2b#E~7(~58D{46S zLB&1L#5=_y>O0WHgNz~K6VSx7Od#Sj(8T{i)vrJkzib0hzXMJDza2!}q7BuZ-|Qjc z4rt={Od;YPXyVT-AmSZp;&At)iNoEGCJuK$nmFA3XyS19x8ra>nmFA3XyS19qls5n zLi{xWO`Nw1B0d96yca6I0!`es0iu2fnz(HvMEnGr_+h9yH_*h(sv+tfI#B&9R09$B zKofso2N9ouCVl{#zc!$WFZ=|_M>o*K8^j^y)eAIn2dKC}C#riCBp~Vy(8M1=&5uAA zhpNv&6JG!opMWOrAPF&l1Dd$lXNdbRpouSls{eo{t_xK!(1qrHDTw(7XyVCG^#N$& z3ephu1!&^Spz0@}i7$Yv-+(556{`LMnz(}u#QYCv;+9_^{^jUKb-%+uh`0or_ytpG zaLuZLCVl{_-U3aW!3?6_15MoFKg9e9G;s~6`V2Jj2T=7DXyP#S9cbbW3=n%~pos@S z&0m2guD}RUzXMGirv3z)_yef=8))JcQ1f4)i7#M+nEwM!d<9fJM-N)~Gegu%pow3A zs@FghSNIAEPYX2hA5irkXyObk5c4C@#5K$z;u&b-4BsH;SD=XpK-G7ki6?xAsGor* z-T+m<0!=&tnhtlMiEn_aKY=E$@DpPG4K(o=Q1vg+#2-M_|3DLmspsfL4gUqdAm&S; zi3?aj!bby5yx})Qy#<;$OuYx1c)}lu`Uo^}nEDJfafiPU^%ZF17Et$epot$~gSc}B zns^3O{R%X32X=`19cbb(^(WB84?xx5Kog$;HU9;gcmfB+{2yrI2cYUX`cT84ffJ%$ z0!{n{RJ{h8_yVYU3p8;BONcohXyOiB5b+2!aSy2a3^efvQ1umP;uTQ!9cbbUxFP1x zKof_lUx6l`zyndg15JDZ)cg}@;tsqJ^*7MOVd`I?i7W6y)c-&ezX3I$qaQ8&`622h z(8aAF;u`4U0uXTvbaAM94|H)si24XLaRaFO3^efsA&B}4G;x^v4m9xt!VvW{(8Lp< z=C42#ZxDs3-+?9$Q-1VKe#!_;$3Kn?!~Q1udM;xP3Z zXyOYbA?914iSK~A#{*5=K?}@dl{+3^efviV*b`XyPlN>O0WH6_g?BXP}8+fT~}C zCZ3=IQNIIC{0CJ12{iEosu1-z(8LvNAmT63#9`(64>WODdCoBjHT+@qmjs$PtUl5} z6HkEVM+-D@Sbp(96Nj~LBhbWQ?b{4Aaaen=0!fU4ht zCjJ0w{s}bk1WkzfH_*gk>R+IVGiX87|3DKLu!D$mOhFC*15ou6XyP#S8ffAT+7NRr z(8L{}=6j%tC+I-bN1%zr)MucJ>q695potei&F?@HchG~VpMfS0Q@;XD+(93reg~TP z0;u^X(8L=IAnI?RiNn;tKodV;2vPq7P5c7Xe2%H8;h$g(Q7?fe4pXmzCe8ru7h9l< z+e6IpKoc)@NC*9Klnq$E6~I*1VF?)(8O;+&6$BFF6#7a-yV zXyTWl>MPL1HE%)GH=v0ZUxtWxpox24frw8)6aRb@B0d96{P9(Y_yRO><7*J{6=>qk zQ1J_B;xX4D>R+IV?}n=XfF>Rf^_RtT)Ofji8)A+Fnz+mzh`0xucrsKx08RYBU5NSu zH1Q+Q_^Ln?KM56YKof_>V+WczEFLGIiNoS?2AVi59v7gA!{TuTnm8;TH=v2b;&BI> zI4m9ypozoc@dTPUEFM3giNoTNV+Lxxz~WH=O&k`F5oqGDcuYVOhs9$Cnm8;T3(&-2 z@i+lZ`~ft+W}u0`fQm0b6Nkm)3N&$8JZ?Y}hsEO#G;vrw9zYX^#p4MyaacTFKof_> z;|(-%p8Jq=`v6TG7LPB`#9{F$FcUStVDYGdCJu{712pj^(0u2CCawi_PXLUfJp2j7-Wh1(ZBX-1po#l0hUBjcXyOr2@fT>~ zJy7uvXyP-V;vDl)-FY1)R6GDpyZ|bmfhN8W zDqeslegZ1qfhPV7Dn0>CoM9=%oj1_L=bq&Px1S%Ni9fmn5w}=?8a^=f4rt3uZnCnmEjS4K#6> z`4MR1Wl;YnpouT}1@UhOn)vb05b+&o;xKa#pozoGd4VPlGe=@6s=r|7D4>bM%<(`I zhnZ7>CjOL(8=OxY(8Re|AmTUB#9`_mpoz<|LeyIKo9+Vc~fLO&q5F0h%~0JS|pYcaH;_I4nG8pozoGUw|eK3(p^D;xP3Lt5EHQ zg=YksI81#4nm8;xcc6*G)E__-hlQuaYE*k+>J`w$Vc}VUCJs~IfF=$L&l_msF!c}6 z#9`rSu?D+)9MHsJ;W-0M9A^FkG;vsX{y-Clsb^S=YA-B2BhbVh1t94*0Zn|8AVhoz zn)q8wi1-0CaUElb_zN^~F>8pp#5z>>z|2uV6JKTmQSX5!4l}0$O&n%U1Df~@Lx?#m z(8OWp+&~kDnezZme6<0@9FFyK*8xpj*$tvT0!JG7Y2bws{-UDdjFndp+iNoyufhG>Kmtiw%xM@J`l|U1R*{gsi4zpJSO&n%# z1e!R^-UKvpSo~I?iNow|Kof`A+kqwyvv&uYILzJyXyPz?Z=i|8?0tYH4zu?KnmEi} zi7lw%c>|i>6wt&qeIfB%fhG=9-+(3#Q-1?Z+&m0o&I2^@XW;{cfvI;u6Mq{4 zQ9lDs9HxE&n)u=&> z`4MR1))^4-1T^tVsCWjNxJ(vA{SGv7m^lZ~#9`)~Kof_VBe4tBUodkN(8OWpXrPJ1 z%&9;VhndrWCJr;F15F%e&J8s2C}=o5Kof_V^8!sAW)8=0RDWq@L&D7hO&n&v1DZI@ zd=E5nnE4rK;xO}Ppo#B>+PeTv{4P{{1)8{M4#b^5(8PnF;tYFG{gnt6=Rgy$fQm<; ziO+zFC!mS%f{JILiGPBM??4mR&xN@20GfCpRQv>*cqdf+1)BIysJO&lRDT8ML(Eq| z6EB5|YoLj*g^E|8iQk2aH=v3Chl+QgiJKQd?7e{|-UtK*cwpiJNSKsNaDm{sXH10GhY} zRQ(AwaTcif1vGIVsQ3*uaT%!i12l05sQ3#s@dBv$2Q+by%@FthKof6)iZdKQjTa55 zIUH!>5m0dfH1QOuxCEMb4OCnKO`HL0uLhd<1*m!hH1PzedJ8o1IZ$y2H1Q6oIUZ=@ zcc9_{XyQ3gb0W~hS3t!R(8Q-e&B;I$e*qOQKohTknp1%$z6C1YfF`~GYEB25_!p@7 z1T^s@Q1KaP;vrD;7odqxfQqj`6X$`7Z$J~5fQs)x6IX$XA3zf~fQp|$6F&eIzknuw z1}c67P5c8?`~jNyAE@{XG;xkCkaYe5Oa1)BKHoe*&cG;yu<5OEJQah`P$@c=Y&u3ZrE2sH7(P;(N{ z#HBYt)MucH+d{<`po#B;n!f@~JQ}Kg1Dbf_Zix9i(8N>MLc|ZCi9d#lpFk7WKL$~M z0ZshqaftX0H1V$|AmR_u#G@}j!~+ha#(M=c-XqY&yP@%(fF=%$_Y5>~SiBdYiNoT( z0!G;vtGuRs%r#rp#^aag>+Kof_>`v){} zSiEx_K@DeEJPM$R!{Si^O&k_q1!&?7dXRmB6VSw0K;vr%ns^;F-anv;H$cr{IEw1d z1yFSYXyT8c=3AhN!^|&06IU>RxU&IW9Lk>nr6Idl85ll5&EJ70u6q%ZZa<)jH$cs2 zIELnas5${Oag$w;a?Aovoaqw8`~oy_1w*L&(Z!+s2~Zm5{uHSB8_>iTK+U;;CjRas z#62I-#2t(v_6i(F_1C1k5cLLV;tQba1JJ~`Le*EGi64cEH=v0tK=~V>G|XQKQ2qrd z4HG{FHRlJK_#LP?!wFRPFMz5uKofre6%RlYe+V@v15JF(Qa*6KQ-CHubs0pw0ZqJW zIYhhzP5jGBi1-9F@$xkg@dIe$2~hq8C=CmTFHm>>Kob|)3NgpvBx*P?7(?RM0Zse? zRDS@Pc;-DwyceK}CqT_Q5ng<~6{D3CTUp#~wi3zXDA>;WWg3AJD}2zk~Se2b#Fh zeTcXPR39uJZ$Qm=Koeg8aPoE;tUTV{`!F?-e3+1 z2aYok|G~_6fQlQSi9djf2cU@?Ld`Eg6L+wHm_GqcJP4|O1Df~(sQL?N;w4b^FVMsv zoQJqu<1B=RxxeoZB>WA~#6Pm}gY$I;nmEjy6=>oxb2gxf!_0YsCT{l_63!pc#9g7{ z4CheY=>rw#KogIKic6r0XF|ml(8SB3;s$8qEl_a_H1QcwaSt@{)ll&OH1Tav@dPyS zgHZ7dH1Qiy@d`BYw@~p0H1U5>@d;?+d`}?ZIRi~x2`at05oxDsQLml@dZ%z6VSx3L)Gs<6Mq5~KY%8l0Ofyx z(lGxnfbs<{p}PMg)Eo^oafizgbs1>l8-yU?Q-CIZK?EYc0Zm-N77`8@(8ODxL&EI` zn)pjeYC`PoKoc+2f{0&06KAl4g#QOL z@raiYdnKUuz}%S*6<0tLKLFJqfF{lWtd*#2-M#FQADhNI}$pKof6( ziVNIAb$^32M7;sJxC}%*08M-WRJ;IPTo$5!0=l>yM0^99_yMT+1$1$Fi24s`;tq-s zae>>Y?srgzh#R1bt3kvA(8M2TL&OWv#2a)V;uFxs8FV4y8_>ibK*cYhi96^+)PF!1 zhng>N2i5%tpyCE-;tQbW2cU^R(1Vy?fF`~GYVQU#afd{R`Wr{8ylfH?=~{*?=bg3@ZKsO}r8s zzdz8#o1o$h_fg{o7VjKr;;?uZKof_>y9AmzEZ!B+#9{HSfhG=%cLOwWSiD=HiNoUE z0Zkkh?;dF4uy_wZ6Nkln1e!Q3-V@NoVey`UCJu}D0yJ@0yjP%!!{WUIO&k{Q6VSv( zpz(VGO&pdUE})6S(u2eU)cBQ~1W7*uXyOVEka|A>O`HMBFM!gp_QPsu`k8%4XSOuE+7N~dwnt1Sbh<`iK#FKVH#3!JM z#~*@-&p;C|ISLV9fF_>38zQ~}O`K~VM0^99_)4fbJJ7^`?uV#9fF>?}03v<@P23bJ zegRE<{t<}!8))KUP_`ydI z@dh;USvMi#9cbcfZ$ZQ-poxEjnll4U{O28r`UPm>;&&n9E6~Jkq2e3R#NRxGsNaDm zo(#430GjwVs5vLl#6LmBFQAFfxCb%+2AX&e)chA{;{5j^>OY`~pMDGx|A8j14Haj2 ziJE>ELB$o&#EYIm%+Wv-KMfT(KokE66)!*&H~0rhR~2aDrcm(-XyRw>M8N542b#DM zRGi}#s{0+G;sR*mbD-i8XyQWl5c4z8#HT>TC!mSPFv)`5GXqUL6)L^~P5jebi1|0r z#Pguy8n02^UkepCKoh?K6|X=OH=hSFzXMJD091Sfn)m{!J9nUouYihQKodW*8Djnq zG;s&0xW^k*_xnS|1JJ}*LB(gFiF0m&n7;x|d=gar0Gjw*Hc0p@yhXJ)LlPoB0ZqIB zD$ei@Rec#$yZ}wS5i0%wO}qyxUhp2(90yNGc|HM6TwMy{o*ii75g$as>E{EQ_yMRn z3?ER$an&k!1B?^Sn*`5I{Ar#&I!8EE1#a~7b9!^~NM zCJr;_1Df~(sQU$=?t;08LmuLO3p8plc4r)Kof6(s=t6Hz6`4V1Df~) zsCt3#5ck5|X`}=VH#G4FQ2hyL;tJ&u_h+Dq|AUGzKoj4h2{C^In)ptr_yIKWgHZ7c zXyV79;t$ZoPeH{$pow3CiZlE`_3w44xB!~?BdE9nn)oxQxB;5@Td24Ln)p|!cmSIC zPpEhTnmDHxBzy|c#08<^4QS$`Q1J<9;)+o51!&?LQ1K0D;zm&M18Cw-Q1J_B;_guK z2WaBnQ1K6F;=xe=GWfRz6&b80Zse_RQv#%_<5-K1vK&NQ1J(7;!mOC zAJD|#LB$zW91 zG;sx}cmtZa22^|knz#W}d;yxcDOCIdnz%v`q`durCjJSkUf?%sxHUl48=#3N>p;RG z08RV>RDA)Ocq>%>1T^u6V2FD*powefLd?H_CY}%iQU3u=TumRMUf>U^`wu|X8=#5% zL)8bMi601qm|uVR=JRXqnF+dY~5-tL)5E>Rf zGob1X(8LvzA?gCq#5Y3K7odqBfU2K>CVmL2egm4gLkh(F3uxlMq3S=Ni62OXs25;^ z&@lI_c|+2J1)6w68bqB3nz#d0yaG+!Sp$;ZHlT?=NQann08Kmr%D(`mVeVN7bMPL17ZgCu?LZSx zfQoNG6L%a)yQ1u*K5PdNBFMx_0poudSL(~PJiNAuHUx6mh5Dp24 z1~hR6D1QT#hS{3{9{b=G1P;(m4#1)|Y2~ZklzB|zT+ zKB)QvG;xM@i24a=;;*3UH=v0pK-FJB6W7XtxaS9&xH(juK^S5W%>4_X>J-q#ouKM9 z(8M1=!zBP+9BNJhns^A*oC#>+3>^@6Y(Nt)hpNATCY}IQ{{c;WF;u;P2*f;?zYajv z8=#4wf~pTd6IbYj=r2GM{{~e*0ZqICs(u5SxLz(K{4b!1Gju`B|9~c54plE83XzAo z{{d9J0h;)3sQLgj@dMou{RL>^H=*h$pou5+K-6zQ6aNQQe*sPW0aX15G;xVMh<_!Z z_iw}8?{OD$Kdb_pxIziNn$ZgEXXkg@sQPR6PfpI840- zns@KCAi8#qAr;XXhUpLYS00$!krJB2{*>-m5tUKRln|A8jHA{HXfAd4Dq&!FNQ zXyU(7AiggO`NqK zqJ9RNxD8Z%0h)O8M2PwoXyTfaA>td*#Fs+FFQAEUoDNZc15Nzwe2Dl1H1YpSA>uF4 z#Iu$`#6O^k_dvyepow>^f~aSZLrsSv>mcGBXyWtML&P=E#BB;7;s$8q8=&G2XyOWm z5cM8t;*CWR@c=aOS5WZ?H1XhKi24LH@rCyw`7{Gf{QG@~cmirw7o)FGBP02{iHSHb^*MKof`M(;H~w zuzdOeO&pd_U!aM@^63XOaacb6fhG>irwody=>e8cIncym`BVT+9F|Wd(8OW+Q~^yK zmQOX%#9{f=08Jd0PXo}zVfi!yO&pd_6VSwA`7{Gf9F|WD(8OW+v;s{WmQNed#9{fg z15F&3PgkIcAKV5>4;#?LnV|Xc0Gc=~pFThnhvm~3XyUMZ`U6cImQNX!P~#nzPdU)U zVfj=6O&pd_4ba44`P2eU9F|WV(8OW+)B{Z%mQO3t#9{XjHlT?&U4Yz+Hv>)l+eT*a zIQarJaUZDo4K#6>`47;F!O()iNnliP(k(YqAL*dCD6oS<}09y!_1FB z6Nj0ffF{23D#ZK>G;x^u4QS#p^LL<$!^}T`CLVtsV*U*@ahUlJ(8OWpOQ@oT1I&B{ zH1Q4BAm&@3iNnlyKof_VUx6kLGrs{%{Ll@E`7_YOVdgJD6Nj0915F%e{sT1elQ$ve z|3DLmna`kx8V)e?Ezrba<~yK?*WZSiAAu$gGd}@M9A^FuG;x^u3(&+b+=7_D15F%e z{sA;`nE5}@#HT>-wPa97^>4{Pi1`v|;xO|S(8OWpN1%zr%uhfQul^4)zXDAhW_|;j zIL!PVXyP#Q51@$~GD7ZmxPc}PGyegaILv$r4b*UenXiB*-oyYg-vUh>X1)WOIL!PC zH1QAo5OW&P#4m6|#Al$1!^~fRCJrKRKof_Ve*jG!X8sQ}@o)MNa~QNx z{i~=25tl#{hncT{CJr-S15G>jI_I99&!|dIG zCJwXr0GjwG4T!xr(8OW(K0p(P+4}-b9A>YCHfngn>{UP$cZ1q%fhG>K*8xo&X0HdD zILzJ(G;x@{4QS#obRhnnfhG>KcLAC>%-$7f;xKz}pozomeSjw3s0Xq42bws{UIrc1 zaD&;)fhG>K*8)wP%LQV-1Dg0u2Z(qCnmEkf1T=A&y))3nVdgJD6F=_+F@Fb|IL!P5 zXyP#Qf1ruO%xBO=4TlAe5c4I_#9`(upozoGk3bWLnV*0r{s(%mWd)iz%=`v4ahUl# z(8OgDA?`eYCcYdhegjP$X8r>-ahUlM(EA4GXKcI=j)C=gN zrW2TdCD6oS?zcb_KMXbB0ZkmHJ^@YqC{%q0nm9~-2b%bCsQL+L;xP3a(8SL`)$c$P zhpE4TCVmmB{sEdeOg#hi{s&n4xdv6wfhL{+z0bk|O&k_q4rt=A@J~P!hs9S0nmA1T z3^eh-Q1>iA6NjzGIDjV34ZT0&1e!QZ{R=d48L0XXXyUN>Qvv9`6R_}6hpLxA6Njm{ zKofU{s&_yWhq)&KP22~nJ_Ai0roIDBJOZkI0-88X{SGwo2hjU64xov{!v6u9_!Fr5 z7ii)z^&HT9GhpHK0;*mBO&m5qYk(&H8mis`O&q2^0!_RfdQU_GnmBC!x&ckR530Tc zO&qo!V+We}3aI)6XyP#QAE1e^hpK;pCZ13anID&c-Y)?Qp9tu^5(;SIu=sL76OV(c z_dpYe%|}a)w zC!pbDf?7W7LDegui8nyYe+M*ibEtX`G;x^u8EE46Q1u09;tJ6FI3}QpJ44maKof_B z{|+>9U#R*6XyP#S575LTpz2?si7$YjLm~ma_XC!Ga-r%K(8Lp zR|c9mEPe~n#9{8AfhK+pYW@N=aaevifF^zis{RC;I86NuH1Wq!^&im0A3)dt2te-x zfrZaYsCo%Baaeg`fhPVQs@?%j92PzmXyTio_nS1JiNnlafF`~Js(uBUIP4t$6KLZ5 zq3SQ7iNo^a4>a*NQ1uMZdrM&901HnAH1V%c^%`j63ebB;BGAOSq4$y`pozoE&jo1W z!cg@q(8L$iK=S(qG;tZI`WtBC2~hX^Koi%5s%L=Sqk`dIG;u?ydJQ!32he+BBGAMg zpz0IQ#1}x_(|{)K1y$dHCcXe#{_j8&kAtqfQ3U1 z^j-`FG;vsZb3haCf~xmG6NlYnRe>hH2CBXROqH^5g`Xco9_n z1vGJ(`+uN`!`#CFy?+B14lws9pou?+ny-N-zMuh;K0VOHKS0$7pozoO7odrMhpMkY z6NmYC2AViK^j?w$XyP#Q51@$)L)D)^6Njn)fhH~jy}yG2dVdHkeBk8+nz#&9y#|^% zEWbyfiR(bsC!mQxfTsTjG;vF)`VKU4nED-P;sH?g2hhYHK<{69fF>RTRsRA_99I5t z*r2vIGNI}P(8OWt4ba4kq3SKr#1)|ajX)D`gsM+K6Nj}=8qmZiLe+Pmi7Ppz1H6iNn&v z2Q=|ysQMph;t!zrFG@h~TY!a+0Q8;(1vGJ(e;v@orJ(9P(8OWoPX(HII8=QDns@{B zUX}%D;)zi8E6~JY>QA7FYe+!O3%!6Qo-m0GJkNduO}sD(a__?fH1Y7s5cMz6#P=pb z)PFz|4}sn*@dHi#LmEUq1N7W$SU6vX+RK3^&J8tR08QK-DsF)$zMul)Uk5aCSbskO zO?(kleFmC1OnnEM_!6l4325R9&5-(c2b%a6sQLqF;;{Pk0h;(usQMRZ;xP9}K+kE0 zg&WMj3TWam^$uv_F#md>iNn-qpoyP{x~Bk59HxE(n)pSi`Wa~AF!ejo#4khDA3zgt zfSzyu15Nw{^gLO+XWencsjW4)bpZnmA1T3N&$;e>b3s!_?nE6NmZt0h%~WJ%bBsdkN-#4m5F? zdJQyjnEMUT#9`_K(8OWxk3bWLsn0+Y-@6WSE_4B!c<6eFcma*@ zG7$9thFsPO_5SHK}|fkQk1hj<1K@dh;UG;@f1W}u0~!eIjr@e?@2C7|by z!|GXBI2fRbXFPpN zQ1uOH;xP3K(8Lp=>Q|tNCqU1QKY=C=3(pH^;;``ifhJxKHJ<@`o;obt9ze}kKof_B zrv{ohEId8X#H*p^2cU_=`WF>w;&-9y8_>jI{n-U*;!mLJSD=Y2K*t+TpozbQs=t6H z4(pHqKoeJhp7+iGJtrO(KCtwrfF`a1Rj+|24og2CXyOJ?^#N$&u=%nAG;wpN`U*60 z*!aK3!vxVA3zhI2vvUqO&k`#FVMtiLe+mj6Nkkwhc9Zm`T#o4=71*7 zAO$IZJkZ2%t3bpH(8OWptUwconX>^+{G}qqoEvE3FmnW;=hnmG7iLZbnz$zP9R36} zaoG591Dd!FRDB1UI4u3_KokD~Reu0Y9G3ncpo#y7s(*nd4jT{TfSzX$^Vb9DdG`Tm z;uFFk;S+%-emw;uJ_Aks8ua}91!&?hcOF0!e+pH90!QA7F zCqU2h|A8hBJO7^ndR{fmUoi76(8OOr&&PH^6NkA!0ZsfZRDA}TIL!PRXyO6T^RXA8 ziNngb18CwAQ1vI!#9``xpo!-~)iXfP+lKiUHomHWCSC+puYo2GbH4|gcsW#k0Gc>V zeF2(yBUF6_nmEk;Gtk6eK-Dim6NiQW0W|TqQ1vI!#9{7vfhPVNs{R9-I840&^c-wzYo097A=E)E@Uk3bXG{tYRY z641n9{l^S6akZZi^#y3+g6!hp@%#!j@p@K>cmtaFroRw#I?%*zzeB_)poy3NfQZjP z6W4*7zXDC%zyNao)dnudC#D57u z#2=uEi||3jU!aMvM=(I|H-N>jI8;3cnmDZ7 zvp^HKgQ|Bx6Nk0m641o`pz1Tw#9{T?3^eg#sQLwH;t!zf=nkNXH$v5)Kof_}`@cXF zpAJ?30ZkmHUI2PO11x-&K-Ej2iNn-epowpUs&_yWZ-Ab+Ux6kLKc62>9DY7On)nN- z`76-GVfE|{G;tB=y$lb~#9{Hp0KG>7=3hmqdJZ)42he`81)8`URJ{Y5IBZ@i0ZrTw zsy+ivoB?`YMF*OA5LEpHG;vtHwgF8%395bvnmDYVdjm~8532qFnmEjS2Izeku<&Vw zs^>rxhlRfens_%SPviiaIP5-=2WaA!Q1`q*6F&fTj|B8S5Lo!6L)9yw ziNoU80ZqIZs@?-l93DPs;(bu{1!&^1{5u0p92Q>-(8OW!bpTC#2h{u%XyUN^`vOgT z4^;gJG;x^w1)%qtz{2M;RJ{b6I4plzpo#y2s&_yWhlOVXnmCIGr2UqGCJxIlGtk79 zpz0T(iNoA;08QK+s{RC;IIO?_0!`cos{R9-_yg#@7!uI?Nnqgv3x5SP@dMENR~*p9 zVd3e4CJu9d1)BIGsCydF#9{HZ08M-iRQ(Dxaacd%2AVjmzI%Ws4y*4Np!cZ2{0pn^ zIMBpl?$S>0h)LN^nRBJG;vt^Pe2ogrT+#r@jp=WJJ7@rK+Ru)Ce9AMCuIYg zIL!SQ(8OW+MCJu9d1Dbd_)cqZ3;xPBDKof_#e*>C0O#KBkahUsWpozoW z{{u~Y1=KwZ(0gWJ;RY)|70|>tK-FuYiNngz2sCkc_@Ify!v{?~1bUB52b#D7v^-pa zCY}sczX45r0rVc73uxj+Q1v&^#1o+A|3DLOhpK0Q-jf3hA6Wa%0!!=nVeWr`CJu8y1N8nMSUAAK zlLJj07M>bt;;`^EKof_BX9Su!%smNc;xP9#pozoN51KeU{h*1%(+`?BJpG`FUx9|_ z4K#6BeEmQZhs7@g^d2NwxWUvbpozocR|8EP7QY^7;t!$j2|yEvnO}e={u-*j0!qH_VWcaaR;dS8))JU(Ebqv^d2ghe|@3qIncx(K+7uw zH1SxddJ8mh1?W9n325RuQ1uyT;t5do6VSwKpz3F!i7$YvKY%7a0jmB4n)m~#`X6ZG zu>KB12I_bmC z8$s`_Yd{l+%{weW6Ssn@Ux6mR0D7<62{dsRsQL?N;tJ4v_?`$N?;K=1d1xnH3L zvaUk`O*|B;UIR@WRt|WeiAO=z2cU_={9A!0o)1;ufF=%Ww;VtduZF5WfhG=f&j&Q| zE~xq+XyP#S3ebB9Vc{?Xs$K(495#O)fhN8jsy+ct9F{&C(8OW)BzB;QCqUzC2bwr6 zd=8+A!@`H52sQohfVzhRO`PF6Bz_Ih#E(MNTcC-<(nA88_!X%73^Z}reTx&-M_ z&p;Dj0QK(yG;x^v6KLWv^&im0Vd{UNiNn-OK<{0I#V;(r6wt(B@#TOf4!d{K15Nw^ z)cqM~;yaf*u1j^ns_Euy#ty! zY#uEEO*|K>J_AiW0h%6Wpozo72TdFvK4{`?Q1efqi7$Yf{{l^X22}kAG;vsX3PA58 zg@w;zsCo%BaajJfKoegJRquc%4l_RiO?(ejeFmC1tUl^M6F&}BKLJe~=AIpB;!mOK z51@&|)iNne_3F!U6u<(JYS3nbo zsgFPxkB0Qe6VSwA`Ktj<{1a4t2bwsn{l5ZDoE3VH@CGz-*m*KH(8RT%>K~wqD?slZ zW`N#r4D+uQR6PfpILv$vG;uGedIL0Zn12J%#3P~VBhbVZpy#(#po!-|)iXea^7(SqL>>08Kmr8lDzt;xP9(pozoWlYl0^ z2Wox>n)m{!`5kED38x_atOID`>-8YxT_@1Q`3xcA9QCOEIM})Z2Q+a*Q;2#GH1Ro5 z@dPyS14|+1cA$yF%s+r84m1A*nmEk-2Wa98mO;$tfZjU|iIR?+nnyE#vsX>*_nu#9`_; zpozoOb3pG!houLYdIL0Zn0gB|aZy`Hy6Qj^PsoJSM-$M+q5BJFpoyjqHbTS?pos^rg@~U(7oP_azknvL0yX~zn)uHR5cNOM#6zI>yfZ-W zjfaINti7RtCY}yeuYo2GE3Z7z#0#P71JJ}_?Y#;#@iwUX1~hS)dlsOHPl2jmfhG>C z?@pkJFNUhWfF=%8{{c;WBUJqlG;vsZlW0dx=cl0R70|>Lp!d`}pow3Cs`o$>hwXQ+ zKokE4Ro{Rn4s*`}H1U5>^()ZCVfE<=G;tp2z4I5)#1o+I|9~bg0agD4O&sQai4N58 zNrb9bKof`67Y=CRc~JEpXyUN=sz4KOgQ{;p6NlAz3(&-;Le;N86K@cPxcdg0_(rJu z2WaB3{yRe_L?0|4?Src4Kof_#-vUki8dSXlnmBC!B>_$RDO7z1nmEkAGtk7@b0Ov1 z0yJ^h{L29}aUrPs6KLWNA`pMRKoeJhs{eo{4l`e(3!)DeK6X&`3TWc+{DLO#3RUlc zCf)#bPX?NJ091Venm8;xC!mQ(L)Fhf6NjnafhL{?Reu0Y9G3onpozosFGDwKIKc9+ z0-AU`)O-yzaR#V=JMx*)!{X})nmA`3B>yt>qJ|r+{82y?7l5kQKofuP z8PX5(Koi%1st-UDhs}>ipov$WfV3+T(8OWwpA0ndA7>!y3(&+J&qBm2(8Noi;tgox ztmh!=JJ7_fjzPpHpowQ4hltNW6WQ2o?W;CY}xz zXPAK+Zn;o#0W|SqsJH@}cqLTa08M;>48&XuG;sw_NccOTi?>3=1JJ}Z7DL1%(8LX( z;t6Qt7Rw>(Gtk5xpyD&o#2*Ml?)h4PCT=DJ5nq8O-lYT)KY=EG9xDC=O+4EdqMl(U zBs?Ign1R9GA0n=SCjLJNBA$RIel~^&T)t(Xi8n<-#4FIm?V};$4QS#p^&M#9OtBF4 z3(&+Xc0iHl_BCg(8Tj3AmRtm#P`TT#804!uUChNUqBOgY=xYw zd;?8f&K#ot0h+i2R9s>fYWTzaX@Dkv*&8wrW`QQ|@Cp(R4rt=uQ1Jvb@dh7=IT>i; zp-}Y&XyOS_@d;?++P)BTW}t~@LDern6R(4cA3zgN_k);o0!_RNs{R6+_)Mty2Q=~X zP;-8ui7$q#XPAu|&Re143TWb{{t)+Qpot%Xsy9FrKL-^LKoegb05K;5P5c^EeFB>J zBdB--n)rOEdpgj>pF!16KokE272kj+eimxZ4m9z=sQMdd;&oOK^&im0#h~hcpozom<(P|_ejY;Y6+jb**(-r24zt$* zO}wWP5HKZA;&Kod8)4pDyrP2BM+MEnJsc+L%o_y;s`tD6w< zA86uxenY~UVIFEcUV(~ppozbOiVL8LxBP*aqktyPxe9XLtOlAm+iHlo0h;(#sJI21 z`0{lS^$uv_Hq4Om77sM>S34l;1JK0R?SY6#pou?+iZ`H%*FeqhKoeKm3o+*ans_%< z{RuSj^ZOy{8Rnyg^FpY44m9!H!w~fjXyTip>OIiJ`Hw)tWm;{8zZ0yOdXn-KLCXyOa+L&O`<#5EQ=dodueB{C|i!4rt&~#5>T$ z%c0^6(8L*_>oZoMi64Njd)R;`t^r+tumeqe0#y6}n)nZ>_z5)e1n4?|3uxjepyD^s z#0{YH`VY{=7eLSbe1Rt30QJ`gG;xKmkoL(BG;s##IkpUoP~$fPD$ao>uJ8$BjsTiC z19W|W1e*8)=sF(-H1P)L`W_85@dwcR`wY;;7YIPyXMrZ(0JYZvO`HK5j~-~^3DEsf z0che6py3mNE)Ml?0-AUN2gE%Y=;F}*T?J_33W5;z6=>oK(0x-4XyOl`=5(NoL)A|} z6HkE7Bg{Y(Z@3JJuLWr051`?&0!^F&dVcN(G;xJX5Oa2*i91|@h#x=`XMnD6IDsaf z0KE_H0-E>*XnMPWCZ2E>V*Ud(@dMC(k}uH2HK6+sKcI6Ib{SF`r>EBz|D! zj{-EkX`qSQDM89%3p8V6OV+7 zpFk6L^Mt6sfF`~v6(W8EP5e1j`~jM{AasA|3pDXIsJ#qJP{Zv4)V~~P;xPXTpoyP@ z`d0!?9OhpIG;x@JHPFOi{xv`ohxyk6O&sQ52Q+b*e?8E|Vg3z36BmQ-V@*I4Un&Zj z=juQccZG^iKoh?Z1xY6x(8TYFK+M^JCVm^L{sx*jO#K5i@n=x=4A6CsuyhVn&w(cX z5vpDTO&q4)08RWKRDA%NxCqq05oqE((DlO=XyP#S4QS%hQ1uJY#9{7PfhMj2Reu6a zd`lc8oG+k>?}v&%KodU(6@P&yei17E15Nw}RGa~}-V@X~V_;yo4;2?c6MqU7mp~K$ z0u|Rl6aNDhH$W3-j)(Zm0Zp6-D(-rin4H1S7JaRoH-w@`5nG;x+hNW55}iAzGo9ni$JpyB~&;#N@c2sCjo zsCWjNcm!0u08KmxD&Bx5UJn)TKojqUimyNuS4fBWYe7FG+(5IwbD?Dxh+2UpJ`W@S z#T$^swV+}kY6p_|B9H(SA3zdc3>5=WCy>P3K>|>G0ZDu!R18GjKoXw}5`f|dNaAy# zVj$`QbiD^70|P@dNC1jYKC;*b$7h{OSC_^>iCFwBPtfyoC*;tRkcP+|fk+}Ify z7(ix0MHx7d#F=1%3=9kcNaD;$;u1*WEJ)%CNa7$j!K5^h#6fWe6E{E-2e}C*Zh<5Y zE6YG~4oKphAOR@$KoaMIih-yAByq@0B}kNkAp%JpGLr}qPe2lf%+Nu^GmymjAVOfW z07)D&vjY}ps6Y~jj9^2=8<4~WAwpoX14$e*A_^8}n1Cb>xfu;2J_AV{G6Dk;Uw|YI z8Nq;vuRszPg9w4i4M^gUlfc2k3_Fm-AuVu-_yHtwNJ|eQega7xva$jqegR1wGIInG zzkwuQaMEwgSaXE+(nEZewE)N!g5I>N_6(B+oav~!ALslF?ggKDJp*<|H zgaDE_L?>97K>|r!1tJ6{6_CVL!6Fbs14&#BA_OK4ki^x&A`rp?Nn8UW1STDj#5KVp z5W)jVTpJ<;CIgVfb-*GJA_7TV7a{~E6OhF9z#%Nsv?wDr=n}B4CmON!%GM0wDyD#9bglU{V4}+!ZVW zArz3r-5^3>QUgic9V`MN43NY%^LSV83Njw-V z0wE?KiHAUhz~l@h@ldb`gjj$i9tIHtlPi$K!@(jDVgr(R1Vji-?m!Zc1dBk314!ag z5Fs#m0!cg?ECL}eAc@C7guvttB=K0V2!wcmBpwG50+TP0#N)vt5aI)pcmhNSO#VO; zPXvoViOGocp9B>GQ5;C($shqJ7C;hDfr^1B2_*4UkN^}bAc?0z#Xyt>l6X2u0E!Ke z#515`Aj$$sJQE}U#STc~Sx_+$<$)xg4HAIj03`7os2GTfKoZXd2|#fIl6W3e3`Auh ziRXg^ptt}@yZ|Z&qAHNY3qb-<+<+ur1Qi2O9Z2HEAOR?zfFxc56$4Q-ki<(t0#LjF zNxTdy2BKCViI;-}pm+n4cm-4pMD0KluLKD|@c|_9DySHUI)Nl!4HAIj3rONMP%#j7 z14+CVBml(^ki_etVj$`Tl6XBx0E#~#i8nySK-3Q;@kWpU3`6@Dpz^;7CdR z59%7f+yLgU0`Wmz;+G4+{6!!>s4M((0+>Gw#0PbOUp9dGlR$h>c6?a?=68Ykpf2yr z1Ten|#0PbCUj~5rRUkg7i~G_6%r64*L0#LI24H>`h!5)0zElA7lR$h>SN5d&h= zgSxOU8NmD?5FgZaefi-Z$iH47KB&w3@&TCd1mc6bsxL2q`Bor4sEhjY0GMwC;)A-T zFE@bsS|C2COZsvFn6CulgSw(GCxH1!I`mzDc7XtA?UC);VU_KX!59)HhOaSwl zKzvYF^JM^-|LdLtLk6ge`O*Q*{{-TLx|S~u!2DMrKB!CiQUT0=1mc6bk}n0o{97PC zs0;a$0nEPy;)A-5FF*VR`TrD%59%_$d;sPj0`Wmz#g`Yr{9PbEsEhdW0GPiC#0NDh zUTy&MSAqDTF5$}sVE!TyAJi3mIRVU{1>%FcfG-=s{7E1_sO$H#0Lb(pA^Q%C7&=A&32Qa?~#0PcxUK)V;Ss*^BtM^g?%ufRGL0!C;0$_d=h!5)8 zy<`CMgFt*xm+s|cYLe0OnhP_@J)a%L8D(5r_}!vc22@ z=4*lYpsw1>1z^4sh!5(by_^8%OM&>HuGz~5FkcA72X)C_7J&I&AU>!o_A&v?X9Dp- zU9gt{VE(VW3Je*buGdQkF#i*X59)HgGywBof%u@V)=LF2{}G4}>SDbV0P}Bw_@J)U zO9n9i5{M7#Qoa1}8|42}AU>!o_3{Cje+a|}b)jBf0P}Z&_@J)S%L8EkCJ-OgWqP>* z%wGlKgStvD7l8STKzvXa>E#44e-?-j>KeUl0P`n-_@FM)%K|XJ3&aO?g-r0+^o!;)A+4F9pE-C=egiwRy<^ z<_CfJpf1hJ55GYE_X6=jU742;z&C~0`WmzmzM{?d?OGa)Ma_O0nFC| z@j+dcmkYprB@iFfMR_>^%$EZ3L0yxV4Pd?yh!5(Lyet6oxj=kSSL9^^n9l^_gSsFu z1Hk-WcN7>hKwXcQ4q*N#5Fga#cxeFUzXI_=U5%FtVE!WzAJoNoDFEi*0`WmziLh7lHVoF2c(RVE!x+AJjE?*#PEG0`Wmzf|mtgeiw)js(@Z5fcZ@zKBx=u zG62l40`Wmj|CbJ6ei4WdYVyA{0Q0jzd{9&Wr2?3r1mc65_%8*({3s9~)UI@j*@VmknUP5Qq$c{IUVep9JEArV?Hjfcae@KB(#ZG6BqQ0`Wmj=9d9r zeieuhYAU~U0P~ALd{7hlr2&|q1>%F6#xE7X{3H+`)Fgf>0Om)5_@JinO9n7M2*d|9 zfnR?32J*ibh!1M|zI*`YJAwG1DUFvGzv5e0`Wmp8!tD2`C1@8s44t% z0hq4@;)9yNFDHQcT-OvB(kA>@h0#J#K7=-W>)ClR&ZF~@NAr^p0U@r22MkYo^x9t3 zWnlO(djF~d!~hxz4E^uH|s|NnoeN9WUEkH$AY7(m+ha{T}Q-=lLYs7dD0-3sFIZ)4!!cfq5( z6(rUv02TFUKEMc;IdJd+hbn_S14HK_gcK7*iV-9P))v5mkYt8Pg7xvE>SKXOA?f2l z=wk&-!d();gOFn5-^Os@2Ro8G1CSgFlI7n9aVVOF>>x9@9YC^B1Ys%%NOIqSgFiTs z{l*CqMbaXH(89&Pjp4!%{(T3UAIO6>L3}TRssb#}h$OFokmm*)kMN}mLW&1XN&_Lq z3zkB6Dj!4?$*DRBE&O0fghd8v{O=F&Yr1aW*K`HZ7r=Z$*Ar>{*IaLS^tx{FXg(m} z(RuvEBwYrE!~>po zAwJl40OW%s-L6Mk5AgT#GBGeTyS`z4`Hqo+!J~I7sB^Rf)UDeI>I->vUjOW|+M~A> zB<#_AKmZhep!xwJWC0SA{qg@l$U4lh>;!8C$<6TS4L}4YD7Zj=Z4LPk(F&4A4Nb6g z1d=prVDWD|(AgUE|NsAH*EcL4y{@l74!QF4|Nm~Vs7LYzkgdrlU?JRV!syZK`^uxY z71V(PDHi|s|36G)^;ZxZA_WNrkLE)H9-YTLItc`2!?3Wk|MLI;YjcPI*!OxM0dcSZ+&x^M z{{Mf?3=xAl>f1-K8)1$z1sM!c;<^D8HY^}lcHRInUw;QVE%wLB!;lic`AvmKXKjZ^ zXK8~+w`&JDYhLi^c5MI^@va@%%XhFiQsM5}&tQ-f43m}Q3WKF0zQt=H^E&>&X6x<-+fc$|}V1pD%Koy}E)gU<;BspkF zaR?kH0SZtVc<~HUt^yT=7tA0*4X7ZjNJgq2!Qp{aD1(&iK$U}wW7J9ttXu#TGmshz zq}%}H9FOJ$5uiBLHvkvJpg|FkaJPd&>w%IYSgPU#<<4%`hHeJ~q-^Bc;Q`OckVFy) zPT7#`zZI0AAbLRgq}#OtEghG<1*JHM#)|j<|G%sP6?-6c%?B(zdPQYq#Th(0uYp`= z`T76dt7L|ww2TUsqL>@`&4p33v?Yg7&KuJ2RC_4BBSmUwJ{{ z1}(Y@!R5>jQ22plA%zUABs6&g4nMFai+BJ3zm|fBMz837X?WoM0T~Di*4}^!unI^q zk_;}RAi@7z4O9ey;#UMz`1DQv_y7Ov0&oEViOd)8L2Ws3?tl9k!~_*M;BsLfC>9~* z!ezJ&xa8UL{{R2iA`nBsj-31!UhF`uZ2?&e(K{Waw;NWbcr?Fp@aU|);n7)o!J{+u zgh#h4*zQD-mpffwcyx!J@aVkY!Fa%f@q$P53r3Gl*9RWmt|veumaZ>A4PMt59@ef8 zO1O4_2RijYY3sNvsAGIvDx(lV{`2XM*hCo|NsBm54w-q#U4Ki0l1zfe)gC&o@c>e*E38#X& zy{(|(YmZ*uWC>8_I|owkuY;m|0Vn|EUQnCIeNCh~w_JL*)Kw`2W`Oae=y{-p5AZG0XB_xnk0@y&;10c2wNGm7= z!0nV>pd<%wPMv@8@;As(h$=sjs_s^B7kHZ)-W2cl<>R*zi_}=$#7I0_{&Fm$@! z@Hp;z0TiIeUC)51m;b=wdIOvzEHCi8AL=~d(dl}?16tm69)A(^3v3T0i$hH9gy!_A zpq$cNdqbd1uiN*GNAf|B%me9ZX=xq@Unq1QI{1sJ^Tfd)@|uS_FC2Wp#CU=6fabx@ zQ>~Xubv?Qv?(Syr=t!6lAX9sSbf=*At8&tus8VT@MuP^5}Lwpy_(UquKR> zK(p%^#^%}^4E(J>K%t2Utv4E=Xhu%hw?HD6hap8-3ux^yQmVhJ&cNW=c?3yhwFUzN zsOJRk7K0MRERevV&KsH+Jd$r9DO{uuvdMLZN3ZJ)k4|ucst2dB!*K5%e^Cojw8En| zbcF|~1cfwR_krBhT?#5PL47Nq&WF%!Rt+)%ktw-AiKlxmIM*Wlr~!8LQ6y_VsG)m< z1!D0IkKWK7koFxotX;ttyKeC5eCgBq2wXPaf58T_6k&X-Is?OND{#36FFyW01-0+M z%`GNSy@C=#CSbe3l21Y9LgNuoWf|=l;}{F6TLzhDS|@VNETGlw}O=H15FNt#4OZ734{SOp5S_>+w}}29zaS!vR_m|hPHwxEj@a{ z)IQKGGDu1q?6B4o5G%kGB%+wWAqa|gm?`VPrhuXj=8{8Tkyg;;s7LQq2-SK6WE3P0 ze}USm-CMyT5ceaZaf>hCz0vJ@qto@u z%e!2l^6?6)pVUBRgIchbhrx{%{+4UZ;3flTY8B)&ZW(wmfw;JgA0-2jLspowUY-c~RL(NGCC z2|3ukAxc4W*dD!8Ayg{|D3e2iy&0sVdn;H3J=kqQ!G`b}1H>o^kmlZ25Ct#guYw(V z)B|gffVQG~bhd(~*+DIdfB*kOgXA>CKn;k2APOEN8z54ksd$gxRxkze;dHPB$cM1F z1Kq&t(b)=`)%WO~3ZYspKxRUGxDceHdn;I^w-uzzr}HJWe25159wG>eqZ%~^hUO29 zEeA>@J-T6838VwsMZOCfltCzeuLO=B4}{2eB~a!8xek`>PlH8TL2D2|qm3YE^|pF| zD2VHrA+7_9pojlnupB&TH9)OH#7G{*@CcA`y{#Y$9wW{mz2IU6<`PGU;ta6jsSv6a zv{nM@Ina$g9^G5PBIqtLR$*Xx37Y&tO6eaJ!M?{xoSPLvVbBU%mEq9~p&(HQI{FAw z48okW4x$vapu?kgDuimS067p6IL|;%?%oO(L3a}9U3H-`g;1?4KsG^Q$pNIJdn;H3J(hkcf<^%@Gk^m11-MO$5~ynxpb-NtmQ}%n2A3JT zUC~PLIC*fQIsvk^w-ro5oZAj@9B56EM{g^Lf@cA+yEcA_ZFN1gbSbDj@EA4t6*wIAKX*C&YNrswt1& zsSv951y~0-DSia$=-vtz>1_q+LX=ml6&M&^GBSeG6lxV`3o#Wme+8-%Ky65f1JXdo zb;81yP8B&<+uZf``H{h$Fz0OTFOPNN7v$ zAy@)A6gESQ2Q{2Mdco~yP&p5FHaHYsgLFXq=jfrZ6yySkASjO=Q@~PcgTf73u&ILw zOu-=uQf?^=^7Ro=*#xR^JCDC$1iJ;~I#|IZ3KnU#0J*1kDue>}n4w1cLR<%#xBxe{ z5RDafc?O1t+RF_5EuawyjFdbD)YRyNbWUKM3vg?9FT`CK8j>LzKodhAy{%vh60uiN~eLxgE>1%G5${4xAl4b}h}!3K5z!9lVL;xcF#5k$d#m<;wj zvNsYT`X_kwhJt#f9Z=UV0-4cW+Tnp-G=X*|zXUBXz;FrZj9-sVl&**Z%+WVcv)wT% zkS|>qKsqB}M}Gyo1KDNAA&NG5fX0@4T~|O|#sP8J3JjMWl>ujPP%jmc%H^a%z2YmF zMI-2>SwwG`0W`e^D`StpkN^c!_grvY2nhgC7BG_nMFFVC155D#Btas`EqEb_qYrrW zh92LwFXR$JxEP&=mQ8J zTp)dvVE~P;>;w;qKu3ze<3tMVpd_&O#Sc)IZYyZ_@f;2;- z{`iYSd?52$LCfGk#@j=s*4*$P?*=g~P;Z8?e#vi}2C# z-}^xB0Eath>=sw$lv-1G#K7H z6%?GH#uzB9AWbViNKybxG#?0nkFK_ZGF!SG49K;icTGS*yTiWK&6 z-JT%b;Q4Ok*iL%!|34&Z8N0zw>vVnN(d~P~qjxH3g`h|8R#1up`Rw=q|DK&EJUTD# z+5>WU=kXV%6*#|8K5RI*woeorC}tSFN(|jOsM&wW91>H+A;_*FqBsDZv&@N za96GuoYqi7cG&~)5{KXa|C8X&zH%Jid{hSU=0;XfdlqUle@h4}EW$zQkAGY1;$Q#& zA9%sSzwJQt1Lo!*%>1pO6@mQQT9<&b;#!|_~+A9Yb7#K=88*8tCCPPp=FdeSXUx)H< zYh4a;L8t2#sB>BllND@Q{v?%uFc2M%~g-CZEe{mWt<+{V8+jU1bXxeRu2WUXL^Z1LyV3}hm*$G_k zL-G-1PQaiPGzjIoqniPouR1Slf*KL9Vy!`vfuTF}0caSi*F*rnNzY19Owv5W2&&59 z?qmkJrgtjH3m!1ngA1zl5}-PcA3E{V3M)c2!Ro=00}2$-(VSS*vJ)dH!cfxk7LVS! zpd{?kcohL;kI3=BTKOF<##*?0sLVzBUQKFop?Sfv7>zyh^U zLqP-P6QC9LHjrbxOD8~8BKjn~;^YO;XYgnSBnBZa0Q&=)s^9a2U4cFtZvb)yJZu(V zhRuI528QEckAtQRL7iYwYpEAGaH_;n0;isxfdNvyce=iLZ3L=B>vT}^0G`U}Mj^;7 zaGC?vUWj^Grx09fgG}S^Oa{53JM@M}Z!e^}1Lsd@gY8ohDDgqoM_gDBG7j9P1Et$Z z7eVD?2|wKE<1gw@f#*J94YYv!<1eBg|Np-mt%afo3S3y2 z9DflAD(hhB{`d<4h%Bgt13BV0XfUa_72HnfJpLjA!i70N9%37)6$(4Q->t#8^RM&^9_aTsn`xn2g%O+9nJR5LiJ~3Xz35%>m*T znA7&MFfhQD#lhTHe;&SO1s<%?Cqd0=a6jMy$oY*&K<(^k#~8>I2xx*9w6C#qZw|O; zxfL|C+zjThlyL0^%|5;a4JLW?y1oVZc@4;nZb+{dlzO{4JbFXlf@jMi^#C^y$P*C7 z@n=A>CMT|AQwa!4pg8U$}u(YY^`zfE)u^F_d~96bqnrNMQfDo&Nv- zwGKon*xjZe0e*-8c$I_*#AxtzJqLshw&u?XkU`++6a<+GUkl>V{6?U&_D^T&kLKDx zjHT9%wLkvMuXKP0_?I~ouscojfrDY*ZKDgs?Z19B2b(Tl_X!5NniyiNd= zKbRR9Uh~3umdD{%!gRo-s+hs62_}G+ZlcSX;gLJ@A8aJ1KIlsBX}I)4`%BY~gZh=O zKVU1D+aOLvH4p0bZqN#=AK=xaAG*P-LVrLOhkgK0pu7I)1g#iy{m>0sxDVoi7JYu` z1})SF@j$vibO(TzaQ^57Qy)Bf10=v90Cp|7j@u2IX6ttSaq=*#8$gRNpeqU=9mC=0 z&f_mmu;UKL7Cdq|!?E-Di%myx+b6(-+diCTLc<<3gEIk}KRb`V@Z!a7E*l;>Ja&Q? zl%|1t(vYwOFH4_x6t~}&;jt$Pj~pI1aDXyr8wZNt6u_&`po;)svw|1CftCS6);hWV z@L)XT(d+shT%uin!6yLi5tLp7r5wnx3VM!VIE>p@8lbiYCzpxNQaS39%4=4t3 z$w3n|Xi1RfA&-N zj$x4H2F-6kQG3FpvlQMt(g#)imaZqjBSicycFYV6FE)Y8O#YVJ3=9k}Ks(!;!Sksg zcY`YePLQ6?!{BwKoyT8%0kvZw-NZ z+AZXvdC}wGPiBu@NYQo?)E)*aSWkF#1_-=V2ldxMR(BqM z(F027AU{tAtpm-3_~!TvNj~V1vMbmpH6Y6n;W<+XBnw(v3J#4^f*|fuSigI!AOnL> z=O>>|aI<5Q5Qz5(8vN&l7#LnIhXm{i4{$&GfKNAQ!9UoZf1sSuc?g>iJbQUS%a0F$ zL+}{BMRW*ZpS!i4n!#rA=Nf0eRm#zktKws#3Qlfm=1B`4-ZJm z0rKS!50sMQ9H<44QF4I1hO52p_xGLqKbDp$*AkkLEWPps5DL3i()2 zUIn*ePwxXYXb(ct#3686y8nXh!2kaq&9xU8O8Gr{Suea612>uh+$VkN>VWjW}Er5ln274b=7aV-V>cMyc+7NCA7xJK`|1UgxK@%w8R$MGJ zd=RZ0P*v~(ywbZjfCEXTF{(<;5bX2?)gCuIxipyEOk zRG`4}BT6WO8^V|&2wQ&-&aco_;y*lkLw|Vmx_*FqofT9UcDsH+ge#=Y0*N7Te7b={ z1Z2k#k4^zteglQ820Ud#(}^ZXDQKlRWZvom)Dm;BFsRxAr(03*LIYP&^uB-=s4n0h zG-%`04X7R`kRIeN8YI5qeq!(djYNLG1*#u9UD3Uz2PsiLz*}>u+e~0dp!4{PGEe|u zI=KZR3|gxVc5@dGFlS3rZR2Ow<$$oPyc*zpjyIz;COk8YHJ5Bm52 zKiqYYFb8FSa9sU>nr?=xZ0bDzf)A9>K{`NXFfMhdWf({`s1g8WDsUq*0pd(>+brZW zO34KYZP4D2&f_npfYf!mf*NfvKzSq%!UqNV2c(=gO@x5~k&d7ygo2_O<{?-qhoK6T z7*KL?E69p&P_GS?9YBc@fQtXC7|x!1CXN%!CVH=H1yO19*C3!$|+!?#p1DJ^(qL!*}i8-vQ+mI zIBGxvfl?259)BSQQU)z+;Vp7l*@A2aw)Q2j%q5UQL5)aIISVTNp)SRrLQzT#Jz-E51UU#LrJ$&hL9UI_ zH{cm_iz1Jn)yw|R2G*#KPZe(-4i!Cz+Y z(d!E;gl|CR+#x-%)?J`hAad3Dc?+mL0`6nOYSRz9{{Me13SO)Nsw|;-uxrcz{}aHS z0`R&Nu%)1#8W45IU%c81G8z<0pq-f)zyl`dUwi?H!uGa-ns4CBAFTQ2X3!`pWR1&5 zLQs7W<%a3Mms1W1QjV69-Xx-JUUAkcyxx&@aT43;n6Fq_dtvRzLXAJPeRrjtpGI= zK`j}OGEh$nGA6JBR5`8#4T5&M!uF0VfHpArMZvRYptk=Ca413A>uwNXP^6y#??CDX z?T0!3Vm~PJg7S3e1#Ep=NF(=zM=uX(N9PK}u*WG-E9tl^XaxXhYy<3~I*=G>>cXz7@;dXx`PBfv_l_wbYdH->Gpj9ZI5pRwbmedPC&*ZKml_A)Ek8a5SA(h6yKmN z$)G&A0z5PUI#UP~?3wGqov{N9rN$oJ_ydg*svDe-EJYX?z{6(Xpb7@L31kVl<8lJ( zQg4tb#HFDA8%!8<65fl6pc0_-@Qah6tP1I*$ZZ1^3h;g#G@n7!JtnWS^aFG-4xAQo z*Ctz#G6l$(&e9J^xf4W+aV9AHA##uhTop$9 zG9OhXD6gURvtbn>INHFGVgOG4po$LCu-^loNClOSFFd-zBa-03A0vp#FF>br9Dk9% z78LBRpx)*Mk8a-=(8%-p{r~@q*PB4a>){v5;Mf9Ji4`CwqU{QIKT0dQ7&Q0;_9dt& z0y!Pj5qkmNZ`~OR8Xf>Qh(Wa(qz?~nw4Vk$A2eEU1C&ug1D@w!903WU+lQY?emw{H0W0v60A-d5^ zaPWvmrz=JYE(i*GL7vLY|)DDh2Yhupcz?k(ftFoKm()bJ`Zu& z0gq6TRr33eyQG+|Y_{7LQ#>ou`W)h@$%n*fdvAd5x>+#_%t! z)C~}L2|9NURAz5o2`jU8U}ZK=ZQyc2To}2qZUMOhoG3t}Ot4b91|$mc4{~9x$i~3% z;>kKlF(9)6M1zZgLJ$+2LoiF<&f_o6Adk6%3SCfpj)pC!bS(Cvl*33_1KjL{wU}Zc z8ezp0Y8M_dwDrQH+X38|w*jAy(0TlYFF1`N=TBIv=?Ibm=TGnq6R2JP0#q}<1|=|X znFmSVpphnU@#6{704{!BfOp%0M?K;|f*?~sWdSIyfdd-kMx;jn2M<`E3Dm4djRjB( z6BOd0)*+<9bQ_W9L1w@zK-fS6NCS8%^Z1LKpn)!sMvwsz%@^P$8>m!8t%XoK1j|91 z!Hqq{ATa2-OHio?_7FHdE(Q4sboR^r7r#MF@Ss1aMRo(?rx&34PjH(ZJdqAgaG*nZ zJ-`74QB(>lIl$wgui-{GaZG>=t3W~nn(l~72iH-<2h=J+(T84-p9Ncrcl753SP8su zy%Wr30L3zRoD|8Wpil)>kdRYmz#c#TVmoM8GpMoL>v{p+nBE882MuZ~fYvI43VCpV zW($L71x;byqH3^SQ2B?@+6>kTs$DODVgpjU=7Jpss{Fy}^*_V_aBJuWbXFDCLF|9z2512!J`*cksg0B3EcPtjZlN?d+0eUoyT9~Kmr;PLy&3+(9x}@(*MO5yX5@n;j`{XM<*zK!rAVQVx-~n;_$_V9%jvD3A@E z$6u&|*7Jh$F-p@pTmqZ~K^j4s09%Xn)_J5B=|Zq6prQcOm|}pQxwQg3nuau{unk<~ zVT>tggH~#Hf|n0~nqsh-k}!xcs9r%CQz!zhvIRNW71Xn4g;YW(JQzVm=?Z9Xi4zov zXpKJ$!vT02E#PDYYOsJx3`nCzRsv(78IsvRqiwLsMLtjQDp4o|f3;s|U5N&{02k+e}&K{5dHI4Q^z&|F6lhx)A{@b(|?eao}EWsTfUWWdvx9d2^L)i z9gG2PI=@>CN}Cw#KtMqUjs|QsAt)r#+OLr2%11F!mmAb92PeLJptA%u4}%(Opfw55 zBTYcZP(#+~T$%$8H?Z1GAhqBD1u%CpmWgx|t zt}lwfXZwM2Tn0#;wd;#w(1Kd9nlLd2hS#7aIWHhhFHlMa`2#scfCFSYc)1U}sQ^0W z95mnx@dm~)6~r)bY@sAfaLWfY5RaTsG@fD<*y2Pk%eaxEzLLUOJ>q=^Mp1l)6U93Zp)W(ksP=Y&4n6~y z-RL7J>p(JK6XDH9ge$S7A0+1>DtEB2L1*Maax=6xm@5kMG*|B<2kakEio@2@ zE;xeJ(hddb0T1YanvghK+TS3`&}Z*hK#3KzrELHa#%O7O1y}x{g6#sNT?%SqqqVf} zgVdn4wAn!Ck|Ns6<{;xShI`*ZoCqH7g}1cNfKL5H===*(gVEC70useGQ-|8p_5zs& zY2RXw?&4}`LkFy&$pn2>`9X(M$Wf6)(d3usXjc0!k&?&vgHDbooX0WhVNUjUCMf)BP{0iFJYbhaTQnbxik_?uQh7Q2Hxu)nW>ItJj5H|Wq8*s&<8 zpqd6U=L69W$y6siEL|V)H$zUzbOjq=1Mazl7QTb*11OQ5+OG#q;Tg)%sB zLl<~-`$D}B9*++fW?*<(10M7MEi-W40Pe(tFFpVVPZL-h#N|!kpaMl2)a9ihlfVa* zJHfl+0T5SdBhSf$gus4xcnNM_K)e$HS~v`z#7YDi403Jh0mPPNc~FRg%N($gNPT$F zQhJa-Hb9~g?2mrXrhqNrcmlQ5!D}@x?gM2^u=H1uVX)y7(C`kVIUWJ(w?hi?3(&p` z*qt*#Eoem9c@V?}mAa6M0z4~y6V#(g1BDK(3h6xlA_1fjG?EX>ui(&`0aB&{u?AH9 zfsMC(fi)PSK)OM}5c&cf4B#CEkU3rGcu?o@7k{6F(jTZISpl6ug-l$6z4;C#2@W&R zq6_ebkQE+~Ei#?wJi0-GNE>4AfrB07C(!B$P$LsGegdA<0Z+bx+V6-ty4R5)uZZ-4 z3pubiia@r3dLX_apIw0V5VAm`5I2BYyfERym;e92C<7Idorhnn0~M~2r4h_iLCc_; zk0iji_F}dVK%t4!3vq%>Z9(b=lG-jt5S;`H7*~iYGR${@=pyLe2^lq6mMZ7IMCz!gv8vA(tk=!0-~S zkbAQeUdRc6e2-bk6@v~f#Zt&^ehl&{s6_)Vgztd3*b2Euh_RqN4$k(~AcdHPoF8am z3{qJb@)&C{l!A1Ff&saZlS8vY0;C93vVaOF@RS%*A;$@l1cw=@JR?-d{R9U)$QCoDz51jM zaA1Sg`hnCUwAzEY7`=KYaB~H{S1$xojMA&W2TD~az4|kJM2ZXIP3jy_B(YA$x^C@iB;YkO!_2aKWw}ODXXrZ7u0iAdP zqMKcRfEJd5E=BoJdUpbR))CUrN3t2R|HBES$J+G+|D*%_+YWfZ4#Hr45#I`SIk?vt z+=1B#1XZP-$6xea17*nLFZd9FiU^}0ko6fKK*P$Ghl<%irvrkArhi}?c7(J>kY_l4 z^TJ{ZQbB{l4$%t&%`k$RQ=P|OOl3qFaBKs$S;0vjoY%_1+~eRGsm_Do~UfTA=MCJ0UIiUHbSgGq20{@9}|a+^FSrp!A(bmB*?c&@dZl6 zkRXCK3K5}$ngAgYI}6l20kw6otx$ywxc-0^eGlNljBF72;6`xzf^3jD{^Bj@aFx#E zFFu24sH62jKI#nx4KN@Z*K(lrASmsDvj-?aAQ#JoJjRU(Kaf^veuKvnA?-iG-hs3; zVc`!=ts6kD?L7V>4b=vaETsJb-oXhDF|<8RaN8kK26hu9Hjoo+9Nb(233fhwA2)cF z*95S;KqIf<1Pf^$pe5KUkQ!KmMfDxnHINkhYBxB=!sOAy3VB!wR=Tvc;4fW@LH2eY ze^Cjdn_Yi^2E))x7f`*0Wr*U~esEoRdnc%j0QnAFA=!b3IUviqq?$l=IJnS!c!4~jMUPT2SxPr~bseo2S zW6Z`a0VzhQ9ScArD79l8FJ|os?Tn$X5&I1qzypuBf^rSWvls(L;3b{l-TB~T1G-5W zRJL~B0PrH&PBksZv!T2cm#H2M+=G zif7Pd&I1q7zG+-LVDCVNLtr~#K`8~CZy6w26Ki$^Z6l={vIRfl7I&=rjekl!#a<@NChcF7#9ZSg1U;} zAvn-D+xZv%AVI=L?F3~Ygi))&Tr{KdP>e!LhYye=o#84d?Sz811;Up6%;teN3PJwC zS{BU(SpaqfxO`za`2Rn2;tFd^eMb$*7RaK4E1(_F2(3rKT#T0b4Dgkf=q>dbAjK$U zkqF2kC}j~74`x{e@(0eS23Pc82Z5`lC!l)26H8PVfDT9i#}A}Lz-ViN+Ag5_2|WBM zS_i6daI1u0k9hC_bQwRas=8eZ(h1HuNJSf>A)Enm;EOyE-R$}Uw2B(3s)A}HqE0L# zV37vM0??cbh{miF!4^TY6sXPX0q-hc1~)Vt#BstFlz@ZUAIwEdySL%N47LCg%8>Rj z*c8x-Mv!U0pP=)KLEH1eg$_8>Ik@3z7nl-t18LymU+zZX>bgRTd>4{CLSrs?m$cm(oEuj_r#=%*Vb2Y|O4 zm0SY#s=;T)Ko6k-sd#n;Bnn#W0Jd-A6;Ll4blVK{@`R5d(?AQ$JDoUSm)(Jleq9Z+ z8=Mb6)PtCyHVD|F#rr{Au*@}(O!E;9@cA&%6;$wcFsO# z1<9he8zFTtr2K{(0;+zYv%ScT#ochju$A_{S%OP5xMdzn2Xj}JO>hl z74cyAB4rqGlI%SGqHZ&|t%xEG@>1vV7ysdI1ND9p(^zmnLDe1KfG`3SBJk=H9t5D= z_QGRFY{^Ae@z@g3eW%b8_4tb|AV*?Wt1_UYageH2kO_#i3bl9=NH1o;Rmx)r_?WR> zFPJ>6T|X4FzDTe5|Nq6LGEgZC+S81!uYLSQQ6=0Ppd5-?utPS^f!27wcx?q)@qYZp zLvZB+N>AYYdI`)0<<|q?RDRE+^ZX0&neol8HzGWmU0;AY`?! zWIzr&Q~(VRlw5@r7?3W16UZd2c_I`7SfP0$xb*-37j?y8?|cA7Khl1%<1bRn;F$py zPY`=S5sn(JShL0>(1b9ee7X$gqGgTOp!%)Z^@af`Yk;b0>{$cd+mNmWv0?|pu`VK6EL4Zcd5Yo`J|NB_u+;SD6hp)%WDp>W8g)_PmtF^ttim3 z2(ZzpPar`;PUH?2hzBb45i1zCfRrQ0CLWvG{=phI;NDd^xFUfk z7SN4ykO50j36uvi7glP4!)_8tIkHXg2m}W^O8+~S6S)P5l9gN_Bcv}re!z$d&{8!- zTscBE6#u|cETI@0zY>u@QNkVWMrdyRwhFEgPe8@~MF}WTkV_Cz!p4CdC9Yse{bA~1=lfVx0&jYt~RU@lq(6a{i&v+E57Pz3}U(!^c?q17uQ zUyOs3pbD}KpEN>+9(E(57~i4p(-lBfZ`sMl3{}o z?=HYY2eU$kHFV5j`zqT&W+B2t3v3*C5lk&e23%$xf8hXPgBz*6;Bik_>U_%v+9+DO z3DF43$Ogp~sN4tbYyg)*T4(?NfAOIJSkpIIY%#nBYbbq~!_=OGu_eo{uHr ztZa{7@E%{#46XpQ5%x3_cLA3^;r$ZYj7(2?_UXnSYO7J>TN;1XyP zD0Z8V2!Q*@pxJ6@=?Jn7lybqf`+8PT7J$SxsBne1cJb$dNnmGy76X7xg6)j&0*ONN zz(nxLTgZ8!^b$M|K(iK(BCQ5w3})kcCu9r_b|xCgweVH})If|f%?D%@F=g7<%>Vyi zC}cnqC9F&n$VRvr#X8J9jI~ky7MyY6?Sgw?E?Swkj|Fsf51}#*WFdNu1a5j%f#x3( zMMXB43$g-fBz6-Vfv@Ppkx;M!=n>)9s<-x@KM7cyC73&h;~f?=&)08T%eUocmmZO(;3i8J{l~8l;5Fs zJ2NgXf<}Okzpw)(A&ffD3?vH8@25cL`GQn{1~b7`jQ>4w?t$0^3k|35=ysmQ9bfbKnK{&n)n!N3?<)J)BUAahqSHh38Cg{~lC+BX2Qz0l8HJn%Gb*5G60& zG=q+i0mmD1J@FrOI}9}4oO}-o7vy>(>oGXpfLwv6XK@OA_a10`8C(v2`2aEoUerGQ z018dmLFunSjbZR$H>?$K93+C$vp~yS@P-9wMiJCL03G57npXlZ@r4~xeIHz5fP`Id zcrado7k+4I7^CQU$OJE7A&q;aiVH*We^L}1FvCm+HNK(!BA0U)gzB)*LbX`6zU-XQi28YY5@ z541KaNTCJz?uh0?u#M9kiQp6qb`6eTKL*(k4cdl?v~ocYRCz*HRTzP;zJTo41*LpM z9|~+LO3h2zPRQs4uwy}%;B+f^59H11uq*}c8KfcHnuTyHs_USo`!#rs8SZX1!N#v{>M{jiGByy3}B~s9)H0GUXTngw7!2sF0{lxvdE?TNYR<#|JMBwEiq$zou{%cslgeS_9zM@1~ zFu0im4_TM5$Whh<+H8bU&%}e2BS#q`UxP9r9(!MXL9urZXx~2~zw|O7kDNgyk(0`E zP*($HFF22a!V%J>4jXoGe+A!CH#Df{Cu`V+wSq~(By zUO=1N!Pl2UE3o1?P{=}>v*Jmh+jjpn*ZyIs(*uE>p zZCKz`;Iria|Ch%=sRF9|Bj|_@@Ps;O=P>Aq;1wRdz6(5hL$`SJmM-w<2HWnq0~8OS z@$es>;G2MEfD}RR^aBr|6~}_YC$<56izw(OWzg{(piLaTt~d6E<8&{L>G#9N=%22bCZbJeuD$ zM8hsx^gutP9JDm3^Z1L)bN>JDJOuWh=7mnzAIDw)fUZ?~Eel$@+#UL(BlNpRZ|HaE zxYvIM(B<`i7`t8nSiAnHxeZbT3YFE1K)wg<`2mIE0}s&I(Y?M8AfvkA)0a*lf^e$` zI0$ce^!h$P4nl(%aMcdZouK@VI_wIaC6S#CDmKCU=)m>*Z*UVGykZG-%R4McIX8lo zfyxxv7^WIHU=O1m#QqSh9a-H!um#ZC26nlSB{-}>W8h%dq17DV1?%@fO28=}wkY`) zsKkMe_h9;`H}r%D__`EuZ`0=pDC_aJ^npx)dNpDe$PXA^Qv@q50bK|N4go{3GSCsa zpsWEqEYs`=c;7R4)a@kb1ZD6NPOt_Bum;dcZ(t|D0!ZsRNQVeBXdn?9-M>Jg14<}Z zDq2tl0P+=bsr&+3pkbaz2`YWTtzuBjfp-GIM%~gNJ_cz4-FODNnhLyi5pf=+8At`9 z@^G993KmcVA)QAV1yTbo#?F8$NE|MP7JEn?7D$nX{m_C#kj4Ty&Ov^~b{0W$3-Vb6 zpw$Yn%~Rcwya3)_)4o|qThXgHyE1R!g=9(aIe z8DN6}b=W!smm)w#I9g`_bP42f*FT`k^_p|R#Xh70e&NA*0Te>6zZ+bCgK7h~@FD(f zuD?5&8ft$tlyZPt2&KnfGeWmAfwGW?M`tZ$IbUb!j!xe#kc+pDzhDamEk<+&O-h1S z%S{ad@sGb)AHu+(%Fe*g(CK=ox%LiY30rgR9j4Os=GrX`rHLNhv2Y#VLKzr(d5(f= zFUa+Cw;*Y5r!^Bpr|TO~JH?|{)YhAc!J~7+4^Tx0GKj~cmvx&FNbJySR>)F0@WRFk z42%p6uj7#|n2N)KFGk1~q&R{ML$x3jmj%tWZx|}o9Kol=?*zGgS3d&-!@gDq28R7? zpqm#ZEZG^rvaeaempLN31(3u9ifqW-3+U`J$S^)Q4Q~qug&(N21>pveZ#-HLlz2kg zb~C_yXgy;c%)sE-2^xz6>kNQ|Joun>(Dh#3rQmwSwez88Cuq{;|K*oWpkxQt{Wpk# zq4husXqDOvkM0?ufQ8f`$6v5vH_5Z}Cd8x{59Ts3yar8~q3b*YcKva5Hz0Ic&1YbM z1W5A{1Kf=qqyTvq$iUz+!vi!i19kc2Ab1cR0M8AxgH3!L>;b*@6x__#bUpAIa_o6` z2h?+*qv|h!`_qiqJi2R7K$zD(IuHH72-d?0n%{T*;bG}|p!f*bP)G|GlmSp%HAoI* zK{y8-4{w4%x0*kJMi|s;u*^EJN^t1-^twI)U&02BC6DGe9KpVw2cZG%@fS2bb3~v! z6lBf~$eiSoAXwPJD@g*0DH9ZSkZKL=fIx)Pe7YAPJMDb{0|U6K2CHMm?NG-MBxj0j z#Ny1qfiP$Grhb4&F#(tE4}ixh*agc2;em+eQdbn0MuUBbHAqoh8oLdPOM~&a6m&NY zyu9=11nmU}&0-&aA&PM6iG2(TAZH(cp%@0rO#ChKph_4#v3~r;6OcnevF!Q+;RSFR z+2jumY%p&I*g#}2Y=B;=umi;l6Sp9H;RGa2ObCDm_Dg3Zt24n?gGyL*tJzVkmIYf4 zYJ$G-=&gN#WUXiCPtVR1pbJC5Wh(;%1NeGzUbq`ThC|)J12P3%*fB6LeDGj&-QWS^ z33xEN9zfykfUhUv_po-|z~AHnYVb7IZeS>>ht(;oK#p|11Ij^YA?M+T9CC5~pwNdn zzuR?#N3RXI7V+r?=>=a(0S`g2S2}-z`aGVSVc`g}0qO@2e`q**kdSDZ!0rU+P>{jD zeL>Cv726;TFS-Lj{_yBVDZ01$!Pbm{Q~Ojf_W*ja8SK$p`y|}A^C8IeyU-N;+7D_T za`sIF8vw5gT)|xY<{g7YrRx)L?+04Q*!y7%2#;RYRSt5n1-8Ace~~!>jz}_#kvZRx zIi5~P%H|+*-Xn9IoRO4GMdrLf=2*KRDeFV#JVfT0xFRWQN9No@=IFX1DQiIHTt?=o zxx@!D*|e!FnIK`o-P+-=w@N^nBmbYx*uc*#59!2{ftB z$R@h~{|_;>9%AbMQhQKzLING)ELgC5bo;^vGNPa^JKg|_bw&ngvGURiVhD2`=v-Q8 z%xSw`X#T+ti(d(d3WgE|P;`I?4zZa3%MI*vsJAQ;F46`azYSXX&;^Pr&|y)@mpm9x zf#$oezj$oU$k2KKW)t{kux{56=x&?_o`-b(&<%Eb>wywzsDW}t>w!{es1?9ffl?nv zKz#6MJP6A9(3o0!02(Er`|zOtwsgHv$BS@zr|Sh|A9sM$X{^IFJh$={KM#RS|NcKhe6_i*$bc0KP)&nJ& z>9LXtDY1O;=qAFM$3R-OOF%Z@!X-FQbh?5D%h}7J5nd0nJNFN0 z_#Tq%N=2G$|M0`46Clz8-L8KQzToIQ1U8eY^CHB$4j(29un1#!=pST3@EGn(Wq9)q z)OdglZmn_!*D2s4*`vFm0TffM2TF87X~Ls>0+JEY~F75*7<6cn* zL(mujI5l721x}woJdQV9fYoYXD?tPBKf1wHX6u0xP-g!D3n0))B1laM=r)xf$ob%h zM{ft%4saJ2Y(eQBhy{rJ3R=56`EX5FR+*z+sBTNTodt46oHO6+&7Y z9^JmM1t#+x!TII~y4|3X98`mYgA>v<_Go?+fIKvW+*Nwz1dfXj$6fzG+W?^c`i@d| zkLKD9;^kc6Ii#0upk&?cdIC~EvF{URU|@L7x=#X}7DGX!rl7|AF3?yOsQom{65Q45 zQ-f&x&<$=!c+7wtoLB@|B+(0rvCc!Fg6G~ou#VR6;OKYV!2!CKi^HQicLOLBK|HxPg>l0W6qUAhB&i9F*u576q7 z-ksp6>^%5F;S9*;61SJ&sqo{jH=u@X@X!Wbi~}~|h6f|egc}|hCOp^=GJ(I<4&-)_ z)u8?qD9^*w%K_+A3^>u;ya7%$8=4PDbh`d|$pg^^sy#u86y~P~P-lEV_0t2$tqP$J z5H5Ov=_0oaAQzQ5y<86pF!)udt{^{w?lAz}1^xnI!V63jjE{m$C@ln6VUXs`2M=%~ z8R`{qt;PrTO6U#`kgp+Evz-7f&_-5M`UX^+mxy|Fhk_2Hgk5Q$`InL5wJ=Cyr|X~B zToYciPk7BT;WZ=ZxXcfbGz|*@L@Tu0^$+0`E#Ux8(V$gjKVVs}6q=5gLlWc&xR1^4z({Q3VMcHk$xn1C4pUY^oiyMuwhWhE%;nrja*l!8~P!^;P- zM|VKm6fAo{A<5rT%*en1$xKQRN5B&GMo=7qmZm@xZ|i}QFb_mJ{DGPPKu4*8q7O4k z{_sE~YVVT}OaFnIbfA3waxKWM$6aB`3X~FXrzK>gnD#=9+6*@;31k$igM&N}i44ub zxYHZ5EmO{dY$*wZgb+Ay9(Vl!O#vXset;(Y4~S&@0g`Nyjj1^VHU=8opiy5?3VXQ$ z62y=YFHM4!uJGnHIDA0MCJ^E%Mb!@vl%nd_MX(+0V5hzY?E{9E!64Uydq1z8k+RJX z%xrW03b+LLaU9&l2Tx#kyP_KcP3XO>TP(Y96To~>Y$IAQkgx(RfB?0D5GuMG zen2&wLkyb$=7Th|f|})^4j#1E?F()T^n!=-!OTvuT5zTH+Mv1i3PTArfI&CUfNF4% zJ3t`}Hu*T%CJ+~_0}@tPhA%sP;o~igFmE>3o`5tuF2EZd8$r$nbzk{gl0i&x4S)Ov zgDq&i#lctdj2ABc=yZM3TziC}#J}71iAVAUFbV3#L+1uBK-Y4#JqHzcsNK!&pzh{H zcz1Jw0<@9!(h_3X3y0!k(?JTOuLsCx}+MkrZ> zQYL6N`UGV1o57=#(W5hv103ld$g>lmu^ybG|7=zubD(W@L<$Ej2LcV_fDEei0K5mW8YB&x4etiW8K}N?0|lH%_Y6=R!rYz)wi7g^_`(O8FTk2Q zK8CLr$^`U|Ce8b#vs7~%x(!CKn3$;!3KejiGAVGy91&d+$aIh965sKdq8b3 zkIq9c{=J2kOrVT`F{$Oz%i3j%RC?Tnb3lOyo;&O;J<=I^z@yU_RHK8d!qXPupnK3< zdqkDL{Q@(nBX~?){ zyaCh%;(-L~gX7>aS%f|oP&*nfC%_09ssbl~mu`^G{ey0>dAs--7#K7`E7o?vMx|7l zK^@Tp@Q$b`*!>4Ql0id)VEwMp~!qyR_!ockr%iI}-y#T669@ zP+t|SmCqa$f2CUd+e6=hLaiGdGM0yGp?%vha6WQ<01;2qbbZIa-Su4>s3Qxvo&ni< zkP|y^b$}8&*n-FANbU!_ZF}fDur$=nm!CoXg9I)p9YEr;3Sv?71IE?^r992G z2bjUy1Yp{tAlks*cxDO;rxH-daR&p;rQos@)Gh<}+@R?Qlz2eLz9S<1ff*L(2bmy6 zI4Ctj-1H2R?!a~yLF@z#GCk-9r%^I?wIGRXRF*B6jt2P6P?WC^Gx_5!thNWKLt zqYr`o14_y#5Sic22%HvPK#DAoN#KA&4Iyx8>Cstwz@syC2Xc3MwlOq_K!rUk*yW(( z2SI7j+I2^%7^tRzWM9z0-vJH}OV(B^6uBzuFC8?!MuiG$RG`I;c7g10Xm@Bm-@ z1{P%miS`D7?%>%0I(r4YYwQKY{N@839y2^NK}U1DVhaJV0SCa&JqGQYJpj!mcHRP2 zy|bFY_CsBE0hGExqc9EN(h!lGCV};XLhu1N1i`(+B2d&c!~5{isa8WHkcs>)pcXPH z6g;{cKoJM3KS6_KFFd+;fccRA7-;Pis1kYroot`l1J*tD0BG?fxW@)p0dlTH8&tXl zG$aph(96Kx3`$Jkb_%H4blm`1%LTjta>hhh-URD{W_f5Bf+yWJFkWar!13}7G=-7o z?&E!6hfTrZ?#Ufc=@w9@4;;cU*Y<)JFTtGoaRS(xC5E7&gG4aIOQ1jkdkMVW5gh)^ zcfn0i(DA$*UQ0mZ7S`|n_?8jU4Mk1R5gwhjJ3Kl|H+Xc0uJGve1s$or0~E5S48RE* zG`{)31D2pc)#n5BzO^pAHU=dUXy1AP-cGAQJY$dQga$Kod4- zoE%hQ9&Z4(GeDW$quX`COUU*TP(=$8Zan}l>lT2V2~H%=Am?<0kI-KMDNDfNUey3D zk`}yF2FruW>*Fu1^g;H4hjNkY4X`<&adMFD-C)~W50r*Nc%Y&X)|x?hNd%Xd-qnGu zfO%;dB;7wi@e(*p*6V@Qfu`_5Be>w)2JPrQK;%A9jDZ$6fPDtded3)Uo&3<;hoSyoBKj_g1KM%YhPT z+Cbzb&=4hTaQ0g>&%L z%}Tl;XS-spn=e7~%ms#$3P^H2{$jBXD6l}y1w=h9sE56tF5qTj03Ef3Q2AUJyUJCd z8XeSUDg}+HgX(5bw;$|zkZ6fJ%=&{m3=EJk2RCLc!Hx%2BS;nTUM+A%3|1fkQUE%- zrn3oTB3g|Mn_c(lEWO}?wpNb|WE0ZDGZql1<%f*b~$E&K*bwcr6g zX!-CIBmf-^D9{E4S*ff?bL|2CGSF^|1I-WELG>3@G00WTwQm@}wLF^K9Ed>&Ks5?@ z@*g%{utEf6Y6;5p^diuB!7BK8L4g2lydVr@3aF7)Y6lC+TUucKN+63%Kn?u^9?b{X zJ(?f<0N*Rz?Ro%IdC7t_g4i!OUJ8Pn_-`O$Qo7eLNtQsM!?pKL##K0*on*f3>52C zuR~2S!LMtT0}L2j`$% zsV2l7kVPM$;StnDA8g@>UiGgqM6deCaq#dQI75L)48MR%R#5H+rBTSDk5G`=-Jw4^ zn_fVwA#fO9hl+Z1Hm!gN|2W?8hKYdzG5YubIsye6U_0LM1j+*?YKE6tko5DTdjix@ z_`(lREdolBpx)XAepqkK3Z@>k4wVhnf!6`bL8L3%3KKr0_$df1TlfSd-=^B&^8 zAKhT*TDo2+1*LMZr|zkP(>}CY1=@K88XtqttZjgJ6t)Z_R}I!j1#gP$cEx67H`qwn z+MqHV=7FnwS(tgR{UPH6pm{0C;`piR;P?d%siF*Tb^HGC=-mh&Z|e4a;nBMj%mg2? z{9@@5(3Bc@P#H3uiLbObfmr|!Oi)J{(GvrY^n-$zzeOD!q=<4`Ujuu&-Ny>;iS?qa zF=oJ_{4g&}Ib!@4;U7oPusefCFRz{~sKa)`qnCFLs9xwi_Tte&P=vusTTt5y+)FD3 z&BwmzZUCib=zJ__Tn?O2L3=Ymo-6?`se>c}k7Urm>x=FNP|5-~gFzc^c7OvD+}k+z zBJc>Pm}i6y4$Ookq8G=(c7QSss2vT-O(5RuG7uj!G}wBe#2CT@B|;+XdU_Z-WsByb z?gp?A5X)^|D}!q^Bv*iwIHDzvZKC$L>llRKZCL+#ZL8SSc4c*}VJ>Itrs3 z)NBO}6N1MlKrOA8k3r&~p%MNTen`vv07I!9xBY(<%FYgYn?@rQ26PRR|7 z7eH06>xWJOP{)(u<#o^yU?^x+DcJF#g!BW_BZQ6CxGI6RPu>A_ok6xTy6yng_zb0> zUMgsC2b#=&fE@?*?d!uJ-xNwcxouSe&yngIm;Kqd=>qKxu^m?BEhs&>T9bu-wr6fZwAN zJXW*;bYv}m%QaAb05^0%L-3&awF{6PWJn%_g$F;_Z~U#GVI7DIC<Y<1eC=KyEJq zRl`tYK+QNb$AgS|VGWs5wu6}A4>5y)o{1+wro;Ry4b=mV(F>Y~x?SHeUI4Y>K-15l z`F==TU0^6thKzNA$FYAvXJ&F0z$pWs9=cuMygUgmAVE0>l(s>M4?4UL&TDmwAlpkE zKylaI08#--?GHS9H-K{nD9^xR33NR6MbIdG@DY%%QZI-<(@|_7M*rO7VExcM4JpE5 zE`)gY!Evx-Kv4~G8YtVg9;gFtKzYy&uDZb!m=8R9H-YnacjyC;-Y#&$g)FzQh84u% z^5HNjHGoIrK?XsM1&2V50@y9d5Nkl?A$UO|SQlg#5acqDINU-=t&479_GyqousJ<& zKNnIKgKX<|ee>E0WQ9j>2SmH;0}ob^bD?<*T;GPDh7{@0c|k#t1{53gKP_Q?NIkl`=79RxaEkGvKK&#kf_ zcRd2C^1)Sn=#ftFX#kKNvaJWe<@5_s?6n>!Q35Ya<8PS(DRv%!hhIUG-3*q8_*)u5 z!jP3}jvyvz#J3wf&MyTr+oRio12pIlT006d9v-_OP66^cor^#RT7t&@kX!>g0xX~a zyg;r5)Gq_KcRwCv1I;>EAunZa14U*vyiRptg4L;hkUI52H$&&~7kuy8KpSRnKn%#X9=mQZ!t4Sc5e@1wLdLqG2ciaWK+hyN?f{zW z10_C?%mc^(HaH-`i5z++0yvS+*wqM0N%OtnDQVF)P(lXXtmXt7zW{|FC@@PwATfkH(;8B&96%SUwLos|aeV=9=YkU@Xaa}SJAlKW^+2f?*sRXuFOsD|txEj?hN z@E*)M{-Wn7BdGawf}unW=6Mm2lfk{p7aqMH;Pr^mW}lP}|G#zx83=O`xK9Jw``CH>#YT{3xD}v!0@iEY4$=wf;l8c| z$2O>I2O4|?#S}DMDu8MZZIJOE-3&h64iepMk|x$<~J11Ok4VFD?|x*b@01O9^y?3~a7TKEMjG2ulnXk#p9VGin0gZD%zU@gSK zMZ6dr1H)@M-12_tM;jxofg3LgsT@#_`-=ma3)*=NT5X1WZru#{4I$^rA$->9`@jdZ?6|uYw7Bm9#Cy=X zZzm|=p`-BJKVgRwLEAVeMqpH%;JgPalq$)z8k8iUR!=|}(OCl+7gj&*FVh%*n0!mTMzJi z96I=e8LH5uo1xo*rPK9CbL|<13Iz~Z3hvc|>h{j#FSdxn3bN)O>?M+*(Nsu90#XSX z9DbP&t1dvNF*pdQf(FY#Soj~UymBo$j&@ZrsE_)zC zFS;E>Ann8lpsq34b)ahr!0V3f2)m38?y_uzfvpEh<3VBH-2f^HlwHrX9w-G5#z4v% zoUU#?Py$-td!sw_49uCL5L0hJf*PDaUot|(Ku!ny^M^v6+^#rKjnKG0EgX$Zr3lMopK(a^|&uQ7*BZgg3m*_04=Yx zgdpX0cYsK@>lyIrNiRABL=dqL&aN->;6``4e&}{RqYc`-_2c_3#Y3PzUA?yJ56eS! zC?obDuk1s_@V+0g7zT}af*MAk1%r5hM7ml-fUd%rhpno%i-C|^E))q@l`NWkq_wt)nkalraKf`{DKy> zf_t2xR%@s0ALLc%pz;ZECPcR@bdM2AVgS3V9`3G<-=OXSrz=pXfy$t6M1cZ6IN}C0 zH+et~8@PdJTzYgKcl-|;<^WCcz{&tnx&nEcA-p95_m(BX21tp6y#Ro0w_~UTr5TiR z{3j@xfigtsA6SZf1`z^v*bs?Fxx4lZ#GRo02C3#8!H1u``0@S!|CgY(*v++HKq>bh zNPjQu6dO=_1*P0qwjkE=7teP>x+>k^c5CYa{uWRV%mXyc1)8z3JX9jp9r^`gi|YgE z_@CW(f}z3o85YUf;40wD_Zy%sf@c&j>;l~(svY{p@=!5KUI!Qah~PZ>31+}6(3(Jy z8$eSN9UYLSHOwiGxIu;e7Y|0)2ghCifU?|ccIe@7xI^dGH<0^blP91I2a5NyFmT=M zAkuoE)EksjyBV}yzko+bZ-5tyy?`|CL6(4u=I+oN-9nJE`GE(#Z0-U(5HdFC%KiWU zYtTAJs7_Eb5OmlOXbX?)4bZrHx9b<^u=)*XRKxQb8AU3Z7SLWl(9UXtOU==53;R@PA3U6S21f@IFqA|H2N}=ch zvb-A<52%elP(@J8G{x z7gX{h%y)*H4@$z#wcsis3KUActlpNO>;uY33#~w`<1glIV`S)d{Q>LiUE<%?A^=JX z{M!zI8)IJ>N;tY*e^|PHL2d7(pjvwFJ_Q4u-7^8n&3;#W>D}#TJ@mx?fM0pUtX(ryZ(W+jlgYQP+J2eG6QB~ z2P2Xxm%%v%)NV#@4}rrTo`k^%m3EebignOHENJ9M71TWj)qK+6V#W0bI05YgH4Jp*B!`hawG``+jdeb8MBs_Eg~9Z+ukkJ{J+jgupp76Uhp8M%1| zjyn&?d9d)v18s`|MV>tPY;JHEU4#tVfsO$KMc}J{|Np;M1;tZ0cpUHpu|I%f8U3t@d{9;a?Yn{;I=1)?Ec|9c^8W|uKyisJXlfJ8 z0iFN620YY@5)*2uCPl(c0}5l-WVISsmR1|H9#1N$K@N665aN4J9oC^dohr9sj@ z=&%p)c7Et-pZ_m{_Vt2}7l9^pa1jDpX#*ZT0Iy&Lnbmpx1vlutkjxFQGn3p!5+;&*vmOQnt!kr+r4)6uw?|PHhFCgwyE>@i##?42HS58 z43I@=4EujHv1qncSKx!cc zr08oIXh3qm79tovK@51pCmUDzfL4z~3V=l~hzTEP?FOBJ0+qoqpSCfB?EleR`$M2i zZdV*AV0u{@jX_xyRI|H-S;t=-S;xo#=?TFGtznJNJ&K?s75{*%^*^u~S#?k}*U5nj zN6^$8<_NYvBdE!W*nSOPmDgL8$9u_T?@EF6_n88cYt#C>xdm7N52l- z0rJ&ruN@$tzINUr2U21Kp-j77|8yRIk#-m~xdN&LAnVljf;J+9hIC+&*bNaE;{_eF z1Pgi45$oX5cNS>d0V)7#jiHKlI~YI((1zPPeL*!ms7?m=Eb{5p8K0Cci409+@* zRf1anKe`=wpaKwYLRR`g7GOsH|NmbVw7U^hOBi|df-9#N@X84kbD)a4>>KQ$cg9lI zZr2~L1wn(0|H182P`%Raz=IYb%?Bi)mO?`WbZ8b4A{MA>x*Z}A0?>9YxGfri7C_w& z90-M=_C>ct2ATkDSpdvI-3;&>o}ohB4i5PBbUVP36|7AKUR;6Fl$;N0`G8hMLyFM& z$83;2EU!Te@_%$YaG-@0BB?aLQRu9F(^>jr7r2qs%X(cGTn2&8vSfJSv4asbEe<+} z<_80KwE72lKn?8K&=;NHomGhY1tDb~s8a@(c+t(!d9CyKi^-tV5kZUOKn@4B$-x(a z{MZ!$Dw`qAn2*2zfo9VXMnM{?pp_Hg(-eAn?ZNH>H?rpKM68^EH1;9x`O+ESfZT*f zlY{JvMg%r;)ViSQLo|^==cNTe4sk~pAd!2PSv01c#a1eypvx&s72qfawDI6)hx*+1!9^6^=SygAE0Cb zk8%d^LLzWSjzRNKCoD!_^&;pjc5ssoT%|sMEFVVk;mZHmrnNgm-*kt*@qn%Y^XX+> z_W%F?ozR}$3%ld+`(PU17%(z0bnd+aT8h@&`T<0Bw!ZlH|9^KYNUReg)Xi%9Mjo^} ztHi>io7E7+?wtxz3=Zcf|6tWILxq?}H!J@ed4}%LKae<-0gVqhd-Q^h-6aGn*L!*I zUYBQpcCPIqH2`G&R0(L!87MqJBO=hT15m~W3Bi*Jc<{xev-Ck{DCp?*|D{qM;6q8F zb9m<Ru8@ipynqaB^N-o63&=o|75fmjPQMMa6|{6`7x>DdUe>>ANHz4b z4d5CY60!(`=c5@6Uh;)7*bZ(mXxIocQ~(;~0!@X#G-5y210X(Zsb^8ZV%2kJp<=|4b+Kfq>n9)GcxjRCU! z={0D3_6K;(!`dUDK8i;#D?ik?pt-ddJJy4J3k^n;CJ@+%prxje2#dJ|4Z7DdpyCAF zYUy@;(R_jtJoNtqwdn%Ou%N4BK=lnciM{}5+#j7FAAevd0k2c+1~+UzbRrkdkU|O6 zX#fWwsO$!%Hp~l^x&t8Nk)2=~BoA4>+8F?%L444{CXjv*4dR2Q=|OxD4dR1NO$G5m zG>8vc;RoV_Xb>MX#t!0xXb>ON-30MLG>8vAjLD-j07QfM381j?=nMeSAUP5~EhGe;%26T>;_U(*%H`3^8?Fq>rQr7JyLE{6 zDoi`LdVr2Xf(C)01?4})Wu(n-1UhT~fD#vEnaT%`&SU#QneoLD zQ}*a(Em8t`@))GE(6bsjbD|gq&YTFt_Fsb;b{`V-FHo)~gWco6AtcOi z4g#Rof$(8)!2?nZ+QR`-45C4bB|tq(1gG=(i)V-6ijni+50B#x8lW%*#hk}+2hin> zpwjF`H#kfFfaFX_aC!)UrcS^L!Damai>(LhAX_BCMGT^N1Fz%*)li_6ht~S>=w`k8 z1YFOSdU*7*o(0`Y*m?ZLU(f~Jovgb+Qr)bZK~(Dj)B%2Q7#@NTBUWF9hT-cFk8ajR zkPgsr7T9So-a@8AF$+k9ervdX5sz+GN09!`<1duIqpWuK=w?+1$+R8-EdgVd2C;iZ zzx)B+SOabqto-)>KO$#9(<1BV$MT@_RiPu4FRZ|xgI0e0Q$ZVx;ibI*=)MbZgQ1&s z4@g_<0nj`u>jn_J^Z1Jupj!ZEct9_;K+*;(vYTsv2$qA^rv32f6#=cu038UPb{=Fo z3)5>~k8ajXkTIYE9B@>;w(@As{UPMh%^C<2?>zp(6Jorj>yIL6OGF$L!=O5XRrj$x z10*4dC6;tp`f;Ko)m9D4<(171ff>m!M-6FT25mgAe{gPCe^( zP*8S#fUX%d1+x#~!ZMiV*MZ=rzYs_GbVIz??Rx<BPeKrsSN8PElQV0L!{xavXA^kAofMol55aN9*_jJ%EkH=}w*9b`eN0-P63KmPmQ zdY}|EUjZ6!`vDqJ1I@th1II|`@fS*T>*#xQrRx z3hyj^0$ywi+CtrV{6*V~fB!+dGe9}20km|r2)f}2bhHvEb-{z*^+)G%(7Dm@$;*qd z#dz?13|e+{qqFo1=u`sO3A>=n2f>>I!M>^ht-1%DPXL-lgpC74f{J3O0}j>df+nrO z%fq1Y?)n03@rUkG(2>fZRZuXCA*)|M?Ai^V#L`lH+T0pvcM7oMFTA!%kG zr2aqtLhlbe;ebjv@Q^a{h)QSahfYwJ57bix4@-fXec%DP01sFp4AKa0Tfh||k2XNd zALOA4P`o3C13}s$BFF<8s0JD!+XYdKJf?%Hm;+fcsuY$sG;AzJ0$mrVVGgzm>~BzW z8Ke}{A3^aR$O2TQpq4XCsRe#h!J!FCSRS32;fZQ0s67oc6=hTy(*dBSHB4y+eg}YB z*)XLQc$LCh+fdcuW;T8e&?Yxb11OQ=*8pvI!!&>rG=2@x#y3m@D0kx50Iq@{k@~`; za{{RRL)QS21>MF0I>H*aEa*&X+_K2ccTfTcMH0f~7ohPx#4s7C!41hKprkedRP*6B z8C0@jl?C?%k*~)^u@}6h4!10*g^EoUlm@*7fkJ-t|w92L3s#MJE&($ly*?Q!qg7xxDurul-Dq|gZj64 zwS(^a03G@Z@9ly|2VO9gz$Bm@UZM)`Qq^$IVp9Qr&TtO}F7tIhpWXBnJ zJPn*Yz@;y=`0930fbQ4c%nh2P0pI2b>J@>z{Gd&SKfqUHgA8>L0AEhfe2@dWVTJEK z=-jaqF0g}Ni^4kroyT9WgSO>?JcH&BP#>Z5_=}gwozfEUk>{X!B#B?TwYl5J-JN}|{E+c5D;K!~&aGdh)1B-(L_%A3%yIo&^7F~n4y(WUX z$!P8X4g4eSdISwyXg~)4K_iI{AkV{EyPzGbA3Q+kRdybKarZ59YJqlIrNBeB-L4Pz zg+tf*Y}v`q01gzmt>CsiXha>_m6N2xzk$?h8;a7Zjfei@|qJA9xHJpg8{G*aOg<1$ZfFB{ZahKyzQ#>Ny$#*U z2pWiT0J zY-Q=>kN^L_hMa8HD|#NGAp@6&!ypZ;U{}GDwgPmZ6m<1_r|%EYQms-k&}bOw(4}tB zGz2(XUhF{b;x)c00CfU8_kzsw=-j#iG{H4>4LI5MF8KHVzfWiDjDP?CLzn)*vTE~Q zkQ_safk$^MSZ6nbhh-~BtVGtMc`wKmh7!)^y&!|&3+8h{xe}&R7_M_FNSjBez-t}2 z5O@X-p@PAq6KwWtXmU^i8Pp9H0_B>>2mk*!KVSllKS32RgA_oW!Qax)1X^tlIw*v} z1EH(-E+|`kXsrDJYJu?20}aUSGy<1mq7l4e3?99v3wgyr$0E!DZ;6C$sQ_IL((U@e zx)tO%{$9}fWw^T?I6S(if`ZGV8ytAh@$BB$ppoU0pl+}pa5(@CHIRm0P-sC_YPe$0FD)KBsPH6m4<_p=SvYL1_o$YSMW4~10Cci*pX>p85tOmtcKXv z+lpjd#m#^JAu2jsL6&ucNn4O1C3+AJc-~F(Q0JxYUXTh8i2lx#9*ig81^mbB|Nb9$ z1udRqc&!8~VnEC5SwZ$Re=q}2kbBJNn8KRy|NsAH*Ds8XwO>GoT-RMi_*MXG`1!s9 zg$jQQ$Yi7#+Z1Z@+L6ex^!TRr@h1}qw8TgDkWNZdx z%{k;Pk*K8}xE%w^vasqAJOu=vV}XsUK`K$N*KCN1fC7)s+7%w1r3*YdLuYt^FRTZd z!QTSOQJ@>@9XLFCL;ra6`fh;6XeT5ifr|MR9*`mB6<~WHBh&?N!4cvETE+;foFH-t z?We%$s6-!P8z}FAZ1!CMHC-EGx-htee=Rft`Mx1=Mne>}pj+9&jd{pozT}&rvIMjR z6ugugyvy8U23)zoF3@1DM=vV_C#WtswjVT|{Nm$8q&5tA#vU9Cg^b{e7PKiE%nygP z;J`D)Sk{JttGLeNFI1jEhRQv<9l%5BA_zWsD4hkyhwQUN44fm4<%fei{hh~OOa~P? z;E09HGsVF)Lk;&s@WF=LLHWBtYvnz9dBr$DJ_VOmUngNs{J~6aJy6Q~;_*|E!@(_g z&~z238b)sTfw#k5L;z9^nreWhJ?P9k^i-V}?FiMdDjqaJ4^xfSkb{H- z$Z?&=UrYfNw@@}{=|<}T@Oc{GNU8Yu|35fMpzi~Km;f7F={){|72HcGDFU|!x3acmDv}TAMs#>Z54yLC+oPA&^dx8w+ROpXJDGs`vkP{>y1Ag0ckuoxxNw5UAE+P(O>@9HPSEa40W2K}>~sJ- zLX-{ch~qDg_Cxw>9^D0?t}ZC|DC`8;?9nUwhy~=(<1ZG%)ifA@HqwCFkj;k-z%B0U zFRnplcR7Pi=3N8U1zg-iwl>~V$`!W{9TJ~8W z)4{jJfcpl}_8s&{bZApQ0J5g_CG;5PAKjr3pqb$1B}UNIE)N(=K)3VUfZyZv zS=c`L)u1*oI1a&G&JyS}CQ>j$c2J1!XNCk(T_31|eE{hg-`JS|4hqqQP}%%dpg_hf z(4elj1+~XqAAs9|pcQ-pkd?D9RiTcBxk?n_D)2fkn5z&G2TCm-y`q{>dtdaTxGE3g zDsHIk&6RLhp$w2fT?INK0dznKxLXJw3IQjzm!KvZD6C*X2;H?<4HBz>Ogndj(@E!{ z9iWA#ninixAJjoRnxRN0_JYsb09~O8PF0Mc6Ch#TxbNp6E1x~OCx9eDx@LGVg6eS4 ziWZO%*fFosx;)?{2JZ)hboGkXFoB{7+>p||3hHn1w}KXigJ;KjMUxS-++f*KPH5K# zdb3imXfQ&_iz^@lz)C=Kh_4}YY`vnk2qi}mNOU5;Ow}9;)gU?Lg@Ha~bScOg-TsJ?}ti z31UwSLeB|wJ*-fB4n6w+|0Sp`1hq#8p=Sy%J?}w!Kzm`Jdj2!O!y*Bq2h?$f_=gQ@ zPt>FT|6ha8iS+0dy^PSHk4r-rNCV0~+H}xNJc!s2E_O9HLnoIBma&Lz2-?o<(JQ*> zzbIs!s|%FTK-CLU0kRzwfW4x1P&Kx2HQ>Ah9=Sr4u|-hXU7$Jx-o2W1>L29#Zn)FX z(?41@0BHoFtU<~I`8Ew+$yjfKRx&TALlPmlLIACpLeT|U?Y$47ixsXb5vr@3q4@_B zf6H&s;)Nef{QWNAMr;We=%~58mu3)EH+(=#BS7J@1C*mdO-&zYq2L2M_OjapS~h`K z2mbKrE`T)&IXs%*a5x71FMSa13%cLu_zUnYEX_wiWg}!g%}eka3{b&T3N0%^eX8Rx zj+}*d6kS0BL*SC+C8)Rqxxk~l0veIHZT0~r{N^_t|4VNmjwT=x%%i>GIXi z@aQa^;L#b{;nC^a;M3V!@gFoy(^~+ddVM$ebc01ax_uiwx* z2($2_OXnp}2)Th4DuJv;EM@}T(G70R34lg2yIl`JZEk!6o{8z)n*r*{bZ!Opk3Bl4 zMu2&}0idwzZ1n(By$&EjSc?~aMQJNU=kXV?8n;97xUOWQb;SM@%8GKG3vE;gfSnI7QhvOKm;pX65j5i63raMg!@$4|I^GWu>8qgR(mfRvTpr!v zz=K@T1y=OpJwy@c>Q|56UXaZo*kH5j6KD|1()9sEMG5fv4h6E#OoP9!9_Z0o*l!b-X)k zAqP7_lgmrcLM~9-f`1!>jeZ?BjA;oQd;_i3f(r8QJJ9^X0DM#usBL(`dHmI$d8t-29?Q3&a2opmbjJ&^+j|>+Bf_@aR0@@%@oU=LL_0FPK3~k6>4~ z>3{pn^<^{kLL!h;#;Qbh&=Jjz0&@K#^xCH})0BHK0?7mG1*wLb| zet;Z({Kd;AaIAqU4QNN1VJB$ol1H!Taj24GP$j#3NgT=wg*slq>^8)Hvfk(_B zqv=n;iwj_9IiCkrbG1+41KXel$zXp&78rtN96xw;gBBKm)|l-Com}G4E9wlk>-Y<& zCeVRePZ;Xd!MDSLrzLiR8Xz9MqViBRy7NF@0i_bA*9yBpm9|GOD-&4q*nUvPdZAJe zSAnn^ONSD)*BsKa@m~dtBq6ZHptG?+^N`^B5L#-2`m)WnKN!GE9DjH;zhLxGcKrcr z4?vs!kQxb|c)$%1+D=~K2tcQTAU9(;gH(a`YJ(C!Xc;(kxg28|s09JO z!&nkL76Ti|hxQ6Uok-BeU&#K%m*9~)P!R+g*>i>ND1r87K+7dy$|3s|U&o@^#sI5M zL01sK)Iv5dz6PB!0Xo19Ji!SXfrY7sc&Hn+)FuG3lM!o22et$evRC*9biOzZJSu`3 z^Pqm=K2WNG#C+%qSjjc7iXcA-E6JB!rm$eL2+hm!M7$ zc$}+Obl+D{o&@*879WRqEI>mQKlXuA1*kTkd+q=KmtEjG&-H^xuV_C)Pd+X^r$Bn3 zogR>$WP~1TbUmEVPJ$^&546(*(qn?q!;VW&5=alU(*x4OfzWgL7@B{$p!NiSQXnWu zp@>H+N;dkO9Ifb3a<(31_(1M2iZ!i@*2=fz)Wrw62=6rsTiT>~#v z!*-Ac%uWv?3Qd-wcY44X8>wfF*0TVO)T16S1sZJFmkX~E9xa6>3UHkdD*U^_V=Jf$ z6?EhSlCCu{U9Uk4n{N1kCux89fX-3@n@|BRQ+>K4z)g0aZt&uXA0FM{-uVsQUjixUaZa1g$_9m0%(X&vI>8-2?{Al&e^*J8c46n7~+F^)q!ItsNd?*D_Z>t{&+Cjo9DU4J271CiZj2B`sE!MeaTpieb&4G2yF*o*eY+9yl`paU>K zCwRd){gvReHJ*S@uqokdtbM{Lz`#%<^%A^u9UOb1h~8Ha+EAAhq!a-4K0(9t@Bui4 zCtbnL6`l4G;>o|DKn9zN&67s3AUF<|1vR@tT{!SEmK!@ki+enJMZKX$9Ry9FfyOvH zouJJINWU4{CE!J0w!C1_j>vJIZNaWPN?5FQtUmj7V4LT;IXjf>si{SSO1fJgTP zkWnCaAdQQGgut~o*6ISDd%+{8DE)bG2@YzOK+>VmDg&ATCw0eYwC$z8ySPc;&wjEM99A7|jVGF9-A*Tg`^8Slbkcpr~{&GDimw>YcBn_ji zqXRVsk#yO^biJ;Dv>+kr4}J3msFjbTixaL3be}!aa0e(cg3W;(evhp*Mj7q!1Fz9I zA^tClc)Kk_-JnU@8=&04KOel>V-F~_dPSYyih@>qtbQvBTJ7=l zC!{+Iy1w;=$4T(+<{vNYA&d_%%peTV4Vpg~_*)b}bLOD79DfV=*lN&jBmNdHkSJ*B z8@T7wdHjX&eo!Y8;+yVPh~Gfh0D(K=`$5aqUS#%yGZJJYHGj(~a31k};L$x5?166A z7oMFbz+HH-CQ#aBsbU9Rh1IeUtQK@o4rn?7oMltbfu_RwTRK5f&3i$k9}Fd`9^H@u zkZy2*f@2FZGr!?9M0qSod2eWkN3Snv&ZFT`~@us`>zJ!)}Kf0y+-WgRpCvpoW410@PH87#il$8`^*v zo`AVMwGt9Y(2jV62V*N}^v9#ywZTKvRloz`+Yivu2xEwjRw2;AXDLVuU`7go6_j{* zbcYH+LJDFeBrLVJ{rf-Rxa%EIH|@3Rgx5+FUdvB-Ei>V@B^6J85Xz%uv%D%d-Z zzet}3-3`}y{KcDNpjmOyvaRDU9zfXO#fn!z>|WOi@WBe#5>U(J4kRBrhJY>v1WoHg zhAE);oceUS?(pdZ-G~hu0zLj>;*S6Sn|~DXw@w4csOt%ji!UHYL!JO#Y|<;k^r9>c zlpc?Jbc2QfL04pfuOqwQ0Uiex@a+8P*?9tXVe+vT7JvT#2aR1Kt}LpBm@Kdhe1Tst z@12*R0vg=V$S44}kRVANwHXPTirfck6+-Ha*|TAF2B-%KIwTs!p+3DTOelgEJU~uA zUjTJFDEowh?!G<%clJrhy=eRmcea{GH~3_f2RpeyF7Fl920Qrpi%CV$ zg~BgEYZhVU%xfd)mDw*m7%%W|Gk~8*2jX!c$r+yO{L~@f(d_yHG$iu^l>Up3!0qCP z*tP!!C~%IyPy^WoPB@M}pzF%IYj=2b`yPPIlY?*RxB>MEY-sfOi@m?#et`BYzk{Yb5prv`>12fxiWGrtIrt(2i74l>+uBxc}k7cmcd>60|JT^#_;a55rTS5!hze9~_`<;rwNwU2hjW!2NjF2jF2|aQ<-o4{At3j`(QKy#Wpx z5b*$X!oUsw^0t?2LB%q(ct^1w63n0h6Oi@%+d#n#I+PH^g9q~uMzHnepwX}&9@efm ziuS%%0G~MnDzrd;0H=x{9*n2>w=r}uc{IC1wUph23_^qCak{wnhCrE&2d2Xr_`##e zuNgt*<_QmL*AJl0!k|^mpj|Kw9^m^O89h1!IS_kRi5b!NXs+#G;BSFmcm^uzCh)gx z0Hqq}Fn_1(hnMp}A=d3W!2@&;CU~i*D=5u0cyxn{@fkj_ItP^fKoI~7UC`A%h;755 z{f3|bf;59+n~6aK^dM14TfElSuuBb^<7F zJNWtA!$BkMP={N)e&BC84fY9AF!h3KyH0ROy#$?6=K=B83lFF^(9Tnc9XC9>LmNDL z!MD)k_9EzxN@OqI0H<8gzC}JF=1oU?u4OeSt{ipp=9No(GVb>I)v7 zh{VKL)`2|)bpQYV{}M8uPK4v5Ji0+k)WF#dlv-W)d-Q^Cl!po!AX*2YJOIfNpaclw zL30GW{qVzs@euzu*Zs&zz8o~d4$37RMN>g3O`u%wHRx7E(1JXW86Mq`_yBc}F!Rf` z*RohV$-v*L0IE5Wwq}Dm%h1ik9-Y1~z`KV*r<#H8qXbpr;Azv%YybW4cKy)&g0cAl zJ9t36`32L(7yR1}9DKms{J??}awp@D4oJj+$Cx2o6u@O~C-mYxQ1hfSzyP*72ghQ0 z{%s8W+d#K(ce?)B!Ny2XQm5QK!IL)=r!S#bLG++XtPz9+_fC+G8+;IkymVilvmSBPe1YiQ7V^%-{954aU(cTdM zzvu`6?Qwg-zm1{!!G5T`0Nf9tH4~t-JVBMs18|@J{EL}u|3Ox(LD~q=i}nz80b+?h zs2c~W1Li>+upmoLIKV6c&o6WbfCgb+c=Up2W+68zbsqnJ5hCfJ;L#fZvKzE3Rl%dN z_QwBz3=HL<1#B<)w}F?x-S9a0g2NE(&JM7^3;t~mpxZxgzyt-4yZ!+!rg(XjkpXgq zAE+GXZw8%M3$liPn}fi2cxZr<1K0?J5O_F+e_H@(PZh{I3z*3u0gyXDt1Ceg1~3Vb z07wFKU;#)%1113y07-~~2YL^_P=HB*1V9p?Q?x-kBw!LC0gwb_oAkjK0x$`X07wGV z-3RG_2Lea{yA;C2~9hwJYK*WU;+P!agMgQ=nRH$y20c#p)H z*Nm{;tIcl`JUVN4cyyL-@aPO(;n4}MTXuj;-p?N0t~)#+TS-9eArRXDGzZMT&GmEh z1BccF;Jbf!Kr_Y;aG?a+dI8NGAoZ}!vBRS?KmnqUz0(zRZ810scXSBAnq50UTivu> z?{vC;d9CKr9lE32^$Y(t7AF2}2Rt}IV|!qcV=PPz9tTr@aDe7In`^)Dm4UYU@8I9& zzz6s4!&acXg#YL+bE=Wn+HHA|Xn7clU*fEu5$Jq%j#fcIe%fE?Gi z0g|e~NgWg?9X?C~puh*s)mpnQC^`!cF-Y0C!-Hr~!EDq7M{^150c6`aAejQq)}gg}>}I*h!$dGOR%fS(AJK5ig*4fW_JggfKX|__u|A?tt8p z4X;Zm$}*q@gos1{awIqb9RGiDK(Ysa3uvE0!efghcL$3T5~ z2L5fJj=}>_fy#KngAvqMfey8SdPSihIs`lp=6>MtIGFnY-1B89;RA21DcuY{OSN^=+6E0C9s%8j`NN~TbOopa^63tp0UsN2{C^2lJ%Wx_{Ncgqx&acYpp5DI!$Z?` zfd{C}F9BV|`~zYIs8zZHIw*MoRKb80j8+Pe>#s?v6ev#VgREkJwVQe&?VW*1k#?ZU z29hF2%XIW+2zb64KIaMUFEJc=!3^)^Urhbe?D~hP+w~8qmk(PrCkyK=^ny+{gx>;} zJ`Xe&ftc+N@PMuRLmyCwRUX~08@d_5*WL+$ZiWCIG6uT-^ai*)+!=a(_63h#4@Qqp-wXWPgg|3wxhELG7uPa2Ki~(O{D+~W&I5EMbm`L9 zr5@l`2WVj4bq9FaF06t4+750uXuuZ2fsA?ybeDoI$lU=S$?Ep~10M5aJOye(cQQ4* z{sDE0_{;WqH0PcGHIy%ah#LZk?$-(a@)ocoN-}Xf!4_gG#II0~gPg#>4dHQUV;12A zP&W(Y0#Ik=ga_!hF;HN)9w^-eF>OPqz{_;dJQC<~8Q}UJJQxEF zNu$vB9Rd*DJ0Qbf??J;~SV9)M?-U%m^Iliu_L>XCIFN6^VdnY(A^>s^=&lPyh#G^E z6BAq(RJT0vKnmk+c*2;!y$aHRJHb$rgWE9;)A>BpmAKJpk5C#a6_j6VgL=)z(3*9S$d!|bdN`;?*^Yv*A*_EzB`(0 z_b~AH9Rx4?*aJEXh`)aeq<92v&gFoF&IRzg@9xkI9^Jm63VMZ4x2phTqRsLDg>Kh9 zSnj{v!B7$dO>nP0K^YdjC+P$<pm~B79+1)R*V(Wzi0lppUBtt90puhXR>+mvUpfz7e$;uP^B7FB`2ZtAeg~*! z3%UaD;N@SP7dVe~euTRl|M-3ZG=2-V_uvEe4%hGC{RF;{75=@Y-#mIU2pI=Y5f2He*z-aq2E=PO$Pf=`O{xhKywA{U!_@5y8q)%G z@}SeD5{{kFdBrf|hSWkDi5zhJq&8 zz@ssssTR;I-2)G8(DDRGG5Gz0hazZz+aB7i|G-c>7e1nZFX$nQJ-S^5z_smb$Zgc1 zA?MD}7w|e3lr_O!RnSp70gN7p85i@_`&%d zv{E0EmqGd026SG*!PF0+-tGqvO;^x5whtbRpl$fBAR4q}=>|W4yBefn0h;E4%tN{! z*aa$T;1h9LlR%3Op#^q#DQFA+0f^H<3qHUlFZe31i=dfvu%oHq4bbsk;9{s0v{;!2 z=^EUE0Vfg2`4>1_bZYV_;x-2rAP++YUh2OCNk-50V3|PrCTRgA=s12NWY0KnqxmLCbnvLBmQX zJbFQQ8G_iL<*|ef2TeVIb`Ie){DlW-XBoI<2j0|p0W^sNZB^iPIcQB5A;W(l84k(= zsD^_QyelY$DnJgi2QdwxOGCQB*T;fH6rfjQfY=aOP~*q-ghzLPhex-A1K5gA(9Pd) z^8^s)1z?ybfMgy-7Gxe=FOpjlF!Un31tN>0*8pK}0ft@!BzqyUAiW@efDfbf=my_B zj?Xu&;60s?sR=~*ApC=n2bqlNBUbRqm+1NtenQBj=!g4?6};*aT|dHK2zeC!4zN&R z1vw>M3ql@6e*j!RXqp`(TmumL;qoZ@6X5zmi#;*)Cm{60o#R0Hi~l!RHnocl`sJr1LoL3SNT^K2)gr0JIVTZR7*bb3#TgKX^2!z5q|#dmMbg z0x1_3fLr~b))A*E_(AiG9-xxx-~$_o?i1hvOK`CQQgi^!?F29T z0T~Cn0;%`_u@KY*Sm42U0#y9L!b0{=GG9W4j= zTcF$2S3r0Af`U|`)AdTX>lIi!Qc2(NXgbo>{3-kITn5HSSZx8V8$n#czd{9U{be zqVoWxQ4U#7+ z&;lP&|KNB-2`Gg?#`$g>ZvY(;3zloHJ;757+Sz==quckwF3>OmWGMHASt}&%9CP3S z^`>qdbKr&2d{CO75qh5G%T~zRBgillsDE_a0d(E~Se*y-?CsYD&~7%vYb$W?1+=P} z@q$P50SEBFPAI7J^Z`;B8XoLC)nh!XDrcYcyfYu~`;4j+`@{>m|_pj>C4JE0*Uhe=84mDVN9_sz@=n;)26SGBBHKZ3wst*HvKms5MU#J9Ro#2g*0FVGk0yL!svIDYC@J2@fNZiM@PN6{)>uaX zFPIB$Ky?K0!OkbW(GkE8b#CaN&Hx_N!DmF41?3UYddW_3D+m;>7NC(^=pu<$NO=oB z^TY!-6rtc@?fRk!vnGY4bJVIuHX~GAy?PGwgiuNK!#N> zKr-A7@B$$hCI|4M9}us@hsgmng~izI`la~*WR?Gfjl^!)=D1*&=>L4FjxUltr+{QPZs;0^R&82DRKKr`a5U%*Fw;WoV-VfsrWP)vcg z$?`BTynF)AY>*SfI>9TW8az5(K|5kPpeqhRiRlEWzV`sFWCo4-LgUIBY3#S7161h! zfOU;Kz=hrqSg)}ITx)vJn#*5pmxOzq}e6N_y}k(637KFJem(N zd31|_>iriUh+Rl4;PWexEq2YdFBr?VdNhN51e#=N0Il=|&9u}$VBl{R1Py*ecM|nZ zVE6*smg@@gDX3Thr~I7^pc~OUkH2sMrTs>51cQYd!D0WOn}LD9eJ^ON9lEIsQc8hF z*IzI|PU8aCo}I1-UOq<&T+l{DP~d`=p@FOfjh=$MHV}aeTE`5Tx&yfYSKuNRir@)c za0m%NixPhRc5ZMGyB_d>430ws8+@22$k&j72AAKi2S5q`&U?`QMR4FU@VA@+2N^g@ zXca!7`T&~vUVB2O$r`{dNzk?icwqpR0H-4OJU`BI0MrujfF=j5(TRGNpT}|61<=}I22$-X1GRPlaS^qHYl8=7)c~sZZ+KX{Ho)qIcu09Y z1F2q^fm|=lK-3H1yPKM88z7a!3}~eQ8jOLpo4>yT=b9Oa!W&XT{Q{ph;tEj;+P8+I zQka2MDS+5$l>(Bv{M%d?Kr4kAXq5tpk6bB$_{fz4h>uz+%)nYHfYy7zPV(puo#4^y z#OTrKI-%S3ORoo{wC4hCzw12K(PIQDwL@og9^l`$g$c$(R2-lL3!Z51fK(YC&AAPj z)dFY-OanvdMC3YQh6lXVo&l{BW_a{M>V$)DQ0s&ls43}X2e?kCZQ$o`i-uPSf$$0e zpV4UuqhHD+RS4kyn~+x43`i@>bpo_VJoLiw&Hw)|LAS7j>TZut@PgV29*}Bd2DG{W zr7?^W4HS#W)x`|d>S6|Jbuj~}x|jj0E@lv@Ea0;DzE7z}w^xz4-hJHS|EE z@SxBG)e8e1dXUv?pvo3s=p7&&dZ6kSlpx!|p$95Q_*9q7?94OsFQpoEdaMA5L z!K0Ul36z-w7&}A1@NeTJGBZPTcfd=1Na5}ZYBYitPBegu^|=u1zI0B2H_%|k`Wx&^ zpO3qqfEMkb74a6JL0#}3iS7nySq@qvv%rJV^#w{ZAJKk zfn1jFz$nWXK+5tR(6W37QUhNbbTL)8>kjm?Tmxnaq=CN!R|9_sQdtgSqm|`I=JIcI zJpnDtK^xSN8~7kTa#;@IBbVhMK5ALM18Z5niGhIudu%XjS?Sq^5oD0_+9&0*2B#$OZTgL;=17T7d6>72pidQ48=LXa)E|&`?-&?E-%O zHqiM;p#Cy{3#dsB=`Y|jdg(K`(Jw(B_vi+#1rB|H*a+b}1G=~lJV)Dk-0}a#M%N!8 z4m2*1OXMA>CGrl`5_tzwiM#_=BJY6YH*hkBlzN~YZ=k`J74RD4KPY`Qx~_nfp{^Ss zbnXHOUAq8Mrh<=U?FQ|~0QdNBfY(6rw}8**0S$gYCQ&bVK#s!z?f1BV>P^t~7LMSJ zqZb%Kqs`!?Mm6urTyuF0K1-f8z zhetPTNC|bv8&bClltUTL}|t1E2(}zgqKv{@jmoI@GSX--~xov&_d7^l(#^AOjud80bUjr zKLo}2K$VizD+JNK2rhp%KpUBT;A9Qo7f1JU612u2wY-FESh@!3*VCa81T_VrRTHc! zxB*L3keD2SUQ%K!5J62rv=j|*3W9b{AohDg*Ib z2`|;&G}pdiC@JW6eban^zxlxj@bTa;v|ZnHg60Z$c=S#Hbw#^f-+`WzsjGX};H*ASc3FktLw}masJ)KimRO+T1{z z^98jm!Dk|X3;>VMcY;p~0ku^@bC;mDD(I{T@Zc?EaQ6Y`TrfxoZ7vujgmo?$B!M;; z3=%?{3kC_H%>{#mFy?|m>mNZ9Xmi0JA+)(*kPzBjFh~gNTrfxiZ7vujgfN>h zqJY?f4rRpV}U$Cm!*MjWd|Jy1WJDJM7$leOQPHL1$cF`hvfwiemBtQFX$FnkaJ+i z_3cjk2fvF8dYnCI8{n>3b_USux0*Siqt%Y>2Q77Y@lFwZ^4t%|Mq#T0rS~`>+H4i!ug17T%p6CScs_Ah3 zg{cs<4(CDV#mf&m!6%$_UgSIoR|MLt2HNn#zs>bmhwE?H`n}2tNZUj}aRE6I2(opu z`9VX6>;D6}|JnJsx&HrtqxnI5hwFdnj+YmplfJ9L^SNc3)FowM{qeCdO8av z7hAgiC;}av06MWY0_^UCk61hyFT4aFG6~wI0-90nA~5l0e*uorRzpu2(c>7AUG`2pW$|H6=gfdM*yT*3x&*=x`w`Hx+F;1J>U0virG zdhW$b1?X9daA$$G?ZPiw@aXh?;M3`P!v}Ju^^aX3_rS}8Nr~V!CO<$|N`Mj($R^Md z7FLiopd1W}wu28?c7cz>>*c*P1LP^Nz29U(r(T2ZQ*Z*UnE{K6|nX zbc8u*j`fASC)(MQp!13!fVVV(58weUXaEhEfrKxB4)g)L2Xcx(XzBta4oWbfL*4qnSn_K%^o_wPBWkdN&u|MF7p5yS1?dEp>X7}XpqvFZ479;o$@M+tG#C`^zdA2)LT(Q2=$HV~4r&}A zE;>f-1b|jLLx!_J4LMMg3e;Hztz<(C2|FZ!A`sL!cnLl{7vwL{oxI=wLn>I<2_-*% z{QnPLK>|9{8g{J-Xul|=`5geduLOMI2zX%@=tM4%2*}O~@R}UZHYd0gNN59O-veY% z0%-F+_-G+;{{(E<0r;9>y`vB(F|A{~54(hk_37?`~iAiJwV z!3KDAH-M)f;gVn;yuPz^eZk-S4paqpyRLxkiU3{r#@_G0!o_0GPMjk?i!NrKn<-K9^C<;TeLwQfu^7bpi^c+1t@3|tJ?v5t6mEzHNzHS zf|E?A>xX2dL5mX@gWfiJ*0rh=ZU%f`)gxU1vbA>zLuw+W_9Q z1k%u50V+sm`1E!_Gcai0JHw|p0<_R-hDSH(P!3Q;ly-oQfdyaW0a|+pI@hQ9h`>we z8Pi}*@GKJrnTZ1p3BO4B0?jfrptaRe&?+&|Dl6oB*ZiR_^yr3_BNxEiVL*lb43AEj z;0%xM2{RxebOC(pI5>TQ6hK8MAhHkW{J}|LvFb~uz2M0vM z3XsWgNiYvA0keGrB%?vif;nUdL=-%Q2+4k+s0C#|P|}6on+_>+LC%MUGC{L8fDV!a zuTFxTMc~m4nIMHOfU|VH!QVUsk`Wsq84I9H$puq-G z0L_sg1qe}4>k8r>kb%8Bz*<3tapy76Sidi5>Be|3O7RYJQFi z2j^$dr1S)kEHpniM}YG)NHgeY32=S}pRJ2CszCi&kR&*AutXJT2WLRWAj*l?KmGp? zYUV<(GWi5e=VawX32+~(8%Iv8gJe2TRA#_)B4|wlxMACQ{Kc&gXgSdujH8!6zKR9kmZn)51w?0DFTSeiqi*QR{RHA)z#~|05vO~ z4~A#O4y3I3BZLlF@eQb}2^r$(4876mdj&MhC;&T^7JBM4WW^q+S3Us}IUr^OxZnZr zjs!K@UU+m*02cw>U`cR!1(pO2Jb(rfK!ao-AO$m2eE?{O#t(=PSQVtK1}O%W)gL^1 zK|8|X?PJi90bsMijU%wxph_036W&GwZRY&ZTziF~L=L>HtJfD~*#l_lwlo;pApuRf zfMy7MA0RAw!N$mlXrQ9@(Li%+-Jm+%^#}O25m33h8~62a$jZSB96FD`=s{Kv89xIr z;RfyT2X!C8y){s~9MrJwc8J)i3(EGrqKciMj@$7U3WA_so9mB#kUrw^7fFJMQ8vha z7I-{@MwNUzT~GLQ`W`@PsT{y}JP4?`hb-lN09`16?|6`sJWxVmDBbcp6?!NKsI3Y* z8U%5U5!Q1+K-Q3b4#*U+r6r&P;6WoV_^pJW{Q7uXy5a-cui5Q7qZxc&OsSAZbL|ZNGH%dpX@iHg>x^P(?NSY@0>J$| z*Bc&)O=c@RdObiRdZ2SI7l0zY^Zbh!q2Lbx28L2@k6zZQc2Kl~7n5y(?8^pk);R9^ z0@Txe$pkVN)NKNt=L@>s6uLF%C3s2+WFbhRJM@P~w-9)ACUl2KuP?aw;nNMe69JyB zTtT~k*!j1CMrR&?XHdWbhNn6NVAu7QC4-x}%?H?^%0P#e!x~mp+ z2ShP780Y7;2l)a zL^y4MLJOP>(PA_gd;t0nP_TahWfsgBeS;FC8$gMn+jRy!Hn9%df(kqEjVg#kW^Q=& zf(z{zh+)|`f5F28ka65n=-n_rkh5t)`HratobNz0AmF+II^Y7zE-#+`Vqj=J06H2K zf;O70?QX5@?}f>AIo_TBt~aQcQF00ftiUZq~?VQHD;}8?Qn4Er1Jn z(19u|JPy8)=y1IQK7Zlh3xN*TyHF-ahwD8Mv%~d1sH4hJngi~zL((XyEf1TUiVOs| zN~1Lt3Gd4rXM`V*jj7wGiG1(4M4`2WIj*FT_P zHqbs3(EJzp%B39;*%u!Jz#2iCR$w!Dqu0OxKA>#WT?@Kb0W@p6!=twpXLvNf-~eTNuzB6JGd#LM$Lxo$ z@aP5KaI^#ARV~oiGGx~qXxG(?5?QdJpvnMZs3#{hJ-$?fxOoFZsXS;LaTg1yAKJ^S z)(A@D;3O^d1C*pol_ArWmLA>U7X1Z?O2{bg`|ltn7`8m-fY}0FJa+{)fz7|o^(vSx zzzLdmy9Q=+fZ5j}8xlc*1R8Pq0KQBaG{tZ2`k)we=o%y+fOt}9zAA><_c|EdebNRU zBnc{tK`F`=bhHQPxKQxXL%pnb?ByAt)v5u+`RK-}z>NbP4fOz;X&c{w8@QddShlJ8 zbhd)-o_Fc&O##(Eu(hkrdqJZ7<kc7qDx z4p7wux*P~RU;s)1;9(GO42RwEz;L!}05%7RI z)B_SQpdov3i^Z3jfdRV2(!Seu&%qz^s_oz@GEh$5;BoMUeWxqvqJ|9~y&?>t>JHq( z2aW9PfQVdyY)#+sIv7?p!j6K}054^AVch^a0fO-W4BIH8LD~-x;YVR=sy9S4-N@^P>zI#{u4;A3^bns4gCj@ z(4PSgeQ+BTcj$vFF<9tN@Hm+Jf&&x`@X((C4*eJK(4PQHy5RIY0b)01dY%E10Qs1h z^o%eE9Kc z!LG>lLpMX`A&<@r9tR&VfmU>Zs*BD;9=)vQ-m(lH-6Ei3{|9Jj8gw~5xIyOT_3uBl zKu22p;sF|&0CknX_ez3VUEmP~SZIMx`b5zLo}ujwebXKK#sk{-_vvL__W%F?o#1-3 z^Z1KT!VKsk3=T)!ZtnI%b2I2fE3l&{dXnMj#{d6OeM*F*ZIK-f8vX%wOhG4lLC%^0 z&3{2!7dN^Yntw3!x7=r705kfZf*DNwE!&}t{>u#DwgF%B4@UkL(A4uw(CJs8knVO6 zIru=t19I&hDC9wvU#IH>SoRA66^h^^j6pqe@M$3*x7w)aizVft%P(C&yaru>2wDxo0UE*SgNcG~rvhEY4tDNqXs^$bt%c=qH+Z})L1a$dlC+mGvc?OSe)*B$I^#K1=(DlafwPv8MHfY$5qr0 zg%{XtP@4PZ0~yBKH4PN-y}Uu@Vhqsuc=(5b0k%Y}n^h6w?2>AaZdOrKc?M`t>-dX) zkng%#8A0;BqTsb=kaquUh{OvMc?OSOQFl-y6(Z3DkvI>L@IpvrLL|0UGd#Loj)ELg5`*A^ zibeqh7d*M#82~C=JZ5-wha5fN(arkaNS*;&^(#UaL4X@#yH10h!TZ7lrk~kQu`ujq9rSq9MBNN`T=W}RRNE_zB)mPw(R%K$U?b;@zq2h8ArcijM5 z#M14$2DB!qo7EF!OmFA|XiUuktqTCPO2Cr=pgro~qT;m*a(JWJGD{KadMts}$iTn= z3#VK?GdIgNpmts-WQ+c*6s< zE)X>80dh2~;gM%XMpM_EjHYf72U7bS;(bsn46zL7C@6<^yWRj-)ZkT>Am+<;aAA~C#0~P`e1cN3fS@S?rh?qMFnaoE|%b;>Kz@yjo#x8x(SWz!; zzZ|?^mIc?%u8>L(Hae{gDkQN)5;)U2*?|)*yd(e(ji2Z&JpwI^n`@6Sl!6Yf0v{vZ z%?4VN3~rc~g05->3+`uy3zqPMPT@NKqVm`O|B%7MZr2k#K`Sm{L%pDykm1E03r2=c z*B_uFs~#FUKftHn{@4Y&3bpeXMA>gYkTUS;SCvp@7s1NDc+A*U1FEKbd4u%eo=^J- zu7_WM#-$lhi*Im+lLOCxGi9J@`z5Hj12-uwg9)rz-NPlb{8juhHfu-z&x z0d!hGX(eogr1SU--M^rr?jxX>ElKQlJ<@sn1qWnE7_!``ln)~K5Y(Cj9hL>UzNf?- zV!vd!YYV96gj@&O0d09M<_8A@I5`|N`u87vOw^B;NuZN7AV<}7JBWY}%YqD*fLz(> zdf~Y12k`7RG$*_S-A@dUwVjZ;97CaCD?!&y61lhsg63qm< z|zIHb;yAD?P{=M@P*zl!L#%SQ*W@p1f8NZp}F=01AogL zaGMU&r*5vj;a{c)y}TK0DClav2m3&)mO(9_9T4wXy?hKxU(LBU0$%HZr(1WOJp%zA z-yea8KVGnQy8Zz*1TP$Xzy$6Cd&~e|Y0zBT!BC>!T-(A}r`YZKr`H3tY8`ZP8KXyM zXa{JM3pBko=e96{7LJ0P0lC!^GL3Wmg>EW1h<121*Y058ZwUjr1+3MWXhH{;zMOd(8NfFUwbTiL6wL5obnQ6q+5$=_ zuR&#w2Uw)r^^c}&3&?@pu74Q8mD7%0;HA60yjoiDY`6101H(&jRs%(1FK9OVqDQZ2 zl$IF7K2>lu9S65nU#$Jg$lw8%KmOvCK9Vmyz`4)~l{Nb}fQbSvIWj*rE%(&?{)6%Q|4^!8O;OflsKs2NyEnxruJqGo7wKUdMJruf*y+bnultNV|4fj2L$gka4}=&7rSt)0^#y)kI90d3TRxAcJ`uJibd{?B0J6``$AP*U85X8dhI zHip-J`$3J27jr?yPEO}7A539vglJ8L0DBCIC?S|bALta;2p8V3cn;$aFv%R9h5HK;sn`lPw`1-#s8 z0VVow*B9NOAtO-s2bucfWiBHF!;7uv;080)R+KR21&zRf1~MQcFxLcNVQhkA-U(jt z5Y!LI5Y!8Bzp@TA{tjY#B!dRdK_ki%JJmq-e6MJZ5~v3oo5!6W5AI>8iZa2ZsGLT>N{83-D-E-?Y8`fdk~T{>XXdHKMmgA0p&OmGWeVFcFW z2GIi^lQx91cj-g4pH~Dq4y?T%t{pyG)p`Kj-~92~96G=TauFz^ub441Ag3O1-v<$J zbNQhG2Q3U?QPc^!P7Bgee}FP20M2ZnZaE|rL1T{(pz{GB&%?Uq*VWLw<-0%w!5+P= zv0$GZ+b;l$W4|ZhZW=U>QAWeSPOSmuBhWs(7oYf`P6Z#G{NuO-3#c3fZ}9}p2z7#+ z-U;^L#d|MyfwBs`<)dW(|37%r0nL|SeaBz8fi!^{Mxex70$vc(%>YRspybQ36A}fY zOB6s+aQwyNr{JF2kDUhKs1fZ^5M$T}@(n1!k3l3~z%4&(hkQ~zsGf%uIZ(@Qp^RCB zS0jUa631Vxw}ZArpepA>_@HF_17wq;DiK;PpdzI6_=|%e%RzC`D;fbFNdc#@2@p}p^b}~2p!tvl*csPf{NIS~3{+1+wp@cU z3CuY+JdQJf<{coF4d_hbA0EBnJ-86BU4JnZ!)u^1nH!y@S2{y4cyxlUkOPev9e>ei z0}i4O&9zq;`CC9$O>^xP2L3+Kj6k>RmF5?0plQ|iDWEyP+AD0O!r zIv%~ES+bx!367b$TL1pH9w-GJIRWbU{MZK?v;igC>6ZWhzXr_}e(>lOwMA&i!KL9i zNCPX_N$|`7Uw?^qMKA2U1z3X#9IT+3+13Lkpt|M+QE}OW>7^| z0V?EF7#J8{@Nz*5xtD7}sStcF0C=Ndi44?W1yGB-+jS452@cwrXaVlxpXe@tE%DgU z?YgJ)_>0?Y;Gz{e0tRheK>Olg=YVI7j)2OrZdXL3EGTfo|&Lp4yBfoH*;kFkRqW)SmxYfnIq%)8;yU3$TBC#Z=C?Y+!Dzz$md3ab8Y zKvz0L^mHD7p${?R0pg@;U+|zAw4j;_atSB_b{>DRmlN!&53kKZLk%S;4W(Appxwm5 z#_-w}oN_ylzvz>MX!HQ}F+d|Tprn5M#d8j@FsOuk0ZKYAL443P;GImb89^O;kRw4G zH^G-ef|W3UmAE2S>Vk@RM4|0*+#rjtaG&LOhz@zyPhezi@$bluj ztnWa=oyT8Pp8*{X18zrr0QXzL&H)ALDsHe@ptCf<4m42gKxzh9NI{blH^hhFmJP_2cR-dw zTm_Ejdmw%{XsQjG6c8~EnXd;g)QXIrtZ#wBN~kQ&gS-(i(mtaT1i&Sf`7E z*A+|vQJ~&0xTb!&1XLJ&I{{Wv3zF()Edx=l2TF2Y+`}qv{z6R*9Ik@LS+hjtLA4m9 zQhXgX!K0hiAEX`Br2tuboYh7Y)EZ*|&9r)Svr0iFiy)HhD3V`AKr_L|UxY#=ABjM8 zf*lI+iw9`QLO1IjutL`#-K_6KX3&~U_(4FR>f1p8e60q!b=vJ9@c#lN`33SY zFuYhT3Tjrdwt-DK{^A+Pm&aL)q1JhHvz9<*&Ol@m5i&(knN1Lxc&N;AR+t*(`?m!; zYyWukvZldTdgwrPZ$1GIKap-$Be45RxF8c44x;b`rf4}we21Caaz zvH+Y%K~f8MurqYJg4W=JRdOF>2MsU0e9geXu#>@nfnk>dsJH`l1NVcX{sp+?K;Qfc zI>Zn>hz{C9Cc*$}KJvFfvpJ|_lK@u<;8^PhUCo>TYAId-S-%G~df$4Wf;)}>{ee#& z{8|TIOM*t$FTMhuy~KG4CVc1=^P1~{aD2yA% z%)pT5!Jl{7rSl#5zS}FHe#~*#J0Nesvp(4VSxn&J6p!X38qtn1j=Wx7c-2rZ(gYs}MYdL5j6}+&=RtS=wj~oL>H&-{Svk)k`!sbb` z!HYvcvC_*bDGDk>j_n6sVDndcO3^=*~=Rz0&+UI!>Do_l(RxVcyuzoRs$EN-3}VNPD0d~A=Dkb23H4B1xg^L zP8j`1ghyi;*%(08;)h+=Af~+#hT9r{gMk5DNW7K-os9-wIR^3+=!m)x-Jvfa-DlLb zZ;+C?GxWwT@B~IL>kP1Y&W8bSOcS+TeD^50CBwh|%2)JGnq3h`pklgg~Ko{6*0%28P$58Cn!Y zJP<{_P(>-AWC%LnhaW7?TM8BjNA#O(;1V6$Xax<}fSVuCD#rsZ;9vmFKL`;HxCp3S z@&YlV{{k^U^a6Ai6sS}JmETbHprRjS3b^(Ihx7;VLVpkwyf6>EnikSK{|kygkc*(> zOwhU!;V$q|hM+#T1t_6IoBAps+u-p7nk}?ER1B2^M`L)0!>eY zq7;<$K!OGynulJqf(HpaIxj%=HiNe>gBw)fj!<_1D4IZbL2-C!9`djby};i*AC$^L zv;Lqa-NhH6wm3vByhjO|@^3v*3R-;#x)=+Tc#w@KMkzL2KxK9kYS)c0I2s0VuLn*et^2K=nTj);Bl@JMNkgjRSQWXK?0!k z1x_Lopwt5zk(UQ6sD~&pL@3yE30%rSx_Ve9&JoT{_zQDxFQlai@-WnmAnFIS!CoT< zYI%azMToQ>0Ox@l&^!P-I%j7a*a@QR_(5(w{vz)>G!LLC>VPQfgepq70xGG%ofPoq zPH>cf3b+6b%pT;6&Qj3E1aK?v8hBMFXma8S+NuE13bcL2@VIFH1M}QX@G65R9{lS; zMgIZVMmtC!p&MK*fco^%MDhbQhC!i)WU4OQR8Yqc+!^Tx=MswPAP9rHFW_FV;a|{@aVe+}0cBTEvlCRnfpmi61k_Y;Sl0Uu3smT; zNO0kRzPt{cD-fD~{(@<`3QA_6+K#{FD2NHp=?)r@@vk5bQ1ID73JYja@4x|C<8SHu z0kyI~vtS0yg4gBHsVvws{wI)8e`sM7iEcJ{#tAg(0Gb{-=Fxfn#YACnQU?VLB(%Yo z@_=d$5Emp2ir)v2vkpPR2B^su(USo6OJOaNg>cV;QyV;btV2H(qYRmXQyb`%#Qosl z-v1LCa|wY1BKxSMA(72AYo9DzCZ|L4booLGVlT_(8_Kb4oCy=@E%wL z(1`=w0EEV~hetOn2UHEu9#BEU`jQ=@W&I9T29M*c*VrL_AaE#jvOWgMcC%gqQJu$M zFzsQ0^t_<;FsO=zbvAoh-+?Z@0yjjrK-F8r-LZ=u><(zpU=ldmS!C- z9w?1`@$Wq=XeA0{n6*S7RGx#H>dYU&!jJ;I1XPZE@aSY!2WbOEMklKYyF3HvMrly0 zJ^td(c2>|KuHxV27(6;zCBVv91wj<3rPa;)j}78=9kBIio$nX$;jdm+QMku$L$xIB zh6V6LHe`=AfjkDv$0d+$6`jXl%-hBa8nlMSKnl2I>^%O$9O6ZYU%+FQ;8I*;J1k*a zd33XeK&?yI1qvWg8}9gv|DbXn+_PuZ1xa_a>Vc@v<1bQnp~ns=!Gh|D7k=O_p)15T za19DApGu$&2#)Sha7_Yk&iua!YrjBR4j>~w@e8`%c)^BZjxIQrfZ8ps2TH)jC1mfW z?+vJFpf1osu#t}cFCff>J8L`0FQCW(w=Cse9Nq=)QT`|qh8h6Y`@#ftH;2IsL69tH z8#1T_DUt4WeF7dT^aVBRUFq=TbYjB$skiGc-A{LwK;N`}JFX%Q2yr@R8 z0@Nx4c}4>?3IRO{(?R3^1=Nipp!^D|5W!7aR=ZbnpklKGbe=A9fhZ;d9&QGm#`@v4 z$&2G$|Nes}6VysLJ&qp$t#W)V51sLVo$_*Qza1mAOY~v|7kqlGo3)w+lEs*X|NV#U z0)Z?`=w?l40p%S2R$C?p25^HFJkGWsR9e1p<^eB5YOekBpTG4gsL9yd>HtoA$6thV zft<(R3R=+S0TpHiXS~kiFT4an8ZV%T@6!Y2%Fg32&T{<&op}fuH!cB{^e;S`4={p? z79qiZ|Dj<8y4XJSLN{wWn;3)Tp?axq5T^>vDHZPyz0%EE2>{xdT$@b`oED|z&`9)P6B8_-28uR${xH@ZW= zcpPT|Zv|;~1+M|*FMHnY`lL6&zV!gV$DxBi*gB7SBp>tWZaE4vpgZ(Q^CNrkG{wly8R-P{ARK^&BN|CiLkc^-3#CkId;>Y1XfJsBt$Qk%Lfxg&D>|P+9<;9lI==^=ew6wTY66#VgUa1*hL@oI zg&y6lVBNhUpoSx;zH@&g$KcV;!UPUQk51?!zeG+@`z`cGCwOKZ93rLQW=1!|>mrDG z9=%f&Ak%@MO-_7}V6pV*hKPb|SWt_8Drkc}NQXyffIv6+s#6dTe8O%h=&VIh>rVl6 zbd>9lZidd|FVgryR=fT<&HySrKx(^Tu>~!h!HrW4|Noc6@IQD;8M5FGY&18D(Xbi@ z+9Y`mX+NWy3tkQG@?VbOI13ZlIiPivppjhWvWwsrE4kn`v9n|@P9XNRqvWn&eq#NLR0y<%32wCn38EmZswT?g++%tm)ExUa|+p}gsyQi+8 zT_WAC2Rt-ge?TpMEesx_t>k&}fd!h)OQk^GX8jD1$!vFvOLnel1 zfZV7DI+6`E3j>~w0`=Q>yi5WO0&9X>&+zSJ2w#PQ8%?gDcGLqemE!x@AT)X8zyDA-2y3%Iw55`kbPH3s7K!defS&FQC?g1LFomCC`h;%*cW90vs4uz=3fE6d3u?zyO_< zTfx=MdgFy0s7(i|XTk0_0F_3_Q5x|9JZJp^6oSpJpmTg`Uoez#gJ#2-`P;sMYBJE- zDxJq)T!pL)g{&wBpMbvOHOO3WsPA}-v~L+S<$eP+8qKfi`XG(}n(K!bdpJSm=z|wK zH-bktUcAT$m*}9iap38x8<63439#t#7u+B58>h1gw8i1Ui!7LNZD5VKjN9`8$v6eb z331RZ4Vzg(b#y6c+b!s*5(RMDbOjyJ|JvB2*YyFcY!72cj`eq-?BJIIZogHfPuSx_tG$Lko7p`iT;pw)*jOcA!D8w#@h0^Ifi_@$E4#koyy4Lu z3mwV;>67s2to`5tn-u_!zIPsfF%eWMDTBsIK+_Q)JideH6{;bk4?K{~0L^E0*8b@% z{m~ivr91RXx9<;7Nd>Cb6VW#gz1U?AivC{Kw!fg|z{mE3mg2uC-w#e|kkE&9n(ILY zW0y6_cDR`IKaR(XD;)U1XD(tv}47gd*?fT=mgTX(L zgTYJ_aKQ`;IM6bbPG}#yHvp8JK*Kzs8$4bdcklpN0xq-R-BEB;A9RBU*zV5bFLb~) zCTzHYAJmcrEqnn@Jb?NgU_0O=oIk+((m#MslmJB-WPd8CdH;`3zIvbULt6$&HRuonG+=8SEI>|zHeNEJE)xJ%1KsT+BH{;<;7UL)0eK!A z8|4o{u>p=Mi(O^lz~H_43ltb&_w3jQ3J)3O^e%+-OsMoO&>|I&Uf%f#sk(je zc~MZVi}2{I#W06s+Vfk$@$C}o1q4uo#^0Ywwo7|=-t*FC^ZhR_3!JHYpXbRK)LU6X?W6dbNl zTOq++8t&2Ux}pGH9@0zzp_Vpz8>7)zLy6G+Ny4dI4m`BS;8CLY$4i z6|_6bqZ=il0{?*8|E18#J_ps{0=l~doWLqTcWpk{bvf^Mkv=)Cu0DM;4!&1*C8 zF0$7?paAbK0F`&pEZ_lh1ULnP&%58?*a^Bv;YBV)A81ciC3s7$5Pa?wbZ{Ox_oG&J z#AG{2@Po41dgK^l zvm12yNbVcZo&m5nkZ)!{PQ2pZhA06#kH1Lx{|}T5+4UG0EDxjRdC*|eKF}P~esF2{ z;t{koe5nid4J;|!{{Q#i()A6hZg7c#(7g(-8?@&I+|K830j+@tISo8X4N4lIXohYh zd9mmB-~TU{LX!YAX@d?ig~ntAC?+8x+jP>P2Oh-FG91T53rx;{4q$C2_1hN^~;m}e@g#&a#5oq~P zw=3vm5m@WU6uflD(se~CXmAr0s32#941v`y_rLx9-+BPHq8id%@n}905bYQPY1n%p zEnM^f-GBmHxd`fYLRy@lVb%}eM8(423d%8{Ea3rPxqbY_4JA;hz5yS~4Q}3pr#>UU zA;%81-2dRw4KD9NM+bn)dr*7N!x3E3eemga05t)3IKoyiJAi6}1Kp)>!UJ7EMfvd; z@!lK^9?eHUC+|Q55Oi)4XyP4K8h(IQAQ!q_-#}`C&f_nV!4CZM8q_TQ010hmJ>U=r zr^y4*a^DD|0W>xOD);}q76P4n0xphDcytPYqZ!hEhh$vvDsYd^(hE3(5R?odbtDUa zD`+)1G^}8a3Ei*AVI=}d$;eIwm)4*R4NBFB`t8^YKCnxXnnU1IS-M>x_<$l0Qo(`( z8dM^BI6`WFpKcFOK!eS6=?;CVGqXVTM|Nr;teB{x257ex@2^wz!H5WRWx?SIZ z*1CWE|G)EKx9c15*lp*r&hsyRf`nY(fK2F3{eYZs!Od;ZY68&YRVf!ZR$hWi5KyK9 z89)06XsF>&bL|sm)TI-k`ez^LAS_6krFsWeg}ntY$bZ6GY6I$G9)H2E4muz0KY#0a z1_qR!JD^q`k_nG*!%P5`Q;oHMyul~hG}iv{U}0dWO>eCIvzUp2p+2>-_77;EZf$5| z?H@))28I$JD5Ku1x%LlBy*}vNo?7$QAp4tNICy}Vm$JLm+OD~tjR47HlgwO4rg`|$EufaRyI}bHJk^rswZN0=l^-#+t{#G9l4HEl1W*g)>Oz`)`D>2^@)4!r=GxSJ1Y*h8xa4Tv_jQY}!a z2i_Ma(R!c+TyBHgIjsjupbi)tYQqdPzl~&;AlxifR&b=V3otO0g6E$g%ehW;3V=@p zY_7fVx0VZH?Jv;6b|M^>{LxTEWDX6Bp0Sdhz0;o9=&DPmBU_Jn?fp4z8 z@V^vv9q)_o2-prja9iZ@mw*2)57!HUc0W{r%zn}BU}EWdp%$e(23od_WqW2gHVt$N>R5Xd1bk0A1OF;%O7t3my%+7k>V zN}ya@2a0@{wGNgkniU?sq812Q1F&o<&vDm3puuU_Es7vj5(rgX2vwj_=$H2(F$Plg^BLTx zC!atzfz1L9qPzsH3jp;YJ$glNAXM!`r~-`wyabiwP*vLzs%Ah`aUOU515))GG+GR@ zZYDxWDMATo{0cla15#3rP!fbt0v?A)DLX+!sQVD%7)r4u+R!Aw?c2w0RLWKKKX<1O8U<#k!!=_j^VEKZS?TA+T&I=W*8` zAhTYB$|sPMA0w2^M=1FVnujxjhRqR#k{W~(&@94hez20x<1eh={{^4Y1YSsra66L# z1H(Sptk`=C4u+S42)7p^%vFJy3o4{mfXazC??A@g0G+4PjT98jAmc!h0#dU8WE|)W zCh&>jy`n}4z6@$#kyU0cy?ZZ%;d2k z+hk?|>Ks5i&Y&qn@U&0zDJF()*E=u4M}Ks?f+FM46L@e3LtFs&kTlps4?tTukUa!y zp@I+N0D0)VIS0ebkC40qGOiV291FxaC9p@p=OA6&#R_ub4^VJ+9)I!i|G)n)w?g#p zK$Hmlt>Ei+ACp=wrC9-;`CoekJoyG$zyuq) z04?4<0qXXHX2wBj<)UNfiJe>mpjB0%WjCOF4zf=0H>d{(T8_j}4{iwV+6JjvmOTUo z1bE7%bt$Ne@dR23Lpn4butge>{qmsRFKE&Ov{2yzB1%i3eMay?EXWKJXeg}|)O-O= z*np~N@G{3A-3|uLKmNfEO9o|ls89)LSpkR*U5Eu)_D}>_#nJ7h06O0M{EGu$Ks(7m zyI!0?6Cj}KKLKlkWJ*9w>%g3Sj0}w6i|e190ku0}8I>8d3_?JS1F>QiCi4=KE&>lf?p zGJ%vqCbLRG=V^oYiEh{6fNqc22G#-|UWKhs-uj%4;Wg-N7|;R=NEO};pB0 zUvwLIbk~BS;{$Yv|CJc1U;wS>1g{#Jc$bNxx%LS|9q2p-(8x6GJOw%MavE@~fSq9g zbH-~UuzJuQcyR9vvK0d~PXSIPGY_yafSaRWUBA>h7`k1bKoSe6_v_)&SqnPW40KyA zD5Zb~E|4;R3A8&14IPjw0P)YuR;S?*wOKy;*kYf`)Kx>FQkH7eFkcpxB1!MCAcJS?CkW&;pkH0v?3rf&m zpljVghed6>(CvC-A81mt^Wf!YogWl0v>qryu@W>Uf@EdyNmhoJGr+yO8w{m99?jt3 zVFVq!1v<>?0HdYrmwFTfazU+1gqwXp284qQ0DJmxsbIJ37j4ivSWHl_o5BPbEx}VXmfOjI{0`<@Ofjet>B}*phZ2P%LZNlpturrmc|j z#49!XK&!4wK)X9ZXJ>UD+X347qwRWQ7c};NbzV?}T%rD=LjZcl)oT{enOJC6GqfB4 zrPM3UFBm~rAKV3<0U5y9847U^*mBTmV~nUF585+~6!NaeSs7k}dJd3u{;$NS+x3dJ z>mNvzqiRJ<^;{sWqTt3*FLVv%gI%D03Us;NqK}}R0{ktYozEVi!!$u2_2}iTyA6*v zmoE?{pcCV}UGIPcvKO5BLBrFKGfEVoYCuCa-L6-xUH_D5Lfq()d;uIJpu^Z-K(4rl zUHSR?GsxhQGLK$g(ADH9?(zp4SP~1f(D#H#uWJL;(I@YMS~(>ekbVKUtlE`KK?uhJo*M+W+(cA6?9A_ zvM(&EZv-yXAbDmAYKewsiZ;j;OYkAJQyA(} zx?QJu%-985lwTsJ_9z5_3gzXexvkfovgEfc{x4|H9e>kZ^=r~M9;^!Zy#!1As) zAXgdo^0Fh`eD(uGNg&8E&{EbHbivXMXf9X-RbT*G6i_>bp+phneb6urcy|g+Su0c- z57;X3T3r;UJcY`G=I=ozH>kKh13s?{bkiMVIR&(=ZMFoLwXLA}eQ^Jw)Aa#3IHqWW zihPge7fc?EprbZHcfNrSN_@b-O`!P`V~0RKKXnK|3sY;?DK!^CX$@Q&Z{Xj?056R%V3x)kIs`yxMbGf)1=VffXgS8P z2bTYZCtxiCz>PQEH=ukz1?+Lx7dyX$+Qhx0_18dY==ck}nV@P9x+v14`AtD*?H-TL z(hZQ?BUkuzx-RhP^qm16zd7!D1=Qr|cHIG)^WES9YFhNVA{K$}a|a!832HxsXVt=3 z!C4A)p63fLOV=MYC_^L#pqv95CxPTt^MlYP;Y(0L2kAM$*m-c5D%i!WvS1g3w@+@I zik#|ETAASb7GdO*15hJhmx2<#2k2;OP%jWMPQdF9I%Lmx2BgJO(m(rxDndqUBd1;reVkC|qG@A~wHC z=&U{C(OG%`GLyZ-rPFnbPp9t+Xu3f<6$(5wBG1CXVClLAb)Xxx=x!fq&>s?7oG`Dw zlmus_ExX*nPT>7=1>^*9-=bp*azJ4=Oc18+-p|VL610;Bv=+P@lpVn>=N<5{Xk-D! zB)G#{R}1nnDC(iR#(F`$0O(@n9?)@f@O@=rptX+O44`vOlKe&zW0=a6@A4h?oS3qa&9nhMB z&d?j6qvb%S2>W#U?tpfO5J?)mQvoSygF2@i9^DQRpvADDfk&`_Pj^6s54dWsJ>b#p zdjdQjSbCw`^^PxinO)~`$N!hWcTYFh-YF_|Xs*4Xf|@Zv?VNp}u!jWuhdr=h2aSsz zcYOicUkHw}PS+2wHM?s;ClFug4!z^iTlxaD)ZMWY+_S#|o?k5~1GN^RC+mWn1(O&! z7JXDX8PQm3D!s7BhtPHQM!Lwq%petiffUa%i)apKeIx&f&;L7X}SISw9n z8B({a1gL>^@IO0f*^Z^F0BSgb3mDMU6eJv1?1qKo0?+_tx2wRePEb1T<$ZJk9JW2*AYz!h#>WSQ%dK05$Z$+iEmCy1|G1?$`y6e@Js);tF_C>jsbG3?NbP z8r|mF6KDp56BNSW`5=Qqoi^|yv2NE7$R>(i0+nC}Eg7(777=0Pso z1h-lsr$oM725vW<5I_wrG*6w{$;$Au3*2;a{ov8-0ouuS0DATsIA(1xLOd41h&p$P z=CLM_IZhyRK%vgx0=lsTbTs(!7gwi)3d`d!j?QHR4bwq}M^KXpDDUh;1hg5*EYPiU zkSuuo#gwa{uE2?I*At)&lY9xZFd8L|f#!XY4EVZ(mEq-9@If4J!2Pompd(K}l@255 zfb#>8Te=T)ho151ExiLO5}|qj#!pZ?xTL1r^^T?Mn^IX=@67cAI2Az>kM;#nh@hSx zh!z?pJ6IWBgRZ^U!BCnTunb}(O>{Nw+y@;=7&e8?+ces*C#%mzMzpx z&|n~_`~?jNmgqspZaI9q0}^~d*U{8I@c^GA{{vKPb-VuY?L6q%`2$@1zSisZed5tw z`vTndDgDsx`saV?jX=-NpOCH~xTo5A{6!q-PLSp!0w|qI(1v%9&d?j3z7M)xpJ=;2 zXnw)e=?b}_1*HZAcY*5RYxXrjyZ8V9|Ns9bXtf5YiU;l91l@N~3Ywh;9f1nEYvRW- zhOF1#pgl9tcK45C4B5@KUl{AuK~2aPjF67ZkA1sAVcL28#g%h^|3li+pi|c&S3V#a zwyWFq0cfEgILKgU(>yp2((?d(Wdx{k`{NkH8E`8R?o;qeyUx-ppoMmwz873NU18VZ zfR{ygx_;<(J!0*80WwYv%Gz1r!=FK?wcBK)7Q~=pb|0wPhZMx}+h8kKp<8Y~Kz$0) z%ilT+oZ>GuzhLeJ?M;M?6@h{TSz(9k`-a;0yGm>uYTxfhwGXsz9m&4+TVeKrZkmF3 zSANv2ea$!ld|$>7&;rC#eWb|Wg=R)J%#7D@-L4nFG5!NIkpb$(xqg5S%bh7fX}foW znokICYru_=?sokFjuKGjfOY?T!O;lqxpdb4X{`OTh>3xr#1YDLX9U8+_5urfz%k58v6;t3aAS zd$7P~KR}KW!*(`x#YvFEkH2v51{El-@Uy8CPKq+@1NjEjKG1?lzJM=+Hhl8$KVow( zI3$p_h2cJ%S{UXmP|K$C_zPwT9~6z?CRgh#@Nzg%#Ri^KhRvmHe+pWP1|Ea~ALN1W zY--S24Cugt)tSFo1E~|de-ms{<73b+c+fT`$N?bC5EsCv|KMj+vx3gTgLPwIvWT;( z)j-4ToyT9?S;mIgeQf~Vq6o4K)G~&8`O!s?g~wlTAX^MRTN^wt1v$X^{0paGPPD^d zK&C+^+d%U*oyT7sdjv8G>~wI){sfqheEjmv<=~nY(ikfN-Rt+lqxpvbY?U?WVA%`s zbE`Qofz#Oqk6uw5a4!hFoZ|+_xuA^NTLD_^0zHxy)bRy1&%y#Yad{W>)aoCgqr*Yz zDbt@5vTg0g$G*%K4%;j4#Hua3@9r=J(}OZidM9vthYS`hX?2= zYrYcw=GrTK{QaQgEStecTi*h&@B5M)ENWy`9F9d4(9&o z$I0+=1w^Z0;0gWes zPre4%svzfr=Sgq*aWcH-1utiOjeY<&D6PQHLxHMFPG(grX!7Ej8QL_uwQupX()d3rFY`+Gm(6wy= z1r_v67%ZD2L3_9NgUaz257)s8T~Mn5w6Y6yqyl6?8LCC#CPp`SHX9m`;Q4g$8HdMT zOk-dH^}9jS?*h9()rLne@602hAO$yUgL0oZ@Y zMJdaFP&*VBdC>J0$cqF(bLXIGU`P=P9)lS;%TrcwB-uD?tiQ$Y2}fz-v$;3i2u}eo^?xU)(y&%m8ha z!uF(r7S(}|F)tMXH5b7x7tjJdaJvt5rh@AUk8aQ)AZY*TA=DGrvO!H5P#+$W24mO2 z(jaIxA9!0w=?{-yU(nVR(DcIr&(05>|3GEsA2HDW9q^?{^{m~lA6^TB_8))_!-rc9 z_b8}bMCAHT-wQsV;Z0DzgXU3CZ`<_*XrR&;bRsEe3Bd)=&J&$KK{nQlBi&a?O4z}Y zAt)(;SADR*$dzOOt*!udxIkyygKioJjc|k3nEQeb-q-;>vHSaz zu&Vihx5d_i`dy$glmjpwkij63zO!LSl@Nsv-XnqC!J3fCSkN$zD{Q2aA(TA#%ElqN z7ZhjMH#7WzZ)O0k7H+JCY-Z2}Z)Rvw1b6AL@bdS^fyWR)mp6b$@|$a~u=BS#Gcho{ zbY%kd1Ccf~m@qLgbRutPus(p;(4c<+zM%nhLPFq0@Kt=!wNNO%GSCf}`#{t8kfc0m zB{V6&yb0>`gKBWdpk~=`W>97aC9oH;tw^xdYT(id{rpCdnMej(!VPXf7z|nj4z966 z*;yd%Bk(~fka8*%X{osnTn~8Y6P{VXONK#dkiQSK00ms_?>Yu4-EQxLmu~U3;OYd@ zazfn*04~!&ZiV`P1>FCTUKhA~2}<3dbMnAd!RCXo0?a{R*BOXi`3Sr6>Omzbs2v9? zO#=j8YeT%_Ag~K`P?bk7uMl0+Oz;ojQ5JFf!zm=7ysj+mIQw*Xlo&C zCm;R2{g1)WR906yFp+|sC>06LroA_zK!6D+u~A0ddD_CUh|kgyk94h#E( zps)`GT}<@?v7ivNh!%Vo?7kVG)X;hSMfT-?|6hW(fI^!<^?N}v4tDsoV<3l@f<}99 zc=U=EA!KSGGN4topmy(TE$~Q5uV@59NhCrEDC}ReLz-oJ;NcNhBqxE_ID*y;!ku*E z68LO1(8^kPK@Pc$u(K3&MD`5mu?L`01`r#znhR9nPXHBvMMuHSUdVd8&f_l%4uQtV z!0Xex9TZv*l%n)NL3PkR&?#_`5WKP!8iKFOn`@siRHCQ_Um1o_y8^BjG?W0UsiCPV zK)|EB_5-+J?sZ)Nok9g&j)l07SrRrg1fC(D08N3HFR{Y953rNPYCAkSOB~jez+!5I$(TGnlUf z;e*!vf%!5JK6sxmDE@gMe9(kBSpLsMu=xu-nrj!}ciQ#EtPC&ZK|R;*P|&)R8_@Y6 z$8(?wc~oD4(=5VQb3j_3fCldy_kw1I{>d{il%b5of*RcW5E`;U8a9J8bc0WSJNSS( ztcvt}tiu*` zWihdU+B+zrCID(DB0|j+WDNK)ZcsVjdHjXREGCBL1MIy4?9k&1nLAzQbi2;+n6V4A zH_M}!_uLLpkp_0BW;t>thGGv|B0am1mEol*6KEg89Pj`)sL=&!eP3JxT8_)#aUMLW zJO@&{feIhkxEtSjP#p2MtOF?sg=vR1k|sg5PXNifV$pscoY?qV@%5?F<8QGA840%#Hl(fywNM@;i_O9~sD+?yK;3Zduzl!{ z7DK!XnyUnbE2wS-PaDC!D-YEUIzJ0(^=9EiWG63xtR8@`-BW=&88j%0uyX}8mFI!& ztSG>0-} zyWvIiNpPtOs=C1S{?^@)std6`3|tO_YbKQB3$B?!$9q6(F~0e%3@^RG5&pzu#x79X z!=sn?$X2*h21}ZIbcb#L&)9)eJvhf6f=Gd4 z4Xgt?*aMb(4wgfWHE^kna5dXJR)*JZ;HeqcA7H(ZJp6AixJrPwW>G>C9PbDdj?86c zfXqFE+Mv6@Cjj*FR&9ZYF|mNA7*D+T)dBW7=rqR@kcdBk zE#g7PZ9$UK;W?}fFL^-q0O)AP&f_nZbb?bh`1YKIU0~Bdg%OxP5yA&m#bACTgb%8U z!Tdr9A7@pJu+|4;?NlZPh8NSOf$jM4q8Gvdb-_MBoc;p8(>Xw91cK`v@EH+1pw+ql z4^WYYTAhQV9bx_1*{lpN#lTuY^OKT8drfehtF&U*-&EV(H*(~n(1NX_jUdX&HJD|kNXf_5MVkd*M1b7%P5W)s0cda(CIC#Ia zH*|CqrBAcMqqB5@M`tK#`5?GG4%)HUdHe;}4X~p@tqQOOOTK~m@Y7A<3xr_{S8x;) zFSuL5nFkc`V1rhH8xpRdMXC=VdFTeVJOmn@gJl0BGe8T_!5IOx>*V;0r63bQz1+^@ zFBXCP2U+L{uJk5B_|VI{P|_VZtP#fMf{gtMN_V}XJ3M+pc?`6+8CZ& zP?w#cSse`0b01vMx`LNFYJk(iK~S5|2Ndq$`WIa9en1TQ1%caBB`T0S3T|10>XZ-2 z8+tY{gEA#*763P|5e~jKjg{ebD#Ej1gJyu1hCx03b|uIIsAiyfdJ@PC(5*S3Cc*`1 zd6GN_tPiwC6x5pm9aIY~DvbYvN5#PD=T{SGHz}f_1R4v(7{B%D^gRGyGY4%L`GD#s z$l4W9*$TQQ6BJbs5CPQq4Ybw$<`USK)q#JZBBXkiur1|rI3Mg~Af@;ziXk{WeGC^1P zK(hbQDXa{yQ#?S+vq38mAze7R`yf+Rsz6lXl+5#HR0xy8A#B53<%q#?%DFC^T z0KCBO3n)o|npdFeG;#|#J%GznR7?fr%!a29`Wc5-2pl6Y6DWk2eRi3>`d1O zuoCjP>jzL6K!f7Ns?E@X6x3pCJ%E~f!DSR^G#BFclapB)Uj71&qq!ac_40asA3$#M z1(#CHAd}Ed055hzn9vR~0kj?!JaN_wS`7*wTKlmH6jC3$T|Zd69ssSS`T#N?d>W)H ztlM^f6=?Vk%UUXg@fwp^8D7V9`+_zHofd0j%i|@e`B)zkr&LyKaLDuwLG_mGCz2*-UUp2RuoU24TUIzE}dX zOhFc`2UK6cmPlwZ!PWP&CKk!UE^mWQmxI>lf|eqI3OCTQDG$)$FR@Iri(zsXeaE;1;M6((kSBvkLDltWpz8i zt2neltuI7FjPW2O*MQgj$E^Yls{4Yf`WwhYM$g$87?5;>j`;v>J_8M}yT0(y1kKU8 z-Z<_6O1hxwi3httHo;f6oLKSq|7$Dgt%@%^AU8FETEah|(eivH$Xc++K#qoaI|DLS zUJYK`b?^ln_=Y#oX_WE#B;G)?Hy{Df;o`>_8a!af^IMd;zykRPWWXr&hX*6*6jNwWo_|rh{O^Bw zzYenW_5!j?>{uBXc36OFer-_XfSih9h9$_1X4em(8SM+*4k`yGZ=sP&x(G81GZTrO}0M&}1HHMirEA4!)4^0Q>L;bSdBss8?Qi9DE^wTZ#j_ z6xwOFnmGR^Iy#dL7$8g6m$nDaNZ$5xZjn2Id;2TV~ zR)DFg1t6-s6~c49@bbMKsQ73FDRKdwZ2@Ivuy}MsnF$ z2W7i-M@Yb#6`-TCE(SS7Fuf{h2&&sdGe zF2TVGZUms|z$yqf9@O4MQw(uEb_otnS1b}(1;NIHCi<`%k6nU;(-n&ZRza}wd%!I| zP`j-&6dETG*JGF9;B>_zfmIM}JZPi=tLw2#aB#X}k-#blHXgK-53BLmB{(=;u}EMQ z1RD<;xy5Qcb_otnS1b}(1;NIz!4>w{B{(=;u}EMQ1RD<;XU6J!>=GQDu2>|n3WAMa zg3I;TB{(=;u}EMQ1RK8qm+{yoI5=IgNMIEN8$Sn^@z^CeI9;(wU=;)#4<02#E$SfI z3cCacC-^)AwAjKb2sR$HB_B;O#CYry9GtFLB(MsCjR%dyV>KST1P7-p770$*2`-%< z4j$m?bnWSO?Qvnez$)o_rn1wuquaIP-~skd*A|z~4=#o;Tnr!diZFM(wivtiFdpi5 zJ!9;;2h_oA0Lfl(F}&f}E5hFG+5(niywKTN^Z);U$Ad>XyJH&;p5yHX^A8^2GzK%e zr-Gypp5iyW;MjQ_Y}$tI&>060@f%*~Jc!Cac!1v!UFZa-;la*R-L3}?9$+`TVC=f2 z)AdZ}4Ujj$C*nZP%yD7-p?j`0ou{+41a#jRm;`wVymq1UhKnJ{Uyi*ZERfX<#$c@= z_n$C!-2w6fXoIjz=LHwTABG0rq47*pncV@q@1E^|^+ftv+BO5DE4q z=)O6ZPEhIur$DyuR*;BsD_GB=Zr20Gt{XtUaQXlLf9DTSjQ?=#6=8xX1Nrd)NY(+I zR*!JHbZ-SI1p5&r2KFO}(LEJJ9z4bG*m=m&@DkYECEcNC;J!Ry>ctJOFopo|&s|DDbAQJ3N(0xxR`LGovVhq*<^2Huw*EJxI z7=XO_!Nu@`A;_ET-C$*41t3|_RZrk7ITxf3oGU>>U|)h5-BUp%B3JG)c3sdNdIIiA zWIoiBC_*q#Zh(4nN~h}{Xs*-%`v*k2F#cfGU)*8Y*{T8-1Cd}qDuCP$N~|u1FCe)R zBx2kO(ggCt4rA99AYaIU(={Ylg36p$kTS3WkgNnaD#4i&q!5xRL4sgkf*9RXK_n=> zf-~g~W7j#|p-14JMCL<1i6R8^{*fMrS%u#Z3_;}6z2H^Ji0RspaOhy;6* z2kdy1ObHS)ZUt*P)a|;(*mViW9~_|2K+cpPWguUIvn*&!0VGp`)Il;OSPWFaf*9RX zK_ocA9(FXm3^sR0cjy7QH@6tO!ue2dq6opfxdQ6VGo7wmVA&FMOJ#Q}h;(7Rq3cq7 zSF*G9&%giwyTK&bpFjSA3LoTr2@){|YXbRVgR$!ZkT<{l1LaE>P$30Mu}s~qAa!6B zAn6bPK$QqMV}ewIGbTt39GM_S_f!xGicE0fv%%PPN_XfUxG$0UP+y`5!F;&{>dONeZu_%c#+|J%z(ODr?8zr!Pl9R@Xzkbv5;1NC>p9fzy2jXb4#*b| z!0K)oet_jlkTQ@T!Fl!$*pEj!yXS(`IUYRC+uaHh1N#xg=$;B95!rH$vFn8H&>e73 zBJ-i1L=l2{askwnM><{CK(plyu!le-sIufeTbkb4dIc;7BEg=#0E!`$YzY!EZUt!q z`C)~z>kN=5&w$i@0M{Znz}XU{46Fbodjjl9aJB?1{0@#vkSN%jAV&985DAaU6~?Y- zx;CNN5EbJk&GW$pQnl#cD5b>3xP2qj;F zgp6CknhtflE-`kU0`drGQ81{<^8*~0%-yXZWgu^YbM2OY|NlesB}g44UxLLz`4YtF zo(dwt`SO6H;RUd{C%Qv7z`eP|7_=`Q!iRbjMF{528BlNT>2zHJ%a^cGD%_Y#-Jm6yZ100(mWncv$*#+R( z1ZPW-LU2t25(CF2h|xV2M1s9}(9!T>x9b99*CXAbYvA5Q=0m-SA_Vj16sR|Mbh<8p zWz0EXFM&uG#uK_J8SAV&TW5g9KqT0kQ^4Lt&Y2()<5rL+kT2#KyPg4gWCB>-0T;s) z;1(WxcPmI8SOrMB2kcK!)`TcL4ojc1neUa$@qb_IL=M5v$X&$1R}wn%mF(dC2xX+j9bB) z4t2XuF?IzvRWm@L0V#q`fD_^hy>-$XM1{-I$LAFVjvRi&j_$Tk@F@< z#JClt3FM0j#;)MjY6#SupuFkWE5g{_3Q`AF0gBB4aBPAzCrBkYbArUckqKgSPX&>n z$OJclCK$VJ=?Pr+Mm@kh&eYv6&-iK`U0s9CFoB3K9eR7R2bD3L+61^o+49wYr)XV6TBlP@|UrtB7@Hs|i>PM1s8w zy0f+OmW$%2&KoYAA6yh)a9)74Z9x*otsuQ1ufTeoI-sci;bM5eMG-`Tvnog>SPjU# z8emU?vnog}xI6-hfxQc2bWa75pvVO`h>-h}ppG>%9~!wRLa@li*5yWQ<$EdXajb5>W5{P=qv%7`j_Q z3PHXFXJ`?4mIbMVWLdBnD9eHv-BUp%ILkun8RV`d$iK*ZsDDv}VE)C{`xF3s4n%_L znIqb3ggaY#z+xa0>|qYDhhMoUJ_2<@IUgwA0QnfyhX%p@d-%&=P`e&m_65lpw}MOnc?Q-Y{Qy>f!Vnh2 z?A@&(gP?2Fvt1bG*k5A`mJ5X`$+`lK(w zUIUS!`jvP62EWeMCtxuU3HI)TzyJSZ&AuQB<5rMfkXK+`(>oyLA6yJifU_^84g#qJ zs{wiU2H3mc>uv>+ zj6YbPFPxXu*?Ix&TM!BM?HO=nVavWC8DofEq(15isCR!r%Vx&zR**uFZ^6CPBY$D7 zVUS8l_63W9vM-3yJrzWPvoB;=1-T0f@-H$U>R%Kgn18YLQV)PV2O>ekDn@$_S#`GV z0gHi1u!nbmJ&Y~;f@F+aL7G9nf%R6mfIJNDlq-V9AHc;kNF`VeD1JA9;}@KLL23`4 z=k5I0-3k%~$1sS|JrzX4V;H$R3i2^BAL?TiA()S`^;p+{eFq{Lf9NJxw3c?Zt^f;x zNU(>OfIW;Y`+{VQTfusfdaet=>MtPIz95Al|APCjbHM%uWnYj=$Y2Xd4D4GFqkAfd zL}Xv&jw#5y$b6`GQG{UL#nN}30rnb*1l7LQ{9i>nTS4ascY{f=cPD`23tR0Ak}z%s z=>>TO)`jf>DF=;$g0nAVEEJ>?tOgXl9boT*voA<3xb_8!fxQc2bWa75pvVQ+zQ`R^ zkZ+OsP~V~m!F-FY58DFvE{J6Oz*;8vO0%=I0W1U}!M?2lM;5m13z9Kz1?xrX%2q(V z3oDzMx?4dCLB0idW=r7N7o-xBeZgX&>+>1=qeHF|c<* zjP9u*5)`@M+84PG3-T>8AL?5aA((Hmb#qO?UIUSgKXm6w#3gpN8i0jBB-pn);K;(3 zeL*tDtzf-KyM9 zD*%pPaP|eMh1R|xQE&`{7~NArBs_+ZJGP)0M&?6f7)1yc!`S-1JYe5}NX8$mU31&3 zI$JrwLLd_CVHU85v1MP7jBzViFJf-Bl>w|CrSA(;2=Xs@^y<$aSmPO_((xdu?+X$G z`xeCLo(dun*_Voa-yeTKT?G&cYCOL=@`0KS3nz91RnRpy-_e_AWU4g4BX*UyvBsyC6pQR1gV@TyX7++_44u7MTzAEs7A#x7hl= zQ@~yWk&Hidljcgqb+%3b3xPJWYG20gR**uFZ^3=v z7I^jrsf1)-uox)&f*9RXK_oc)Qorxp0QMY+1g+??J$lZ$v$X~+1|q>8t^j)&TlNLX z7`K8ngM0()`<8$_45@wLeP57Duo_VO7J%ayoP9xRp|vka6dc1KM)y<@36Ejqjx8vL zk@?UVMiGL=Ft)yL4%l}flJSRbTWL~7XKMyn2tVFxMe6$|fYqb) zeL)IA{ss4aW5E6eWnYj=NZ%JE2KFt8(LEJJBC;=X#}?#WWIoipC_*srV(I%vfV~DH zLD~1Kh&6v_YY12jM1s8=0E#bc*%u^X+zQeQ@(Qf)>jP4b*7pUe1gil>uLsz>;Oq-h z3$A@ZVqour7~NArBq(yhwJ&nV7UWxGKGe4;LNMQA>-)NZy#^u~Kd`>iER*YObpQ*2 zNU(2hz>$S5`+{VQTfusf`o0!W@4{+drtVgdLXdC4eP0uJ_64bgWM8ltDEopK-BUp% zIQvq+?`r_|9Eb$$h^K{CdzAk84(!1}%_AP+-oUwGda zq!O$K6u%1K_yuQQkXmT%3las#Fo@AT6-2^g7`bB$ieY3vG=@=xU@?rX?<)iL9f)N7 zz`A1jjmpke39t}|1bbKn>|t!#7bIic3f7C%_Z0xEN9p^56oUKVBW>j_vHY44Mc((&l@)Q@pQJbfW<&0*t-m% z_`;TbK@!HTAiW^3!1}&_K)Y|z`o18QU^SrV{qY;rR{&>UkXmr<3lal+7sTkE3L-&~ z3$A^UJGLO-BJ-iXMG=De7F*x<%WqI$0YozX(2Y-=E795d0W1U}!M=U-8&~5QBxBqP z){E5leF60@toCK@ZUrd>`4-&weexUDcm}D2WM8ltDEopK-BUp%IQvq+@B0AkIS}c> zctCgWAuGeq);nM^5DE714X}r?WnYktaVtnO$TzUQ?-h`TA+;~O?+a21Rs)LP3*h(# zXJ3$7XzdFU1;;Rm(LEJJ!ebb@V+)F5WIi;8QG{SIjIHl`2JAZ!37_{p0Tu$0U=JSw zdl*~x1<4qH7o-xb1{A$3z}^LC zUyxdG?F$kEdl$s$o(dvCkqfSUkvq1a$VKKuBNs&o7P;8^zDvMf1Cj7~-vwYH5DE6} z9B^b|t9?N-#;stzNPXWKQ18NOUxw~hkV24e!F}H;@azjx3CX@-F;MmeF}kOMNO1P0 ze&2Tj*mEEf)c1wV`}TmvKqT119bgY*%f28P<5rMnkZ)jp-xiREA+;~O?+a21Rs)LP z25|g>voA<3wDtvwf@2uO=$;B9;W3Qdu?592G9MblC_=Cp#@6?(0s9U_!smS}z(ODr z?BNoyhp}Z}kc@FFST9oFw*agjrSA(;2=Xtu@0$bmFDUzhR6_c`ATh9SL5%LHAQF~+ zp(~;?z>Wfupn4NBW19jN1Cd~dCV)a3TgC%P7`KA-f*b+swZ?#yqxD)rD#2<%5fcG+ zC^+MR)Pn0xkQmsZAV&985DAKwgN7Gj3l2lTjslU4C!lk!0bn5z33jIsIDoKa8IX)| zD_Ad5f71i%&>xDBrD}}btssRUcY^zyF7PY^QVGd2U@=gZ0WrF#f=FyjM6 z&H|B$SyCIY7>EQr)dK8PY>6EtW84bT3~~por)UClDkzz|AZAHHD#2<%VQK&lQ*dGj zsRb`L1Brpd6vXJB3L-&adff0jY}ua<*i|4BKD(&_76OrAhpK=biY<|XWQ<$EdXai~ z3SjjY3{NQjFgyX?ztRd)2y!R5hbIGeCn%9ZR9*weK1dYoQV^qiDu_f&rV?Ohfk;sO z0GXK-0gHi1uu}yFQX*vmI|)QGo`B9MGJu6ZB-oXIe&K4Cfn`-iJ6eMHZ3f7C% zjky3;f5Y&E;s;n71t|o%6WonC19m4UjY3r32S+|g6zozEqkAfdL`$P5z|I1Zpfn1Z zemepd1Cd~-9sq?AwloToFm46u1vvxO1=#~q{=x8vi{cMZpj%%3TyCB0XY+tKtXevkTts?g&=o=7idoa2PZgv zf|P>OCrAt&oFGQ`R1gV{b3oF{4}k3> z?{?sD>3oDF0pC^bz+-s0^A^mY0Qeqr2LZ!louA<12pdEUk9Yopi;F;6-3}6#;dbfj&OXn{ni)B2zTfw{FdjtM^bV4@7w;tec{dVC0{|OU38jpbX%||=NIL120 zImSaTc;im8H0X>H&|xwT5+0VW4@$T}XB1FLr1RW@JY`+5Nx|08L@B>MIFkm@f9(?N+_>L$eFX#!~FG2U#Kn{N? zec{o~=FuI-;Q_ns&rQIiJ50i((^0^qGZ1u8--~Y0*}}4*LjydHJAm#w2c35FDdaqs~%_#7OMUfyR3AZLQle2M}&5_E)lrxWOE4bV*|pnDxk z48a;fS4Q@VfUYY9nf$^7a*ZoQ5#(r^-ARxW5MB#S0K22}_>0wC3=E(XqM*lq2YWQX zvGC}ug`7dt8G2$@03@&yz^;G>)+JeRV1W(`dVnpkz*oe91B=xY7Fa78LB||`jt2sr z9Y-LrZh!*|bUe!gq`-QB2&@M$Bf;jm-solko#oA7d4b;-bb#c8&Hxe6!QO~qOaOa; zcYZuP7#D$@-yQnE0}_m&+gm`vSgH!rxGM>wJ|CezP97RYFP|_lFdTP%1Bx;570BR| zle!%^pqC#We8dd8jT?OF3x5mfZZ@0>K-PB$adi8>@kl=DaquCtN3RSQ__(&t?sjlMz4KaP zLbK}|(D_jhKsNxt;qL)$83Y9a;x<|E=^3D-l^I@`GBF^|u!5hl0agGy1_yLnDdY%_ z&e}Jfr7u9Yv(c-m8(z9WlGh8+{V`8Kd!zsC09~wY>H4P@bP6+w4a#&Lpj%X050n;lyZ(V@Tj&wJ z`mylzW+V+t`k^nN=?!#45IDV|+@t_L{H+mmw<0*>oNH4Rh3nJG8Qy(DG?fR$lTIcZ>>7bR$u8=z&q`>}ror%y`$`01} zIt=26UK6Au#DQZcql=+YAq_IkqZ@o(2B>6u(T#8{Bu#ig z3*XMtC%Z0!T-eLX3pNp2r0_wEg&va%HP#bcN`Vgl>kN=+u6@E#4?3Xh$7@5_iOQgZ z`yfS|(m(LMOu}FtoyT8X1|4Pv%BQbcKtgawfYWVf=@$?1*>q5QltFh^Rzib8tlJlK z(Ap31(O3|}kN*AtA8rDu4gnt-*BSZ-Y)T0~$cAnPa8k0o0J|Fsbki9~0(>yuK9Ea6 zxugnwhcQeI=n5~88gTZjWdr9^P^kyH`vVk?Ke|DM`oRax9^iA$K6rF8z0QDW&~|;} zF~b8<-h<0|q~Zj6HXEpLDt+UT{LQ2J7^BC*XUraqAE3ux_a;JW15g@9E?c07*nzI6 z`q9k*I;f=E^#`bZ;ratnzy9ck))+_;3rPf^((s8#@+A*MX$U$C5R`%$nqM$lx;`oK z2dV64&~|+Sy5JMp7vQ`BirwUs9?b_C!387OClHC!Cm^4o_~Lj1*cUHAF8vQO7vfTs z=mNJKj=Msx-82O$g82ClsxvKJACwArLoO|W94RUN|NsBjBA^R4L7G6Z^rz+kI0M1W zM@dj6f}oUC0cwl<0IB{0E2{*%L&1p(Vk~GMBHRGbk#ArJc81>Z0H09D1+lF4Kq(if z%=`b63tAX?fEqrn2THwRe$fS~#Nrpw0bvh3EDx1(bi4j}c^Y(Mp6ee_LH`2esy{U+ zAm(lYWkgWKI0&>JD76O}*3HoTgRxE%#PsL}HQ_)dqX+oTYj6~JbY9#AYP^8bvJW)q zk2?r}lQ-xLyw(Gy(EFkyAZCCs4}8%La?uNq?gEbPTF|w=4;(vxg3gA88TD5Se55C& zR4D0<$)>B z-z$>skXQnH#|GpbP+Hkl0m>!4yxT%S6&1L>yi^oa@w)!lRSA)rjgaaRWkB*zXDy`S zDS;Nc(3A#kFm%@bfYlf{GdL*8LW%tB4=W%cI+rLIFBy{vX% z)-jJ>R$Vab_>0N)A`BDYDo=wi*9FNR_mTtO3+zUF}#G`X7=wuy_&Z!AtQ+q)t2l;e@&l>XS1m9cKa-c+kU(>aLU(wH ze$Cho{FW8F?jS&1syTt(cKGi2sm-=4E+nc7#hhJ&^8;q72ECm1JnQn-3r+W3J2*x zQ0hDm*6~98|Ns9l0t5g45B2DLiaay`?%P7nJH6o1>H6T9>vzyiUEpJ|UmJRWn(d&B z#dv{#8wYqa2F7DBJi)*1K<6R;ZLZ%rFLbzmhn!*ylD2j|QFIg}4he3s3m{BbBEcf$ z(HZ&zNf^@oJns4jG-d<3oYVCOC^J^*cDw!n^%qq^7J(X_3?99#83CdU{M%WW__rTW zc74%$paj|rK#p{e<~JOjwST%@|Lg-bFglOFmv>B8AcZ9;?!}=- zef|yZP?>>bc7bju@#y7s2Acp*SYCXvqE`Y^TKBTvHG()|=kNcZhB)-(`WK*7+{wDY zT@HEhpx5<}N3SU8P#@?4{h+xcaN7~o(s-Tx;?Pf!Pgo<}wyya7fqm* zHLia;S@VtL7>=_#y2~+uf*G9mU+YZp=w?*|sqH-eA`f)V=5bbGcR7%e3?3jWJCDBz z{0+V47E%X5oyUoAUN377=(ZWq#c@LP+gbZV4ecok0Q4pF6RL%(|bXe zPac0E?*_VR2v*sd?gNh_^s?5uL4rgu10}34{yT#2bNbQkzyapJ`OF3y+WoN$d_H_H?`9uRjt1w)U0lemh;G&ZeK`h? z<{$q{gdl@=pd~q=)=>5T|Nmh%7j#GloPQyzb}}LdQ|f+D)_O4!l%GLec#wNxNf$IU z^P>3yqX(#D1CU~hiF1QG>zf{#0}fXsjhvmgm`fP}$O21(AKDyf^b%vp{B zbk(&sBLhP>s}F?Ns=&y=aGcf38Im9%E(Og+g8Z}kAE>Zl)pQ0WAJ-qRK?jqAF0=g) z8Vvs70lMV^RB(cZ=|EoScKxu63v`=IFK?MQJn(8c85kgi-=o*{4aoIJzWx9IqDklf{};zTvN62)ag2%Kh1(Anh8F?9I2c}h zmE~f1A+5p4@FGQwjp4;l?*IQ^^y;%RywK$W1&AxuHIVDU5W(mHohs>O<%YP!92ESj z44?~uS`U=UBi$dh%MEnBVF`THG0YG)>gWtQy119s3RH-K+XUAgAwd!L6;v;jaCNhu zbp-hmHk2g<($MYt0%lJMbU5-Cs4#_yb1;AsfT2e(D`;{Mbbfy?YY)`e|6gFn)cZ0O|vIfH45e?OF4z9r$q5(Q^+Xc~31lM2$)i4*XK?OxaBuGQID=aaCoVORQ z`L6@S*9maVpB<2WEd$pKPV*qm@o>!tpqiE8nzx~7z7I->V4Fb~wU>Z2gJ$p`0n-oF z{OmIZ?0FM?|ZXDg6qCAiH&P|Yjhnq5#dr@}QWz@o$%u2~kUIR~zpA4RhUTr+4C z8|>_-;MyA0e0X3F2{3)Q=1ca-0rncy6Ne-RCU9~Peo+bz9#}d$1ycZOy}=y!2X1}` z)co_GV8POcVtzMNd-DSakmf>T7!qv@s%?>$i&V$-%;IQFf0EZ1odlKA@YoXe&e1v&@K8p4UaP6S1*m|Hu&!d+W zbSEMtL6t$ZPlapGfM|!dZ$coY#6O7DtS?wzvw$iaP=;m%y9Q*O7~D1bP~+U-#;Kwh zht|;sjdFr+gt`H~hy!{-(2G(?1@{8d4(dGqLP`;}0VE*K%Nh8v%7ax>;YVgQF1|kk;U;1Uw=A!=sb+nmVW^ z2HpAusu4jJoPmhEU;wLm;nB%@NF8b=q#Xh3Y_Lv4F_aH9m&1At<}`>pWLH2e<@4wk zO$8Ybs`NSqJU{_c0uqdX2!8MY3%+0g3wlEYLASv}z30*V1{729@n~p7d33Y#gVeSj z0NsTm$_!%nvVuF#mWN7YeY#mcsL3&Ohu(qQ{{^}w2GlBX{D0xK8F)+^)@;z|X5FU- z3ak>Y^l_kv=s)Axx-H><6h95{U&dUT5#g4n&R=Ruu!%R?n{KHaQxAfJI0g6`!j zh1|W;c^u@mFmRZcN_2-l@#qF!VFXG>Ab-Eu`0xM!*XH2RFO@||!v>B)w;F=0x7Whp z5pHl~fd_dcJ>X*=kb8o_G2zh(O0K>aTtFxH!=eNf!$?e`tSe$ zmn%VKL38a5hEm0D-!tHO+v=DUc3nC6cm*9aeSbhO&6heo;ot^&v$Ks4+kRy@f z8f9v&n{|x}Bw`Fax@Mwj_TPSEc2xAx;JaWa$4su{OWW)}Z{Qh5r4Us~d+MT6OpabRI ztYVg+d{7$y;`%FaSC`KcR1&eWgD6B#*cqI9Twg%O^f|a0K)oYSom0Ydob|i~q)Gf* z%A=e0oCTy(DtrC^zsGUb-4>9{1@Aw3bhFL|DQP`WYVe|xAJl^EhpO@DW}N_%>OB6! z0;0PXDg$nzL#shZnbXZ0YXR%{p=VE4CkwEjBrr4T{NMlogKqX?Rfk$s4e~W;F;D05 z7v}|#2P61k(WfTC0IPx_4SCU9=AbZg{Qz2J(aCxS%wxR@qB@Vi2!@!5C_3OV-WmF) zn{}Bv$ZaJO;E^uKd=WHx8iJx#3{$)cdDaG{SOn!g{+3Qi`UPhxM@Y{Ji_bwPAG}WT z=w{W0y0h^mxE%u4<}42NIcQZ6I5fb;0O*_@k8al2W^xQ3pv#y#Ss#FyU|fC}*s%@5c+4|-gF<ljHuuJ528Gs7nURFk1a5KoGm(?B2I{rchl=?5`e(-3{{lN$>)JmsA?r%gm9-J~d zOP_!eMsw{Gh6*9reb}rgOyn3mEDzPl?Xrg0Fy97d125EuL*R7F+6Gby8r%hW@R~=r zXswAHL$~V_n6o`Vp`!Q!)clp(WdkuR2yWO9Fzfh>(wCq}dIDZ#;n8^wr1_agH>)PH z;nzL7MHNsCzv$5kxklUL`$zCX2G{^5uSYklDoC%T>yIM2U3L&_Z(GCsa1mwAI*>0!AmtdFM3>l=F#~{@dCW%fG6;}L1U)izymKE z>SaxWTYLe`I{u;+Y%!}RNF{RMIT+&(Ja>pMM8QUYI#;{Ftm7{%z$qLf@ZNw1U}1)X z0`IXAvf+3G?*&LNB=9^T*3Pqn1>O{>wFjY@0ZZV4((Vt;v@5p@+(hqX4TKw34>ha= zhhd<*_CO|qQwAtmJo4zg@clw3~;EFAIV~?Q{xm{rp!`8zMV}<(R(o;}?U>b%shOosC zCtCbK%HB>;JCrrR02CpvFN&l+x>=n;oNiGU5CvT|Wa;{%NN!gg#BIWGw@rk4)C}x4 z)?c7ePD|GZMdBXaqHjT*Zq|1oitz$yQE-vmu6T$E7tLWoRSq@b%M-Bg9)Me}ppqNB zMCAvle*|idgV%7D_<@@uAQ{$vkg=ABiXba^K|;JWAfay7S`fu}!o%`Vk=(9ih<%B0 z`}CpqwLt6x-QW1aqZ8cO1dUUIib>E4PcR!aN@?l(qC{?2I>Z<$xG@G$V{GBZFnEC4 z3=orEfGhG&q`UwLYmmRd6%=T(G`N!kSs>R9(cB%xfpCfgXp-)SN4F445b(E5gtQyL z4g~eJL9>M2AosKO=z-$!P!VW){(}cZtO6v~&07hgK&x6I;SvbGM-`&N4I~8$D})%Y z5lF0?)fhxUbja_jf&_uM87$^f!KvW*3#-Tf|06Oz=#FO4oxI?M%8-V4FY6^;NJF8^ zg9HI zLDZDM)x<*8On(H*{zsZ$FeTcFE zAn8um53j{Mx>@IgIL!wbJvv#ZfSBMW2Wa@^u}3#+6G#NKc6|XjWO$=YK!FYJ66<~d z_i`dYD!N$%K~(F3Qn_6V!75n|z$!tNTp2jcAAb@25ELz}>JXLuEgQhYj;!_|{=pZ_ zyOx4A@_sjlTXE_=*a}{dif&dm5Cyhk8CWIjS+Giw71mHIK0E+haYq~6&*X0jfLH}eV(Fjq=-|~Txfnh(W zXZ9k`2t3*WSwvsY1-?jHfPvvPXbBRiRC?jjEvf|42Fk>sW+mv>+zTF^tbet@k@`(b zj=>SMfRw=zyqa&P5(5JRXm*&vqw^SKlEm8rWCiOHh=#o&s`+WL;He~yrV}qYYa%D+xNvT z(1a_rZ*{{Aw3MO}v}PJKckaIYT@@(g5I6C>!}E6{}T3y<$NJQP7o32u0Fi}FL1 z-GE&A>k2azeARF>hM_+-!C~@BQ;q>NhXoD-S4QY4#|vitzyCd24^&#dc&YdIKWN31 zTB({xx9DMrt}P%6;-Q%)VCM=Pcl`r$?rVg*d8dI?b+fi>$}#K$jXpv>xZD`51E#Rs z_0MbB39khvyyl(onrp&q_6d;bnHTJ^F&AiqvYXWxWYQl{RP^#18j3PN4gBy9oG9Hv zvVS46!U)+*5LrWz>_3R?R|B}-EfCqu8lWM^AOA~KLE{1-PU`{Co%5oHK0r6zFZ}iY!Y2wrla<}9y&xHI1H_|Sv;oBFW^Dvf;L7$#F}B4EowYAI zOP|1Q9qx9;XtP>?41hJaKrJGD4N&m~>rG&`h(35UmwsRb&GSQae()gJg(}JM=w|&7 z8nYy>$7So$ZMr}m>KJVeL?l?-x9jT|anq+jfBDL!W^93GY2Re|hk)KLqQL zbi+0rfi}~4cy!k8@aSd*kH1>G?kI*%Q+)@OvfZqKAXkApOyG4itX?2)r|XT^oF2`& zFBm;8rb5QdtzCB%y#@EF69(G0hVxm0B+x%fGn6@2O090+hqhQ zFMC-_^gsy^RO%TSfmp|1Our3E!=laDG(%=#PJl*d1HOZlvATejg+4%9F>dL4qEv1d zXvc|1FRKXLd?Bd$<{%dYlSAoi^6VSm>-LGH;y(kJUcyu#(Sh}7lk=tblu{0KLX*bl; z2C${9K2VLI!~?o*{DeohXaZOa)gf*lz!N=kyPO~f^1ux|1m2@e7^zdPM`4Tl>zM> zcmVEPpMVrHA3-Y!EDx8+?Q(}0>I64*0o2e`u%WIGJgi+`@V93D1zVvFvEl_%!sv9p z;L$Cr1(tAq0Zx?{AgNN~Jt(wF<#zc%?6{{5bNCdf9gJW*M87J7;~Yivu8$xKT`z!A z+ZIC~$Fip-65QxVg~FS_-!)8EVmt8xYgL^#r^Y{i_L{ zi@1Q;Tm@S60G_Rfj3++~5EIA#E#YiwZi&;?d3eSRRu8!CChjh||q_9YjIWev#a+R*1#B)M36&0LRJk z7k96Ke9O8Jq#Bk7r+_%!tW!Z0)CA~MZ!~Dm98_l9d-?xAXqiB_XurH1L$~iAkOU+G z8(x7zxKwUeC&W%SxScW3T$>5DQ`8is)AbLitpOVTh58CcNC1Fs_J`OE-7usI9t%O8gFUATvK=xZ z=fQa47--JK^#e3ik*2vpgW)i@lyG@8)`D*Ct1pAba9lThKI8$kfqn(lr2{z(&b z<_2RK$bttD3yyn$W{*qQL3$uT2i`lpQwbcXKRg)G2F78r3b&ab*>KkvU>l$d9w0W{ z2QR|t_Jz($gS*$Dt4zUB2{XPEv_P7Fo9mzE7Y5Bg%=p_UF)%Q69`NWDX$5yOds)S` zL>anSm_U0WMY%!M1LKAN4EioAEQfdpN4 zfVyX|Z9!Y38D5+1-~hGtibh!$Hf=Bz*BL(yfz@`LJNs|;0hQr7=Y#YfiifS+RO<} zQ!kxB-9ON95vWWAC6!LsA1@gpf*+taVSnJ?#?awpcF# z8NA*22LCqK`<=&MfYu{)x?TY#rwX>_+A9o|j-V~(yVgMrGe;Qq?f(D&$j(SZb;eE( zsLx+}ce`FW_<#kp*ZW52MNUvl7R*_~Wz`9;f%&p+0-L1Z*^@e0BW+E#4u8p6iF#g`lY8-^Os@ z1q=VS1I-Wk!R;8h$32oSdi3&IXoxcKZxi8y2Lf)TyvR!7#vEg?0v`$hsz|!QdyFkz zFVwey1F!i7BeX1lhnhlX?H}+KOwisOP(Qxg_XB7jdFQ##<1cp0fyPGor+_x`!*zgW zY2YhxJUV?J_;kA7aOw2D0!kYt+8*7tp!FvYJivxQ*4y~>vhLzzVDRlc=-CNg7ax-I z@BeE}97@?Gkd^Mu{RbZ{hK@#bhTb^t`UPBmfLe|v?BKGl6uQ~ggoA;hvGxgQ`C*An zW9^dz3=9ku z!Gw?vVkj?62w^B6ObFRfey||SP#%z>(3s$F1y4JJ_MtiOKnlkn z-3;BK9}d0};NNzs^O8p|&s1>q_lj!hiZXPI2sS=qU|{$Uxv&1i!518${Yl8R45J~q zmQiJ3_|IT?u-o+mx`GEPPzC=PAPNq?kU*)Y_G^F@@NYW+(*FfiU%~6J#jYSnfV#~; zJem&(fV=|9ZwFYqK@E7YC}_&b6~q!jlIMWSi@@b2kmPyb@)B@)8IXLl>leo6+AmzN zWw&;$3=E(eTi_*Vb2=zVf?NU)VwBhsgb5*HM+hc_96Q2bL0Ig-yaY-|B48O5Lq%ai z2t&nSLdb@Sg9TxRg2Mrt$M{=oAQj(_ZU+$pQEsXY3T=W>&ZiHKFx*l8Rtc&ASCpSo z11rE907WTO9uegVaCsGwJT%HVU{UT39{K|( zDFJvgQGx5x0O^66DFT<*fXnNE<(pl9NW27HVGB(%65uF8iCsyU5F&P^U_!{TD-9Ne z#V#yJKuJahEQ4aGEKCSts2ofP*-&|~Ak0v3(uWr1{H@>-E^sL!LmW`Ba#eSltZHrkz}w(FCxjHMK3hTu)~s! z1U!@JKtl{vN$ zHUOthP{*s%(e3)?<$X}W3u(pwfVE1xT~Bm_+YtvJ zFm<|qc)10%9m*BC&H#Ch@j^EP_<*AiNR&JP zgHA>QNq~$8&FjLtR$xhFE3imHtZ6>P2(MAmt-{cRY8?}*TTrdTkc3&sgvUBGO{mr} zv(fLe<` zx*5=$2{Rxi1bPZ@1eGiz;Jgpg1ItD{uwHN?SQ{f$8(i4S0F*Hpq3t`cbr?+>HLzAD zs8)EJgx>_Dl?mK1{Lu|sABWPM`2fk2=(=v2Lv?kY0+l`B#v`cB!UA$NYJ+GUb`z$9 z3IvExK@CulJ`CR$gSBG#HU?Z{!+i_Wj^Seyuyza|%Nj%74stm}GrISF$$^!i3qLjk zm383Q0qFx54xsGQe1HSwepG*N!*0fW&^QL%-(Y`V5{swEu@V5I=G3^0%Gr9+vuwWl)hs(gW-ivSI`+% zAStvCBuEIY0|^pBbRfa~PmmC#`*;A%2c-iRh`FF$GazZSJ|sv8tq%zjLi8cQ=75AC zJxGMP91wHgfPx$pb(mqm3loAg5J83@x{+{mA)QEsxjYbaUwCx8?toOm7k_lRKIwM- zf?iO+7XzpLZr2Y7UtlEIOH%NZ+3orUOOs|JBtwC^f-lf>#8gPX0&IKvj%8Q41cG6-k9K@SZE3}?td zoN)!zYgTB^eZtsW`-FkNMV1M)O78)>%MOS@1LzJGmo1h6`4L=@b-Uic5?gW(KVF##GcMjMaOhdJW`7H0?{ zJL3)(XM6OKv#ZM>+@B=6xfc*s$200Z}V#9sH3Kc>4jScQM_U_ORAn6+*Banv!KY?=# z!f!}P8Sb}pkUR_b8@ANEN&wYwchJ*PCn(RN`wfw*-+&wj^BV`qsi0~A?l(@T2*PiW zc>z$oad(Hl0ZCs08G-CKF*Ls+uK0$IJ+;7;j$T@ygzhUH)wV)h`?l)Kk3@zMY ze&Yc-6;!vt{l*IwLHLai9&h~Jp)Zg(h7i^6+6G>{b8uG>8w2QID046u)b6SQvyQ(w z%Qo8Xf+f9yYj>4{iVP7ZaQeV#cSV6~X=wFupqZI1R#YY zwszMCQ0@jf16xbuGPp{HIs;p~YZGLc59ADtmIi3Pu^Yu1c-mc=FlT_uG-%-g@BRBA zI|Ez0OB>+~j8-T=WWEAcO?WgPz|-z}1S$_ep#ds>(4BD0O zNP&BpKOnI|rN$M=;gt{@Kn*yk!(oXEWPdb77UDFp!(k~3Bx{Q-3wAg-L4l-{5K<6_ zqa-D2wV*&A*rARd^04Fxa>p!)ERqLcX%Qq_gDea705~avq!JNQa1S67A+?%GAP;<3 zL-znIA%om;6C#V`0az*q$?is$1$zLTh(S^d5K?dtz>+Vxu9JYbd?;%RftFuDmboAf z61l-p!V6wz((NDtx^x1%$AA+u+jFDaL1Y(bnG|eWk)=3j%RT4_{R<2wY|XV_{)5gL z|MK!CWbq1keP`=|((rE3l*KO4wj_^U-gNM?NARMd$veRdW1y!TLYGCg9w;?LUi{+- zTKv-wS|S5laP?x(6BfulC9lgoxgP~N&1H9hE6|8oK2jd0Ey#e5pQ^2z$utB^d4IZ7f zGdfGBcyxw#box$!g<`Mk0+5T2yFQTs1;cSy(DEUM=GqAiu*tIrETEly6aJTi?hEJu zEvn4^{pWwDE9fqk4v$XIu`8}Opv#zUfJU$O9q4rZ(wsX1G*Pc#C*EB9#i(Ae+x1KH z3xiJA10bX8)Lwf)Jq}vWu&W9bXesbOYk$nb@Y0xtfdN@f7pj_MkQ#o_iBX{7fh-I| zw|xQwf8T2GKEyA2C0fn3UldAIkd16cHBta%6 z$W!11hhbms7X|(n&?2_x+An(iE#E=su(*B!pAXe}{Dtf)@LF0F%bQRwpZti0;iWy; zu^$*peLZ$emWcf91ZZa}-x*h@TLp{I-(wcc`vWn*<(CsdahdM7F z{K+)4^MvLFh!ShpC;WX=K)OM>1GJJKd{M}*4zLh!h%#vPHMmIly&bY)_J9I-wDpO{ zj9s8~>e0)qk5Cl76Ptb_qRaqa_2kjZn}u-3p5qJ*F9pFhRVY~hKJblIoyT7k{Rd68e`&7$;$N2y%3=o? zJ!b4W1o6lX1$aQPYz8MQ=sEP5m-5uX%Tx1vEDYeiwl5ceqw!0x2ct)KD5wDc0h!+a z_Ybr={0l=pXyN>fU7&Tu9=*H=5SH;Cht!?jt`k5NS2w8i2UkfmpjDE^GzJDnS5TAj zwH@ei|88GUJqeRN2U>p#iP;||pv?4R7x>h`US4*D9qYD$GSe4$@S+ZXKnr7!Zr1~# zEo+^w4?MbScX;&rUhwD*z2ebZdc&jF^?@g3q2+TKpLU)1ajypppc1++8SWxi@s}?T6PY-L8L- za!lu;eV}4(Ke)y}bq8AG!~FqDCM!HTOBZ-_hR%R3GzVwIIxEnM?*Q6Bo*uLc0(|OA%YjOi_`U(ku}9$X?GAIo%Maj^+jT~# z>x1L2pcSE@qY**-YEE>!KIn8k0*C8@fSZKX0HG*d#QhJ^}3=`M}ui`o!AxLCrD` zunR%wT!3BJdY}Y!D+!3*?V!;7fU)&Jsnm;ypd1IusXrJ>MM1&O@Dh4>k_=r)%AzRaR*Q{2~-ciU?_pCg#g`R^?<)`Iw*sJFS>x;jQ0Y1>JhK9EIiYm z+6YSH4?JeaxT{4rg3Da+1s}V>i&T4g{SeY$H$bGpM*Z#t4Ss^G1)1&vYMw%`Gwcq9-g5WD z19CA7SON4>L693~crdzx68#Fuh6~h`1-hgQ9N@3zV2RMu^+yT((7Y_Pjq1&B1Yl>x zES3iO58teYXCsE2(De2ilt_OZcK{ve49Y-=ok5Tz?m^9drO6EG!4=)AXKy&RA z#!?yZ8vYXYU7*bwuUR2SP;|S#=nUX^4NBUe6LM~V4!c1;IpzjzonCY832TOE07cW$fB*l3_b|b$Ku|P+j|4sL`Ui9{0eG`siMR)7TR*rM zh1|3Sy3g@Y2|Kv00=-t00aRBDHveF&_iFyZSfbwigSEsQcDW?zI3H-hL(<0fqo4}x z&ud%IvR+7rdC={^0op$J=d}j3cK|wf0MvTG&^;S+OyvZ`DST-A?H~t?x;}tJ6Qt>6 z2f2{~H6ZgK(F(eM>jtR0Y&`%@Xkd1y>yOu_FNBhz2M~e^k5bU_M&PZo!qLzZ4qk&g zPd6Y1;SEp-gKJYrM%X6+Dr!JCJ%IO{Bb_>n$TQ%E3+P&;51=F}Pzo9-`2f0k2{cdw zjXBWuTM#kO@<&Jrp5%e&E>M;MWj~Nnuq!@XK}Ym4)`7Y&prQ?2X_sn)iVu)CA=^J% z4wQmC4wCoi4PXLGLa(_&Ig%58p#aDd$j;y&(B5m!e~e4OFcpO(D*`pLc6fA_Zt&;~ zUE$H`yTGT@bq2U_>IQYKKt0JB;LU`fB*)(}4^-B5yIuf|SAaGpDS&su!uYD7rc$Tt z9Z=^Arb52c^+t2;4SD|7<)F|94d#FriGnuv!_TVVZvh`d2W_gpw(~fc`T?{R5p+}x zqeo{b+`4*?86KRVx(;^A1%HbW$VH8{AO8RU&%oc$4&p)F*K(j@J3)iGT|a=1>W90e zRQ=^Sa9jTdNEnA>L7h5KUD_S`2GV}(4!r|n_=0vZZSd$VJp(JUK|APL50q4OyPg4E zoY3w1r}=?G>jBUSC7>z*bi*7dgm-`vfhK5A&I}Jt(8*$TDD~@XP&2g%UcWB5$imR* z3%>3KJYLleS{o+N?RtjW_0MZ_EQiq`HG_76s_A_QvqCPiFzf&|^`S)$^7i9SU(k+5 zSl;u1#tyh60curuh92-}Jpelk9n?$(rC9!L3^om=pgValK(B~scKyNl65Jo{cD;aT zz`)W+JtUyv8`8j8qq3yi^$jSQ%Wqu30i)`2)pFA4zz<6vPHJ!S##|h zjyg54%GZ&ghzHk7&;d4(BG8$SoUR{Wn(J?a+SH(Pf&?I%R3Q7`K;0M6*cdo(3xG;? zNHLCb;S{uhgIp@x>3hcoGM@JW6p@{-ADTfu0e0|pLC~z*>H4SJ^#(YDaDuL8y(3qz z((QVu`GI`rA<$XhkZq0deVm}NfR_uwDe+J933>3=KNLx5ncVGq2UIR{9IXAp4!XAz zR4Ueg0vYJ~2-yk><|df`QSnr zeE2v#v4IxeLBkBx?S&@-P`9_+6^#q3(?JLJ?EvlXg*GyvTl_!+J>c@{M|16y`g%~c z0N30d`lLhPbtb4==K2A;kp9H z9~=h6WSpN+RTH3D$5a0A+!0(4FzFKRUtG z2XI&P1N=5|NM#Kv$6&gwz`@k*AOIdDfb6gR;n5iYZeV+KgK1FxD4%Al$kK1#0$sW8Beh|`b%fcxyPIlEoYfDY7i{o&DA`{UpL|Mg`k9qjv{ z0vR;41sS^FKLhRXyu1uf=&m=w_xM`6{wM}DA8x>!55?dyaL}ob;MOK6eHValY269B z0LPX$e&8qIj_nP|$&TQZevAS6W(4T*HLz|2$YhYu zc0taq<-N)aay+;nCbJ0Seo$5b^*+JvMbM3N@B=INgYLn4fs~D#-zap}zS#vm=(HPb z(y{%ZzSoN<^YQmPLGuBS5a>7sjfU5t9k*Z$!ATme+X=th6Evm*>cR*#KLB0G0`3Ta z_#DtvJ$aeI?g0D9YawKyuN2gY{;?|+lxli;AMwDwtho@i%Li#uf{J6v$s8WA>;jGq z=$);ppbiGc0rOx@?y%qm^{;fG9GFXGKzz`(ouI}8*vZiLUobe~xPmiAF`D77zw3GzjZUGW=V1breP<^08hEoJu z5yQ`;0G&Gk9^3%8TUrm4TE6H4wf5n?FB6PB1iJAYl7ie$KvU35(5;4$+zM(1L+Yk( z2M*}Pro5Ki@Q616rB6^@g*@ia>j64l6*Tq<8#Y>|1?s|v{^$g^>p|gMs)+280#K2H zaLJzIERaDzNbI&AKvfOS`v}#2Ak`|6z7wc(0`ohlc?2pDKy?u)$-IWD0rik!YCvpo zdU1yBY=ak}C@BUM3!wANkrIdR0}t>$chKV}t3gwM@Nh=CcPbC$J5bvX63+LIfy*jH z#srTPfa0(-^v(-&U*s+xv>I>+pF{&{VS`dPI8PcvP5^^c_MOLH@cY7Q0&v$Fpgnc8g!5>QvGlP)ZJqNclRKLW9xxZlty?i$P4Z8M!57b=-j~TNJu(y-~id< z0!eG24G<7xI*-5j@dq?90UA`dc0E%I+6CC@`sXzpc%%n(%Op6XfyWpxKrlIMJ+U>dp)Vn(F3c9G2!J{|y1T>mF zdRaA=$$+ms4FjFjgns=c#J*sU<~QIyjUJt)7d$#cPjvbo0iRaNz`$_a^$Bw#+gl3LINCuAJ>1*{mm0Pd)R znof|AJoFnBYEQadk661tsp9}Q-yVQM?FeWJ13Z4C4I2DR1|69QEuD_PI08C)4%}Kk z;n8^u8l0Q&{`ucr`{aMAD&znu8*Vbo`rJEEGSWf>S2%OBLb}l>OfaMpYVVW^+8gM2c)$H9;gBzN7MSz&1bii$r_iyPm7MjSjk_ku26_2}FRxrKKs>4-9aGNw7UEU-IxMdqu|jExmvf|K>@rZ<9KTYXdnTc)USYAcplAQv*GPUIbH@( zNZw!oPsf4sIA{qC=z1m47_Nf^Xbkr?2Q0rdyDBg?*DA=>q0Hr<1QjI}@HBVfAPd9G zP|$D~#4(_r@xBAiKiK%&nR(ETKXPCLFK7kr02Vc26J_uK9e;%I1gITTQr)~4E64_t^HLPRSE=$z!%1EuIDPee1h z2i4?qkjZ~I85p|v7Jz~P5}UZ90iN$W!Oa0-L2w`lywu?WhcPHKc|fws3DAIuPj`R< zxv}l|{}QM?d3lkOxVT=o545leG>8taKD0c#r$U?qPK-X?t}mbq4UU0(7LNZffNG)( z;6r=BN;h2A@&OaH*3K6j({p~sLjFVpx{Mz(mrq%+j;y&zCQ!QYe!Vi zLUsMM1mEa`FJ)HlWnp;vj~!$>S_Xl&3}6}EK>*}p$R%PJ&Ym6&b2hXraFy@?EmDBy zF3_?9Xkp;ndC(Eu$p@9=KR^~Y9}$4$q5mbW&9zq;>OqJ8ff~~Xpxy{G133@WqI3O# zloNNMWwLd9K=IGcz%T)P2ynCO4-IJ0!@U5GpB`ICp9h;{X#gx+Dq{`N2ZjvL#U9q| zsQDGNDiNu`R0KI@8EDrCBo%^>v;#*pWUOQ-sQF4Toq~>|gQin$h*{vmsv8nj&|&|V z8^BT!F{JXX6!GKuH)lk3lM1aOgvuvW5ZR z+}PpKT-(7=qVLfi+Tj6F1m;QOKpWFJtV;wT)ZfJQt(`5s~$ z__`jbo905S+~Cn%yMckfr5)sj?$8aW?h1e?TH(~MYN!oSb;8MKuHX&(7*@PHSID?rT* zSo`Q5XuS`-BxC@0F*ksE(k~N1%W-P2{4WJvWVrz}qXdmDdqW0>*D_G!VeUln1A&MP z0!=?NPJjnm2`H(93k{UO?G^(CE^5{R-ExPNb&R*OFuVkn>J7Ee8TeZ-LMlM8QJ^S1 z$bec_f>wVb>HfNnh2bUmW*6*9Cka$mf+idx%PalC2?8|#2nuG<$QLMu&p=H{Y!E#Y zJi0?c6O|L7Va9F1!0;M0PzIW=M5#iT@zsD0)K4K}5 zI`OX+R{^qS;i=Pyv@ciIaSt|ifs>3TI(RVd9Bcr{RBh*tQ)s(`hy^*JvWGcYiq zTrz=NV}h0jBL#fTRu%?GXBRx$4O+zvZM6h|?sEc-&P#Z9UhwD@z4lXt!K3pcXcWJf z^&*%9X+?ntkY7vy4K1l7+Cc^oh3laTL1VZOh3UtkV`tE=S@W9&l;bZteK)vt9`Nb( zUC`mW2E6_nwoqOUltDntU_j>^fd)jtvt-~l6l~4n4e-pV04T+QE@|Q4=eq{HaHiXV z!x3~&P3;Yj-qLFxy`k4Ziy1+=?|!wgUZr}oeXKH!y$pz@;>G?sA!4e zZpC4cF3?mQXhKul^#!;P41K`A&GmZAff5VIX~CfJ0PrwJjSwi=mR2FBD{yguaJ|ZA z7KYc^paWe&xf5mib2%uRAyod_#KQ2}5mZjD@#*$mfHBknZZryjdyw)VS2iCJcnvx> z859Jd1*4!c2ezUJmZXk=He(=`gm(H)fF!Ag4%Z&=GDcXE3Sj}aD<^n>k`!ohEi_4i z#^n}(YJc!;7of$^paCb)qFe@52GFgftp~u%YF2=kWE0?eXaLo#D}2d%~kP z^teZ_>kLqQ|1WI_>n{Bf)?NB1EYP#_CnO3mQmiGUQ)U2NY>JxDz$q29Hv=-rTDcLH z(A>b=Bc8z9UuNJ660#t*^*|}#3uo}5^Pu$~Os_#JnV~B>Z-CB|2BnVUF9Ja-I$d{o zfLAaFD0uXOh8)4EX1N+TtZ#r)=>zc5_w^^ibs6|d68_c#M${?-Ja&z6=A{iR3@_(H ziU3g02{g+)!=o1zH(=wR^Mev)i3k5S*W*}ge}qx(AfrOSMuDq_6QC2bAxVD5G1ub^ zFF%12+HqG7 z9w@bdL=U*r3F)gK9Ko~!Jc2mEqdPzWTt-3KF=46<46l=+br!P2JitvQNMt~i9sr-w zUuunP30k1dU60k0k17ldFTs}-cDv31HL?1a|NH+R5_0@48fXy#&e{lvd#-0;cqs3K#D938#!{(8b2! zaYTsKD3dK{R{O7GVR$VMwih~o4l0O1qa2{M*jNgp#y6l10Un*T9Uh&f4IZ74UQ1^$ zXq3gJvo!}Y;0PKh0}nW+{0Co~1uDvqxn5=PIPMD44x&Nx>L41DB9FU*t5Wz%8&De` zHH+7R%GexuWi)LqEQ<$&3q0@u5@-buYpG~A*cqTzq+kYUOaU}63RVIdtcPs8Y5wtt zzx5phXcz|MY6jGW~le2-q&C!kyh8k1wlV#xacA3SL1*?AHv^}`3|tRO>;2A!Z4G=H#Ff(Wat;8vS6 zgDd9wEeA^2kGnqk`~Uy{=Di@_{x1~DVEQkAE2vC@uuBCznrkH(N1w<&Zb9-Fc-MpjNoz<78D=&w}DzVCB`6{f8Pc0ozdVz8ax$umlae<^S8_gH)&i! z_4$yI#p!;||I$ck^lz}v#uD2ZEZ}|vb z`1Ay{W>o>~8O9O`FwIsX0H&ErKodgEKe$jm18VLdd8T|7EFeu785oYaUS)*19%3)3 z-~w%}0Z%`m7at2j125ny5B`?3pjrdeMgz@XfmRxU7N&I`0`HiDl-QpXnLxK~qLy#q zA{!B_uU4`!yaY`&d31-a@BkSDyQBit*!TcmTnnoIKur{IQxr7F3f^J^4zCm4pzG;f zUpRu+4?u=AVCg{M^C!eS>zLfQ}>u4FZ5}xC1Rcf?rU_ zzs>b(%K`8t#)@6Spv>9J%lr=16#z$QR0C+g1#Ft7`3-!TXlLk}PTv(iovsUfI(-ql za*n&c0HsRkb`|i>8^~Dk4alrC=vHgcWQhi-*{BbiAN1)C(D3Lk-QWYNs=8|zbo;L8 z4h6O9cff|7jywLp^s*7;G_Vo}4v*#^e@b&2_TMn#=74O{#&KN8pguKm8wc86kgbG7|&C z%WiO&e+}A{%mh$5dj?*t?_bWs03I9wdlj;b@})LJCnM^lNEWKjR*+70NX`ZM1yqM^ z0L>?XkIFsKDe&?M*eh7vIr}IlC=K(s?qdY)h=F8ekQo=!(t&mY1LwU~}yXxl+Au*EQfBMW~**hU$p}%UBp*CV{pM z*RGI(>S1m@fU4&@s-7N@9zB?&!7a~Hw{F)JoyT9y23;Npnk@${^}~`y5#jC*GUO#B zw}X<<2aisH*P`G^01du^E&_D@&<*wzXtx=7rD_Ri$vmh#&9SQ$l=ymi_r8MXB9U59 zssas#fl5E{I;aobp=&^Eg=Z-Vzc+ac9|yTC;W!kzP%f?I#! zHEX>f-+@*DgH~5CFuc}l4p{z{dmu&4xfhsTg8T;VbAqA~ zwBxWh6tu+p1*qka1!^{c8V;ow;H?IXeiI|8dDMKwpcSoe4z77Y+e{!`CbuQ93IjB* z$iL0?Ov`~1BXA9jvK9nQ8$V3j>uk`fOz^fR&{FUhpdH_!)e4{iCQt>a>3RXY@`1nq zKV*OoG{s$lVl=o>j&RYI#ZVW$2CYN}EhvHqC_GX?GydR}Ea1f&CtNyR54d#t?&)wn z0?n78!N!KvBal0J_*-W&GB7lNt{85e0Ld^HATf3V5@Vo+7@$lI8TJD$5QP+quw^9R zURfX$IJPW6=AhQWppe@KDwZHY`gsx51240{b?^~}m#QFJduu;<^p-yN=nZ`a-uDBp zg|isCefI=*`yL4VUwQ&ur(q7-n1M<+Tv3Uzw;FCQsME*4&GmW9fs&l&S^<_ilm_cj zP&tCo<^tEY8{7sF=&b-X8lLg*12r06xODsOap`tF;L!`NcW;0aAb1F)@E^FRBhY%F z)Ck;&e_aQzMp_S)D0zS?qh9a=pBvC2^8|1O4O{sd3=U*%*B>65pxdBpPcZQJgU;9o z1umA7sKwxYOa02SPxzG;tX{#Bq6$j7W20pCDqt z0uYbxS^I5TOF>KNZa{ZoC!PT|;k2Au&S-JmUeAQos@=M4{S*AL)2*Z{JF)ZiEcW4G%cRZw@n^+2f~*fa+T zNW?z?6;hV20=4GIH4bPM*S-vRi$r%mc*Cp#1Neq81JJr)P;>94CAc;52fPlv^*{-V z5ujb;NJhMxhusKJRRHRzRHSyhzOi(b0G%!K!qQct#J!<*4nqlaa20f}2sk|84nTG- zs2h!BRsB3@ws<)cT!qvkxf?u?4BER18omRElt*`{0A!E|bRE|Qh7vxA8gK}10Nt7f z+QAJGQ~(RE01KV~SCin_I00I_)?B-Tp@bW>L?4ukc7W9!U?|~)#LWRvr4LRD@G%8w zf`_fmhb{n%jz?b_)>--md@_J5bk%S;vI@`|O_YNdd_iN`(BlaTF;t@7-2^Vge(Yob zEtKdy{=$#}zK0ERxgvO}w+Hk{2WVddai#-k>>ut2c*_7>3Hcs@)N?JM;uTg4wI1Ma z-3lsIeUEr_gKLu;j-4lVf<`7l6&`q9;x^EIZ;;-7J!ly*c+vyB=53b)C@y<>?>&S! zudE8eOT$6=^8*9wYE5uC1-{Y@w1f6V?i|=^%`k9T3%W-E=8Do6pguj!C7^Z?C>$V; z1}$F~0NwE|-wjpXT?%Tnz#R@!juZ}!Z$M3Xw1J_{-V*SD5M<~DIz$XRm(HBrDjAa24=+qj}x<{C~0tVoD{S)2L z5D2{hjerx#Dc6~qf#IbM$YG$0p1(yK#6-9e#Y3Pg5WybeZ)IVIuAF`eUVng+Cc(9! zPq&8#YUD!$2^IsOC1Z~NFTOkgI%Ei(&{aXD3TTD#aaYi38VnxYy^ysXpcMa1Vo5W4xRTDrvwI)~+4M3mvxTf#YBW%2d-iP-_-4qyvkq z6o|S7@VEkvHY|X}6TGaO#t8EIoaWj&|4aD0U1#k2|Nnoz<{`__Id#xl4|K9Xcj%06 z*Ex(Az_aA8KQus_*07~3$b@yb?~LxLpuhobYz5uPS9227mH-vU4d4y$N5F@-9eF7Z zs<}gFAV(@>EU5vSp+%2_2CcD$&+B~1;uO@tnXU^C9Pn98@YS-A^>U%0X(L$RxI@%! zfCtVFXhPlq3m|Yl21NmAofmHJf>v8L*M49EcW)a&nwB32HNru;7_>qVlG@Oc0X)&e z+TKFlu18+;LYnMs6TmdQP6M?R;j@jMzEfNvhquiD&nn&kZRZ5d86r&?9`NXOJ>b#l zx}w|lM)L!S)&nIP&9zhh!x}M3;M@pW-r&H|2|Du!vL6(*!%!WpPPp533Rq$SY`*d} z-*MM3pc)do`?fK40w}SA?dAY?!9=@VC&2O==W*9JpxWp)`*GJdppG`!9pI@;7Ered zG;0DL$pDos;7LA2l>)jS9IPBPZz*-$^#xo%Xla(faaZtuEs)9Jkv`DOH)v4yM)Lzu zr-u)`Q}PKY)ww=+Eel;l1kRG2$6cSm=0Kl-^6YWfJD}VQ-NE`gxjPheeewm!FaR^; z)@M+PnE{$Y>-Ghm^0Wh%HsG13_Xj9lpJ=W<@xO!@G+9)y?Rvt}^$slSd;_I#*AtAc zcR*coaBbds{6+V-|NlYTBzw9;pLF|zZZ-g4Tp4~0WZ0SJ+B5K>_HAJO5Z{%EcZYuI z_C3?>`Ub3A1FZZ9XfwhY&@u(^0Yq%gwLidl>j!wj3pgkRS`U;+ch`RC_WjZwdZxP+ zbbrMHX#U!I`2YXz+6UdfPr5_zpi0d;3>r29r4tVY7tqO3wJ*9u?|5{VE&%z%weuj< zh;Hy0*&C)(C2*&u^Z1LUM?k~2P*;P7eHMW7ML$^d$4k(qhcI{Xw}3BX1&^!-D1bt_ z+jRv-D6507uYycjKu?JT6^`KG_yY?L$)ljq104*rfT1J|6bvN+Fi-zM_1S?#FrPu~ z1bYc?FUYZ5zWx6X-u()9{smA-x&C;q*6sR%+jTJ@Kv@9|k@9ayjb~8L z7cwpa>fVAP3bdaeG=$Xc`T=st#gA?W4$DLQeup|;LHlz+bunlkFZ2p9P*wqt;T~EE z+VJ)QoSa#^U0=KgUoP7X+T;Z`3AF1CUTVOXy>y1|0qwtV>2%%U(&@VfKCK5kJPJBy z4(d1Xw}9@`1&{c59)I!l^Z)K4gWTD9!2@y`?ZF4k9-Rkw z^@Hl6Ue^8BK+R+Do!Qc9;N~&(TqJ1pg@Y<+*F7FHc1;Fr;Ozrz0DJRQDp&)wJ*^7r zbnlu9QI&yEWuF1P=jJ6hxT4;{P#Ocv%NCHld;*e}%|TA>biL6HTCD>b1uX>?kSJ~E zV_*LNhh|X7@hYDn8FV|i>;7^j$aYYSbh^UMCuydlJ&Y1!WeJ_wT$)J%I&=#S| z;N4yqcY!y^bRK`9wH`dc0X=99!^NPXV$iWFpy&gSlz>hsfDNegtpw=>HS1i#YCzld zL90+O+;sdSB#1Ua4}SnHmT9it!Bpx3jRklJfr^C(p#9jOff&${Lf}|F{1F=D$Q~_% z8hRF_c^9bB-++80qDWKuGDQp>M4NWjy$1pibW_F5uXM zHYLE@WH`XN(D#N%FXT`Fc(MK*(*Nsr{Q#QX6adqLpvk@u%|HH@azZ;#pjzk$sD1(u z%|cT)XkSZn?Vo?8pehqo3qpgV8MMNZ4O}x_@c=FGFG&OMu$Atvz0mD@1+-JX6x3&a z04+mg_JPs{s8eMCndO8y5mYvLf+osqzc7He`+zSw$%018|ngOU^rVJW= z_vv;pfE0ngu=S8DJUWj%{=e|D7gFI*0QVtFK|7+si`KekWvfru6`{1c4lp_yN3O5PW7bXvG+4 zz7{%SW5SF!Vsqj=B6sXLkH{S$2Z1;LfsO{)04npr)0U8W7}WoM`4Uv|gC^KfW~Y~f z1`N(&mFfXWZ3Yz!po!BGP3S_k9X{QzA3&>27(mN%K;^9C{|lY2pes(9_*;rW>LDxI zc0fl&>ZL&4T#!6NMFKp5fE)}S4)Fzf8MN6DDurb%#6K*c{du4*&fv{T zprbv&b5fijyTNXi!Rl5}%sT$R&|JHQfxq=EsAK>c+0C%a8;7MS84I=&A_(8( zbzBnEi{o!~21$Y)Ph3EQ7V5!#2@U8c(%^-du-FGVR>Gt6phxEkkAtAor$H1mXtcl6 z^#`;td>!f0ocluq+MnM6UJwDzGRI}X{dvey*(EyQ5nE7rL871$A`9Bg23lhP+s_4B z-}0JqLbK}|Mrd?`*L8yjzG|jG3Tc9oQ|bT?`fi3@#gK?;J_C=KL$Tn>c?a|)%-5n5 zUJGM6@e1A;2Q@`teE`rw_25;$ovuH?bu(nL1hh1y*YyQ>`!A@20NUcg2C88TAyErD z0OA9*E%DkI(&&VqYvc;vs0nH+fR;OWD1g#quj>P72=4q1ZD@fTu*YBg{RL^b?STwI zAAg|%(hlmIKvLOj&?&JOKx z=Grq1C5DiYjs{xjPTw3aX`VKvK>Bi!XEFNly!^0lcLdbRsNBg9Nml ziO^sT(QtvG)DRIwpgFG>plShB^Mh{j2Gted!9(cKwdYG_kUq%aY&NW=60kE3K|Y17 z*id^3+8qV;4rpCi5k!pFT}08K!^Q%^zyzs2~U`s(f|L0)~|!|K0|lt8Avv1*$F-s z24pZS#lntzdC_ZwbWi|j8s`Q4jAPKmUN2}@B&g(g0UA7MJy6F6s`j8Q1bF(!Ta|$d zXShnxDgp4cC#YKrZAXK*p@Px}s3}BB9d!Vyj>jbpc4pd8|s}ph_A*O4h(D7fX+Bh|^FiLePj7 zydq@aZ`lp*8^2*H<%0BNFN67e7)lf&?sd?BEQbUgrT|Z3r)K{74?f}^bLER|m zGyrH}$jeutObV`ui1X-G*dP?tqagjwwFEr+a0a?ZL04IL^s;gwJo-8mt4HNQ?t^(0 z6zZUsU?X_vN~HzJV*XapnXsT1tVcJ)F3_B}M=$S&W1s*8$9#P_$XwSG&byd0Ga>> z?a+eXB{=CQqI76GifF-tTE?K#0W^;IgP{a;2o>n;BXCs&su+KGfbVhv&$mODsQkb9 zIukTr0gcJmF`%v(tXu#cr3xPW0IPr$$1aQv46n_=yPiM`a3O-An@e6Rq6vc9#n6L< zA(it4)EXFEl0tJb$km`u5op*4+P(m{cEJ@FXh|>VgniIL5=cu4)V^Q@wJ&60`4O6I zmVtKqf#Uw4Q4#D0e62jJ$4&x@r$!DC>cPRRp?QVrzz z11AB{?eUN#5L?T_0Bh2K&VvIjZUPON9e4c$a=>dz@S+9qk|o&D{#$>7MtMOChTw6I zRQZ6`Mlz_ffy!p+nZ2;(gWyW>18688RDVIedi*cmCJk(gRUTZZf!bCM3ZM`JZ9D_j z*`N@A0dDDlmJ)*w{{c(;fTJ3+rw65p0}ij37r`Y5Xv3ESxT^$e;Jg6!JTMwK%ONU3 z$IjZYf<~RdQ!wDw#31WIlQ+$^U)V~tK_q`aXrW?r?HAUP01(OF4?01%x%SJSlF;Vb zFN`G$FZY5L(tt{n7b=ne{)1OabuvL51wIuX-0VcOL?ALs5J%kbfGhxp2=X#AFzf=a zbM0lla}ZRf9or9@Q+c5mfE@QIOWeS5589mviTlKAX!d^zK060A5P95z1LQhT_JOp2 zzzr7AzQIm`m!Jdoz+nwKycpaLgAAqr01tb@>n^^@pz%xBAKjr}z{`}thyDwIj%b=6AhI8A_zhP75fH%oy!1kl)g(Fs|E4l@d#cR1%O?hA*+scozwYl&M>g+>I?Xj)E0}ow4y2OznQq;KK_6 zoX$A57N(LwXeVKBC^S0P;0g_UVx5ryHvRaE_RUD{#uggp zV1;03EWQa-yI&aO3?`h;*s%ttl0axkf=xgEf`O1TK16_G59|yXgfl=lj=ZQ|jVm+^ ziFL*$u<6HNRBl3YH@47N304Sp#?%`ywfn_Dq48xEE@!M-4O2-VG`hj2AAj*_Ba#Me z&PW0)1UrKd;S6bzGjee{Lz!4-xPVPR{vw-@Go--^!Om#E4s-H;agZ~ft;7`?b5_Ar z5(tgI;h-o#{^H37Bn{X?;|f?I*cl86XMpDPUc}>chA6Sl*akNJ_={LV&gcaz1UsYh z8qCT2r9h!^V+F3z=vxU>Ngy=x!KNR7aSgfj#}*oHV1;03e7XuVe7_9H8G$&R!A`6* zG{B}Gf8kHa8UMpTu?KcWHo_TlAZMIfjw>`8R=^xgAT%C=O+WtP1aj$*Ei`t36@s1d z!+Tjvz~aYW2;y>8 zFjxWDRrYY}X> z3h3N+@K#*VP|pw0NH=KJzz^`9MBT1mpteAcLWSKkblmj;Xm%Ym7zNsv&sYN5O?U#t zWGjI#TPTBc^FXt!pl&U6_yaUw4_cfA-Yp614tqnCLO0m`=yu?NZ7Bf_KOlq!V8Sn& zYp*btRD($VelGAp-If3REuj57&9zq;_*+4nFOIuD0QLF77u!7n?S}_#U--~2@Iuc3 zG*A}$0y5GF-dY11RNaks0UDB!WL}LfsA6j00kgu(;j#l1e~~-{(<*6 zmV?&q{RfX@U{S;aQ3O4aA*kE+LF<7^xm~d!Q+rwYw}Lyr9=)ugVAk;$LdO69gB5|7 z!-1XKdHh8<*b}a>{?}_Z=>EuV*9XwP7%W|YS9gIHoq@Hs9)PV7wFY&Iq4T{MvBQK= z2ii~q_6GP2a|Li5z!L?iy9Zek1L{?Sk|1R8sS31m8Pq2R_kKYOc3|TspcDz)vk77! zcMt$Y6Ji(&myzlyMuNJ&pp)fxfe!lc=;gh>85C~dSSWJ>#V@Fz4(j}arnN!$^ua~~ zeqdM#no9%wp)>T3N2f1n)Dtwy0_`)uSPz;Xfq4Zs>lJ+O#rD_gQr2186fbmHhgrk6tphq0C>|iWKa=&95QH1?*u6Kg3SiG z3v_Y=Xq*J>{?-G~t;3*2NT8(-pt}@3AZiW3C&@s}VgPRn2aVr>Mt8tkJCDD}_WJi9 ze8wyRAKvyuo@BrN_0zSL?`2S1j`*@dtc5#9ZnTMo= zx(sMacnR7_0(BDTXyzZV`(Hq-r+z@ZcEiK+P$?HU?3)j8yiNqII0uc~8^BiCgGUS% zJS-2@fG_0*%^89`13C~8VEev0OF!%apMcfN zI%@+ca~|6d%7ZUn+YpxldO?GW;9XAbFdJU8qNZh}x*l{|Ji{)~jgB6@yjo!Uz=c7k z9mqC#VE`*;VD&9%?5LXoIvxhQumM`v!On^I==41R9aM&lAA%whR5N`5r*=>TU>j9rm-yN_exX{%PFjs<3l7Jk84m#`#+_s8>R6fu; z8nogarWm|<;0yzQ3uyHg=s5G_6CS;wo$RG=Ajj+hbo;pFrJ$!_+)AxxF{E92MQ$Uk6;K&6RJU={o zdDYi}QZOh*fwxk;@OEHecnw-fjH-+kO__=V(#}J8YTX4oO~|8{wRtVbP{^r-FRoaE z5-Q<(0d&eXBq$3~U_nVJTYx6kJbHPB!S;bX@gm3?WE+8OaU4{8Fp!)pKut){jsVc4 zAS_StfupGu+UNmQ9#C0Ox+xI@%U1GtyT17jx}Xl489)p152EIVn=?ty4bbK2uyl?k zQ-GGcAksB>#S(b>9+c02fTjreTSURzCeC=kGX-dKCHSC`|1oR?XFr6E-x8tjeJu&9 zB0%~;8x6plwSS;izqtiUxueg52?9?_s#w zURF!6`0*EFcX4!QCBO>6MXm{a&XUwo_i^S|`~cqP<_ zZm`PM1K_p7A0TQ#3opRyht^hu8+zc(u(A9P+D)(EP(@$*x=9Kimax_WD7-t5zj&;G zAp;69cv%h(Q3-hrMNsWCP-OOlIuX<|!veMj*2M!I)c9i;Xm!6wFYnRiAm4(m2?1FH3LL04ph$o&o!S)yb`WfsPOH z=;f6L+YNT+3v7fZR|7M=Nyi zj{!KmKrI}G7sBkI)hw_v2+*CB9=)tvpxPF~w1G-f(0-}oFM5zWMx~&W%|XW_fgAFm z#mS(h0H9tMM9}h35wySL{bD9^2eJfI%KiYY?J*Pp+Yjm_fcXzVw zz*jbcTmbFR!2=LfxV`Y`Wo3mr_mcwHm!J`x7aq{S1T_>qdU?++g@;lsC>lZi7_@{6 zI@ts?90JZ<4S!IA@E+n_Ag4NmW%wf>+o-=lj1DEUK};28AiJpTWZM|bFl&L&W% z0?9y<0BD*Jx*GQbcq|OMmNfAfjjPu1!&=OV93R%$T2rLcM zfr>t8&EI+eypj?+`1Hb~6XsP=_=0^6>KV>~RQE8kZg6sM{=r!uC?wUvzhL@mqWylG@1=Qqpk=3>O`xDe@*Ajw23^|M28u<8EaLJ!ffql1fWjFz76odr{_udB2iD>1lbD?Dy_jK|1*#`LA7D&t=F(+)ZpUGqnA}a15%IO zmIAvHTB#Vrq*TmX+>gYJ+7ZKVda=^7xmC?ITEul4^wI0bq1vdTgYRh9Vv z|HVf(28I`(zQCI)U`3E*c0dv2=Mwf8*^mp9plQDOjR2CO*?Z-0*z0Ci#^Z?AgH|vEx91Gfj>GY zfGQKn$Q9H&R7XEk0Q=1S#S>77!CVVI1Q}l3wH_$Z0);cYOa!e2h1&y~M8smxF3>g% zk6zYqvqA9-&2R4NNWBe6V-r-O@wb2u_y(t6P$F^t0Xj0p^+&gZO6!4AQ;^l*Lz+P6 zgMc_bplyKQ5CiQRbNvB5o4^BfzX)h!5@aO$e?Eeg{BHIPh%|pdEam^~E4xbcf!70&&@F>;mP>^Nd zhyZWF1Wl`GfQ}V>4LYG1oZBp2AC!Wp2O!Y^x;GmfH{cy6@beYHoe#Kf@Z#0dCE&&g zG{Gag0n`G6Bm|_2{59ytWk{MpbBZ}+>ImF3ggD|sr+`PZ>jTg&%ivY8klX-mv!c0T zC3x%~iz_;PFMuKzlqR5~CQt()b1R@zxO@+6v<`jNc^8K40tSBO`@ z5epmIhwUH(+0y)ju@tlo;0G+zKr_&fm!LUpkS9PB6PB(I_*+4n$3Ozz4hkS$&~6EX zho$R}QbCY}2l%*ZSI{^U=&(&tF$Frm8kF0>^p9Oj!TE*v+H_F)0M3x2s^AO>ORAuP z1(8%=gNyp(4l1B@3-O490JI|uQUw`}2M^|9xF4L{_*+H)L+cl4vWJBXbi+H?P{h)1 z&Wccl>PVdy5fr_T!1Muf$ra3!*A|cp z7_{Zd^~Y;S(F;m4CE&{AxPtjd(qp3J=eLnY7gRxkr}qm3{`(4meCA_zL3u^TMC3v^VT-%yu==4d~Hy$%~fmLZ9@@W3W%-;q&Tn=Wzp>EeNj29rzs22xqVxHmAI~8P^2jhj~ z3edsfuY&;4Krvqy4&@Owd)K19>@Qn zIK-!sLJ_l|6fx5aA*^70xVBJXJ!B`dnRfxxX4YkkZ%Xk`U zpVyVM@ox)#{+e|c=!k`G*EhW$jGex3JZ5xEVFh^-Z2GYlFq;9{FZqy$Cs-cEb_I|j z0gRxr_Zd))TwqmD4g-jje8Qu9Dmc+X5`s^6D5UUUyzzvMf&<6f(3>~ijUq0sr9R>fNp+wvRbch}J z2piDxhTzo@pt1Smu6IC3CN|gJVdrn(!3zrQJ4n}Hoa{$z=G@y4-OSlg`(G8bY3>dv zC%x9?-&gw|a^)H597x!KZ$Ch(e!VPsXdgP-aUXQGI_UBpQ0o@qMrU3I2L64n|C?VZ zH2)CbZwGCTMA=cAg5-z@m?N5fZ!m&y@zn@kQ>}FH3Y2}y>RdW6XONO1D%H; z9y0(P@A(ANSufpr!11G13Ywu70G(8%Uk++=3xHQcb-N05GjtvRt@Y{-73db~_2K{> zX5Gp4TEwHN9KIp{ibI^)1w19l+3vmJUe2&GE z7nmhyn^c z(3;;I(9vX9z`@z<+Q0}p#q0_wv4G@JGv@1{c^F3JZU~FGP&7guA)+3R6k=OX%iS$`h^!|9;T9svlmOfm(Oqbl?1gf~)}Q_jS5{ zcnLag4wO|W%vmtwKn+Ri8TT5rpP33_2fh$@0_cPR^kNuveMNWejqvW;2jShdPr@B{ zf_6)SN@h?Z0o~jOTJT-W4m%y%mV<$z+4lyh@N)nsgBCeRl(X{pgE|z=wO3g9TR@#_ zFsmOlL=9Se4owhYFTp3rP#%5V4E)Gc9#btBN}#e%&W`@}E6@QGj0^~LKT>YM4( z?fbw5+(NB=fu38k7+kttZ#V|Hc3w#H;Lke_$|szVd;LH+6SoGkzXlpDb3bwF-SYz5ur4hb1{YP$0S=m6^z9G%B;)n`bR8K^J=IZF)` zHQ<|j`CCDi6U14dTj{_B2m=+G5}-qTc7V5M9Ox8y9gC;Wvm3IU$r9p-*Py{i%r>6P z1kj36G3mN&3iCWMtGmNeh zpvJfa=mLgr*Dc^pcO{nJWB?Z3pZJhFub{J3z*pC~ zzF`E}SQiL(@PTgEH`cBaH9Nq&8$jW~=+POv12m|y?+1q2kgHT?LJWpZux5EQ=YC)W zou~*NoG)<%o4W~W?yA>@7^c8o7=U7sBIqP(kU1ddRq}z2ISe&sH+X^tGTIgF(f9_u zK)SPbhDT@V1dqug~0)XQqq1dgBw$6c?0iY4gj=Eq$@_Z2c6 zcLmK7Fn}xr#Q|tjJp=6i6VS=vt_sZ$99j>Qx_UJ41zp&{P$_=g^$lp)6s8KiMEk~T zm2Qwy(A@-}OAfR_wLL3MY699{KLB+s2 z6hO;jj=P=!jaM|+o?s~9^yuZyZWLj7%?>&RyHSLpyA^b&M&~im^c`fF|NA!&&qJ27SMu+8HnW0%!8cVLH)4i+zX5#tLjgI99WXlUHitP+ZR*f!r7aHVL9CjbER&re1`hh!wO|4iqgv zAnx&Kd;>bj*rRi=1$g*)s{xprssW~Y75@MK|A}9)6;#x^bhe6sFUIN>KwOXxEmxqM zQK0t;LkEzc)tm=3={D~L>0_wmI^GImfCe|9VF)(9jPtnbA5cjGDmw(4A3)2FKd`bx zp!or`?DzvJJDO`HnD|>KGB7Ye4ABD{QYDVe1C45ehC3Ku7l8t}xegRN`e211+xCD8 zkk{c*ca;i#;uiqRfdb3DPK2RY1u9ji(hYWU=kXU7|3CpE&ADA0hVr+7cErHU1x4BiWcO8RBlAikUQ2@#!v~OCkJo|{2qZCl@Bn39 zkm$-68Q2y9|!U}#8*7VQKlqYYhmWUx4>s z4JaUD4#MR;zz$+yU}*3#bOjyJ2RgFv1jMSaD!q6l$8#=mIQ4BzW55X1CsL)O!&|z{)hvg_ys~& zeBzI}@QFY26v(?LAg0GbOb0bE4|rI+E-2#lXm&jT%5e)kG(r0%eNTAoI(r5JKxaLF zf8=rS6*H)I0-yQ}z9vNTphxE^(8L;KcCMFqeU%6U|27dWaFqqR#|_z#?~lN`Uoe9% zX7>Qsh-}TZZ-nb6HP^lo0aaU&BP~JIRs+LJP&ETi5ow^cPoO2xz6XeOl1J;MQUho* z@BnQ|M)(BT5eK?mUs!`fzqb5!3b?_8P}q6G1CN(qfF~qDb4PnB;a;A?ngA+}h_R5r zM-ehp*BjTC|K{50M?A#|Fpjl#GE@T%wfG2-< zfVQ<~UV@nPN}==O!JkYsLD$cK?<(KHP{-C>`$V{|2h@D7gXRu*P@lZ^31g{nx9byd zW95kl$o(J_4Z6W)u(sQl(XCQN%H|FP1gsI zB(LrIqSN(GbL|}lP^$xcxf8fI2_N`(6@WCUnZL(A=mv2>qXsQE!2`z+82J0ngIRwV z_*+27wRYG3@#qHE6dv7>dZQasi*&bw>J(^yxEOq2G;B*kGBX21bM6C1=%gcPH5VQe zcEDN)dMJj-K@9;pzJ4DeGeDIFsFm>wd=)axA-6#1{N_GjgqQ&ey^=cOJhTX6P5`(# zdN~Pf4m6*ES||@pm%`g z^g&((_263%lm^dl9rGjqRB0_SDxb$6U9&^6#tNj@Pr0;FCqM05pva zUe#7St9odW4G%Q zj~Spq2IW@b0yz?55VZa2(_H(6p?(YKSZRE&fTd>8L0^b7P57H#AxXL7Ah_`g=^=VR zHvYfx03G)WU1RCe=?c0J9=zrYq#v?`ksYiHdQ@lY0Z2izQx`NI(<^FI0-j-SEfHbp zJpSU&1JINqENTTIV@BY`j-Z_v-9jFghxjLh%A}o!5bb}9!P@H}+UKHZzXX~l0%bw| zmUs{oyjck}Ukkbe0Ay0D2SgamxBdV7e|;G=%S=a-=$*g-x)>C6JS%ua1bj#ZD1J|a zV-<8TEyFG=uyc6xK+b_2>9Ob+_>k8Jkb`renow^^2d|a|Ejru}3iuaiRiUe8UrIo% z2YbBrKuLrLsI~#0jt>nyd$4t)|BJxBUr`JWy!rQ$0}s>>2lYN78)jd4pdUH1*bclC z6@Dg;J*c9BtTqNYcBdP}ia8)FI*-5D2=WeWB{gh#rx@G~1ua|vhYWQ87dSXA4;6!! zwnCFa31}_t3yA4pU-f!0LiPY~c`$zH4n5N$06KjcbY?2_ej^4COeNrS1WkR7Z$KNn zJv#S7`V?D1eF~4xsi5lEqq8^T|Ns9!o!~1-eLBHcjH&Vu+zb4gr4RTuYd;)s1@%)v1BS<2P5%G?4=!+eT?ITk!F7&DZ)*Uk#n9Ob z%7z}jQ$ecXMM5jYA>f4@e4q=gT75v3HJF6EIRJdg^4=5RJuO=gfT^iFKvZw*2N2cS z`T|59Z+-Cn|9{Y3Js!tfZ-AJfw1!~%bhm;v_wKy{QVzOTzIQ4}i%0KPkaCY+h&jz~ zIR0-1neW?q5PGlphP$BUnMXkPHL7}agALzR3XW^u4F#Yv60i^AfBpLp8X)`sx)`bm zv=kq74-)uN@m{bc-K`LhfOTl_fL7W4fvVnB1u-%fVID4mSds(Ax|4E{X}y zxWOhM?!|)lA|XKwi(^nPiNZJr4M7nV$Gwm^o(i_J8{&d)XjC76fg_$F8-h?uMvv~= z8y>x-Up#t!e|YqUf-ZW00h&hpUwXl_^QUL$2k@2)Pz@k(2OdAr10dA9UB7?^ry%hm z3EIR0s#d_q5{vx23dsSLF90<;YrwDTRbSp?K2`#_V!)Sxv$XXz6ULaWx1}~Qd6)Z1&KnM49y9zjV9t6!Fbk{!c=mxFH553V{3R;fx;(w`xW1uhWR!hhK zmpqz}2)qOpV%@G!RO&ljLANP0mGCszeqkyt-2Wbg>60E6|qn50w9o z?XLjsviSJr-+$1a1n}}_EcHeXXdfB4-k2&6t2aQ?Eg<7Pz#F1Ke)s`hTYlUXG-bp9 zI)fW@vfB@j<^uukU6#o#NTc7f|LgnL-!!8^fzV3@pGn3Lfpc&9bEK6CH@l_~L%$}PYH;t0sO zPF~2yyMcDNB8*=qhr@UuVNTHE8;Bb_kH1KK^zZ*`d5G~~yGlX*GNg?qKVC!6769#7 z@#y8fkOK;TaA_9*_1}L`0zsT61X{`o*`x+*o|r&tY0$8jMpz63D+M)p60oU#N2YhQBC>6W}ow^4WsFd4P4JzGxSp&fKgI0u20ke+3aDD;` ze$d7h@a-t2u;Zq{84G+ORu)4Rqa!#Pkb?{~1`ldxgHKZk01X~A9}(zu1s&YqdZ3;a zbeVl6Bw)b%EkUcvz%_NZLjWjFK+`r5egLErhwM~$eF2Tq7oc0ez=`FCAUMoHnY{p1 zdcA!BaquqCl{_B3ytUczAm#b;59PQESUCmWR|DE<7+?Wgvk#I23p-dq2NXMNe{_N` zXoMUsuYjhq+d%=lLKO^!Do}->V;o@ibRK^p_7A>A4ti`X=-@M4aXa}JIBub>Yol)0 zKcK5x<#vIl1w49L+p|Ev21Vp)Fzfh>sz?9+LsUWf)X)L|$y*K@-JxH;Us42T&&~i1 zB!|O%?x3LzKVlL^C%5Yt@U-I(RDIwa)$PCm^)bk|po#$;vfu#cK(Yj?SOBMD0c6Ff z=13q*fsJ>NKr#m`!T?%{h#?3+ZWCLb2^vW%0d4;Sr$y)$+h8{6x+3)B-#{0W>;n~@ zkk)j)6bt0u!k01de2P62`GPJY0Idvsfu5Q6ffwd=9)H0Lx>N&_g+RUedeD5~OBSfP zkeyE``)onZKyu4xNtjze!(`Bm=L7Ntv=a2_2H%+i+W88;KL~u;avkVm0#FJBwg175 zYDQ4v0PPC`iGcDP2dFGYDHP1W>!v?|FD-?hGWoysLKt!pu@7{a11PhagSS$H3kHy{ z>Wo1(C#e1d?OawvE>FOR41hcZ30q~5e?W7uuTgF>1uqK+^#?mcp#wqSBJ{N`^dv@5 zGZo>{7c8KSCaw^#f`-XHKnf^m*1(n^FhlFb{=eWGNx<$0jrD`dR?svqc%m24l*DEl zD0#uk@(gHPf_#sf&_G2kYV`|FXrMbSAb}w!0gGH^xFIAbH1Jx^&f_nZfObQpCp2hB z^98PihHy)lILs~6K~)O4nq}|--CTqjbXXD^=->*}ga#5JKcRtU+dv8J9B4N=#8+6O zgt+u#OpWyNj@a}9sqaC98?c>pp!9;PI0D_qizStSPoo4k(msg7Vx|aRDzS%ML4;lu zfvb4%GICIW)`E6SLjn|(@*(AsB-CJB$pqn;WVmCVB9e(mw}%1DcE}Aq|1W~qPyAu1 zgYLTxNC1^CkgZOjU63$-rz_}gL{Qd)lxZ~XvYrp?xx<-4`G4Gr4q!0Eg<)F z9)B?hv~e5Z!8%*eW*bmx0_yb?q1w{{Wmtw!L|32&(aI>45gsI>r@5A#8Tz5Q_6v9#0({*#c<0=QIxWyS;;vu7LlB?~YwQz2jWp24 zpckBf{{IJEi4ASf33a=E=?(bb8TzI5KYpqfD4Kv44>JQ9HDQG)acff9e~fqJMjKwD9MU^fGF5;3Saf>mGQ@RS5@ z&x1O4pm_A?c5nbCEN$ev9GrSVN0C6PuW&&Y29M*QZF>K~lXy6z(!ry<^af;KDJVX` zDblm^qhsd@NY({Sy@P!55VZ5P`G^3#^I8uXq$q=!462SC&^rH++seTjz*QEO^1}qf z_Wz|nkgW&rvFJShA_>|0ZdV)uh#YvZauZtjgO2ut23`cHGX$DU<14`oLQv%f2|^J8 zL=b}3-atHx#S`|R;Oh+qpKFX%z@vxY{CAK{01gn)Q8&;K1P!->T;|j55CKkZpiRE6 zFTmr?j{iZ&GDEfpf)1%~J%HL-G)A%df9Vfs*$cB97JSOcb|VKLICp_M3Egu7i|!1ENu1z_8u-E{Eb zuaGndwKo*f4}_To+6V{o323h-*s0y%p@kA?m)XGsJoeHZf%y8o>t--hY6G3aFO|KD=HB(OH9aKtZ><=^*-g zpe>-_Q#fJs0kPe#Px!YT=yZi#{|lb6C;<)VgHkPM=NV+Hqd>Ro4`tUUut0gO2Hv9k zq!g3_UVzWk05v&5E{6`dYy{Q(h>IB@$K=2)1?|iOrxS#G!FwygDF)olb$~e;I^G7F z1_RY`~N@a7QcE9TQlL9o`)am--r3O;b+2+o5}F!cg*NX3Ir@R1ZRx&uHF@Sqb!LEB!iv5CDMExdC@b=}o&_C5(Czx;wGe3e zA$XIhE$qBUXew=f!vQ`Z78F6<4i5YHK~-nx@fRoG{r?Xg3IW&b7eK`sR1qY#|L6?R zK|41Al)Ry%xz6W!(T$(|P=b`q_W~TMv|Qb+ay#k_9Cbl(7WxXfdeK4yin^bFeUgr!QV> zdvuGYf{cKUq4u)cvqF5R^B+{U!4AYm8FNtRtbGF-a@eH?N&&sBIpLsI-Ld_k(@|fn zy$kXJD2vzrU;r0H4`2r&xq#Jy+O;pjl|-@(?H{UW3ZmAKjsEz~w8VAp%ZC;H&~Wk;;K%mnp=WwP7IVgPnEf z9(X7fe)8=kgw(-%|KOLwgQ6Lf9J?`x+#Fzod5|&+WkL#6qBeL~y51<_@Hp;z1GMNJ zoY}iU?K4mjbEESRuJ(UDs7Sg1y$1j^mMjEr<%3#<@S~BS`4r?jP$C4o5L_68%my{T zL7VPD=RSd(*U$uotopbEXp#<8D}s)Q`hZO-*iZ)zB+U>J*jO;B-Ujt@Y2|H@*+|}2 z!0m0&wG7DK#!w3Jqydt*QA5}O-E4>kq@i@Q`q2Wr1_zurIAGV{fm4GAb`1eIH3VSS z5P?%e1hNM7i0^iN0GWTh(d{5$d8kwq)avPW5CF~Gb%UDYzTn|s=(!r8#UGune_n#_ z)BrWJL5d**A}>NY85tl`kqmX9bJ!o?G-N9icryF7H@GVbQVX&hVj*bm6Wj-YTG$Cy zD-S(H1C$Zr^TAQfjG$YZL8UiHygT$qX8@@G4b5N#yjp_at7||D6?5owX}GI!hOLbcW9G z=yqKIIUsFDw*!aep;}N0vjDu=qT3ZTNU;FqB9Bg2h)M^JPS-0Q-L4?Tovs(UU9V`n zg7yhP_HcM~yRLw=QA|Y`L49dh4;y^0ZMW-+?$9fcCfWi}cM;MU2k(sP1TPz20TF!x z8E!q{0Xaq=G_LF)#3ArFufJwP*YAQdklyPpI+Kx;iA0q&vb`T#U2Sh@+6UcfCca0RrY+kpdA zrn^31ya1+GKs>Snb`%vTiNRA(d{?T^5 z1HK652SX*wfL97=zzcjO6KGib#a9N{fEQ@f2jq&19gsl2AcPXgx4_BJbps?2L3t7y zo}j8_2SoHmx9=U$s&b?$lNUPT450Jhz{5j-_5vCh#h&5QSm=CfZ zACw|Nxx}LzqUhiY1r+WB1-QvzeIASuH$a^NHH_7x+4TjZ2UHNUDh!-8Ai4L42P4Fb zP@h`6{wM}%`2f-ajwAS~jrf#;lh6;3?pBDFsRbYpgEAf@e47t&K*AW5svm&E7`&M5 zVD1A@7=ziJtsWpvpv%}H*X+#j;9n0BgRVL2hVY2TyQ``)|r9zc`!m<38A2dfdU$| z@dF~*30|=Xc1kB`Au2ea!Cvf!$iM>n0#ZOjMrJ{cLPm%pENWe$qlvJ97Vv;7LJnx? zS}9P~bO0RCpiMF!2XhaA0vgQjY~_HYXi)jH161pRQZ!hsvy}lX1yKPFXs`@4pm%t5 zw*CMWhoF7Q&=kGHqZ=Z|2-6KV#2PG!7SJHIU|C2&Be>vzhL{Z2=fMbZLpOwi8U_mJ z9iUJHy9u&=2~@Uwfa_y$K!d#q+5O-F3+MwNEs!F>K>{g7<5KGi3K@8@(HkJ)0X49b z$)g#Zq7^)v!LgvwycSd+uynVAsOBHc{O$I?{{M#_rvg?AN%$K;)io$STqk%O%-sMQ zD4O8W>DmDj2JN1LMuTgIN2e=j*G~s18G{;3AQj*=zQO~t%@@=f0!e}j>=m%RxQt*; z4Ib9uoxsJYMK!3Y&;YJr7+s-kaBzdR^&$)aS=0eD02I(GKvgryJ)i-f6&{_SCIBdi zT|xW_9qv^~y?3B`PYl$Hf;RfVE%f1C?~zlb-GwxtU_;N1 zZ@@Pabb=4r@aWtMDo#76=73H=-3uZiT}>lLNFBBc($&m%0C7Qe*fuch_=}yKpgIh! zfxl0InStSDI1{)E1DOYDf`Dsga1-Q!$HCkmpeD!xP(uQAh&iYk2;zVmKA@)K4-fwJ zAT~(P4v&K`ZZU%U<)B^9JHXvCP%j?b^6&s((F1Cjf*Tj$&VcI= z@OCRme-7T|f_H0OH$eNet{XtE0ZmSU8Yv(S$OWJT^a1J`ke(G#*L?6en7RVwniU?5 z;Fie-4{O&IVAp^3p}h{XMkM$%EPtnv0wO2@$A>1!Q;?)Y=7w5va8bl5uEW3rb-u-K`)B+}fS> z_y7Nw;H&4LO#pDN2Mwg&00-p-kAt~4KwiE8ayaOsV9-7k5C`ONPi}h%(UBOTa-^ua@T)eri0L{ndJO+)h-e|79;ZS1N?Ro<| zm)CjF<1%=UzP0O)V$c{-r!6R_9^7>Ul5scLfViNH%K?@+{(^z+&;K2uwFcU*Hy{HH zJ3tA!2sD1R!b1~uywVMZ5}R(<8z8e&SAhEO-Jv@?I4dAW^CnyRZ6pMR6 z$NVmMXo9v-xSsIPbbau88#uv%I)$K~+`&|ET0a08S8@gA><8e;2jwHz2OgT>3=ayY z7sa6YJWvs^17`3GaG*gqAA{!?e?Z&K)C~$RUxM}%b))s)vy6T zVNkIQ9ZY=L4$=i0@c`!lL+xHVwb@fYhEAqkGZKNo%=;VqD2lyr6i(k1`})dxrpKGf~{$76NKp0>m1Nl$b!Sg>rEjD?!-UX4ea#L;v-JUZ z4NxmsXEy`5+y;*ow}K6Usk#AC1r>v+YP|pv1e?&=dIHP?_hdn%)?i8g^$_9C)&pQ! z2#f2{wt|HjVa9+>vjz(mqYiw5tOm=1Di%gp z1Q%2_fi-w^LnuawW4a*})G$y_3f$ZP`vw*|Acuj*&mn;YY8Hb=ZLPsva3uw5TDd;( zV1!g59@egix~ml&HQ;3};H{^i6)EU(umS96v^con(G7_MNH&AS)(VJ9a6CZ7p>eSQ zA^|q3vvmfT2d=$A1KVIp{`C;y&ejQFSqP7ReJj{Zm>vj^f4wVce7ys#&=pkqw}Q<8 zkJ7h-g&ASSfK9Uo3!=pZ$ZD`GBrXtKa9n^*=?3fbV1ziP8$v-11H}b+NC51c&Q`GB zK+}ZaHVuRe4{p zg*tdF0W8xOU26!MEH9kBbDpBJDa$9RF*p$vz3$PM!haEI(4wmF! z4-xKcH2}*(c%bP$5ErJW6>K{HdQh{!RRbi`?YaUKA7C>&K||^gVMdrSVAHI@f@tvp zvKlN4@(6e|9-;@_SO#nG=!Q^?5XW>wD5zne_y7&dLj*e^egnA%5+-1;GJ>1cFFdTl zvfzN<02;~P0Pezr%PQ9mU}11S86y`cfPDxHb#NUIa%?B4OA85gNZx?Nkpx6FIOHMX zkUY~W0FeNj*4fGd=7A=mK`TBWlKkr-!kw)QU|9%{e|;<1Oqd=B4>Hx%`r{Y)t}XD) zAlL%%0uqQYBg`1EY1Uvtw9ud7(G5`q@(?4~C1Ayn(1#cf)(4t>LUI$-Fi_~v0L^xQ zebdj|(zSJ0Fc#0-dWU|~j>F<{fI!D`V$y#tiDK}JAA9l-^cL10t5!TLNHA&!B% z32GQ9)H^_-4)#rFE7)({Acuj&2Fyi-I*1Dn-U*;kpMVtV6TrgYP=}U5@ZJWF*3bcv zqr1`KqXAJ9gPM?#_}Bqa35^esI5a*sKqSB>b+)bm^IRL?GkL9Gc~G?rlId(+0HV4f z>iE~Uf{le~gYZC=1!#)4vvmeUEog`XR2YFxg3S;@BpG4mfsM5W3l<9^ui}7?*+JBS zqX$(4979lxz!W3IZBQpdjf9P~fFcR(#m-i+hr1z$fhRN}B8b)!NC7xP8bI;XfYe%Q z01Jb9`jC)^lq!&Lo&fPPQkew}XV54WB4R)p0-~Vqq87Y5hkrf9B)GX?Nk*7?U}LRY zL4s&;1J>OQQ3r_|6cKRTfV6=Y(SYn@gt!grM5vLVxB+Pc#SPe(ovmO$qb!5Vt{{2sIKE)*x-5um=0GvlZ-T z=z=WxaxSnSBA!58a6Ewm7Ni$MBgGSlixE$t@(B`81`z*4^AkuM8c)!5LE!j+RZkia z#ZWP*LIsE**r3i<2?!6Y8@6z&6|4kQt%D>xTLnN=H$*A_`c|;1aGhWtC@vxK!vRqX zUfaaK9%2&QT(Be~%sjBM)~z5xwDP@ej~mBDfe-;RlEy*r3kV7Z4s;H}qt+?pCl8P}2Y; z+1dI4M0G=y@~>|Nn+n$n=7Ad2keIsxQ43z9#=jn765L#{BqPi`u(8&yAVIX41MBXF zsDs2DiU>I7K-xg(n}O_Ogt!grM5vLVm;-48g+ADqovmO$Lzm&f7x94w8DX7vuo`g8 zfr1327epgElHgT);FtsVYM}7|%0ZBvbphlac)Wqcp}`Ja2nNnY$W_}3hz2BasD=X& z39x~ktvet*uqm(=bFE+{p!Nbtva@vqi0XzY1r54@xNx0ddqDXP5>G2YlJJFf5R>5M zf+ZPY=7Ej1ZUqUV#S>&H9z-1^o=`-<@dVQ5(GAw^!3c31)QM0dLGc9A1`2DiFFRYo zeug>@wyF*yh=?bU8gM*;f&`=&L?gu$h>HWc&ejeH4{Qo-ZDK1}38?J=lI(1408!l#rJw;B5Erf!Y!9f^gv3(? zND^}PHmJ1+HVJMnSdtND9@tpxR*)cCJV6&Sf)zmG2}J}PPatieMPVTO7$I(hIuU9l zD4sytKw%B`WoIkc&)tv(lAW;CmS90dJb}32cmf3pNH2&+iYE{kBc4DF0Z6bHfZPMm zPattY+M0G=y zg4%c>E?g(r9#B^n5>Fl=N$8?Q{`C-(;O2rQ8DZvujkRtC38KXlcy(hpL>(laP(;A- z1k&cw4c6_!2yq+KiBKa!@dVNa3Tv=0J6pkihB^+mcoHIrh$oO5a6Ey61f&;4BgGSl zixy9?YQ_QLcW_>U^GjUYAevPi_TUFkR)`yD*t+jNpN$)l8i9(z{XmGb)dx$ zbe$?#0VIAp1LTg*))x@9 z;AOo0>meq=%>_#`!ps93YYoPJ|i>iaC%r zQ0Rkw+1U#Ab2r47oe)2FLj(~+6CgFDgqlMLgcU;5Dn0H0*OO4T!2V`4eV?^0p&qL`38vUZUrj=wH-i`ovjBzR5wH^ zXaEVsh3f>{0}=&k?QGovlI(5;8^pgJVp1oB+YOOqgqa66)*38`7EfT^-4Jz@ObnFhcv7`!!253AXMQi~? z0&HMsYX*b|Hl-7~fV~y01k`o_Np`j-fT(VWQqTw!hzr*Vwg=Rjhs09^NU|GZ5dV6J zNpN$)l8i9(z{Xm)f&|gxX$Q!xZiqTaJfVny;|Zhc#5>F^1;CKR?)eY9| z!3c31)QM0dLGc9A1`2DiFFRYoeug@(vlZ;;ZipZvo^e9@dV;x#1p9c zhXlI<#Q)Iz1QLe^`vOq-K+8Q?gF^zM7#v6NrlJ5u5NuFqD+h!J*4^1U17ZkR38I|>~Nc^CPfa3>jRySBTXdVgVCa4pkMuOr8qzx3tU|)8&g8dA2TxToT&)pC~MEro% zfa3=w4blsuk>Ur$MZ^!Z*evMr_lz*dfPDis z5)^YFZJ^Kxi+4i&40T**E7;G_fIy4_f&v&Eb0BGuUJ#8m3JBtYV-9)N1C)axISYKN z0K5bQi9>_E0Te#axIk_yf-V<8)L@{J5vpMWC}5%26m+((fbhVkbhcJN3A_9&luvy(;-5!h(w?UlJf23P?ko=`-<@dP%j8?4)d5#lze6QM?e;t8Y;6xLv0cD923 z40T**E7;H75J5ydfz*KG2_y~D3!;(Y3B<*SCr}Fy66^^e55w~lNE{mM383(S#}h~b zq9FpJ0UA#raj1p>hy>Wc&Q=d74`fPbYXpeuZUrj=wH-i`ovjWasvDvdG{OYp!gYe} z0f~aNcD7o8B)cI7fo7*bT)4SlNk*7?U}LSpI?&I|>~NIap4fa3{lRySBTXm$!@ z57dcJBSG;5(gq4^urE7X!G4B1uCo;ya$rG3Jb}32cmhd-^nz%lcmi=T;t7#G3?L4H z<|mLiEZ9Ne1CJ+AMuWtY21Eliojc{aic^r*&Q=bPWH-bh&@2^*3pW=m$p|wKY^*g{2UIUlu%~FBvfjSXtBq*Lh+CX6q_GM=)*w0YMb+&^2+zk;##1lvjIG#Y# zAiW?ODV{)FjCcZ7E0ADkfH(viPattp+Vqs58I{An}AE@&I)D1=y@^ux<}Vh})n}gc=EoCy+K!Sc84p z*$VbE)N!4yU_W<51QGEBQUi`BkTggyh(?Mh5Em_;U=8jIAkRX}Ja~iK02D6pcmOs0 zAn|hoq8OTwK;qE&IRKFW8`jyn1HuEF(%Gs3F$}B()KUORcD8N+QQZ)wps@!K7p@a* z4=8tmw05?x07-U34B}tk3N{IDE?ANgW**pBYp@Qq_<=eDtN;=}C?eqa0h`qg)(x7A zf>;ao4b(_b{D8E9!Wb;x*$VbE)N!4yU_W<51QGEAQUi`3kTggyh(?MZ5El_Y&=xvq z_Z7C;URca6fH)7FyWlaW017d9%vr#j@-rZcp)m&%hsN9lhy>WM&ejeH4{Sc#5_2db;FtrO)eY9|!3c31)QM0dK`{r?1`2(!FFRYoeug@(vlZ;;ZipZw ze6|;)1{`xBX^>tJjWntb;(}uidA1i+(m^sz0mT2{ID$09p}{Ty3LkhpfpQW=Lk2_x zG@d}>Pz?zX39x~ktq~9&*p$vz4v1l3C7@OUNV2mv07P{|l!DrLATC@d*d9=S8Kkwd z)dM8i4KWBbI|bsx%>_#`!ps93YYo ziYJgZP*{U~+1U#AGt_aNtzbWQLj)1=1X2TzCy+EqFNj8pClD7So}*v4 zQQZ)wpgIY}h3f>{1FFA3T02`MK$6`MgFv%XATHcoup}eQJg~9WU>#`j1a$^j0VJMK zM8NR`Hme(~8#GG=vIpu!sF9#}0%-$kLoY+z^W2`CR_N@wd05Y^oZRsw26fFwIx4}hp{h*HqF5{L`e z3AP6$3ewuyx&tKH4KWBbCk5id%>_#`!ps93YYo^2pgAcJ7j7c#5>F^1;CKR?)eY7Snv(+A19c+QNKib1w1L7J?90wpu%Drh>ud%4xf>#gh$oO5 za6EyeL3%+nQapjU81V$E{vpBM0C5Pk+yjY2gZ%&~eBkkfXn0gWG(h7CBo5V30FeM2 z*x8x^;ek!*Y~2Ad46FpyVgN~YwkCk6ZirIQxDtp9*9o=<)T#$*?QD$zNp?dF0?kQ* zxNvj9l8i9(z{XmGb)dx))EQs}ka$870ml>AtZuMw&^dx2d!SB)8VQOgkTy_QgMHcA z3idP9ahF{S0+nXDisx-4H=U{D9Pe;|C-S(hH)I;s?Y<#1FJ51v<6j z1C~`T%?Cg+1c^BXh!ZhmZUHFdpfLw&!b3DjKs1134p+Vqs58I{An}AE0*)uJS>0gWpnXyx zd!SB)8VQOgkTy_QgMHcA3idP9ahkN=&H^d;&+!TllHy13)2s00CtTk8%T0B9W z0agHsClnEIJb}&X2I~gRO@ZuzIuU9lD4sytKw%B`WoIkc&rrv8wu1fK4G~1d6G#m> zoTU1 z+1V-pqPihULE}pxE?g(r9#EWuw05>~fF!#i27%_LKwP-FU`a-pd0=C$!8*|53F-{6 z0!Tceh=Ah>Y*sf|H)w7OWDnGdP$NO{1kwfyYp^dnTfu&YI7*Y<&Qtx*tJjTBEHE+U?wEp`XUk?&0C=g~kGLqKBi0>p{X7(~ix zpnK~Ot6UHssW0I?pCl8P+I~d+1a`QM0G=y zf<`GoT)0lKJ)ryt(%RX&0wmcDF$gq!1>(ZZ1xqr*%mW*14c37cgHUIH6+mJTMFbp! zV6(cxx^_90C5O3ojuqLf$V`g5o#nTo!8tej~@PWq@s3if> zkO9#EjVF*eR6_zp0&HMsYXpP`Hl?$b17a9h38>WolI&~^08!l#rJyz+hzr*Vwg=Q( z25IeV^#DnBLkt4VRe`v0bHS2~F!R91T7z|<#S_#SUWc&Q=Ww4{Skshto2_6apt1}k z+1aW9qPihUL3I>}3)cy@2UMSdw05>ifF!#i27%_PKwP-FU`a-pd0=C$!8*|53F-{6 z0!Tceh=Ah>Y*sf|H)yU3WDnGdP$NO{1kwfyYp6%Seug@(vlZ;;?pClMBA!58a6Eye zL3%+nQapjU81V!ut{}lK0C5O3ofT#r<1e&XY zs0DMoA(D(R^T5Vhg9Xvz391~d01{6qBH(y}Sp>3=5#lze6QM?e;t8Y;6xLv0cD923 z+zs(%C&bU)5J5ydfz*KG2^1tCy&xJXokg1)H^d;&Tos55Hy13)2s00CtTk8%T0B9W0agHsClnEIJb}&X2I~gR zRe|h*IuU9lD4sytKw%B`WoIkc&rrv8wn9S=EQp9F5EmRzAZd_Z5RDX1ATA=Fpe;cU z&>@(RvD+WWr{W=x-EM$55t`GGV(1ds1FQfNgD4{47zCTu4b}~s#RAy_bt2SAPz-{!fnovd%g$D?pP`QH zYz6zd8zRUEUkw9N1CBwEG)OOqMjCwwaltW&ycz~n@V0pbv7Jb}ca!F~V~KJa(~ z)ld)(6%Y;3cmjz-H55Q3zy@}^Z11Nmp@dT29Xz+k&fW{L@9IC+qA^|qAv(*B^1Dn#>x&mStSP7^t z0g~)&H2_iF5T&5e3J@2r6KoGCmw~i)wrYSRyCDXFX0t$CxVd0SMwoeEW39nD(BcW| z46p)7JfVny;|Xk5H&{1lHVb4A)QM0dLGc9A1`2DiFFRYoeug@(vlZ;;ZipZvo^e9@dV;x#1kkRK!RNX;t*&&fyAM~z5o8TXhz4jpfyAL21RxS% z13OzeAUv=sovkwO+CJaGhX#KxHIIYiH|^kKolcV1qz& zRuHvdZZ|}d5oR9PSZlB#T0B9OgB3vH2}J}PPf&}%6eGlKP$xo-1jQ3b8z`*7zU*uT z`?(w9%g$D?pSvM~h!8tfB5;RBB+ zP{jq&@B*R%8c!f`sD=j+39x~ktv4V%uqmCb9T3C7N%g$D?pP`QHYz6zd8zP8^Cy*L&Jb|P^dOB4^cY?;6KA^TRKsgE$AqOB%gvKC992y}Fppe57gF7G^Fk^57L;`GJXX^?G4{SzrGAxc4Y6o?Dg3AP7RpMkV?w$1=ac0&vT&1QkPaC5F{S0+nXDisx z-4H>@cXpfyC1Uh(n<91QLhFQvoP^;PC`1`5+oP zAR3_Y1QLg8Xn;t74eV^KfbhVkbhc(d3**9o=<)EWV4 z?QG2eNp?dF0?lTDxNvj9l8i9(z{XmGb)dx))EQs}ka$870ml>AtZuMw&}Ux&#fT?R@Irz;0pbv7 zJb}ca!JYsLA9y^0A`qe>0-^yLPatuqh5(2J*uc(K4=4|0N@r^Xi0W(YWg6#o`g0yzFT7V?GAqIhFvp`(9xnM~~n0a7ht-(6b;tA>uumVUt zp@@Lv32at3ST|@k3uF(}iBKa!@dVNa3Tv=0J6pkihB~gZ6&iA2K}0-(xZrpKNrUu) zXry=oaWUcvRN+8^-2mbcXgq<$VZjaxA9y^03Pgwo4TuJ4Jb}ca8WbQBU;{f_B_O;2 zkSU$59w4f_6|4l*mH^2pxG=C7j7c#5>F^1;CKR?)eY7Sn#}^)19c+QNKib1w1L7J?90wpu%Drh z>ud%4xf>#gh$oO5a6EyeL3%+nQapjUhe6ES1Z0TgoZ7zE`g zh=v~@z>PI%41&a=G57%@0XDF+^#z0nHl?%G0%90g38<9;lI(1K0HV4fN3AEdRj^#(|?8)6V>o(sfEe4^^04spRAc_b$2Ek@^gLQ-E zxj^^e9qZ=SDI0lhN z-$5lGB-k%N90H9ekT^8h4M5=ok0+1>M8gS)253Bi#Gx7vKqSBhcDC+-@W7^YwrW5O z11kZwB|ws$ts6j8H$*9Dv;xG1>jc{a%6}lOovkZClHCx4K(kpOF5FzOBqPi`u(8%) z9cb|cbp}`gB%V-2!0`k&s~fBvG@Avo2kJzqk)U`2X#<5d*q5EHU_V10*Vzj8b2mf~ z5lyO4N(f}U4gi8onU)Fr6)*hXKMvWvKwL$ zXf_MPg_{eOWQ3UqHr5)f11+AQ&HyWb#1o1LIG(^}b%S+-X0t%{K%EFR5)@A$ZJ@9Q z`?9kY>}ROsI$Obh?uG~=;t8Y%98Vx=kX{gt6i*;7BA%cnVgk<5LQn>Q#9#r$iO?7X zi9;hq02FdqVlV@u0W$^@AQE5$J6j_lJg_O9tsD@;z)C>v36NxGYXFGqhA0KK20>i7 zPOv?o9yUm8XR8NDvKwL$Xr2qig_{eOWQ3UqHr5)f11$!j&HyWb#2|_YI0nIHb%S+- z=D9%jK%EFR5)^|VZJ<~H`?9kY>}ROsI$Obh?uG~=dSf6p;1~o+gY<%Eq}~{a3ywkL z(LzuLfy9#o#39gl0*OQ8i2)Qo@OT16AVh-&L<2OQK;lph1`r9bft{@y5FXf+&ek80 z@|a83KAg#5GP{B;0I91!DA4ifdire8iOEl zXbdtyB)|rCw*CNLP1FiDrL*+~#4xZDP^^F?J6k`1sBVZ-P@V!A0M`k&2h>ghY3*!% z0Z|J!2s8r*Q48jFLnIkt=7Ej11`DFaAXGV60VD=dM8Gi!vj}7#BgAb`Cqj(`#UMx< zC>FrJ>}&=5xf|lkPKckoA%ck3BS;N620=jr(hH)IT8|(uI0nJJW@ro+z*>*pklTlP z11g}U=LE#XQOuBwqrl;`6?|J$=Tz{mN3bKPVb`=E9U}x%4BO)XIuj3c%>zUX5}V*l zlE8+*RDllT1FhIWRs}oU4QvAJ{5izMQJ{U9{Ocj7)WHuJ105CzIyDGv9!wA9h(XxJ zQ6PPws}eyoXdpK9;wTW45q3@)=-@FAYw*cxXjfK%Z;Aq`1;;St;wUf|9KE13&_EYQ zfkYS~PJ_IWd-EoD3B7^IfICcqd=mF8W7}jaIE3II0_tQp+7u2Q7(=Gi$X8& z0-eu=5eMLlqd=-4dlw)X7IZimEFK`@kQjp@8!xM6G6i78J2Y?PGf`vSMFHixUb}X0)->?i=#j?$V&!6 z=anGh12JGZ#0TgY4UcZfSt+pdK@b;5fjk6iD}ZSDK@gzBJV5aQ zHV>u;b|MVq;wX@M&{a*K87vSRdT|tp$p|}70(3xxhc);F47B(FUmOKe3yBW|7aSj; zvnoIrM}ZVDLJl~A9wh=b3=|(LKs5%~p|EpcKn??k2{^zI^$ds$j*ktX%UN(;90dt= z(2`n6sRBA90TJpTaY(5Gxi|`4wFJnm(EIj~^9*d`KiD+b*#wA-qd>Yq^*o4%Z$1Yd zBmfG1u$eGDu+u19XL!K2&bvY`jsoii-~I&J+3vvz+rtjpl-FKuOdPp#07^w-ixC^;R#E{ zpk3OqkcX8j;LDM~wJ&nc0BsS6rFV!pB#vO)j=?6uc19yEjsmSX1I;yoX!zDw&^BgJ zsDsUf>49uFhg}>6QV+VS2{g+DVt2ZNZhr#ptMy=n?Vts1iS@7s@A*Xwb&y)HEF{zs zTyUs^O@VI5WrS?)hHj#U8U_k=$i-1$tD!sK5f?{+L=mA5@;Nxv@m?GS3iaLq0a%j? zM{5YQdlVx+z!yh>^fw;>O$|cw3~1{rB0fOk(D(ptaP;Vg>|TZK+(fxJ3gmjwbeRZ;NGiC`XR@(5xAm)_)(nO!2P*(a z59F?=Zir6Eg=(N(gC1}r!ES?Y`-B<^Y6gQ00%Z-bG<>@*NYn#*aTLgXh}IG)Y{Bt_ z_u?o>ID^U{NH~LbvB6>lrL+OxYXmQbKve}q18655B4R+|(1-!;v-0SMY^H;6AOo8M zzu*b11TKGug# zf_DC(ibFMk_Jw$KLpJ}wH@tvNfnV?hRsxz_fP^w=hXUwE1rQH3lmnvSI>GjUL?PEa zfHp{g8bBZ(Xu=4h7IcA=2XvnVBW#}p*jQ`u&JMJAf+`0qfW#Au2soag7J(^7$TlA6 zh8d`lpm+jl1BEqcdyNNt!xKmp!~?kz8W4zh0tGZUoNGV+rSkMta<|NMS#T-ta^g2Z3i0!Uw#j|4#@+4!4qg9J1ED1*2sIn zS6PF3pdlPcn1i{{oeiM41lf;RCJy3(CW;_xK^HiIZg~Rn7-6fnLCdf`tikKd(c%ZH z9IOBmKPV#L_yMg8M;Hlp448r%35p+(Hc%LY#o^m8K%yRqi=)7fas}Pu{=>r>yhQ^X zKcFB1=>^e9@dM%_;s<<#GUR%5^rOTeISdhVpw-NX90n4H#vJ&5BX~)O$YG!r)v(w@ zDLO&xZ9x}mf*cNCpbRzze$f+H31|QYG?WKlFA7@w3yN2;$#9)u9;jgriZl3vSJ2H( zAhlqV;O2r>rFt;J*Pnt+w+646MT~#1-a*(J8;sPm9Kp;9bpnwL)ASg&cdOKGzaG@ObfFOKFYX{h2*4WLy^9^H_oY4GJ( zU{l~1J%N>gCW=5_fUm6qt)K$s5wOW{onRhlq6ic-@Wnx(o0~vt!6w1Y1+C!mV1%vJ z0WH4qum-O#LW?J`?rw-WNIap4fa3{l7IgU!BV>^obU7E)NKib1w1L7J>~#2YJdmgd z;sPmAKm_lS6&>9v*41&a=5dymE2sNf4 zF$h{mgDMWy09s`MYIuPh4qrY3HU)kK6j%wU9RX1Tn(qg-BS1V*D-cA(b%N~yb#@^! z2wH9cs%k(y&_oeLE$E6TP^$&RV}z|b02^x!UMGPTgHYvQ1&|m-5dp^_)FLp&2w4;Z zU48;J5)^|VZJ<~HEmi@w20`{?TrC9>M0Bx00S%5pP>_K1f@q}SYY-P4gW%z7@F+B- zZ2<{((9Aj_o}4(Cj{{I8*~@?$@ImGQkg@)CQXZzX}Sh1XRj_ zya1oO1kFQ(au3*KxK1z+G$jEVA%IW5g6?(#sRf$^Hy1QR>cI$`3k6MXdRT*JZ_(lj zth*bc4iZl&BH(xen+2U-WrR%CLnpp}x`hd`1N{Zw87Lu*q>NQ0*OJ;)C}kv0uT>0Q3MJe zxVd0SM%WAuXv)RI8a!=-7K5N0qCn>rgRFFgJTdBBp|&Y8maXN;(}uk+zW%oAp9WO?pCM>>_8>N zM9~cn@I(>hOx&&DLw0e`5P_w;89cyqFRnK_4|qT~G91jkp#U1(067{qVFO}!L-slF zuZOFIOyL}W7y+sD55AE1V069Vad0W9l2?SaQy3w7p+;DP)q=eUo`?ZAaA3>x;S(|7 z_68!2@4<>dQ!EfsFc;dI;9n1#PJmR~-L3~f z=^tzc#5izuk6u%Q1kr}$4uIxaK!$@;GuS2I>KiiH1Jd9DZ5lAb)@_3wVGXtz9I&AA zeTW=v{|3lmpfG_?$bbV5QR{=aV6FHjWI&3LQa6YT)&rXNaXo=(Bea1h$2YR z-QaO>DX1z0C0!5=TCfWWR%n~a8mt!V&<&uh3pNb4Xc%OnD`+wX+%`ZI*&r@h3uw~C zbqAubcHIFM2G^)ik0B~ZaAO3XNI~MzM7jWxAR);aT+2gM!V@XD5z!4k$SMpV5@CG4g-zUgFOeDdI1L< zBJ@FAa4>_WSX@^ih5ib#FgWxX~poW3s5;RB*k%O%h1UU>e3jy}r1P`c}5tRTa9KrDdp9lB=UIJt7Isq&Ut}#K1 z5U~snHLxUTy1}&rQ53m$fQ7+&z;OVXbAiMdxPbzV2Z%T%#$Y3>Pz|6iB}4REEBoK{=GO#X0tbtS`#WaWu z)(i?=kY*5#q#49TXohBAEcdxX;}%@x!pEaQ1GeCr2Hf>IxE90*RW@KQsL%xYt`j$JW7g^ z=pmV51BwQu%&-C?0XDF+bpeD2HU&OX2UY@VDuE>w^!Gsp^%W)O{}8N@|shDI%DuLvXtJ3vl>$1F%38s(r7H}nQb1CnBR zrBwkD1RK=ZS^(jJb;CzC!Ad|&U_g?ctr;My8=@36zXsyMb%N~xRcMf?P5?0olh0aU0Z$P$NN!0Hh5R`e0vnwu1c( zbsT&w7wUD;a42YG5p1683-F2sYp@P*Jc6V_CV^9}`5F?{8X%`YV-)4G0MK|6EWbngT@VclC>oH8cnOFE*uc(K0SFIl z3SyiMBnXN|5Z&3z0iwDgN$9vXap2w0VBk1P$xo-1VuSW8z`*7zU*uT`x)vu#3&@h;h=#$k8X$( zM3jScfMX3L4KfKtBgGnsi-AukZ%l z$qjDeo&bfw!L=YhsEG^a!q;lI9stR9w?aihLn>fqH)OFmw9yL+fo_OWND~)in8(4T zAkCmAE{FylY=mT%HCQ>=cObM8Y~2A-1rqf@+*S_~MD!d$YQTCy>&`)XK{Qe& z3F3l72D!h7DE~HqOoOL+kT^7LgV&+MB|wQDk{MQ@XaI>rH7tNifT+&a86c_~vZx(? zF*sNWXt6d(va@vpi0XzY1+5wbap5|__JC%8K_S}N+5wV;-suf$B!jqcbHS2~F!R91 zT7z|GjUA{P{Zovjfd$!^Hw`v} zK?WgW4Wt7csF8;T2w=KU4Rupq8dd69MvFg zpw0;Cy4BWVV45t^Y@9ekP$Ht_|GQ{qYVvy}lvbwiYbnynx%TqoELP|k)V zf*(J@?K1Gj6Hp@=q87~UZUsv+!ps93YYi4eO9W8mUjc{a8a0GO`3aCD^uA_L!xzMbn+uj?gqa66 z*18oWh!*A0eLr9YkSIqH0Y^DV8)(iRWC0_@ZBQpdjRZwGNE;}u!M^Nl1^XH5IQSkX zsMo<;ow^}P5K#`&0gg40G{__njTCDjE+W=Is*$1`#06^xSpm`vqLDO%xCqVAs0G#D zkRtv7$ZOC{45{s*Q4Zey1D60b*dQ8qplASzLp5xGNPrFOY+V82flYy50Ss0GYO;YO zJ6jiksBVZ-P?HVBh3f>{11i)ZQ9c7C*$uf%7&NX4;=;`ZOESXD0~>4I3KB$%a_D9# zumVVwqlkc`9Hb32o(Zym5#lze6QM?eq8y|R6xLv0cD92340Rm*vTUf=LHmzD>jS{% z!N)2=I>508k_MRsqLE?^#6`p!NHtQFgScSLAS*zcK{S$P5Er2t8s(riIwS@sfSdx4 zS&%q12EjYF;1YIY^sF zH&{1l{u*Qt)QM0dK~WCU1`2DiFFRYoeug>@zH<)hb@0BlZio^@E(hrV#~Mf)WDrf;EGz0BHu%NSZ-hgl1^%4qNi#0o(8lk6Uo0!!I=kZ8ZaTWD`JM zKe!ge2X$n@Tu}83iH``7YMEU0du>wgPnzlJWo`we)DA7Z5j{}MZkT_I>1w;aDU}viVga)Il->iU>F}fX(U#>-J!TxDDz=sF9$|0MZ5uYp^dnTfu&YIu5>N5$bi&EykdQ z2_Od}VhyAN9BUwHkVzmKDb_$-M67{SBPDha7pxg%1xPc9M$!!8A~Zvz7Swxz#GnMo zDe#yDi9=%$v~3R2$^lhv5Dfw-8bIPu4IB^&uz{Ve3=kgJ6!?X_U?rev1W9(b{`diI ztb&z-8mkadFt@uEY!9gI16q9F+4=#Z7Q7`9)HH^u1#`P0l8i9(z{XmG1<|4$svN8U z66Gi&;3$V$1g02a-T=D^Y9uJiLE1oJ4HoZg1^XHOLSCrXp?gTdN)S;F;(}uhBn>hN zL?gu-h>M6dkZPnT2XVogK~{h?gJ>kpATB~PG|EATaX@151tchu#Gx?=-uDSl3!nxp zM8g9V4Iput28aaMz|PhS5FXeR#9mU6AZYv#M0d8H08!l#rJ%+thzr*Vwg;pZ66FU# zlHHKqq@boThzmCtEXfEn4{WS;D@YJ6%E8-AyCLczQH~-4j&hJTP^$!F0VBk1P$xo- z1VuSW8z`*7zU*uT`x)vu_!e2H*Fksof)+S{&4bU-fOLRk4I~XR2}C2s8i6gHs^M&ejPJ|i>N(>-vpjZI= zva=QJXQ<=gJ6)k(hwf$uD?yBIfVklJ1WAKT0?|lK91s^ApWqQ^kZPpJ264ffK~{h? zgJ>kpATB~PG|E9mJ0!|GKwg7KIY=BD<=~yVa0yUt4$;tnq5&ih)ldPE02|oZS^(jJ zO@VJ*1}g!LPkAZ?)WO^^kQ5Vt{{2sIKE-K zv7ugvZt(^yK}0!-3yw9AG{__njTCDjE+W=Is*$1`#06^xSpm`vqLDO%xCqVAC`UBx zB0ye)$1F%38iSx+y@*^6Y6(N4JOD)lNF1uc10n%7u(Q$9vXi^?z0VBk1P$xo-1VuSW8z`*7zU*uT`x)vu_?~H~*P%P&!AcNO4&s7i z4I~XR2}C2s8i91aZN7LHqGRdO4I z3KB%i3}D^e5Ot8ufFc6U3?OZw_6o>8Mu^*>PJ|i>$_yZFps)t}va=QJXXxg0#5JxE zhl39==!Pgk#2QEkIMzVYAd^5eQmlcvh*$%uMoR1;E?6@tbU~UyG?Hcz7oiy%gP_(7 zBnBUVyaq4-K;qCC1fLWDmjG355Dhm_G=RjR8ZJO2zy@}_#`!ps93YuySGM2m9pVFBF` zb&x1W5dlXzNE>L;Ajkqnh})n}gc=Eoa*#GqSc84p*$VbE)N$}jJ)vF)pQ6wWQG$qa zkPdLHfuunufoP;y191_t22za_!e6hQ~Ql zVgR4T0G9yeb4X%XfuaE<4owUTpb{XevvmfDf*uk9KMMe?1TN^k@9G{S}DX?SUohP_vkQE@!AR0+Ch>N5dGF^`-@*6;=!DALA4vj(ZNfdAi zP{RlkT}CtATC@d z*dEY|KIm>FkR@ekmr@>!1TdK&J(P&4VBO0@4AFHIOvOBoK`h zYalKn)PJ|i>N(>-vpjZI=vJ>KG=t(p1!*HNp2Olg04HiVp2oy@-_ykFVOajqJg&&9u zj!$qG2BaD(vO!$1W{?#i%^(^{Gl+}O3{4DJ&U;2m3?A@n3_+*BfJ??3pddcD7Q_dY zj9@OPRSSua3n1C-IqPCqx`lJb<=>w}Mr}R!4!>D#KL5S4V-? zAcK}YL+1HF>!m#q+vCBKpjiWmENE3OD5rvWph5*i!`F6$O^0re2e18wZjT3>0ofi8 z7G{K;F5L~GtikJ$(RQnXw#S3*0v8$J?eP#UxV!+H0$sn%2w7+jUD6FT476JnygeT5 z8`ypWjP3E@fI}1zATBsg@NJI=DMBh2KwPjMeB0x}@rZSMJUDisafZA-9<+|u1G+sP z%!Y1{2Q85Wtp@^yJ0$6XWl^`sgB3xNE@*o^hzm-(AR4rU8>F`za?-Xnc%d`c{To18 z7i<`8c`|%^Ja~ODBEy5YU@iEz$3r~^nyY}+VW4HAu%w5)K^L?Y95s=G)`Y@T!V@WI z87ru21UVjdFgADxIcSeMSQ6CXgUEtb8iH2PfOwz|ABcwOfgh#~I>;8ZVA2D+JsxZZ zWP3bVn25u)K~{t9f+SJ|7o14Jra+fp;yg?nygeSYtkMI1nDz{hPEeSDJqOwz4-Pm) z=!3Z6(8squ9;67VasqL|dhl(JhbB@1@aCpY(9M1?pf~$L;}SF?1Bpw}5(p0`0_QdB2Z5bSr7b(?gkIo z;ycLpc(54|<3MZUK+8Qq`nn+}bwf|p=JVJA@*g7u1A_;nD`-DFXr&sspA@D`+|cq84f{Xay8#NeD==8*<7w^h9n!G z1yumfny4b+7zLXJT|R~NkZ(|v6J#%_SOhyAcFs4%FnGv;HmQTg_(3j)9&?U}U{J7w z+eV;m@gS2xG*ayW;({X++-n4>Mv7?=7pxg%1xPc9M$!!8A~Zv@FP81`(6|LhI_CCx z(DEb?#P)bF7qrk7EI^_Ybbzs}$K_Z}v2SkI8>4L-?*Z^zr zf#P7_fi}W}dIp5=Cr}2d&0I@;QhL)(hGe57G;wk;*#|7aTI+mORw|h~f*h zJO`1sLE_M~4ccRkkN_omNM-=7HbNDLY5*-60i7ZT@>wVJOzc*$De!IVU?rfY5-97z zSLJ|~i+~0g!6w6Xf_b214+(tG>IBfqY9Jn{{{=Atv`rn<1OxFHAt!`Gm%&(r4<1MB ze?gUlR?mPP%?R0U57h!WZU|}-m|}!^1MEbok)X@~G6)pbU~%{&E08GSkXfkLK^xs+ z!GdUBfr1?zYanTmNgx_2)<9fDtbtS`MLCEI)(o-&q!~mbX$El-nxUBi%bsbB!~j~w zfrwkA!~oibjgSE49!O#UElNQZ2Zw7X_|SFGmPJs+z*i)IO@VK82Q4uGMLTGXA36chx1fr1&KM)rjpWt32NHtPqgScSLAS*zcK{S$P5Er2tni#O`szgc* z9w=MB!JTo?{JzJ*wV;jIpw2j$3mP^C`3}A&0xAkB8Ntl%R*-t=!69HKbio3oWCV*G zTnbv)04f#Y6Z(OLSzqcik{N2l)tpH9~sE}gztzzwL_ z!=WCXPd%F72<++twWWGlg;InWJUWl6uwLch2)f~Zkc7j@7 zyBrx981`i`FfidHjVv6NC@FYpMB- zz>9itbU@87;RdNb?qI_Ka!I%A4}?MwkRL#9D6s^o@qn5r12qw3+fUHNP2H|Pc5MRb z?&bAL2KnP0NXqcl-~X=}VZqV-MgVMFx9g8?2b0zVrC@8j9V}W8ln8@N?{+Zh4FFyD z@uM@qBZ3s6%WBQ#3jq0ui0OCR7E+y`gA4(Mivv&Vff7NmOaM>k z1;zu67cRbd&ALN@0US@=u75lZK499#!N|bi(aXCn0dA?%Q*h4u;L%+BfuU3rIpn}O zYYIH%LIt29_i`fKR*u#KCF)>X9XL7aBB+z*P6ciqe7rGgsF$2?c+(7{9{2w0O z;44Lbcyxlp8^j0ehdA%YaR(Wg%I*LeNJL8@A{v~YUp6r?FdTRN162s}yGN(%hu5;; z!^^rEJX#NwfPDA?l>D?or+7BIevs&P{nH!3*ctk#`3Ha5RZ!4+bTfE#Pv`)JTDR*9 zsDnVJ?a~K{_42-mgU9B1P;7!!b%UM#0^(edVvp7X{H=Na|NozWNLL0PowYYQORsoz zyWZ#y05$q=bUVm^(v=${1H&#mu<@*&VB?SNpTNk#@Z$3$aB_hZ7+8|aWO#B>w!{Th-y%c1CG!eP@OlR;Rxb` zBKC$yr@(7%h++o;P%`uAgoXJH2p6UwY!+Bgw}TAi=9wFv;6!kv+d%?SQrzeS2j`2| zr641_9VA*0l!82W!vmZy!M49vg~~NQ;BP%pDh}d#bUSb$A{(p>F5C(BImildKDg28 zCDD1H`2oL2=OK^I3m%LIJQy!{9DKm+!T1557hb?h4F`$l7mUph_~B)?gtqGwa4Gkq zGeF|CR&(tihEj#&u7CKUc^m2yc<6QpaJ*(|&i%vK?fRrQ;D2Z6lhy;JCnq4%Jh(FJ zEdA10`{ls@|Mhk3;F9~bYq#r{<^%S<0rss2_&p9C{J{pc^+z|T0IO#MC4<+BIMhID z5El*x28f3`YyWh+{yF$V9-42P-*7;LzF+7()b0AG`30lmh0fzIF8u%hAELtpqNKC* zN4M)AW7i*@$6p-6CK(En@4VJ|{KYZ2bZ70K&e9*9p5@zkt<$fvEq|$vP9P{tJrwNU-`3VD%rs>OVl#f9PZ_1grmmqTY~Qh5;H)owa{J zJ}KqsX0?`)VR)_IT>FO+#4`o)6q{@RFoAf=Af9k@?H^_kPZq>u1;-{d+Apj~c!NnymGXw~l!9mar4uWQ|5Hy2@pczaA&0r#6#>E!|jbKC= z(e3&N8ePqAG(ZJCs37Tf;Anoq*y;KKS}z@U1sBWE8L`)~-JyTFT|a;`!mU65|985+ z>2`g??fT{Wh2{qiAhUmfq6>5*3aEhX4*lbie97bBBW6(11DZEG{sJ^apzQhvp|;!g z4X5juX4gNUmh25sws-wgGrimO!@mFj|Nrki{-W^D|Nq}FfUWwW?D__haf3auxcUvm z3nI-ASXvL1@PT-sDn$JM|NpN+TPALRc)P_wE#eYr@uS)8`sUyRw$8&~#oY|up>Hsp zZ2I^Af5sag-LbHS9kgZMS^5Q3Ji+Uuwk+#)Bon4XJl` z|Nci*;NUVB+$SmlRWu++fLax5ApQH8K$<&`zxW^yayGd7`LPdFP=P{81k~Z_c0~xB z0;?*~2WyppYBjhAZkYYpbq6HS%X=*hQ9s2i*EXu)$F4!J*Z8 z{KZtzSQohCBhvhUvGqU+*vq?~L#)Y1So7}=vNhm_n(q&fZq^=g83vDT(OwYM$>`A; z$l=k=+79M93P4LcaBuP(*hp3xu#w01gM9X4?=5g624`=w5Z;JMWQ8_jUh{(j=D33h zH~>-lgfAw5!V=aG0r#B1y@(SWkeUwCi$J6;aN`hEFGF)(W9^gw|LYm*P}<%_pgvp$ z+#NSrpze5S0&VWV!&eZJ-cfXCqUxRv*9{JhZr2y^G<{hVlsHP%x?P`m%mB3>c8P&3 z=;eJK0*~sGcOk*`S_Pp>0;1|DLRH31h$?V$EXC}iBRs-9D@%a{i_$9;8yhmXm32gi4lE2iYj1dTmR*czU+4@FK`N)fBLm>lGZYka(3GYOVneGMc$k7qc}Pr5xB)4jkvgu&9YEbD@Mr`i z7(t^Lh_M!M2?`o;;%NTCSjXvc`~avH2KPxpedFdIjHRGHDcFu~hSw;~K4`TF9>W7w z9iWjpP^$a=`Tu{9)&sEgU1908ZTzi6{RPco?_;?)9b>`rE$xnEI#YMnr|D_Zo1H%N5X4e~x&AC?? zn`^Hy)PaW9Zt!noXgN^wwA=Mcr|TC`wOk4s-Z^m`9%3h6-Um1AzcjyKJotjS`2b_5 z>mN|x1k`n6?{xhE$p$ANfo}~OF={A!^Yg{`lh+I=YJ_jx9giu*PhpL-L5^> zu5W6?Ji2{ncyu#*bO(YO*$X^6LsxioJAxYR8$5bJOAn5}@B-NiWvgH_8EO{S4p2IL z2_75jcAe4fzys>Zf>tp+@Mx}mz)&jN?b_p!3`#c>JRspe`Rd>Q-L5?^Z-I)lZr2AM z%`X@sw~~PLbHMdC*LE5O^)* z(d{|`8pjhLVjz<|w87mRd+^wMv+D;&h$}5!KkzqY{{Ij19xS@RH3)e8yfgGobL|_3 zN_KFNy_NtqX}e27N85tN(Y8SnzNGTk(=dH`fDr20D0?ZBaV2sCC``-h=~quce*%N|Ig29+4lYViOleM4%)6R>XJpVu+y zHTDO1+JAs9^#U$+16<@;yWS`P4H`c1uynmq%nmNSUyDIfB|oT~0*y6P&I1>T(5@(~ z5(fc-aZJ6Exxnk*Q_vcK!0Y2&@6xpZ@b2w0{A6pBOy!alr%B_eAe5 zgY(i04@=hv#jM?~KfoP7aJvh{{qhMT|5!#yUEPc{k`-GtqngO4I(mQBu4l&RM zs<57PUO4ze{@@EK#zW1I>_Mpn)Tw;|@}ldHnnG|D1L~PW+jePOkPHPi6ltWt)Ai45 zP+)`Fa-ez;(ea1Oe}H=U-L5~ZUH{bHL^2f|qG&BTa9I36?uQF>yM6(;s6i#_GjNvd zX6W|);gNjOe9oH}b&E|oU2*`1dKx3`nFF>ko%&<^A=g|prDA=UV<1f58p@|Xd=+0WW zgQ1qjk?UH}@G+(Xx&^vje}Ehcs+XD{FhVmP_B68 z0rEPe)q}-#ps@5f4jO~~4{{`lq4|d$H8i0u(#}$FbFKt5vjU#+-Od8)*_85v>e%BB z0-(5i4Q|##n_=)d5NLVS8G5F<_6$QQG}WI12g?~qhuEVx0F+d2zze?*-L9xo7vNH$ zGu=OUSi8Oemx~`fEL~r~%Ed}ZxmeWgdZzgW6DTub6ul@`{6Xo|5@iMcq8Bor_QIpH z^g(Cnolf5y-L7}QV}Uj`tx9bg%tF*dZe`vd++Wr9Q!PWyM&_+iBD7S-(_lgT3 z-E~$_-8$Xik#xojD6WT99AN$6$WVY)5B2A|L+^NW`+|C=FQ8raBt+u{G&K$CwswZz z==256Q$6socD=#hvKKT!0BS*law4eSegSG+cqm@*IQYUI%!Jf*(2gajOK1pk6KHrD zGA#W7)Jp{E{9p)azCD1XS&&k2a}FjB?HfWnte}o0rbz-QIvzlJj3A{b;?SPt14xJG zMz@0q%%tWAuo315pdKxnvp~HRkZN?pM4*GXFBd{8sR!V46{U^=^>M+qlJ6g+qO_aA z!|(!ls2v&>m>L;8x+ntDS&PywBmsl zm5|PRD7d!(?MFF5^h<(W23h+8Zcmj$TXYbYL5)FnS)C*(KtRn(&_ZoS(8x227O0!y zS_E1TfII&Opc0Te3EZdgfUXGw)g2za6&#QfA@qd@w8!GvdBUUfqDSX1kcXN1VH1Mj zu;?uP&>0FE?)d;2+W7&Q^!@;88$(AKK0tQK$Dt)O)$y{sqgK_jHlA?4eL@sED?!-sPD-ZMekvuI;K16KggcYR()CN7 zaCa!Ejrs%9&3AqE|36Alft&yyyXAlmI+%H((U@gv-1OJ z?HXvv>czt29H1py&_V`$&I?NZ0uL>NMM`))dRcv6{`>FQdEhmdM=xvG3ozTG8a7Q0O{}+|6?4tC7X->oJi1-M>lSv|fU2=x-k&z0d zJWwM8rgalYD|FW!d=(AkI-qU_a7qEqH-j#91v?g@1j>agIegN-)66a_ak zz-B|d2^!%B%{{=Q zDBvA`xXpcmWG;AZM>m59*j&(n;SVH9NV_p~g$Ls)NYRHW$>3q_x&mr9BWS416}+e& z6seHmWh9Ti01Zcd0Ij?RjX;6tIniZ7?c5(8)~*-$o9=?*6}ny(Gy@E}3e^=fFa}8- z;3BycG+wX+RCKRm`2XKS)Aa!?w0iTN9;lcR9gA-R!Ksu|SWksM~FVqv|pc%YwSEMux>b8PYFSxM= zW`U<8z${ql08Q|gt~W}gL8Ae?q97^Q+zOt8?GF6?kJ@PkWmj-3+@mw}hDWFG1&?kJ z2DP0)We8}6*YOvX;K_IJVh!*bu@|7g`}YepBKU{ojQ{%y!Hlo+8$PlUV4WdIq3GynaF!ksTJpsympmE|(Ca?-?*9G7f87R{)fMz^Urf&vkJdmS7 z>j#h=4a;?|9oRD@QkG+fq}B#d(1A9@Lg$geV{+hiG8;UOyWRjf?Bz5_7$Fx3C;zsbq2WnaGe1yJWvY-(DX1$9gd~`HhGAgjWt1~9;DSE32vl;M$16$FL3+dh0KG0 z|6jABS^^r|M=5!HI$ckIx?GS%aspJwBwYj@g$BC%`}m9aOaDQO?jcKqOF+jEfP3Gi zvf%U%>9fNY_`dQ2kGROa_VDQTJ>darL3V?SGw|xxD0Pr*i3U{e0<>8VF4b0k19xBe zkGuW>H9%jpPk7BT0n#=DyD0P`YN>}Us2+H9`yw}WVj!-8Hn|i$z)k_T&cIC_+lzY@!p?gn9spC`1$L)>lMHiWuPs_isRxpx_t+o8^mQ zmMO#>*B{VM*|`^>P^kb#?F$dosMWcTCu%!G?||wQP|U&$P)LM;0v$Taa{PtKSCH{A zkARk8fQHjs50rqC)df&OaJdhTeCQe(Xh=GO5*;)FgV%YKfYt~602kU9zymp@FFd+y zUwCvLd?5l}c@A#KgUq{n8x)OSAe9$rb(aNbdKWaK-x+$wqth2u8QcIjDOw4MT}0czO-gR0bWw0B)7?I3uTmqHfnW znyzPFD?t)HNEJAKa~+UX`84OA0j*w#coR}{zIq0VgbI+x1CZ7@NHf?9kGsfuogXwf z$=}cS|39QHfwEK$Yp(X_u04U?uJG&xkBvg&1vEDe$$pzF6FIVZ(uD^uDgN5Pwurl zwA8o($;O}|sN*kultHqfy$7Il0?z!f;X_phuoTV$h2<=&j|)6HYgc%5mV)N5XMktH z!Ml3Eb2H#kLf1RZwRadwML`uibg=-qV10Rw2{h+kV*;=ehtAvkD&}D$|%H+Zr?i|-JoPzx&u^xf(oofpZ|gSK_8$2 z`??N2G7+uL50HM)2M=&R2&xVvFu@%ms3g26^aI`#g37={8EibHD+EsycldkCU?mKs znD&4SE}*m-&`TANZ_tXAuy?2#45P<`RGfgczdHdgA;8tn>yyYOgb}1=1IqH?GFA5` zIF?GJAZ0B|w%3DnnZTn7oyT9uokVp6mS%(N3xY$9&wnA+<^sDwXIXgkvM$#F_3w`D z&j4*We7GL}$RB7O0%U8V$Zcp{^BUA!1ZNjPXofoOkN|4@fRYD1=ph4w;E_2{9t6pG zfDU=-JpSVS6>y0CfbGV+kKkK?Li9Y0f7~GguD3e?G)E2E(F8hc^T%|sqAj2kHMzyQ~!3SGb0OfZ(Bp|QlWdV(y^zv3~gTe}2sTplV9=>dTli<-=yThZi zbOUJN5TX;a0c7b{aQmkOT7a5DI+ZIxG6#-Dfj4h-2q;63TkNWfHaz3Lv(jLaNu4)@yFWrM-8asy`wu6 zIz6!ivcqskXMhZJ1u;K~ChZR>~8eS}7)F$9oWasf0(lfz}VL^)y zz+1&ZV~3r`Uqpa}!P6=bAA^>(ywCy-T7lZJAPHDEs0va`gWLMB<>P_BL1_T7!Wwj2 zGA_u!ph)XwtxyATLCfQJfmz32xV`=L zzuWf+q<;=sD-E*600T7M*E55fu1BCt92i}1bh{!r7mzt8K)U!lg&>&? zx}XeHGQ0q_L$yIYR#0ID+CT|j-(JE2>Ue@`vu4)=j1bN0kn;NkxL^hc2iyQqySe!g zhX>doCY&a`fE3pt6F`S(fEMS0CT~DafS4da$b^*$6Ts(lKo$sqJpnO6f{+PWAQPHh zPbh%a7Aw4b_YaiC4s^PHdHEj{A)sjtB)@?@ge7D^#d32lG-UcN!E}OZcDU{v(CqjE z(@Ch>q2qfOJRrw3L4yUP9W?PwKzm&rxUtlH04Y2`T0v|22x(R8b_My|quKQWBsjps z0sO7s{{8=tTpoerzYpZhZr3l?t_S%0KwJ5{UB76%9%%l-ToTy)gSoz-`3GYOd-D&b z5~bHEP&aXan|Pp<0SXl+Scuhu_IW|Q8+yZ|`4A*EAml+y=0WljQ2h|U!R4W2OK@jH z+&32%3*Zt7l$7E2fhH(G=HYS=EDS+=hOxN^G-LwOkHbB6Du^I_Sqa*njjLEklo6l~ zE4AS?G({+JMr|+C@*Cm~Zr43KIL!WfJE&%P>FZ>2{sd%fkd_EavIIp&qJo?^TZh#xl1C)2b~8Y`;ZW0&>K8@O_;z7RzUM^$6s*Y2JKz^ z)9rc(w96So`3jF-8zyka)pdnO=dl-eZh@5FfHpxv>*rj*fX=G`9iwol+w}(Hh2{e+ z%|AH!+e1OeULejn=wtfS|@PlSili7 zBEtxt*LkAtdI!^IE5JSjZ_Yw^R{+WVj-4k!3nM;(`~kXb^yMbVZhKGx{Bjv1sFWwk zF(p4ir5es~Ghssa6c)!EdZG98|9@y><)tE$gFq9i-MAwW6f2+!X;7LHfcgx)>6e=y3!tqd;5M1VE=4{4ags2;SZSIiUrf=fQVMHy;srtp|+& zNJK$7$m!w)JRJHTftra=AQ28Jz_C~XYB_d+Zfk5lB7p8>?7`D(!ia9~4v$_NMwf2a zIo-YsK!!BG;rL(r!nN}tD0d%xp#?V|)%PH6pqj>`8$4zv0P-%lAozdx-~Ue6KcHrN zi8ItPh>yYP8dMEnBzAB>E&<7di~*OFN)P`1*L3~!+KwzE4!x+j`|m#^Xm1#*vjwo^ zjU67~U_s3=Ape2Fs`KCrU5HVj#kBk_pyUd!td}r?ma8I)eDHuBtjP*$5xHIfZO;I2 zhypJT?gX9F3>xwXJ>k(Q0Fs;GVd;9J*wCZd^#!QA3hftxMruLr5ztmC(Cj>@M*`9T z-a%J#39(ZUGCl*@Y0??GqtkbbOQ-7wmrma`-L6|eL*7rCYqzl18+V6p>2_TMZWwIo zcHIDJ80_%qhHOwlZWx5}GcdgT%K@sAwrIO<09AHdP_oGZa7F;vjo@h=m&>4f`AfI! z8g17tn94zc$kZLW2GrLERez#j2Cv85tOw ze=za)n}bFE^Y^NPMgEjXHUId--=hE$KET}kgOR^ogo%OSCFnG*Zr2SUXB_W##pY^I zxfu$Y-GSBW+Te+mE!wVYu(}*nIiQ*Ytw_P%0p*U1;GG1=UOf8v|NqNAaJfQ~16F+m z72Y_5jwlBldXe%GRAGJqHzz;?F5Rv;;|^4NZ-7QTO6?7r4gu?g9WP|AFe;9Uk4_iO&o6w z1uO>#>Fkb)iFq&eWhcnnmD&G6{8fvrS4;lX$uRN6wk1+Ulw;g0*m zc%VD4pDMbj48;` zQ^92wQWAiM8B$6`N@Ps8e*JH*-N0WT(_FiTzdj64M8FLoKK*krFuY_1yXOyTBKc$O zx}gTNRnppZO>Gt=h0rcJtO8vZ2x_I(fVV+xDB%IqYxrA}K{Jt{3XX<}@d#*g6B4h8 zG61xF6p}BWcyyP7ngWPc*32uQR@N8Lc70GQ3n?nWSs2{P!Vm-%|KR2-yp^@*8mN`^ z1=PyIPz|bnFa%MIIP^m33aFL!1)6-2iW5-zidrI`fV8qO1Z_aYWaq&b$1j780yV%( zYQasGCul7!@KQCD7S@e!*DoI678Z1g9H{LCYA;;?x3Io=fLd4=iuKT1SfJ7S8y?LE zKrJj}9pK%rC6`XZPC5k*^}?rCJAJQ!*6e`xMI(lA{(yGhfCeYQ>z7<#KnlVW$Ym#} zk^b~8q#$gr{Uguc2U@n>?F!n6jc7fd@Bp>X&~|m*fW-bE=(36vo{*6Qa5Fm+oGMXw zfxQ5?&d>~b0XM`IJPvW_MeHR|9fo1Q4HKx8L_He>l#YD=fCuWjT~9#Qr`!V%tCD5) zql^FkzXUA{MYjswtDqDL_GbwjsD4DX>;X1^f+|-g(6kL`quWJ~&OrWD>p!EWJ=h;3-v+M+dJUB%>%ok z%a&dSftnJbcfccRovxtmd<#J7_uUG}6r6{(>xL38aBJS$bp>c(5^{#b^_57oyrsM^ z|A5BfLGy8);6)$WppAj`9SVJ_WS?sPzDU%X)~m562xi zz;d7!`QY*14Uj`>z>|lN0So&p|Ng(!2iLuK`1$*8gE|MbH~9JcE`nJX{`2=7hp-s= z`$2mVLAF;2K$fX=9)Iz81E}Njrn&aQ|55?aZn+sCmz;%&cDuf5e!+-*L?8H+HEY*9 zbq0{dId!1P9xqr91~TUgb-}CCP!|Y-oehwt2-2w6ruK{ z!t9v@nG^T`Q3XopkYs}Ft=b#ip?9F8xS%zK;Cul-(P#y1k=F;v8lex6^+O*Z>xXuL zW?(^kguxr}c0i{{{kMVrUm^!v3X6M=7o2abmmy_d(2`0I59rYlouPX?I(;{|bh_^7 zcHLv`x}#RB+jUQ;>yvKR9i6UwK!@gn_h}peZ>|BY8~`o$0wvT=*A3mSd(c`5;FVf0 znrnA3)XR2l?ppgC-ijS`Tk1lb6g?COn>K+;x&rVUh}fV3$fw1KAbUwHIJC?IKbg=hmc2S9UT z;CaFg3NJz1j*utlk&YQeS(Mc23u--qjxPfrM+Q031r&Z$_Wk?cocn~ax%LSIe;+8+ z!Bd~$8AFioe}DoGtOvC4;@FG5+mO}wKmz&&WQq``UI0mbFOvGYWT@HDAOe{!fuuGO zS*;aREi_y}Y88;wnr{2|-=o>}2PiOJD7>@;&u+n%cf*@O;FSrqI5(DO6Vlo(P-E)^ z^t4NG%eV9Ri-|`-bNeOAyQD!u)XOTs0V`rdz^vmhelGv}|D_`&VS^4$IrxC3`2ds0 zj9sA9pFMhc@3Dh)fLFlW>I5$XgPvBT0vV+R#T5hOgnH1Ce2`^eyjz(VUV>MWfmbMi z#_U{AKvwdDj>&leJtpYIF$U1##UN|J+w}juTns)>`UmLrblABhpy_x}s|0Zv2g>;m zs-TJKPSE<*FASw@;2PS$+x5=DA1vTgr{Gq3BwzIC<^91X%)q}*gsTHok%7(%2F)a( zsks7I1D!bm?XLuPt2=Z5|Njr$*3aJw+U5;P9>>6^PCbA}H>icN;auT=07Q!I;17AtL%l45%?Fq|U5|9T9%(+n-06A%w8Q~y%4exl*$}175T#Cx z;35)K2p)XEyvqZeICwv^!lU|qJ27qrUqR0KtD=mW^90N|C(%|HJ0w}4L2@Mv~@04i?4cB(?0 zIoG2(7cBU|1C&q?cqD^5o}d%9E`Wx>G(r3PK7e+5_ljO(0R{MR@M4=6BK@Ea=?+lU zQBeYF`hkv_`taJ9c;niUjXTx$6Ia&`3UbU&ICQg0Bm^svuf6BD839{Dqtp2hSGZ@(FyZ6Lc0Dw(Skp z;sz~L0B_De06szswiy<5qLD|pD@f2rx0L6&>l@HWtp{l74YbMrnsq|6>jTEd+6Vvt z|Cg^<1{FHsPAzC782>f~{(T3)ZRO76FK(6p1?><%4?1wIgcGU*wx%CE0v-AQ)Z)AV zYP^F_+~eqWz4EdIlD0r)5$G5|sTcLDz{wZ7cSH>wg)jY(RDo7rfsQZ$EoK4LaC6s# zS~3q1ZBppo@0+0MAyC`>Gq}0=4KZFYx;x0-f>* zn*jh%|3iB42+wwcW=<}Ej;cQXV(XH>|2ti8fI2Oe?9e@P;GA<1bRY+4>fd9A2PZh+ z!7AYTmEeWA-5lMnFM2@-^}m3wq3RU@Z72nuk1?S+_l^Llu;uShgzRnm0lKyTycrC< z>euujxWfb5CIwv#2004?-1+$dK3!6v+x5z8InV}mSg?ZDH-dF{uYewL22VVoo*!h< z7|z6VfdQO&E}$eHeo)t<+Z7~;ns_cSLc^!wYn1O*o^FpU9=yWaNQg gXPE9pjCn&K!-qq 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�O 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 z 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

NE1 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 str: + """Truncate PSSH string for display when not in debug mode.""" + if logging.root.level == logging.DEBUG or not pssh_string: + return pssh_string + + max_width = console.width - len(drm_type) - 12 + if len(pssh_string) <= max_width: + return pssh_string + + return pssh_string[: max_width - 3] + "..." + + def find_custom_font(self, font_name: str) -> Optional[Path]: + """ + Find font in custom fonts directory. + + Args: + font_name: Font family name to find + + Returns: + Path to font file, or None if not found + """ + family_dir = Path(config.directories.fonts, font_name) + if family_dir.exists(): + fonts = list(family_dir.glob("*.*tf")) + return fonts[0] if fonts else None + return None + + def prepare_temp_font( + self, font_name: str, matched_font: Path, system_fonts: dict[str, Path], temp_font_files: list[Path] + ) -> Path: + """ + Copy system font to temp and log if using fallback. + + Args: + font_name: Requested font name + matched_font: Path to matched system font + system_fonts: Dictionary of available system fonts + temp_font_files: List to track temp files for cleanup + + Returns: + Path to temp font file + """ + # Find the matched name for logging + matched_name = next((name for name, path in system_fonts.items() if path == matched_font), None) + + if matched_name and matched_name.lower() != font_name.lower(): + self.log.info(f"Using '{matched_name}' as fallback for '{font_name}'") + + # Create unique temp file path + safe_name = font_name.replace(" ", "_").replace("/", "_") + temp_path = config.directories.temp / f"font_{safe_name}{matched_font.suffix}" + + # Copy if not already exists + if not temp_path.exists(): + shutil.copy2(matched_font, temp_path) + temp_font_files.append(temp_path) + + return temp_path + + def attach_subtitle_fonts( + self, font_names: list[str], title: Title_T, temp_font_files: list[Path] + ) -> tuple[int, list[str]]: + """ + Attach fonts for subtitle rendering. + + Args: + font_names: List of font names requested by subtitles + title: Title object to attach fonts to + temp_font_files: List to track temp files for cleanup + + Returns: + Tuple of (fonts_attached_count, missing_fonts_list) + """ + system_fonts = get_system_fonts() + + font_count = 0 + missing_fonts = [] + + for font_name in set(font_names): + # Try custom fonts first + if custom_font := self.find_custom_font(font_name): + title.tracks.add(Attachment(path=custom_font, name=f"{font_name} ({custom_font.stem})")) + font_count += 1 + continue + + # Try system fonts with fallback + if system_font := find_font_with_fallbacks(font_name, system_fonts): + temp_path = self.prepare_temp_font(font_name, system_font, system_fonts, temp_font_files) + title.tracks.add(Attachment(path=temp_path, name=f"{font_name} ({system_font.stem})")) + font_count += 1 + else: + self.log.warning(f"Subtitle uses font '{font_name}' but it could not be found") + missing_fonts.append(font_name) + + return font_count, missing_fonts + + def suggest_missing_fonts(self, missing_fonts: list[str]) -> None: + """ + Show package installation suggestions for missing fonts. + + Args: + missing_fonts: List of font names that couldn't be found + """ + if suggestions := suggest_font_packages(missing_fonts): + self.log.info("Install font packages to improve subtitle rendering:") + for package_cmd, fonts in suggestions.items(): + self.log.info(f" $ sudo apt install {package_cmd}") + self.log.info(f" → Provides: {', '.join(fonts)}") + + def generate_sidecar_subtitle_path( + self, + subtitle: Subtitle, + base_filename: str, + output_dir: Path, + target_codec: Optional[Subtitle.Codec] = None, + source_path: Optional[Path] = None, + ) -> Path: + """Generate sidecar path: {base}.{lang}[.forced][.sdh].{ext}""" + lang_suffix = str(subtitle.language) if subtitle.language else "und" + forced_suffix = ".forced" if subtitle.forced else "" + sdh_suffix = ".sdh" if (subtitle.sdh or subtitle.cc) else "" + + extension = (target_codec or subtitle.codec or Subtitle.Codec.SubRip).extension + if ( + not target_codec + and not subtitle.codec + and source_path + and source_path.suffix + ): + extension = source_path.suffix.lstrip(".") + + filename = f"{base_filename}.{lang_suffix}{forced_suffix}{sdh_suffix}.{extension}" + return output_dir / filename + + def output_subtitle_sidecars( + self, + subtitles: list[Subtitle], + base_filename: str, + output_dir: Path, + sidecar_format: str, + original_paths: Optional[dict[str, Path]] = None, + ) -> list[Path]: + """Output subtitles as sidecar files, converting if needed.""" + created_paths: list[Path] = [] + config.directories.temp.mkdir(parents=True, exist_ok=True) + + for subtitle in subtitles: + source_path = subtitle.path + if sidecar_format == "original" and original_paths and subtitle.id in original_paths: + source_path = original_paths[subtitle.id] + + if not source_path or not source_path.exists(): + continue + + # Determine target codec + if sidecar_format == "original": + target_codec = None + if source_path.suffix: + try: + target_codec = Subtitle.Codec.from_mime(source_path.suffix.lstrip(".")) + except ValueError: + target_codec = None + else: + target_codec = Subtitle.Codec.from_mime(sidecar_format) + + sidecar_path = self.generate_sidecar_subtitle_path( + subtitle, base_filename, output_dir, target_codec, source_path=source_path + ) + + # Copy or convert + if not target_codec or subtitle.codec == target_codec: + shutil.copy2(source_path, sidecar_path) + else: + # Create temp copy for conversion to preserve original + temp_path = config.directories.temp / f"sidecar_{subtitle.id}{source_path.suffix}" + shutil.copy2(source_path, temp_path) + + temp_sub = Subtitle( + subtitle.url, + subtitle.language, + is_original_lang=subtitle.is_original_lang, + descriptor=subtitle.descriptor, + codec=subtitle.codec, + forced=subtitle.forced, + sdh=subtitle.sdh, + cc=subtitle.cc, + id_=f"{subtitle.id}_sc", + ) + temp_sub.path = temp_path + try: + temp_sub.convert(target_codec) + if temp_sub.path and temp_sub.path.exists(): + shutil.copy2(temp_sub.path, sidecar_path) + finally: + if temp_sub.path and temp_sub.path.exists(): + temp_sub.path.unlink(missing_ok=True) + temp_path.unlink(missing_ok=True) + + created_paths.append(sidecar_path) + + return created_paths + + @click.command( + short_help="Download, Decrypt, and Mux tracks for titles from a Service.", + cls=Services, + context_settings=dict(**context_settings, default_map=config.dl, token_normalize_func=Services.get_tag), + ) + @click.option( + "-p", "--profile", type=str, default=None, help="Profile to use for Credentials and Cookies (if available)." + ) + @click.option( + "-q", + "--quality", + type=QUALITY_LIST, + default=[], + help="Download Resolution(s), defaults to the best available resolution.", + ) + @click.option( + "-v", + "--vcodec", + type=VideoCodecChoice(Video.Codec), + default=None, + help="Video Codec to download, defaults to any codec.", + ) + @click.option( + "-a", + "--acodec", + type=AUDIO_CODEC_LIST, + default=[], + help="Audio Codec(s) to download (comma-separated), e.g., 'AAC,EC3'. Defaults to any.", + ) + @click.option( + "-vb", + "--vbitrate", + type=int, + default=None, + help="Video Bitrate to download (in kbps), defaults to highest available.", + ) + @click.option( + "-ab", + "--abitrate", + type=int, + default=None, + help="Audio Bitrate to download (in kbps), defaults to highest available.", + ) + @click.option( + "-r", + "--range", + "range_", + type=MultipleChoice(Video.Range, case_sensitive=False), + default=[Video.Range.SDR], + help="Video Color Range(s) to download, defaults to SDR.", + ) + @click.option( + "-c", + "--channels", + type=float, + default=None, + help="Audio Channel(s) to download. Matches sub-channel layouts like 5.1 with 6.0 implicitly.", + ) + @click.option( + "-naa", + "--noatmos", + "no_atmos", + is_flag=True, + default=False, + help="Exclude Dolby Atmos audio tracks when selecting audio.", + ) + @click.option( + "--split-audio", + "split_audio", + is_flag=True, + default=None, + help="Create separate output files per audio codec instead of merging all audio.", + ) + @click.option( + "-w", + "--wanted", + type=SEASON_RANGE, + default=None, + help="Wanted episodes, e.g. `S01-S05,S07`, `S01E01-S02E03`, `S02-S02E03`, e.t.c, defaults to all.", + ) + @click.option( + "-l", + "--lang", + type=LANGUAGE_RANGE, + default="orig", + help="Language wanted for Video and Audio. Use 'orig' to select the original language, e.g. 'orig,en' for both original and English.", + ) + @click.option( + "--latest-episode", + is_flag=True, + default=False, + help="Download only the single most recent episode available.", + ) + @click.option( + "-vl", + "--v-lang", + type=LANGUAGE_RANGE, + default=[], + help="Language wanted for Video, you would use this if the video language doesn't match the audio.", + ) + @click.option( + "-al", + "--a-lang", + type=LANGUAGE_RANGE, + default=[], + help="Language wanted for Audio, overrides -l/--lang for audio tracks.", + ) + @click.option("-sl", "--s-lang", type=LANGUAGE_RANGE, default=["all"], help="Language wanted for Subtitles.") + @click.option( + "--require-subs", + type=LANGUAGE_RANGE, + default=[], + help="Required subtitle languages. Downloads all subtitles only if these languages exist. Cannot be used with --s-lang.", + ) + @click.option("-fs", "--forced-subs", is_flag=True, default=False, help="Include forced subtitle tracks.") + @click.option( + "--exact-lang", + is_flag=True, + default=False, + help="Use exact language matching (no variants). With this flag, -l es-419 matches ONLY es-419, not es-ES or other variants.", + ) + @click.option( + "--proxy", + type=str, + default=None, + help="Proxy URI to use. If a 2-letter country is provided, it will try get a proxy from the config.", + ) + @click.option( + "--tag", type=str, default=None, help="Set the Group Tag to be used, overriding the one in config if any." + ) + @click.option( + "--tmdb", + "tmdb_id", + type=int, + default=None, + help="Use this TMDB ID for tagging instead of automatic lookup.", + ) + @click.option( + "--tmdb-name", + "tmdb_name", + is_flag=True, + default=False, + help="Rename titles using the name returned from TMDB lookup.", + ) + @click.option( + "--tmdb-year", + "tmdb_year", + is_flag=True, + default=False, + help="Use the release year from TMDB for naming and tagging.", + ) + @click.option( + "--sub-format", + type=SubtitleCodecChoice(Subtitle.Codec), + default=None, + help="Set Output Subtitle Format, only converting if necessary.", + ) + @click.option("-V", "--video-only", is_flag=True, default=False, help="Only download video tracks.") + @click.option("-A", "--audio-only", is_flag=True, default=False, help="Only download audio tracks.") + @click.option("-S", "--subs-only", is_flag=True, default=False, help="Only download subtitle tracks.") + @click.option("-C", "--chapters-only", is_flag=True, default=False, help="Only download chapters.") + @click.option("-ns", "--no-subs", is_flag=True, default=False, help="Do not download subtitle tracks.") + @click.option("-na", "--no-audio", is_flag=True, default=False, help="Do not download audio tracks.") + @click.option("-nc", "--no-chapters", is_flag=True, default=False, help="Do not download chapters tracks.") + @click.option("-nv", "--no-video", is_flag=True, default=False, help="Do not download video tracks.") + @click.option("-ad", "--audio-description", is_flag=True, default=False, help="Download audio description tracks.") + @click.option( + "--slow", + is_flag=True, + default=False, + help="Add a 60-120 second delay between each Title download to act more like a real device. " + "This is recommended if you are downloading high-risk titles or streams.", + ) + @click.option( + "--list", + "list_", + is_flag=True, + default=False, + help="Skip downloading and list available tracks and what tracks would have been downloaded.", + ) + @click.option( + "--list-titles", + is_flag=True, + default=False, + help="Skip downloading, only list available titles that would have been downloaded.", + ) + @click.option( + "--skip-dl", is_flag=True, default=False, help="Skip downloading while still retrieving the decryption keys." + ) + @click.option("--export", type=Path, help="Export Decryption Keys as you obtain them to a JSON file.") + @click.option( + "--cdm-only/--vaults-only", + is_flag=True, + default=None, + help="Only use CDM, or only use Key Vaults for retrieval of Decryption Keys.", + ) + @click.option("--no-proxy", is_flag=True, default=False, help="Force disable all proxy use.") + @click.option("--no-folder", is_flag=True, default=False, help="Disable folder creation for TV Shows.") + @click.option( + "--no-source", is_flag=True, default=False, help="Disable the source tag from the output file name and path." + ) + @click.option("--no-mux", is_flag=True, default=False, help="Do not mux tracks into a container file.") + @click.option( + "--workers", + type=int, + default=None, + help="Max workers/threads to download with per-track. Default depends on the downloader.", + ) + @click.option("--downloads", type=int, default=1, help="Amount of tracks to download concurrently.") + @click.option("--no-cache", "no_cache", is_flag=True, default=False, help="Bypass title cache for this download.") + @click.option( + "--reset-cache", "reset_cache", is_flag=True, default=False, help="Clear title cache before fetching." + ) + @click.option( + "--best-available", + "best_available", + is_flag=True, + default=False, + help="Continue with best available quality if requested resolutions are not available.", + ) + @click.pass_context + def cli(ctx: click.Context, **kwargs: Any) -> dl: + return dl(ctx, **kwargs) + + DRM_TABLE_LOCK = Lock() + + def __init__( + self, + ctx: click.Context, + no_proxy: bool, + profile: Optional[str] = None, + proxy: Optional[str] = None, + tag: Optional[str] = None, + tmdb_id: Optional[int] = None, + tmdb_name: bool = False, + tmdb_year: bool = False, + *_: Any, + **__: Any, + ): + if not ctx.invoked_subcommand: + raise ValueError("A subcommand to invoke was not specified, the main code cannot continue.") + + self.log = logging.getLogger("download") + + self.service = Services.get_tag(ctx.invoked_subcommand) + service_dl_config = config.services.get(self.service, {}).get("dl", {}) + if service_dl_config: + param_types = {param.name: param.type for param in ctx.command.params if param.name} + + for param_name, service_value in service_dl_config.items(): + if param_name not in ctx.params: + continue + + current_value = ctx.params[param_name] + global_default = config.dl.get(param_name) + param_type = param_types.get(param_name) + + try: + if param_type and global_default is not None: + global_default = param_type.convert(global_default, None, ctx) + except Exception as e: + self.log.debug(f"Failed to convert global default for '{param_name}': {e}") + + if current_value == global_default or (current_value is None and global_default is None): + try: + converted_value = service_value + if param_type and service_value is not None: + converted_value = param_type.convert(service_value, None, ctx) + + ctx.params[param_name] = converted_value + self.log.debug(f"Applied service-specific '{param_name}' override: {converted_value}") + except Exception as e: + self.log.warning( + f"Failed to apply service-specific '{param_name}' override: {e}. " + f"Check that the value '{service_value}' is valid for this parameter." + ) + + self.profile = profile + self.tmdb_id = tmdb_id + self.tmdb_name = tmdb_name + self.tmdb_year = tmdb_year + + # Initialize debug logger with service name if debug logging is enabled + if config.debug or logging.root.level == logging.DEBUG: + from collections import defaultdict + from datetime import datetime + + debug_log_path = config.directories.logs / config.filenames.debug_log.format_map( + defaultdict(str, service=self.service, time=datetime.now().strftime("%Y%m%d-%H%M%S")) + ) + init_debug_logger(log_path=debug_log_path, enabled=True, log_keys=config.debug_keys) + self.debug_logger = get_debug_logger() + + if self.debug_logger: + self.debug_logger.log( + level="INFO", + operation="download_init", + message=f"Download command initialized for service {self.service}", + service=self.service, + context={ + "profile": profile, + "proxy": proxy, + "tag": tag, + "tmdb_id": tmdb_id, + "tmdb_name": tmdb_name, + "tmdb_year": tmdb_year, + "cli_params": { + k: v + for k, v in ctx.params.items() + if k not in ["profile", "proxy", "tag", "tmdb_id", "tmdb_name", "tmdb_year"] + }, + }, + ) + else: + self.debug_logger = None + + if self.profile: + self.log.info(f"Using profile: '{self.profile}'") + + with console.status("Loading Service Config...", spinner="dots"): + service_config_path = Services.get_path(self.service) / config.filenames.config + if service_config_path.exists(): + self.service_config = yaml.safe_load(service_config_path.read_text(encoding="utf8")) + self.log.info("Service Config loaded") + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="load_service_config", + service=self.service, + context={"config_path": str(service_config_path), "config": self.service_config}, + ) + else: + self.service_config = {} + merge_dict(config.services.get(self.service), self.service_config) + + if getattr(config, "downloader_map", None): + config.downloader = config.downloader_map.get(self.service, config.downloader) + + if getattr(config, "decryption_map", None): + config.decryption = config.decryption_map.get(self.service, config.decryption) + + service_config = config.services.get(self.service, {}) + if service_config: + reserved_keys = { + "profiles", + "api_key", + "certificate", + "api_endpoint", + "region", + "device", + "endpoints", + "client", + "dl", + } + + for config_key, override_value in service_config.items(): + if config_key in reserved_keys or not isinstance(override_value, dict): + continue + + if hasattr(config, config_key): + current_config = getattr(config, config_key, {}) + + if isinstance(current_config, dict): + merged_config = deepcopy(current_config) + merge_dict(override_value, merged_config) + setattr(config, config_key, merged_config) + + self.log.debug( + f"Applied service-specific '{config_key}' overrides for {self.service}: {override_value}" + ) + + cdm_only = ctx.params.get("cdm_only") + + if cdm_only: + self.vaults = Vaults(self.service) + self.log.info("CDM-only mode: Skipping vault loading") + if self.debug_logger: + self.debug_logger.log( + level="INFO", + operation="vault_loading_skipped", + service=self.service, + context={"reason": "cdm_only flag set"}, + ) + else: + with console.status("Loading Key Vaults...", spinner="dots"): + self.vaults = Vaults(self.service) + total_vaults = len(config.key_vaults) + failed_vaults = [] + + for vault in config.key_vaults: + vault_type = vault["type"] + vault_name = vault.get("name", vault_type) + vault_copy = vault.copy() + del vault_copy["type"] + + if vault_type.lower() == "api" and "decrypt_labs" in vault_name.lower(): + if "token" not in vault_copy or not vault_copy["token"]: + if config.decrypt_labs_api_key: + vault_copy["token"] = config.decrypt_labs_api_key + else: + self.log.warning( + f"No token provided for DecryptLabs vault '{vault_name}' and no global " + "decrypt_labs_api_key configured" + ) + + if vault_type.lower() == "sqlite": + try: + self.vaults.load_critical(vault_type, **vault_copy) + self.log.debug(f"Successfully loaded vault: {vault_name} ({vault_type})") + except Exception as e: + self.log.error(f"vault failure: {vault_name} ({vault_type}) - {e}") + raise + else: + # Other vaults (MySQL, HTTP, API) - soft fail + if not self.vaults.load(vault_type, **vault_copy): + failed_vaults.append(vault_name) + self.log.debug(f"Failed to load vault: {vault_name} ({vault_type})") + else: + self.log.debug(f"Successfully loaded vault: {vault_name} ({vault_type})") + + loaded_count = len(self.vaults) + if failed_vaults: + self.log.warning(f"Failed to load {len(failed_vaults)} vault(s): {', '.join(failed_vaults)}") + self.log.info(f"Loaded {loaded_count}/{total_vaults} Vaults") + + # Debug: Show detailed vault status + if loaded_count > 0: + vault_names = [vault.name for vault in self.vaults] + self.log.debug(f"Active vaults: {', '.join(vault_names)}") + else: + self.log.debug("No vaults are currently active") + + with console.status("Loading DRM CDM...", spinner="dots"): + try: + self.cdm = self.get_cdm(self.service, self.profile) + except ValueError as e: + self.log.error(f"Failed to load CDM, {e}") + if self.debug_logger: + self.debug_logger.log_error("load_cdm", e, service=self.service) + sys.exit(1) + + if self.cdm: + cdm_info = {} + if isinstance(self.cdm, DecryptLabsRemoteCDM): + drm_type = "PlayReady" if self.cdm.is_playready else "Widevine" + self.log.info(f"Loaded {drm_type} Remote CDM: DecryptLabs (L{self.cdm.security_level})") + cdm_info = {"type": "DecryptLabs", "drm_type": drm_type, "security_level": self.cdm.security_level} + elif hasattr(self.cdm, "device_type") and self.cdm.device_type.name in ["ANDROID", "CHROME"]: + self.log.info(f"Loaded Widevine CDM: {self.cdm.system_id} (L{self.cdm.security_level})") + cdm_info = { + "type": "Widevine", + "system_id": self.cdm.system_id, + "security_level": self.cdm.security_level, + "device_type": self.cdm.device_type.name, + } + else: + # Handle both local PlayReady CDM and RemoteCdm (which has certificate_chain=None) + is_remote = self.cdm.certificate_chain is None and hasattr(self.cdm, "device_name") + if is_remote: + cdm_name = self.cdm.device_name + self.log.info(f"Loaded PlayReady Remote CDM: {cdm_name} (L{self.cdm.security_level})") + else: + cdm_name = self.cdm.certificate_chain.get_name() if self.cdm.certificate_chain else "Unknown" + self.log.info(f"Loaded PlayReady CDM: {cdm_name} (L{self.cdm.security_level})") + cdm_info = { + "type": "PlayReady", + "certificate": cdm_name, + "security_level": self.cdm.security_level, + } + + if self.debug_logger and cdm_info: + self.debug_logger.log( + level="INFO", operation="load_cdm", service=self.service, context={"cdm": cdm_info} + ) + + self.proxy_providers = [] + if no_proxy: + ctx.params["proxy"] = None + else: + with console.status("Loading Proxy Providers...", spinner="dots"): + if config.proxy_providers.get("basic"): + self.proxy_providers.append(Basic(**config.proxy_providers["basic"])) + if config.proxy_providers.get("nordvpn"): + self.proxy_providers.append(NordVPN(**config.proxy_providers["nordvpn"])) + if config.proxy_providers.get("surfsharkvpn"): + self.proxy_providers.append(SurfsharkVPN(**config.proxy_providers["surfsharkvpn"])) + if config.proxy_providers.get("windscribevpn"): + self.proxy_providers.append(WindscribeVPN(**config.proxy_providers["windscribevpn"])) + if config.proxy_providers.get("gluetun"): + self.proxy_providers.append(Gluetun(**config.proxy_providers["gluetun"])) + if binaries.HolaProxy: + self.proxy_providers.append(Hola()) + for proxy_provider in self.proxy_providers: + self.log.info(f"Loaded {proxy_provider.__class__.__name__}: {proxy_provider}") + + if proxy: + requested_provider = None + if re.match(r"^[a-z]+:.+$", proxy, re.IGNORECASE): + # requesting proxy from a specific proxy provider + requested_provider, proxy = proxy.split(":", maxsplit=1) + # Match simple region codes (us, ca, uk1) or provider:region format (nordvpn:ca, windscribe:us) + if re.match(r"^[a-z]{2}(?:\d+)?$", proxy, re.IGNORECASE) or re.match( + r"^[a-z]+:[a-z]{2}(?:\d+)?$", proxy, re.IGNORECASE + ): + proxy = proxy.lower() + # Preserve the original user query (region code) for service-specific proxy_map overrides. + # NOTE: `proxy` may be overwritten with the resolved proxy URI later. + proxy_query = proxy + status_msg = ( + f"Connecting to VPN ({proxy})..." + if requested_provider == "gluetun" + else f"Getting a Proxy to {proxy}..." + ) + with console.status(status_msg, spinner="dots"): + if requested_provider: + proxy_provider = next( + (x for x in self.proxy_providers if x.__class__.__name__.lower() == requested_provider), + None, + ) + if not proxy_provider: + self.log.error(f"The proxy provider '{requested_provider}' was not recognised.") + sys.exit(1) + proxy_uri = proxy_provider.get_proxy(proxy) + if not proxy_uri: + self.log.error(f"The proxy provider {requested_provider} had no proxy for {proxy}") + sys.exit(1) + proxy = ctx.params["proxy"] = proxy_uri + # Show connection info for Gluetun (IP, location) instead of proxy URL + if hasattr(proxy_provider, "get_connection_info"): + conn_info = proxy_provider.get_connection_info(proxy_query) + if conn_info and conn_info.get("public_ip"): + location_parts = [conn_info.get("city"), conn_info.get("country")] + location = ", ".join(p for p in location_parts if p) + self.log.info(f"VPN Connected: {conn_info['public_ip']} ({location})") + else: + self.log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + else: + self.log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + else: + for proxy_provider in self.proxy_providers: + proxy_uri = proxy_provider.get_proxy(proxy) + if proxy_uri: + proxy = ctx.params["proxy"] = proxy_uri + # Show connection info for Gluetun (IP, location) instead of proxy URL + if hasattr(proxy_provider, "get_connection_info"): + conn_info = proxy_provider.get_connection_info(proxy_query) + if conn_info and conn_info.get("public_ip"): + location_parts = [conn_info.get("city"), conn_info.get("country")] + location = ", ".join(p for p in location_parts if p) + self.log.info(f"VPN Connected: {conn_info['public_ip']} ({location})") + else: + self.log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + else: + self.log.info(f"Using {proxy_provider.__class__.__name__} Proxy: {proxy}") + break + # Store proxy query info for service-specific overrides + ctx.params["proxy_query"] = proxy_query + ctx.params["proxy_provider"] = requested_provider + else: + self.log.info(f"Using explicit Proxy: {proxy}") + # For explicit proxies, store None for query/provider + ctx.params["proxy_query"] = None + ctx.params["proxy_provider"] = None + + ctx.obj = ContextData( + config=self.service_config, cdm=self.cdm, proxy_providers=self.proxy_providers, profile=self.profile + ) + + if tag: + config.tag = tag + + # needs to be added this way instead of @cli.result_callback to be + # able to keep `self` as the first positional + self.cli._result_callback = self.result + + def result( + self, + service: Service, + quality: list[int], + vcodec: Optional[Video.Codec], + acodec: list[Audio.Codec], + vbitrate: int, + abitrate: int, + range_: list[Video.Range], + channels: float, + no_atmos: bool, + wanted: list[str], + latest_episode: bool, + lang: list[str], + v_lang: list[str], + a_lang: list[str], + s_lang: list[str], + require_subs: list[str], + forced_subs: bool, + exact_lang: bool, + sub_format: Optional[Subtitle.Codec], + video_only: bool, + audio_only: bool, + subs_only: bool, + chapters_only: bool, + no_subs: bool, + no_audio: bool, + no_chapters: bool, + no_video: bool, + audio_description: bool, + slow: bool, + list_: bool, + list_titles: bool, + skip_dl: bool, + export: Optional[Path], + cdm_only: Optional[bool], + no_proxy: bool, + no_folder: bool, + no_source: bool, + no_mux: bool, + workers: Optional[int], + downloads: int, + best_available: bool, + split_audio: Optional[bool] = None, + *_: Any, + **__: Any, + ) -> None: + self.tmdb_searched = False + self.search_source = None + start_time = time.time() + + if skip_dl: + DOWNLOAD_LICENCE_ONLY.set() + + if not acodec: + acodec = [] + elif isinstance(acodec, Audio.Codec): + acodec = [acodec] + elif isinstance(acodec, str) or ( + isinstance(acodec, list) and not all(isinstance(v, Audio.Codec) for v in acodec) + ): + acodec = AUDIO_CODEC_LIST.convert(acodec) + + if require_subs and s_lang != ["all"]: + self.log.error("--require-subs and --s-lang cannot be used together") + sys.exit(1) + + # Check if dovi_tool is available when hybrid mode is requested + if any(r == Video.Range.HYBRID for r in range_): + from envied.core.binaries import DoviTool + + if not DoviTool: + self.log.error("Unable to run hybrid mode: dovi_tool not detected") + self.log.error("Please install dovi_tool from https://github.com/quietvoid/dovi_tool") + sys.exit(1) + + if cdm_only is None: + vaults_only = None + else: + vaults_only = not cdm_only + + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="drm_mode_config", + service=self.service, + context={ + "cdm_only": cdm_only, + "vaults_only": vaults_only, + "mode": "CDM only" if cdm_only else ("Vaults only" if vaults_only else "Both CDM and Vaults"), + }, + ) + + with console.status("Authenticating with Service...", spinner="dots"): + try: + cookies = self.get_cookie_jar(self.service, self.profile) + credential = self.get_credentials(self.service, self.profile) + service.authenticate(cookies, credential) + if cookies or credential: + self.log.info("Authenticated with Service") + if self.debug_logger: + self.debug_logger.log( + level="INFO", + operation="authenticate", + service=self.service, + context={ + "has_cookies": bool(cookies), + "has_credentials": bool(credential), + "profile": self.profile, + }, + ) + except Exception as e: + if self.debug_logger: + self.debug_logger.log_error( + "authenticate", e, service=self.service, context={"profile": self.profile} + ) + raise + + with console.status("Fetching Title Metadata...", spinner="dots"): + try: + titles = service.get_titles_cached() + if not titles: + self.log.error("No titles returned, nothing to download...") + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="get_titles", + service=self.service, + message="No titles returned from service", + success=False, + ) + sys.exit(1) + except Exception as e: + if self.debug_logger: + self.debug_logger.log_error("get_titles", e, service=self.service) + raise + + if self.debug_logger: + titles_info = { + "type": titles.__class__.__name__, + "count": len(titles) if hasattr(titles, "__len__") else 1, + "title": str(titles), + } + if hasattr(titles, "seasons"): + titles_info["seasons"] = len(titles.seasons) if hasattr(titles, "seasons") else 0 + self.debug_logger.log( + level="INFO", operation="get_titles", service=self.service, context={"titles": titles_info} + ) + + title_cacher = service.title_cache if hasattr(service, "title_cache") else None + cache_title_id = None + if hasattr(service, "title"): + cache_title_id = service.title + elif hasattr(service, "title_id"): + cache_title_id = service.title_id + cache_region = service.current_region if hasattr(service, "current_region") else None + cache_account_hash = get_account_hash(service.credential) if hasattr(service, "credential") else None + + if (self.tmdb_year or self.tmdb_name) and self.tmdb_id: + sample_title = titles[0] if hasattr(titles, "__getitem__") else titles + kind = "tv" if isinstance(sample_title, Episode) else "movie" + + tmdb_year_val = None + tmdb_name_val = None + + if self.tmdb_year: + tmdb_year_val = tags.get_year( + self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash + ) + + if self.tmdb_name: + tmdb_name_val = tags.get_title( + self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash + ) + + if isinstance(titles, (Series, Movies)): + for t in titles: + if tmdb_year_val: + t.year = tmdb_year_val + if tmdb_name_val: + if isinstance(t, Episode): + t.title = tmdb_name_val + else: + t.name = tmdb_name_val + else: + if tmdb_year_val: + titles.year = tmdb_year_val + if tmdb_name_val: + if isinstance(titles, Episode): + titles.title = tmdb_name_val + else: + titles.name = tmdb_name_val + + console.print(Padding(Rule(f"[rule.text]{titles.__class__.__name__}: {titles}"), (1, 2))) + + console.print(Padding(titles.tree(verbose=list_titles), (0, 5))) + if list_titles: + return + + # Determine the latest episode if --latest-episode is set + latest_episode_id = None + if latest_episode and isinstance(titles, Series) and len(titles) > 0: + # Series is already sorted by (season, number, year) + # The last episode in the sorted list is the latest + latest_ep = titles[-1] + latest_episode_id = f"{latest_ep.season}x{latest_ep.number}" + self.log.info(f"Latest episode mode: Selecting S{latest_ep.season:02}E{latest_ep.number:02}") + + for i, title in enumerate(titles): + if isinstance(title, Episode) and latest_episode and latest_episode_id: + # If --latest-episode is set, only process the latest episode + if f"{title.season}x{title.number}" != latest_episode_id: + continue + elif isinstance(title, Episode) and wanted and f"{title.season}x{title.number}" not in wanted: + continue + + console.print(Padding(Rule(f"[rule.text]{title}"), (1, 2))) + temp_font_files = [] + + if isinstance(title, Episode) and not self.tmdb_searched: + kind = "tv" + if self.tmdb_id: + tmdb_title = tags.get_title( + self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash + ) + else: + self.tmdb_id, tmdb_title, self.search_source = tags.search_show_info( + title.title, title.year, kind, title_cacher, cache_title_id, cache_region, cache_account_hash + ) + if not (self.tmdb_id and tmdb_title and tags.fuzzy_match(tmdb_title, title.title)): + self.tmdb_id = None + if list_ or list_titles: + if self.tmdb_id: + console.print( + Padding( + f"Search -> {tmdb_title or '?'} [bright_black](ID {self.tmdb_id})", + (0, 5), + ) + ) + else: + console.print(Padding("Search -> [bright_black]No match found[/]", (0, 5))) + self.tmdb_searched = True + + if isinstance(title, Movie) and (list_ or list_titles) and not self.tmdb_id: + movie_id, movie_title, _ = tags.search_show_info( + title.name, title.year, "movie", title_cacher, cache_title_id, cache_region, cache_account_hash + ) + if movie_id: + console.print( + Padding( + f"Search -> {movie_title or '?'} [bright_black](ID {movie_id})", + (0, 5), + ) + ) + else: + console.print(Padding("Search -> [bright_black]No match found[/]", (0, 5))) + + if self.tmdb_id and getattr(self, "search_source", None) != "simkl": + kind = "tv" if isinstance(title, Episode) else "movie" + tags.external_ids(self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash) + + if slow and i != 0: + delay = random.randint(60, 120) + with console.status(f"Delaying by {delay} seconds..."): + time.sleep(delay) + + with console.status("Subscribing to events...", spinner="dots"): + events.reset() + events.subscribe(events.Types.SEGMENT_DOWNLOADED, service.on_segment_downloaded) + events.subscribe(events.Types.TRACK_DOWNLOADED, service.on_track_downloaded) + events.subscribe(events.Types.TRACK_DECRYPTED, service.on_track_decrypted) + events.subscribe(events.Types.TRACK_REPACKED, service.on_track_repacked) + events.subscribe(events.Types.TRACK_MULTIPLEX, service.on_track_multiplex) + + if hasattr(service, "NO_SUBTITLES") and service.NO_SUBTITLES: + console.log("Skipping subtitles - service does not support subtitle downloads") + no_subs = True + s_lang = None + title.tracks.subtitles = [] + elif no_subs: + console.log("Skipped subtitles as --no-subs was used...") + s_lang = None + title.tracks.subtitles = [] + + if no_video: + console.log("Skipped video as --no-video was used...") + v_lang = None + title.tracks.videos = [] + + with console.status("Getting tracks...", spinner="dots"): + try: + title.tracks.add(service.get_tracks(title), warn_only=True) + title.tracks.chapters = service.get_chapters(title) + except Exception as e: + if self.debug_logger: + self.debug_logger.log_error( + "get_tracks", e, service=self.service, context={"title": str(title)} + ) + raise + + if self.debug_logger: + tracks_info = { + "title": str(title), + "video_tracks": len(title.tracks.videos), + "audio_tracks": len(title.tracks.audio), + "subtitle_tracks": len(title.tracks.subtitles), + "has_chapters": bool(title.tracks.chapters), + "videos": [ + { + "codec": str(v.codec), + "resolution": f"{v.width}x{v.height}" if v.width and v.height else "unknown", + "bitrate": v.bitrate, + "range": str(v.range), + "language": str(v.language) if v.language else None, + "drm": [str(type(d).__name__) for d in v.drm] if v.drm else [], + } + for v in title.tracks.videos + ], + "audio": [ + { + "codec": str(a.codec), + "bitrate": a.bitrate, + "channels": a.channels, + "language": str(a.language) if a.language else None, + "descriptive": a.descriptive, + "drm": [str(type(d).__name__) for d in a.drm] if a.drm else [], + } + for a in title.tracks.audio + ], + "subtitles": [ + { + "codec": str(s.codec), + "language": str(s.language) if s.language else None, + "forced": s.forced, + "sdh": s.sdh, + } + for s in title.tracks.subtitles + ], + } + self.debug_logger.log( + level="INFO", operation="get_tracks", service=self.service, context=tracks_info + ) + + # strip SDH subs to non-SDH if no equivalent same-lang non-SDH is available + # uses a loose check, e.g, wont strip en-US SDH sub if a non-SDH en-GB is available + # Check if automatic SDH stripping is enabled in config + if config.subtitle.get("strip_sdh", True): + for subtitle in title.tracks.subtitles: + if subtitle.sdh and not any( + is_close_match(subtitle.language, [x.language]) + for x in title.tracks.subtitles + if not x.sdh and not x.forced + ): + non_sdh_sub = deepcopy(subtitle) + non_sdh_sub.id += "_stripped" + non_sdh_sub.sdh = False + title.tracks.add(non_sdh_sub) + events.subscribe( + events.Types.TRACK_MULTIPLEX, + lambda track, sub_id=non_sdh_sub.id: (track.strip_hearing_impaired()) + if track.id == sub_id + else None, + ) + + with console.status("Sorting tracks by language and bitrate...", spinner="dots"): + video_sort_lang = v_lang or lang + processed_video_sort_lang = [] + for language in video_sort_lang: + if language == "orig": + if title.language: + orig_lang = str(title.language) if hasattr(title.language, "__str__") else title.language + if orig_lang not in processed_video_sort_lang: + processed_video_sort_lang.append(orig_lang) + else: + if language not in processed_video_sort_lang: + processed_video_sort_lang.append(language) + + audio_sort_lang = a_lang or lang + processed_audio_sort_lang = [] + for language in audio_sort_lang: + if language == "orig": + if title.language: + orig_lang = str(title.language) if hasattr(title.language, "__str__") else title.language + if orig_lang not in processed_audio_sort_lang: + processed_audio_sort_lang.append(orig_lang) + else: + if language not in processed_audio_sort_lang: + processed_audio_sort_lang.append(language) + + title.tracks.sort_videos(by_language=processed_video_sort_lang) + title.tracks.sort_audio(by_language=processed_audio_sort_lang) + title.tracks.sort_subtitles(by_language=s_lang) + + if list_: + available_tracks, _ = title.tracks.tree() + console.print(Padding(Panel(available_tracks, title="Available Tracks"), (0, 5))) + continue + + with console.status("Selecting tracks...", spinner="dots"): + if isinstance(title, (Movie, Episode)): + # filter video tracks + if vcodec: + title.tracks.select_video(lambda x: x.codec == vcodec) + if not title.tracks.videos: + self.log.error(f"There's no {vcodec.name} Video Track...") + sys.exit(1) + + if range_: + # Special handling for HYBRID - don't filter, keep all HDR10 and DV tracks + if Video.Range.HYBRID not in range_: + title.tracks.select_video(lambda x: x.range in range_) + missing_ranges = [r for r in range_ if not any(x.range == r for x in title.tracks.videos)] + for color_range in missing_ranges: + self.log.warning(f"Skipping {color_range.name} video tracks as none are available.") + + if vbitrate: + title.tracks.select_video(lambda x: x.bitrate and x.bitrate // 1000 == vbitrate) + if not title.tracks.videos: + self.log.error(f"There's no {vbitrate}kbps Video Track...") + sys.exit(1) + + video_languages = [lang for lang in (v_lang or lang) if lang != "best"] + if video_languages and "all" not in video_languages: + processed_video_lang = [] + for language in video_languages: + if language == "orig": + if title.language: + orig_lang = ( + str(title.language) if hasattr(title.language, "__str__") else title.language + ) + if orig_lang not in processed_video_lang: + processed_video_lang.append(orig_lang) + else: + self.log.warning( + "Original language not available for title, skipping 'orig' selection for video" + ) + else: + if language not in processed_video_lang: + processed_video_lang.append(language) + title.tracks.videos = title.tracks.by_language( + title.tracks.videos, processed_video_lang, exact_match=exact_lang + ) + if not title.tracks.videos: + self.log.error(f"There's no {processed_video_lang} Video Track...") + sys.exit(1) + + if quality: + missing_resolutions = [] + if any(r == Video.Range.HYBRID for r in range_): + title.tracks.select_video(title.tracks.select_hybrid(title.tracks.videos, quality)) + else: + title.tracks.by_resolutions(quality) + + for resolution in quality: + if any(v.height == resolution for v in title.tracks.videos): + continue + if any(int(v.width * 9 / 16) == resolution for v in title.tracks.videos): + continue + missing_resolutions.append(resolution) + + if missing_resolutions: + res_list = "" + if len(missing_resolutions) > 1: + res_list = ", ".join([f"{x}p" for x in missing_resolutions[:-1]]) + " or " + res_list = f"{res_list}{missing_resolutions[-1]}p" + plural = "s" if len(missing_resolutions) > 1 else "" + + if best_available: + self.log.warning( + f"There's no {res_list} Video Track{plural}, continuing with available qualities..." + ) + else: + self.log.error(f"There's no {res_list} Video Track{plural}...") + sys.exit(1) + + # choose best track by range and quality + if any(r == Video.Range.HYBRID for r in range_): + # For hybrid mode, always apply hybrid selection + # If no quality specified, use only the best (highest) resolution + if not quality: + # Get the highest resolution available + best_resolution = max((v.height for v in title.tracks.videos), default=None) + if best_resolution: + # Use the hybrid selection logic with only the best resolution + title.tracks.select_video( + title.tracks.select_hybrid(title.tracks.videos, [best_resolution]) + ) + # If quality was specified, hybrid selection was already applied above + else: + selected_videos: list[Video] = [] + for resolution, color_range in product(quality or [None], range_ or [None]): + match = next( + ( + t + for t in title.tracks.videos + if ( + not resolution + or t.height == resolution + or int(t.width * (9 / 16)) == resolution + ) + and (not color_range or t.range == color_range) + ), + None, + ) + if match and match not in selected_videos: + selected_videos.append(match) + title.tracks.videos = selected_videos + + # validate hybrid mode requirements + if any(r == Video.Range.HYBRID for r in range_): + hdr10_tracks = [v for v in title.tracks.videos if v.range == Video.Range.HDR10] + dv_tracks = [v for v in title.tracks.videos if v.range == Video.Range.DV] + + if not hdr10_tracks and not dv_tracks: + available_ranges = sorted(set(v.range.name for v in title.tracks.videos)) + self.log.error("HYBRID mode requires both HDR10 and DV tracks, but neither is available") + self.log.error( + f"Available ranges: {', '.join(available_ranges) if available_ranges else 'none'}" + ) + sys.exit(1) + elif not hdr10_tracks: + available_ranges = sorted(set(v.range.name for v in title.tracks.videos)) + self.log.error("HYBRID mode requires both HDR10 and DV tracks, but only DV is available") + self.log.error(f"Available ranges: {', '.join(available_ranges)}") + sys.exit(1) + elif not dv_tracks: + available_ranges = sorted(set(v.range.name for v in title.tracks.videos)) + self.log.error("HYBRID mode requires both HDR10 and DV tracks, but only HDR10 is available") + self.log.error(f"Available ranges: {', '.join(available_ranges)}") + sys.exit(1) + + # filter subtitle tracks + if require_subs: + missing_langs = [ + lang + for lang in require_subs + if not any(is_close_match(lang, [sub.language]) for sub in title.tracks.subtitles) + ] + + if missing_langs: + self.log.error(f"Required subtitle language(s) not found: {', '.join(missing_langs)}") + sys.exit(1) + + self.log.info( + f"Required languages found ({', '.join(require_subs)}), downloading all available subtitles" + ) + elif s_lang and "all" not in s_lang: + from envied.core.utilities import is_exact_match + + match_func = is_exact_match if exact_lang else is_close_match + + missing_langs = [ + lang_ + for lang_ in s_lang + if not any(match_func(lang_, [sub.language]) for sub in title.tracks.subtitles) + ] + if missing_langs: + self.log.error(", ".join(missing_langs) + " not found in tracks") + sys.exit(1) + + title.tracks.select_subtitles(lambda x: match_func(x.language, s_lang)) + if not title.tracks.subtitles: + self.log.error(f"There's no {s_lang} Subtitle Track...") + sys.exit(1) + + if not forced_subs: + title.tracks.select_subtitles(lambda x: not x.forced) + + # filter audio tracks + # might have no audio tracks if part of the video, e.g. transport stream hls + if len(title.tracks.audio) > 0: + if not audio_description: + title.tracks.select_audio(lambda x: not x.descriptive) # exclude descriptive audio + if acodec: + title.tracks.select_audio(lambda x: x.codec in acodec) + if not title.tracks.audio: + codec_names = ", ".join(c.name for c in acodec) + self.log.error(f"No audio tracks matching codecs: {codec_names}") + sys.exit(1) + if channels: + title.tracks.select_audio(lambda x: math.ceil(x.channels) == math.ceil(channels)) + if not title.tracks.audio: + self.log.error(f"There's no {channels} Audio Track...") + sys.exit(1) + if no_atmos: + title.tracks.audio = [x for x in title.tracks.audio if not x.atmos] + if not title.tracks.audio: + self.log.error("No non-Atmos audio tracks available...") + sys.exit(1) + if abitrate: + title.tracks.select_audio(lambda x: x.bitrate and x.bitrate // 1000 == abitrate) + if not title.tracks.audio: + self.log.error(f"There's no {abitrate}kbps Audio Track...") + sys.exit(1) + audio_languages = a_lang or lang + if audio_languages: + processed_lang = [] + for language in audio_languages: + if language == "orig": + if title.language: + orig_lang = ( + str(title.language) if hasattr(title.language, "__str__") else title.language + ) + if orig_lang not in processed_lang: + processed_lang.append(orig_lang) + else: + self.log.warning( + "Original language not available for title, skipping 'orig' selection" + ) + else: + if language not in processed_lang: + processed_lang.append(language) + + if "best" in processed_lang: + unique_languages = {track.language for track in title.tracks.audio} + selected_audio = [] + for language in unique_languages: + codecs_to_check = acodec if (acodec and len(acodec) > 1) else [None] + for codec in codecs_to_check: + base_candidates = [ + t + for t in title.tracks.audio + if t.language == language and (codec is None or t.codec == codec) + ] + if not base_candidates: + continue + if audio_description: + standards = [t for t in base_candidates if not t.descriptive] + if standards: + selected_audio.append(max(standards, key=lambda x: x.bitrate or 0)) + descs = [t for t in base_candidates if t.descriptive] + if descs: + selected_audio.append(max(descs, key=lambda x: x.bitrate or 0)) + else: + selected_audio.append(max(base_candidates, key=lambda x: x.bitrate or 0)) + title.tracks.audio = selected_audio + elif "all" not in processed_lang: + # If multiple codecs were explicitly requested, pick the best track per codec per + # requested language instead of selecting *all* bitrate variants of a codec. + if acodec and len(acodec) > 1: + selected_audio: list[Audio] = [] + + for language in processed_lang: + for codec in acodec: + codec_tracks = [a for a in title.tracks.audio if a.codec == codec] + if not codec_tracks: + continue + + candidates = title.tracks.by_language( + codec_tracks, [language], per_language=0, exact_match=exact_lang + ) + if not candidates: + continue + + if audio_description: + standards = [t for t in candidates if not t.descriptive] + if standards: + selected_audio.append(max(standards, key=lambda x: x.bitrate or 0)) + descs = [t for t in candidates if t.descriptive] + if descs: + selected_audio.append(max(descs, key=lambda x: x.bitrate or 0)) + else: + selected_audio.append(max(candidates, key=lambda x: x.bitrate or 0)) + + title.tracks.audio = selected_audio + else: + per_language = 1 + if audio_description: + standard_audio = [a for a in title.tracks.audio if not a.descriptive] + selected_standards = title.tracks.by_language( + standard_audio, processed_lang, per_language=per_language, exact_match=exact_lang + ) + desc_audio = [a for a in title.tracks.audio if a.descriptive] + # Include all descriptive tracks for the requested languages. + selected_descs = title.tracks.by_language( + desc_audio, processed_lang, per_language=0, exact_match=exact_lang + ) + title.tracks.audio = selected_standards + selected_descs + else: + title.tracks.audio = title.tracks.by_language( + title.tracks.audio, + processed_lang, + per_language=per_language, + exact_match=exact_lang, + ) + if not title.tracks.audio: + self.log.error(f"There's no {processed_lang} Audio Track, cannot continue...") + sys.exit(1) + + if ( + video_only + or audio_only + or subs_only + or chapters_only + or no_subs + or no_audio + or no_chapters + or no_video + ): + keep_videos = False + keep_audio = False + keep_subtitles = False + keep_chapters = False + + if video_only or audio_only or subs_only or chapters_only: + if video_only: + keep_videos = True + if audio_only: + keep_audio = True + if subs_only: + keep_subtitles = True + if chapters_only: + keep_chapters = True + else: + keep_videos = True + keep_audio = True + keep_subtitles = True + keep_chapters = True + + if no_subs: + keep_subtitles = False + if no_audio: + keep_audio = False + if no_chapters: + keep_chapters = False + if no_video: + keep_videos = False + + kept_tracks = [] + if keep_videos: + kept_tracks.extend(title.tracks.videos) + if keep_audio: + kept_tracks.extend(title.tracks.audio) + if keep_subtitles: + kept_tracks.extend(title.tracks.subtitles) + if keep_chapters: + kept_tracks.extend(title.tracks.chapters) + kept_tracks.extend(title.tracks.attachments) + + title.tracks = Tracks(kept_tracks) + + selected_tracks, tracks_progress_callables = title.tracks.tree(add_progress=True) + + for track in title.tracks: + if hasattr(track, "needs_drm_loading") and track.needs_drm_loading: + track.load_drm_if_needed(service) + + download_table = Table.grid() + download_table.add_row(selected_tracks) + + video_tracks = title.tracks.videos + if video_tracks: + highest_quality = max((track.height for track in video_tracks if track.height), default=0) + if highest_quality > 0: + if is_widevine_cdm(self.cdm): + quality_based_cdm = self.get_cdm( + self.service, self.profile, drm="widevine", quality=highest_quality + ) + if quality_based_cdm and quality_based_cdm != self.cdm: + self.log.debug( + f"Pre-selecting Widevine CDM based on highest quality {highest_quality}p across all video tracks" + ) + self.cdm = quality_based_cdm + elif is_playready_cdm(self.cdm): + quality_based_cdm = self.get_cdm( + self.service, self.profile, drm="playready", quality=highest_quality + ) + if quality_based_cdm and quality_based_cdm != self.cdm: + self.log.debug( + f"Pre-selecting PlayReady CDM based on highest quality {highest_quality}p across all video tracks" + ) + self.cdm = quality_based_cdm + + dl_start_time = time.time() + + try: + with Live(Padding(download_table, (1, 5)), console=console, refresh_per_second=5): + with ThreadPoolExecutor(downloads) as pool: + for download in futures.as_completed( + ( + pool.submit( + track.download, + session=service.session, + prepare_drm=partial( + partial(self.prepare_drm, table=download_table), + track=track, + title=title, + certificate=partial( + service.get_widevine_service_certificate, + title=title, + track=track, + ), + licence=partial( + service.get_playready_license + if ( + is_playready_cdm(self.cdm) + ) + and hasattr(service, "get_playready_license") + else service.get_widevine_license, + title=title, + track=track, + ), + cdm_only=cdm_only, + vaults_only=vaults_only, + export=export, + ), + cdm=self.cdm, + max_workers=workers, + progress=tracks_progress_callables[i], + ) + for i, track in enumerate(title.tracks) + ) + ): + download.result() + + except KeyboardInterrupt: + console.print(Padding(":x: Download Cancelled...", (0, 5, 1, 5))) + if self.debug_logger: + self.debug_logger.log( + level="WARNING", + operation="download_tracks", + service=self.service, + message="Download cancelled by user", + context={"title": str(title)}, + ) + return + except Exception as e: # noqa + error_messages = [ + ":x: Download Failed...", + ] + if isinstance(e, EnvironmentError): + error_messages.append(f" {e}") + if isinstance(e, ValueError): + error_messages.append(f" {e}") + if isinstance(e, (AttributeError, TypeError)): + console.print_exception() + else: + error_messages.append( + " An unexpected error occurred in one of the download workers.", + ) + if hasattr(e, "returncode"): + error_messages.append(f" Binary call failed, Process exit code: {e.returncode}") + error_messages.append(" See the error trace above for more information.") + if isinstance(e, subprocess.CalledProcessError): + # CalledProcessError already lists the exception trace + console.print_exception() + console.print(Padding(Group(*error_messages), (1, 5))) + + if self.debug_logger: + self.debug_logger.log_error( + "download_tracks", + e, + service=self.service, + context={ + "title": str(title), + "error_type": type(e).__name__, + "tracks_count": len(title.tracks), + "returncode": getattr(e, "returncode", None), + }, + ) + return + + if skip_dl: + console.log("Skipped downloads as --skip-dl was used...") + else: + dl_time = time_elapsed_since(dl_start_time) + console.print(Padding(f"Track downloads finished in [progress.elapsed]{dl_time}[/]", (0, 5))) + + video_track_n = 0 + + while ( + not title.tracks.subtitles + and not no_subs + and not (hasattr(service, "NO_SUBTITLES") and service.NO_SUBTITLES) + and not video_only + and not no_video + and len(title.tracks.videos) > video_track_n + and any( + x.get("codec_name", "").startswith("eia_") + for x in ffprobe(title.tracks.videos[video_track_n].path).get("streams", []) + ) + ): + with console.status(f"Checking Video track {video_track_n + 1} for Closed Captions..."): + try: + # TODO: Figure out the real language, it might be different + # EIA-CC tracks sadly don't carry language information :( + # TODO: Figure out if the CC language is original lang or not. + # Will need to figure out above first to do so. + video_track = title.tracks.videos[video_track_n] + track_id = f"ccextractor-{video_track.id}" + cc_lang = title.language or video_track.language + cc = video_track.ccextractor( + track_id=track_id, + out_path=config.directories.temp + / config.filenames.subtitle.format(id=track_id, language=cc_lang), + language=cc_lang, + original=False, + ) + if cc: + # will not appear in track listings as it's added after all times it lists + title.tracks.add(cc) + self.log.info(f"Extracted a Closed Caption from Video track {video_track_n + 1}") + else: + self.log.info(f"No Closed Captions were found in Video track {video_track_n + 1}") + except EnvironmentError: + self.log.error( + "Cannot extract Closed Captions as the ccextractor executable was not found..." + ) + break + video_track_n += 1 + + # Subtitle output mode configuration (for sidecar originals) + subtitle_output_mode = config.subtitle.get("output_mode", "mux") + sidecar_format = config.subtitle.get("sidecar_format", "srt") + skip_subtitle_mux = ( + subtitle_output_mode == "sidecar" and (title.tracks.videos or title.tracks.audio) + ) + sidecar_subtitles: list[Subtitle] = [] + sidecar_original_paths: dict[str, Path] = {} + if subtitle_output_mode in ("sidecar", "both") and not no_mux: + sidecar_subtitles = [s for s in title.tracks.subtitles if s.path and s.path.exists()] + if sidecar_format == "original": + config.directories.temp.mkdir(parents=True, exist_ok=True) + for subtitle in sidecar_subtitles: + original_path = ( + config.directories.temp / f"sidecar_original_{subtitle.id}{subtitle.path.suffix}" + ) + shutil.copy2(subtitle.path, original_path) + sidecar_original_paths[subtitle.id] = original_path + + with console.status("Converting Subtitles..."): + for subtitle in title.tracks.subtitles: + if sub_format: + if subtitle.codec != sub_format: + subtitle.convert(sub_format) + elif subtitle.codec == Subtitle.Codec.TimedTextMarkupLang: + # MKV does not support TTML, VTT is the next best option + subtitle.convert(Subtitle.Codec.WebVTT) + + with console.status("Checking Subtitles for Fonts..."): + font_names = [] + for subtitle in title.tracks.subtitles: + if subtitle.codec == Subtitle.Codec.SubStationAlphav4: + for line in subtitle.path.read_text("utf8").splitlines(): + if line.startswith("Style: "): + font_names.append(line.removeprefix("Style: ").split(",")[1].strip()) + + font_count, missing_fonts = self.attach_subtitle_fonts(font_names, title, temp_font_files) + + if font_count: + self.log.info(f"Attached {font_count} fonts for the Subtitles") + + if missing_fonts and sys.platform != "win32": + self.suggest_missing_fonts(missing_fonts) + + # Handle DRM decryption BEFORE repacking (must decrypt first!) + service_name = service.__class__.__name__.upper() + decryption_method = config.decryption_map.get(service_name, config.decryption) + decrypt_tool = "mp4decrypt" if decryption_method.lower() == "mp4decrypt" else "Shaka Packager" + + drm_tracks = [track for track in title.tracks if track.drm] + if drm_tracks: + with console.status(f"Decrypting tracks with {decrypt_tool}..."): + has_decrypted = False + for track in drm_tracks: + drm = track.get_drm_for_cdm(self.cdm) + if drm and hasattr(drm, "decrypt"): + drm.decrypt(track.path) + if not isinstance(drm, MonaLisa): + has_decrypted = True + events.emit(events.Types.TRACK_REPACKED, track=track) + else: + self.log.warning( + f"No matching DRM found for track {track} with CDM type {type(self.cdm).__name__}" + ) + if has_decrypted: + self.log.info(f"Decrypted tracks with {decrypt_tool}") + + # Now repack the decrypted tracks + with console.status("Repackaging tracks with FFMPEG..."): + has_repacked = False + for track in title.tracks: + if track.needs_repack: + track.repackage() + has_repacked = True + events.emit(events.Types.TRACK_REPACKED, track=track) + if has_repacked: + # we don't want to fill up the log with "Repacked x track" + self.log.info("Repacked one or more tracks with FFMPEG") + + muxed_paths = [] + muxed_audio_codecs: dict[Path, Optional[Audio.Codec]] = {} + append_audio_codec_suffix = True + + if no_mux: + # Skip muxing, handle individual track files + for track in title.tracks: + if track.path and track.path.exists(): + muxed_paths.append(track.path) + elif isinstance(title, (Movie, Episode)): + progress = Progress( + TextColumn("[progress.description]{task.description}"), + SpinnerColumn(finished_text=""), + BarColumn(), + "•", + TimeRemainingColumn(compact=True, elapsed_when_finished=True), + console=console, + ) + + merge_audio = ( + (not split_audio) if split_audio is not None else config.muxing.get("merge_audio", True) + ) + # When we split audio (merge_audio=False), multiple outputs may exist per title, so suffix codec. + append_audio_codec_suffix = not merge_audio + + multiplex_tasks: list[tuple[TaskID, Tracks, Optional[Audio.Codec]]] = [] + # Track hybrid-processing outputs explicitly so we can always clean them up, + # even if muxing fails early (e.g. SystemExit) before the normal delete loop. + hybrid_temp_paths: list[Path] = [] + + def clone_tracks_for_audio(base_tracks: Tracks, audio_tracks: list[Audio]) -> Tracks: + task_tracks = Tracks() + task_tracks.videos = list(base_tracks.videos) + task_tracks.audio = audio_tracks + task_tracks.subtitles = list(base_tracks.subtitles) + task_tracks.chapters = base_tracks.chapters + task_tracks.attachments = list(base_tracks.attachments) + return task_tracks + + def enqueue_mux_tasks(task_description: str, base_tracks: Tracks) -> None: + if merge_audio or not base_tracks.audio: + task_id = progress.add_task(f"{task_description}...", total=None, start=False) + multiplex_tasks.append((task_id, base_tracks, None)) + return + + audio_by_codec: dict[Optional[Audio.Codec], list[Audio]] = {} + for audio_track in base_tracks.audio: + audio_by_codec.setdefault(audio_track.codec, []).append(audio_track) + + for audio_codec, codec_audio_tracks in audio_by_codec.items(): + description = task_description + if audio_codec: + description = f"{task_description} {audio_codec.name}" + + task_id = progress.add_task(f"{description}...", total=None, start=False) + task_tracks = clone_tracks_for_audio(base_tracks, codec_audio_tracks) + multiplex_tasks.append((task_id, task_tracks, audio_codec)) + + # Check if we're in hybrid mode + if any(r == Video.Range.HYBRID for r in range_) and title.tracks.videos: + # Hybrid mode: process DV and HDR10 tracks separately for each resolution + self.log.info("Processing Hybrid HDR10+DV tracks...") + + # Group video tracks by resolution + resolutions_processed = set() + hdr10_tracks = [v for v in title.tracks.videos if v.range == Video.Range.HDR10] + dv_tracks = [v for v in title.tracks.videos if v.range == Video.Range.DV] + + for hdr10_track in hdr10_tracks: + resolution = hdr10_track.height + if resolution in resolutions_processed: + continue + resolutions_processed.add(resolution) + + # Find matching DV track for this resolution (use the lowest DV resolution) + matching_dv = min(dv_tracks, key=lambda v: v.height) if dv_tracks else None + + if matching_dv: + # Create track pair for this resolution + resolution_tracks = [hdr10_track, matching_dv] + + for track in resolution_tracks: + track.needs_duration_fix = True + + # Run the hybrid processing for this resolution + Hybrid(resolution_tracks, self.service) + + # Create unique output filename for this resolution + hybrid_filename = f"HDR10-DV-{resolution}p.hevc" + hybrid_output_path = config.directories.temp / hybrid_filename + hybrid_temp_paths.append(hybrid_output_path) + + # The Hybrid class creates HDR10-DV.hevc, rename it for this resolution + default_output = config.directories.temp / "HDR10-DV.hevc" + if default_output.exists(): + # If a previous run left this behind, replace it to avoid move() failures. + hybrid_output_path.unlink(missing_ok=True) + shutil.move(str(default_output), str(hybrid_output_path)) + + # Create tracks with the hybrid video output for this resolution + task_description = f"Multiplexing Hybrid HDR10+DV {resolution}p" + task_tracks = Tracks(title.tracks) + title.tracks.chapters + title.tracks.attachments + + # Create a new video track for the hybrid output + hybrid_track = deepcopy(hdr10_track) + hybrid_track.id = f"hybrid_{hdr10_track.id}_{resolution}" + hybrid_track.path = hybrid_output_path + hybrid_track.range = Video.Range.DV # It's now a DV track + hybrid_track.needs_duration_fix = True + title.tracks.add(hybrid_track) + task_tracks.videos = [hybrid_track] + + enqueue_mux_tasks(task_description, task_tracks) + + console.print() + else: + # Normal mode: process each video track separately + for video_track in title.tracks.videos or [None]: + task_description = "Multiplexing" + if video_track: + if len(quality) > 1: + task_description += f" {video_track.height}p" + if len(range_) > 1: + task_description += f" {video_track.range.name}" + + task_tracks = Tracks(title.tracks) + title.tracks.chapters + title.tracks.attachments + if video_track: + task_tracks.videos = [video_track] + + enqueue_mux_tasks(task_description, task_tracks) + + try: + with Live(Padding(progress, (0, 5, 1, 5)), console=console): + mux_index = 0 + for task_id, task_tracks, audio_codec in multiplex_tasks: + progress.start_task(task_id) # TODO: Needed? + audio_expected = not video_only and not no_audio + muxed_path, return_code, errors = task_tracks.mux( + str(title), + progress=partial(progress.update, task_id=task_id), + delete=False, + audio_expected=audio_expected, + title_language=title.language, + skip_subtitles=skip_subtitle_mux, + ) + if muxed_path.exists(): + mux_index += 1 + unique_path = muxed_path.with_name( + f"{muxed_path.stem}.{mux_index}{muxed_path.suffix}" + ) + if unique_path != muxed_path: + shutil.move(muxed_path, unique_path) + muxed_path = unique_path + muxed_paths.append(muxed_path) + muxed_audio_codecs[muxed_path] = audio_codec + if return_code >= 2: + self.log.error(f"Failed to Mux video to Matroska file ({return_code}):") + elif return_code == 1 or errors: + self.log.warning("mkvmerge had at least one warning or error, continuing anyway...") + for line in errors: + if line.startswith("#GUI#error"): + self.log.error(line) + else: + self.log.warning(line) + if return_code >= 2: + sys.exit(1) + + # Output sidecar subtitles before deleting track files + if sidecar_subtitles and not no_mux: + media_info = MediaInfo.parse(muxed_paths[0]) if muxed_paths else None + if media_info: + base_filename = title.get_filename(media_info, show_service=not no_source) + else: + base_filename = str(title) + + sidecar_dir = config.directories.downloads + if not no_folder and isinstance(title, (Episode, Song)) and media_info: + sidecar_dir /= title.get_filename(media_info, show_service=not no_source, folder=True) + sidecar_dir.mkdir(parents=True, exist_ok=True) + + with console.status("Saving subtitle sidecar files..."): + created = self.output_subtitle_sidecars( + sidecar_subtitles, + base_filename, + sidecar_dir, + sidecar_format, + original_paths=sidecar_original_paths or None, + ) + if created: + self.log.info(f"Saved {len(created)} sidecar subtitle files") + + for track in title.tracks: + track.delete() + + # Clear temp font attachment paths and delete other attachments + for attachment in title.tracks.attachments: + if attachment.path and attachment.path in temp_font_files: + attachment.path = None + else: + attachment.delete() + + # Clean up temp fonts + for temp_path in temp_font_files: + temp_path.unlink(missing_ok=True) + for temp_path in sidecar_original_paths.values(): + temp_path.unlink(missing_ok=True) + finally: + # Hybrid() produces a temp HEVC output we rename; make sure it's never left behind. + # Also attempt to remove the default hybrid output name if it still exists. + for temp_path in hybrid_temp_paths: + try: + temp_path.unlink(missing_ok=True) + except PermissionError: + self.log.warning(f"Failed to delete temp file (in use?): {temp_path}") + try: + (config.directories.temp / "HDR10-DV.hevc").unlink(missing_ok=True) + except PermissionError: + self.log.warning( + f"Failed to delete temp file (in use?): {config.directories.temp / 'HDR10-DV.hevc'}" + ) + + else: + # dont mux + muxed_paths.append(title.tracks.audio[0].path) + + if no_mux: + # Handle individual track files without muxing + final_dir = config.directories.downloads + if not no_folder and isinstance(title, (Episode, Song)): + # Create folder based on title + # Use first available track for filename generation + sample_track = ( + title.tracks.videos[0] + if title.tracks.videos + else ( + title.tracks.audio[0] + if title.tracks.audio + else (title.tracks.subtitles[0] if title.tracks.subtitles else None) + ) + ) + if sample_track and sample_track.path: + media_info = MediaInfo.parse(sample_track.path) + final_dir /= title.get_filename(media_info, show_service=not no_source, folder=True) + + final_dir.mkdir(parents=True, exist_ok=True) + + for track_path in muxed_paths: + # Generate appropriate filename for each track + media_info = MediaInfo.parse(track_path) + base_filename = title.get_filename(media_info, show_service=not no_source) + + # Add track type suffix to filename + track = next((t for t in title.tracks if t.path == track_path), None) + if track: + if isinstance(track, Video): + track_suffix = f".{track.codec.name if hasattr(track.codec, 'name') else 'video'}" + elif isinstance(track, Audio): + lang_suffix = f".{track.language}" if track.language else "" + track_suffix = ( + f"{lang_suffix}.{track.codec.name if hasattr(track.codec, 'name') else 'audio'}" + ) + elif isinstance(track, Subtitle): + lang_suffix = f".{track.language}" if track.language else "" + forced_suffix = ".forced" if track.forced else "" + sdh_suffix = ".sdh" if track.sdh else "" + track_suffix = f"{lang_suffix}{forced_suffix}{sdh_suffix}" + else: + track_suffix = "" + + final_path = final_dir / f"{base_filename}{track_suffix}{track_path.suffix}" + else: + final_path = final_dir / f"{base_filename}{track_path.suffix}" + + shutil.move(track_path, final_path) + self.log.debug(f"Saved: {final_path.name}") + else: + # Handle muxed files + for muxed_path in muxed_paths: + media_info = MediaInfo.parse(muxed_path) + final_dir = config.directories.downloads + final_filename = title.get_filename(media_info, show_service=not no_source) + audio_codec_suffix = muxed_audio_codecs.get(muxed_path) + + if not no_folder and isinstance(title, (Episode, Song)): + final_dir /= title.get_filename(media_info, show_service=not no_source, folder=True) + + final_dir.mkdir(parents=True, exist_ok=True) + final_path = final_dir / f"{final_filename}{muxed_path.suffix}" + if final_path.exists() and audio_codec_suffix and append_audio_codec_suffix: + sep = "." if config.scene_naming else " " + final_filename = f"{final_filename.rstrip()}{sep}{audio_codec_suffix.name}" + final_path = final_dir / f"{final_filename}{muxed_path.suffix}" + + if final_path.exists(): + sep = "." if config.scene_naming else " " + i = 2 + while final_path.exists(): + final_path = final_dir / f"{final_filename.rstrip()}{sep}{i}{muxed_path.suffix}" + i += 1 + + shutil.move(muxed_path, final_path) + tags.tag_file(final_path, title, self.tmdb_id) + + title_dl_time = time_elapsed_since(dl_start_time) + console.print( + Padding(f":tada: Title downloaded in [progress.elapsed]{title_dl_time}[/]!", (0, 5, 1, 5)) + ) + + # update cookies + cookie_file = self.get_cookie_path(self.service, self.profile) + if cookie_file: + self.save_cookies(cookie_file, service.session.cookies) + + dl_time = time_elapsed_since(start_time) + + console.print(Padding(f"Processed all titles in [progress.elapsed]{dl_time}", (0, 5, 1, 5))) + + def prepare_drm( + self, + drm: DRM_T, + track: AnyTrack, + title: Title_T, + certificate: Callable, + licence: Callable, + track_kid: Optional[UUID] = None, + table: Table = None, + cdm_only: bool = False, + vaults_only: bool = False, + export: Optional[Path] = None, + ) -> None: + """ + Prepare the DRM by getting decryption data like KIDs, Keys, and such. + The DRM object should be ready for decryption once this function ends. + """ + if not drm: + return + + track_quality = None + if isinstance(track, Video) and track.height: + track_quality = track.height + + if isinstance(drm, Widevine): + if not is_widevine_cdm(self.cdm): + widevine_cdm = self.get_cdm(self.service, self.profile, drm="widevine", quality=track_quality) + if widevine_cdm: + if track_quality: + self.log.info(f"Switching to Widevine CDM for Widevine {track_quality}p content") + else: + self.log.info("Switching to Widevine CDM for Widevine content") + self.cdm = widevine_cdm + + elif isinstance(drm, PlayReady): + if not is_playready_cdm(self.cdm): + playready_cdm = self.get_cdm(self.service, self.profile, drm="playready", quality=track_quality) + if playready_cdm: + if track_quality: + self.log.info(f"Switching to PlayReady CDM for PlayReady {track_quality}p content") + else: + self.log.info("Switching to PlayReady CDM for PlayReady content") + self.cdm = playready_cdm + + if isinstance(drm, Widevine): + if self.debug_logger: + self.debug_logger.log_drm_operation( + drm_type="Widevine", + operation="prepare_drm", + service=self.service, + context={ + "track": str(track), + "title": str(title), + "pssh": drm.pssh.dumps() if drm.pssh else None, + "kids": [k.hex for k in drm.kids], + "track_kid": track_kid.hex if track_kid else None, + }, + ) + + with self.DRM_TABLE_LOCK: + pssh_display = self.truncate_pssh_for_display(drm.pssh.dumps(), "Widevine") + cek_tree = Tree(Text.assemble(("Widevine", "cyan"), (f"({pssh_display})", "text"), overflow="fold")) + pre_existing_tree = next( + (x for x in table.columns[0].cells if isinstance(x, Tree) and x.label == cek_tree.label), None + ) + if pre_existing_tree: + cek_tree = pre_existing_tree + + need_license = False + all_kids = list(drm.kids) + if track_kid and track_kid not in all_kids: + all_kids.append(track_kid) + + for kid in all_kids: + if kid in drm.content_keys: + continue + + is_track_kid = ["", "*"][kid == track_kid] + + if not cdm_only: + content_key, vault_used = self.vaults.get_key(kid) + if content_key: + drm.content_keys[kid] = content_key + label = f"[text2]{kid.hex}:{content_key}{is_track_kid} from {vault_used}" + if not any(f"{kid.hex}:{content_key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + self.vaults.add_key(kid, content_key, excluding=vault_used) + + if self.debug_logger: + self.debug_logger.log_vault_query( + vault_name=vault_used, + operation="get_key_success", + service=self.service, + context={ + "kid": kid.hex, + "content_key": content_key, + "track": str(track), + "from_cache": True, + }, + ) + elif vaults_only: + msg = f"No Vault has a Key for {kid.hex} and --vaults-only was used" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="vault_key_not_found", + service=self.service, + message=msg, + context={"kid": kid.hex, "track": str(track)}, + ) + raise Widevine.Exceptions.CEKNotFound(msg) + else: + need_license = True + + if kid not in drm.content_keys and cdm_only: + need_license = True + + if need_license and not vaults_only: + from_vaults = drm.content_keys.copy() + + if self.debug_logger: + self.debug_logger.log( + level="INFO", + operation="get_license", + service=self.service, + message="Requesting Widevine license from service", + context={ + "track": str(track), + "kids_needed": [k.hex for k in all_kids if k not in drm.content_keys], + }, + ) + + try: + if self.service == "NF": + drm.get_NF_content_keys(cdm=self.cdm, licence=licence, certificate=certificate) + else: + drm.get_content_keys(cdm=self.cdm, licence=licence, certificate=certificate) + except Exception as e: + if isinstance(e, (Widevine.Exceptions.EmptyLicense, Widevine.Exceptions.CEKNotFound)): + msg = str(e) + else: + msg = f"An exception occurred in the Service's license function: {e}" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + if self.debug_logger: + self.debug_logger.log_error( + "get_license", + e, + service=self.service, + context={"track": str(track), "exception_type": type(e).__name__}, + ) + raise e + + if self.debug_logger: + self.debug_logger.log( + level="INFO", + operation="license_keys_retrieved", + service=self.service, + context={ + "track": str(track), + "keys_count": len(drm.content_keys), + "kids": [k.hex for k in drm.content_keys.keys()], + }, + ) + + for kid_, key in drm.content_keys.items(): + if key == "0" * 32: + key = f"[red]{key}[/]" + is_track_kid_marker = ["", "*"][kid_ == track_kid] + label = f"[text2]{kid_.hex}:{key}{is_track_kid_marker}" + if not any(f"{kid_.hex}:{key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + + drm.content_keys = { + kid_: key for kid_, key in drm.content_keys.items() if key and key.count("0") != len(key) + } + + # The CDM keys may have returned blank content keys for KIDs we got from vaults. + # So we re-add the keys from vaults earlier overwriting blanks or removed KIDs data. + drm.content_keys.update(from_vaults) + + successful_caches = self.vaults.add_keys(drm.content_keys) + self.log.info( + f"Cached {len(drm.content_keys)} Key{'' if len(drm.content_keys) == 1 else 's'} to " + f"{successful_caches}/{len(self.vaults)} Vaults" + ) + + if track_kid and track_kid not in drm.content_keys: + msg = f"No Content Key for KID {track_kid.hex} was returned in the License" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise Widevine.Exceptions.CEKNotFound(msg) + + if cek_tree.children and not pre_existing_tree: + table.add_row() + table.add_row(cek_tree) + + if export: + keys = {} + if export.is_file(): + keys = jsonpickle.loads(export.read_text(encoding="utf8")) or {} + if str(title) not in keys: + keys[str(title)] = {} + if str(track) not in keys[str(title)]: + keys[str(title)][str(track)] = {} + + track_data = keys[str(title)][str(track)] + track_data["url"] = track.url + track_data["descriptor"] = track.descriptor.name + + if "keys" not in track_data: + track_data["keys"] = {} + for kid, key in drm.content_keys.items(): + track_data["keys"][kid.hex] = key + + export.write_text(jsonpickle.dumps(keys, indent=4), encoding="utf8") + + elif isinstance(drm, PlayReady): + if self.debug_logger: + self.debug_logger.log_drm_operation( + drm_type="PlayReady", + operation="prepare_drm", + service=self.service, + context={ + "track": str(track), + "title": str(title), + "pssh": drm.pssh_b64 or "", + "kids": [k.hex for k in drm.kids], + "track_kid": track_kid.hex if track_kid else None, + }, + ) + + with self.DRM_TABLE_LOCK: + pssh_display = self.truncate_pssh_for_display(drm.pssh_b64 or "", "PlayReady") + cek_tree = Tree( + Text.assemble( + ("PlayReady", "cyan"), + (f"({pssh_display})", "text"), + overflow="fold", + ) + ) + pre_existing_tree = next( + (x for x in table.columns[0].cells if isinstance(x, Tree) and x.label == cek_tree.label), None + ) + if pre_existing_tree: + cek_tree = pre_existing_tree + + need_license = False + all_kids = list(drm.kids) + if track_kid and track_kid not in all_kids: + all_kids.append(track_kid) + + for kid in all_kids: + if kid in drm.content_keys: + continue + + is_track_kid = ["", "*"][kid == track_kid] + + if not cdm_only: + content_key, vault_used = self.vaults.get_key(kid) + if content_key: + drm.content_keys[kid] = content_key + label = f"[text2]{kid.hex}:{content_key}{is_track_kid} from {vault_used}" + if not any(f"{kid.hex}:{content_key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + self.vaults.add_key(kid, content_key, excluding=vault_used) + + if self.debug_logger: + self.debug_logger.log_vault_query( + vault_name=vault_used, + operation="get_key_success", + service=self.service, + context={ + "kid": kid.hex, + "content_key": content_key, + "track": str(track), + "from_cache": True, + "drm_type": "PlayReady", + }, + ) + elif vaults_only: + msg = f"No Vault has a Key for {kid.hex} and --vaults-only was used" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="vault_key_not_found", + service=self.service, + message=msg, + context={"kid": kid.hex, "track": str(track), "drm_type": "PlayReady"}, + ) + raise PlayReady.Exceptions.CEKNotFound(msg) + else: + need_license = True + + if kid not in drm.content_keys and cdm_only: + need_license = True + + if need_license and not vaults_only: + from_vaults = drm.content_keys.copy() + + try: + drm.get_content_keys(cdm=self.cdm, licence=licence, certificate=certificate) + except Exception as e: + if isinstance(e, (PlayReady.Exceptions.EmptyLicense, PlayReady.Exceptions.CEKNotFound)): + msg = str(e) + else: + msg = f"An exception occurred in the Service's license function: {e}" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + if self.debug_logger: + self.debug_logger.log_error( + "get_license_playready", + e, + service=self.service, + context={ + "track": str(track), + "exception_type": type(e).__name__, + "drm_type": "PlayReady", + }, + ) + raise e + + for kid_, key in drm.content_keys.items(): + is_track_kid_marker = ["", "*"][kid_ == track_kid] + label = f"[text2]{kid_.hex}:{key}{is_track_kid_marker}" + if not any(f"{kid_.hex}:{key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + + drm.content_keys.update(from_vaults) + + successful_caches = self.vaults.add_keys(drm.content_keys) + self.log.info( + f"Cached {len(drm.content_keys)} Key{'' if len(drm.content_keys) == 1 else 's'} to " + f"{successful_caches}/{len(self.vaults)} Vaults" + ) + + if track_kid and track_kid not in drm.content_keys: + msg = f"No Content Key for KID {track_kid.hex} was returned in the License" + cek_tree.add(f"[logging.level.error]{msg}") + if not pre_existing_tree: + table.add_row(cek_tree) + raise PlayReady.Exceptions.CEKNotFound(msg) + + if cek_tree.children and not pre_existing_tree: + table.add_row() + table.add_row(cek_tree) + + if export: + keys = {} + if export.is_file(): + keys = jsonpickle.loads(export.read_text(encoding="utf8")) or {} + if str(title) not in keys: + keys[str(title)] = {} + if str(track) not in keys[str(title)]: + keys[str(title)][str(track)] = {} + + track_data = keys[str(title)][str(track)] + track_data["url"] = track.url + track_data["descriptor"] = track.descriptor.name + + if "keys" not in track_data: + track_data["keys"] = {} + for kid, key in drm.content_keys.items(): + track_data["keys"][kid.hex] = key + + export.write_text(jsonpickle.dumps(keys, indent=4), encoding="utf8") + + elif isinstance(drm, MonaLisa): + with self.DRM_TABLE_LOCK: + display_id = drm.content_id or drm.pssh + pssh_display = self.truncate_pssh_for_display(display_id, "MonaLisa") + cek_tree = Tree(Text.assemble(("MonaLisa", "cyan"), (f"({pssh_display})", "text"), overflow="fold")) + pre_existing_tree = next( + (x for x in table.columns[0].cells if isinstance(x, Tree) and x.label == cek_tree.label), None + ) + if pre_existing_tree: + cek_tree = pre_existing_tree + + for kid_, key in drm.content_keys.items(): + label = f"[text2]{kid_.hex}:{key}" + if not any(f"{kid_.hex}:{key}" in x.label for x in cek_tree.children): + cek_tree.add(label) + + if cek_tree.children and not pre_existing_tree: + table.add_row() + table.add_row(cek_tree) + + @staticmethod + def get_cookie_path(service: str, profile: Optional[str]) -> Optional[Path]: + """Get Service Cookie File Path for Profile.""" + direct_cookie_file = config.directories.cookies / f"{service}.txt" + profile_cookie_file = config.directories.cookies / service / f"{profile}.txt" + default_cookie_file = config.directories.cookies / service / "default.txt" + + if direct_cookie_file.exists(): + return direct_cookie_file + elif profile_cookie_file.exists(): + return profile_cookie_file + elif default_cookie_file.exists(): + return default_cookie_file + + @staticmethod + def get_cookie_jar(service: str, profile: Optional[str]) -> Optional[MozillaCookieJar]: + """Get Service Cookies for Profile.""" + cookie_file = dl.get_cookie_path(service, profile) + if cookie_file: + cookie_jar = MozillaCookieJar(cookie_file) + cookie_data = html.unescape(cookie_file.read_text("utf8")).splitlines(keepends=False) + for i, line in enumerate(cookie_data): + if line and not line.startswith("#"): + line_data = line.lstrip().split("\t") + # Disable client-side expiry checks completely across everywhere + # Even though the cookies are loaded under ignore_expires=True, stuff + # like python-requests may not use them if they are expired + line_data[4] = "" + cookie_data[i] = "\t".join(line_data) + cookie_data = "\n".join(cookie_data) + cookie_file.write_text(cookie_data, "utf8") + cookie_jar.load(ignore_discard=True, ignore_expires=True) + return cookie_jar + + @staticmethod + def save_cookies(path: Path, cookies: CookieJar): + if hasattr(cookies, "jar"): + cookies = cookies.jar + + cookie_jar = MozillaCookieJar(path) + cookie_jar.load() + for cookie in cookies: + cookie_jar.set_cookie(cookie) + cookie_jar.save(ignore_discard=True) + + @staticmethod + def get_credentials(service: str, profile: Optional[str]) -> Optional[Credential]: + """Get Service Credentials for Profile.""" + credentials = config.credentials.get(service) + if credentials: + if isinstance(credentials, dict): + if profile: + credentials = credentials.get(profile) or credentials.get("default") + else: + credentials = credentials.get("default") + if credentials: + if isinstance(credentials, list): + return Credential(*credentials) + return Credential.loads(credentials) # type: ignore + + def get_cdm( + self, + service: str, + profile: Optional[str] = None, + drm: Optional[str] = None, + quality: Optional[int] = None, + ) -> Optional[object]: + """ + Get CDM for a specified service (either Local or Remote CDM). + Now supports quality-based selection when quality is provided. + Raises a ValueError if there's a problem getting a CDM. + """ + cdm_name = config.cdm.get(service) or config.cdm.get("default") + if not cdm_name: + return None + + if isinstance(cdm_name, dict): + if quality: + quality_match = None + quality_keys = [] + + for key in cdm_name.keys(): + if ( + isinstance(key, str) + and any(op in key for op in [">=", ">", "<=", "<"]) + or (isinstance(key, str) and key.isdigit()) + ): + quality_keys.append(key) + + def sort_quality_key(key): + if key.isdigit(): + return (0, int(key)) # Exact matches first + elif key.startswith(">="): + return (1, -int(key[2:])) # >= descending + elif key.startswith(">"): + return (1, -int(key[1:])) # > descending + elif key.startswith("<="): + return (2, int(key[2:])) # <= ascending + elif key.startswith("<"): + return (2, int(key[1:])) # < ascending + return (3, 0) # Other keys last + + quality_keys.sort(key=sort_quality_key) + + for key in quality_keys: + if key.isdigit() and quality == int(key): + quality_match = cdm_name[key] + self.log.debug(f"Selected CDM based on exact quality match {quality}p: {quality_match}") + break + elif key.startswith(">="): + threshold = int(key[2:]) + if quality >= threshold: + quality_match = cdm_name[key] + self.log.debug(f"Selected CDM based on quality {quality}p >= {threshold}p: {quality_match}") + break + elif key.startswith(">"): + threshold = int(key[1:]) + if quality > threshold: + quality_match = cdm_name[key] + self.log.debug(f"Selected CDM based on quality {quality}p > {threshold}p: {quality_match}") + break + elif key.startswith("<="): + threshold = int(key[2:]) + if quality <= threshold: + quality_match = cdm_name[key] + self.log.debug(f"Selected CDM based on quality {quality}p <= {threshold}p: {quality_match}") + break + elif key.startswith("<"): + threshold = int(key[1:]) + if quality < threshold: + quality_match = cdm_name[key] + self.log.debug(f"Selected CDM based on quality {quality}p < {threshold}p: {quality_match}") + break + + if quality_match: + cdm_name = quality_match + + if isinstance(cdm_name, dict): + lower_keys = {k.lower(): v for k, v in cdm_name.items()} + if {"widevine", "playready"} & lower_keys.keys(): + drm_key = None + if drm: + drm_key = { + "wv": "widevine", + "widevine": "widevine", + "pr": "playready", + "playready": "playready", + }.get(drm.lower()) + cdm_name = lower_keys.get(drm_key or "widevine") or lower_keys.get("playready") + else: + cdm_name = cdm_name.get(profile) or cdm_name.get("default") or config.cdm.get("default") + if not cdm_name: + return None + + cdm_api = next(iter(x.copy() for x in config.remote_cdm if x["name"] == cdm_name), None) + if cdm_api: + cdm_type = cdm_api.get("type") + + if cdm_type == "decrypt_labs": + del cdm_api["name"] + del cdm_api["type"] + + if "secret" not in cdm_api or not cdm_api["secret"]: + if config.decrypt_labs_api_key: + cdm_api["secret"] = config.decrypt_labs_api_key + else: + raise ValueError( + f"No secret provided for DecryptLabs CDM '{cdm_name}' and no global " + "decrypt_labs_api_key configured" + ) + + # All DecryptLabs CDMs use DecryptLabsRemoteCDM + return DecryptLabsRemoteCDM(service_name=service, vaults=self.vaults, **cdm_api) + + elif cdm_type == "custom_api": + del cdm_api["name"] + del cdm_api["type"] + + # All Custom API CDMs use CustomRemoteCDM + return CustomRemoteCDM(service_name=service, vaults=self.vaults, **cdm_api) + + else: + device_type = cdm_api.get("Device Type", cdm_api.get("device_type", "")) + if str(device_type).upper() == "PLAYREADY": + return PlayReadyRemoteCdm( + security_level=cdm_api.get("Security Level", cdm_api.get("security_level", 3000)), + host=cdm_api.get("Host", cdm_api.get("host")), + secret=cdm_api.get("Secret", cdm_api.get("secret")), + device_name=cdm_api.get("Device Name", cdm_api.get("device_name")), + ) + else: + return RemoteCdm( + device_type=cdm_api.get("Device Type", cdm_api.get("device_type", "")), + system_id=cdm_api.get("System ID", cdm_api.get("system_id", "")), + security_level=cdm_api.get("Security Level", cdm_api.get("security_level", 3000)), + host=cdm_api.get("Host", cdm_api.get("host")), + secret=cdm_api.get("Secret", cdm_api.get("secret")), + device_name=cdm_api.get("Device Name", cdm_api.get("device_name")), + ) + + prd_path = config.directories.prds / f"{cdm_name}.prd" + if not prd_path.is_file(): + prd_path = config.directories.wvds / f"{cdm_name}.prd" + if prd_path.is_file(): + device = PlayReadyDevice.load(prd_path) + return PlayReadyCdm.from_device(device) + + cdm_path = config.directories.wvds / f"{cdm_name}.wvd" + if not cdm_path.is_file(): + raise ValueError(f"{cdm_name} does not exist or is not a file") + + try: + device = Device.load(cdm_path) + except ConstError as e: + if "expected 2 but parsed 1" in str(e): + raise ValueError( + f"{cdm_name}.wvd seems to be a v1 WVD file, use `pywidevine migrate --help` to migrate it to v2." + ) + raise ValueError(f"{cdm_name}.wvd is an invalid or corrupt Widevine Device file, {e}") + + return WidevineCdm.from_device(device) diff --git a/packages/envied/src/envied/commands/dl.py b/packages/envied/src/envied/commands/dl.py index cfa3139..25ec99a 100644 --- a/packages/envied/src/envied/commands/dl.py +++ b/packages/envied/src/envied/commands/dl.py @@ -3,6 +3,7 @@ from __future__ import annotations import html import logging import math +import os import random import re import shutil @@ -24,6 +25,7 @@ import click import jsonpickle import yaml from construct import ConstError +from langcodes import Language from pymediainfo import MediaInfo from pyplayready.cdm import Cdm as PlayReadyCdm from pyplayready.device import Device as PlayReadyDevice @@ -41,7 +43,7 @@ from rich.table import Table from rich.text import Text from rich.tree import Tree -from envied.core import binaries +from envied.core import binaries, providers from envied.core.cdm import CustomRemoteCDM, DecryptLabsRemoteCDM from envied.core.cdm.detect import is_playready_cdm, is_widevine_cdm from envied.core.config import config @@ -60,10 +62,11 @@ from envied.core.tracks import Audio, Subtitle, Tracks, Video from envied.core.tracks.attachment import Attachment from envied.core.tracks.hybrid import Hybrid from envied.core.utilities import (find_font_with_fallbacks, get_debug_logger, get_system_fonts, init_debug_logger, - is_close_match, suggest_font_packages, time_elapsed_since) + is_close_match, is_exact_match, suggest_font_packages, time_elapsed_since) from envied.core.utils import tags from envied.core.utils.click_types import (AUDIO_CODEC_LIST, LANGUAGE_RANGE, QUALITY_LIST, SEASON_RANGE, - ContextData, MultipleChoice, SubtitleCodecChoice, VideoCodecChoice) + ContextData, MultipleChoice, MultipleVideoCodecChoice, + SubtitleCodecChoice) from envied.core.utils.collections import merge_dict from envied.core.utils.selector import select_multiple from envied.core.utils.subprocess import ffprobe @@ -195,12 +198,7 @@ class dl: sdh_suffix = ".sdh" if (subtitle.sdh or subtitle.cc) else "" extension = (target_codec or subtitle.codec or Subtitle.Codec.SubRip).extension - if ( - not target_codec - and not subtitle.codec - and source_path - and source_path.suffix - ): + if not target_codec and not subtitle.codec and source_path and source_path.suffix: extension = source_path.suffix.lstrip(".") filename = f"{base_filename}.{lang_suffix}{forced_suffix}{sdh_suffix}.{extension}" @@ -292,9 +290,9 @@ class dl: @click.option( "-v", "--vcodec", - type=VideoCodecChoice(Video.Codec), - default=None, - help="Video Codec to download, defaults to any codec.", + type=MultipleVideoCodecChoice(Video.Codec), + default=[], + help="Video Codec(s) to download, defaults to any codec.", ) @click.option( "-a", @@ -410,6 +408,7 @@ class dl: @click.option( "--tag", type=str, default=None, help="Set the Group Tag to be used, overriding the one in config if any." ) + @click.option("--repack", is_flag=True, default=False, help="Add REPACK tag to the output filename.") @click.option( "--tmdb", "tmdb_id", @@ -418,18 +417,24 @@ class dl: help="Use this TMDB ID for tagging instead of automatic lookup.", ) @click.option( - "--tmdb-name", - "tmdb_name", - is_flag=True, - default=False, - help="Rename titles using the name returned from TMDB lookup.", + "--animeapi", + "animeapi_id", + type=str, + default=None, + help="Anime database ID via AnimeAPI (e.g. mal:12345, anilist:98765). Defaults to MAL if no prefix.", ) @click.option( - "--tmdb-year", - "tmdb_year", + "--enrich", is_flag=True, default=False, - help="Use the release year from TMDB for naming and tagging.", + help="Override show title and year from external source. Requires --tmdb, --imdb, or --animeapi.", + ) + @click.option( + "--imdb", + "imdb_id", + type=str, + default=None, + help="Use this IMDB ID (e.g. tt1375666) for tagging instead of automatic lookup.", ) @click.option( "--sub-format", @@ -489,10 +494,24 @@ class dl: help="Max workers/threads to download with per-track. Default depends on the downloader.", ) @click.option("--downloads", type=int, default=1, help="Amount of tracks to download concurrently.") + @click.option( + "-o", + "--output", + "output_dir", + type=Path, + default=None, + help="Override the output directory for this download, instead of the one in config.", + ) @click.option("--no-cache", "no_cache", is_flag=True, default=False, help="Bypass title cache for this download.") @click.option( "--reset-cache", "reset_cache", is_flag=True, default=False, help="Clear title cache before fetching." ) + @click.option( + "--worst", + is_flag=True, + default=False, + help="Select the lowest bitrate track within the specified quality. Requires -q/--quality.", + ) @click.option( "--best-available", "best_available", @@ -512,10 +531,13 @@ class dl: no_proxy: bool, profile: Optional[str] = None, proxy: Optional[str] = None, + repack: bool = False, tag: Optional[str] = None, tmdb_id: Optional[int] = None, - tmdb_name: bool = False, - tmdb_year: bool = False, + imdb_id: Optional[str] = None, + animeapi_id: Optional[str] = None, + enrich: bool = False, + output_dir: Optional[Path] = None, *_: Any, **__: Any, ): @@ -559,8 +581,23 @@ class dl: self.profile = profile self.tmdb_id = tmdb_id - self.tmdb_name = tmdb_name - self.tmdb_year = tmdb_year + self.imdb_id = imdb_id + self.enrich = enrich + self.animeapi_title: Optional[str] = None + self.output_dir = output_dir + + if animeapi_id: + from envied.core.utils.animeapi import resolve_animeapi + + anime_title, anime_ids = resolve_animeapi(animeapi_id) + self.animeapi_title = anime_title + if not self.tmdb_id and anime_ids.tmdb_id: + self.tmdb_id = anime_ids.tmdb_id + if not self.imdb_id and anime_ids.imdb_id: + self.imdb_id = anime_ids.imdb_id + + if self.enrich and not (self.tmdb_id or self.imdb_id or self.animeapi_title): + raise click.UsageError("--enrich requires --tmdb, --imdb, or --animeapi to provide a metadata source.") # Initialize debug logger with service name if debug logging is enabled if config.debug or logging.root.level == logging.DEBUG: @@ -583,16 +620,75 @@ class dl: "profile": profile, "proxy": proxy, "tag": tag, - "tmdb_id": tmdb_id, - "tmdb_name": tmdb_name, - "tmdb_year": tmdb_year, + "tmdb_id": self.tmdb_id, + "imdb_id": self.imdb_id, + "animeapi_id": animeapi_id, + "enrich": enrich, "cli_params": { k: v for k, v in ctx.params.items() - if k not in ["profile", "proxy", "tag", "tmdb_id", "tmdb_name", "tmdb_year"] + if k + not in [ + "profile", + "proxy", + "tag", + "tmdb_id", + "imdb_id", + "animeapi_id", + "enrich", + ] }, }, ) + + # Log binary versions for diagnostics + binary_versions = {} + for name, binary in [ + ("shaka_packager", binaries.ShakaPackager), + ("mp4decrypt", binaries.Mp4decrypt), + ("n_m3u8dl_re", binaries.N_m3u8DL_RE), + ("mkvmerge", binaries.MKVToolNix), + ("ffmpeg", binaries.FFMPEG), + ("ffprobe", binaries.FFProbe), + ]: + if binary: + version = None + try: + if name == "shaka_packager": + r = subprocess.run( + [str(binary), "--version"], capture_output=True, text=True, timeout=5 + ) + version = (r.stdout or r.stderr or "").strip() + elif name in ("ffmpeg", "ffprobe"): + r = subprocess.run([str(binary), "-version"], capture_output=True, text=True, timeout=5) + version = (r.stdout or "").split("\n")[0].strip() + elif name == "mkvmerge": + r = subprocess.run( + [str(binary), "--version"], capture_output=True, text=True, timeout=5 + ) + version = (r.stdout or "").strip() + elif name == "mp4decrypt": + r = subprocess.run([str(binary)], capture_output=True, text=True, timeout=5) + output = (r.stdout or "") + (r.stderr or "") + lines = [line.strip() for line in output.split("\n") if line.strip()] + version = " | ".join(lines[:2]) if lines else None + elif name == "n_m3u8dl_re": + r = subprocess.run( + [str(binary), "--version"], capture_output=True, text=True, timeout=5 + ) + version = (r.stdout or r.stderr or "").strip().split("\n")[0] + except Exception: + version = "" + binary_versions[name] = {"path": str(binary), "version": version} + else: + binary_versions[name] = None + + self.debug_logger.log( + level="DEBUG", + operation="binary_versions", + message="Binary tool versions", + context=binary_versions, + ) else: self.debug_logger = None @@ -848,6 +944,9 @@ class dl: config=self.service_config, cdm=self.cdm, proxy_providers=self.proxy_providers, profile=self.profile ) + if repack: + config.repack = True + if tag: config.tag = tag @@ -859,7 +958,7 @@ class dl: self, service: Service, quality: list[int], - vcodec: Optional[Video.Codec], + vcodec: list[Video.Codec], acodec: list[Audio.Codec], vbitrate: int, abitrate: int, @@ -898,6 +997,7 @@ class dl: no_mux: bool, workers: Optional[int], downloads: int, + worst: bool, best_available: bool, split_audio: Optional[bool] = None, *_: Any, @@ -923,6 +1023,14 @@ class dl: self.log.error("--require-subs and --s-lang cannot be used together") sys.exit(1) + if worst and not quality: + self.log.error("--worst requires -q/--quality to be specified") + sys.exit(1) + + if select_titles and wanted: + self.log.error("--select-titles and -w/--wanted cannot be used together") + sys.exit(1) + # Check if dovi_tool is available when hybrid mode is requested if any(r == Video.Range.HYBRID for r in range_): from envied.core.binaries import DoviTool @@ -1014,40 +1122,51 @@ class dl: cache_region = service.current_region if hasattr(service, "current_region") else None cache_account_hash = get_account_hash(service.credential) if hasattr(service, "credential") else None - if (self.tmdb_year or self.tmdb_name) and self.tmdb_id: + if self.enrich: sample_title = titles[0] if hasattr(titles, "__getitem__") else titles kind = "tv" if isinstance(sample_title, Episode) else "movie" - tmdb_year_val = None - tmdb_name_val = None + enrich_title: Optional[str] = None + enrich_year: Optional[int] = None - if self.tmdb_year: - tmdb_year_val = tags.get_year( + if self.animeapi_title: + enrich_title = self.animeapi_title + + if self.tmdb_id: + if not enrich_title: + enrich_title = providers.get_title_by_id( + self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash + ) + enrich_year = providers.get_year_by_id( self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash ) + elif self.imdb_id: + imdbapi = providers.get_provider("imdbapi") + if imdbapi: + imdb_result = imdbapi.get_by_id(self.imdb_id, kind) + if imdb_result: + if not enrich_title: + enrich_title = imdb_result.title + enrich_year = imdb_result.year - if self.tmdb_name: - tmdb_name_val = tags.get_title( - self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash - ) - - if isinstance(titles, (Series, Movies)): - for t in titles: - if tmdb_year_val: - t.year = tmdb_year_val - if tmdb_name_val: - if isinstance(t, Episode): - t.title = tmdb_name_val + if enrich_title or enrich_year: + if isinstance(titles, (Series, Movies)): + for t in titles: + if enrich_title: + if isinstance(t, Episode): + t.title = enrich_title + else: + t.name = enrich_title + if enrich_year and not t.year: + t.year = enrich_year + else: + if enrich_title: + if isinstance(titles, Episode): + titles.title = enrich_title else: - t.name = tmdb_name_val - else: - if tmdb_year_val: - titles.year = tmdb_year_val - if tmdb_name_val: - if isinstance(titles, Episode): - titles.title = tmdb_name_val - else: - titles.name = tmdb_name_val + titles.name = enrich_title + if enrich_year and not titles.year: + titles.year = enrich_year console.print(Padding(Rule(f"[rule.text]{titles.__class__.__name__}: {titles}"), (1, 2))) @@ -1056,13 +1175,13 @@ class dl: return # Enables manual selection for Series when --select-titles is set - if select_titles and type(titles) == Series: - console.print(Padding(Rule(f"[rule.text]Select Titles"), (1, 2))) - + if select_titles and isinstance(titles, Series): + console.print(Padding(Rule("[rule.text]Select Titles"), (1, 2))) + selection_titles = [] dependencies = {} original_indices = {} - + current_season = None current_season_header_idx = -1 @@ -1081,37 +1200,40 @@ class dl: # Note: Headers are not mapped to actual title indices # Format display name - display_name = ((t.name[:35].rstrip() + "…") if len(t.name) > 35 else t.name) if t.name else None - + display_name = ((t.name[:30].rstrip() + "…") if len(t.name) > 30 else t.name) if t.name else None + # Apply indentation only for multiple seasons prefix = " " if multiple_seasons else "" - option_text = ( - f"{prefix}{t.number}" + (f". {display_name}" if t.name else "") - ) - + option_text = f"{prefix}{t.number}" + (f". {display_name}" if t.name else "") + selection_titles.append(option_text) current_ui_idx = len(selection_titles) - 1 - + # Map UI index to actual title index original_indices[current_ui_idx] = i - + # Link episode to season header for group selection if current_season_header_idx != -1: dependencies[current_season_header_idx].append(current_ui_idx) selection_start = time.time() - + # Execute selector with dependencies (headers select all children) selected_ui_idx = select_multiple( selection_titles, minimal_count=1, page_size=8, return_indices=True, - dependencies=dependencies + dependencies=dependencies, + collapse_on_start=multiple_seasons, ) + if not selected_ui_idx: + console.print(Padding(":x: Selection Cancelled...", (0, 5, 1, 5))) + return + selection_end = time.time() - start_time += (selection_end - selection_start) + start_time += selection_end - selection_start # Map UI indices back to title indices (excluding headers) selected_idx = [] @@ -1155,15 +1277,20 @@ class dl: if isinstance(title, Episode) and not self.tmdb_searched: kind = "tv" + tmdb_title: Optional[str] = None if self.tmdb_id: - tmdb_title = tags.get_title( + tmdb_title = providers.get_title_by_id( self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash ) else: - self.tmdb_id, tmdb_title, self.search_source = tags.search_show_info( + result = providers.search_metadata( title.title, title.year, kind, title_cacher, cache_title_id, cache_region, cache_account_hash ) - if not (self.tmdb_id and tmdb_title and tags.fuzzy_match(tmdb_title, title.title)): + if result and result.title and providers.fuzzy_match(result.title, title.title): + self.tmdb_id = result.external_ids.tmdb_id + tmdb_title = result.title + self.search_source = result.source + else: self.tmdb_id = None if list_ or list_titles: if self.tmdb_id: @@ -1178,22 +1305,25 @@ class dl: self.tmdb_searched = True if isinstance(title, Movie) and (list_ or list_titles) and not self.tmdb_id: - movie_id, movie_title, _ = tags.search_show_info( + movie_result = providers.search_metadata( title.name, title.year, "movie", title_cacher, cache_title_id, cache_region, cache_account_hash ) - if movie_id: + if movie_result and movie_result.external_ids.tmdb_id: console.print( Padding( - f"Search -> {movie_title or '?'} [bright_black](ID {movie_id})", + f"Search -> {movie_result.title or '?'} " + f"[bright_black](ID {movie_result.external_ids.tmdb_id})", (0, 5), ) ) else: console.print(Padding("Search -> [bright_black]No match found[/]", (0, 5))) - if self.tmdb_id and getattr(self, "search_source", None) != "simkl": + if self.tmdb_id and getattr(self, "search_source", None) not in ("simkl", "imdbapi"): kind = "tv" if isinstance(title, Episode) else "movie" - tags.external_ids(self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash) + providers.fetch_external_ids( + self.tmdb_id, kind, title_cacher, cache_title_id, cache_region, cache_account_hash + ) if slow and i != 0: delay = random.randint(60, 120) @@ -1223,6 +1353,15 @@ class dl: v_lang = None title.tracks.videos = [] + if no_audio: + console.log("Skipped audio as --no-audio was used...") + a_lang = None + title.tracks.audio = [] + + if no_chapters: + console.log("Skipped chapters as --no-chapters was used...") + title.tracks.chapters = [] + with console.status("Getting tracks...", spinner="dots"): try: title.tracks.add(service.get_tracks(title), warn_only=True) @@ -1336,9 +1475,12 @@ class dl: if isinstance(title, (Movie, Episode)): # filter video tracks if vcodec: - title.tracks.select_video(lambda x: x.codec == vcodec) + title.tracks.select_video(lambda x: x.codec in vcodec) + missing_codecs = [c for c in vcodec if not any(x.codec == c for x in title.tracks.videos)] + for codec in missing_codecs: + self.log.warning(f"Skipping {codec.name} video tracks as none are available.") if not title.tracks.videos: - self.log.error(f"There's no {vcodec.name} Video Track...") + self.log.error(f"There's no {', '.join(c.name for c in vcodec)} Video Track...") sys.exit(1) if range_: @@ -1350,10 +1492,20 @@ class dl: self.log.warning(f"Skipping {color_range.name} video tracks as none are available.") if vbitrate: - title.tracks.select_video(lambda x: x.bitrate and x.bitrate // 1000 == vbitrate) - if not title.tracks.videos: - self.log.error(f"There's no {vbitrate}kbps Video Track...") - sys.exit(1) + if any(r == Video.Range.HYBRID for r in range_): + # In HYBRID mode, only apply bitrate filter to non-DV tracks + # DV tracks are kept regardless since they're only used for RPU metadata + title.tracks.select_video( + lambda x: x.range == Video.Range.DV or (x.bitrate and x.bitrate // 1000 == vbitrate) + ) + if not any(x.range != Video.Range.DV for x in title.tracks.videos): + self.log.error(f"There's no {vbitrate}kbps Video Track...") + sys.exit(1) + else: + title.tracks.select_video(lambda x: x.bitrate and x.bitrate // 1000 == vbitrate) + if not title.tracks.videos: + self.log.error(f"There's no {vbitrate}kbps Video Track...") + sys.exit(1) video_languages = [lang for lang in (v_lang or lang) if lang != "best"] if video_languages and "all" not in video_languages: @@ -1380,10 +1532,38 @@ class dl: self.log.error(f"There's no {processed_video_lang} Video Track...") sys.exit(1) + has_hybrid = any(r == Video.Range.HYBRID for r in range_) + non_hybrid_ranges = [r for r in range_ if r != Video.Range.HYBRID] + if quality: missing_resolutions = [] - if any(r == Video.Range.HYBRID for r in range_): - title.tracks.select_video(title.tracks.select_hybrid(title.tracks.videos, quality)) + if has_hybrid: + # Split tracks: hybrid candidates vs non-hybrid + hybrid_candidate_tracks = [ + v + for v in title.tracks.videos + if v.range in (Video.Range.HDR10, Video.Range.HDR10P, Video.Range.DV) + ] + non_hybrid_tracks = [ + v + for v in title.tracks.videos + if v.range not in (Video.Range.HDR10, Video.Range.HDR10P, Video.Range.DV) + ] + + # Apply hybrid selection to HDR10+DV tracks + hybrid_filter = title.tracks.select_hybrid(hybrid_candidate_tracks, quality) + hybrid_selected = list(filter(hybrid_filter, hybrid_candidate_tracks)) + + if non_hybrid_ranges and non_hybrid_tracks: + # Also filter non-hybrid tracks by resolution + non_hybrid_selected = [ + v + for v in non_hybrid_tracks + if any(v.height == res or int(v.width * (9 / 16)) == res for res in quality) + ] + title.tracks.videos = hybrid_selected + non_hybrid_selected + else: + title.tracks.videos = hybrid_selected else: title.tracks.by_resolutions(quality) @@ -1410,60 +1590,111 @@ class dl: sys.exit(1) # choose best track by range and quality - if any(r == Video.Range.HYBRID for r in range_): - # For hybrid mode, always apply hybrid selection - # If no quality specified, use only the best (highest) resolution + if has_hybrid: + # Apply hybrid selection for HYBRID tracks + hybrid_candidate_tracks = [ + v + for v in title.tracks.videos + if v.range in (Video.Range.HDR10, Video.Range.HDR10P, Video.Range.DV) + ] + non_hybrid_tracks = [ + v + for v in title.tracks.videos + if v.range not in (Video.Range.HDR10, Video.Range.HDR10P, Video.Range.DV) + ] + if not quality: - # Get the highest resolution available - best_resolution = max((v.height for v in title.tracks.videos), default=None) + best_resolution = max((v.height for v in hybrid_candidate_tracks), default=None) if best_resolution: - # Use the hybrid selection logic with only the best resolution - title.tracks.select_video( - title.tracks.select_hybrid(title.tracks.videos, [best_resolution]) - ) - # If quality was specified, hybrid selection was already applied above - else: - selected_videos: list[Video] = [] - for resolution, color_range in product(quality or [None], range_ or [None]): - match = next( - ( + hybrid_filter = title.tracks.select_hybrid(hybrid_candidate_tracks, [best_resolution]) + hybrid_selected = list(filter(hybrid_filter, hybrid_candidate_tracks)) + else: + hybrid_selected = [] + else: + hybrid_filter = title.tracks.select_hybrid(hybrid_candidate_tracks, quality) + hybrid_selected = list(filter(hybrid_filter, hybrid_candidate_tracks)) + + # For non-hybrid ranges, apply Cartesian product selection + non_hybrid_selected: list[Video] = [] + if non_hybrid_ranges and non_hybrid_tracks: + for resolution, color_range, codec in product( + quality or [None], non_hybrid_ranges, vcodec or [None] + ): + candidates = [ t - for t in title.tracks.videos + for t in non_hybrid_tracks if ( not resolution or t.height == resolution or int(t.width * (9 / 16)) == resolution ) and (not color_range or t.range == color_range) - ), - None, - ) + and (not codec or t.codec == codec) + ] + match = candidates[-1] if worst and candidates else next(iter(candidates), None) + if match and match not in non_hybrid_selected: + non_hybrid_selected.append(match) + + title.tracks.videos = hybrid_selected + non_hybrid_selected + else: + selected_videos: list[Video] = [] + for resolution, color_range, codec in product( + quality or [None], range_ or [None], vcodec or [None] + ): + candidates = [ + t + for t in title.tracks.videos + if ( + not resolution + or t.height == resolution + or int(t.width * (9 / 16)) == resolution + ) + and (not color_range or t.range == color_range) + and (not codec or t.codec == codec) + ] + match = candidates[-1] if worst and candidates else next(iter(candidates), None) if match and match not in selected_videos: selected_videos.append(match) title.tracks.videos = selected_videos # validate hybrid mode requirements if any(r == Video.Range.HYBRID for r in range_): - hdr10_tracks = [v for v in title.tracks.videos if v.range == Video.Range.HDR10] + base_tracks = [ + v for v in title.tracks.videos if v.range in (Video.Range.HDR10, Video.Range.HDR10P) + ] dv_tracks = [v for v in title.tracks.videos if v.range == Video.Range.DV] - if not hdr10_tracks and not dv_tracks: + hybrid_failed = False + if not base_tracks and not dv_tracks: available_ranges = sorted(set(v.range.name for v in title.tracks.videos)) - self.log.error("HYBRID mode requires both HDR10 and DV tracks, but neither is available") - self.log.error( + msg = "HYBRID mode requires both HDR10/HDR10+ and DV tracks, but neither is available" + msg_detail = ( f"Available ranges: {', '.join(available_ranges) if available_ranges else 'none'}" ) - sys.exit(1) - elif not hdr10_tracks: + hybrid_failed = True + elif not base_tracks: available_ranges = sorted(set(v.range.name for v in title.tracks.videos)) - self.log.error("HYBRID mode requires both HDR10 and DV tracks, but only DV is available") - self.log.error(f"Available ranges: {', '.join(available_ranges)}") - sys.exit(1) + msg = "HYBRID mode requires both HDR10/HDR10+ and DV tracks, but only DV is available" + msg_detail = f"Available ranges: {', '.join(available_ranges)}" + hybrid_failed = True elif not dv_tracks: available_ranges = sorted(set(v.range.name for v in title.tracks.videos)) - self.log.error("HYBRID mode requires both HDR10 and DV tracks, but only HDR10 is available") - self.log.error(f"Available ranges: {', '.join(available_ranges)}") - sys.exit(1) + msg = "HYBRID mode requires both HDR10/HDR10+ and DV tracks, but only HDR10 is available" + msg_detail = f"Available ranges: {', '.join(available_ranges)}" + hybrid_failed = True + + if hybrid_failed: + other_ranges = [r for r in range_ if r != Video.Range.HYBRID] + if best_available and other_ranges: + self.log.warning(msg) + self.log.warning( + f"Continuing with remaining range(s): {', '.join(r.name for r in other_ranges)}" + ) + range_ = other_ranges + else: + self.log.error(msg) + self.log.error(msg_detail) + sys.exit(1) # filter subtitle tracks if require_subs: @@ -1481,8 +1712,6 @@ class dl: f"Required languages found ({', '.join(require_subs)}), downloading all available subtitles" ) elif s_lang and "all" not in s_lang: - from envied.core.utilities import is_exact_match - match_func = is_exact_match if exact_lang else is_close_match missing_langs = [ @@ -1547,7 +1776,7 @@ class dl: if language not in processed_lang: processed_lang.append(language) - if "best" in processed_lang: + if "best" in processed_lang or "all" in processed_lang: unique_languages = {track.language for track in title.tracks.audio} selected_audio = [] for language in unique_languages: @@ -1570,7 +1799,7 @@ class dl: else: selected_audio.append(max(base_candidates, key=lambda x: x.bitrate or 0)) title.tracks.audio = selected_audio - elif "all" not in processed_lang: + else: # If multiple codecs were explicitly requested, pick the best track per codec per # requested language instead of selecting *all* bitrate variants of a codec. if acodec and len(acodec) > 1: @@ -1604,7 +1833,10 @@ class dl: if audio_description: standard_audio = [a for a in title.tracks.audio if not a.descriptive] selected_standards = title.tracks.by_language( - standard_audio, processed_lang, per_language=per_language, exact_match=exact_lang + standard_audio, + processed_lang, + per_language=per_language, + exact_match=exact_lang, ) desc_audio = [a for a in title.tracks.audio if a.descriptive] # Include all descriptive tracks for the requested languages. @@ -1728,10 +1960,7 @@ class dl: ), licence=partial( service.get_playready_license - if ( - is_playready_cdm(self.cdm) - ) - and hasattr(service, "get_playready_license") + if is_playready_cdm(self.cdm) else service.get_widevine_license, title=title, track=track, @@ -1802,55 +2031,10 @@ class dl: dl_time = time_elapsed_since(dl_start_time) console.print(Padding(f"Track downloads finished in [progress.elapsed]{dl_time}[/]", (0, 5))) - video_track_n = 0 - - while ( - not title.tracks.subtitles - and not no_subs - and not (hasattr(service, "NO_SUBTITLES") and service.NO_SUBTITLES) - and not video_only - and not no_video - and len(title.tracks.videos) > video_track_n - and any( - x.get("codec_name", "").startswith("eia_") - for x in ffprobe(title.tracks.videos[video_track_n].path).get("streams", []) - ) - ): - with console.status(f"Checking Video track {video_track_n + 1} for Closed Captions..."): - try: - # TODO: Figure out the real language, it might be different - # EIA-CC tracks sadly don't carry language information :( - # TODO: Figure out if the CC language is original lang or not. - # Will need to figure out above first to do so. - video_track = title.tracks.videos[video_track_n] - track_id = f"ccextractor-{video_track.id}" - cc_lang = title.language or video_track.language - cc = video_track.ccextractor( - track_id=track_id, - out_path=config.directories.temp - / config.filenames.subtitle.format(id=track_id, language=cc_lang), - language=cc_lang, - original=False, - ) - if cc: - # will not appear in track listings as it's added after all times it lists - title.tracks.add(cc) - self.log.info(f"Extracted a Closed Caption from Video track {video_track_n + 1}") - else: - self.log.info(f"No Closed Captions were found in Video track {video_track_n + 1}") - except EnvironmentError: - self.log.error( - "Cannot extract Closed Captions as the ccextractor executable was not found..." - ) - break - video_track_n += 1 - # Subtitle output mode configuration (for sidecar originals) subtitle_output_mode = config.subtitle.get("output_mode", "mux") sidecar_format = config.subtitle.get("sidecar_format", "srt") - skip_subtitle_mux = ( - subtitle_output_mode == "sidecar" and (title.tracks.videos or title.tracks.audio) - ) + skip_subtitle_mux = subtitle_output_mode == "sidecar" and (title.tracks.videos or title.tracks.audio) sidecar_subtitles: list[Subtitle] = [] sidecar_original_paths: dict[str, Path] = {} if subtitle_output_mode in ("sidecar", "both") and not no_mux: @@ -1912,6 +2096,75 @@ class dl: if has_decrypted: self.log.info(f"Decrypted tracks with {decrypt_tool}") + # Extract Closed Captions from decrypted video tracks + if ( + not no_subs + and not (hasattr(service, "NO_SUBTITLES") and service.NO_SUBTITLES) + and not video_only + and not no_video + ): + match_func = is_exact_match if exact_lang else is_close_match + for video_track_n, video_track in enumerate(title.tracks.videos): + has_manifest_cc = bool(getattr(video_track, "closed_captions", None)) + has_eia_cc = ( + not has_manifest_cc + and not title.tracks.subtitles + and any( + x.get("codec_name", "").startswith("eia_") + for x in ffprobe(video_track.path).get("streams", []) + ) + ) + if not has_manifest_cc and not has_eia_cc: + continue + + # Build list of CC entries to extract + if has_manifest_cc: + cc_entries = video_track.closed_captions + # Filter CC languages against --s-lang if specified + if s_lang and "all" not in s_lang: + cc_entries = [ + entry for entry in cc_entries + if entry.get("language") + and match_func(Language.get(entry["language"]), s_lang) + ] + if not cc_entries: + continue + else: + # EIA fallback: single entry with unknown language + cc_entries = [{}] + + with console.status(f"Checking Video track {video_track_n + 1} for Closed Captions..."): + try: + for cc_idx, cc_entry in enumerate(cc_entries): + cc_lang = ( + Language.get(cc_entry["language"]) + if cc_entry.get("language") + else title.language or video_track.language + ) + track_id = f"ccextractor-{video_track.id}-{cc_idx}" + cc = video_track.ccextractor( + track_id=track_id, + out_path=config.directories.temp + / config.filenames.subtitle.format(id=track_id, language=cc_lang), + language=cc_lang, + original=False, + ) + if cc: + cc.cc = True + title.tracks.add(cc) + self.log.info( + f"Extracted a Closed Caption ({cc_lang}) from Video track {video_track_n + 1}" + ) + else: + self.log.info( + f"No Closed Captions were found in Video track {video_track_n + 1}" + ) + except EnvironmentError: + self.log.error( + "Cannot extract Closed Captions as the ccextractor executable was not found..." + ) + break + # Now repack the decrypted tracks with console.status("Repackaging tracks with FFMPEG..."): has_repacked = False @@ -1987,12 +2240,14 @@ class dl: # Hybrid mode: process DV and HDR10 tracks separately for each resolution self.log.info("Processing Hybrid HDR10+DV tracks...") - # Group video tracks by resolution + # Group video tracks by resolution (prefer HDR10+ over HDR10 as base) resolutions_processed = set() - hdr10_tracks = [v for v in title.tracks.videos if v.range == Video.Range.HDR10] + base_tracks_list = [ + v for v in title.tracks.videos if v.range in (Video.Range.HDR10P, Video.Range.HDR10) + ] dv_tracks = [v for v in title.tracks.videos if v.range == Video.Range.DV] - for hdr10_track in hdr10_tracks: + for hdr10_track in base_tracks_list: resolution = hdr10_track.height if resolution in resolutions_processed: continue @@ -2048,6 +2303,8 @@ class dl: task_description += f" {video_track.height}p" if len(range_) > 1: task_description += f" {video_track.range.name}" + if len(vcodec) > 1: + task_description += f" {video_track.codec.name}" task_tracks = Tracks(title.tracks) + title.tracks.chapters + title.tracks.attachments if video_track: @@ -2099,9 +2356,11 @@ class dl: else: base_filename = str(title) - sidecar_dir = config.directories.downloads + sidecar_dir = self.output_dir or config.directories.downloads if not no_folder and isinstance(title, (Episode, Song)) and media_info: - sidecar_dir /= title.get_filename(media_info, show_service=not no_source, folder=True) + sidecar_dir /= title.get_filename( + media_info, show_service=not no_source, folder=True + ) sidecar_dir.mkdir(parents=True, exist_ok=True) with console.status("Saving subtitle sidecar files..."): @@ -2151,7 +2410,7 @@ class dl: if no_mux: # Handle individual track files without muxing - final_dir = config.directories.downloads + final_dir = self.output_dir or config.directories.downloads if not no_folder and isinstance(title, (Episode, Song)): # Create folder based on title # Use first available track for filename generation @@ -2201,9 +2460,10 @@ class dl: self.log.debug(f"Saved: {final_path.name}") else: # Handle muxed files + used_final_paths: set[Path] = set() for muxed_path in muxed_paths: media_info = MediaInfo.parse(muxed_path) - final_dir = config.directories.downloads + final_dir = self.output_dir or config.directories.downloads final_filename = title.get_filename(media_info, show_service=not no_source) audio_codec_suffix = muxed_audio_codecs.get(muxed_path) @@ -2212,20 +2472,29 @@ class dl: final_dir.mkdir(parents=True, exist_ok=True) final_path = final_dir / f"{final_filename}{muxed_path.suffix}" + template_type = ( + "series" if isinstance(title, Episode) else "songs" if isinstance(title, Song) else "movies" + ) + sep = config.get_template_separator(template_type) + if final_path.exists() and audio_codec_suffix and append_audio_codec_suffix: - sep = "." if config.scene_naming else " " final_filename = f"{final_filename.rstrip()}{sep}{audio_codec_suffix.name}" final_path = final_dir / f"{final_filename}{muxed_path.suffix}" - if final_path.exists(): - sep = "." if config.scene_naming else " " + if final_path in used_final_paths: i = 2 - while final_path.exists(): + while final_path in used_final_paths: final_path = final_dir / f"{final_filename.rstrip()}{sep}{i}{muxed_path.suffix}" i += 1 - shutil.move(muxed_path, final_path) - tags.tag_file(final_path, title, self.tmdb_id) + try: + os.replace(muxed_path, final_path) + except OSError: + if final_path.exists(): + final_path.unlink() + shutil.move(muxed_path, final_path) + used_final_paths.add(final_path) + tags.tag_file(final_path, title, self.tmdb_id, self.imdb_id) title_dl_time = time_elapsed_since(dl_start_time) console.print( diff --git a/packages/envied/src/envied/core/__init__.py b/packages/envied/src/envied/core/__init__.py index 528787c..ce1305b 100644 --- a/packages/envied/src/envied/core/__init__.py +++ b/packages/envied/src/envied/core/__init__.py @@ -1 +1 @@ -__version__ = "3.0.0" +__version__ = "4.0.0" diff --git a/packages/envied/src/envied/core/__main__.py b/packages/envied/src/envied/core/__main__.py index 22037d8..d25c718 100644 --- a/packages/envied/src/envied/core/__main__.py +++ b/packages/envied/src/envied/core/__main__.py @@ -1,5 +1,6 @@ import atexit import logging +from datetime import datetime import click import urllib3 diff --git a/packages/envied/src/envied/core/api/download_manager.py b/packages/envied/src/envied/core/api/download_manager.py index e6eb4ed..b8a15db 100644 --- a/packages/envied/src/envied/core/api/download_manager.py +++ b/packages/envied/src/envied/core/api/download_manager.py @@ -10,6 +10,7 @@ from contextlib import suppress from dataclasses import dataclass, field from datetime import datetime, timedelta from enum import Enum +from pathlib import Path from typing import Any, Callable, Dict, List, Optional log = logging.getLogger("download_manager") @@ -105,11 +106,44 @@ def _perform_download( from envied.commands.dl import dl from envied.core.config import config from envied.core.services import Services + from envied.core.tracks import Subtitle, Video from envied.core.utils.click_types import ContextData from envied.core.utils.collections import merge_dict log.info(f"Starting sync download for job {job_id}") + # Convert string parameters to enums (API receives strings, dl.result() expects enums) + vcodec_raw = params.get("vcodec") + if vcodec_raw: + if isinstance(vcodec_raw, str): + vcodec_raw = [vcodec_raw] + if isinstance(vcodec_raw, list) and vcodec_raw and not isinstance(vcodec_raw[0], Video.Codec): + codec_map = {c.name.upper(): c for c in Video.Codec} + codec_map.update({c.value.upper(): c for c in Video.Codec}) + params["vcodec"] = [codec_map[v.upper()] for v in vcodec_raw if v.upper() in codec_map] + else: + params["vcodec"] = [] + + range_raw = params.get("range") + if range_raw: + if isinstance(range_raw, str): + range_raw = [range_raw] + if isinstance(range_raw, list) and range_raw and not isinstance(range_raw[0], Video.Range): + range_map = {r.name.upper(): r for r in Video.Range} + range_map.update({r.value.upper(): r for r in Video.Range}) + params["range"] = [range_map[r.upper()] for r in range_raw if r.upper() in range_map] + else: + params["range"] = [Video.Range.SDR] + + sub_format_raw = params.get("sub_format") + if sub_format_raw and isinstance(sub_format_raw, str): + sub_map = {c.name.upper(): c for c in Subtitle.Codec} + sub_map.update({c.value.upper(): c for c in Subtitle.Codec}) + params["sub_format"] = sub_map.get(sub_format_raw.upper()) + + if params.get("export") and isinstance(params["export"], str): + params["export"] = Path(params["export"]) + # Load service configuration service_config_path = Services.get_path(service) / config.filenames.config if service_config_path.exists(): @@ -127,10 +161,15 @@ def _perform_download( "proxy": params.get("proxy"), "no_proxy": params.get("no_proxy", False), "profile": params.get("profile"), + "repack": params.get("repack", False), "tag": params.get("tag"), "tmdb_id": params.get("tmdb_id"), - "tmdb_name": params.get("tmdb_name", False), - "tmdb_year": params.get("tmdb_year", False), + "imdb_id": params.get("imdb_id"), + "animeapi_id": params.get("animeapi_id"), + "enrich": params.get("enrich", False), + "output_dir": Path(params["output_dir"]) if params.get("output_dir") else None, + "no_cache": params.get("no_cache", False), + "reset_cache": params.get("reset_cache", False), } dl_instance = dl( @@ -138,10 +177,13 @@ def _perform_download( no_proxy=params.get("no_proxy", False), profile=params.get("profile"), proxy=params.get("proxy"), + repack=params.get("repack", False), tag=params.get("tag"), tmdb_id=params.get("tmdb_id"), - tmdb_name=params.get("tmdb_name", False), - tmdb_year=params.get("tmdb_year", False), + imdb_id=params.get("imdb_id"), + animeapi_id=params.get("animeapi_id"), + enrich=params.get("enrich", False), + output_dir=Path(params["output_dir"]) if params.get("output_dir") else None, ) service_module = Services.load(service) @@ -220,14 +262,14 @@ def _perform_download( dl_instance.result( service=service_instance, quality=params.get("quality", []), - vcodec=params.get("vcodec"), + vcodec=params.get("vcodec", []), acodec=params.get("acodec"), vbitrate=params.get("vbitrate"), abitrate=params.get("abitrate"), range_=params.get("range", ["SDR"]), channels=params.get("channels"), no_atmos=params.get("no_atmos", False), - split_audio=params.get("split_audio"), + select_titles=False, wanted=params.get("wanted", []), latest_episode=params.get("latest_episode", False), lang=params.get("lang", ["orig"]), @@ -245,6 +287,7 @@ def _perform_download( no_subs=params.get("no_subs", False), no_audio=params.get("no_audio", False), no_chapters=params.get("no_chapters", False), + no_video=params.get("no_video", False), audio_description=params.get("audio_description", False), slow=params.get("slow", False), list_=False, @@ -259,6 +302,7 @@ def _perform_download( workers=params.get("workers"), downloads=params.get("downloads", 1), best_available=params.get("best_available", False), + split_audio=params.get("split_audio"), ) except SystemExit as exc: diff --git a/packages/envied/src/envied/core/api/handlers.py b/packages/envied/src/envied/core/api/handlers.py index 02b5179..f01e73e 100644 --- a/packages/envied/src/envied/core/api/handlers.py +++ b/packages/envied/src/envied/core/api/handlers.py @@ -1,3 +1,4 @@ +import enum import logging from typing import Any, Dict, List, Optional @@ -42,8 +43,10 @@ DEFAULT_DOWNLOAD_PARAMS = { "no_subs": False, "no_audio": False, "no_chapters": False, + "no_video": False, "audio_description": False, "slow": False, + "split_audio": None, "skip_dl": False, "export": None, "cdm_only": None, @@ -54,6 +57,11 @@ DEFAULT_DOWNLOAD_PARAMS = { "workers": None, "downloads": 1, "best_available": False, + "repack": False, + "imdb_id": None, + "output_dir": None, + "no_cache": False, + "reset_cache": False, } @@ -341,6 +349,137 @@ def serialize_subtitle_track(track: Subtitle, include_url: bool = False) -> Dict return result +async def search_handler(data: Dict[str, Any], request: Optional[web.Request] = None) -> web.Response: + """Handle search request.""" + import inspect + + import click + import yaml + + from envied.commands.dl import dl + from envied.core.config import config + from envied.core.services import Services + from envied.core.utils.click_types import ContextData + from envied.core.utils.collections import merge_dict + + service_tag = data.get("service") + query = data.get("query") + + if not service_tag: + raise APIError(APIErrorCode.MISSING_SERVICE, "Missing required 'service' field") + if not query: + raise APIError(APIErrorCode.INVALID_PARAMETERS, "Missing required 'query' field") + + normalized_service = Services.get_tag(service_tag) + if not normalized_service: + raise APIError( + APIErrorCode.INVALID_SERVICE, + f"Service '{service_tag}' not found", + details={"service": service_tag}, + ) + + profile = data.get("profile") + proxy_param = data.get("proxy") + no_proxy = data.get("no_proxy", False) + + service_config_path = Services.get_path(normalized_service) / config.filenames.config + if service_config_path.exists(): + service_config = yaml.safe_load(service_config_path.read_text(encoding="utf8")) + else: + service_config = {} + merge_dict(config.services.get(normalized_service), service_config) + + proxy_providers = [] + if not no_proxy: + proxy_providers = initialize_proxy_providers() + + if proxy_param and not no_proxy: + try: + resolved_proxy = resolve_proxy(proxy_param, proxy_providers) + proxy_param = resolved_proxy + except ValueError as e: + raise APIError( + APIErrorCode.INVALID_PROXY, + f"Proxy error: {e}", + details={"proxy": proxy_param, "service": normalized_service}, + ) + + @click.command() + @click.pass_context + def dummy_service(ctx: click.Context) -> None: + pass + + ctx = click.Context(dummy_service) + ctx.obj = ContextData(config=service_config, cdm=None, proxy_providers=proxy_providers, profile=profile) + ctx.params = {"proxy": proxy_param, "no_proxy": no_proxy} + + service_module = Services.load(normalized_service) + + dummy_service.name = normalized_service + ctx.invoked_subcommand = normalized_service + + service_ctx = click.Context(dummy_service, parent=ctx) + service_ctx.obj = ctx.obj + + service_init_params = inspect.signature(service_module.__init__).parameters + service_kwargs = {"title": query} + + # Extract default values from the click command + if hasattr(service_module, "cli") and hasattr(service_module.cli, "params"): + for param in service_module.cli.params: + if hasattr(param, "name") and param.name not in service_kwargs: + if hasattr(param, "default") and param.default is not None and not isinstance(param.default, enum.Enum): + service_kwargs[param.name] = param.default + + for param_name, param_info in service_init_params.items(): + if param_name not in service_kwargs and param_name not in ["self", "ctx"]: + if param_info.default is inspect.Parameter.empty: + if param_name == "meta_lang": + service_kwargs[param_name] = None + elif param_name == "movie": + service_kwargs[param_name] = False + else: + service_kwargs[param_name] = None + + # Filter to only accepted params + accepted_params = set(service_init_params.keys()) - {"self", "ctx"} + service_kwargs = {k: v for k, v in service_kwargs.items() if k in accepted_params} + + try: + service_instance = service_module(service_ctx, **service_kwargs) + except Exception as exc: + raise APIError( + APIErrorCode.SERVICE_ERROR, + f"Failed to initialize service: {exc}", + details={"service": normalized_service}, + ) + + # Authenticate + cookies = dl.get_cookie_jar(normalized_service, profile) + credential = dl.get_credentials(normalized_service, profile) + service_instance.authenticate(cookies, credential) + + # Search + results = [] + try: + for result in service_instance.search(): + results.append({ + "id": result.id, + "title": result.title, + "description": result.description, + "label": result.label, + "url": result.url, + }) + except NotImplementedError: + raise APIError( + APIErrorCode.SERVICE_ERROR, + f"Search is not supported by {normalized_service}", + details={"service": normalized_service}, + ) + + return web.json_response({"results": results, "count": len(results)}) + + async def list_titles_handler(data: Dict[str, Any], request: Optional[web.Request] = None) -> web.Response: """Handle list-titles request.""" service_tag = data.get("service") @@ -439,7 +578,7 @@ async def list_titles_handler(data: Dict[str, Any], request: Optional[web.Reques for param in service_module.cli.params: if hasattr(param, "name") and param.name not in service_kwargs: # Add default value if parameter is not already provided - if hasattr(param, "default") and param.default is not None: + if hasattr(param, "default") and param.default is not None and not isinstance(param.default, enum.Enum): service_kwargs[param.name] = param.default # Handle required parameters that don't have click defaults @@ -587,7 +726,7 @@ async def list_tracks_handler(data: Dict[str, Any], request: Optional[web.Reques for param in service_module.cli.params: if hasattr(param, "name") and param.name not in service_kwargs: # Add default value if parameter is not already provided - if hasattr(param, "default") and param.default is not None: + if hasattr(param, "default") and param.default is not None and not isinstance(param.default, enum.Enum): service_kwargs[param.name] = param.default # Handle required parameters that don't have click defaults @@ -631,7 +770,10 @@ async def list_tracks_handler(data: Dict[str, Any], request: Optional[web.Reques try: season_range = SeasonRange() - wanted = season_range.parse_tokens(wanted_param) + if isinstance(wanted_param, list): + wanted = season_range.parse_tokens(*wanted_param) + else: + wanted = season_range.parse_tokens(wanted_param) log.debug(f"Parsed wanted '{wanted_param}' into {len(wanted)} episodes: {wanted[:10]}...") except Exception as e: raise APIError( @@ -760,9 +902,17 @@ def validate_download_parameters(data: Dict[str, Any]) -> Optional[str]: None if valid, error message string if invalid """ if "vcodec" in data and data["vcodec"]: - valid_vcodecs = ["H264", "H265", "VP9", "AV1"] - if data["vcodec"].upper() not in valid_vcodecs: - return f"Invalid vcodec: {data['vcodec']}. Must be one of: {', '.join(valid_vcodecs)}" + valid_vcodecs = ["H264", "H265", "H.264", "H.265", "AVC", "HEVC", "VC1", "VC-1", "VP8", "VP9", "AV1"] + if isinstance(data["vcodec"], str): + vcodec_values = [v.strip() for v in data["vcodec"].split(",") if v.strip()] + elif isinstance(data["vcodec"], list): + vcodec_values = [str(v).strip() for v in data["vcodec"] if str(v).strip()] + else: + return "vcodec must be a string or list" + + invalid = [value for value in vcodec_values if value.upper() not in valid_vcodecs] + if invalid: + return f"Invalid vcodec: {', '.join(invalid)}. Must be one of: {', '.join(valid_vcodecs)}" if "acodec" in data and data["acodec"]: valid_acodecs = ["AAC", "AC3", "EC3", "EAC3", "DD", "DD+", "AC4", "OPUS", "FLAC", "ALAC", "VORBIS", "OGG", "DTS"] @@ -778,7 +928,7 @@ def validate_download_parameters(data: Dict[str, Any]) -> Optional[str]: return f"Invalid acodec: {', '.join(invalid)}. Must be one of: {', '.join(valid_acodecs)}" if "sub_format" in data and data["sub_format"]: - valid_sub_formats = ["SRT", "VTT", "ASS", "SSA"] + valid_sub_formats = ["SRT", "VTT", "ASS", "SSA", "TTML", "STPP", "WVTT", "SMI", "SUB", "MPL2", "TMP"] if data["sub_format"].upper() not in valid_sub_formats: return f"Invalid sub_format: {data['sub_format']}. Must be one of: {', '.join(valid_sub_formats)}" @@ -880,7 +1030,7 @@ async def download_handler(data: Dict[str, Any], request: Optional[web.Request] # Extract default values from the service's click command if hasattr(service_module, "cli") and hasattr(service_module.cli, "params"): for param in service_module.cli.params: - if hasattr(param, "name") and hasattr(param, "default") and param.default is not None: + if hasattr(param, "name") and hasattr(param, "default") and param.default is not None and not isinstance(param.default, enum.Enum): # Store service-specific defaults (e.g., drm_system, hydrate_track, profile for NF) service_specific_defaults[param.name] = param.default diff --git a/packages/envied/src/envied/core/api/routes.py b/packages/envied/src/envied/core/api/routes.py index e85ad81..704847b 100644 --- a/packages/envied/src/envied/core/api/routes.py +++ b/packages/envied/src/envied/core/api/routes.py @@ -7,7 +7,8 @@ from aiohttp_swagger3 import SwaggerDocs, SwaggerInfo, SwaggerUiSettings from envied.core import __version__ from envied.core.api.errors import APIError, APIErrorCode, build_error_response, handle_api_exception from envied.core.api.handlers import (cancel_download_job_handler, download_handler, get_download_job_handler, - list_download_jobs_handler, list_titles_handler, list_tracks_handler) + list_download_jobs_handler, list_titles_handler, list_tracks_handler, + search_handler) from envied.core.services import Services from envied.core.update_checker import UpdateChecker @@ -199,6 +200,93 @@ async def services(request: web.Request) -> web.Response: return handle_api_exception(e, context={"operation": "list_services"}, debug_mode=debug_mode) +async def search(request: web.Request) -> web.Response: + """ + Search for titles from a service. + --- + summary: Search for titles + description: Search for titles by query string from a service + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - service + - query + properties: + service: + type: string + description: Service tag (e.g., NF, AMZN, ATV) + query: + type: string + description: Search query string + profile: + type: string + description: Profile to use for credentials and cookies (default - None) + proxy: + type: string + description: Proxy URI or country code (default - None) + no_proxy: + type: boolean + description: Force disable all proxy use (default - false) + responses: + '200': + description: Search results + content: + application/json: + schema: + type: object + properties: + results: + type: array + items: + type: object + properties: + id: + type: string + description: Title ID for use with other endpoints + title: + type: string + description: Title name + description: + type: string + description: Title description + label: + type: string + description: Informative label (e.g., availability, region) + url: + type: string + description: URL to the title page + count: + type: integer + description: Number of results returned + '400': + description: Invalid request + """ + try: + data = await request.json() + except Exception as e: + return build_error_response( + APIError( + APIErrorCode.INVALID_INPUT, + "Invalid JSON request body", + details={"error": str(e)}, + ), + request.app.get("debug_api", False), + ) + + try: + return await search_handler(data, request) + except APIError as e: + return build_error_response(e, request.app.get("debug_api", False)) + except Exception as e: + log.exception("Error in search") + debug_mode = request.app.get("debug_api", False) + return handle_api_exception(e, context={"operation": "search"}, debug_mode=debug_mode) + + async def list_titles(request: web.Request) -> web.Response: """ List titles for a service and title ID. @@ -409,11 +497,19 @@ async def download(request: web.Request) -> web.Response: type: integer description: Download resolution(s) (default - best available) vcodec: - type: string - description: Video codec to download (e.g., H264, H265, VP9, AV1) (default - None) + oneOf: + - type: string + - type: array + items: + type: string + description: Video codec(s) to download (e.g., "H265" or ["H264", "H265"]) - accepts H264, H265, AVC, HEVC, VP8, VP9, AV1, VC1 (default - None) acodec: - type: string - description: Audio codec(s) to download (e.g., AAC or AAC,EC3) (default - None) + oneOf: + - type: string + - type: array + items: + type: string + description: Audio codec(s) to download (e.g., "AAC" or ["AAC", "EC3"]) - accepts AAC, AC3, EC3, AC4, OPUS, FLAC, ALAC, DTS, OGG (default - None) vbitrate: type: integer description: Video bitrate in kbps (default - None) @@ -424,7 +520,7 @@ async def download(request: web.Request) -> web.Response: type: array items: type: string - description: Video color range (SDR, HDR10, DV) (default - ["SDR"]) + description: Video color range (SDR, HDR10, HDR10+, HLG, DV, HYBRID) (default - ["SDR"]) channels: type: number description: Audio channels (e.g., 2.0, 5.1, 7.1) (default - None) @@ -494,12 +590,18 @@ async def download(request: web.Request) -> web.Response: no_chapters: type: boolean description: Do not download chapters (default - false) + no_video: + type: boolean + description: Do not download video tracks (default - false) audio_description: type: boolean description: Download audio description tracks (default - false) slow: type: boolean description: Add 60-120s delay between downloads (default - false) + split_audio: + type: boolean + description: Create separate output files per audio codec instead of merging all audio (default - null) skip_dl: type: boolean description: Skip downloading, only retrieve decryption keys (default - false) @@ -521,12 +623,12 @@ async def download(request: web.Request) -> web.Response: tmdb_id: type: integer description: Use this TMDB ID for tagging (default - None) - tmdb_name: + animeapi_id: + type: string + description: Anime database ID via AnimeAPI, e.g. mal:12345 (default - None) + enrich: type: boolean - description: Rename titles using TMDB name (default - false) - tmdb_year: - type: boolean - description: Use release year from TMDB (default - false) + description: Override show title and year from external source (default - false) no_folder: type: boolean description: Disable folder creation for TV shows (default - false) @@ -545,6 +647,21 @@ async def download(request: web.Request) -> web.Response: best_available: type: boolean description: Continue with best available if requested quality unavailable (default - false) + repack: + type: boolean + description: Add REPACK tag to the output filename (default - false) + imdb_id: + type: string + description: Use this IMDB ID (e.g. tt1375666) for tagging (default - None) + output_dir: + type: string + description: Override the output directory for this download (default - None) + no_cache: + type: boolean + description: Bypass title cache for this download (default - false) + reset_cache: + type: boolean + description: Clear title cache before fetching (default - false) responses: '202': description: Download job created @@ -723,6 +840,7 @@ def setup_routes(app: web.Application) -> None: """Setup all API routes.""" app.router.add_get("/api/health", health) app.router.add_get("/api/services", services) + app.router.add_post("/api/search", search) app.router.add_post("/api/list-titles", list_titles) app.router.add_post("/api/list-tracks", list_tracks) app.router.add_post("/api/download", download) @@ -748,6 +866,7 @@ def setup_swagger(app: web.Application) -> None: [ web.get("/api/health", health), web.get("/api/services", services), + web.post("/api/search", search), web.post("/api/list-titles", list_titles), web.post("/api/list-tracks", list_tracks), web.post("/api/download", download), diff --git a/packages/envied/src/envied/core/config.py b/packages/envied/src/envied/core/config.py index e59fe63..36b0796 100644 --- a/packages/envied/src/envied/core/config.py +++ b/packages/envied/src/envied/core/config.py @@ -1,5 +1,7 @@ from __future__ import annotations +import re +import warnings from pathlib import Path from typing import Any, Optional @@ -93,9 +95,26 @@ class Config: self.decrypt_labs_api_key: str = kwargs.get("decrypt_labs_api_key") or "" self.update_checks: bool = kwargs.get("update_checks", True) self.update_check_interval: int = kwargs.get("update_check_interval", 24) - self.scene_naming: bool = kwargs.get("scene_naming", True) - self.dash_naming: bool = kwargs.get("dash_naming", False) - self.series_year: bool = kwargs.get("series_year", True) + + self.language_tags: dict = kwargs.get("language_tags") or {} + self.output_template: dict = kwargs.get("output_template") or {} + + if kwargs.get("scene_naming") is not None: + raise SystemExit( + "ERROR: The 'scene_naming' option has been removed.\n" + "Please configure 'output_template' in your envied.yaml instead.\n" + "See unshackle-example.yaml for examples." + ) + + if not self.output_template: + raise SystemExit( + "ERROR: No 'output_template' configured in your envied.yaml.\n" + "Please add an 'output_template' section with movies, series, and songs templates.\n" + "See unshackle-example.yaml for examples." + ) + + self._validate_output_templates() + self.unicode_filenames: bool = kwargs.get("unicode_filenames", False) self.title_cache_time: int = kwargs.get("title_cache_time", 1800) # 30 minutes default @@ -105,6 +124,78 @@ class Config: self.debug: bool = kwargs.get("debug", False) self.debug_keys: bool = kwargs.get("debug_keys", False) + def _validate_output_templates(self) -> None: + """Validate output template configurations and warn about potential issues.""" + if not self.output_template: + return + + valid_variables = { + "title", + "year", + "season", + "episode", + "season_episode", + "episode_name", + "quality", + "resolution", + "source", + "tag", + "track_number", + "artist", + "album", + "disc", + "audio", + "audio_channels", + "audio_full", + "atmos", + "dual", + "multi", + "video", + "hdr", + "hfr", + "edition", + "repack", + "lang_tag", + } + + unsafe_chars = r'[<>:"/\\|?*]' + + for template_type, template_str in self.output_template.items(): + if not isinstance(template_str, str): + warnings.warn(f"Template '{template_type}' must be a string, got {type(template_str).__name__}") + continue + + variables = re.findall(r"\{([^}]+)\}", template_str) + + for var in variables: + var_clean = var.rstrip("?") + if var_clean not in valid_variables: + warnings.warn(f"Unknown template variable '{var}' in {template_type} template") + + test_template = re.sub(r"\{[^}]+\}", "TEST", template_str) + if re.search(unsafe_chars, test_template): + warnings.warn(f"Template '{template_type}' may contain filesystem-unsafe characters") + + if not template_str.strip(): + warnings.warn(f"Template '{template_type}' is empty") + + def get_template_separator(self, template_type: str = "movies") -> str: + """Get the filename separator for the given template type. + + Analyzes the active template to determine whether it uses dots or spaces + between variables. Falls back to dot separator (scene-style) by default. + + Args: + template_type: One of "movies", "series", or "songs". + """ + template = self.output_template[template_type] + between_vars = re.findall(r"\}([^{]*)\{", template) + separator_text = "".join(between_vars) + dot_count = separator_text.count(".") + space_count = separator_text.count(" ") + + return " " if space_count > dot_count else "." + @classmethod def from_yaml(cls, path: Path) -> Config: if not path.exists(): diff --git a/packages/envied/src/envied/core/downloaders/aria2c.py b/packages/envied/src/envied/core/downloaders/aria2c.py index be94b69..b319d42 100644 --- a/packages/envied/src/envied/core/downloaders/aria2c.py +++ b/packages/envied/src/envied/core/downloaders/aria2c.py @@ -431,14 +431,24 @@ def download( raise ValueError(error) # Yield aggregate progress for this call's downloads - if total_size > 0: - # Yield both advance (bytes downloaded this iteration) and total for rich progress - if dl_speed != -1: - yield dict(downloaded=f"{filesize.decimal(dl_speed)}/s", advance=0, completed=total_completed, total=total_size) + progress_data = {"advance": 0} + + if len(gids) > 1: + # Multi-file mode (e.g., HLS): Return the count of completed segments + progress_data["completed"] = len(completed) + progress_data["total"] = len(gids) + else: + # Single-file mode: Return the total bytes downloaded + progress_data["completed"] = total_completed + if total_size > 0: + progress_data["total"] = total_size else: - yield dict(advance=0, completed=total_completed, total=total_size) - elif dl_speed != -1: - yield dict(downloaded=f"{filesize.decimal(dl_speed)}/s") + progress_data["total"] = None + + if dl_speed != -1: + progress_data["downloaded"] = f"{filesize.decimal(dl_speed)}/s" + + yield progress_data time.sleep(1) except KeyboardInterrupt: diff --git a/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py b/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py index 4b95384..738f9ce 100644 --- a/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py +++ b/packages/envied/src/envied/core/downloaders/n_m3u8dl_re.py @@ -191,6 +191,9 @@ def build_download_args( args["--skip-merge"] = skip_merge if ad_keyword: args["--ad-keyword"] = ad_keyword + # Disable segment count validation to work around N_m3u8DL-RE's Math.Ceiling + # bug in duration-based SegmentTemplate calculation (see nilaoda/N_m3u8DL-RE#108) + args["--check-segments-count"] = False key_args = [] if content_keys: diff --git a/packages/envied/src/envied/core/drm/playready.py b/packages/envied/src/envied/core/drm/playready.py index 969f373..951c760 100644 --- a/packages/envied/src/envied/core/drm/playready.py +++ b/packages/envied/src/envied/core/drm/playready.py @@ -44,16 +44,15 @@ class PlayReady: else: kids = [] - # Extract KIDs using pyplayready's method (may miss some KIDs) + # Extract KIDs using pyplayready's WrmHeader key_ids if not kids: for header in pssh.wrm_headers: - try: - signed_ids, _, _, _ = header.read_attributes() - except Exception: - continue - for signed_id in signed_ids: + for signed_key_id in getattr(header, "key_ids", []): try: - kids.append(UUID(bytes_le=base64.b64decode(signed_id.value))) + if isinstance(signed_key_id.value, UUID): + kids.append(signed_key_id.value) + else: + kids.append(UUID(bytes_le=base64.b64decode(signed_key_id.value))) except Exception: continue @@ -119,7 +118,33 @@ class PlayReady: except Exception: pass - # Also get individual KID + # v4.2/v4.3: DATA/PROTECTINFO/KIDS/KID + protectinfo_kids = root.findall(".//pr:DATA/pr:PROTECTINFO/pr:KIDS/pr:KID", ns) + for kid_elem in protectinfo_kids: + value = kid_elem.get("VALUE") + if value: + try: + kid_bytes = base64.b64decode(value + "==") + kid_uuid = UUID(bytes_le=kid_bytes) + if kid_uuid not in kids: + kids.append(kid_uuid) + except Exception: + pass + + # v4.1: DATA/PROTECTINFO/KID + protectinfo_kid = root.findall(".//pr:DATA/pr:PROTECTINFO/pr:KID", ns) + for kid_elem in protectinfo_kid: + value = kid_elem.get("VALUE") + if value: + try: + kid_bytes = base64.b64decode(value + "==") + kid_uuid = UUID(bytes_le=kid_bytes) + if kid_uuid not in kids: + kids.append(kid_uuid) + except Exception: + pass + + # v4.0: DATA/KID individual_kids = root.findall(".//pr:DATA/pr:KID", ns) for kid_elem in individual_kids: if kid_elem.text: diff --git a/packages/envied/src/envied/core/manifests/dash.py b/packages/envied/src/envied/core/manifests/dash.py index df2b3b7..7e183b2 100644 --- a/packages/envied/src/envied/core/manifests/dash.py +++ b/packages/envied/src/envied/core/manifests/dash.py @@ -7,7 +7,7 @@ import math import re import shutil import sys -from copy import copy +from copy import copy, deepcopy from functools import partial from pathlib import Path from typing import Any, Callable, Optional, Union @@ -18,6 +18,7 @@ from zlib import crc32 import requests from curl_cffi.requests import Session as CurlSession from langcodes import Language, tag_is_valid +from lxml import etree from lxml.etree import Element, ElementTree from pyplayready.system.pssh import PSSH as PR_PSSH from pywidevine.cdm import Cdm as WidevineCdm @@ -101,14 +102,22 @@ class DASH: """ tracks = Tracks() + filtered_period_ids: list[str] = [] + for period in self.manifest.findall("Period"): if callable(period_filter) and period_filter(period): + if period_id := period.get("id"): + filtered_period_ids.append(period_id) continue if next(iter(period.xpath("SegmentType/@value")), "content") != "content": + if period_id := period.get("id"): + filtered_period_ids.append(period_id) continue if "urn:amazon:primevideo:cachingBreadth" in [ x.get("schemeIdUri") for x in period.findall("SupplementalProperty") ]: + if period_id := period.get("id"): + filtered_period_ids.append(period_id) continue for adaptation_set in period.findall("AdaptationSet"): @@ -235,6 +244,7 @@ class DASH: "period": period, "adaptation_set": adaptation_set, "representation": rep, + "filtered_period_ids": filtered_period_ids, } }, **track_args, @@ -541,6 +551,26 @@ class DASH: skip_merge = False if downloader.__name__ == "n_m3u8dl_re": skip_merge = True + + # When periods were filtered out during to_tracks(), n_m3u8dl_re will re-parse + # the raw MPD and download ALL periods (including ads/pre-rolls). Write a filtered + # MPD with the rejected periods removed so n_m3u8dl_re downloads the correct content. + filtered_period_ids = track.data.get("dash", {}).get("filtered_period_ids", []) + if filtered_period_ids: + filtered_manifest = deepcopy(manifest) + for child in list(filtered_manifest): + if not hasattr(child.tag, "find"): + continue + if child.tag == "Period" and child.get("id") in filtered_period_ids: + filtered_manifest.remove(child) + + filtered_mpd_path = save_dir / f".{track.id}_filtered.mpd" + filtered_mpd_path.parent.mkdir(parents=True, exist_ok=True) + etree.ElementTree(filtered_manifest).write( + str(filtered_mpd_path), xml_declaration=True, encoding="utf-8" + ) + track.from_file = filtered_mpd_path + downloader_args.update( { "filename": track.id, @@ -578,6 +608,11 @@ class DASH: status_update["downloaded"] = f"DASH {downloaded}" progress(**status_update) + # Clean up filtered MPD temp file before enumerating segments + filtered_mpd_path = save_dir / f".{track.id}_filtered.mpd" + if filtered_mpd_path.exists(): + filtered_mpd_path.unlink() + # see https://github.com/devine-dl/devine/issues/71 for control_file in save_dir.glob("*.aria2__temp"): control_file.unlink() diff --git a/packages/envied/src/envied/core/manifests/hls.py b/packages/envied/src/envied/core/manifests/hls.py index 5ac0504..bc6fe6e 100644 --- a/packages/envied/src/envied/core/manifests/hls.py +++ b/packages/envied/src/envied/core/manifests/hls.py @@ -112,6 +112,15 @@ class HLS: session_drm = HLS.get_all_drm(session_keys) audio_codecs_by_group_id: dict[str, Audio.Codec] = {} + cc_by_group_id: dict[str, list[dict[str, Any]]] = {} + for media in self.manifest.media: + if media.type == "CLOSED-CAPTIONS": + cc_by_group_id.setdefault(media.group_id, []).append({ + "language": media.language, + "name": media.name, + "instream_id": media.instream_id, + "characteristics": media.characteristics, + }) tracks = Tracks() for playlist in self.manifest.playlists: @@ -161,6 +170,9 @@ class HLS: width=playlist.stream_info.resolution[0] if playlist.stream_info.resolution else None, height=playlist.stream_info.resolution[1] if playlist.stream_info.resolution else None, fps=playlist.stream_info.frame_rate, + closed_captions=cc_by_group_id.get( + (playlist.stream_info.closed_captions or "").strip('"'), [] + ), ) if primary_track_type is Video else {} diff --git a/packages/envied/src/envied/core/manifests/ism.py b/packages/envied/src/envied/core/manifests/ism.py index 596421f..38e2395 100644 --- a/packages/envied/src/envied/core/manifests/ism.py +++ b/packages/envied/src/envied/core/manifests/ism.py @@ -145,7 +145,14 @@ class ISM: fragment_time += duration_frag track_id = hashlib.md5( - f"{codec}-{track_lang}-{ql.get('Bitrate') or 0}-{ql.get('Index') or 0}".encode() + "{codec}-{lang}-{bitrate}-{index}-{name}-{url}".format( + codec=codec, + lang=track_lang, + bitrate=ql.get("Bitrate") or 0, + index=ql.get("Index") or 0, + name=stream_index.get("Name") or "", + url=stream_index.get("Url") or "", + ).encode() ).hexdigest() data = { diff --git a/packages/envied/src/envied/core/providers/__init__.py b/packages/envied/src/envied/core/providers/__init__.py new file mode 100644 index 0000000..10267b1 --- /dev/null +++ b/packages/envied/src/envied/core/providers/__init__.py @@ -0,0 +1,428 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING, Optional + +import requests + +from envied.core.providers._base import ExternalIds, MetadataProvider, MetadataResult, fuzzy_match, log +from envied.core.providers.imdbapi import IMDBApiProvider +from envied.core.providers.simkl import SimklProvider +from envied.core.providers.tmdb import TMDBProvider + +if TYPE_CHECKING: + from envied.core.title_cacher import TitleCacher + +# Ordered by priority: IMDBApi (free), SIMKL, TMDB +ALL_PROVIDERS: list[type[MetadataProvider]] = [IMDBApiProvider, SimklProvider, TMDBProvider] + + +def get_available_providers() -> list[MetadataProvider]: + """Return instantiated providers that have valid credentials.""" + return [cls() for cls in ALL_PROVIDERS if cls().is_available()] + + +def get_provider(name: str) -> Optional[MetadataProvider]: + """Get a specific provider by name.""" + for cls in ALL_PROVIDERS: + if cls.NAME == name: + p = cls() + return p if p.is_available() else None + return None + + +# -- Public API (replaces tags.py functions) -- + + +def search_metadata( + title: str, + year: Optional[int], + kind: str, + title_cacher: Optional[TitleCacher] = None, + cache_title_id: Optional[str] = None, + cache_region: Optional[str] = None, + cache_account_hash: Optional[str] = None, +) -> Optional[MetadataResult]: + """Search all available providers for metadata. Returns best match.""" + # Check cache first + if title_cacher and cache_title_id: + for cls in ALL_PROVIDERS: + p = cls() + if not p.is_available(): + continue + cached = title_cacher.get_cached_provider(p.NAME, cache_title_id, kind, cache_region, cache_account_hash) + if cached: + result = _cached_to_result(cached, p.NAME, kind) + if result and result.title and fuzzy_match(result.title, title): + log.debug("Using cached %s data for %r", p.NAME, title) + return result + + # Search providers in priority order + for cls in ALL_PROVIDERS: + p = cls() + if not p.is_available(): + continue + try: + result = p.search(title, year, kind) + except (requests.RequestException, ValueError, KeyError) as exc: + log.debug("%s search failed: %s", p.NAME, exc) + continue + if result and result.title and fuzzy_match(result.title, title): + # Enrich with cross-referenced IDs if we have IMDB but missing TMDB/TVDB + enrich_ids(result) + # Cache the result (include enriched IDs so they survive round-trip) + if title_cacher and cache_title_id and result.raw: + try: + cache_data = result.raw + if result.external_ids.tmdb_id or result.external_ids.tvdb_id: + cache_data = { + **result.raw, + "_enriched_ids": _external_ids_to_dict(result.external_ids), + } + title_cacher.cache_provider( + p.NAME, cache_title_id, cache_data, kind, cache_region, cache_account_hash + ) + except Exception as exc: + log.debug("Failed to cache %s data: %s", p.NAME, exc) + return result + + return None + + +def get_title_by_id( + tmdb_id: int, + kind: str, + title_cacher: Optional[TitleCacher] = None, + cache_title_id: Optional[str] = None, + cache_region: Optional[str] = None, + cache_account_hash: Optional[str] = None, +) -> Optional[str]: + """Get title name by TMDB ID.""" + # Check cache first + if title_cacher and cache_title_id: + cached = title_cacher.get_cached_provider("tmdb", cache_title_id, kind, cache_region, cache_account_hash) + if cached and cached.get("detail"): + detail = cached["detail"] + tmdb_title = detail.get("title") or detail.get("name") + if tmdb_title: + log.debug("Using cached TMDB title: %r", tmdb_title) + return tmdb_title + + tmdb = get_provider("tmdb") + if not tmdb: + return None + result = tmdb.get_by_id(tmdb_id, kind) + if not result: + return None + + # Cache if possible + if title_cacher and cache_title_id and result.raw: + try: + ext_ids = tmdb.get_external_ids(tmdb_id, kind) + title_cacher.cache_provider( + "tmdb", + cache_title_id, + {"detail": result.raw, "external_ids": _external_ids_to_dict(ext_ids)}, + kind, + cache_region, + cache_account_hash, + ) + except Exception as exc: + log.debug("Failed to cache TMDB data: %s", exc) + + return result.title + + +def get_year_by_id( + tmdb_id: int, + kind: str, + title_cacher: Optional[TitleCacher] = None, + cache_title_id: Optional[str] = None, + cache_region: Optional[str] = None, + cache_account_hash: Optional[str] = None, +) -> Optional[int]: + """Get release year by TMDB ID.""" + # Check cache first + if title_cacher and cache_title_id: + cached = title_cacher.get_cached_provider("tmdb", cache_title_id, kind, cache_region, cache_account_hash) + if cached and cached.get("detail"): + detail = cached["detail"] + date = detail.get("release_date") or detail.get("first_air_date") + if date and len(date) >= 4 and date[:4].isdigit(): + year = int(date[:4]) + log.debug("Using cached TMDB year: %d", year) + return year + + tmdb = get_provider("tmdb") + if not tmdb: + return None + result = tmdb.get_by_id(tmdb_id, kind) + if not result: + return None + + # Cache if possible + if title_cacher and cache_title_id and result.raw: + try: + ext_ids = tmdb.get_external_ids(tmdb_id, kind) + title_cacher.cache_provider( + "tmdb", + cache_title_id, + {"detail": result.raw, "external_ids": _external_ids_to_dict(ext_ids)}, + kind, + cache_region, + cache_account_hash, + ) + except Exception as exc: + log.debug("Failed to cache TMDB data: %s", exc) + + return result.year + + +def fetch_external_ids( + tmdb_id: int, + kind: str, + title_cacher: Optional[TitleCacher] = None, + cache_title_id: Optional[str] = None, + cache_region: Optional[str] = None, + cache_account_hash: Optional[str] = None, +) -> ExternalIds: + """Get external IDs by TMDB ID.""" + # Check cache first + if title_cacher and cache_title_id: + cached = title_cacher.get_cached_provider("tmdb", cache_title_id, kind, cache_region, cache_account_hash) + if cached and cached.get("external_ids"): + log.debug("Using cached TMDB external IDs") + raw = cached["external_ids"] + return ExternalIds( + imdb_id=raw.get("imdb_id"), + tmdb_id=tmdb_id, + tmdb_kind=kind, + tvdb_id=raw.get("tvdb_id"), + ) + + tmdb = get_provider("tmdb") + if not tmdb: + return ExternalIds() + ext = tmdb.get_external_ids(tmdb_id, kind) + + # Cache if possible + if title_cacher and cache_title_id: + try: + detail = None + result = tmdb.get_by_id(tmdb_id, kind) + if result and result.raw: + detail = result.raw + if detail: + title_cacher.cache_provider( + "tmdb", + cache_title_id, + {"detail": detail, "external_ids": _external_ids_to_dict(ext)}, + kind, + cache_region, + cache_account_hash, + ) + except Exception as exc: + log.debug("Failed to cache TMDB data: %s", exc) + + return ext + + +# -- Internal helpers -- + + +# Provider authority ranking for tie-breaking (lower index = more authoritative) +_ENRICHMENT_PROVIDERS = ("tmdb", "simkl") +_ENRICHMENT_AUTHORITY: dict[str, int] = {name: i for i, name in enumerate(_ENRICHMENT_PROVIDERS)} + + +def enrich_ids(result: MetadataResult) -> None: + """Enrich a MetadataResult by cross-referencing IMDB ID with available providers. + + Queries all available providers, cross-validates tmdb_id as anchor. + If a provider returns a different tmdb_id than the authoritative source, + ALL of that provider's data is dropped (likely resolved to wrong title). + """ + ids = result.external_ids + if not ids.imdb_id: + return + if ids.tmdb_id and ids.tvdb_id: + return # already have everything + + kind = result.kind or "movie" + + # Step 1: Collect enrichment results from all available providers + enrichments: list[tuple[str, ExternalIds]] = [] + for provider_name in _ENRICHMENT_PROVIDERS: + p = get_provider(provider_name) + if not p: + continue + try: + enriched = p.find_by_imdb_id(ids.imdb_id, kind) # type: ignore[union-attr] + except Exception as exc: + log.debug("Enrichment via %s failed: %s", provider_name, exc) + continue + if enriched: + enrichments.append((provider_name, enriched)) + + if not enrichments: + return + + # Step 2: Cross-validate using tmdb_id as anchor — drop providers that disagree + validated = _validate_enrichments(enrichments) + + # Step 3: Merge validated data (fill gaps only) + for _provider_name, ext in validated: + if not ids.tmdb_id and ext.tmdb_id: + ids.tmdb_id = ext.tmdb_id + ids.tmdb_kind = ext.tmdb_kind or kind + if not ids.tvdb_id and ext.tvdb_id: + ids.tvdb_id = ext.tvdb_id + + +def _validate_enrichments( + enrichments: list[tuple[str, ExternalIds]], +) -> list[tuple[str, ExternalIds]]: + """Drop providers whose tmdb_id conflicts with the authoritative value. + + If providers disagree on tmdb_id, the more authoritative source wins + and ALL data from disagreeing providers is discarded (different tmdb_id + means the provider likely resolved to a different title entirely). + """ + from collections import Counter + + # Collect tmdb_id votes + tmdb_votes: dict[str, int] = {} + for provider_name, ext in enrichments: + if ext.tmdb_id is not None: + tmdb_votes[provider_name] = ext.tmdb_id + + if len(set(tmdb_votes.values())) <= 1: + return enrichments # all agree or only one voted — no conflict + + # Find the authoritative tmdb_id + value_counts = Counter(tmdb_votes.values()) + most_common_val, most_common_count = value_counts.most_common(1)[0] + + if most_common_count > 1: + anchor_tmdb_id = most_common_val + else: + # No majority — pick the most authoritative provider + best_provider = min( + tmdb_votes.keys(), + key=lambda name: _ENRICHMENT_AUTHORITY.get(name, 99), + ) + anchor_tmdb_id = tmdb_votes[best_provider] + + # Drop any provider that disagrees + validated: list[tuple[str, ExternalIds]] = [] + for provider_name, ext in enrichments: + if ext.tmdb_id is not None and ext.tmdb_id != anchor_tmdb_id: + log.debug( + "Dropping %s enrichment data: tmdb_id %s conflicts with " + "authoritative value %s (likely resolved to wrong title)", + provider_name, + ext.tmdb_id, + anchor_tmdb_id, + ) + continue + validated.append((provider_name, ext)) + + return validated + + +def _external_ids_to_dict(ext: ExternalIds) -> dict: + """Convert ExternalIds to a dict for caching.""" + result: dict = {} + if ext.imdb_id: + result["imdb_id"] = ext.imdb_id + if ext.tmdb_id: + result["tmdb_id"] = ext.tmdb_id + if ext.tmdb_kind: + result["tmdb_kind"] = ext.tmdb_kind + if ext.tvdb_id: + result["tvdb_id"] = ext.tvdb_id + return result + + +def _cached_to_result(cached: dict, provider_name: str, kind: str) -> Optional[MetadataResult]: + """Convert a cached provider dict back to a MetadataResult.""" + if provider_name == "tmdb": + detail = cached.get("detail", {}) + ext_raw = cached.get("external_ids", {}) + title = detail.get("title") or detail.get("name") + date = detail.get("release_date") or detail.get("first_air_date") + year = int(date[:4]) if date and len(date) >= 4 and date[:4].isdigit() else None + tmdb_id = detail.get("id") + return MetadataResult( + title=title, + year=year, + kind=kind, + external_ids=ExternalIds( + imdb_id=ext_raw.get("imdb_id"), + tmdb_id=tmdb_id, + tmdb_kind=kind, + tvdb_id=ext_raw.get("tvdb_id"), + ), + source="tmdb", + raw=cached, + ) + elif provider_name == "simkl": + response = cached.get("response", cached) + if response.get("type") == "episode" and "show" in response: + info = response["show"] + elif response.get("type") == "movie" and "movie" in response: + info = response["movie"] + else: + return None + ids = info.get("ids", {}) + tmdb_id = ids.get("tmdbtv") or ids.get("tmdb") or ids.get("moviedb") + if tmdb_id: + tmdb_id = int(tmdb_id) + return MetadataResult( + title=info.get("title"), + year=info.get("year"), + kind=kind, + external_ids=ExternalIds( + imdb_id=ids.get("imdb"), + tmdb_id=tmdb_id, + tmdb_kind=kind, + tvdb_id=ids.get("tvdb"), + ), + source="simkl", + raw=cached, + ) + elif provider_name == "imdbapi": + title = cached.get("primaryTitle") or cached.get("originalTitle") + year = cached.get("startYear") + imdb_id = cached.get("id") + # Restore enriched IDs that were saved alongside the raw data + enriched = cached.get("_enriched_ids", {}) + return MetadataResult( + title=title, + year=year, + kind=kind, + external_ids=ExternalIds( + imdb_id=imdb_id, + tmdb_id=enriched.get("tmdb_id"), + tmdb_kind=enriched.get("tmdb_kind"), + tvdb_id=enriched.get("tvdb_id"), + ), + source="imdbapi", + raw=cached, + ) + return None + + +__all__ = [ + "ALL_PROVIDERS", + "ExternalIds", + "MetadataProvider", + "MetadataResult", + "enrich_ids", + "fetch_external_ids", + "fuzzy_match", + "get_available_providers", + "get_provider", + "get_title_by_id", + "get_year_by_id", + "search_metadata", +] diff --git a/packages/envied/src/envied/core/providers/_base.py b/packages/envied/src/envied/core/providers/_base.py new file mode 100644 index 0000000..6222786 --- /dev/null +++ b/packages/envied/src/envied/core/providers/_base.py @@ -0,0 +1,97 @@ +from __future__ import annotations + +import logging +import re +from abc import ABCMeta, abstractmethod +from dataclasses import dataclass, field +from difflib import SequenceMatcher +from typing import Optional, Union + +import requests +from requests.adapters import HTTPAdapter, Retry + +log = logging.getLogger("METADATA") + +HEADERS = {"User-Agent": "unshackle-tags/1.0"} + +STRIP_RE = re.compile(r"[^a-z0-9]+", re.I) +YEAR_RE = re.compile(r"\s*\(?[12][0-9]{3}\)?$") + + +@dataclass +class ExternalIds: + """Normalized external IDs across providers.""" + + imdb_id: Optional[str] = None + tmdb_id: Optional[int] = None + tmdb_kind: Optional[str] = None # "movie" or "tv" + tvdb_id: Optional[int] = None + + +@dataclass +class MetadataResult: + """Unified metadata result from any provider.""" + + title: Optional[str] = None + year: Optional[int] = None + kind: Optional[str] = None # "movie" or "tv" + external_ids: ExternalIds = field(default_factory=ExternalIds) + source: str = "" # provider name, e.g. "tmdb", "simkl", "imdbapi" + raw: Optional[dict] = None # original API response for caching + + +class MetadataProvider(metaclass=ABCMeta): + """Abstract base for metadata providers.""" + + NAME: str = "" + REQUIRES_KEY: bool = True + + def __init__(self) -> None: + self.log = logging.getLogger(f"METADATA.{self.NAME.upper()}") + self._session: Optional[requests.Session] = None + + @property + def session(self) -> requests.Session: + if self._session is None: + self._session = requests.Session() + self._session.headers.update(HEADERS) + retry = Retry( + total=3, + backoff_factor=1, + status_forcelist=[429, 500, 502, 503, 504], + allowed_methods=["GET", "POST"], + ) + adapter = HTTPAdapter(max_retries=retry) + self._session.mount("https://", adapter) + self._session.mount("http://", adapter) + return self._session + + @abstractmethod + def is_available(self) -> bool: + """Return True if this provider has the credentials/keys it needs.""" + + @abstractmethod + def search(self, title: str, year: Optional[int], kind: str) -> Optional[MetadataResult]: + """Search for a title and return metadata, or None on failure/no match.""" + + @abstractmethod + def get_by_id(self, provider_id: Union[int, str], kind: str) -> Optional[MetadataResult]: + """Fetch metadata by this provider's native ID.""" + + @abstractmethod + def get_external_ids(self, provider_id: Union[int, str], kind: str) -> ExternalIds: + """Fetch external IDs for a title by this provider's native ID.""" + + +def _clean(s: str) -> str: + return STRIP_RE.sub("", s).lower() + + +def _strip_year(s: str) -> str: + return YEAR_RE.sub("", s).strip() + + +def fuzzy_match(a: str, b: str, threshold: float = 0.8) -> bool: + """Return True if ``a`` and ``b`` are a close match.""" + ratio = SequenceMatcher(None, _clean(a), _clean(b)).ratio() + return ratio >= threshold diff --git a/packages/envied/src/envied/core/providers/imdbapi.py b/packages/envied/src/envied/core/providers/imdbapi.py new file mode 100644 index 0000000..929b917 --- /dev/null +++ b/packages/envied/src/envied/core/providers/imdbapi.py @@ -0,0 +1,123 @@ +from __future__ import annotations + +from difflib import SequenceMatcher +from typing import Optional, Union + +import requests + +from envied.core.providers._base import ExternalIds, MetadataProvider, MetadataResult, _clean, fuzzy_match + +# Mapping from our kind ("movie"/"tv") to imdbapi.dev title types +KIND_TO_TYPES: dict[str, list[str]] = { + "movie": ["movie"], + "tv": ["tvSeries", "tvMiniSeries"], +} + + +class IMDBApiProvider(MetadataProvider): + """IMDb metadata provider using imdbapi.dev (free, no API key).""" + + NAME = "imdbapi" + REQUIRES_KEY = False + BASE_URL = "https://api.imdbapi.dev" + + def is_available(self) -> bool: + return True # no key needed + + def search(self, title: str, year: Optional[int], kind: str) -> Optional[MetadataResult]: + self.log.debug("Searching IMDBApi for %r (%s, %s)", title, kind, year) + + try: + params: dict[str, str | int] = {"query": title, "limit": 20} + r = self.session.get( + f"{self.BASE_URL}/search/titles", + params=params, + timeout=30, + ) + r.raise_for_status() + data = r.json() + except (requests.RequestException, ValueError) as exc: + self.log.debug("IMDBApi search failed: %s", exc) + return None + + results = data.get("titles") or data.get("results") or [] + if not results: + self.log.debug("IMDBApi returned no results for %r", title) + return None + + # Filter by type if possible + type_filter = KIND_TO_TYPES.get(kind, []) + filtered = [r for r in results if r.get("type") in type_filter] if type_filter else results + candidates = filtered if filtered else results + + # Find best fuzzy match, optionally filtered by year + best_match: Optional[dict] = None + best_ratio = 0.0 + + for candidate in candidates: + primary = candidate.get("primaryTitle") or "" + original = candidate.get("originalTitle") or "" + + for name in [primary, original]: + if not name: + continue + ratio = SequenceMatcher(None, _clean(title), _clean(name)).ratio() + if ratio > best_ratio: + # If year provided, prefer matches within 1 year + candidate_year = candidate.get("startYear") + if year and candidate_year and abs(year - candidate_year) > 1: + continue + best_ratio = ratio + best_match = candidate + + if not best_match: + self.log.debug("No matching result found in IMDBApi for %r", title) + return None + + result_title = best_match.get("primaryTitle") or best_match.get("originalTitle") + if not result_title or not fuzzy_match(result_title, title): + self.log.debug("IMDBApi title mismatch: searched %r, got %r", title, result_title) + return None + + imdb_id = best_match.get("id") + result_year = best_match.get("startYear") + + self.log.debug("IMDBApi -> %s (ID %s)", result_title, imdb_id) + + return MetadataResult( + title=result_title, + year=result_year, + kind=kind, + external_ids=ExternalIds(imdb_id=imdb_id), + source="imdbapi", + raw=best_match, + ) + + def get_by_id(self, provider_id: Union[int, str], kind: str) -> Optional[MetadataResult]: + """Fetch metadata by IMDB ID (e.g. 'tt1375666').""" + imdb_id = str(provider_id) + self.log.debug("Fetching IMDBApi title %s", imdb_id) + + try: + r = self.session.get(f"{self.BASE_URL}/titles/{imdb_id}", timeout=30) + r.raise_for_status() + data = r.json() + except (requests.RequestException, ValueError) as exc: + self.log.debug("IMDBApi get_by_id failed: %s", exc) + return None + + title = data.get("primaryTitle") or data.get("originalTitle") + result_year = data.get("startYear") + + return MetadataResult( + title=title, + year=result_year, + kind=kind, + external_ids=ExternalIds(imdb_id=data.get("id")), + source="imdbapi", + raw=data, + ) + + def get_external_ids(self, provider_id: Union[int, str], kind: str) -> ExternalIds: + """Return external IDs. For IMDB, the provider_id IS the IMDB ID.""" + return ExternalIds(imdb_id=str(provider_id)) diff --git a/packages/envied/src/envied/core/providers/simkl.py b/packages/envied/src/envied/core/providers/simkl.py new file mode 100644 index 0000000..1ab41f3 --- /dev/null +++ b/packages/envied/src/envied/core/providers/simkl.py @@ -0,0 +1,172 @@ +from __future__ import annotations + +from typing import Optional, Union + +import requests + +from envied.core.config import config +from envied.core.providers._base import ExternalIds, MetadataProvider, MetadataResult, fuzzy_match + + +class SimklProvider(MetadataProvider): + """SIMKL metadata provider (filename-based search).""" + + NAME = "simkl" + REQUIRES_KEY = True + BASE_URL = "https://api.simkl.com" + + def is_available(self) -> bool: + return bool(config.simkl_client_id) + + def search(self, title: str, year: Optional[int], kind: str) -> Optional[MetadataResult]: + self.log.debug("Searching Simkl for %r (%s, %s)", title, kind, year) + + # Construct appropriate filename based on type + filename = f"{title}" + if year: + filename = f"{title} {year}" + if kind == "tv": + filename += " S01E01.mkv" + else: + filename += " 2160p.mkv" + + try: + headers = {"simkl-api-key": config.simkl_client_id} + resp = self.session.post( + f"{self.BASE_URL}/search/file", json={"file": filename}, headers=headers, timeout=30 + ) + resp.raise_for_status() + data = resp.json() + self.log.debug("Simkl API response received") + except (requests.RequestException, ValueError) as exc: + self.log.debug("Simkl search failed: %s", exc) + return None + + # Handle case where SIMKL returns empty list (no results) + if isinstance(data, list): + self.log.debug("Simkl returned list (no matches) for %r", filename) + return None + + return self._parse_response(data, title, year, kind) + + def get_by_id(self, provider_id: Union[int, str], kind: str) -> Optional[MetadataResult]: + return None # SIMKL has no direct ID lookup used here + + def get_external_ids(self, provider_id: Union[int, str], kind: str) -> ExternalIds: + return ExternalIds() # IDs come from search() response + + def find_by_imdb_id(self, imdb_id: str, kind: str) -> Optional[ExternalIds]: + """Look up TMDB/TVDB IDs from an IMDB ID using SIMKL's /search/id and detail endpoints.""" + self.log.debug("Looking up IMDB ID %s on SIMKL", imdb_id) + headers = {"simkl-api-key": config.simkl_client_id} + + try: + r = self.session.get(f"{self.BASE_URL}/search/id", params={"imdb": imdb_id}, headers=headers, timeout=30) + r.raise_for_status() + data = r.json() + except (requests.RequestException, ValueError) as exc: + self.log.debug("SIMKL search/id failed: %s", exc) + return None + + if not isinstance(data, list) or not data: + self.log.debug("No SIMKL results for IMDB ID %s", imdb_id) + return None + + entry = data[0] + simkl_id = entry.get("ids", {}).get("simkl") + if not simkl_id: + return None + + # Map SIMKL type to endpoint + simkl_type = entry.get("type", "") + endpoint = "tv" if simkl_type in ("tv", "anime") else "movies" + + # Fetch full details to get cross-referenced IDs + try: + r2 = self.session.get( + f"{self.BASE_URL}/{endpoint}/{simkl_id}", + params={"extended": "full"}, + headers=headers, + timeout=30, + ) + r2.raise_for_status() + detail = r2.json() + except (requests.RequestException, ValueError) as exc: + self.log.debug("SIMKL detail fetch failed: %s", exc) + return None + + ids = detail.get("ids", {}) + tmdb_id: Optional[int] = None + raw_tmdb = ids.get("tmdb") + if raw_tmdb: + tmdb_id = int(raw_tmdb) + + tvdb_id: Optional[int] = None + raw_tvdb = ids.get("tvdb") + if raw_tvdb: + tvdb_id = int(raw_tvdb) + + self.log.debug("SIMKL find -> TMDB %s, TVDB %s for IMDB %s", tmdb_id, tvdb_id, imdb_id) + + return ExternalIds( + imdb_id=imdb_id, + tmdb_id=tmdb_id, + tmdb_kind=kind, + tvdb_id=tvdb_id, + ) + + def _parse_response( + self, data: dict, search_title: str, search_year: Optional[int], kind: str + ) -> Optional[MetadataResult]: + """Parse a SIMKL response into a MetadataResult.""" + if data.get("type") == "episode" and "show" in data: + info = data["show"] + content_type = "tv" + elif data.get("type") == "movie" and "movie" in data: + info = data["movie"] + content_type = "movie" + else: + return None + + result_title = info.get("title") + result_year = info.get("year") + + # Verify title matches + if not result_title or not fuzzy_match(result_title, search_title): + self.log.debug("Simkl title mismatch: searched %r, got %r", search_title, result_title) + return None + + # Verify year if provided (allow 1 year difference) + if search_year and result_year and abs(search_year - result_year) > 1: + self.log.debug("Simkl year mismatch: searched %d, got %d", search_year, result_year) + return None + + ids = info.get("ids", {}) + tmdb_id: Optional[int] = None + if content_type == "tv": + raw_tmdb = ids.get("tmdbtv") + else: + raw_tmdb = ids.get("tmdb") or ids.get("moviedb") + if raw_tmdb: + tmdb_id = int(raw_tmdb) + + tvdb_id: Optional[int] = None + raw_tvdb = ids.get("tvdb") + if raw_tvdb: + tvdb_id = int(raw_tvdb) + + self.log.debug("Simkl -> %s (TMDB ID %s)", result_title, tmdb_id) + + return MetadataResult( + title=result_title, + year=result_year, + kind=kind, + external_ids=ExternalIds( + imdb_id=ids.get("imdb"), + tmdb_id=tmdb_id, + tmdb_kind=kind, + tvdb_id=tvdb_id, + ), + source="simkl", + raw=data, + ) diff --git a/packages/envied/src/envied/core/providers/tmdb.py b/packages/envied/src/envied/core/providers/tmdb.py new file mode 100644 index 0000000..e159d4a --- /dev/null +++ b/packages/envied/src/envied/core/providers/tmdb.py @@ -0,0 +1,199 @@ +from __future__ import annotations + +from difflib import SequenceMatcher +from typing import Optional, Union + +import requests + +from envied.core.config import config +from envied.core.providers._base import ExternalIds, MetadataProvider, MetadataResult, _clean, _strip_year + + +class TMDBProvider(MetadataProvider): + """TMDB (The Movie Database) metadata provider.""" + + NAME = "tmdb" + REQUIRES_KEY = True + BASE_URL = "https://api.themoviedb.org/3" + + def is_available(self) -> bool: + return bool(config.tmdb_api_key) + + @property + def _api_key(self) -> str: + return config.tmdb_api_key + + def search(self, title: str, year: Optional[int], kind: str) -> Optional[MetadataResult]: + search_title = _strip_year(title) + self.log.debug("Searching TMDB for %r (%s, %s)", search_title, kind, year) + + params: dict[str, str | int] = {"api_key": self._api_key, "query": search_title} + if year is not None: + params["year" if kind == "movie" else "first_air_date_year"] = year + + try: + r = self.session.get(f"{self.BASE_URL}/search/{kind}", params=params, timeout=30) + r.raise_for_status() + results = r.json().get("results") or [] + self.log.debug("TMDB returned %d results", len(results)) + if not results: + return None + except requests.RequestException as exc: + self.log.warning("Failed to search TMDB for %s: %s", title, exc) + return None + + best_ratio = 0.0 + best_id: Optional[int] = None + best_title: Optional[str] = None + for result in results: + candidates = [ + result.get("title"), + result.get("name"), + result.get("original_title"), + result.get("original_name"), + ] + candidates = [c for c in candidates if c] + + for candidate in candidates: + ratio = SequenceMatcher(None, _clean(search_title), _clean(candidate)).ratio() + if ratio > best_ratio: + best_ratio = ratio + best_id = result.get("id") + best_title = candidate + + self.log.debug("Best candidate ratio %.2f for %r (ID %s)", best_ratio, best_title, best_id) + + if best_id is None: + first = results[0] + best_id = first.get("id") + best_title = first.get("title") or first.get("name") + + if best_id is None: + return None + + # Fetch full detail for caching + detail = self._fetch_detail(best_id, kind) + ext_raw = self._fetch_external_ids_raw(best_id, kind) + + date = (detail or {}).get("release_date") or (detail or {}).get("first_air_date") + result_year = int(date[:4]) if date and len(date) >= 4 and date[:4].isdigit() else None + + ext = ExternalIds( + imdb_id=ext_raw.get("imdb_id") if ext_raw else None, + tmdb_id=best_id, + tmdb_kind=kind, + tvdb_id=ext_raw.get("tvdb_id") if ext_raw else None, + ) + + return MetadataResult( + title=best_title, + year=result_year, + kind=kind, + external_ids=ext, + source="tmdb", + raw={"detail": detail or {}, "external_ids": ext_raw or {}}, + ) + + def get_by_id(self, provider_id: Union[int, str], kind: str) -> Optional[MetadataResult]: + detail = self._fetch_detail(int(provider_id), kind) + if not detail: + return None + + title = detail.get("title") or detail.get("name") + date = detail.get("release_date") or detail.get("first_air_date") + year = int(date[:4]) if date and len(date) >= 4 and date[:4].isdigit() else None + + return MetadataResult( + title=title, + year=year, + kind=kind, + external_ids=ExternalIds(tmdb_id=int(provider_id), tmdb_kind=kind), + source="tmdb", + raw=detail, + ) + + def get_external_ids(self, provider_id: Union[int, str], kind: str) -> ExternalIds: + raw = self._fetch_external_ids_raw(int(provider_id), kind) + if not raw: + return ExternalIds(tmdb_id=int(provider_id), tmdb_kind=kind) + return ExternalIds( + imdb_id=raw.get("imdb_id"), + tmdb_id=int(provider_id), + tmdb_kind=kind, + tvdb_id=raw.get("tvdb_id"), + ) + + def find_by_imdb_id(self, imdb_id: str, kind: str) -> Optional[ExternalIds]: + """Look up TMDB/TVDB IDs from an IMDB ID using TMDB's /find endpoint.""" + self.log.debug("Looking up IMDB ID %s on TMDB", imdb_id) + try: + r = self.session.get( + f"{self.BASE_URL}/find/{imdb_id}", + params={"api_key": self._api_key, "external_source": "imdb_id"}, + timeout=30, + ) + r.raise_for_status() + data = r.json() + except requests.RequestException as exc: + self.log.debug("TMDB find by IMDB ID failed: %s", exc) + return None + + # Check movie_results or tv_results based on kind + if kind == "movie": + results = data.get("movie_results") or [] + else: + results = data.get("tv_results") or [] + + if not results: + # Try the other type as fallback + fallback_key = "tv_results" if kind == "movie" else "movie_results" + results = data.get(fallback_key) or [] + if results: + kind = "tv" if kind == "movie" else "movie" + + if not results: + self.log.debug("No TMDB results found for IMDB ID %s", imdb_id) + return None + + match = results[0] + tmdb_id = match.get("id") + if not tmdb_id: + return None + + self.log.debug("TMDB find -> ID %s (%s) for IMDB %s", tmdb_id, kind, imdb_id) + + # Now fetch the full external IDs from TMDB to get TVDB etc. + ext_raw = self._fetch_external_ids_raw(tmdb_id, kind) + + return ExternalIds( + imdb_id=imdb_id, + tmdb_id=tmdb_id, + tmdb_kind=kind, + tvdb_id=ext_raw.get("tvdb_id") if ext_raw else None, + ) + + def _fetch_detail(self, tmdb_id: int, kind: str) -> Optional[dict]: + try: + r = self.session.get( + f"{self.BASE_URL}/{kind}/{tmdb_id}", + params={"api_key": self._api_key}, + timeout=30, + ) + r.raise_for_status() + return r.json() + except requests.RequestException as exc: + self.log.debug("Failed to fetch TMDB detail: %s", exc) + return None + + def _fetch_external_ids_raw(self, tmdb_id: int, kind: str) -> Optional[dict]: + try: + r = self.session.get( + f"{self.BASE_URL}/{kind}/{tmdb_id}/external_ids", + params={"api_key": self._api_key}, + timeout=30, + ) + r.raise_for_status() + return r.json() + except requests.RequestException as exc: + self.log.debug("Failed to fetch TMDB external IDs: %s", exc) + return None diff --git a/packages/envied/src/envied/core/service.py b/packages/envied/src/envied/core/service.py index 1d7248e..da6cbf4 100644 --- a/packages/envied/src/envied/core/service.py +++ b/packages/envied/src/envied/core/service.py @@ -1,7 +1,8 @@ import base64 import logging from abc import ABCMeta, abstractmethod -from collections.abc import Generator +from collections.abc import Callable, Generator +from dataclasses import dataclass, field from http.cookiejar import CookieJar from pathlib import Path from typing import Optional, Union @@ -24,9 +25,26 @@ from envied.core.search_result import SearchResult from envied.core.title_cacher import TitleCacher, get_account_hash, get_region_from_proxy from envied.core.titles import Title_T, Titles_T from envied.core.tracks import Chapters, Tracks +from envied.core.tracks.video import Video from envied.core.utilities import get_cached_ip_info, get_ip_info +@dataclass +class TrackRequest: + """Holds what the user requested for video codec and range selection. + + Services read from this instead of ctx.parent.params for vcodec/range. + + Attributes: + codecs: Requested codecs from CLI. Empty list means no filter (accept any). + ranges: Requested ranges from CLI. Defaults to [SDR]. + """ + + codecs: list[Video.Codec] = field(default_factory=list) + ranges: list[Video.Range] = field(default_factory=lambda: [Video.Range.SDR]) + best_available: bool = False + + def sanitize_proxy_for_log(uri: Optional[str]) -> Optional[str]: """ Sanitize a proxy URI for logs by redacting any embedded userinfo (username/password). @@ -89,6 +107,16 @@ class Service(metaclass=ABCMeta): self.credential = None # Will be set in authenticate() self.current_region = None # Will be set based on proxy/geolocation + # Set track request from CLI params - services can read/override in their __init__ + vcodec = ctx.parent.params.get("vcodec") if ctx.parent else None + range_ = ctx.parent.params.get("range_") if ctx.parent else None + best_available = ctx.parent.params.get("best_available", False) if ctx.parent else False + self.track_request = TrackRequest( + codecs=list(vcodec) if vcodec else [], + ranges=list(range_) if range_ else [Video.Range.SDR], + best_available=bool(best_available), + ) + if not ctx.parent or not ctx.parent.params.get("no_proxy"): if ctx.parent: proxy = ctx.parent.params["proxy"] @@ -205,6 +233,76 @@ class Service(metaclass=ABCMeta): self.log.debug(f"Failed to get cached IP info: {e}") self.current_region = None + def _get_tracks_for_variants( + self, + title: Title_T, + fetch_fn: Callable[..., Tracks], + ) -> Tracks: + """Call fetch_fn for each codec/range combo in track_request, merge results. + + Services that need separate API calls per codec/range combo can use this + helper from their get_tracks() implementation. + + The fetch_fn signature should be: (title, codec, range_) -> Tracks + + For HYBRID range, fetch_fn is called with HDR10 and DV separately and + the DV video tracks are merged into the HDR10 result. + + Args: + title: The title being processed. + fetch_fn: A callable that fetches tracks for a specific codec/range. + """ + all_tracks = Tracks() + first = True + + codecs = self.track_request.codecs or [None] + ranges = self.track_request.ranges or [Video.Range.SDR] + + for range_val in ranges: + if range_val == Video.Range.HYBRID: + # HYBRID: fetch HDR10 first (full tracks), then DV (video only) + for codec_val in codecs: + try: + hdr_tracks = fetch_fn(title, codec=codec_val, range_=Video.Range.HDR10) + except (ValueError, SystemExit) as e: + if self.track_request.best_available: + self.log.warning(f" - HDR10 not available for HYBRID, skipping ({e})") + continue + raise + if first: + all_tracks.add(hdr_tracks, warn_only=True) + first = False + else: + for video in hdr_tracks.videos: + all_tracks.add(video, warn_only=True) + + try: + dv_tracks = fetch_fn(title, codec=codec_val, range_=Video.Range.DV) + for video in dv_tracks.videos: + all_tracks.add(video, warn_only=True) + except (ValueError, SystemExit): + self.log.info(" - No DolbyVision manifest available for HYBRID") + else: + for codec_val in codecs: + try: + tracks = fetch_fn(title, codec=codec_val, range_=range_val) + except (ValueError, SystemExit) as e: + if self.track_request.best_available: + codec_name = codec_val.name if codec_val else "default" + self.log.warning( + f" - {range_val.name}/{codec_name} not available, skipping ({e})" + ) + continue + raise + if first: + all_tracks.add(tracks, warn_only=True) + first = False + else: + for video in tracks.videos: + all_tracks.add(video, warn_only=True) + + return all_tracks + # Optional Abstract functions # The following functions may be implemented by the Service. # Otherwise, the base service code (if any) of the function will be executed on call. @@ -222,7 +320,7 @@ class Service(metaclass=ABCMeta): session.mount( "https://", HTTPAdapter( - max_retries=Retry(total=15, backoff_factor=0.2, status_forcelist=[429, 500, 502, 503, 504]), + max_retries=Retry(total=5, backoff_factor=0.2, status_forcelist=[429, 500, 502, 503, 504]), pool_block=True, ), ) @@ -296,6 +394,27 @@ class Service(metaclass=ABCMeta): Decode the data, return as is to reduce unnecessary computations. """ + def get_playready_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[Union[bytes, str]]: + """ + Get a PlayReady License message by sending a License Request (challenge). + + This License message contains the encrypted Content Decryption Keys and will be + read by the CDM and decrypted. + + This is a very important request to get correct. A bad, unexpected, or missing + value in the request can cause your key to be detected and promptly banned, + revoked, disabled, or downgraded. + + :param challenge: The license challenge from the PlayReady CDM. + :param title: The current `Title` from get_titles that is being executed. This is provided in + case it has data needed to be used, e.g. for a HTTP request. + :param track: The current `Track` needing decryption. Provided for same reason as `title`. + :return: The License response as Bytes or a Base64 string. Don't Base64 Encode or + Decode the data, return as is to reduce unnecessary computations. + """ + # Delegates license handling to the Widevine license method by default if a service-specific PlayReady implementation is not provided. + return self.get_widevine_license(challenge=challenge, title=title, track=track) + # Required Abstract functions # The following functions *must* be implemented by the Service. # The functions will be executed in shown order. @@ -461,4 +580,4 @@ class Service(metaclass=ABCMeta): """ -__all__ = ("Service",) +__all__ = ("Service", "TrackRequest") diff --git a/packages/envied/src/envied/core/session.py b/packages/envied/src/envied/core/session.py index 12f8185..0d7d04b 100644 --- a/packages/envied/src/envied/core/session.py +++ b/packages/envied/src/envied/core/session.py @@ -44,6 +44,17 @@ FINGERPRINT_PRESETS = { "akamai": "4:16777216|16711681|0|m,p,a,s", "description": "OkHttp 5.x (BoringSSL TLS stack)", }, + "shield_okhttp": { + "ja3": ( + "771," # TLS 1.2 + "4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53," # Ciphers (OkHttp 4.11) + "0-23-65281-10-11-35-16-5-13-51-45-43-21," # Extensions (incl padding ext 21) + "29-23-24," # Named groups (x25519, secp256r1, secp384r1) + "0" # EC point formats + ), + "akamai": "4:16777216|16711681|0|m,p,a,s", + "description": "NVIDIA SHIELD Android TV OkHttp 4.11 (captured JA3)", + }, } @@ -56,7 +67,7 @@ class MaxRetriesError(exceptions.RequestException): class CurlSession(Session): def __init__( self, - max_retries: int = 10, + max_retries: int = 5, backoff_factor: float = 0.2, max_backoff: float = 60.0, status_forcelist: list[int] | None = None, @@ -150,7 +161,7 @@ def session( browser: Browser to impersonate (e.g. "chrome124", "firefox", "safari") OR fingerprint preset name (e.g. "okhttp4"). Uses the configured default from curl_impersonate.browser if not specified. - Available presets: okhttp4 + Available presets: okhttp4, okhttp5 See https://github.com/lexiforest/curl_cffi#sessions for browser options. ja3: Custom JA3 TLS fingerprint string (format: "SSLVersion,Ciphers,Extensions,Curves,PointFormats"). When provided, curl_cffi will use this exact TLS fingerprint instead of the browser's default. @@ -172,7 +183,7 @@ def session( - cert: Client certificate (str or tuple) Extra arguments for retry handler: - - max_retries: Maximum number of retries (int, default 10) + - max_retries: Maximum number of retries (int, default 5) - backoff_factor: Backoff factor (float, default 0.2) - max_backoff: Maximum backoff time (float, default 60.0) - status_forcelist: List of status codes to force retry (list, default [429, 500, 502, 503, 504]) diff --git a/packages/envied/src/envied/core/title_cacher.py b/packages/envied/src/envied/core/title_cacher.py index fc6b17b..919ac30 100644 --- a/packages/envied/src/envied/core/title_cacher.py +++ b/packages/envied/src/envied/core/title_cacher.py @@ -26,6 +26,7 @@ class TitleCacher: self.log = logging.getLogger(f"{service_name}.TitleCache") self.cacher = Cacher(service_name) self.stats = {"hits": 0, "misses": 0, "fallbacks": 0} + self.no_cache = False def _generate_cache_key( self, title_id: str, region: Optional[str] = None, account_hash: Optional[str] = None @@ -59,9 +60,6 @@ class TitleCacher: # Join with underscores cache_key = "_".join(key_parts) - # Log the mapping for debugging - self.log.debug(f"Cache key mapping: {title_id} -> {cache_key}") - return cache_key def get_cached_titles( @@ -89,6 +87,7 @@ class TitleCacher: """ # If caching is globally disabled or no_cache flag is set if not config.title_cache_enabled or no_cache: + self.no_cache = True self.log.debug("Cache bypassed, fetching fresh titles") return fetch_function() @@ -113,7 +112,7 @@ class TitleCacher: # Cache miss or expired, try to fetch fresh data self.stats["misses"] += 1 - self.log.debug(f"Cache miss for {title_id}, fetching fresh data") + self.log.debug(f"Cache miss for {title_id} fetching fresh data") try: # Attempt to fetch fresh titles @@ -180,22 +179,18 @@ class TitleCacher: "hit_rate": f"{hit_rate:.1f}%", } - def get_cached_tmdb( - self, title_id: str, kind: str, region: Optional[str] = None, account_hash: Optional[str] = None + # -- Generic provider cache methods -- + + def get_cached_provider( + self, + provider_name: str, + title_id: str, + kind: Optional[str] = None, + region: Optional[str] = None, + account_hash: Optional[str] = None, ) -> Optional[dict]: - """ - Get cached TMDB data for a title. - - Args: - title_id: The title identifier - kind: "movie" or "tv" - region: The region/proxy identifier - account_hash: Hash of account credentials - - Returns: - Dict with 'detail' and 'external_ids' if cached and valid, None otherwise - """ - if not config.title_cache_enabled: + """Get cached metadata for any provider.""" + if not config.title_cache_enabled or self.no_cache: return None cache_key = self._generate_cache_key(title_id, region, account_hash) @@ -204,142 +199,90 @@ class TitleCacher: if not cache or not cache.data: return None - tmdb_data = getattr(cache.data, "tmdb_data", None) - if not tmdb_data: + provider_data = getattr(cache.data, f"{provider_name}_data", None) + if not provider_data: return None - tmdb_expiration = tmdb_data.get("expires_at") - if not tmdb_expiration or datetime.now() >= tmdb_expiration: - self.log.debug(f"TMDB cache expired for {title_id}") + expiration = provider_data.get("expires_at") + if not expiration or datetime.now() >= expiration: + self.log.debug(f"{provider_name} cache expired for {title_id}") return None - if tmdb_data.get("kind") != kind: - self.log.debug(f"TMDB cache kind mismatch for {title_id}: cached {tmdb_data.get('kind')}, requested {kind}") + if kind and provider_data.get("kind") != kind: + self.log.debug( + f"{provider_name} cache kind mismatch for {title_id}: " + f"cached {provider_data.get('kind')}, requested {kind}" + ) return None - self.log.debug(f"TMDB cache hit for {title_id}") - return { - "detail": tmdb_data.get("detail"), - "external_ids": tmdb_data.get("external_ids"), - "fetched_at": tmdb_data.get("fetched_at"), - } + self.log.debug(f"{provider_name} cache hit for {title_id}") - def cache_tmdb( + # Return the inner data (provider-specific format) + response = provider_data.get("response") + if response is not None: + return response + + # For TMDB-style caches that store detail + external_ids at top level + result: dict = {} + if "detail" in provider_data: + result["detail"] = provider_data["detail"] + if "external_ids" in provider_data: + result["external_ids"] = provider_data["external_ids"] + if "fetched_at" in provider_data: + result["fetched_at"] = provider_data["fetched_at"] + return result if result else provider_data + + def cache_provider( self, + provider_name: str, title_id: str, - detail_response: dict, - external_ids_response: dict, - kind: str, + data: dict, + kind: Optional[str] = None, region: Optional[str] = None, account_hash: Optional[str] = None, + ttl_days: int = 7, ) -> None: - """ - Cache TMDB data for a title. - - Args: - title_id: The title identifier - detail_response: Full TMDB detail API response - external_ids_response: Full TMDB external_ids API response - kind: "movie" or "tv" - region: The region/proxy identifier - account_hash: Hash of account credentials - """ - if not config.title_cache_enabled: + """Cache metadata from any provider.""" + if not config.title_cache_enabled or self.no_cache: return cache_key = self._generate_cache_key(title_id, region, account_hash) cache = self.cacher.get(cache_key, version=1) if not cache or not cache.data: - self.log.debug(f"Cannot cache TMDB data: no title cache exists for {title_id}") + self.log.debug(f"Cannot cache {provider_name} data: no title cache exists for {title_id}") return now = datetime.now() - tmdb_data = { - "detail": detail_response, - "external_ids": external_ids_response, - "kind": kind, - "fetched_at": now, - "expires_at": now + timedelta(days=7), # 7-day expiration - } - cache.data.tmdb_data = tmdb_data + # Build cache entry in a format compatible with legacy methods + if provider_name == "tmdb" and "detail" in data: + # TMDB stores detail + external_ids at top level + cache_entry = { + **data, + "kind": kind, + "fetched_at": now, + "expires_at": now + timedelta(days=ttl_days), + } + elif provider_name == "simkl": + # SIMKL wraps in a "response" key + cache_entry = { + "response": data, + "fetched_at": now, + "expires_at": now + timedelta(days=ttl_days), + } + else: + # Generic format: store data directly with metadata + cache_entry = { + "response": data, + "kind": kind, + "fetched_at": now, + "expires_at": now + timedelta(days=ttl_days), + } + setattr(cache.data, f"{provider_name}_data", cache_entry) cache.set(cache.data, expiration=cache.expiration) - self.log.debug(f"Cached TMDB data for {title_id} (kind={kind})") - - def get_cached_simkl( - self, title_id: str, region: Optional[str] = None, account_hash: Optional[str] = None - ) -> Optional[dict]: - """ - Get cached Simkl data for a title. - - Args: - title_id: The title identifier - region: The region/proxy identifier - account_hash: Hash of account credentials - - Returns: - Simkl response dict if cached and valid, None otherwise - """ - if not config.title_cache_enabled: - return None - - cache_key = self._generate_cache_key(title_id, region, account_hash) - cache = self.cacher.get(cache_key, version=1) - - if not cache or not cache.data: - return None - - simkl_data = getattr(cache.data, "simkl_data", None) - if not simkl_data: - return None - - simkl_expiration = simkl_data.get("expires_at") - if not simkl_expiration or datetime.now() >= simkl_expiration: - self.log.debug(f"Simkl cache expired for {title_id}") - return None - - self.log.debug(f"Simkl cache hit for {title_id}") - return simkl_data.get("response") - - def cache_simkl( - self, - title_id: str, - simkl_response: dict, - region: Optional[str] = None, - account_hash: Optional[str] = None, - ) -> None: - """ - Cache Simkl data for a title. - - Args: - title_id: The title identifier - simkl_response: Full Simkl API response - region: The region/proxy identifier - account_hash: Hash of account credentials - """ - if not config.title_cache_enabled: - return - - cache_key = self._generate_cache_key(title_id, region, account_hash) - cache = self.cacher.get(cache_key, version=1) - - if not cache or not cache.data: - self.log.debug(f"Cannot cache Simkl data: no title cache exists for {title_id}") - return - - now = datetime.now() - simkl_data = { - "response": simkl_response, - "fetched_at": now, - "expires_at": now + timedelta(days=7), - } - - cache.data.simkl_data = simkl_data - - cache.set(cache.data, expiration=cache.expiration) - self.log.debug(f"Cached Simkl data for {title_id}") + self.log.debug(f"Cached {provider_name} data for {title_id}") def get_region_from_proxy(proxy_url: Optional[str]) -> Optional[str]: diff --git a/packages/envied/src/envied/core/titles/episode.py b/packages/envied/src/envied/core/titles/episode.py index 4197b7d..b965833 100644 --- a/packages/envied/src/envied/core/titles/episode.py +++ b/packages/envied/src/envied/core/titles/episode.py @@ -9,9 +9,9 @@ from rich.tree import Tree from sortedcontainers import SortedKeyList from envied.core.config import config -from envied.core.constants import AUDIO_CODEC_MAP, DYNAMIC_RANGE_MAP, VIDEO_CODEC_MAP from envied.core.titles.title import Title from envied.core.utilities import sanitize_filename +from envied.core.utils.template_formatter import TemplateFormatter class Episode(Title): @@ -78,173 +78,60 @@ class Episode(Title): self.year = year self.description = description + def _build_template_context(self, media_info: MediaInfo, show_service: bool = True) -> dict: + """Build template context dictionary from MediaInfo.""" + context = self._build_base_template_context(media_info, show_service) + context["title"] = self.title.replace("$", "S") + context["year"] = self.year or "" + context["season"] = f"S{self.season:02}" + context["episode"] = f"E{self.number:02}" + context["season_episode"] = f"S{self.season:02}E{self.number:02}" + context["episode_name"] = self.name or "" + return context + def __str__(self) -> str: return "{title}{year} S{season:02}E{number:02} {name}".format( title=self.title, - year=f" {self.year}" if self.year and config.series_year else "", + year=f" {self.year}" if self.year else "", season=self.season, number=self.number, name=self.name or "", ).strip() def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: - primary_video_track = next(iter(media_info.video_tracks), None) - primary_audio_track = None - if media_info.audio_tracks: - sorted_audio = sorted( - media_info.audio_tracks, - key=lambda x: ( - float(x.bit_rate) if x.bit_rate else 0, - bool(x.format_additionalfeatures and "JOC" in x.format_additionalfeatures), - ), - reverse=True, - ) - primary_audio_track = sorted_audio[0] - unique_audio_languages = len({x.language.split("-")[0] for x in media_info.audio_tracks if x.language}) - - def _get_resolution_token(track: Any) -> str: - if not track or not getattr(track, "height", None): - return "" - resolution = track.height - try: - dar = getattr(track, "other_display_aspect_ratio", None) or [] - if dar and dar[0]: - aspect_ratio = [int(float(plane)) for plane in str(dar[0]).split(":")] - if len(aspect_ratio) == 1: - aspect_ratio.append(1) - if aspect_ratio[0] / aspect_ratio[1] not in (16 / 9, 4 / 3): - resolution = int(track.width * (9 / 16)) - except Exception: - pass - - scan_suffix = "p" - scan_type = getattr(track, "scan_type", None) - if scan_type and str(scan_type).lower() == "interlaced": - scan_suffix = "i" - return f"{resolution}{scan_suffix}" - - # Title [Year] SXXEXX Name (or Title [Year] SXX if folder) if folder: - name = f"{self.title}" - if self.year and config.series_year: - name += f" {self.year}" - name += f" S{self.season:02}" - else: - if config.dash_naming: - # Format: Title - SXXEXX - Episode Name - name = self.title.replace("$", "S") # e.g., Arli$$ + series_template = config.output_template.get("series") + if series_template: + folder_template = series_template + folder_template = re.sub(r'\{episode\}', '', folder_template) + folder_template = re.sub(r'\{episode_name\?\}', '', folder_template) + folder_template = re.sub(r'\{episode_name\}', '', folder_template) + folder_template = re.sub(r'\{season_episode\}', '{season}', folder_template) - # Add year if configured - if self.year and config.series_year: - name += f" {self.year}" + folder_template = re.sub(r'\.{2,}', '.', folder_template) + folder_template = re.sub(r'\s{2,}', ' ', folder_template) + folder_template = re.sub(r'^[\.\s]+|[\.\s]+$', '', folder_template) - # Add season and episode - name += f" - S{self.season:02}E{self.number:02}" + formatter = TemplateFormatter(folder_template) + context = self._build_template_context(media_info, show_service) + context['season'] = f"S{self.season:02}" - # Add episode name with dash separator - if self.name: - name += f" - {self.name}" + folder_name = formatter.format(context) - name = name.strip() - else: - # Standard format without extra dashes - name = "{title}{year} S{season:02}E{number:02} {name}".format( - title=self.title.replace("$", "S"), # e.g., Arli$$ - year=f" {self.year}" if self.year and config.series_year else "", - season=self.season, - number=self.number, - name=self.name or "", - ).strip() - - if primary_video_track: - resolution_token = _get_resolution_token(primary_video_track) - if resolution_token: - name += f" {resolution_token}" - - # Service (use track source if available) - if show_service: - source_name = None - if self.tracks: - first_track = next(iter(self.tracks), None) - if first_track and hasattr(first_track, "source") and first_track.source: - source_name = first_track.source - name += f" {source_name or self.service.__name__}" - - # 'WEB-DL' - name += " WEB-DL" - - # DUAL - if unique_audio_languages == 2: - name += " DUAL" - - # MULTi - if unique_audio_languages > 2: - name += " MULTi" - - # Audio Codec + Channels (+ feature) - if primary_audio_track: - codec = primary_audio_track.format - channel_layout = primary_audio_track.channel_layout or primary_audio_track.channellayout_original - if channel_layout: - channels = float( - sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" ")) - ) - else: - channel_count = primary_audio_track.channel_s or primary_audio_track.channels or 0 - channels = float(channel_count) - - features = primary_audio_track.format_additionalfeatures or "" - name += f" {AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}" - if "JOC" in features or primary_audio_track.joc: - name += " Atmos" - - # Video (dynamic range + hfr +) Codec - if primary_video_track: - codec = primary_video_track.format - hdr_format = primary_video_track.hdr_format_commercial - hdr_format_full = primary_video_track.hdr_format or "" - trc = ( - primary_video_track.transfer_characteristics - or primary_video_track.transfer_characteristics_original - or "" - ) - frame_rate = float(primary_video_track.frame_rate) - - def _append_token(current: str, token: Optional[str]) -> str: - token = (token or "").strip() - current = current.rstrip() - if not token: - return current - if current.endswith(f" {token}"): - return current - return f"{current} {token}" - - # Primary HDR format detection - if hdr_format: - if hdr_format_full.startswith("Dolby Vision"): - name = _append_token(name, "DV") - if any( - indicator in (hdr_format_full + " " + hdr_format) - for indicator in ["HDR10", "SMPTE ST 2086"] - ): - name = _append_token(name, "HDR") - elif "HDR Vivid" in hdr_format: - name = _append_token(name, "HDR") + if '.' in series_template and ' ' not in series_template: + return sanitize_filename(folder_name, ".") else: - dynamic_range = DYNAMIC_RANGE_MAP.get(hdr_format) or hdr_format or "" - name = _append_token(name, dynamic_range) - elif "HLG" in trc or "Hybrid Log-Gamma" in trc or "ARIB STD-B67" in trc or "arib-std-b67" in trc.lower(): - name += " HLG" - elif any(indicator in trc for indicator in ["PQ", "SMPTE ST 2084", "BT.2100"]) or "smpte2084" in trc.lower() or "bt.2020-10" in trc.lower(): - name += " HDR" - if frame_rate > 30: - name += " HFR" - name += f" {VIDEO_CODEC_MAP.get(codec, codec)}" + return sanitize_filename(folder_name, " ") + else: + name = f"{self.title}" + if self.year: + name += f" {self.year}" + name += f" S{self.season:02}" + return sanitize_filename(name, " ") - if config.tag: - name += f"-{config.tag}" - - return sanitize_filename(name, "." if config.scene_naming else " ") + formatter = TemplateFormatter(config.output_template["series"]) + context = self._build_template_context(media_info, show_service) + return formatter.format(context) class Series(SortedKeyList, ABC): @@ -254,7 +141,7 @@ class Series(SortedKeyList, ABC): def __str__(self) -> str: if not self: return super().__str__() - return self[0].title + (f" ({self[0].year})" if self[0].year and config.series_year else "") + return self[0].title + (f" ({self[0].year})" if self[0].year else "") def tree(self, verbose: bool = False) -> Tree: seasons = Counter(x.season for x in self) diff --git a/packages/envied/src/envied/core/titles/movie.py b/packages/envied/src/envied/core/titles/movie.py index 8ce9ce0..6d260ad 100644 --- a/packages/envied/src/envied/core/titles/movie.py +++ b/packages/envied/src/envied/core/titles/movie.py @@ -7,9 +7,9 @@ from rich.tree import Tree from sortedcontainers import SortedKeyList from envied.core.config import config -from envied.core.constants import AUDIO_CODEC_MAP, DYNAMIC_RANGE_MAP, VIDEO_CODEC_MAP from envied.core.titles.title import Title from envied.core.utilities import sanitize_filename +from envied.core.utils.template_formatter import TemplateFormatter class Movie(Title): @@ -45,141 +45,28 @@ class Movie(Title): self.year = year self.description = description + def _build_template_context(self, media_info: MediaInfo, show_service: bool = True) -> dict: + """Build template context dictionary from MediaInfo.""" + context = self._build_base_template_context(media_info, show_service) + context["title"] = self.name.replace("$", "S") + context["year"] = self.year or "" + return context + def __str__(self) -> str: if self.year: - if config.dash_naming: - return f"{self.name} - {self.year}" return f"{self.name} ({self.year})" return self.name def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: - primary_video_track = next(iter(media_info.video_tracks), None) - primary_audio_track = None - if media_info.audio_tracks: - sorted_audio = sorted( - media_info.audio_tracks, - key=lambda x: ( - float(x.bit_rate) if x.bit_rate else 0, - bool(x.format_additionalfeatures and "JOC" in x.format_additionalfeatures), - ), - reverse=True, - ) - primary_audio_track = sorted_audio[0] - unique_audio_languages = len({x.language.split("-")[0] for x in media_info.audio_tracks if x.language}) + if folder: + name = f"{self.name}" + if self.year: + name += f" ({self.year})" + return sanitize_filename(name, " ") - def _get_resolution_token(track: Any) -> str: - if not track or not getattr(track, "height", None): - return "" - resolution = track.height - try: - dar = getattr(track, "other_display_aspect_ratio", None) or [] - if dar and dar[0]: - aspect_ratio = [int(float(plane)) for plane in str(dar[0]).split(":")] - if len(aspect_ratio) == 1: - aspect_ratio.append(1) - if aspect_ratio[0] / aspect_ratio[1] not in (16 / 9, 4 / 3): - resolution = int(track.width * (9 / 16)) - except Exception: - pass - - scan_suffix = "p" - scan_type = getattr(track, "scan_type", None) - if scan_type and str(scan_type).lower() == "interlaced": - scan_suffix = "i" - return f"{resolution}{scan_suffix}" - - # Name (Year) - name = str(self).replace("$", "S") # e.g., Arli$$ - - if primary_video_track: - resolution_token = _get_resolution_token(primary_video_track) - if resolution_token: - name += f" {resolution_token}" - - # Service (use track source if available) - if show_service: - source_name = None - if self.tracks: - first_track = next(iter(self.tracks), None) - if first_track and hasattr(first_track, "source") and first_track.source: - source_name = first_track.source - name += f" {source_name or self.service.__name__}" - - # 'WEB-DL' - name += " WEB-DL" - - # DUAL - if unique_audio_languages == 2: - name += " DUAL" - - # MULTi - if unique_audio_languages > 2: - name += " MULTi" - - # Audio Codec + Channels (+ feature) - if primary_audio_track: - codec = primary_audio_track.format - channel_layout = primary_audio_track.channel_layout or primary_audio_track.channellayout_original - if channel_layout: - channels = float( - sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" ")) - ) - else: - channel_count = primary_audio_track.channel_s or primary_audio_track.channels or 0 - channels = float(channel_count) - - features = primary_audio_track.format_additionalfeatures or "" - name += f" {AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}" - if "JOC" in features or primary_audio_track.joc: - name += " Atmos" - - # Video (dynamic range + hfr +) Codec - if primary_video_track: - codec = primary_video_track.format - hdr_format = primary_video_track.hdr_format_commercial - hdr_format_full = primary_video_track.hdr_format or "" - trc = ( - primary_video_track.transfer_characteristics - or primary_video_track.transfer_characteristics_original - or "" - ) - frame_rate = float(primary_video_track.frame_rate) - - def _append_token(current: str, token: Optional[str]) -> str: - token = (token or "").strip() - current = current.rstrip() - if not token: - return current - if current.endswith(f" {token}"): - return current - return f"{current} {token}" - - # Primary HDR format detection - if hdr_format: - if hdr_format_full.startswith("Dolby Vision"): - name = _append_token(name, "DV") - if any( - indicator in (hdr_format_full + " " + hdr_format) - for indicator in ["HDR10", "SMPTE ST 2086"] - ): - name = _append_token(name, "HDR") - elif "HDR Vivid" in hdr_format: - name = _append_token(name, "HDR") - else: - dynamic_range = DYNAMIC_RANGE_MAP.get(hdr_format) or hdr_format or "" - name = _append_token(name, dynamic_range) - elif "HLG" in trc or "Hybrid Log-Gamma" in trc or "ARIB STD-B67" in trc or "arib-std-b67" in trc.lower(): - name += " HLG" - elif any(indicator in trc for indicator in ["PQ", "SMPTE ST 2084", "BT.2100"]) or "smpte2084" in trc.lower() or "bt.2020-10" in trc.lower(): - name += " HDR" - if frame_rate > 30: - name += " HFR" - name += f" {VIDEO_CODEC_MAP.get(codec, codec)}" - - if config.tag: - name += f"-{config.tag}" - - return sanitize_filename(name, "." if config.scene_naming else " ") + formatter = TemplateFormatter(config.output_template["movies"]) + context = self._build_template_context(media_info, show_service) + return formatter.format(context) class Movies(SortedKeyList, ABC): diff --git a/packages/envied/src/envied/core/titles/song.py b/packages/envied/src/envied/core/titles/song.py index 6beece8..aac9d0d 100644 --- a/packages/envied/src/envied/core/titles/song.py +++ b/packages/envied/src/envied/core/titles/song.py @@ -7,9 +7,9 @@ from rich.tree import Tree from sortedcontainers import SortedKeyList from envied.core.config import config -from envied.core.constants import AUDIO_CODEC_MAP from envied.core.titles.title import Title from envied.core.utilities import sanitize_filename +from envied.core.utils.template_formatter import TemplateFormatter class Song(Title): @@ -41,7 +41,7 @@ class Song(Title): if not album: raise ValueError("Song album must be provided") if not isinstance(album, str): - raise TypeError(f"Expected album to be a str, not {name!r}") + raise TypeError(f"Expected album to be a str, not {album!r}") if not track: raise ValueError("Song track must be provided") @@ -81,46 +81,27 @@ class Song(Title): artist=self.artist, album=self.album, year=self.year, track=self.track, name=self.name ).strip() + def _build_template_context(self, media_info: MediaInfo, show_service: bool = True) -> dict: + """Build template context dictionary from MediaInfo.""" + context = self._build_base_template_context(media_info, show_service) + context["title"] = self.name.replace("$", "S") + context["year"] = self.year or "" + context["track_number"] = f"{self.track:02}" + context["artist"] = self.artist.replace("$", "S") + context["album"] = self.album.replace("$", "S") + context["disc"] = f"{self.disc:02}" if self.disc > 1 else "" + return context + def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: - audio_track = next(iter(media_info.audio_tracks), None) - codec = audio_track.format - channel_layout = audio_track.channel_layout or audio_track.channellayout_original - if channel_layout: - channels = float(sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" "))) - else: - channel_count = audio_track.channel_s or audio_track.channels or 0 - channels = float(channel_count) - - features = audio_track.format_additionalfeatures or "" - if folder: - # Artist - Album (Year) - name = str(self).split(" / ")[0] - else: - # NN. Song Name - name = str(self).split(" / ")[1] + name = f"{self.artist} - {self.album}" + if self.year: + name += f" ({self.year})" + return sanitize_filename(name, " ") - # Service (use track source if available) - if show_service: - source_name = None - if self.tracks: - first_track = next(iter(self.tracks), None) - if first_track and hasattr(first_track, "source") and first_track.source: - source_name = first_track.source - name += f" {source_name or self.service.__name__}" - - # 'WEB-DL' - name += " WEB-DL" - - # Audio Codec + Channels (+ feature) - name += f" {AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}" - if "JOC" in features or audio_track.joc: - name += " Atmos" - - if config.tag: - name += f"-{config.tag}" - - return sanitize_filename(name, " ") + formatter = TemplateFormatter(config.output_template["songs"]) + context = self._build_template_context(media_info, show_service) + return formatter.format(context) class Album(SortedKeyList, ABC): diff --git a/packages/envied/src/envied/core/titles/title.py b/packages/envied/src/envied/core/titles/title.py index 3729f25..7e37a92 100644 --- a/packages/envied/src/envied/core/titles/title.py +++ b/packages/envied/src/envied/core/titles/title.py @@ -6,6 +6,8 @@ from typing import Any, Optional, Union from langcodes import Language from pymediainfo import MediaInfo +from envied.core.config import config +from envied.core.constants import AUDIO_CODEC_MAP, DYNAMIC_RANGE_MAP, VIDEO_CODEC_MAP from envied.core.tracks import Tracks @@ -51,6 +53,127 @@ class Title: def __eq__(self, other: Title) -> bool: return self.id == other.id + def _build_base_template_context(self, media_info: MediaInfo, show_service: bool = True) -> dict: + """Build base template context dictionary from MediaInfo. + + Extracts video, audio, HDR, HFR, and multi-language information shared + across all title types. Subclasses should call this and extend the + returned dict with their specific fields (e.g., season/episode). + """ + primary_video_track = next(iter(media_info.video_tracks), None) + primary_audio_track = next(iter(media_info.audio_tracks), None) + unique_audio_languages = len({x.language.split("-")[0] for x in media_info.audio_tracks if x.language}) + + context: dict[str, Any] = { + "source": self.service.__name__ if show_service else "", + "tag": config.tag or "", + "repack": "REPACK" if getattr(config, "repack", False) else "", + "quality": "", + "resolution": "", + "audio": "", + "audio_channels": "", + "audio_full": "", + "atmos": "", + "dual": "", + "multi": "", + "video": "", + "hdr": "", + "hfr": "", + "edition": "", + "lang_tag": "", + } + + if self.tracks: + first_track = next(iter(self.tracks), None) + if first_track and first_track.edition: + context["edition"] = " ".join(first_track.edition) + + if primary_video_track: + width = getattr(primary_video_track, "width", primary_video_track.height) + resolution = min(width, primary_video_track.height) + try: + dar = getattr(primary_video_track, "other_display_aspect_ratio", None) or [] + if dar and dar[0]: + aspect_ratio = [int(float(plane)) for plane in str(dar[0]).split(":")] + if len(aspect_ratio) == 1: + aspect_ratio.append(1) + ratio = aspect_ratio[0] / aspect_ratio[1] + if ratio not in (16 / 9, 4 / 3, 9 / 16, 3 / 4): + resolution = int(max(width, primary_video_track.height) * (9 / 16)) + except Exception: + pass + + scan_suffix = "i" if str(getattr(primary_video_track, "scan_type", "")).lower() == "interlaced" else "p" + + context.update( + { + "quality": f"{resolution}{scan_suffix}", + "resolution": str(resolution), + "video": VIDEO_CODEC_MAP.get(primary_video_track.format, primary_video_track.format), + } + ) + + hdr_format = primary_video_track.hdr_format_commercial + trc = primary_video_track.transfer_characteristics or primary_video_track.transfer_characteristics_original + if hdr_format: + if (primary_video_track.hdr_format or "").startswith("Dolby Vision"): + context["hdr"] = "DV" + base_layer = DYNAMIC_RANGE_MAP.get(hdr_format) + if base_layer and base_layer != "DV": + context["hdr"] += f".{base_layer}" + elif (primary_video_track.hdr_format or "").startswith("HDR Vivid"): + context["hdr"] = "HDR" + else: + context["hdr"] = DYNAMIC_RANGE_MAP.get(hdr_format, "") + elif trc and "HLG" in trc: + context["hdr"] = "HLG" + else: + context["hdr"] = "" + + frame_rate = float(primary_video_track.frame_rate) if primary_video_track.frame_rate else 0.0 + context["hfr"] = "HFR" if frame_rate > 30 else "" + + if primary_audio_track: + codec = primary_audio_track.format + channel_layout = primary_audio_track.channel_layout or primary_audio_track.channellayout_original + + if channel_layout: + channels = float(sum({"LFE": 0.1}.get(position.upper(), 1) for position in channel_layout.split(" "))) + else: + channel_count = primary_audio_track.channel_s or primary_audio_track.channels or 0 + channels = float(channel_count) + + features = primary_audio_track.format_additionalfeatures or "" + + context.update( + { + "audio": AUDIO_CODEC_MAP.get(codec, codec), + "audio_channels": f"{channels:.1f}", + "audio_full": f"{AUDIO_CODEC_MAP.get(codec, codec)}{channels:.1f}", + "atmos": "Atmos" if ("JOC" in features or primary_audio_track.joc) else "", + } + ) + + if unique_audio_languages == 2: + context["dual"] = "DUAL" + context["multi"] = "" + elif unique_audio_languages > 2: + context["dual"] = "" + context["multi"] = "MULTi" + else: + context["dual"] = "" + context["multi"] = "" + + lang_tag_rules = config.language_tags.get("rules") if config.language_tags else None + if lang_tag_rules and self.tracks: + from envied.core.utils.language_tags import evaluate_language_tag + + audio_langs = [a.language for a in self.tracks.audio] + sub_langs = [s.language for s in self.tracks.subtitles] + context["lang_tag"] = evaluate_language_tag(lang_tag_rules, audio_langs, sub_langs) + + return context + @abstractmethod def get_filename(self, media_info: MediaInfo, folder: bool = False, show_service: bool = True) -> str: """ diff --git a/packages/envied/src/envied/core/tracks/attachment.py b/packages/envied/src/envied/core/tracks/attachment.py index b82d6be..82da0ed 100644 --- a/packages/envied/src/envied/core/tracks/attachment.py +++ b/packages/envied/src/envied/core/tracks/attachment.py @@ -2,6 +2,7 @@ from __future__ import annotations import mimetypes import os +import re from pathlib import Path from typing import Optional, Union from urllib.parse import urlparse @@ -56,7 +57,8 @@ class Attachment: # Use provided name for the file if available if name: - file_name = f"{name.replace(' ', '_')}{os.path.splitext(file_name)[1]}" + safe_name = re.sub(r'[<>:"/\\|?*]', "", name).replace(" ", "_") + file_name = f"{safe_name}{os.path.splitext(file_name)[1]}" download_path = config.directories.temp / file_name diff --git a/packages/envied/src/envied/core/tracks/audio.py b/packages/envied/src/envied/core/tracks/audio.py index f58ebab..a682729 100644 --- a/packages/envied/src/envied/core/tracks/audio.py +++ b/packages/envied/src/envied/core/tracks/audio.py @@ -151,7 +151,7 @@ class Audio(Track): ), f"{self.bitrate // 1000} kb/s" if self.bitrate else None, self.get_track_name(), - self.edition, + ", ".join(self.edition) if self.edition else None, ], ) ) diff --git a/packages/envied/src/envied/core/tracks/hybrid.py b/packages/envied/src/envied/core/tracks/hybrid.py index 526a6c0..553548b 100644 --- a/packages/envied/src/envied/core/tracks/hybrid.py +++ b/packages/envied/src/envied/core/tracks/hybrid.py @@ -1,6 +1,8 @@ import json import logging import os +import random +import re import subprocess import sys from pathlib import Path @@ -8,14 +10,16 @@ from pathlib import Path from rich.padding import Padding from rich.rule import Rule -from envied.core.binaries import FFMPEG, DoviTool, HDR10PlusTool +from envied.core.binaries import FFMPEG, DoviTool, FFProbe, HDR10PlusTool from envied.core.config import config from envied.core.console import console +from envied.core.utilities import get_debug_logger class Hybrid: def __init__(self, videos, source) -> None: self.log = logging.getLogger("hybrid") + self.debug_logger = get_debug_logger() """ Takes the Dolby Vision and HDR10(+) streams out of the VideoTracks. @@ -41,6 +45,19 @@ class Hybrid: console.print(Padding(Rule(f"[rule.text]HDR10+DV Hybrid ({self.resolution})"), (1, 2))) + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_init", + message="Starting HDR10+DV hybrid processing", + context={ + "source": source, + "resolution": self.resolution, + "video_count": len(videos), + "video_ranges": [str(v.range) for v in videos], + }, + ) + for video in self.videos: if not video.path or not os.path.exists(video.path): raise ValueError(f"Video track {video.id} was not downloaded before injection.") @@ -50,18 +67,18 @@ class Hybrid: has_hdr10 = any(video.range == Video.Range.HDR10 for video in self.videos) has_hdr10p = any(video.range == Video.Range.HDR10P for video in self.videos) - if not has_hdr10: - raise ValueError("No HDR10 track available for hybrid processing.") + if not has_hdr10 and not has_hdr10p: + raise ValueError("No HDR10 or HDR10+ track available for hybrid processing.") # If we have HDR10+ but no DV, we can convert HDR10+ to DV if not has_dv and has_hdr10p: - self.log.info("✓ No DV track found, but HDR10+ is available. Will convert HDR10+ to DV.") + console.status("No DV track found, but HDR10+ is available. Will convert HDR10+ to DV.") self.hdr10plus_to_dv = True elif not has_dv: raise ValueError("No DV track available and no HDR10+ to convert.") if os.path.isfile(config.directories.temp / self.hevc_file): - self.log.info("✓ Already Injected") + console.status("Already Injected") return for video in videos: @@ -89,14 +106,34 @@ class Hybrid: self.extract_rpu(dv_video) if os.path.isfile(config.directories.temp / "RPU_UNT.bin"): self.rpu_file = "RPU_UNT.bin" - self.level_6() # Mode 3 conversion already done during extraction when not untouched elif os.path.isfile(config.directories.temp / "RPU.bin"): # RPU already extracted with mode 3 pass + # Edit L6 with actual luminance values from RPU, then L5 active area + self.level_6() + base_video = next( + (v for v in videos if v.range in (Video.Range.HDR10, Video.Range.HDR10P)), None + ) + if base_video and base_video.path: + self.level_5(base_video.path) + self.injecting() + if self.debug_logger: + self.debug_logger.log( + level="INFO", + operation="hybrid_complete", + message="Injection Completed", + context={ + "hdr_type": self.hdr_type, + "resolution": self.resolution, + "hdr10plus_to_dv": self.hdr10plus_to_dv, + "rpu_file": self.rpu_file, + "output_file": self.hevc_file, + }, + ) self.log.info("✓ Injection Completed") if self.source == ("itunes" or "appletvplus"): Path.unlink(config.directories.temp / "hdr10.mkv") @@ -104,6 +141,10 @@ class Hybrid: Path.unlink(config.directories.temp / "HDR10.hevc", missing_ok=True) Path.unlink(config.directories.temp / "DV.hevc", missing_ok=True) Path.unlink(config.directories.temp / f"{self.rpu_file}", missing_ok=True) + Path.unlink(config.directories.temp / "RPU_L6.bin", missing_ok=True) + Path.unlink(config.directories.temp / "RPU_L5.bin", missing_ok=True) + Path.unlink(config.directories.temp / "L5.json", missing_ok=True) + Path.unlink(config.directories.temp / "L6.json", missing_ok=True) def ffmpeg_simple(self, save_path, output): """Simple ffmpeg execution without progress tracking""" @@ -121,20 +162,41 @@ class Hybrid: stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) - return p.returncode + return p def extract_stream(self, save_path, type_): output = Path(config.directories.temp / f"{type_}.hevc") with console.status(f"Extracting {type_} stream...", spinner="dots"): - returncode = self.ffmpeg_simple(save_path, output) + result = self.ffmpeg_simple(save_path, output) - if returncode: + if result.returncode: output.unlink(missing_ok=True) + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_extract_stream", + message=f"Failed extracting {type_} stream", + context={ + "type": type_, + "input": str(save_path), + "output": str(output), + "returncode": result.returncode, + "stderr": (result.stderr or b"").decode(errors="replace"), + "stdout": (result.stdout or b"").decode(errors="replace"), + }, + ) self.log.error(f"x Failed extracting {type_} stream") sys.exit(1) - self.log.info(f"Extracted {type_} stream") + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_extract_stream", + message=f"Extracted {type_} stream", + context={"type": type_, "input": str(save_path), "output": str(output)}, + success=True, + ) def extract_rpu(self, video, untouched=False): if os.path.isfile(config.directories.temp / "RPU.bin") or os.path.isfile( @@ -161,58 +223,326 @@ class Hybrid: stderr=subprocess.PIPE, ) + rpu_name = "RPU" if not untouched else "RPU_UNT" if rpu_extraction.returncode: - Path.unlink(config.directories.temp / f"{'RPU' if not untouched else 'RPU_UNT'}.bin") + Path.unlink(config.directories.temp / f"{rpu_name}.bin") + stderr_text = rpu_extraction.stderr.decode(errors="replace") if rpu_extraction.stderr else "" + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_extract_rpu", + message=f"Failed extracting{' untouched ' if untouched else ' '}RPU", + context={ + "untouched": untouched, + "returncode": rpu_extraction.returncode, + "stderr": stderr_text, + "args": [str(a) for a in extraction_args], + }, + ) if b"MAX_PQ_LUMINANCE" in rpu_extraction.stderr: self.extract_rpu(video, untouched=True) elif b"Invalid PPS index" in rpu_extraction.stderr: raise ValueError("Dolby Vision VideoTrack seems to be corrupt") else: raise ValueError(f"Failed extracting{' untouched ' if untouched else ' '}RPU from Dolby Vision stream") + elif self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_extract_rpu", + message=f"Extracted{' untouched ' if untouched else ' '}RPU from Dolby Vision stream", + context={"untouched": untouched, "output": f"{rpu_name}.bin"}, + success=True, + ) - self.log.info(f"Extracted{' untouched ' if untouched else ' '}RPU from Dolby Vision stream") + def level_5(self, input_video): + """Generate Level 5 active area metadata via crop detection on the HDR10 stream. - def level_6(self): - """Edit RPU Level 6 values""" - with open(config.directories.temp / "L6.json", "w+") as level6_file: - level6 = { - "cm_version": "V29", - "length": 0, - "level6": { - "max_display_mastering_luminance": 1000, - "min_display_mastering_luminance": 1, - "max_content_light_level": 0, - "max_frame_average_light_level": 0, - }, - } + This resolves mismatches where DV has no black bars but HDR10 does (or vice versa) + by telling the display the correct active area. + """ + if os.path.isfile(config.directories.temp / "RPU_L5.bin"): + return - json.dump(level6, level6_file, indent=3) + ffprobe_bin = str(FFProbe) if FFProbe else "ffprobe" + ffmpeg_bin = str(FFMPEG) if FFMPEG else "ffmpeg" - if not os.path.isfile(config.directories.temp / "RPU_L6.bin"): - with console.status("Editing RPU Level 6 values...", spinner="dots"): - level6 = subprocess.run( + # Get video duration for random sampling + with console.status("Detecting active area (crop detection)...", spinner="dots"): + result_duration = subprocess.run( + [ffprobe_bin, "-v", "error", "-show_entries", "format=duration", "-of", "json", str(input_video)], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + + if result_duration.returncode != 0: + if self.debug_logger: + self.debug_logger.log( + level="WARNING", + operation="hybrid_level5", + message="Could not probe video duration", + context={"returncode": result_duration.returncode, "stderr": (result_duration.stderr or "")}, + ) + self.log.warning("Could not probe video duration, skipping L5 crop detection") + return + + duration_info = json.loads(result_duration.stdout) + duration = float(duration_info["format"]["duration"]) + + # Get video resolution for proper border calculation + result_streams = subprocess.run( + [ + ffprobe_bin, + "-v", + "error", + "-select_streams", + "v:0", + "-show_entries", + "stream=width,height", + "-of", + "json", + str(input_video), + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) + + if result_streams.returncode != 0: + if self.debug_logger: + self.debug_logger.log( + level="WARNING", + operation="hybrid_level5", + message="Could not probe video resolution", + context={"returncode": result_streams.returncode, "stderr": (result_streams.stderr or "")}, + ) + self.log.warning("Could not probe video resolution, skipping L5 crop detection") + return + + stream_info = json.loads(result_streams.stdout) + original_width = int(stream_info["streams"][0]["width"]) + original_height = int(stream_info["streams"][0]["height"]) + + # Sample 10 random timestamps and run cropdetect on each + random_times = sorted(random.uniform(0, duration) for _ in range(10)) + + crop_results = [] + for t in random_times: + result_cropdetect = subprocess.run( [ - str(DoviTool), - "editor", + ffmpeg_bin, + "-y", + "-nostdin", + "-loglevel", + "info", + "-ss", + f"{t:.2f}", "-i", - config.directories.temp / self.rpu_file, - "-j", - config.directories.temp / "L6.json", - "-o", - config.directories.temp / "RPU_L6.bin", + str(input_video), + "-vf", + "cropdetect=round=2", + "-vframes", + "10", + "-f", + "null", + "-", ], stdout=subprocess.PIPE, stderr=subprocess.PIPE, + text=True, ) - if level6.returncode: - Path.unlink(config.directories.temp / "RPU_L6.bin") - raise ValueError("Failed editing RPU Level 6 values") + # cropdetect outputs crop=w:h:x:y + crop_match = re.search( + r"crop=(\d+):(\d+):(\d+):(\d+)", + (result_cropdetect.stdout or "") + (result_cropdetect.stderr or ""), + ) + if crop_match: + w, h = int(crop_match.group(1)), int(crop_match.group(2)) + x, y = int(crop_match.group(3)), int(crop_match.group(4)) + # Calculate actual border sizes from crop geometry + left = x + top = y + right = original_width - w - x + bottom = original_height - h - y + crop_results.append((left, top, right, bottom)) - self.log.info("Edited RPU Level 6 values") + if not crop_results: + if self.debug_logger: + self.debug_logger.log( + level="WARNING", + operation="hybrid_level5", + message="No crop data detected, skipping L5", + context={"samples": len(random_times)}, + ) + self.log.warning("No crop data detected, skipping L5") + return - # Update rpu_file to use the edited version - self.rpu_file = "RPU_L6.bin" + # Find the most common crop values + crop_counts = {} + for crop in crop_results: + crop_counts[crop] = crop_counts.get(crop, 0) + 1 + most_common = max(crop_counts, key=crop_counts.get) + left, top, right, bottom = most_common + + # If all borders are 0 there's nothing to correct + if left == 0 and top == 0 and right == 0 and bottom == 0: + return + + l5_json = { + "active_area": { + "crop": False, + "presets": [{"id": 0, "left": left, "right": right, "top": top, "bottom": bottom}], + "edits": {"all": 0}, + } + } + + l5_path = config.directories.temp / "L5.json" + with open(l5_path, "w") as f: + json.dump(l5_json, f, indent=4) + + with console.status("Editing RPU Level 5 active area...", spinner="dots"): + result = subprocess.run( + [ + str(DoviTool), + "editor", + "-i", + str(config.directories.temp / self.rpu_file), + "-j", + str(l5_path), + "-o", + str(config.directories.temp / "RPU_L5.bin"), + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if result.returncode: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_level5", + message="Failed editing RPU Level 5 values", + context={"returncode": result.returncode, "stderr": (result.stderr or b"").decode(errors="replace")}, + ) + Path.unlink(config.directories.temp / "RPU_L5.bin", missing_ok=True) + raise ValueError("Failed editing RPU Level 5 values") + + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_level5", + message="Edited RPU Level 5 active area", + context={"crop": {"left": left, "right": right, "top": top, "bottom": bottom}, "samples": len(crop_results)}, + success=True, + ) + self.rpu_file = "RPU_L5.bin" + + def level_6(self): + """Edit RPU Level 6 values using actual luminance data from the RPU.""" + if os.path.isfile(config.directories.temp / "RPU_L6.bin"): + return + + with console.status("Reading RPU luminance metadata...", spinner="dots"): + result = subprocess.run( + [str(DoviTool), "info", "-i", str(config.directories.temp / self.rpu_file), "-s"], + capture_output=True, + text=True, + ) + + if result.returncode != 0: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_level6", + message="Failed reading RPU metadata for Level 6 values", + context={"returncode": result.returncode, "stderr": (result.stderr or "")}, + ) + raise ValueError("Failed reading RPU metadata for Level 6 values") + + max_cll = None + max_fall = None + max_mdl = None + min_mdl = None + + for line in result.stdout.splitlines(): + if "RPU content light level (L1):" in line: + parts = line.split("MaxCLL:")[1].split(",") + max_cll = int(float(parts[0].strip().split()[0])) + if len(parts) > 1 and "MaxFALL:" in parts[1]: + max_fall = int(float(parts[1].split("MaxFALL:")[1].strip().split()[0])) + elif "RPU mastering display:" in line: + mastering = line.split(":", 1)[1].strip() + min_lum, max_lum = mastering.split("/")[0], mastering.split("/")[1].split(" ")[0] + min_mdl = int(float(min_lum) * 10000) + max_mdl = int(float(max_lum)) + + if any(v is None for v in (max_cll, max_fall, max_mdl, min_mdl)): + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_level6", + message="Could not extract Level 6 luminance data from RPU", + context={"max_cll": max_cll, "max_fall": max_fall, "max_mdl": max_mdl, "min_mdl": min_mdl}, + ) + raise ValueError("Could not extract Level 6 luminance data from RPU") + + level6_data = { + "level6": { + "remove_cmv4": False, + "remove_mapping": False, + "max_display_mastering_luminance": max_mdl, + "min_display_mastering_luminance": min_mdl, + "max_content_light_level": max_cll, + "max_frame_average_light_level": max_fall, + } + } + + l6_path = config.directories.temp / "L6.json" + with open(l6_path, "w") as f: + json.dump(level6_data, f, indent=4) + + with console.status("Editing RPU Level 6 values...", spinner="dots"): + result = subprocess.run( + [ + str(DoviTool), + "editor", + "-i", + str(config.directories.temp / self.rpu_file), + "-j", + str(l6_path), + "-o", + str(config.directories.temp / "RPU_L6.bin"), + ], + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + + if result.returncode: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_level6", + message="Failed editing RPU Level 6 values", + context={"returncode": result.returncode, "stderr": (result.stderr or b"").decode(errors="replace")}, + ) + Path.unlink(config.directories.temp / "RPU_L6.bin", missing_ok=True) + raise ValueError("Failed editing RPU Level 6 values") + + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_level6", + message="Edited RPU Level 6 luminance values", + context={ + "max_cll": max_cll, + "max_fall": max_fall, + "max_mdl": max_mdl, + "min_mdl": min_mdl, + }, + success=True, + ) + self.rpu_file = "RPU_L6.bin" def injecting(self): if os.path.isfile(config.directories.temp / self.hevc_file): @@ -228,12 +558,6 @@ class Hybrid: config.directories.temp / self.rpu_file, ] - # If we converted from HDR10+, optionally remove HDR10+ metadata during injection - # Default to removing HDR10+ metadata since we're converting to DV - if self.hdr10plus_to_dv: - inject_cmd.append("--drop-hdr10plus") - self.log.info(" - Removing HDR10+ metadata during injection") - inject_cmd.extend(["-o", config.directories.temp / self.hevc_file]) inject = subprocess.run( @@ -243,10 +567,29 @@ class Hybrid: ) if inject.returncode: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_inject_rpu", + message="Failed injecting Dolby Vision metadata into HDR10 stream", + context={ + "returncode": inject.returncode, + "stderr": (inject.stderr or b"").decode(errors="replace"), + "stdout": (inject.stdout or b"").decode(errors="replace"), + "cmd": [str(a) for a in inject_cmd], + }, + ) Path.unlink(config.directories.temp / self.hevc_file) raise ValueError("Failed injecting Dolby Vision metadata into HDR10 stream") - self.log.info(f"Injected Dolby Vision metadata into {self.hdr_type} stream") + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_inject_rpu", + message=f"Injected Dolby Vision metadata into {self.hdr_type} stream", + context={"hdr_type": self.hdr_type, "rpu_file": self.rpu_file, "output": self.hevc_file, "drop_hdr10plus": self.hdr10plus_to_dv}, + success=True, + ) def extract_hdr10plus(self, _video): """Extract HDR10+ metadata from the video stream""" @@ -271,13 +614,39 @@ class Hybrid: ) if extraction.returncode: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_extract_hdr10plus", + message="Failed extracting HDR10+ metadata", + context={ + "returncode": extraction.returncode, + "stderr": (extraction.stderr or b"").decode(errors="replace"), + "stdout": (extraction.stdout or b"").decode(errors="replace"), + }, + ) raise ValueError("Failed extracting HDR10+ metadata") # Check if the extracted file has content - if os.path.getsize(config.directories.temp / self.hdr10plus_file) == 0: + file_size = os.path.getsize(config.directories.temp / self.hdr10plus_file) + if file_size == 0: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_extract_hdr10plus", + message="No HDR10+ metadata found in the stream", + context={"file_size": 0}, + ) raise ValueError("No HDR10+ metadata found in the stream") - self.log.info("Extracted HDR10+ metadata") + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_extract_hdr10plus", + message="Extracted HDR10+ metadata", + context={"output": self.hdr10plus_file, "file_size": file_size}, + success=True, + ) def convert_hdr10plus_to_dv(self): """Convert HDR10+ metadata to Dolby Vision RPU""" @@ -317,10 +686,26 @@ class Hybrid: ) if conversion.returncode: + if self.debug_logger: + self.debug_logger.log( + level="ERROR", + operation="hybrid_convert_hdr10plus", + message="Failed converting HDR10+ to Dolby Vision", + context={ + "returncode": conversion.returncode, + "stderr": (conversion.stderr or b"").decode(errors="replace"), + "stdout": (conversion.stdout or b"").decode(errors="replace"), + }, + ) raise ValueError("Failed converting HDR10+ to Dolby Vision") - self.log.info("Converted HDR10+ metadata to Dolby Vision") - self.log.info("✓ HDR10+ successfully converted to Dolby Vision Profile 8") + if self.debug_logger: + self.debug_logger.log( + level="DEBUG", + operation="hybrid_convert_hdr10plus", + message="Converted HDR10+ metadata to Dolby Vision Profile 8", + success=True, + ) # Clean up temporary files Path.unlink(config.directories.temp / "extra.json") diff --git a/packages/envied/src/envied/core/tracks/track.py b/packages/envied/src/envied/core/tracks/track.py index f93917d..b0bd5eb 100644 --- a/packages/envied/src/envied/core/tracks/track.py +++ b/packages/envied/src/envied/core/tracks/track.py @@ -24,7 +24,7 @@ from envied.core.constants import DOWNLOAD_CANCELLED, DOWNLOAD_LICENCE_ONLY from envied.core.downloaders import aria2c, curl_impersonate, n_m3u8dl_re, requests from envied.core.drm import DRM_T, PlayReady, Widevine from envied.core.events import events -from envied.core.utilities import get_boxes, get_extension, try_ensure_utf8 +from envied.core.utilities import get_boxes, try_ensure_utf8 from envied.core.utils.subprocess import ffprobe @@ -66,8 +66,8 @@ class Track: raise TypeError(f"Expected name to be a {str}, not {type(name)}") if not isinstance(id_, (str, type(None))): raise TypeError(f"Expected id_ to be a {str}, not {type(id_)}") - if not isinstance(edition, (str, type(None))): - raise TypeError(f"Expected edition to be a {str}, not {type(edition)}") + if not isinstance(edition, (str, list, type(None))): + raise TypeError(f"Expected edition to be a {str}, {list}, or None, not {type(edition)}") if not isinstance(downloader, (Callable, type(None))): raise TypeError(f"Expected downloader to be a {Callable}, not {type(downloader)}") if not isinstance(downloader_args, (dict, type(None))): @@ -103,7 +103,7 @@ class Track: self.needs_repack = needs_repack self.name = name self.drm = drm - self.edition: str = edition + self.edition: list[str] = [edition] if isinstance(edition, str) else (edition or []) self.downloader = downloader self.downloader_args = downloader_args self.from_file = from_file @@ -210,23 +210,12 @@ class Track: save_path = config.directories.temp / f"{track_type}_{self.id}.mp4" if track_type == "Subtitle": save_path = save_path.with_suffix(f".{self.codec.extension}") - # n_m3u8dl_re doesn't support directly downloading subtitles from URLs - # or when the subtitle has a direct file extension - if self.downloader.__name__ == "n_m3u8dl_re" and ( - self.descriptor == self.Descriptor.URL - or get_extension(self.url) - in { - ".srt", - ".vtt", - ".ttml", - ".ssa", - ".ass", - ".stpp", - ".wvtt", - ".xml", - } - ): - self.downloader = requests + + if self.downloader.__name__ == "n_m3u8dl_re" and ( + self.descriptor == self.Descriptor.URL + or track_type in ("Subtitle", "Attachment") + ): + self.downloader = requests if self.descriptor != self.Descriptor.URL: save_dir = save_path.with_name(save_path.name + "_segments") diff --git a/packages/envied/src/envied/core/tracks/tracks.py b/packages/envied/src/envied/core/tracks/tracks.py index d42b0c3..5853a96 100644 --- a/packages/envied/src/envied/core/tracks/tracks.py +++ b/packages/envied/src/envied/core/tracks/tracks.py @@ -103,53 +103,78 @@ class Tracks: tree = Tree("", hide_root=True) for track_type in self.TRACK_ORDER_MAP: tracks = list(x for x in all_tracks if isinstance(x, track_type)) - if not tracks: - continue - num_tracks = len(tracks) - track_type_plural = track_type.__name__ + ("s" if track_type != Audio and num_tracks != 1 else "") - tracks_tree = tree.add(f"[repr.number]{num_tracks}[/] {track_type_plural}") - for track in tracks: - if add_progress and track_type not in (Chapter, Attachment): - progress = Progress( - SpinnerColumn(finished_text=""), - BarColumn(), - "•", - TimeRemainingColumn(compact=True, elapsed_when_finished=True), - "•", - TextColumn("[progress.data.speed]{task.fields[downloaded]}"), - console=console, - speed_estimate_period=10, + if tracks: + num_tracks = len(tracks) + track_type_plural = track_type.__name__ + ("s" if track_type != Audio and num_tracks != 1 else "") + tracks_tree = tree.add(f"[repr.number]{num_tracks}[/] {track_type_plural}") + for track in tracks: + if add_progress and track_type not in (Chapter, Attachment): + progress = Progress( + SpinnerColumn(finished_text=""), + BarColumn(), + "•", + TimeRemainingColumn(compact=True, elapsed_when_finished=True), + "•", + TextColumn("[progress.data.speed]{task.fields[downloaded]}"), + console=console, + speed_estimate_period=10, + ) + task = progress.add_task("", downloaded="-") + state = {"total": 100.0} + + def update_track_progress( + task_id: int = task, + _state: dict[str, float] = state, + _progress: Progress = progress, + **kwargs, + ) -> None: + """ + Ensure terminal status states render as a fully completed bar. + + Some downloaders can report completed slightly below total + before emitting the final "Downloaded" state. + """ + if "total" in kwargs and kwargs["total"] is not None: + _state["total"] = kwargs["total"] + + downloaded_state = kwargs.get("downloaded") + if downloaded_state in {"Downloaded", "Decrypted", "[yellow]SKIPPED"}: + kwargs["completed"] = _state["total"] + _progress.update(task_id=task_id, **kwargs) + + progress_callables.append(update_track_progress) + track_table = Table.grid() + track_table.add_row(str(track)[6:], style="text2") + track_table.add_row(progress) + tracks_tree.add(track_table) + else: + tracks_tree.add(str(track)[6:], style="text2") + + # Show Closed Captions right after Subtitles (even if no subtitle tracks exist) + if track_type is Subtitle: + seen_cc: set[str] = set() + unique_cc: list[str] = [] + for video in (x for x in all_tracks if isinstance(x, Video)): + for cc in getattr(video, "closed_captions", []): + lang = cc.get("language", "und") + name = cc.get("name", "") + instream_id = cc.get("instream_id", "") + key = f"{lang}|{instream_id}" + if key in seen_cc: + continue + seen_cc.add(key) + parts = [f"[CC] | {lang}"] + if name: + parts.append(name) + if instream_id: + parts.append(instream_id) + unique_cc.append(" | ".join(parts)) + if unique_cc: + cc_tree = tree.add( + f"[repr.number]{len(unique_cc)}[/] Closed Caption{'s' if len(unique_cc) != 1 else ''}" ) - task = progress.add_task("", downloaded="-") - state = {"total": 100.0} - - def update_track_progress( - task_id: int = task, - _state: dict[str, float] = state, - _progress: Progress = progress, - **kwargs, - ) -> None: - """ - Ensure terminal status states render as a fully completed bar. - - Some downloaders can report completed slightly below total - before emitting the final "Downloaded" state. - """ - if "total" in kwargs and kwargs["total"] is not None: - _state["total"] = kwargs["total"] - - downloaded_state = kwargs.get("downloaded") - if downloaded_state in {"Downloaded", "Decrypted", "[yellow]SKIPPED"}: - kwargs["completed"] = _state["total"] - _progress.update(task_id=task_id, **kwargs) - - progress_callables.append(update_track_progress) - track_table = Table.grid() - track_table.add_row(str(track)[6:], style="text2") - track_table.add_row(progress) - tracks_tree.add(track_table) - else: - tracks_tree.add(str(track)[6:], style="text2") + for cc_str in unique_cc: + cc_tree.add(cc_str, style="text2") return tree, progress_callables @@ -278,23 +303,30 @@ class Tracks: self.subtitles = list(filter(x, self.subtitles)) def select_hybrid(self, tracks, quality): - hdr10_tracks = [ - v - for v in tracks - if v.range == Video.Range.HDR10 and (v.height in quality or int(v.width * 9 / 16) in quality) - ] - hdr10 = [] + # Prefer HDR10+ over HDR10 as the base layer (preserves dynamic metadata) + base_ranges = (Video.Range.HDR10P, Video.Range.HDR10) + base_tracks = [] + for range_type in base_ranges: + base_tracks = [ + v + for v in tracks + if v.range == range_type and (v.height in quality or int(v.width * 9 / 16) in quality) + ] + if base_tracks: + break + + base_selected = [] for res in quality: - candidates = [v for v in hdr10_tracks if v.height == res or int(v.width * 9 / 16) == res] + candidates = [v for v in base_tracks if v.height == res or int(v.width * 9 / 16) == res] if candidates: - best = max(candidates, key=lambda v: v.bitrate) # assumes .bitrate exists - hdr10.append(best) + best = max(candidates, key=lambda v: v.bitrate) + base_selected.append(best) dv_tracks = [v for v in tracks if v.range == Video.Range.DV] lowest_dv = min(dv_tracks, key=lambda v: v.height) if dv_tracks else None def select(x): - if x in hdr10: + if x in base_selected: return True if lowest_dv and x is lowest_dv: return True diff --git a/packages/envied/src/envied/core/tracks/video.py b/packages/envied/src/envied/core/tracks/video.py index 0e3bc6a..17356b9 100644 --- a/packages/envied/src/envied/core/tracks/video.py +++ b/packages/envied/src/envied/core/tracks/video.py @@ -200,6 +200,7 @@ class Video(Track): height: Optional[int] = None, fps: Optional[Union[str, int, float]] = None, scan_type: Optional[Video.ScanType] = None, + closed_captions: Optional[list[dict[str, Any]]] = None, **kwargs: Any, ) -> None: """ @@ -264,6 +265,7 @@ class Video(Track): raise ValueError("Expected fps to be a number, float, or a string as numerator/denominator form, " + str(e)) self.scan_type = scan_type + self.closed_captions: list[dict[str, Any]] = closed_captions or [] self.needs_duration_fix = False def __str__(self) -> str: @@ -291,7 +293,7 @@ class Video(Track): ], ) ), - self.edition, + ", ".join(self.edition) if self.edition else None, ], ) ) @@ -346,22 +348,27 @@ class Video(Track): if not binaries.CCExtractor: raise EnvironmentError("ccextractor executable was not found.") - # ccextractor often fails in weird ways unless we repack - self.repackage() - out_path = Path(out_path) - try: - subprocess.run( - [binaries.CCExtractor, "-trim", "-nobom", "-noru", "-ru1", "-o", out_path, self.path], - check=True, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) - except subprocess.CalledProcessError as e: - out_path.unlink(missing_ok=True) - if not e.returncode == 10: # No captions found - raise + def _run_ccextractor() -> bool: + try: + subprocess.run( + [binaries.CCExtractor, "-trim", "-nobom", "-noru", "-ru1", "-o", out_path, self.path], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + except subprocess.CalledProcessError as e: + out_path.unlink(missing_ok=True) + if e.returncode != 10: # 10 = No captions found + raise + return out_path.exists() + + # Try on the original file first (preserves container-level CC data like c608 boxes), + # then fall back to repacked file (ccextractor can fail on some container formats). + if not _run_ccextractor(): + self.repackage() + _run_ccextractor() if out_path.exists(): cc_track = Subtitle( diff --git a/packages/envied/src/envied/core/utilities.py b/packages/envied/src/envied/core/utilities.py index e727c4e..83c61c1 100644 --- a/packages/envied/src/envied/core/utilities.py +++ b/packages/envied/src/envied/core/utilities.py @@ -136,7 +136,7 @@ def sanitize_filename(filename: str, spacer: str = ".") -> str: if spacer == ".": filename = re.sub(r" - ", spacer, filename) # title separators to spacer (avoids .-. pattern) filename = re.sub(r"[:; ]", spacer, filename) # structural chars to (spacer) - filename = re.sub(r"[\\*!?¿,'\"" "()<>|$#~]", "", filename) # not filename safe chars + filename = re.sub(r"[\\*!?¿,'\"" "<>|$#~]", "", filename) # not filename safe chars filename = re.sub(rf"[{spacer}]{{2,}}", spacer, filename) # remove extra neighbouring (spacer)s return filename diff --git a/packages/envied/src/envied/core/utils/animeapi.py b/packages/envied/src/envied/core/utils/animeapi.py new file mode 100644 index 0000000..d9d5de9 --- /dev/null +++ b/packages/envied/src/envied/core/utils/animeapi.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +import logging +from typing import Optional + +from envied.core.providers._base import ExternalIds + +log = logging.getLogger("ANIMEAPI") + +PLATFORM_MAP: dict[str, str] = { + "mal": "myanimelist", + "anilist": "anilist", + "kitsu": "kitsu", + "tmdb": "themoviedb", + "trakt": "trakt", + "tvdb": "thetvdb", +} + + +def resolve_animeapi(value: str) -> tuple[Optional[str], ExternalIds]: + """Resolve an anime database ID via AnimeAPI to a title and external IDs. + + Accepts formats like 'mal:12345', 'anilist:98765', or just '12345' (defaults to MAL). + Returns (anime_title, ExternalIds) with any TMDB/IMDB/TVDB IDs found. + """ + import animeapi + + platform_str, id_str = _parse_animeapi_value(value) + + platform_enum = _get_platform(platform_str) + if platform_enum is None: + log.warning("Unknown AnimeAPI platform: %s (supported: %s)", platform_str, ", ".join(PLATFORM_MAP)) + return None, ExternalIds() + + log.info("Resolving AnimeAPI %s:%s", platform_str, id_str) + + try: + with animeapi.AnimeAPI() as api: + relation = api.get_anime_relations(id_str, platform_enum) + except Exception as exc: + log.warning("AnimeAPI lookup failed for %s:%s: %s", platform_str, id_str, exc) + return None, ExternalIds() + + title = getattr(relation, "title", None) + + tmdb_id = getattr(relation, "themoviedb", None) + tmdb_type = getattr(relation, "themoviedb_type", None) + imdb_id = getattr(relation, "imdb", None) + tvdb_id = getattr(relation, "thetvdb", None) + + tmdb_kind: Optional[str] = None + if tmdb_type is not None: + tmdb_kind = tmdb_type.value if hasattr(tmdb_type, "value") else str(tmdb_type).lower() + if tmdb_kind not in ("movie", "tv"): + tmdb_kind = "tv" + + external_ids = ExternalIds( + tmdb_id=int(tmdb_id) if tmdb_id is not None else None, + tmdb_kind=tmdb_kind, + imdb_id=str(imdb_id) if imdb_id is not None else None, + tvdb_id=int(tvdb_id) if tvdb_id is not None else None, + ) + + log.info( + "AnimeAPI resolved: title=%r, tmdb=%s, imdb=%s, tvdb=%s", + title, + external_ids.tmdb_id, + external_ids.imdb_id, + external_ids.tvdb_id, + ) + + return title, external_ids + + +def _parse_animeapi_value(value: str) -> tuple[str, str]: + """Parse 'platform:id' format. Defaults to 'mal' if no prefix.""" + if ":" in value: + platform, _, id_str = value.partition(":") + return platform.lower().strip(), id_str.strip() + return "mal", value.strip() + + +def _get_platform(platform_str: str) -> object | None: + """Map a platform string to an animeapi.Platform enum value.""" + import animeapi + + canonical = PLATFORM_MAP.get(platform_str) + if canonical is None: + return None + + platform_name = canonical.upper() + return getattr(animeapi.Platform, platform_name, None) diff --git a/packages/envied/src/envied/core/utils/click_types.py b/packages/envied/src/envied/core/utils/click_types.py index d53c50e..4ac0dda 100644 --- a/packages/envied/src/envied/core/utils/click_types.py +++ b/packages/envied/src/envied/core/utils/click_types.py @@ -44,6 +44,33 @@ class VideoCodecChoice(click.Choice): self.fail(f"'{value}' is not a valid video codec", param, ctx) +class MultipleVideoCodecChoice(VideoCodecChoice): + """ + A multiple-value variant of VideoCodecChoice that accepts comma-separated codecs. + + Accepts both enum names and values, e.g.: ``-v hevc,avc`` or ``-v H.264,H.265`` + """ + + name = "multiple_video_codec_choice" + + def convert( + self, value: Any, param: Optional[click.Parameter] = None, ctx: Optional[click.Context] = None + ) -> list[Any]: + if not value: + return [] + if isinstance(value, list): + values = value + elif isinstance(value, str): + values = value.split(",") + else: + self.fail(f"{value!r} is not a supported value.", param, ctx) + + chosen_values: list[Any] = [] + for v in values: + chosen_values.append(super().convert(v.strip(), param, ctx)) + return chosen_values + + class SubtitleCodecChoice(click.Choice): """ A custom Choice type for subtitle codecs that accepts both enum names, values, and common aliases. diff --git a/packages/envied/src/envied/core/utils/language_tags.py b/packages/envied/src/envied/core/utils/language_tags.py new file mode 100644 index 0000000..d827273 --- /dev/null +++ b/packages/envied/src/envied/core/utils/language_tags.py @@ -0,0 +1,79 @@ +"""Language tag rule engine for output filename templates.""" + +from __future__ import annotations + +import logging +from typing import Any, Sequence + +from langcodes import Language + +from envied.core.utilities import is_close_match + +log = logging.getLogger(__name__) + + +def evaluate_language_tag( + rules: list[dict[str, Any]], + audio_languages: Sequence[Language], + subtitle_languages: Sequence[Language], +) -> str: + """Evaluate language tag rules against selected tracks. + + Rules are evaluated in order; the first matching rule's tag is returned. + Returns empty string if no rules match. + + Args: + rules: List of rule dicts from config, each with conditions and a ``tag``. + audio_languages: Languages of the selected audio tracks. + subtitle_languages: Languages of the selected subtitle tracks. + + Returns: + The tag string from the first matching rule, or ``""`` if none match. + """ + for rule in rules: + tag = rule.get("tag") + if not tag: + log.warning("Language tag rule missing 'tag' field, skipping: %s", rule) + continue + + if _rule_matches(rule, audio_languages, subtitle_languages): + log.debug("Language tag rule matched: %s -> %s", rule, tag) + return str(tag) + + return "" + + +def _rule_matches( + rule: dict[str, Any], + audio_languages: Sequence[Language], + subtitle_languages: Sequence[Language], +) -> bool: + """Check if all conditions in a rule are satisfied.""" + has_condition = False + + audio_lang = rule.get("audio") + if audio_lang is not None: + has_condition = True + if not is_close_match(audio_lang, list(audio_languages)): + return False + + subs_contain = rule.get("subs_contain") + if subs_contain is not None: + has_condition = True + if not is_close_match(subs_contain, list(subtitle_languages)): + return False + + subs_contain_all = rule.get("subs_contain_all") + if subs_contain_all is not None: + has_condition = True + if not isinstance(subs_contain_all, list): + subs_contain_all = [subs_contain_all] + for lang in subs_contain_all: + if not is_close_match(lang, list(subtitle_languages)): + return False + + if not has_condition: + log.warning("Language tag rule has no conditions, skipping: %s", rule) + return False + + return True diff --git a/packages/envied/src/envied/core/utils/selector.py b/packages/envied/src/envied/core/utils/selector.py index 44548f4..50fb6e9 100644 --- a/packages/envied/src/envied/core/utils/selector.py +++ b/packages/envied/src/envied/core/utils/selector.py @@ -1,21 +1,25 @@ -import click import sys + +import click from rich.console import Group from rich.live import Live from rich.padding import Padding from rich.table import Table from rich.text import Text + from envied.core.console import console IS_WINDOWS = sys.platform == "win32" if IS_WINDOWS: import msvcrt + class Selector: """ A custom interactive selector class using the Rich library. - Allows for multi-selection of items with pagination. + Allows for multi-selection of items with pagination and collapsible headers. """ + def __init__( self, options: list[str], @@ -24,7 +28,7 @@ class Selector: page_size: int = 8, minimal_count: int = 0, dependencies: dict[int, list[int]] = None, - prefixes: list[str] = None + collapse_on_start: bool = False, ): """ Initialize the Selector. @@ -36,6 +40,7 @@ class Selector: page_size: Number of items to show per page. minimal_count: Minimum number of items that must be selected. dependencies: Dictionary mapping parent index to list of child indices. + collapse_on_start: If True, child items are hidden initially. """ self.options = options self.cursor_style = cursor_style @@ -43,81 +48,164 @@ class Selector: self.page_size = page_size self.minimal_count = minimal_count self.dependencies = dependencies or {} - + + # Parent-Child mapping for quick lookup + self.child_to_parent = {} + for parent, children in self.dependencies.items(): + for child in children: + self.child_to_parent[child] = parent + self.cursor_index = 0 self.selected_indices = set() self.scroll_offset = 0 + # Tree view state + self.expanded_headers = set() + if not collapse_on_start: + # Expand all by default + self.expanded_headers.update(self.dependencies.keys()) + + def get_visible_indices(self) -> list[int]: + """ + Returns a sorted list of indices that should be currently visible. + A child is visible only if its parent is in self.expanded_headers. + """ + visible = [] + for idx in range(len(self.options)): + # If it's a child, check if parent is expanded + if idx in self.child_to_parent: + parent = self.child_to_parent[idx] + if parent in self.expanded_headers: + visible.append(idx) + else: + # It's a header or independent item, always visible + visible.append(idx) + return visible + def get_renderable(self): """ Constructs and returns the renderable object (Table + Info) for the current state. """ + visible_indices = self.get_visible_indices() + + # Adjust scroll offset to ensure cursor is visible + if self.cursor_index not in visible_indices: + # Fallback if cursor got hidden (should be handled in move, but safety check) + self.cursor_index = visible_indices[0] if visible_indices else 0 + + try: + cursor_visual_pos = visible_indices.index(self.cursor_index) + except ValueError: + cursor_visual_pos = 0 + self.cursor_index = visible_indices[0] + + # Calculate logical page start/end based on VISIBLE items + start_idx = self.scroll_offset + end_idx = start_idx + self.page_size + + # Dynamic scroll adjustment + if cursor_visual_pos < start_idx: + self.scroll_offset = cursor_visual_pos + elif cursor_visual_pos >= end_idx: + self.scroll_offset = cursor_visual_pos - self.page_size + 1 + + # Re-calc render range + render_indices = visible_indices[self.scroll_offset : self.scroll_offset + self.page_size] + table = Table(show_header=False, show_edge=False, box=None, pad_edge=False, padding=(0, 1, 0, 0)) table.add_column("Indicator", justify="right", no_wrap=True) table.add_column("Option", overflow="ellipsis", no_wrap=True) - for i in range(self.page_size): - idx = self.scroll_offset + i - - if idx < len(self.options): - option = self.options[idx] - is_cursor = (idx == self.cursor_index) - is_selected = (idx in self.selected_indices) + for idx in render_indices: + option = self.options[idx] + is_cursor = idx == self.cursor_index + is_selected = idx in self.selected_indices - symbol = "[X]" if is_selected else "[ ]" - style = self.cursor_style if is_cursor else self.text_style - indicator_text = Text(f"{symbol}", style=style) + symbol = "[X]" if is_selected else "[ ]" + style = self.cursor_style if is_cursor else self.text_style + indicator_text = Text(f"{symbol}", style=style) - content_text = Text.from_markup(option) - content_text.style = style + content_text = Text.from_markup(f"{option}") + content_text.style = style - table.add_row(indicator_text, content_text) - else: - table.add_row(Text(" "), Text(" ")) + table.add_row(indicator_text, content_text) - total_pages = (len(self.options) + self.page_size - 1) // self.page_size + # Fill empty rows to maintain height + rows_rendered = len(render_indices) + for _ in range(self.page_size - rows_rendered): + table.add_row(Text(" "), Text(" ")) + + total_visible = len(visible_indices) + total_pages = (total_visible + self.page_size - 1) // self.page_size + if total_pages == 0: + total_pages = 1 current_page = (self.scroll_offset // self.page_size) + 1 - - info_text = Text( - f"\n[Space]: Toggle [a]: All [←/→]: Page [Enter]: Confirm (Page {current_page}/{total_pages})", - style="gray" - ) - + + if self.dependencies: + info_text = Text( + f"\n[Space]: Toggle [a]: All [e]: Fold/Unfold [E]: All Fold/Unfold\n[Enter]: Confirm [↑/↓]: Move [←/→]: Page (Page {current_page}/{total_pages})", + style="gray", + ) + else: + info_text = Text( + f"\n[Space]: Toggle [a]: All [←/→]: Page [Enter]: Confirm (Page {current_page}/{total_pages})", + style="gray", + ) + return Padding(Group(table, info_text), (0, 5)) def move_cursor(self, delta: int): """ - Moves the cursor up or down by the specified delta. - Updates the scroll offset if the cursor moves out of the current view. + Moves the cursor up or down through VISIBLE items only. """ - self.cursor_index = (self.cursor_index + delta) % len(self.options) - new_page_idx = self.cursor_index // self.page_size - self.scroll_offset = new_page_idx * self.page_size + visible_indices = self.get_visible_indices() + if not visible_indices: + return + + try: + current_visual_idx = visible_indices.index(self.cursor_index) + except ValueError: + current_visual_idx = 0 + + new_visual_idx = (current_visual_idx + delta) % len(visible_indices) + self.cursor_index = visible_indices[new_visual_idx] def change_page(self, delta: int): """ Changes the current page view by the specified delta (previous/next page). - Also moves the cursor to the first item of the new page. """ + visible_indices = self.get_visible_indices() + if not visible_indices: + return + + total_visible = len(visible_indices) + + # Calculate current logical page current_page = self.scroll_offset // self.page_size - total_pages = (len(self.options) + self.page_size - 1) // self.page_size + total_pages = (total_visible + self.page_size - 1) // self.page_size + new_page = current_page + delta if 0 <= new_page < total_pages: self.scroll_offset = new_page * self.page_size - first_idx_of_page = self.scroll_offset - if first_idx_of_page < len(self.options): - self.cursor_index = first_idx_of_page - else: - self.cursor_index = len(self.options) - 1 + + # Move cursor to top of new page + try: + # Calculate what visual index corresponds to the start of the new page + new_visual_cursor = self.scroll_offset + if new_visual_cursor < len(visible_indices): + self.cursor_index = visible_indices[new_visual_cursor] + else: + self.cursor_index = visible_indices[-1] + except IndexError: + pass def toggle_selection(self): """ Toggles the selection state of the item currently under the cursor. - Propagates selection to children if defined in dependencies. """ target_indices = {self.cursor_index} - + if self.cursor_index in self.dependencies: target_indices.update(self.dependencies[self.cursor_index]) @@ -128,10 +216,33 @@ class Selector: else: self.selected_indices.difference_update(target_indices) + def toggle_expand(self): + """ + Expands or collapses the current header. + """ + if self.cursor_index in self.dependencies: + if self.cursor_index in self.expanded_headers: + self.expanded_headers.remove(self.cursor_index) + else: + self.expanded_headers.add(self.cursor_index) + + def toggle_expand_all(self): + """ + Toggles expansion state of ALL headers. + If all are expanded -> Collapse all. + Otherwise -> Expand all. + """ + if not self.dependencies: + return + all_headers = set(self.dependencies.keys()) + if self.expanded_headers == all_headers: + self.expanded_headers.clear() + else: + self.expanded_headers = all_headers.copy() + def toggle_all(self): """ - Toggles the selection of all items. - If all are selected, clears selection. Otherwise, selects all. + Toggles the selection of all items. """ if len(self.selected_indices) == len(self.options): self.selected_indices.clear() @@ -144,28 +255,49 @@ class Selector: Returns command strings like 'UP', 'DOWN', 'ENTER', etc. """ key = msvcrt.getch() - if key == b'\x03' or key == b'\x1b': - return 'CANCEL' - if key == b'\xe0' or key == b'\x00': + # Ctrl+C (0x03) or ESC (0x1b) + if key == b"\x03" or key == b"\x1b": + return "CANCEL" + # Special keys prefix (Arrow keys, etc., send 0xe0 or 0x00 first) + if key == b"\xe0" or key == b"\x00": try: key = msvcrt.getch() - if key == b'H': return 'UP' - if key == b'P': return 'DOWN' - if key == b'K': return 'LEFT' - if key == b'M': return 'RIGHT' - except: pass - - try: char = key.decode('utf-8', errors='ignore') - except: return None - - if char in ('\r', '\n'): return 'ENTER' - if char == ' ': return 'SPACE' - if char in ('q', 'Q'): return 'QUIT' - if char in ('a', 'A'): return 'ALL' - if char in ('w', 'W', 'k', 'K'): return 'UP' - if char in ('s', 'S', 'j', 'J'): return 'DOWN' - if char in ('h', 'H'): return 'LEFT' - if char in ('d', 'D', 'l', 'L'): return 'RIGHT' + if key == b"H": # Arrow Up + return "UP" + if key == b"P": # Arrow Down + return "DOWN" + if key == b"K": # Arrow Left + return "LEFT" + if key == b"M": # Arrow Right + return "RIGHT" + except Exception: + pass + + try: + char = key.decode("utf-8", errors="ignore") + except Exception: + return None + + if char in ("\r", "\n"): + return "ENTER" + if char == " ": + return "SPACE" + if char in ("q", "Q"): + return "QUIT" + if char in ("a", "A"): + return "ALL" + if char == "e": + return "EXPAND" + if char == "E": + return "EXPAND_ALL" + if char in ("w", "W", "k", "K"): + return "UP" + if char in ("s", "S", "j", "J"): + return "DOWN" + if char in ("h", "H"): + return "LEFT" + if char in ("d", "D", "l", "L"): + return "RIGHT" return None def get_input_unix(self): @@ -174,44 +306,65 @@ class Selector: Returns command strings like 'UP', 'DOWN', 'ENTER', etc. """ char = click.getchar() - if char == '\x03': - return 'CANCEL' + # Ctrl+C + if char == "\x03": + return "CANCEL" + + # ANSI Escape Sequences for Arrow Keys mapping = { - '\x1b[A': 'UP', - '\x1b[B': 'DOWN', - '\x1b[C': 'RIGHT', - '\x1b[D': 'LEFT', + "\x1b[A": "UP", # Escape + [ + A + "\x1b[B": "DOWN", # Escape + [ + B + "\x1b[C": "RIGHT", # Escape + [ + C + "\x1b[D": "LEFT", # Escape + [ + D } if char in mapping: return mapping[char] - if char == '\x1b': + + # Handling manual Escape sequences + if char == "\x1b": # ESC try: next1 = click.getchar() - if next1 in ('[', 'O'): + if next1 in ("[", "O"): # Sequence indicators next2 = click.getchar() - if next2 == 'A': return 'UP' - if next2 == 'B': return 'DOWN' - if next2 == 'C': return 'RIGHT' - if next2 == 'D': return 'LEFT' - return 'CANCEL' - except: - return 'CANCEL' + if next2 == "A": # Arrow Up + return "UP" + if next2 == "B": # Arrow Down + return "DOWN" + if next2 == "C": # Arrow Right + return "RIGHT" + if next2 == "D": # Arrow Left + return "LEFT" + return "CANCEL" + except Exception: + return "CANCEL" - if char in ('\r', '\n'): return 'ENTER' - if char == ' ': return 'SPACE' - if char in ('q', 'Q'): return 'QUIT' - if char in ('a', 'A'): return 'ALL' - if char in ('w', 'W', 'k', 'K'): return 'UP' - if char in ('s', 'S', 'j', 'J'): return 'DOWN' - if char in ('h', 'H'): return 'LEFT' - if char in ('d', 'D', 'l', 'L'): return 'RIGHT' + if char in ("\r", "\n"): + return "ENTER" + if char == " ": + return "SPACE" + if char in ("q", "Q"): + return "QUIT" + if char in ("a", "A"): + return "ALL" + if char == "e": + return "EXPAND" + if char == "E": + return "EXPAND_ALL" + if char in ("w", "W", "k", "K"): + return "UP" + if char in ("s", "S", "j", "J"): + return "DOWN" + if char in ("h", "H"): + return "LEFT" + if char in ("d", "D", "l", "L"): + return "RIGHT" return None def run(self) -> list[int]: """ Starts the main event loop for the selector. Renders the UI and processes input until confirmed or cancelled. - + Returns: list[int]: A sorted list of selected indices. """ @@ -219,39 +372,55 @@ class Selector: with Live(self.get_renderable(), console=console, auto_refresh=False, transient=True) as live: while True: live.update(self.get_renderable(), refresh=True) - if IS_WINDOWS: action = self.get_input_windows() - else: action = self.get_input_unix() - - if action == 'UP': self.move_cursor(-1) - elif action == 'DOWN': self.move_cursor(1) - elif action == 'LEFT': self.change_page(-1) - elif action == 'RIGHT': self.change_page(1) - elif action == 'SPACE': self.toggle_selection() - elif action == 'ALL': self.toggle_all() - elif action in ('ENTER', 'QUIT'): + if IS_WINDOWS: + action = self.get_input_windows() + else: + action = self.get_input_unix() + + if action == "UP": + self.move_cursor(-1) + elif action == "DOWN": + self.move_cursor(1) + elif action == "LEFT": + self.change_page(-1) + elif action == "RIGHT": + self.change_page(1) + elif action == "EXPAND": + self.toggle_expand() + elif action == "EXPAND_ALL": + self.toggle_expand_all() + elif action == "SPACE": + self.toggle_selection() + elif action == "ALL": + self.toggle_all() + elif action in ("ENTER", "QUIT"): if len(self.selected_indices) >= self.minimal_count: return sorted(list(self.selected_indices)) - elif action == 'CANCEL': raise KeyboardInterrupt + elif action == "CANCEL": + raise KeyboardInterrupt except KeyboardInterrupt: return [] + def select_multiple( options: list[str], minimal_count: int = 1, page_size: int = 8, return_indices: bool = True, cursor_style: str = "pink", - **kwargs + collapse_on_start: bool = False, + **kwargs, ) -> list[int]: """ Drop-in replacement using custom Selector with global console. - + Args: options: List of options to display. minimal_count: Minimum number of selections required. page_size: Number of items per page. return_indices: If True, returns indices; otherwise returns the option strings. cursor_style: Style color for the cursor. + collapse_on_start: If True, child items are hidden initially. """ selector = Selector( options=options, @@ -259,11 +428,12 @@ def select_multiple( text_style="text", page_size=page_size, minimal_count=minimal_count, - **kwargs + collapse_on_start=collapse_on_start, + **kwargs, ) - + selected_indices = selector.run() - + if return_indices: return selected_indices return [options[i] for i in selected_indices] diff --git a/packages/envied/src/envied/core/utils/tags.py b/packages/envied/src/envied/core/utils/tags.py index 3624b3b..4b79385 100644 --- a/packages/envied/src/envied/core/utils/tags.py +++ b/packages/envied/src/envied/core/utils/tags.py @@ -1,488 +1,23 @@ from __future__ import annotations import logging -import re import subprocess import tempfile -from difflib import SequenceMatcher from pathlib import Path -from typing import Optional, Tuple +from typing import Optional from xml.sax.saxutils import escape -import requests -from requests.adapters import HTTPAdapter, Retry - from envied.core import binaries from envied.core.config import config +from envied.core.providers import (ExternalIds, MetadataResult, enrich_ids, fetch_external_ids, fuzzy_match, + get_available_providers, get_provider, search_metadata) from envied.core.titles.episode import Episode from envied.core.titles.movie import Movie from envied.core.titles.title import Title -STRIP_RE = re.compile(r"[^a-z0-9]+", re.I) -YEAR_RE = re.compile(r"\s*\(?[12][0-9]{3}\)?$") -HEADERS = {"User-Agent": "unshackle-tags/1.0"} - - log = logging.getLogger("TAGS") -def _get_session() -> requests.Session: - """Create a requests session with retry logic for network failures.""" - session = requests.Session() - session.headers.update(HEADERS) - - retry = Retry( - total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET", "POST"] - ) - - adapter = HTTPAdapter(max_retries=retry) - session.mount("https://", adapter) - session.mount("http://", adapter) - - return session - - -def _api_key() -> Optional[str]: - return config.tmdb_api_key - - -def _simkl_client_id() -> Optional[str]: - return config.simkl_client_id - - -def _clean(s: str) -> str: - return STRIP_RE.sub("", s).lower() - - -def _strip_year(s: str) -> str: - return YEAR_RE.sub("", s).strip() - - -def fuzzy_match(a: str, b: str, threshold: float = 0.8) -> bool: - """Return True if ``a`` and ``b`` are a close match.""" - - ratio = SequenceMatcher(None, _clean(a), _clean(b)).ratio() - return ratio >= threshold - - -def search_simkl( - title: str, - year: Optional[int], - kind: str, - title_cacher=None, - cache_title_id: Optional[str] = None, - cache_region: Optional[str] = None, - cache_account_hash: Optional[str] = None, -) -> Tuple[Optional[dict], Optional[str], Optional[int]]: - """Search Simkl API for show information by filename.""" - - if title_cacher and cache_title_id: - cached_simkl = title_cacher.get_cached_simkl(cache_title_id, cache_region, cache_account_hash) - if cached_simkl: - log.debug("Using cached Simkl data") - if cached_simkl.get("type") == "episode" and "show" in cached_simkl: - show_info = cached_simkl["show"] - show_title = show_info.get("title") - tmdb_id = show_info.get("ids", {}).get("tmdbtv") - if tmdb_id: - tmdb_id = int(tmdb_id) - return cached_simkl, show_title, tmdb_id - elif cached_simkl.get("type") == "movie" and "movie" in cached_simkl: - movie_info = cached_simkl["movie"] - movie_title = movie_info.get("title") - ids = movie_info.get("ids", {}) - tmdb_id = ids.get("tmdb") or ids.get("moviedb") - if tmdb_id: - tmdb_id = int(tmdb_id) - return cached_simkl, movie_title, tmdb_id - - log.debug("Searching Simkl for %r (%s, %s)", title, kind, year) - - client_id = _simkl_client_id() - if not client_id: - log.debug("No SIMKL client ID configured; skipping SIMKL search") - return None, None, None - - # Construct appropriate filename based on type - filename = f"{title}" - if year: - filename = f"{title} {year}" - - if kind == "tv": - filename += " S01E01.mkv" - else: # movie - filename += " 2160p.mkv" - - try: - session = _get_session() - headers = {"simkl-api-key": client_id} - resp = session.post("https://api.simkl.com/search/file", json={"file": filename}, headers=headers, timeout=30) - resp.raise_for_status() - data = resp.json() - log.debug("Simkl API response received") - - # Handle case where SIMKL returns empty list (no results) - if isinstance(data, list): - log.debug("Simkl returned list (no matches) for %r", filename) - return None, None, None - - # Handle TV show responses - if data.get("type") == "episode" and "show" in data: - show_info = data["show"] - show_title = show_info.get("title") - show_year = show_info.get("year") - - # Verify title matches and year if provided - if not fuzzy_match(show_title, title): - log.debug("Simkl title mismatch: searched %r, got %r", title, show_title) - return None, None, None - if year and show_year and abs(year - show_year) > 1: # Allow 1 year difference - log.debug("Simkl year mismatch: searched %d, got %d", year, show_year) - return None, None, None - - if title_cacher and cache_title_id: - try: - title_cacher.cache_simkl(cache_title_id, data, cache_region, cache_account_hash) - except Exception as exc: - log.debug("Failed to cache Simkl data: %s", exc) - - tmdb_id = show_info.get("ids", {}).get("tmdbtv") - if tmdb_id: - tmdb_id = int(tmdb_id) - log.debug("Simkl -> %s (TMDB ID %s)", show_title, tmdb_id) - return data, show_title, tmdb_id - - elif data.get("type") == "movie" and "movie" in data: - movie_info = data["movie"] - movie_title = movie_info.get("title") - movie_year = movie_info.get("year") - - if not fuzzy_match(movie_title, title): - log.debug("Simkl title mismatch: searched %r, got %r", title, movie_title) - return None, None, None - if year and movie_year and abs(year - movie_year) > 1: # Allow 1 year difference - log.debug("Simkl year mismatch: searched %d, got %d", year, movie_year) - return None, None, None - - if title_cacher and cache_title_id: - try: - title_cacher.cache_simkl(cache_title_id, data, cache_region, cache_account_hash) - except Exception as exc: - log.debug("Failed to cache Simkl data: %s", exc) - - ids = movie_info.get("ids", {}) - tmdb_id = ids.get("tmdb") or ids.get("moviedb") - if tmdb_id: - tmdb_id = int(tmdb_id) - log.debug("Simkl -> %s (TMDB ID %s)", movie_title, tmdb_id) - return data, movie_title, tmdb_id - - except (requests.RequestException, ValueError, KeyError) as exc: - log.debug("Simkl search failed: %s", exc) - - return None, None, None - - -def search_show_info( - title: str, - year: Optional[int], - kind: str, - title_cacher=None, - cache_title_id: Optional[str] = None, - cache_region: Optional[str] = None, - cache_account_hash: Optional[str] = None, -) -> Tuple[Optional[int], Optional[str], Optional[str]]: - """Search for show information, trying Simkl first, then TMDB fallback. Returns (tmdb_id, title, source).""" - simkl_data, simkl_title, simkl_tmdb_id = search_simkl( - title, year, kind, title_cacher, cache_title_id, cache_region, cache_account_hash - ) - - if simkl_data and simkl_title and fuzzy_match(simkl_title, title): - return simkl_tmdb_id, simkl_title, "simkl" - - tmdb_id, tmdb_title = search_tmdb(title, year, kind, title_cacher, cache_title_id, cache_region, cache_account_hash) - return tmdb_id, tmdb_title, "tmdb" - - -def _fetch_tmdb_detail(tmdb_id: int, kind: str) -> Optional[dict]: - """Fetch full TMDB detail response for caching.""" - api_key = _api_key() - if not api_key: - return None - - try: - session = _get_session() - r = session.get( - f"https://api.themoviedb.org/3/{kind}/{tmdb_id}", - params={"api_key": api_key}, - timeout=30, - ) - r.raise_for_status() - return r.json() - except requests.RequestException as exc: - log.debug("Failed to fetch TMDB detail: %s", exc) - return None - - -def _fetch_tmdb_external_ids(tmdb_id: int, kind: str) -> Optional[dict]: - """Fetch full TMDB external_ids response for caching.""" - api_key = _api_key() - if not api_key: - return None - - try: - session = _get_session() - r = session.get( - f"https://api.themoviedb.org/3/{kind}/{tmdb_id}/external_ids", - params={"api_key": api_key}, - timeout=30, - ) - r.raise_for_status() - return r.json() - except requests.RequestException as exc: - log.debug("Failed to fetch TMDB external IDs: %s", exc) - return None - - -def search_tmdb( - title: str, - year: Optional[int], - kind: str, - title_cacher=None, - cache_title_id: Optional[str] = None, - cache_region: Optional[str] = None, - cache_account_hash: Optional[str] = None, -) -> Tuple[Optional[int], Optional[str]]: - if title_cacher and cache_title_id: - cached_tmdb = title_cacher.get_cached_tmdb(cache_title_id, kind, cache_region, cache_account_hash) - if cached_tmdb and cached_tmdb.get("detail"): - detail = cached_tmdb["detail"] - tmdb_id = detail.get("id") - tmdb_title = detail.get("title") or detail.get("name") - log.debug("Using cached TMDB data: %r (ID %s)", tmdb_title, tmdb_id) - return tmdb_id, tmdb_title - - api_key = _api_key() - if not api_key: - return None, None - - search_title = _strip_year(title) - log.debug("Searching TMDB for %r (%s, %s)", search_title, kind, year) - - params = {"api_key": api_key, "query": search_title} - if year is not None: - params["year" if kind == "movie" else "first_air_date_year"] = year - - try: - session = _get_session() - r = session.get( - f"https://api.themoviedb.org/3/search/{kind}", - params=params, - timeout=30, - ) - r.raise_for_status() - js = r.json() - results = js.get("results") or [] - log.debug("TMDB returned %d results", len(results)) - if not results: - return None, None - except requests.RequestException as exc: - log.warning("Failed to search TMDB for %s: %s", title, exc) - return None, None - - best_ratio = 0.0 - best_id: Optional[int] = None - best_title: Optional[str] = None - for result in results: - candidates = [ - result.get("title"), - result.get("name"), - result.get("original_title"), - result.get("original_name"), - ] - candidates = [c for c in candidates if c] # Filter out None/empty values - - if not candidates: - continue - - # Find the best matching candidate from all available titles - for candidate in candidates: - ratio = SequenceMatcher(None, _clean(search_title), _clean(candidate)).ratio() - if ratio > best_ratio: - best_ratio = ratio - best_id = result.get("id") - best_title = candidate - log.debug( - "Best candidate ratio %.2f for %r (ID %s)", - best_ratio, - best_title, - best_id, - ) - - if best_id is not None: - if title_cacher and cache_title_id: - try: - detail_response = _fetch_tmdb_detail(best_id, kind) - external_ids_response = _fetch_tmdb_external_ids(best_id, kind) - if detail_response and external_ids_response: - title_cacher.cache_tmdb( - cache_title_id, detail_response, external_ids_response, kind, cache_region, cache_account_hash - ) - except Exception as exc: - log.debug("Failed to cache TMDB data: %s", exc) - - return best_id, best_title - - first = results[0] - return first.get("id"), first.get("title") or first.get("name") - - -def get_title( - tmdb_id: int, - kind: str, - title_cacher=None, - cache_title_id: Optional[str] = None, - cache_region: Optional[str] = None, - cache_account_hash: Optional[str] = None, -) -> Optional[str]: - """Fetch the name/title of a TMDB entry by ID.""" - - if title_cacher and cache_title_id: - cached_tmdb = title_cacher.get_cached_tmdb(cache_title_id, kind, cache_region, cache_account_hash) - if cached_tmdb and cached_tmdb.get("detail"): - detail = cached_tmdb["detail"] - tmdb_title = detail.get("title") or detail.get("name") - log.debug("Using cached TMDB title: %r", tmdb_title) - return tmdb_title - - api_key = _api_key() - if not api_key: - return None - - try: - session = _get_session() - r = session.get( - f"https://api.themoviedb.org/3/{kind}/{tmdb_id}", - params={"api_key": api_key}, - timeout=30, - ) - r.raise_for_status() - js = r.json() - - if title_cacher and cache_title_id: - try: - external_ids_response = _fetch_tmdb_external_ids(tmdb_id, kind) - if external_ids_response: - title_cacher.cache_tmdb( - cache_title_id, js, external_ids_response, kind, cache_region, cache_account_hash - ) - except Exception as exc: - log.debug("Failed to cache TMDB data: %s", exc) - - return js.get("title") or js.get("name") - except requests.RequestException as exc: - log.debug("Failed to fetch TMDB title: %s", exc) - return None - - -def get_year( - tmdb_id: int, - kind: str, - title_cacher=None, - cache_title_id: Optional[str] = None, - cache_region: Optional[str] = None, - cache_account_hash: Optional[str] = None, -) -> Optional[int]: - """Fetch the release year of a TMDB entry by ID.""" - - if title_cacher and cache_title_id: - cached_tmdb = title_cacher.get_cached_tmdb(cache_title_id, kind, cache_region, cache_account_hash) - if cached_tmdb and cached_tmdb.get("detail"): - detail = cached_tmdb["detail"] - date = detail.get("release_date") or detail.get("first_air_date") - if date and len(date) >= 4 and date[:4].isdigit(): - year = int(date[:4]) - log.debug("Using cached TMDB year: %d", year) - return year - - api_key = _api_key() - if not api_key: - return None - - try: - session = _get_session() - r = session.get( - f"https://api.themoviedb.org/3/{kind}/{tmdb_id}", - params={"api_key": api_key}, - timeout=30, - ) - r.raise_for_status() - js = r.json() - - if title_cacher and cache_title_id: - try: - external_ids_response = _fetch_tmdb_external_ids(tmdb_id, kind) - if external_ids_response: - title_cacher.cache_tmdb( - cache_title_id, js, external_ids_response, kind, cache_region, cache_account_hash - ) - except Exception as exc: - log.debug("Failed to cache TMDB data: %s", exc) - - date = js.get("release_date") or js.get("first_air_date") - if date and len(date) >= 4 and date[:4].isdigit(): - return int(date[:4]) - return None - except requests.RequestException as exc: - log.debug("Failed to fetch TMDB year: %s", exc) - return None - - -def external_ids( - tmdb_id: int, - kind: str, - title_cacher=None, - cache_title_id: Optional[str] = None, - cache_region: Optional[str] = None, - cache_account_hash: Optional[str] = None, -) -> dict: - if title_cacher and cache_title_id: - cached_tmdb = title_cacher.get_cached_tmdb(cache_title_id, kind, cache_region, cache_account_hash) - if cached_tmdb and cached_tmdb.get("external_ids"): - log.debug("Using cached TMDB external IDs") - return cached_tmdb["external_ids"] - - api_key = _api_key() - if not api_key: - return {} - url = f"https://api.themoviedb.org/3/{kind}/{tmdb_id}/external_ids" - log.debug("Fetching external IDs for %s %s", kind, tmdb_id) - - try: - session = _get_session() - r = session.get( - url, - params={"api_key": api_key}, - timeout=30, - ) - r.raise_for_status() - js = r.json() - log.debug("External IDs response: %s", js) - - if title_cacher and cache_title_id: - try: - detail_response = _fetch_tmdb_detail(tmdb_id, kind) - if detail_response: - title_cacher.cache_tmdb(cache_title_id, detail_response, js, kind, cache_region, cache_account_hash) - except Exception as exc: - log.debug("Failed to cache TMDB data: %s", exc) - - return js - except requests.RequestException as exc: - log.warning("Failed to fetch external IDs for %s %s: %s", kind, tmdb_id, exc) - return {} - - def apply_tags(path: Path, tags: dict[str, str]) -> None: if not tags: return @@ -509,9 +44,26 @@ def apply_tags(path: Path, tags: dict[str, str]) -> None: tmp_path.unlink(missing_ok=True) -def tag_file(path: Path, title: Title, tmdb_id: Optional[int] | None = None) -> None: +def _build_tags_from_ids(ids: ExternalIds, kind: str) -> dict[str, str]: + """Build standard MKV tags from external IDs.""" + tags: dict[str, str] = {} + if ids.imdb_id: + tags["IMDB"] = ids.imdb_id + if ids.tmdb_id and ids.tmdb_kind: + tags["TMDB"] = f"{ids.tmdb_kind}/{ids.tmdb_id}" + if ids.tvdb_id: + prefix = "movies" if kind == "movie" else "series" + tags["TVDB2"] = f"{prefix}/{ids.tvdb_id}" + return tags + + +def tag_file( + path: Path, + title: Title, + tmdb_id: Optional[int] = None, + imdb_id: Optional[str] = None, +) -> None: log.debug("Tagging file %s with title %r", path, title) - standard_tags: dict[str, str] = {} custom_tags: dict[str, str] = {} if config.tag and config.tag_group_name: @@ -537,115 +89,52 @@ def tag_file(path: Path, title: Title, tmdb_id: Optional[int] | None = None) -> apply_tags(path, custom_tags) return - if config.tag_imdb_tmdb: - # Check if we have any API keys available for metadata lookup - api_key = _api_key() - simkl_client = _simkl_client_id() + standard_tags: dict[str, str] = {} - if not api_key and not simkl_client: - log.debug("No TMDB API key or Simkl client ID configured; skipping IMDB/TMDB tag lookup") + if config.tag_imdb_tmdb: + providers = get_available_providers() + if not providers: + log.debug("No metadata providers available; skipping tag lookup") apply_tags(path, custom_tags) return + + result: Optional[MetadataResult] = None + + # Direct ID lookup path + if imdb_id: + imdbapi = get_provider("imdbapi") + if imdbapi: + result = imdbapi.get_by_id(imdb_id, kind) + if result: + result.external_ids.imdb_id = imdb_id + enrich_ids(result) + elif tmdb_id is not None: + tmdb = get_provider("tmdb") + if tmdb: + result = tmdb.get_by_id(tmdb_id, kind) + if result: + ext = tmdb.get_external_ids(tmdb_id, kind) + result.external_ids = ext else: - # If tmdb_id is provided (via --tmdb), skip Simkl and use TMDB directly - if tmdb_id is not None: - log.debug("Using provided TMDB ID %s for tags", tmdb_id) - else: - # Try Simkl first for automatic lookup (only if client ID is available) - if simkl_client: - simkl_data, simkl_title, simkl_tmdb_id = search_simkl(name, year, kind) + # Search across providers in priority order + result = search_metadata(name, year, kind) - if simkl_data and simkl_title and fuzzy_match(simkl_title, name): - log.debug("Using Simkl data for tags") - if simkl_tmdb_id: - tmdb_id = simkl_tmdb_id + # If we got a TMDB ID from search but no full external IDs, fetch them + if result and result.external_ids.tmdb_id and not result.external_ids.imdb_id: + ext = fetch_external_ids(result.external_ids.tmdb_id, kind) + if ext.imdb_id: + result.external_ids.imdb_id = ext.imdb_id + if ext.tvdb_id: + result.external_ids.tvdb_id = ext.tvdb_id - # Handle TV show data from Simkl - if simkl_data.get("type") == "episode" and "show" in simkl_data: - show_ids = simkl_data.get("show", {}).get("ids", {}) - if show_ids.get("imdb"): - standard_tags["IMDB"] = show_ids["imdb"] - if show_ids.get("tvdb"): - standard_tags["TVDB2"] = f"series/{show_ids['tvdb']}" - if show_ids.get("tmdbtv"): - standard_tags["TMDB"] = f"tv/{show_ids['tmdbtv']}" + if result and result.external_ids: + standard_tags = _build_tags_from_ids(result.external_ids, kind) - # Handle movie data from Simkl - elif simkl_data.get("type") == "movie" and "movie" in simkl_data: - movie_ids = simkl_data.get("movie", {}).get("ids", {}) - if movie_ids.get("imdb"): - standard_tags["IMDB"] = movie_ids["imdb"] - if movie_ids.get("tvdb"): - standard_tags["TVDB2"] = f"movies/{movie_ids['tvdb']}" - if movie_ids.get("tmdb"): - standard_tags["TMDB"] = f"movie/{movie_ids['tmdb']}" - - # Use TMDB API for additional metadata (either from provided ID or Simkl lookup) - if api_key: - tmdb_title: Optional[str] = None - if tmdb_id is None: - tmdb_id, tmdb_title = search_tmdb(name, year, kind) - log.debug("TMDB search result: %r (ID %s)", tmdb_title, tmdb_id) - if not tmdb_id or not tmdb_title or not fuzzy_match(tmdb_title, name): - log.debug("TMDB search did not match; skipping external ID lookup") - else: - prefix = "movie" if kind == "movie" else "tv" - standard_tags["TMDB"] = f"{prefix}/{tmdb_id}" - try: - ids = external_ids(tmdb_id, kind) - except requests.RequestException as exc: - log.debug("Failed to fetch external IDs: %s", exc) - ids = {} - else: - log.debug("External IDs found: %s", ids) - - imdb_id = ids.get("imdb_id") - if imdb_id: - standard_tags["IMDB"] = imdb_id - tvdb_id = ids.get("tvdb_id") - if tvdb_id: - if kind == "movie": - standard_tags["TVDB2"] = f"movies/{tvdb_id}" - else: - standard_tags["TVDB2"] = f"series/{tvdb_id}" - elif tmdb_id is not None: - # tmdb_id was provided or found via Simkl - prefix = "movie" if kind == "movie" else "tv" - standard_tags["TMDB"] = f"{prefix}/{tmdb_id}" - try: - ids = external_ids(tmdb_id, kind) - except requests.RequestException as exc: - log.debug("Failed to fetch external IDs: %s", exc) - ids = {} - else: - log.debug("External IDs found: %s", ids) - - imdb_id = ids.get("imdb_id") - if imdb_id: - standard_tags["IMDB"] = imdb_id - tvdb_id = ids.get("tvdb_id") - if tvdb_id: - if kind == "movie": - standard_tags["TVDB2"] = f"movies/{tvdb_id}" - else: - standard_tags["TVDB2"] = f"series/{tvdb_id}" - else: - log.debug("No TMDB API key configured; skipping TMDB external ID lookup") - - merged_tags = { - **custom_tags, - **standard_tags, - } - apply_tags(path, merged_tags) + apply_tags(path, {**custom_tags, **standard_tags}) __all__ = [ - "search_simkl", - "search_show_info", - "search_tmdb", - "get_title", - "get_year", - "external_ids", - "tag_file", + "apply_tags", "fuzzy_match", + "tag_file", ] diff --git a/packages/envied/src/envied/core/utils/template_formatter.py b/packages/envied/src/envied/core/utils/template_formatter.py new file mode 100644 index 0000000..1775dac --- /dev/null +++ b/packages/envied/src/envied/core/utils/template_formatter.py @@ -0,0 +1,162 @@ +from __future__ import annotations + +import logging +import re +from typing import Any + +from envied.core.utilities import sanitize_filename + +log = logging.getLogger(__name__) + + +class TemplateFormatter: + """ + Template formatter for custom filename patterns. + + Supports variable substitution and conditional variables. + Example: '{title}.{year}.{quality?}.{source}-{tag}' + """ + + def __init__(self, template: str): + """Initialize the template formatter. + + Args: + template: Template string with variables in {variable} format + """ + self.template = template + self.variables = self._extract_variables() + + def _extract_variables(self) -> list[str]: + """Extract all variables from the template.""" + pattern = r"\{([^}]+)\}" + matches = re.findall(pattern, self.template) + return [match.strip() for match in matches] + + def format(self, context: dict[str, Any]) -> str: + """Format the template with the provided context. + + Args: + context: Dictionary containing variable values + + Returns: + Formatted filename string + + Raises: + ValueError: If required template variables are missing from context + """ + is_valid, missing_vars = self.validate(context) + if not is_valid: + error_msg = f"Missing required template variables: {', '.join(missing_vars)}" + log.error(error_msg) + raise ValueError(error_msg) + + try: + result = self.template + + for variable in self.variables: + placeholder = "{" + variable + "}" + is_conditional = variable.endswith("?") + + if is_conditional: + var_name = variable[:-1] + value = context.get(var_name, "") + + if value: + safe_value = str(value).strip() + result = result.replace(placeholder, safe_value) + else: + # Remove the placeholder and consume the adjacent separator on one side + # e.g. "{disc?}-{track}" → "{track}" when disc is empty + # e.g. "{title}.{edition?}.{quality}" → "{title}.{quality}" when edition is empty + def _remove_conditional(m: re.Match) -> str: + s = m.group(0) + has_left = s[0] in ".- " + has_right = s[-1] in ".- " + if has_left and has_right: + return s[0] # keep left separator + return "" + + result = re.sub( + rf"[\.\s\-]?{re.escape(placeholder)}[\.\s\-]?", + _remove_conditional, + result, + count=1, + ) + else: + value = context.get(variable, "") + if value is None: + log.warning(f"Template variable '{variable}' is None, using empty string") + value = "" + + safe_value = str(value).strip() + result = result.replace(placeholder, safe_value) + + # Clean up multiple consecutive dots/separators and other artifacts + result = re.sub(r"\.{2,}", ".", result) # Multiple dots -> single dot + result = re.sub(r"\s{2,}", " ", result) # Multiple spaces -> single space + result = re.sub(r"-{2,}", "-", result) # Multiple dashes -> single dash + result = re.sub(r"^[\.\s\-]+|[\.\s\-]+$", "", result) # Remove leading/trailing dots, spaces, dashes + result = re.sub(r"\.-", "-", result) # Remove dots before dashes (for dot-based templates) + result = re.sub(r"[\.\s]+\)", ")", result) # Remove dots/spaces before closing parentheses + result = re.sub(r"\(\s*\)", "", result) # Remove empty parentheses (empty conditional) + + # Determine the appropriate separator based on template style + # Count separator characters between variables (between } and {) + between_vars = re.findall(r"\}([^{]*)\{", self.template) + separator_text = "".join(between_vars) + dot_count = separator_text.count(".") + space_count = separator_text.count(" ") + + if space_count > dot_count: + result = sanitize_filename(result, spacer=" ") + else: + result = sanitize_filename(result, spacer=".") + + if not result or result.isspace(): + log.warning("Template formatting resulted in empty filename, using fallback") + return "untitled" + + log.debug(f"Template formatted successfully: '{self.template}' -> '{result}'") + return result + + except (KeyError, ValueError, re.error) as e: + log.error(f"Error formatting template '{self.template}': {e}") + fallback = f"error_formatting_{hash(self.template) % 10000}" + log.warning(f"Using fallback filename: {fallback}") + return fallback + + def validate(self, context: dict[str, Any]) -> tuple[bool, list[str]]: + """Validate that all required variables are present in context. + + Args: + context: Dictionary containing variable values + + Returns: + Tuple of (is_valid, missing_variables) + """ + missing = [] + + for variable in self.variables: + is_conditional = variable.endswith("?") + var_name = variable[:-1] if is_conditional else variable + + if not is_conditional and var_name not in context: + missing.append(var_name) + + return len(missing) == 0, missing + + def get_required_variables(self) -> list[str]: + """Get list of required (non-conditional) variables.""" + required = [] + for variable in self.variables: + if not variable.endswith("?"): + required.append(variable) + return required + + def get_optional_variables(self) -> list[str]: + """Get list of optional (conditional) variables.""" + optional = [] + for variable in self.variables: + if variable.endswith("?"): + optional.append(variable[:-1]) # Remove the ? + return optional diff --git a/packages/envied/src/envied/envied-working-example.yaml b/packages/envied/src/envied/envied-working-example.yaml index 8af8ddd..d8b2f43 100644 --- a/packages/envied/src/envied/envied-working-example.yaml +++ b/packages/envied/src/envied/envied-working-example.yaml @@ -11,8 +11,66 @@ muxing: # shakapackager or mp4decrypt decryption: shakapackager -scene_naming: false -series_year: false +# Custom output templates for filenames +# Configure output_template in your envied.yaml to control filename format. +# If not configured, default scene-style templates are used and a warning is shown. +# Available variables: {title}, {year}, {season}, {episode}, {season_episode}, {episode_name}, +# {quality}, {resolution}, {source}, {audio}, {audio_channels}, {audio_full}, +# {video}, {hdr}, {hfr}, {atmos}, {dual}, {multi}, {tag}, {edition}, {repack}, +# {lang_tag} +# Conditional variables (included only if present): Add ? suffix like {year?}, {episode_name?}, {hdr?} +# Customize the templates below: +# +# Example outputs: +# Scene movies: 'The.Matrix.1999.1080p.SERVICE.WEB-DL.DDP5.1.H.264-EXAMPLE' +# Scene movies (HDR): 'Dune.2021.2160p.SERVICE.WEB-DL.DDP5.1.HDR10.H.265-EXAMPLE' +# Scene movies (REPACK): 'Dune.2021.REPACK.2160p.SERVICE.WEB-DL.DDP5.1.H.265-EXAMPLE' +# Scene series: 'Breaking.Bad.2008.S01E01.Pilot.1080p.SERVICE.WEB-DL.DDP5.1.H.264-EXAMPLE' +# Plex movies: 'The Matrix (1999)' +# Plex series: 'Breaking Bad S01E01 Pilot' +output_template: + # Scene-style naming (dot-separated) + #movies: '{title}.{year}.{repack?}.{edition?}.{quality}.{source}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{hfr?}.{video}-{tag}' + #series: '{title}.{year?}.{season_episode}.{episode_name?}.{repack?}.{edition?}.{quality}.{source}.WEB-DL.{dual?}.{multi?}.{audio_full}.{atmos?}.{hdr?}.{hfr?}.{video}-{tag}' + #songs: '{track_number}.{title}.{repack?}.{edition?}.{source?}.WEB-DL.{audio_full}.{atmos?}-{tag}' + # + # Plex-friendly naming (space-separated, clean format) + movies: '{title} ({year})' + series: '{title} {season_episode} {episode_name?}' + songs: '{track_number}. {title}' + # + # Minimal naming (basic info only) + # movies: '{title}.{year}.{quality}' + # series: '{title}.{season_episode}.{episode_name?}' + # + # Custom scene-style with specific elements + # movies: '{title}.{year}.{quality}.{hdr?}.{source}.WEB-DL.{audio_full}.{video}-{tag}' + # series: '{title}.{year?}.{season_episode}.{episode_name?}.{quality}.{hdr?}.{source}.WEB-DL.{audio_full}.{atmos?}.{video}-{tag}' + +# Language-based tagging for output filenames +# Automatically adds language identifiers (e.g., DANiSH, NORDiC, DKsubs) based on +# audio and subtitle track languages. Rules are evaluated in order; first match wins. +# Use {lang_tag?} in your output_template to place the tag in the filename. +# +# Conditions (all conditions in a rule must match): +# audio: - any audio track matches this language +# subs_contain: - any subtitle matches this language +# subs_contain_all: [lang, ...] - subtitles include ALL listed languages +# +# language_tags: +# rules: +# - audio: da +# tag: DANiSH +# - audio: sv +# tag: SWEDiSH +# - audio: nb +# tag: NORWEGiAN +# - audio: en +# subs_contain_all: [da, sv, nb] +# tag: NORDiC +# - audio: en +# subs_contain: da +# tag: DKsubs # Login credentials for each Service credentials: @@ -59,12 +117,12 @@ key_vaults: #- type: SQLite # name: Local vault # path: key_store.db -- type: HTTPAPI - name: drmlab +- type: HTTP + name: DRMLab host: http://api.drmlab.io/vault/ password: gEX75q7I5YVkvgF5SUkcNd41IbGrDtTT - - + api_mode: json + no_push: false # Choose what software to use to download data downloader: n_m3u8dl_re diff --git a/packages/envied/src/envied/services/CR/__init__.py b/packages/envied/src/envied/services/CR/__init__.py index 7096d43..14e7d40 100644 --- a/packages/envied/src/envied/services/CR/__init__.py +++ b/packages/envied/src/envied/services/CR/__init__.py @@ -1,3 +1,4 @@ +from hashlib import md5 import re import time import uuid @@ -9,13 +10,16 @@ import jwt from langcodes import Language from envied.core.manifests import DASH +from envied.core.manifests.hls import HLS from envied.core.search_result import SearchResult from envied.core.service import Service from envied.core.session import session from envied.core.titles import Episode, Series from envied.core.tracks import Attachment, Chapters, Tracks +from envied.core.tracks.audio import Audio from envied.core.tracks.chapter import Chapter from envied.core.tracks.subtitle import Subtitle +from envied.core.tracks.video import Video class CR(Service): @@ -23,18 +27,21 @@ class CR(Service): Service code for Crunchyroll streaming service (https://www.crunchyroll.com). \b - Version: 2.0.0 - Author: sp4rk.y - Date: 2025-11-01 + Version: 2.1.1 + Author: sp4rk.y & Dex + Date: 2026-02-28 Authorization: Credentials Robustness: Widevine: L3: 1080p, AAC2.0 - + PlayReady: + SL3000: 1080p, AAC2.0 + SL2000: 1080p, AAC2.0 \b Tips: - - Input should be complete URL or series ID + - Input should be complete URL or series ID or Episode ID https://www.crunchyroll.com/series/GRMG8ZQZR/series-name OR GRMG8ZQZR + https://www.crunchyroll.com/en-US/watch/G2XU02X75/ryomen-sukuna OR G2XU02X75 - Supports multiple audio and subtitle languages - Device ID is cached for consistent authentication across runs @@ -44,30 +51,46 @@ class CR(Service): - Manages concurrent stream limits automatically """ - TITLE_RE = r"^(?:https?://(?:www\.)?crunchyroll\.com/(?:series|watch)/)?(?P[A-Z0-9]+)" + TITLE_RE = r"^(?:https?://(?:www\.)?crunchyroll\.com/(?:[a-z]{2}(?:-[a-z]{2})?/)?(?:series|watch)/)?(?P[A-Z0-9]+)" LICENSE_LOCK = Lock() MAX_CONCURRENT_STREAMS = 3 ACTIVE_STREAMS: list[tuple[str, str]] = [] - - @staticmethod - def get_session(): - return session("okhttp4") - + + # Reverse map for audio_locale to match 2 chars languages in a_lang param + LANG_MAP: dict = { + "es-LA": "es-419", + "ar-ME": "ar-SA", + "de-DE": "de", + "en-US": "en", + "es-ES": "es", + "fr-FR": "fr", + "hi-IN": "hi", + "it-IT": "it", + "ja-JP": "ja", + "ko-KR": "kr", + "ru-RU": "ru", + "zh-CN": "zh", + "en-GB": "en" + } + @staticmethod @click.command(name="CR", short_help="https://crunchyroll.com") @click.argument("title", type=str, required=True) + @click.option("-hb", "--high-audio-bitrate", is_flag=True, default=False, help="Fetch audio tracks with highest bitrate (192kbps AAC)") + @click.pass_context def cli(ctx, **kwargs) -> "CR": return CR(ctx, **kwargs) - def __init__(self, ctx, title: str): + def __init__(self, ctx, title: str, high_audio_bitrate: bool): + super().__init__(ctx) self.title = title self.account_id: Optional[str] = None self.access_token: Optional[str] = None self.token_expiration: Optional[int] = None self.anonymous_id = str(uuid.uuid4()) - - super().__init__(ctx) + self.audio_lang = ctx.parent.params.get("lang") or ctx.parent.params.get("a_lang") + self.high_audio_bitrate = high_audio_bitrate device_cache_key = "cr_device_id" cached_device = self.cache.get(device_cache_key) @@ -87,6 +110,10 @@ class CR(Service): self.session.headers.update(self.config.get("headers", {})) self.session.headers["etp-anonymous-id"] = self.anonymous_id + @staticmethod + def get_session(): + return session("okhttp4") + @property def auth_header(self) -> dict: """Return authorization header dict.""" @@ -127,11 +154,7 @@ class CR(Service): self.token_expiration = cached.data.get("token_expiration") else: if not credential: - class HardcodedCreds: - username = "akjrtx@gmail.com" - password = "Ariyan@45" - sha1 = "dummy_hash" - credential = HardcodedCreds() + raise ValueError("Username and password credential required for authentication") response = self.session.post( url=self.config["endpoints"]["token"], @@ -203,9 +226,27 @@ class CR(Service): params={"locale": self.config["params"]["locale"]}, ).json() - if "error" in series_response: - raise ValueError(f"Series not found: {series_id}") + if "code" in series_response: + # Fallback to try with episode id + episode_response = self.session.get( + url=self.config["endpoints"]["episodes"].format(episode_id=series_id), + params={"locale": self.config["params"]["locale"]}, + ).json() + if "code" in episode_response: + raise ValueError(f"Series or episode not found: {series_id}") + + # Extract series id from episodes response + series_id = episode_response["data"][0]["episode_metadata"]["series_id"] + + series_response = self.session.get( + url=self.config["endpoints"]["series"].format(series_id=series_id), + params={"locale": self.config["params"]["locale"]}, + ).json() + + if "code" in series_response: + raise ValueError(f"Series not found from episode metadata: {series_id}") + series_data = ( series_response.get("data", [{}])[0] if isinstance(series_response.get("data"), list) else series_response ) @@ -297,14 +338,16 @@ class CR(Service): def set_track_metadata(self, tracks: Tracks, episode_id: str, is_original: bool) -> None: """Set metadata for video and audio tracks.""" - for video in tracks.videos: - video.needs_repack = True - video.data["episode_id"] = episode_id - video.is_original_lang = is_original - for audio in tracks.audio: - audio.data["episode_id"] = episode_id - audio.is_original_lang = is_original + for track in tracks: + if isinstance(track, Video): + track.needs_repack = True + if isinstance(track, (Audio,Video)): + track.data["episode_id"] = episode_id + track.is_original_lang = is_original + if is_original: + track.name = f"{track.name} [Original]" + def get_tracks(self, title: Episode) -> Tracks: """Fetch video, audio, and subtitle tracks for an episode.""" self.ensure_authenticated() @@ -325,106 +368,169 @@ class CR(Service): tracks = None + #endpoints_playback = ["playback"] + + sdh_list = [] for idx, version in enumerate(versions): audio_locale = version.get("audio_locale") version_guid = version.get("guid") is_original = version.get("original", False) - if not audio_locale: + # Verify mapped audio locale to match CR locales + mapped_locale = self.LANG_MAP.get(audio_locale, audio_locale) + if self.audio_lang and ("all" in self.audio_lang or "best" in self.audio_lang or ("orig" in self.audio_lang and is_original)): + pass + elif not audio_locale or (audio_locale not in self.audio_lang and mapped_locale not in self.audio_lang): continue request_episode_id = version_guid if version_guid else episode_id - - if idx == 0 and not version_guid: - version_response = initial_response - version_token = version_response.get("token") - else: - if idx == 1 and not versions[0].get("guid"): - initial_token = initial_response.get("token") - if initial_token: - self.close_stream(episode_id, initial_token) - - try: - version_response = self.get_playback_data(request_episode_id, track_stream=False) - except ValueError as e: - self.log.warning(f"Could not get playback info for audio {audio_locale}: {e}") - continue - - version_token = version_response.get("token") - - hard_subs = version_response.get("hardSubs", {}) - dash_url = None - - if "none" in hard_subs: - dash_url = hard_subs["none"].get("url") - elif hard_subs: - first_key = list(hard_subs.keys())[0] - dash_url = hard_subs[first_key].get("url") - - if not dash_url: - self.log.warning(f"No DASH manifest found for audio {audio_locale}, skipping") - if version_token: - self.close_stream(request_episode_id, version_token) - continue - + + #for endpoint in endpoints_playback: try: - version_tracks = DASH.from_url( - url=dash_url, - session=self.session, - ).to_tracks(language=audio_locale) - - if tracks is None: - tracks = version_tracks - self.set_track_metadata(tracks, request_episode_id, is_original) + if idx == 0 and not version_guid: # and endpoint == "playback": + version_response = initial_response + version_token = version_response.get("token") else: - self.set_track_metadata(version_tracks, request_episode_id, is_original) - for video in version_tracks.videos: - tracks.add(video) - for audio in version_tracks.audio: - tracks.add(audio) + if idx == 1 and not versions[0].get("guid"): # and endpoint == "playback": + initial_token = initial_response.get("token") + if initial_token: + self.close_stream(episode_id, initial_token) - except Exception as e: - self.log.warning(f"Failed to parse DASH manifest for audio {audio_locale}: {e}") - if version_token: - self.close_stream(request_episode_id, version_token) - continue - - if is_original: - captions = version_response.get("captions", {}) - subtitles_data = version_response.get("subtitles", {}) - all_subs = {**captions, **subtitles_data} - - for lang_code, sub_data in all_subs.items(): - if lang_code == "none": + try: + version_response = self.get_playback_data(request_episode_id, track_stream=False) + except ValueError as e: + self.log.warning(f"Could not get playback info for audio {audio_locale}: {e}") continue - if isinstance(sub_data, dict) and "url" in sub_data: + version_token = version_response.get("token") + + hard_subs = version_response.get("hardSubs", {}) + dash_url = None + root_url = version_response.get("url") + + if root_url and "/clean/" in root_url: + dash_url = root_url + + elif "none" in hard_subs: + dash_url = hard_subs["none"].get("url") + + elif hard_subs: + first_key = list(hard_subs.keys())[0] + dash_url = hard_subs[first_key].get("url") + + if not dash_url: + self.log.warning(f"No DASH manifest found for audio {audio_locale}, skipping") + if version_token: + self.close_stream(request_episode_id, version_token) + continue + + try: + + version_tracks = (HLS if "m3u8" in dash_url else DASH).from_url( + url=dash_url, + session=self.session, + ).to_tracks(language=audio_locale) + + # Select high audio bitrate replacing 0 and 1 in mpd url + if self.high_audio_bitrate: try: - lang = Language.get(lang_code) - except (ValueError, LookupError): - lang = Language.get("en") + version_tracks.audio.clear(); + + high_bitrate_tracks = (HLS if "m3u8" in dash_url else DASH).from_url( + url=dash_url.replace("/0/", "/1/"), + session=self.session, + ).to_tracks(language=audio_locale) + + version_tracks.audio = high_bitrate_tracks.audio + except Exception as e: + self.log.warning(f"Failed to fetch high bitrate audio for {audio_locale}: {e}") + + if tracks is None: + tracks = version_tracks + self.set_track_metadata(tracks, request_episode_id, is_original) + else: + self.set_track_metadata(version_tracks, request_episode_id, is_original) + # Add videos + for video in version_tracks.videos: + if not any(v.id == video.id for v in tracks.videos): + tracks.add(video) + + # Add audios non-existing in tracks or with higher bitrate + for audio in version_tracks.audio: + if audio.channels == "1.0": + audio.channels = "2.0" # change audio channels for correct channel + + existing_audio = next((a for a in tracks.audio if a.language == audio.language), None) + if existing_audio is None or (hasattr(audio, 'bitrate') and hasattr(existing_audio, 'bitrate') and audio.bitrate > existing_audio.bitrate): + tracks.add(audio) + elif existing_audio is None: + tracks.add(audio) - subtitle_format = sub_data.get("format", "vtt").lower() - if subtitle_format == "ass" or subtitle_format == "ssa": - codec = Subtitle.Codec.SubStationAlphav4 - else: - codec = Subtitle.Codec.WebVTT + except Exception as e: + self.log.warning(f"Failed to parse DASH manifest for audio {audio_locale}: {e}") + if version_token: + self.close_stream(request_episode_id, version_token) + continue + #if endpoint == "playback": + # Handling subtitles code + try: + lang_audio = [x for x in version_response.get("versions", []) if x["guid"] == version_guid][0]["audio_locale"] + except (IndexError, KeyError, TypeError): + lang_audio = title.language + + captions = version_response.get("captions", {}) + subtitles_data = version_response.get("subtitles", {}) + + if captions: + for subtitle in captions.values(): + + if subtitle["language"] == "none": + continue + + lang = subtitle["language"] + subtitle_format = subtitle.get("format", "vtt").lower() + codec = Subtitle.Codec.SubStationAlphav4 if subtitle_format in ["ass", "ssa"] else Subtitle.Codec.WebVTT + sdh_list.append(lang) tracks.add( Subtitle( - id_=f"subtitle-{audio_locale}-{lang_code}", - url=sub_data["url"], + id_=md5(subtitle["url"].encode()).hexdigest()[0:6], + url=subtitle["url"], codec=codec, - language=lang, - forced=False, + language=Language.get(lang), + sdh=True, + ), + warn_only=True, + ) + + if subtitles_data: + for subtitle in subtitles_data.values(): + if subtitle["language"] == "none": + continue + + lang = subtitle["language"] + subtitle_format = subtitle.get("format", "vtt").lower() + codec = Subtitle.Codec.SubStationAlphav4 if subtitle_format in ["ass", "ssa"] else Subtitle.Codec.WebVTT + tracks.add( + Subtitle( + id_=md5(subtitle["url"].encode()).hexdigest()[0:6], + url=subtitle["url"], + codec=codec, + language=Language.get(lang), + forced=False if (str(lang_audio) == str(title.language)) and (lang not in sdh_list) else True, sdh=False, ), warn_only=True, ) - if version_token: - self.close_stream(request_episode_id, version_token) - + if version_token: + self.close_stream(request_episode_id, version_token) + + # continuar si no se pudo procesar el endpoint + except Exception as e: + self.log.warning(f"Error processing version {idx}: {e}") + continue + if versions and versions[0].get("guid"): initial_token = initial_response.get("token") if initial_token: @@ -433,15 +539,6 @@ class CR(Service): if tracks is None: raise ValueError(f"Failed to fetch any tracks for episode: {episode_id}") - for track in tracks.audio + tracks.subtitles: - if track.language: - try: - lang_obj = Language.get(str(track.language)) - base_lang = Language.get(lang_obj.language) - lang_display = base_lang.language_name() - track.name = lang_display - except (ValueError, LookupError): - pass images = title.data.get("images", {}) thumbnails = images.get("thumbnail", []) @@ -451,10 +548,65 @@ class CR(Service): thumb_index = min(7, len(thumb_variants) - 1) thumb = thumb_variants[thumb_index] if isinstance(thumb, dict) and "source" in thumb: - thumbnail_name = f"{title.name or title.title} - S{title.season:02d}E{title.number:02d}" + raw_name = f"{title.name or title.title} - S{title.season:02d}E{title.number:02d}" + thumbnail_name = self.sanitize_filename(raw_name) + tracks.add(Attachment.from_url(url=thumb["source"], name=thumbnail_name)) return tracks + def get_playready_license(self, challenge: bytes, title: Episode, track) -> bytes: + """ + Get PlayReady license for decryption. + + Creates a fresh playback session for each track, gets the license, then immediately + closes the stream. This prevents hitting the 3 concurrent stream limit. + CDN authorization is embedded in the manifest URLs, not tied to active sessions. + """ + self.ensure_authenticated() + + track_episode_id = track.data.get("episode_id", title.id) + + with self.LICENSE_LOCK: + playback_token = None + try: + playback_data = self.get_playback_data(track_episode_id, track_stream=True) + playback_token = playback_data.get("token") + + if not playback_token: + raise ValueError(f"No playback token in response for {track_episode_id}") + + track.data["playback_token"] = playback_token + + license_response = self.session.post( + url=self.config["endpoints"]["license_playready"], + params={"specConform": "true"}, + data=challenge, + headers={ + **self.auth_header, + "content-type": "application/octet-stream", + "accept": "application/octet-stream", + "x-cr-content-id": track_episode_id, + "x-cr-video-token": playback_token, + }, + ) + + if license_response.status_code != 200: + self.log.error(f"License request failed with status {license_response.status_code}") + self.log.error(f"Response: {license_response.text[:500]}") + self.close_stream(track_episode_id, playback_token) + raise ValueError(f"License request failed: {license_response.status_code}") + + self.close_stream(track_episode_id, playback_token) + return license_response.content + + except Exception: + if playback_token: + try: + self.close_stream(track_episode_id, playback_token) + except Exception: + pass + raise + def get_widevine_license(self, challenge: bytes, title: Episode, track) -> bytes: """ Get Widevine license for decryption. @@ -738,9 +890,21 @@ class CR(Service): response = self.session.get( url=self.config["endpoints"]["playback"].format(episode_id=episode_id), params={"queue": "false"}, - ).json() + ) - if "error" in response: + # Handle 429 response status code before json parsing + if response.status_code == 429: + retry_after = int(response.headers.get("Retry-After", 60)) + self.log.warning(f"Rate limited (429). Waiting {retry_after}s before retry... (attempt {attempt + 1}/{max_retries + 1})") + if attempt < max_retries: + cleared = self.clear_all_sessions() + time.sleep(retry_after) + continue + raise ValueError(f"Rate limit exceeded for episode: {episode_id}") + + response = response.json() + + if "code" in response: error_code = response.get("code", "") error_msg = response.get("message", response.get("error", "Unknown error")) @@ -775,3 +939,7 @@ class CR(Service): if not match: raise ValueError(f"Could not parse series ID from: {title_input}") return match.group("id") + + @staticmethod + def sanitize_filename(name): + return re.sub(r'[<>:"/\\|?*¿¡]', '', name).strip() \ No newline at end of file diff --git a/packages/envied/src/envied/services/CR/config.yaml b/packages/envied/src/envied/services/CR/config.yaml index 6651db7..8aee436 100644 --- a/packages/envied/src/envied/services/CR/config.yaml +++ b/packages/envied/src/envied/services/CR/config.yaml @@ -15,14 +15,17 @@ endpoints: # Content Metadata series: "https://www.crunchyroll.com/content/v2/cms/series/{series_id}" seasons: "https://www.crunchyroll.com/content/v2/cms/series/{series_id}/seasons" + episodes: "https://www.crunchyroll.com/content/v2/cms/objects/{episode_id}" season_episodes: "https://www.crunchyroll.com/content/v2/cms/seasons/{season_id}/episodes" skip_events: "https://static.crunchyroll.com/skip-events/production/{episode_id}.json" # Playback playback: "https://www.crunchyroll.com/playback/v2/{episode_id}/tv/android_tv/play" + #playback_download: "https://www.crunchyroll.com/playback/v2/{episode_id}/android/phone/download" playback_delete: "https://www.crunchyroll.com/playback/v1/token/{episode_id}/{token}" playback_sessions: "https://www.crunchyroll.com/playback/v1/sessions/streaming" license_widevine: "https://cr-license-proxy.prd.crunchyrollsvc.com/v1/license/widevine" + license_playready: "https://cr-license-proxy.prd.crunchyrollsvc.com/v1/license/playReady" # Discovery search: "https://www.crunchyroll.com/content/v2/discover/search" @@ -38,7 +41,7 @@ headers: # Query parameters params: - locale: "en-US" + locale: "es-419" # Device parameters for authentication device: diff --git a/packages/envied/src/envied/services/DSNP/README.md b/packages/envied/src/envied/services/DSNP/README.md new file mode 100644 index 0000000..fc56e90 --- /dev/null +++ b/packages/envied/src/envied/services/DSNP/README.md @@ -0,0 +1,43 @@ +# DisneyPlus(디즈니플러스) + +``` +uv run unshackle dl -vl all -al orig -sl ko,en,ja -q 2160 -v h.265 -r HDR10 DSNP entity-4d12671a-f0ad-4c3f-8526-09ae6772390b +``` + +## Information + +- Authorization: Credentials, Web Token +- Security: UHD@L1/SL3000, FHD@L1/SL3000, HD@L3/SL2000 +- Working Client Agent: AndroidTV +- Support Codec + - Video: H264, H265 + - Audio: AAC, AC3, ATMOS, DTS:X(P2:IMAX) + - Range: SDR, HDR10, DV + +## Support Args + +- `-i`, `--imax`: Prefer IMAX Enhanced version if available. +- `-r`, `--remastered-ar`: Prefer Remastered Aspect Ratio if available. +- `-e`, `--extras`: Select a extras video if available. +- `-tu`, `--tier-unlimits`: Remove stream quality restrictions for a specific account. + +## Tips + +- Configure user settings within the `envied.yaml` file. + ``` + services: + DSNP: + # Specifies the index of the profile to use. (0 = first profile, 1 = second profile, etc.) + # Automatically select a profile or language when commenting. + # Language setting is only available in languages supported by Disney+. + preferences: + profile: 0 + # language: "ko" + ``` +- To enable the tier_unlimits command by default, add the following to `envied.yaml`. + ``` + dl: + ... + DSNP: + tier_unlimits: True + ``` diff --git a/packages/envied/src/envied/services/DSNP/__init__.py b/packages/envied/src/envied/services/DSNP/__init__.py index a0aa19e..162ea17 100644 --- a/packages/envied/src/envied/services/DSNP/__init__.py +++ b/packages/envied/src/envied/services/DSNP/__init__.py @@ -11,11 +11,11 @@ from click import Context from collections.abc import Generator from datetime import datetime from http.cookiejar import CookieJar -from langcodes import Language -from pyplayready.cdm import Cdm as PlayReadyCdm -from requests import Request +from langcodes import Language, LanguageTagError from typing import Any, Optional, Union, List +from urllib.parse import urlparse, urlunparse +from envied.core.cdm.detect import is_playready_cdm from envied.core.constants import AnyTrack from envied.core.credential import Credential from envied.core.manifests import HLS @@ -28,35 +28,38 @@ from envied.core.utils.collections import as_list from . import queries + class DSNP(Service): """ - Service code for Disney+ Streaming Service (https://disneyplus.com). + Service code for Disney+ Streaming Service (https://disneyplus.com).\n + Version: 26.02.27 - Author: Made by CodeName393 with Special Thanks to narakama\n - Authorization: Credentials\n + Author: Made by CodeName393 with Special Thanks to narakama, Sam\n + Authorization: Credentials, Web Token\n Security: UHD@L1/SL3000 FHD@L1/SL3000 HD@L3/SL2000 """ ALIASES = ("DSNP", "disneyplus", "disney+") TITLE_RE = ( - r"^(?:https?://(?:www\.)?disneyplus\.com(?:/[a-z0-9-]+)?(?:/[a-z0-9-]+)?/(browse)/(?Pentity-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))(?:\?.*)?$", - r"^(?:https?://(?:www\.)?disneyplus\.com(?:/[a-z0-9-]+)?(?:/[a-z0-9-]+)?/(movies|series)/[a-z0-9-]+/)?(?P[a-zA-Z0-9-]+)(?:\?.*)?$", + r"^(?:https?://(?:www\.)?disneyplus\.com(?:/(?!browse)[a-z0-9-]+)?(?:/(?!browse)[a-z0-9-]+)?/(browse)/(?Pentity-[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))(?:\?.*)?$", + r"^(?:https?://(?:www\.)?disneyplus\.com(?:/(?!browse)[a-z0-9-]+){0,2}/(play)/(?P[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}))(?:\?.*)?$", ) @staticmethod @click.command(name="DisneyPlus", short_help="https://disneyplus.com", help=__doc__) @click.argument("title", type=str) - @click.option("--imax", is_flag=True, default=False, help="Prefer IMAX Enhanced version if available.") - @click.option("--remastered-ar", is_flag=True, default=False, help="Prefer Remastered Aspect Ratio if available.") - @click.option("-ext", "--extras", is_flag=True, default=False, help="Select a extras video if available.") + @click.option("-i", "--imax", is_flag=True, default=False, help="Prefer IMAX Enhanced version if available.") + @click.option("-r", "--remastered-ar", is_flag=True, default=False, help="Prefer Remastered Aspect Ratio if available.") + @click.option("-e", "--extras", is_flag=True, default=False, help="Select a extras video if available.") + @click.option("-tu", "--tier-unlimits", is_flag=True, default=False, help="Remove stream quality restrictions for a specific account.") @click.pass_context def cli(ctx: Context, **kwargs: Any) -> DSNP: return DSNP(ctx, **kwargs) - def __init__(self, ctx: Context, title: str, imax: bool, remastered_ar: bool, extras: bool): + def __init__(self, ctx: Context, title: str, imax: bool, remastered_ar: bool, extras: bool, tier_unlimits: bool): self.title = title super().__init__(ctx) - + self.title_id = self.title for pattern in self.TITLE_RE: match = re.match(pattern, self.title) @@ -67,21 +70,14 @@ class DSNP(Service): self.prefer_imax = imax self.prefer_remastered_ar = remastered_ar self.extras = extras + self.tier_unlimits = tier_unlimits - self.vcodec = ctx.parent.params.get("vcodec") or Video.Codec.AVC - self.acodec : Audio.Codec = ctx.parent.params.get("acodec") - self.range = ctx.parent.params.get("range_") or [Video.Range.SDR] - self.quality: List[int] = ctx.parent.params.get("quality") or [1080] - self.wanted = ctx.parent.params.get("wanted") - self.audio_only = ctx.parent.params.get("audio_only") - self.subs_only = ctx.parent.params.get("subs_only") - self.chapters_only = ctx.parent.params.get("chapters_only") - + self.acodec: List[Audio.Codec] = ctx.parent.params.get("acodec") or [Audio.Codec.AAC] self.cdm = ctx.obj.cdm - self.playready = isinstance(self.cdm, PlayReadyCdm) if self.cdm else False - self.is_l3 = (self.cdm.security_level < 3000) if self.playready else (self.cdm.security_level == 3) if self.cdm else False + self.is_l3 = ((self.cdm.security_level < 3000) if is_playready_cdm(self.cdm) else (self.cdm.security_level == 3)) if self.cdm else False self.region = None + self.cache_key = None self.prod_config = {} self.account_tokens = {} self.active_session = {} @@ -90,29 +86,23 @@ class DSNP(Service): self.log.info("Preparing...") if self.is_l3: - self.vcodec = Video.Codec.AVC - self.range = [Video.Range.SDR] - self.quality = [720] - self.log.warning(" + Switched video to HD. This CDM only support HD.") + self.log.warning(" + This CDM only support HD.") + self.tier_unlimits = False else: - if self.quality > [1080] and self.range[0] == [Video.Range.SDR]: - self.range = [Video.Range.HDR10] - self.log.info(" + Switched range to HDR10. 4K resolution requires HDR.") - - if (self.range != [Video.Range.SDR] or self.quality > [1080]) and self.vcodec != Video.Codec.HEVC: - self.vcodec = Video.Codec.HEVC - self.log.info(f" + Switched video codec to H265 to be able to get {self.range[0]} dynamic range.") - - if self.acodec == Audio.Codec.DTS and not self.prefer_imax: + if Audio.Codec.DTS in self.acodec and not self.prefer_imax: self.prefer_imax = True self.log.info(" + Switched IMAX prefer. DTS audio can only be get from IMAX prefer.") + if self.tier_unlimits: + self.log.warning(" + Unlock quality limits for restricted streams") - self.session.headers.update({ - "User-Agent": self.config["bamsdk"]["user_agent"], - "Accept-Encoding": "gzip", - "Accept": "application/json", - "Content-Type": "application/json" - }) + self.session.headers.update( + { + "User-Agent": self.config["bamsdk"]["user_agent"], + "Accept-Encoding": "gzip", + "Accept": "application/json", + "Content-Type": "application/json", + } + ) ip_info = get_ip_info(self.session) country_key = None @@ -128,57 +118,65 @@ class DSNP(Service): self.log.warning(f" - The region could not be determined from IP information: {ip_info}") self.region = "US" self.log.info(f" + IP Region: {self.region} (By Default)") + if self.region in ["ID", "IN", "TH", "MY", "PH", "ZA"]: # It's not Global service. + self.log.error(" - It is not currently available in the country.", exc_info=False) + sys.exit(1) self.prod_config = self.session.get(self.config["endpoints"]["config"]).json() - self.session.headers.update({ - "X-Application-Version": self.config["bamsdk"]["application_version"], - "X-BAMSDK-Client-ID": self.config["bamsdk"]["client"], - "X-BAMSDK-Platform": self.config["device"]["platform"], - "X-BAMSDK-Version": self.config["bamsdk"]["sdk_version"], - "X-DSS-Edge-Accept": "vnd.dss.edge+json; version=2", - "X-Request-Yp-Id": self.config["bamsdk"]["yp_service_id"] - }) + self.session.headers.update( + { + "X-Application-Version": self.config["bamsdk"]["application_version"], + "X-BAMSDK-Client-ID": self.config["bamsdk"]["client"], + "X-BAMSDK-Platform": self.config["device"]["platform"], + "X-BAMSDK-Version": self.config["bamsdk"]["sdk_version"], + "X-DSS-Edge-Accept": "vnd.dss.edge+json; version=2", + "X-Request-Yp-Id": self.config["bamsdk"]["yp_service_id"], + } + ) def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None: super().authenticate(cookies, credential) self.credentials = credential - if not credential: - raise EnvironmentError("Service requires Credentials for Authentication.") + if self.credentials: + self.cache_key = f"tokens_{self.region}_{self.credentials.sha1}" + else: + self.cache_key = f"tokens_{self.region}_web_session" + self.log.warning(" - Credentials not found. Attempting Web Token login.") self.log.info("Logging into Disney+...") self._login() - if self.config.get("profile") and "index" in self.config["profile"]: + if self.config.get("preferences") and "profile" in self.config["preferences"]: try: - target_profile_index = int(self.config["profile"]["index"]) + target_profile_index = int(self.config["preferences"]["profile"]) except (ValueError, TypeError, KeyError): self.log.error(" - Profile index in configuration is invalid.", exc_info=False) sys.exit(1) - profiles = self.active_session['account']['profiles'] + profiles = self.active_session["account"]["profiles"] if not 0 <= target_profile_index < len(profiles): self.log.error(f" - Invalid profile index: {target_profile_index}. Please choose between 0 and {len(profiles) - 1}.", exc_info=False) sys.exit(1) - - target_profile = profiles[target_profile_index] - active_profile_id = self.active_session['account']['activeProfile']['id'] - if target_profile['id'] != active_profile_id: + target_profile = profiles[target_profile_index] + active_profile_id = self.active_session["account"]["activeProfile"]["id"] + + if target_profile["id"] != active_profile_id: self._perform_switch_profile(target_profile, self.session.headers) self.log.info(" + Refreshing session data after profile switch...") full_account_info = self._get_account_info() self.active_session = full_account_info["activeSession"] - self.active_session['account'] = full_account_info['account'] + self.active_session["account"] = full_account_info["account"] self.log.info("Session data updated successfully.") self.log.debug(self.active_session) - if not self.active_session['isSubscriber']: + if not self.active_session["isSubscriber"]: self.log.error(" - Cannot continue, account is not subscribed to Disney+", exc_info=False) sys.exit(1) - if not self.active_session['inSupportedLocation']: + if not self.active_session["inSupportedLocation"]: self.log.error(" - Cannot continue, Not available in your Region.", exc_info=False) sys.exit(1) @@ -189,10 +187,8 @@ class DSNP(Service): self.log.debug(f" + Detected Location: {self.active_session['location']['countryCode']}") self.log.debug(f" + Supported Location: {self.active_session['inSupportedLocation']}") - active_profile_id = self.active_session['account']['activeProfile']['id'] - full_profile_object = next( - p for p in self.active_session['account']['profiles'] if p['id'] == active_profile_id - ) + active_profile_id = self.active_session["account"]["activeProfile"]["id"] + full_profile_object = next(p for p in self.active_session["account"]["profiles"] if p["id"] == active_profile_id) current_imax_setting = full_profile_object["attributes"]["playbackSettings"]["preferImaxEnhancedVersion"] self.log.info(f" + IMAX Enhanced: {current_imax_setting}") @@ -200,14 +196,27 @@ class DSNP(Service): update_tokens = self._set_imax_preference(self.prefer_imax) self._apply_new_tokens(update_tokens["token"]) - current_133_setting = full_profile_object["attributes"]["playbackSettings"]["prefer133"] # Original Aspect Ratio + current_133_setting = full_profile_object["attributes"]["playbackSettings"]["prefer133"] # Original Aspect Ratio self.log.info(f" + Remastered Aspect Ratio: {not current_133_setting}") if not current_133_setting is not self.prefer_remastered_ar: update_tokens = self._set_remastered_ar_preference(self.prefer_remastered_ar) self._apply_new_tokens(update_tokens["token"]) + current_app_lang = full_profile_object["attributes"]["languagePreferences"]["appLanguage"] + self.log.info(f" + App Language: {Language.get(current_app_lang).display_name()}") + prefe_app_lang = self.config.get("preferences", {}).get("language") + if prefe_app_lang and current_app_lang != prefe_app_lang: + try: + if Language.get(prefe_app_lang).is_valid(): + update_tokens = self._set_language_preference(prefe_app_lang) + self._apply_new_tokens(update_tokens["token"]) + else: + raise LanguageTagError() + except LanguageTagError: + self.log.warning(f" - Invalid language tag '{prefe_app_lang}' in preferences. Skipping update.") + def _login(self) -> None: - cache = self.cache.get(f"tokens_{self.region}_{self.credentials.sha1}") + cache = self.cache.get(self.cache_key) if cache: try: @@ -217,7 +226,7 @@ class DSNP(Service): bearer = self.account_tokens["accessToken"] if not bearer: raise ValueError("accessToken not found in cache") - self.session.headers.update({'Authorization': f'Bearer {bearer}'}) + self.session.headers.update({"Authorization": f"Bearer {bearer}"}) except (KeyError, ValueError, TypeError) as e: self.log.warning(f" - Cached token data is invalid or corrupted ({e}). Getting new tokens...") @@ -239,64 +248,76 @@ class DSNP(Service): self.log.info(" + Fetching session data...") full_account_info = self._get_account_info() self.active_session = full_account_info["activeSession"] - self.active_session['account'] = full_account_info['account'] + self.active_session["account"] = full_account_info["account"] self.log.info("Session data setup successfully.") def _perform_full_login(self) -> None: - android_id = secrets.token_bytes(8).hex() - drm_id = f"{base64.urlsafe_b64encode(secrets.token_bytes(32)).decode('utf-8')}\n" - device_token = self._register_device(android_id, drm_id) + if self.credentials: + android_id = secrets.token_bytes(8).hex() + drm_id = f"{base64.urlsafe_b64encode(secrets.token_bytes(32)).decode('utf-8')}\n" + device_token = self._register_device(android_id, drm_id) - email_status = self._check_email(self.credentials.username, device_token) + email_status = self._check_email(self.credentials.username, device_token) - if email_status.lower() != "login": - if email_status.lower() == "otp": - self.log.warning(" - Account requires OTP code login.") - self._request_otp(self.credentials.username, device_token) + if email_status.lower() != "login": + if email_status.lower() == "otp": + self.log.warning(" - Account requires OTP code login.") + self._request_otp(self.credentials.username, device_token) - otp_code = None - try: - otp_code = input("Enter a OTP code (Check email): ") - if not otp_code: - self.log.error(" - OTP code is required, but no value was entered.", exc_info=False) + otp_code = None + try: + otp_code = input("Enter a OTP code (Check email): ") + if not otp_code: + self.log.error(" - OTP code is required, but no value was entered.", exc_info=False) + sys.exit(1) + if not otp_code.isdigit(): + self.log.error(" - Invalid OTP code. Please enter only numbers.", exc_info=False) + sys.exit(1) + if len(otp_code) < 6: + self.log.error(" - OTP code is too short. Please enter at least 6 digits.", exc_info=False) + sys.exit(1) + if len(otp_code) > 6: + self.log.warning(" - OTP code is longer than 6 digits. Using the first 6 digits.") + otp_code = otp_code[:6] + except KeyboardInterrupt: + self.log.error("\n - OTP code input cancelled by user.", exc_info=False) sys.exit(1) - if not otp_code.isdigit(): - self.log.error(" - Invalid OTP code. Please enter only numbers.", exc_info=False) - sys.exit(1) - if len(otp_code) < 6: - self.log.error(" - OTP code is too short. Please enter at least 6 digits.", exc_info=False) - sys.exit(1) - if len(otp_code) > 6: - self.log.warning(" - OTP code is longer than 6 digits. Using the first 6 digits.") - otp_code = otp_code[:6] - except KeyboardInterrupt: - self.log.error("\n - OTP code input cancelled by user.", exc_info=False) + + auth_action = self._auth_action_with_otp(self.credentials.username, otp_code, device_token) + login_tokens = self._login_with_auth_action(auth_action, device_token) + + elif email_status.lower() == "register": + self.log.error(" - Account is not registered. Please register first.", exc_info=False) + sys.exit(1) + else: + self.log.error(f" - Email status is '{email_status}'. Account status verification required.", exc_info=False) sys.exit(1) - - auth_action = self._auth_action_with_otp(self.credentials.username, otp_code, device_token) - login_tokens = self._login_with_auth_action(auth_action, device_token) - elif email_status.lower() == "register": - self.log.error(" - Account is not registered. Please register first.", exc_info=False) - sys.exit(1) else: - self.log.error(f" - Email status is '{email_status}'. Account status verification required.", exc_info=False) - sys.exit(1) + login_tokens = self._login_with_password(self.credentials.username, self.credentials.password, device_token) else: - login_tokens = self._login_with_password(self.credentials.username, self.credentials.password, device_token) + try: + web_refresh_token = input("Enter a Web Refresh Token: ").strip("'\"") + login_tokens = self._refresh_token(web_refresh_token) + except KeyboardInterrupt: + self.log.error("\n - Web Refresh Token input cancelled by user.", exc_info=False) + sys.exit(1) + except Exception: + self.log.error(" - Invalid Web Refresh Token.", exc_info=False) + sys.exit(1) - temp_auth_header = {"Authorization": f'Bearer {login_tokens["token"]["accessToken"]}'} + temp_auth_header = {"Authorization": f"Bearer {login_tokens['token']['accessToken']}"} account_info = self._get_account_info(temp_auth_header) profiles = account_info["account"]["profiles"] selected_profile = None - if self.config.get("profile") and "index" in self.config["profile"]: + if self.config.get("preferences") and "profile" in self.config["preferences"]: try: - profile_index = int(self.config["profile"]["index"]) + profile_index = int(self.config["preferences"]["profile"]) if not 0 <= profile_index < len(profiles): - raise ValueError(f"Index out of range (0-{len(profiles)-1})") - + raise ValueError(f"Index out of range (0-{len(profiles) - 1})") + selected_profile = profiles[profile_index] except (ValueError, TypeError): self.log.error(" - Profile index in configuration is invalid.", exc_info=False) @@ -304,7 +325,7 @@ class DSNP(Service): else: selected_profile = next( (p for p in profiles if not p["attributes"]["kidsModeEnabled"] and not p["attributes"]["parentalControls"]["isPinProtected"]), - None + None, ) if not selected_profile: self.log.error(" - Auto-selection failed: No suitable profile found (non-kids, no PIN). Please configure a specific profile.", exc_info=False) @@ -316,39 +337,39 @@ class DSNP(Service): def _perform_switch_profile(self, target_profile: dict, auth_headers: dict) -> None: self.log.info(f" + Switching to profile: {target_profile['name']}({target_profile['id']})") - if target_profile['attributes']['kidsModeEnabled']: - self.log.error(" - Kids Profile and cannot be used.", exc_info=False) + if target_profile["attributes"]["kidsModeEnabled"]: + self.log.error(" - Kids Profile and cannot be used.", exc_info=False) sys.exit(1) profile_pin = None - if target_profile['attributes']['parentalControls']['isPinProtected']: - self.log.warning(" - This profile is PIN protected.") + if target_profile["attributes"]["parentalControls"]["isPinProtected"]: + self.log.warning(" - This profile is PIN protected.") try: profile_pin = input("Enter a profile pin: ") if not profile_pin: - self.log.error(" - PIN is required, but no value was entered.", exc_info=False) + self.log.error(" - PIN is required, but no value was entered.", exc_info=False) sys.exit(1) if not profile_pin.isdigit(): - self.log.error(" - Invalid PIN. Please enter only numbers.", exc_info=False) + self.log.error(" - Invalid PIN. Please enter only numbers.", exc_info=False) sys.exit(1) if len(profile_pin) < 4: - self.log.error(" - PIN is too short. Please enter at least 4 digits.", exc_info=False) + self.log.error(" - PIN is too short. Please enter at least 4 digits.", exc_info=False) sys.exit(1) if len(profile_pin) > 4: - self.log.warning(" - PIN is longer than 4 digits. Using the first 4 digits.") + self.log.warning(" - PIN is longer than 4 digits. Using the first 4 digits.") profile_pin = profile_pin[:4] except KeyboardInterrupt: - self.log.error("\n - PIN input cancelled by user.", exc_info=False) + self.log.error("\n - PIN input cancelled by user.", exc_info=False) sys.exit(1) - switch_profile_data = self._switch_profile(target_profile['id'], auth_headers, profile_pin) + switch_profile_data = self._switch_profile(target_profile["id"], auth_headers, profile_pin) self._apply_new_tokens(switch_profile_data["token"]) - - def _refresh(self) -> str: - cache = self.cache.get(f"tokens_{self.region}_{self.credentials.sha1}") + + def _refresh(self) -> None: + cache = self.cache.get(self.cache_key) if not cache.expired: self.log.debug(f" + Token is valid until: {datetime.fromtimestamp(cache.expiration.timestamp()).strftime('%Y-%m-%d %H:%M:%S')}") - return self.session.headers.get('Authorization', 'Bearer ').split(' ')[1] + return self.log.warning(" + Token expired. Refreshing...") try: @@ -356,31 +377,26 @@ class DSNP(Service): self._apply_new_tokens(refreshed_data["token"]) except Exception as _: raise Exception("Refresh Token Expired") - - def _apply_new_tokens(self, token_data: dict) -> str: + + def _apply_new_tokens(self, token_data: dict) -> None: self.account_tokens = token_data bearer = self.account_tokens["accessToken"] if not bearer: - self.log.error("Invalid token data: accessToken not found.", exc_info=False) - sys.exit(1) - self.session.headers.update({'Authorization': f'Bearer {bearer}'}) + raise ValueError("Invalid token data: accessToken not found.") + self.session.headers.update({"Authorization": f"Bearer {bearer}"}) - expires_in = self.account_tokens["expiresIn"] or 3600 - cache = self.cache.get(f"tokens_{self.region}_{self.credentials.sha1}") + expires_in = self.account_tokens["expiresIn"] + cache = self.cache.get(self.cache_key) cache.set(self.account_tokens, expires_in - 60) - self.log.debug(f" + New Token is valid until: {datetime.fromtimestamp(cache.expiration.timestamp()).strftime('%Y-%m-%d %H:%M:%S')}") + self.log.debug(f" + New Token is valid until: {datetime.fromtimestamp(cache.expiration.timestamp()).strftime('%Y-%m-%d %H:%M:%S')}") + return - return bearer - def search(self) -> Generator[SearchResult, None, None]: - params = {"query": self.title} - endpoint = self._href(self.prod_config["services"]["explore"]["client"]["endpoints"]["search"]["href"]) - data = self._request("GET", endpoint, params=params)["data"]["page"] - if not data.get("containers"): + data = self._get_search(self.title) + if not data["page"].get("containers"): return - - results = data["containers"][0]["items"] + results = data["page"]["containers"][0]["items"] for result in results: entity = "entity-" + result["id"] yield SearchResult( @@ -388,31 +404,31 @@ class DSNP(Service): title=result["visuals"]["title"], description=result["visuals"]["description"]["brief"], label=result["visuals"]["metastringParts"]["releaseYearRange"]["startYear"], - url=f"https://www.disneyplus.com/browse/{entity}", + url=f"https://disneyplus.com/browse/{entity}", ) def get_titles(self) -> Titles_T: - if not self.extras: - try: - content_info = self._get_deeplink(self.title_id) - content_type = content_info["data"]["deeplink"]["actions"][0]["contentType"] - except Exception as e: - try: - actions_info = self._get_deeplink_last(self.title_id) - if actions_info["data"]["deeplink"]["actions"][0]["type"] == "browse": - info_block = base64.b64decode(actions_info["data"]["deeplink"]["actions"][0]["infoBlock"]) - if b"movie" in info_block: - content_type = "movie" - elif b"series" in info_block: - content_type = "series" - else: - content_type = "other" - self.log.warning(" - The content is not standard. however, it tries to look up the data.") - except Exception as e: - self.log.error(f" - Failed to determine content type via deeplink ({e}).", exc_info=False) - sys.exit(1) - else: - content_type = "extras" + try: + if not self.title_id.startswith("entity-"): + actions_info = self._get_deeplink(self.title_id, action="playback") + self.title_id = actions_info["data"]["deeplink"]["actions"][1]["pageId"] + + if not self.extras: + actions_info = self._get_deeplink(self.title_id) + if actions_info["data"]["deeplink"]["actions"][0]["type"] == "browse": + info_block = base64.b64decode(actions_info["data"]["deeplink"]["actions"][0]["infoBlock"]) + if b"movie" in info_block: + content_type = "movie" + elif b"series" in info_block: + content_type = "series" + else: + content_type = "other" + self.log.warning(" - The content is not standard. however, it tries to look up the data.") + else: + content_type = "extras" + except Exception as e: + self.log.error(f" - Failed to determine content type via deeplink ({e}).", exc_info=False) + sys.exit(1) self.log.debug(f" + Content Type: {content_type.upper()}") page = self._get_page(self.title_id) @@ -424,31 +440,34 @@ class DSNP(Service): if content_type != "extras": playback_action = next( (x for x in page["actions"] if x["type"] == "playback"), - None + None, ) if not playback_action: - self.log.error(f" - No content is available. (Playback action not found)", exc_info=False) + self.log.error(" - No content is available. (Playback action not found)", exc_info=False) sys.exit(1) - lang_data = self._get_original_lang(playback_action["availId"]) - player_exp = lang_data["data"]["playerExperience"] + data = self._get_player_experience(playback_action["availId"]) + player_exp = data["data"]["playerExperience"] orig_lang = player_exp.get("originalLanguage") or player_exp.get("targetLanguage") or "en" - self.log.debug(f' + Original Language: {orig_lang}') - + self.log.debug(f" + Original Language: {orig_lang}") + if content_type in ("movie", "other"): - return Movies([ - Movie( - id_=page["id"], - service=self.__class__, - name=page["visuals"]["title"], - year=year, - language=Language.get(orig_lang), - data=page - ) - ]) + return Movies( + [ + Movie( + id_=page["id"], + service=self.__class__, + name=page["visuals"]["title"], + description=page["visuals"]["description"]["full"], + year=year, + language=Language.get(orig_lang), + data=page, + ) + ] + ) elif content_type == "series": return Series(self._get_series(page, year, orig_lang)) - + elif content_type == "extras": return Series(self._get_extras(page, year)) @@ -460,9 +479,9 @@ class DSNP(Service): container = next(x for x in page["containers"] if x["type"] == "episodes") season_ids = [s["id"] for s in container["seasons"]] - episodes : List[Episode] = [] + episodes: List[Episode] = [] for season_id in season_ids: - episodes_data = self._get_episodes_data(season_id) + episodes_data = self._get_episodes_data(season_id) for ep in episodes_data: if ep["type"] != "view": @@ -476,53 +495,58 @@ class DSNP(Service): season=int(ep["visuals"]["seasonNumber"]), number=int(ep["visuals"]["episodeNumber"]), name=ep["visuals"]["episodeTitle"], + description=ep["visuals"]["description"]["full"], year=year, language=Language.get(orig_lang), - data=ep + data=ep, ) ) return episodes - + def _get_extras(self, page: dict, year: int) -> Series: - extras_containers = [ - x for x in page["containers"] - if x["type"] == "set" and x["style"]["name"] == "standard_compact_list" - ] + extras_containers = [x for x in page["containers"] if x["type"] == "set" and x["style"]["name"] == "standard_compact_list"] if not extras_containers: self.log.error(" - No extras found.", exc_info=False) sys.exit(1) - extras_episodes : List[Episode] = [] + extras_episodes: List[Episode] = [] ep_count = 1 first_item = extras_containers[0]["items"][0] - first_action = next((x for x in first_item["actions"] if x["type"] in ("playback", "trailer")), None) + first_action = next( + (x for x in first_item["actions"] if x["type"] in ("playback", "trailer")), + None, + ) if first_action: - lang_data = self._get_original_lang(first_action["availId"]) - player_exp = lang_data["data"]["playerExperience"] + data = self._get_player_experience(first_action["availId"]) + player_exp = data["data"]["playerExperience"] orig_lang = player_exp.get("originalLanguage") or player_exp.get("targetLanguage") or "en" - self.log.debug(f' + Original Language: {orig_lang}') + self.log.debug(f" + Original Language: {orig_lang}") for container in extras_containers: items = container["items"] for item in items: if item["type"] == "view": - action = next((x for x in item["actions"] if x["type"] in ("playback", "trailer")), None) - + action = next( + (x for x in item["actions"] if x["type"] in ("playback", "trailer")), + None, + ) + if action: extras_episodes.append( Episode( id_=item["id"], service=self.__class__, title=page["visuals"]["title"], - season=0, # Special + season=0, # Special number=ep_count, name=item["visuals"]["title"], + description=item["visuals"]["description"]["full"], year=year, language=Language.get(orig_lang), - data=item + data=item, ) ) ep_count += 1 @@ -534,141 +558,91 @@ class DSNP(Service): return extras_episodes def get_tracks(self, title: Title_T) -> Tracks: - playback = next(x for x in title.data["actions"] if x.get("type") == "playback") + playback = next(x for x in title.data["actions"] if x["type"] == "playback") media_id = playback["resourceId"] or None if not media_id: - self.log.error(" - Failed to get media ID for playback info", exc_info=False) + self.log.error("Failed to get media ID for playback info", exc_info=False) sys.exit(1) + scenario = "ctr-regular" if self.is_l3 else "ctr-high" # cbcs-high - scenario = "ctr-regular" if self.is_l3 else "ctr-high" # cbcs-high + self._refresh() # Safe Access - self.log.debug(f"Playback Scenario: {scenario}") - self.log.debug(f"Media ID: {media_id}") + self.log.debug(f" + Playback Scenario: {scenario}") + self.log.debug(f" + Media ID: {media_id}") - self._refresh() # Safe Access - - if Video.Range.HYBRID in self.range[0] and not self.is_l3: - self.log.warning("DV+HDR Multi-range requested.") - - self.log.info(" + Fetching Dolby Vision tracks...") - tracks = self._fetch_manifest_tracks(title, media_id, scenario, ["DOLBY_VISION"]) - - self.log.info(" + Fetching HDR10 tracks...") - hdr_tracks_temp = self._fetch_manifest_tracks(title, media_id, scenario, ["HDR10"]) # HDR10PLUS - - tracks.add(hdr_tracks_temp, warn_only=True) - else: - video_ranges = [] - if not self.is_l3: - if Video.Range.DV in self.range[0]: - video_ranges = ["DOLBY_VISION"] - elif Video.Range.HDR10 in self.range[0] or Video.Range.HDR10P in self.range[0]: - video_ranges = ["HDR10"] # HDR10PLUS - - tracks = self._fetch_manifest_tracks(title, media_id, scenario, video_ranges or None) - - tracks.add(self._get_thumbnail(title)) - return self._post_process_tracks(tracks) - - def _fetch_manifest_tracks(self, title: Title_T, media_id: str, scenario: str, video_ranges: List[str] = None) -> Tracks: - attributes = { - "codecs": { - "supportsMultiCodecMaster": False, - "video": ["h.264"] - }, - "protocol": "HTTPS", - "frameRates": [60], - "assetInsertionStrategies": { - "point": "SGAI", # Server-Guided Ad Insertion - "range": "SGAI" # Server-Guided Ad Insertion - }, - "playbackInitiationContext": "ONLINE", - "slugDuration": "SLUG_500_MS", # SLUG_1000_MS, SLUG_750_MS ? - "maxSlideDuration": "4_HOUR" # 15_MIN ? - } - - if self.is_l3: - attributes["resolution"] = {"max": ["1280x720"]} - else: - attributes["resolution"] = {"max": ["3840x2160"]} - - if self.vcodec == Video.Codec.HEVC: - attributes["codecs"]["video"] = ["h.264", "h.265"] - - attributes["audioTypes"] = ["ATMOS", "DTS_X"] - - if video_ranges: - attributes["videoRanges"] = video_ranges - - payload = { - "playbackId": media_id, - "playback": { - "attributes": attributes - } - } - self.playback_data[title.id] = self._get_playback(scenario, payload) - manifest_url = self.playback_data[title.id]["sources"][0]['complete']['url'] + self.playback_data[title.id] = self._get_playback(scenario, media_id) + manifest_url = self.playback_data[title.id]["sources"][0]["complete"]["url"] + if self.tier_unlimits: + parsed_url = urlparse(manifest_url) + manifest_url = urlunparse(parsed_url._replace(query="")) # Delete tier params self.log.debug(f" + Manifest URL: {manifest_url}") - return HLS.from_url(url=manifest_url, session=self.session).to_tracks(title.language) - - def _get_thumbnail(self, title: Title_T) -> Attachment: - if type(title) == Movie: - thumbnail_id = title.data["visuals"]["artwork"]["standard"]["background"]["1.78"]["imageId"] - elif type(title) == Episode: - thumbnail_id = title.data["visuals"]["artwork"]["standard"]["thumbnail"]["1.78"]["imageId"] + tracks = HLS.from_url(url=manifest_url, session=self.session).to_tracks(title.language) + + artwork_type = "background" if isinstance(title, Movie) else "thumbnail" + thumbnail_id = title.data["visuals"]["artwork"]["standard"][artwork_type]["1.78"]["imageId"] thumbnail_url = self._href( self.prod_config["services"]["ripcut"]["client"]["endpoints"]["mainCompose"]["href"], version="v2", partnerId="disney", - imageId=thumbnail_id + imageId=thumbnail_id, ) - return Attachment.from_url(url=thumbnail_url, name=thumbnail_id, mime_type="image/png") + tracks.add(Attachment.from_url(url=thumbnail_url, name="thumbnail", description=thumbnail_id, mime_type="image/png", session=self.session)) - def _post_process_tracks(self, tracks: Tracks) -> Tracks: + return self._post_process_tracks(title, tracks) + + def _post_process_tracks(self, title: Title_T, tracks: Tracks) -> Tracks: for track in tracks: + if isinstance(track, Video) and isinstance(title, Movie): + is_imax_content = any(flag["value"] == "imax_enhanced" for flag in title.data["visuals"]["metastringParts"]["audioVisual"]["flags"]) + is_imax_video = float(self.playback_data[title.id]["attributes"]["imageAspectRatio"]) == 1.9 + if is_imax_content and is_imax_video: + track.edition = ["IMAX"] if isinstance(track, (Audio, Subtitle)): - track.name = "[Original]" if track.is_original_lang else None + track.name = track.language.display_name() + track.name += " [Original]" if track.is_original_lang else "" for audio in tracks.audio: bitrate_match = re.search(r"(?<=composite_)\d+|\d+(?=_(?:hdri|complete))|(?<=-)\d+(?=K/)", as_list(audio.url)[0]) if bitrate_match: audio.bitrate = int(bitrate_match.group()) * 1000 if audio.bitrate == 1_000_000: - audio.bitrate = 768_000 # DSNP lies about the Atmos bitrate + audio.bitrate = 768_000 # DSNP lies about the Atmos bitrate if audio.channels == 6.0: audio.channels = 5.1 - if audio.channels == 10.0: # DTS-UHD - audio.channels = "5.1.4" # Unshackle does not recommend + if audio.channels == 10.0: # DTS-UHD + audio.channels = "5.1.4" # Unshackle does not recommend audio.codec = Audio.Codec.DTS - audio.drm = None + audio.drm = None # It need HW decording - for subtitle in tracks.subtitles: - subtitle.codec = Subtitle.Codec.WebVTT + # No longer supported + tracks.audio = [audio for audio in tracks.audio if not (audio.codec == Audio.Codec.EC3 and audio.channels == 2.0)] return tracks - + def get_chapters(self, title: Title_T) -> Chapters: try: editorial = self.playback_data[title.id]["editorial"] if not editorial: return Chapters() - + LABEL_MAP = { "intro_start": "intro_start", "intro_end": "intro_end", "recap_start": "recap_start", "recap_end": "recap_end", - "FFER": "recap_start", # First Frame Episode Recap - "LFER": "recap_end", # Last Frame Episode Recap - "FFEI": "intro_start", # First Frame Episode Intro - "LFEI": "intro_end", # Last Frame Episode Intro - "FFEC": "credits_start", # First Frame End Credits - "LFEC": "lfec_marker", # Last Frame End Credits + "FFER": "recap_start", # First Frame Episode Recap + "LFER": "recap_end", # Last Frame Episode Recap + "FFEI": "intro_start", # First Frame Episode Intro + "LFEI": "intro_end", # Last Frame Episode Intro + "FFEC": "credits_start", # First Frame End Credits + "LFEC": "lfec_marker", # Last Frame End Credits + "FFCB": None, # First Frame Credits Bumper + "LFCB": None, # Last Frame Credits Bumper "up_next": None, "tag_start": None, "tag_end": None, } - + NAME_MAP = { "recap_start": "Recap", "recap_end": "Scene", @@ -688,11 +662,12 @@ class DSNP(Service): total_runtime = title.data["visuals"]["metastringParts"]["runtime"]["runtimeMs"] for group, times in grouped.items(): - if not times: continue + if not times: + continue timestamp = min(times) if "start" in group else max(times) if "end" in group else times[0] name = NAME_MAP.get(group) - + if group == "lfec_marker" and (total_runtime - timestamp) > 5000: name = "Scene" @@ -702,7 +677,7 @@ class DSNP(Service): raw_chapters.sort(key=lambda x: x[0]) unique_chapters = [] seen_ms = set() - + for ms, name in raw_chapters: if ms not in seen_ms: unique_chapters.append({"ms": ms, "name": name}) @@ -725,10 +700,10 @@ class DSNP(Service): chapters.append( Chapter( timestamp=float(time_sec), - name=chapter_title if chapter_title != "Scene" else None + name=chapter_title if chapter_title != "Scene" else None, ) ) - + return chapters except Exception as e: @@ -741,84 +716,110 @@ class DSNP(Service): return self.config["certificate"] def get_widevine_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[Union[bytes, str]]: - self._refresh() # Safe Access + self._refresh() # Safe Access endpoint = self.prod_config["services"]["drm"]["client"]["endpoints"]["widevineLicense"]["href"] headers = {"Content-Type": "application/octet-stream"} - - try: - res = self.session.post(endpoint, headers=headers, data=challenge) - res.raise_for_status() - except Exception as e: - self.log.error(f"License request failed: {e}", exc_info=False) - sys.exit(1) + res = self.session.post(endpoint, headers=headers, data=challenge) + if not res.ok: + try: + error = (d := res.json()).get("errors", [d])[0] + raise ConnectionError(error) + except (ValueError, TypeError, KeyError): + res.raise_for_status() return res.content - def get_playready_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[bytes]: - self._refresh() # Safe Access + def get_playready_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[Union[bytes, str]]: + self._refresh() # Safe Access endpoint = self.prod_config["services"]["drm"]["client"]["endpoints"]["playReadyLicense"]["href"] headers = { "Accept": "application/xml, application/vnd.media-service+json; version=2", "Content-Type": "text/xml; charset=utf-8", - "SOAPAction": "http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense" + "SOAPAction": "http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense", } - try: - res = self.session.post(endpoint, headers=headers, data=challenge) - res.raise_for_status() - except Exception as e: - self.log.error(f"License request failed: {e}", exc_info=False) - sys.exit(1) + res = self.session.post(endpoint, headers=headers, data=challenge) + if not res.ok: + try: + error = (d := res.json()).get("errors", [d])[0] + raise ConnectionError(error) + except (ValueError, TypeError, KeyError): + res.raise_for_status() return res.content - - def _get_deeplink(self, ref_id: str) -> dict: - endpoint = self._href( - self.prod_config["services"]["content"]["client"]["endpoints"]["getDeeplink"]["href"], - refIdType="deeplinkId", - refId=ref_id - ) - data = self._request("GET", endpoint) - return data - - def _get_deeplink_last(self, ref_id: str) -> dict: + + def _get_search(self, title: str): + params = {"query": title} + endpoint = self._href(self.prod_config["services"]["explore"]["client"]["endpoints"]["search"]["href"]) + data = self._request("GET", endpoint, params=params) + return data["data"] + + def _get_deeplink(self, ref_id: str, action: str = None) -> dict: endpoint = self._href(self.prod_config["services"]["explore"]["client"]["endpoints"]["getDeeplink"]["href"]) params = { - "refIdType" : "deeplinkId", - "refId" : ref_id + "refIdType": "deeplinkId", + "refId": ref_id, } - data = self._request("GET", endpoint, params=params) + if action: + params["action"] = action + + data = self._request("GET", endpoint, params=params) return data def _get_page(self, title_id: str) -> dict: - endpoint = self._href( - self.prod_config["services"]["explore"]["client"]["endpoints"]["getPage"]["href"], - pageId=title_id - ) - data = self._request("GET", endpoint, params={"disableSmartFocus": "true", "limit": 999}) + endpoint = self._href(self.prod_config["services"]["explore"]["client"]["endpoints"]["getPage"]["href"], pageId=title_id) + params = { + "disableSmartFocus": "true", + "limit": 999, + } + data = self._request("GET", endpoint, params=params) return data["data"]["page"] - def _get_original_lang(self, availId: str) -> dict: - endpoint = self._href( - self.prod_config["services"]["explore"]["client"]["endpoints"]["getPlayerExperience"]["href"], - availId=availId - ) - data = self._request("GET", endpoint) - return data - - def _get_episodes_data(self, season_id: str) -> List[dict]: - endpoint = self._href( - self.prod_config["services"]["explore"]["client"]["endpoints"]["getSeason"]["href"], - seasonId=season_id - ) - data = self._request("GET", endpoint, params={'limit': 999})["data"]["season"]["items"] + def _get_player_experience(self, availId: str) -> dict: + endpoint = self._href(self.prod_config["services"]["explore"]["client"]["endpoints"]["getPlayerExperience"]["href"], availId=availId) + data = self._request("GET", endpoint) return data - def _get_playback(self, scenario: str, payload: dict) -> dict: - endpoint = self._href( - self.prod_config["services"]["media"]["client"]["endpoints"]["mediaPayload"]["href"], - scenario=scenario - ) + def _get_episodes_data(self, season_id: str) -> List[dict]: + endpoint = self._href(self.prod_config["services"]["explore"]["client"]["endpoints"]["getSeason"]["href"], seasonId=season_id) + params = {"limit": 999} + data = self._request("GET", endpoint, params=params)["data"]["season"]["items"] + return data + + def _get_playback(self, scenario: str, media_id: str) -> dict: + attributes = { + "codecs": { + "supportsMultiCodecMaster": not self.is_l3, + "video": ["h.264"] if self.is_l3 else ["h.264", "h.265"], + }, + "protocol": "HTTPS", + "frameRates": [60], + "assetInsertionStrategies": { + "point": "SGAI", # Server-Guided Ad Insertion + "range": "SGAI", # Server-Guided Ad Insertion + }, + "playbackInitiationContext": "ONLINE", + "slugDuration": "SLUG_500_MS", # SLUG_1000_MS, SLUG_750_MS ? + "maxSlideDuration": "4_HOUR", # 15_MIN ? + "resolution": { + "max": ["1280x720"] if self.is_l3 else ["3840x2160"], + }, + **( + { + "videoRanges": ["DOLBY_VISION", "HDR10"], + "audioTypes": ["ATMOS", "DTS_X"], + } + if not self.is_l3 + else {} + ), + } + endpoint = self._href(self.prod_config["services"]["media"]["client"]["endpoints"]["mediaPayload"]["href"], scenario=scenario) headers = { "Accept": "application/vnd.media-service+json", - "X-DSS-Feature-Filtering": "true" + "X-DSS-Feature-Filtering": "true", + } + payload = { + "playbackId": media_id, + "playback": { + "attributes": attributes, + }, } data = self._request("POST", endpoint, headers=headers, payload=payload) return data["stream"] @@ -827,33 +828,33 @@ class DSNP(Service): endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["registerDevice"]["href"] headers = { "Authorization": self.config["bamsdk"]["api_key"], - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "variables": { "registerDevice": { - "applicationRuntime": self.config["device"]["applicationRuntime"], + "applicationRuntime": self.config["device"]["applicationRuntime"], "attributes": { "osDeviceIds": [ { "identifier": android_id, - "type": "android.vendor.id" + "type": "android.vendor.id", }, { "identifier": drm_id, - "type": "android.drm.id" - } + "type": "android.drm.id", + }, ], "operatingSystem": self.config["device"]["operatingSystem"], - "operatingSystemVersion": self.config["device"]["operatingSystemVersion"] + "operatingSystemVersion": self.config["device"]["operatingSystemVersion"], }, - "deviceFamily": self.config["device"]["family"], - "deviceLanguage": self.config["device"]["deviceLanguage"], + "deviceFamily": self.config["device"]["family"], + "deviceLanguage": self.config.get("preferences", {}).get("language", "en"), "deviceProfile": self.config["device"]["profile"], "devicePlatformId": self.config["device"]["platform_id"], } }, - "query": queries.REGISTER_DEVICE + "query": queries.REGISTER_DEVICE, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["extensions"]["sdk"]["token"]["accessToken"] @@ -862,54 +863,54 @@ class DSNP(Service): endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers = { "Authorization": token, - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "operationName": "check", "variables": { - "email": email + "email": email, }, - "query": queries.CHECK_EMAIL + "query": queries.CHECK_EMAIL, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["data"]["check"]["operations"][0] - + def _login_with_password(self, email: str, password: str, token: str) -> str: endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers = { "Authorization": token, - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "operationName": "login", "variables": { "input": { "email": email, - "password": password + "password": password, }, "includeIdentity": True, - "includeAccountConsentToken": True + "includeAccountConsentToken": True, }, - "query": queries.LOGIN + "query": queries.LOGIN, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["extensions"]["sdk"] - + def _request_otp(self, email: str, token: str) -> dict: endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers = { "Authorization": token, - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "operationName": "requestOtp", "variables": { "input": { "email": email, - "reason": "Login" - } + "reason": "Login", + }, }, - "query": queries.REQUESET_OTP + "query": queries.REQUESET_OTP, } data = self._request("POST", endpoint, payload=payload, headers=headers) if not data["data"]["requestOtp"]["accepted"]: @@ -920,56 +921,57 @@ class DSNP(Service): endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers = { "Authorization": token, - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "operationName": "authenticateWithOtp", "variables": { "input": { "email": email, - "passcode": otp - } + "passcode": otp, + }, }, - "query": queries.LOGIN_OTP + "query": queries.LOGIN_OTP, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["data"]["authenticateWithOtp"]["actionGrant"] - + def _login_with_auth_action(self, auth_action: str, token: str) -> dict: endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers = { "Authorization": token, - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "operationName": "loginWithActionGrant", "variables": { "input": { - "actionGrant": auth_action + "actionGrant": auth_action, }, - "includeAccountConsentToken": True + "includeAccountConsentToken": True, }, - "query": queries.LOGIN_ACTION_GRANT + "query": queries.LOGIN_ACTION_GRANT, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["extensions"]["sdk"] - + def _get_account_info(self, headers: dict = {}) -> dict: endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers.update({"X-BAMSDK-Platform-Id": self.config["device"]["platform_id"]}) payload = { "operationName": "me", "variables": { - "includeAccountConsentToken": True + "includeAccountConsentToken": True, }, - "query": queries.ME + "query": queries.ME, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["data"]["me"] def _switch_profile(self, profile_id: str, headers: dict, pin: str = None): profile_input = {"profileId": profile_id} - if pin: profile_input["entryPin"] = pin + if pin: + profile_input["entryPin"] = pin endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] headers.update({"X-BAMSDK-Platform-Id": self.config["device"]["platform_id"]}) @@ -978,9 +980,9 @@ class DSNP(Service): "variables": { "input": profile_input, "includeIdentity": True, - "includeAccountConsentToken": True + "includeAccountConsentToken": True, }, - "query": queries.SWITCH_PROFILE + "query": queries.SWITCH_PROFILE, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["extensions"]["sdk"] @@ -989,16 +991,16 @@ class DSNP(Service): endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["refreshToken"]["href"] headers = { "Authorization": self.config["bamsdk"]["api_key"], - "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"] + "X-BAMSDK-Platform-Id": self.config["device"]["platform_id"], } payload = { "operationName": "refreshToken", "variables": { "refreshToken": { - "refreshToken": refresh_token - } + "refreshToken": refresh_token, + }, }, - "query": queries.REFRESH_TOKEN + "query": queries.REFRESH_TOKEN, } data = self._request("POST", endpoint, payload=payload, headers=headers) return data["extensions"]["sdk"] @@ -1015,23 +1017,23 @@ class DSNP(Service): "osDeviceIds": [ { "identifier": android_id, - "type": "android.vendor.id" + "type": "android.vendor.id", }, { "identifier": drm_id, - "type": "android.drm.id" - } - ] + "type": "android.drm.id", + }, + ], } }, - "query": queries.UPDATE_DEVICE + "query": queries.UPDATE_DEVICE, } data = self._request("POST", endpoint, payload=payload, headers=headers) if data["data"]["updateDeviceOperatingSystem"]["accepted"]: return data["extensions"]["sdk"] else: - self.log.warning(" - Failed to update Device Operating System.") + self.log.warning(" - Failed to update Device Operating System.") def _set_imax_preference(self, enabled: bool) -> str: endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] @@ -1042,17 +1044,17 @@ class DSNP(Service): "input": { "imaxEnhancedVersion": enabled, }, - "includeProfile": True + "includeProfile": True, }, "query": queries.SET_IMAX, } data = self._request("POST", endpoint, payload=payload, headers=headers) - + if data["data"]["updateProfileImaxEnhancedVersion"]["accepted"]: self.log.info(f" + Updated IMAX Enhanced preference: {enabled}") return data["extensions"]["sdk"] else: - self.log.warning(" - Failed to set IMAX preference.") + self.log.warning(" - Failed to update IMAX preference.") def _set_remastered_ar_preference(self, enabled: bool) -> str: endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] @@ -1063,35 +1065,58 @@ class DSNP(Service): "input": { "remasteredAspectRatio": enabled, }, - "includeProfile": True + "includeProfile": True, }, "query": queries.SET_REMASTERED_AR, } data = self._request("POST", endpoint, payload=payload, headers=headers) - + if data["data"]["updateProfileRemasteredAspectRatio"]["accepted"]: self.log.info(f" + Updated Remastered Aspect Ratio preference: {enabled}") return data["extensions"]["sdk"] else: - self.log.warning(" - Failed to set Remastered Aspect Ratio preference.") + self.log.warning(" - Failed to update Remastered Aspect Ratio preference.") + + def _set_language_preference(self, lang: str) -> str: + endpoint = self.prod_config["services"]["orchestration"]["client"]["endpoints"]["query"]["href"] + headers = {"X-BAMSDK-Platform-Id": self.config["device"]["platform_id"]} + payload = { + "operationName": "updateProfileAppLanguage", + "variables": { + "input": { + "profileId": self.active_session["account"]["activeProfile"]["id"], + "appLanguage": lang, + }, + "includeProfile": True, + }, + "query": queries.SET_APP_LANGUAGE, + } + data = self._request("POST", endpoint, payload=payload, headers=headers) + + if data["data"]["updateProfileAppLanguage"]["accepted"]: + self.log.info(f" + Updated App Language preference: {Language.get(lang).display_name()}") + return data["extensions"]["sdk"] + else: + self.log.warning(" - Failed to update App Language preference") def _href(self, href: str, **kwargs: Any) -> str: _args = {"version": self.config["bamsdk"]["explore_version"]} _args.update(**kwargs) return href.format(**_args) - + def _request(self, method: str, endpoint: str, params: dict = None, headers: dict = None, payload: dict = None) -> Any[dict | str]: _headers = self.session.headers.copy() - if headers: _headers.update(headers) - _headers.update({ - "X-BAMSDK-Transaction-ID": str(uuid.uuid4()), - "X-Request-ID": str(uuid.uuid4()) - }) + if headers: + _headers.update(headers) + _headers.update( + { + "X-BAMSDK-Transaction-ID": str(uuid.uuid4()), + "X-Request-ID": str(uuid.uuid4()), + } + ) - req = Request(method, endpoint, headers=_headers, params=params, json=payload) - prepped = self.session.prepare_request(req) try: - res = self.session.send(prepped) + res = self.session.request(method=method, url=endpoint, headers=_headers, params=params, json=payload) res.raise_for_status() data = res.json() if data.get("errors"): @@ -1113,4 +1138,4 @@ class DSNP(Service): raise e else: self.log.error(f"API Request failed: {e}", exc_info=False) - sys.exit(1) \ No newline at end of file + sys.exit(1) diff --git a/packages/envied/src/envied/services/DSNP/config.yaml b/packages/envied/src/envied/services/DSNP/config.yaml index 9540ddc..8a98da0 100644 --- a/packages/envied/src/envied/services/DSNP/config.yaml +++ b/packages/envied/src/envied/services/DSNP/config.yaml @@ -9,17 +9,17 @@ certificate: | Fp3jPq7R0qyt5P6fU5NshbLh5VKcnQvwg62BuKsdwV9u4NV36b2a546hGRl/GBneQ+QDA7NRrgITR33Sz02Oq8yJr3sy24GfZRTbtLJ4qiWkjtw== ## config ( {configVersion}/{clientId}/{deviceFamily}/{sdkVersion}/{applicationRuntime}/{deviceProfile}/{environment} ) ## -# Browser (windows, chrome) : /browser/v34.2/windows/chrome/prod.json -# Android Phone : /android/v15.0.0/google/handset/prod.json -# Android TV : /android/v15.0.0/google/tv/prod.json -# Amazon Fire TV : /android/v15.0.0/amazon/tv/prod.json +# Browser (windows, chrome) : /browser/v34.4/windows/chrome/prod.json +# Android Phone : /android/v16.0.0/google/handset/prod.json +# Android TV : /android/v16.0.0/google/tv/prod.json +# Amazon Fire TV : /android/v16.0.0/amazon/tv/prod.json endpoints: - config: "https://client-sdk-configs.bamgrid.com/bam-sdk/v7.0/disney-svod-3d9324fc/android/v15.0.0/google/tv/prod.json" + config: "https://client-sdk-configs.bamgrid.com/bam-sdk/v7.0/disney-svod-3d9324fc/android/v16.0.0/google/tv/prod.json" ## user_agent (okhttp/5.0.0-alpha.14) ## -# android-phone : BAMSDK/v15.0.1 (disney-svod-3d9324fc 4.21.1+rc3-2026.01.06.0; v7.0/v15.0.0; android; phone) -# android-tv : BAMSDK/v15.0.1 (disney-svod-3d9324fc 4.21.1+rc3-2026.01.06.0; v7.0/v15.0.0; android; tv) +# android-phone : BAMSDK/v16.0.0 (disney-svod-3d9324fc 26.0.2+rc1-2026.01.29.0; v7.0/v16.0.0; android; phone) +# android-tv : BAMSDK/v16.0.0 (disney-svod-3d9324fc 26.0.2+rc1-2026.01.29.0; v7.0/v16.0.0; android; tv) ## api_key ## # browser : ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84 @@ -30,11 +30,11 @@ endpoints: # android : 624b805dafc5c73635b1a216 bamsdk: - sdk_version: "15.0.1" - application_version: "4.21.1+rc3-2026.01.06.0" + sdk_version: "16.0.0" + application_version: "26.0.2+rc1-2026.01.29.0" explore_version: "v1.13" client: "disney-svod-3d9324fc" - user_agent: "BAMSDK/v15.0.1 (disney-svod-3d9324fc 4.21.1+rc3-2026.01.06.0; v7.0/v15.0.0; android; tv)" + user_agent: "BAMSDK/v16.0.0 (disney-svod-3d9324fc 26.0.2+rc1-2026.01.29.0; v7.0/v16.0.0; android; tv)" api_key: "ZGlzbmV5JmFuZHJvaWQmMS4wLjA.bkeb0m230uUhv8qrAXuNu39tbE_mD5EEhM_NAcohjyA" yp_service_id: "624b805dafc5c73635b1a216" @@ -46,9 +46,10 @@ device: applicationRuntime: "android" operatingSystem: "Android" operatingSystemVersion: "16" - deviceLanguage: "ko" # Device language data independent of account language data # Specifies the index of the profile to use. (0 = first profile, 1 = second profile, etc.) -# Automatically select a profile when commenting. -# profile: -# index: 0 +# Automatically select a profile or language when commenting. +# Language setting is only available in languages supported by Disney+. +# preferences: +# profile: 0 +# language: "ko" diff --git a/packages/envied/src/envied/services/DSNP/queries.py b/packages/envied/src/envied/services/DSNP/queries.py index f8ec5ba..4ebf957 100644 --- a/packages/envied/src/envied/services/DSNP/queries.py +++ b/packages/envied/src/envied/services/DSNP/queries.py @@ -9,5 +9,6 @@ REGISTER_DEVICE = """mutation ($registerDevice: RegisterDeviceInput!) { register REQUESET_OTP = """mutation requestOtp($input: RequestOtpInput!) { requestOtp(requestOtp: $input) { accepted } }""" SET_IMAX = """mutation updateProfileImaxEnhancedVersion($input: UpdateProfileImaxEnhancedVersionInput!, $includeProfile: Boolean!) { updateProfileImaxEnhancedVersion(updateProfileImaxEnhancedVersion: $input) { accepted profile @include(if: $includeProfile) { __typename ...profileGraphFragment } } } fragment profileGraphFragment on Profile { id name personalInfo { dateOfBirth gender } maturityRating { ratingSystem ratingSystemValues contentMaturityRating maxRatingSystemValue isMaxContentMaturityRating suggestedMaturityRatings { minimumAge maximumAge ratingSystemValue } } isAge21Verified flows { star { eligibleForOnboarding isOnboarded } personalInfo { eligibleForCollection requiresCollection } } attributes { isDefault kidsModeEnabled languagePreferences { appLanguage playbackLanguage preferAudioDescription preferSDH subtitleLanguage subtitlesEnabled } parentalControls { isPinProtected kidProofExitEnabled liveAndUnratedContent { enabled available } } playbackSettings { autoplay backgroundVideo backgroundAudio prefer133 preferImaxEnhancedVersion } avatar { id userSelected } privacySettings { consents { consentType value } } } }""" SET_REMASTERED_AR = """mutation updateProfileRemasteredAspectRatio($input: UpdateProfileRemasteredAspectRatioInput!, $includeProfile: Boolean!) { updateProfileRemasteredAspectRatio(updateProfileRemasteredAspectRatio: $input) { accepted profile @include(if: $includeProfile) { __typename ...profileGraphFragment } } } fragment profileGraphFragment on Profile { id name personalInfo { dateOfBirth gender } maturityRating { ratingSystem ratingSystemValues contentMaturityRating maxRatingSystemValue isMaxContentMaturityRating suggestedMaturityRatings { minimumAge maximumAge ratingSystemValue } } isAge21Verified flows { star { eligibleForOnboarding isOnboarded } personalInfo { eligibleForCollection requiresCollection } } attributes { isDefault kidsModeEnabled languagePreferences { appLanguage playbackLanguage preferAudioDescription preferSDH subtitleLanguage subtitlesEnabled } parentalControls { isPinProtected kidProofExitEnabled liveAndUnratedContent { enabled available } } playbackSettings { autoplay backgroundVideo backgroundAudio prefer133 preferImaxEnhancedVersion } avatar { id userSelected } privacySettings { consents { consentType value } } } }""" +SET_APP_LANGUAGE = """mutation updateProfileAppLanguage($input: UpdateProfileAppLanguageInput!, $includeProfile: Boolean!) { updateProfileAppLanguage(updateProfileAppLanguage: $input) { accepted profile @include(if: $includeProfile) { __typename ...profileGraphFragment } } } fragment profileGraphFragment on Profile { id name personalInfo { dateOfBirth gender } maturityRating { ratingSystem ratingSystemValues contentMaturityRating maxRatingSystemValue isMaxContentMaturityRating suggestedMaturityRatings { minimumAge maximumAge ratingSystemValue } } isAge21Verified flows { star { eligibleForOnboarding isOnboarded } personalInfo { eligibleForCollection requiresCollection } } attributes { isDefault kidsModeEnabled isGeminiOnboarded profileLinked languagePreferences { appLanguage playbackLanguage preferAudioDescription preferSDH subtitleLanguage subtitlesEnabled } parentalControls { isPinProtected kidProofExitEnabled liveAndUnratedContent { enabled available } } playbackSettings { autoplay backgroundVideo backgroundAudio prefer133 preferImaxEnhancedVersion } avatar { id userSelected } privacySettings { consents { consentType value } } linkedProfile { pinProtected } } }""" SWITCH_PROFILE = """mutation switchProfile($input: SwitchProfileInput!, $includeIdentity: Boolean!, $includeAccountConsentToken: Boolean!) { switchProfile(switchProfile: $input) { account { __typename ...accountGraphFragment } activeSession { __typename ...sessionGraphFragment } identity @include(if: $includeIdentity) { __typename ...identityGraphFragment } } } fragment profileGraphFragment on Profile { id name personalInfo { dateOfBirth gender } maturityRating { ratingSystem ratingSystemValues contentMaturityRating maxRatingSystemValue isMaxContentMaturityRating suggestedMaturityRatings { minimumAge maximumAge ratingSystemValue } } isAge21Verified flows { star { eligibleForOnboarding isOnboarded } personalInfo { eligibleForCollection requiresCollection } } attributes { isDefault kidsModeEnabled languagePreferences { appLanguage playbackLanguage preferAudioDescription preferSDH subtitleLanguage subtitlesEnabled } parentalControls { isPinProtected kidProofExitEnabled liveAndUnratedContent { enabled available } } playbackSettings { autoplay backgroundVideo backgroundAudio prefer133 preferImaxEnhancedVersion } avatar { id userSelected } privacySettings { consents { consentType value } } } } fragment accountGraphFragment on Account { id umpMessages { data { messages { messageId messageSource displayLocations content } } } accountConsentToken @include(if: $includeAccountConsentToken) activeProfile { id umpMessages { data { messages { messageId content } } } } profiles { __typename ...profileGraphFragment } profileRequirements { primaryProfiles { personalInfo { requiresCollection } } secondaryProfiles { personalInfo { requiresCollection } personalInfoJrMode { requiresCollection } } } parentalControls { isProfileCreationProtected } flows { star { isOnboarded } } attributes { email emailVerified userVerified maxNumberOfProfilesAllowed locations { manual { country } purchase { country } registration { geoIp { country } } } } } fragment sessionGraphFragment on Session { sessionId device { id } entitlements experiments { featureId variantId version } features { coPlay download noAds } homeLocation { countryCode adsSupported } inSupportedLocation isSubscriber location { countryCode adsSupported } portabilityLocation { countryCode } preferredMaturityRating { impliedMaturityRating ratingSystem } } fragment identityGraphFragment on Identity { id email repromptSubscriberAgreement attributes { passwordResetRequired } commerce { notifications { subscriptionId type showNotification offerData { productType expectedTransition { date price { amount currency } } cypherKeys { key value type } } currentOffer { offerId price { amount currency frequency } } } } flows { marketingPreferences { isOnboarded eligibleForOnboarding } personalInfo { eligibleForCollection requiresCollection } } personalInfo { dateOfBirth gender } locations { purchase { country } } subscriber { subscriberStatus subscriptionAtRisk overlappingSubscription doubleBilled doubleBilledProviders subscriptions { id groupId state partner isEntitled source { sourceProvider sourceType subType sourceRef } product { id sku name entitlements { id name partner } bundle subscriptionPeriod earlyAccess trial { duration } categoryCodes } stacking { status overlappingSubscriptionProviders previouslyStacked previouslyStackedByProvider } term { purchaseDate startDate expiryDate nextRenewalDate pausedDate churnedDate isFreeTrial } } } consent { id idType token } }""" -UPDATE_DEVICE = """mutation updateDeviceOperatingSystem($updateDeviceOperatingSystem: UpdateDeviceOperatingSystemInput!) {updateDeviceOperatingSystem(updateDeviceOperatingSystem: $updateDeviceOperatingSystem) {accepted}}""" \ No newline at end of file +UPDATE_DEVICE = """mutation updateDeviceOperatingSystem($updateDeviceOperatingSystem: UpdateDeviceOperatingSystemInput!) {updateDeviceOperatingSystem(updateDeviceOperatingSystem: $updateDeviceOperatingSystem) {accepted}}""" diff --git a/packages/envied/src/envied/services/README.md b/packages/envied/src/envied/services/README.md index 1393480..bf651bd 100644 --- a/packages/envied/src/envied/services/README.md +++ b/packages/envied/src/envied/services/README.md @@ -11,7 +11,7 @@ directories: ``` See help text for each service: -`unshackle dl SERVICE --help` +`envied dl SERVICE --help` ## Notes: Some versions of the dependencies work better than others. These are the recommended versions as of 25/11/11: diff --git a/packages/envied/src/envied/services/RTDE/__init__.py b/packages/envied/src/envied/services/RTDE/__init__.py new file mode 100644 index 0000000..789baf2 --- /dev/null +++ b/packages/envied/src/envied/services/RTDE/__init__.py @@ -0,0 +1,472 @@ +import base64 +import hashlib +import json +import os +import re +import secrets +import time +import uuid +from http.cookiejar import CookieJar +from pathlib import Path +from typing import Optional, Union +from urllib.parse import parse_qs, urlparse + +import click +from langcodes import Language + +from envied.core.config import config +from envied.core.constants import AnyTrack +from envied.core.credential import Credential +from envied.core.manifests import DASH +from envied.core.service import Service +from envied.core.session import session as create_curl_session +from envied.core.titles import Episode, Movie, Movies, Series, Title_T, Titles_T +from envied.core.tracks import Chapter, Chapters, Subtitle, Tracks + + +class RTDE(Service): + """ + Service for RTL+ Germany (https://plus.rtl.de) + + \b + Author: Claude + Authorization: None (free) / Credential (premium) + Robustness: HD@L3 + \b + """ + + ALIASES = ("RTDE", "RTLPlus", "rtl+", "rtlplus") + GEOFENCE = ("de",) + + TITLE_RE = r"https?://(?:www\.)?plus\.rtl\.de/video-tv/(?:shows|filme|serien)/.*?-(\d+)" + + GRAPHQL_URL = "https://cdn.gateway.now-plus-prod.aws-cbc.cloud/graphql" + PLAYOUT_URL = "https://stus.player.streamingtech.de/watch-playout-variants" + AUTH_URL = "https://auth.rtl.de/auth/realms/rtlplus/protocol/openid-connect/token" + + GRAPHQL_HASHES = { + "Format": "d112638c0184ab5698af7b69532dfe2f12973f7af9cb137b9f70278130b1eafa", + "SeasonWithFormatAndEpisodes": "cc0fbbe17143f549a35efa6f8665ceb9b1cfae44b590f0b2381a9a304304c584", + "Episode": "87dbde15a0d269b11606f5ff458d555e98eb493bb4fb6ddc150d812d5e9a9cf8", + "EpisodeDetail": "2e5ef142c79f8620e8e93c8f21b31a463b16d89a557f7f5f0c4a7e063be96a8a", + } + + @staticmethod + def get_session(): + return create_curl_session() + + @staticmethod + @click.command(name="RTLPlus", short_help="https://plus.rtl.de") + @click.argument("title", type=str) + @click.option("-m", "--movie", is_flag=True, default=False, help="Specify if content is a movie.") + @click.pass_context + def cli(ctx, **kwargs): + return RTDE(ctx, **kwargs) + + def __init__(self, ctx, title: str, movie: bool = False): + self.title = title + self.movie = movie + super().__init__(ctx) + + m = re.search(self.TITLE_RE, title) + if m: + self.format_id = m.group(1) + else: + # Assume raw ID was passed + self.format_id = title.rstrip("/").split("-")[-1] + if not self.format_id.isdigit(): + self.format_id = title + + self.device_id = str(uuid.uuid4()) + self.auth_token = None + self.license_url = None + self.pr_license_url = None + + self.cache_file = Path(config.directories.cache / "RTDE" / "token.json") + + def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None: + super().authenticate(cookies, credential) + + self.cache_file.parent.mkdir(parents=True, exist_ok=True) + + if credential: + self.auth_token = self._login(credential) + self.log.info("Authenticated with credentials") + else: + cached = self._load_cached_token() + if cached: + self.auth_token = cached + self.log.info("Using cached auth token") + else: + self.auth_token = self._get_anonymous_token() + self.log.info("Using anonymous token (free content only)") + + self.session.headers.update({ + "Authorization": f"Bearer {self.auth_token}", + "x-auth-token": self.auth_token, + "x-device-id": self.device_id, + "x-device-name": "Mac OS Chrome", + "x-device-type": "web", + "rtlplus-client-id": "rci:rtlplus:web", + "rtlplus-client-version": "2026.2.17.0", + }) + + def _load_cached_token(self) -> Optional[str]: + if not self.cache_file.exists(): + return None + try: + data = json.loads(self.cache_file.read_text()) + token = data.get("token") + if token and self._is_token_valid(token): + return token + except (json.JSONDecodeError, KeyError): + pass + return None + + def _save_token(self, token: str): + self.cache_file.write_text(json.dumps({"token": token}, indent=2)) + + @staticmethod + def _is_token_valid(token: str) -> bool: + try: + payload = token.split(".")[1] + "==" + data = json.loads(base64.urlsafe_b64decode(payload)) + return data.get("exp", 0) > time.time() + 60 + except Exception: + return False + + def _get_anonymous_token(self) -> str: + r = self.session.post( + self.AUTH_URL, + data={ + "grant_type": "client_credentials", + "client_id": "anonymous-user", + "client_secret": "4bfeb73f-1c4a-4e9f-a7fa-96aa1ad3d94c", + }, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + ) + r.raise_for_status() + token = r.json()["access_token"] + self._save_token(token) + return token + + def _login(self, credential: Credential) -> str: + # Authorization Code Flow with PKCE + code_verifier = secrets.token_urlsafe(64) + code_challenge = base64.urlsafe_b64encode( + hashlib.sha256(code_verifier.encode()).digest() + ).rstrip(b"=").decode() + + state = str(uuid.uuid4()) + nonce = str(uuid.uuid4()) + + # Step 1: GET authorization page + auth_endpoint = "https://auth.rtl.de/auth/realms/rtlplus/protocol/openid-connect/auth" + r = self.session.get(auth_endpoint, params={ + "client_id": "rtlplus-web", + "redirect_uri": "https://plus.rtl.de/", + "state": state, + "response_mode": "query", + "response_type": "code", + "scope": "openid email profile", + "nonce": nonce, + "prompt": "login", + "code_challenge": code_challenge, + "code_challenge_method": "S256", + }, allow_redirects=True) + if not r.ok: + raise ConnectionError(f"Auth page failed: {r.status_code}") + + # Parse form action URL and hidden fields + html = r.text + action_match = re.search(r'action="([^"]+)"', html) + if not action_match: + raise ConnectionError("Could not find login form action URL") + action_url = action_match.group(1).replace("&", "&") + + # Step 2: POST login credentials + r = self.session.post( + action_url, + data={ + "username": credential.username, + "password": credential.password, + }, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + allow_redirects=False, + ) + + # Follow redirects manually to capture the authorization code + while r.status_code in (301, 302, 303): + location = r.headers.get("Location", "") + parsed = urlparse(location) + params = parse_qs(parsed.query) + + if "code" in params: + auth_code = params["code"][0] + break + + r = self.session.get(location, allow_redirects=False) + else: + raise ConnectionError(f"Login failed: no authorization code in redirect (HTTP {r.status_code})") + + # Step 3: Exchange code for tokens + r = self.session.post( + self.AUTH_URL, + data={ + "code": auth_code, + "grant_type": "authorization_code", + "client_id": "rtlplus-web", + "redirect_uri": "https://plus.rtl.de/", + "code_verifier": code_verifier, + }, + headers={"Content-Type": "application/x-www-form-urlencoded"}, + ) + if not r.ok: + raise ConnectionError(f"Token exchange failed: {r.status_code} {r.text[:200]}") + + token = r.json()["access_token"] + self._save_token(token) + return token + + def _graphql(self, operation: str, variables: dict) -> dict: + r = self.session.get( + self.GRAPHQL_URL, + params={ + "operationName": operation, + "variables": json.dumps(variables), + "extensions": json.dumps({ + "persistedQuery": { + "version": 1, + "sha256Hash": self.GRAPHQL_HASHES[operation], + } + }), + }, + headers={ + "accept": "application/json", + "content-type": "application/json", + "referer": "https://plus.rtl.de/", + "origin": "https://plus.rtl.de", + }, + ) + r.raise_for_status() + data = r.json() + if "errors" in data: + raise ValueError(f"GraphQL error: {data['errors']}") + return data["data"] + + def get_titles(self) -> Titles_T: + rrn = f"rrn:watch:videohub:format:{self.format_id}" + data = self._graphql("Format", {"id": rrn}) + fmt = data["format"] + + title_name = fmt["title"] + year = fmt.get("productionYear", "") + + if self.movie: + # For movies, the format itself contains a single episode + episodes = fmt.get("episodes", []) + if episodes: + ep = episodes[0] + ep_id = ep["id"].split(":")[-1] + else: + ep_id = self.format_id + + return Movies([ + Movie( + id_=ep_id, + name=title_name, + year=year, + language="de", + service=self.__class__, + data={"rrn": f"rrn:watch:videohub:episode:{ep_id}", "format": fmt}, + ) + ]) + + # Series: iterate all seasons + seasons = fmt.get("seasons", []) + all_episodes = [] + + for season in seasons: + season_id = season["id"] + season_ordinal = season.get("ordinal", 0) + season_title_override = season.get("titleOverride") + num_episodes = season.get("numberOfEpisodes", 0) + + offset = 0 + while offset < num_episodes: + result = self._graphql("SeasonWithFormatAndEpisodes", { + "seasonId": season_id, + "offset": offset, + "limit": 50, + }) + eps = result.get("season", {}).get("episodes", []) + if not eps: + break + + for ep in eps: + ep_id = ep["id"].split(":")[-1] + ep_number = ep.get("number", 0) + ep_title = ep.get("title", "") + + all_episodes.append(Episode( + id_=ep_id, + service=self.__class__, + title=title_name, + year=year, + season=season_ordinal, + number=ep_number, + name=ep_title, + language="de", + data={ + "rrn": ep["id"], + "tier": ep.get("tier", "FREE"), + "season_title": season_title_override, + }, + )) + + offset += len(eps) + + return Series(all_episodes) + + def get_tracks(self, title: Title_T) -> Tracks: + rrn = title.data.get("rrn", f"rrn:watch:videohub:episode:{title.id}") + + r = self.session.get( + f"{self.PLAYOUT_URL}/{rrn}", + params={"platform": "web"}, + headers={ + "accept": "application/json", + "content-type": "application/json", + "origin": "https://plus.rtl.de", + "referer": "https://plus.rtl.de/", + }, + ) + r.raise_for_status() + variants = r.json() + + # Prefer HD DASH variant, fall back to SD + dash_variant = None + for name in ("dashhd", "dashsd"): + dash_variant = next((v for v in variants if v["name"] == name), None) + if dash_variant: + break + + if not dash_variant: + raise ValueError("No DASH variant found in playout response") + + # Get MPD URL (prefer MAIN source) + sources = dash_variant.get("sources", []) + mpd_url = None + subtitles_data = [] + for src in sources: + if src.get("priority") == "MAIN" or not mpd_url: + mpd_url = src["url"] + subtitles_data = src.get("subtitles", []) + + if not mpd_url: + raise ValueError("No MPD URL found in DASH variant") + + self.log.debug(f"MPD URL: {mpd_url}") + + # Store license URLs + for lic in dash_variant.get("licenses", []): + lic_type = lic.get("type", "") + lic_url = lic.get("uri", {}).get("href", "") + if lic_type == "WIDEVINE": + self.license_url = lic_url + elif lic_type == "PLAYREADY": + self.pr_license_url = lic_url + + # Parse DASH manifest + tracks = DASH.from_url(url=mpd_url, session=self.session).to_tracks(language=Language.get("de")) + + # Add subtitles from playout response + for sub in (subtitles_data or []): + sub_url = sub.get("url", "") + lang_code = sub.get("languageCode", "deu") + output_set = sub.get("outputSet", "") + + if output_set == "WEBVTT_TEXT": + codec = Subtitle.Codec.WebVTT + elif output_set == "TTML_XML": + codec = Subtitle.Codec.TimedTextMarkupLang + else: + continue + + tracks.add(Subtitle( + id_=hashlib.md5(sub_url.encode()).hexdigest()[:6], + url=sub_url, + codec=codec, + language=lang_code, + is_original_lang=True, + )) + + return tracks + + def get_widevine_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Union[bytes, str]: + if not self.license_url: + raise ValueError("No Widevine license URL available") + + r = self.session.post( + self.license_url, + data=challenge, + headers={ + "x-auth-token": self.auth_token, + "x-device-id": self.device_id, + "x-device-name": "Mac OS Chrome", + "origin": "https://plus.rtl.de", + "referer": "https://plus.rtl.de/", + }, + ) + if not r.ok: + raise ConnectionError(f"License request failed: HTTP {r.status_code} {r.text[:200]}") + return r.content + + def get_playready_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Union[bytes, str]: + if not self.pr_license_url: + raise ValueError("No PlayReady license URL available") + + if isinstance(challenge, bytes): + challenge = challenge.decode("utf-8", errors="replace") + # Strip anything before the SOAP envelope + soap_idx = challenge.find("= 0: + challenge = challenge[soap_idx:] + + r = self.session.post( + self.pr_license_url, + data=challenge, + headers={ + "Content-Type": "text/xml; charset=utf-8", + "x-auth-token": self.auth_token, + "x-device-id": self.device_id, + "x-device-name": "Mac OS Chrome", + "origin": "https://plus.rtl.de", + "referer": "https://plus.rtl.de/", + }, + ) + if not r.ok: + raise ConnectionError(f"PlayReady license request failed: HTTP {r.status_code} {r.text[:200]}") + return r.content + + def get_widevine_service_certificate(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[bytes]: + if not self.license_url: + return None + + r = self.session.post( + self.license_url, + data=challenge, + headers={ + "x-auth-token": self.auth_token, + "x-device-id": self.device_id, + "x-device-name": "Mac OS Chrome", + "origin": "https://plus.rtl.de", + "referer": "https://plus.rtl.de/", + }, + ) + if not r.ok: + return None + return r.content + + def get_chapters(self, title: Title_T) -> Chapters: + return Chapters() diff --git a/packages/envied/src/envied/services/RTDE/config.yaml b/packages/envied/src/envied/services/RTDE/config.yaml new file mode 100644 index 0000000..0240f6a --- /dev/null +++ b/packages/envied/src/envied/services/RTDE/config.yaml @@ -0,0 +1,12 @@ +headers: + user-agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" + +graphql_url: "https://cdn.gateway.now-plus-prod.aws-cbc.cloud/graphql" +playout_url: "https://stus.player.streamingtech.de/watch-playout-variants" +auth_url: "https://auth.rtl.de/auth/realms/rtlplus" + +graphql_hashes: + Format: "d112638c0184ab5698af7b69532dfe2f12973f7af9cb137b9f70278130b1eafa" + SeasonWithFormatAndEpisodes: "cc0fbbe17143f549a35efa6f8665ceb9b1cfae44b590f0b2381a9a304304c584" + Episode: "87dbde15a0d269b11606f5ff458d555e98eb493bb4fb6ddc150d812d5e9a9cf8" + EpisodeDetail: "2e5ef142c79f8620e8e93c8f21b31a463b16d89a557f7f5f0c4a7e063be96a8a" diff --git a/packages/envied/src/envied/services/UNXT/README.md b/packages/envied/src/envied/services/UNXT/README.md new file mode 100644 index 0000000..1f2a089 --- /dev/null +++ b/packages/envied/src/envied/services/UNXT/README.md @@ -0,0 +1,19 @@ +# U-NEXT(유넥스트) + +``` +uv run unshackle dl --list -vl all -al orig -sl all -q 2160 -v h.265 -r HDR10 UNXT SID0087607 +``` + +## Information + +- Authorization: Credentials +- Security: UHD@L3/SL2000, FHD@L3/SL2000 +- Working Client Agent: AndroidTV +- Support Codec + - Video: H264, H265 + - Audio: AAC, AC3, ATMOS + - Range: SDR, HDR10, DV + +## Support Args + +- `-t`, `--type`: Prefer subtitle or dubbing version for content type if available. diff --git a/packages/envied/src/envied/services/UNXT/__init__.py b/packages/envied/src/envied/services/UNXT/__init__.py new file mode 100644 index 0000000..1932d27 --- /dev/null +++ b/packages/envied/src/envied/services/UNXT/__init__.py @@ -0,0 +1,662 @@ +from __future__ import annotations + +import click +import re +import sys +import time +import uuid + +from click import Context +from collections.abc import Generator +from datetime import datetime +from http.cookiejar import CookieJar +from langcodes import Language +from pathlib import Path +from requests import Request +from typing import Any, Optional, Union, List, Literal +from urllib.parse import urlparse, parse_qs, urlencode + +from envied.core.cdm.detect import is_playready_cdm +from envied.core.constants import AnyTrack +from envied.core.credential import Credential +from envied.core.manifests import DASH, ISM +from envied.core.search_result import SearchResult +from envied.core.service import Service +from envied.core.titles import Title_T, Titles_T, Episode, Movie, Movies, Series +from envied.core.tracks import Chapters, Tracks, Video, Audio, Subtitle, Attachment, Chapter +from envied.core.utilities import get_ip_info + + +class UNXT(Service): + """ + Service code for U-NEXT Streaming Service (https://video.unext.jp).\n + Version: 26.03.01 + + Author: Made by CodeName393 with Special Thanks to narakama\n + Authorization: Credentials\n + Security: UHD@L3/SL2000, FHD@L3/SL2000 + """ + + ALIASES = ("UNXT", "UNEXT", "U-NEXT") + GEOFENCE = ("JP",) + TITLE_RE = (r"https?://(?:[\w-]+\.)?unext\.jp/.*?(?:/|td=)(?PSID[0-9]+)",) + + @staticmethod + @click.command(name="U-NEXT", short_help="https://video.unext.jp", help=__doc__) + @click.argument("title", type=str) + @click.option( + "-t", + "--type", + type=click.Choice(["sub", "dub"], case_sensitive=False), + default="sub", + help="Prefer subtitle or dubbing version for content type if available.", + ) + @click.pass_context + def cli(ctx: Context, **kwargs: Any) -> UNXT: + return UNXT(ctx, **kwargs) + + def __init__(self, ctx: Context, title: str, type: Literal["sub", "dub"]): + self.title = title + super().__init__(ctx) + + self.title_id = self.title + for pattern in self.TITLE_RE: + match = re.match(pattern, self.title) + if match: + self.title_id = match.group("id") + break + + self.dub_type = type + self.cdm = ctx.obj.cdm + + self.device_id = None + self.account_tokens = {} + self.active_session = {} + self.playback_data = {} + + self.log.info("Preparing...") + + ip_info = get_ip_info(self.session) + country_key = None + possible_keys = ["countryCode", "country", "country_code", "country-code"] + for key in possible_keys: + if key in ip_info: + country_key = key + break + if country_key: + region = str(ip_info[country_key]).upper() + self.log.info(f" + IP Region: {region}") + else: + self.log.warning(f" - The region could not be determined from IP information: {ip_info}") + region = "US" + self.log.info(f" + IP Region: {region} (By Default)") + if region != "JP": + self.log.error(" - It is not currently available in the country.", exc_info=False) + sys.exit(1) + + self.session.headers.update( + { + "User-Agent": self.config["device"]["user_agent"], + "Content-Type": "application/json; charset=utf-8", + "Accept-Encoding": "gzip", + } + ) + + def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None: + super().authenticate(cookies, credential) + self.credentials = credential + if not credential: + raise EnvironmentError("Service requires Credentials for Authentication.") + + self.log.info("Logging into U-NEXT...") + self._login() + + self.log.debug(self.active_session) + self.log.info(f" + Account ID: {self.active_session['cuid']}") + self.log.info(f" + Platform ID: {self.active_session['pfid']}") + self.log.info(f" + Subscribed: {self.active_session['contractStatusCode'] == 'ACTIVE'}") + + def _login(self) -> None: + cache = self.cache.get(f"tokens_{self.credentials.sha1}") + + if cache: + try: + self.log.info(" + Using cached tokens...") + self.account_tokens = cache.data.get("tokens", {}) + self.device_id = cache.data.get("device_id") + + required_keys = ["userToken", "userTokenExpire", "securityToken"] + if not self.account_tokens or not all(k in self.account_tokens for k in required_keys) or not self.device_id: + raise ValueError("Invalid token data in cache") + + except (KeyError, ValueError, TypeError) as e: + self.log.warning(f" - Cached token data is invalid or corrupted ({e}). Getting new tokens...") + self._perform_full_login() + + try: + self._refresh() + except Exception as e: + self.log.warning(f" - Failed to refresh token ({e}). Getting new tokens...") + self._perform_full_login() + + else: + self.log.info(" + Getting new tokens...") + self._perform_full_login() + + self.log.info(" + Fetching session data...") + self.active_session = self._get_account_info() + self.log.info("Session data setup successfully.") + + def _perform_full_login(self) -> None: + if not self.device_id: + self.device_id = str(uuid.uuid4()) + + user_info = self._login_with_password(self.credentials.username, self.credentials.password) + token_data = { + "userToken": user_info["userToken"], + "userTokenExpire": user_info["userTokenExpire"], + "securityToken": user_info["securityToken"], + } + self._apply_new_tokens(token_data) + + def _refresh(self) -> None: + cache = self.cache.get(f"tokens_{self.credentials.sha1}") + if not cache.expired: + self.log.debug(f" + Token is valid until: {datetime.fromtimestamp(cache.expiration.timestamp()).strftime('%Y-%m-%d %H:%M:%S')}") + return + + self.log.warning(" + Token expired. Refreshing...") + try: + user_info = self._refresh_token() + token_data = { + "userToken": user_info["userToken"], + "userTokenExpire": user_info["userTokenExpire"], + "securityToken": user_info["securityToken"], + } + self._apply_new_tokens(token_data) + + except Exception as e: + self.log.error(f"Refresh failed: {e}.", exc_info=False) + raise e + + def _apply_new_tokens(self, token_data: dict) -> None: + self.account_tokens = token_data + + expire_time = token_data["userTokenExpire"] + valid_duration = max(0, expire_time - int(time.time())) + + cache_data = { + "tokens": self.account_tokens, + "device_id": self.device_id, + } + cache = self.cache.get(f"tokens_{self.credentials.sha1}") + cache.set(cache_data, valid_duration - 60) + self.log.debug(f" + New Token is valid until: {datetime.fromtimestamp(cache.expiration.timestamp()).strftime('%Y-%m-%d %H:%M:%S')}") + + def search(self) -> Generator[SearchResult, None, None]: + data = self._get_search(self.title) + if not data["title_list"]: + return + for result in data["title_list"]: + year = result["production_year"] + if not year: + year = result["since_year"] + + yield SearchResult( + id_=result["title_code"], + title=result["title_name"], + description=result["catchphrase"], + label=year, + url=f"https://video.unext.jp/title/{result['title_code']}", + ) + + def get_titles(self) -> Titles_T: + stage_data = self._get_stage_data(self.title_id) + + content_type = stage_data["media_type_code"] + self.log.debug(f" + Content Type: {content_type.upper()}") + + if content_type in ["MOVIE", "VIDEO", "OV"]: + year = stage_data["production_year"] + if not year: + year = stage_data["since_year"] + + movie_data = self._get_movie_data(self.title_id) + return Movies( + [ + Movie( + id_=movie_data["episode"]["episode_code"], + service=self.__class__, + name=stage_data["title_name"], + description=stage_data["story"], + year=year, + language=Language.get("en"), + data=movie_data["episode"], + ) + ] + ) + + elif content_type == "TV": + return Series(self._get_series(stage_data)) + + else: + self.log.error(f" - Unsupported content type: {content_type}", exc_info=False) + sys.exit(1) + + def _get_series(self, stage_data: dict) -> Series: + title_relation = self._get_title_relation(self.title_id) + + all_seasons = {} + special_keywords = ["メイキング", "making", "special", "特典", "映像"] + + current_year = stage_data["production_year"] + if not current_year: + current_year = stage_data["since_year"] + + title_name_main = stage_data["title_name"] + is_special_main = any(k in title_name_main.lower() for k in special_keywords) + + raw_order_main = int(stage_data["series_in_order"]) + if is_special_main: + order_main = 0 + else: + order_main = raw_order_main if raw_order_main > 0 else 1 + + series_name = stage_data["series_name"] + if not series_name: + series_name = title_name_main + + all_seasons[self.title_id] = { + "order": order_main, + "name": series_name, + "year": current_year, + } + + if "relation" in title_relation: + for rel_group in title_relation["relation"]: + if rel_group["groupcode"] != stage_data["series_code"]: + continue + + for item in rel_group["grouplist"]: + if item["media_type_code"] != "TV": + continue + + item_year = item["production_year"] + if not item_year: + item_year = item["since_year"] + + title_name_sub = item["title_name"] + is_special_sub = any(k in title_name_sub.lower() for k in special_keywords) + + raw_order_sub = int(item["series_in_order"]) + if is_special_sub: + order_sub = 0 + else: + order_sub = raw_order_sub if raw_order_sub > 0 else 1 + + all_seasons[item["title_code"]] = { + "order": order_sub, + "name": item["series_name"], + "year": item_year, + } + + sorted_season_ids = sorted(all_seasons.keys(), key=lambda x: all_seasons[x]["order"]) + + episodes: List[Episode] = [] + regular_season_idx = 1 + special_episode_idx = 1 + + for season_id in sorted_season_ids: + season_info = all_seasons[season_id] + + if season_info["order"] == 0: + current_season_number = 0 + else: + current_season_number = regular_season_idx + regular_season_idx += 1 + + episode_list_data = self._get_episode_list(season_id) + for idx, episode in enumerate(episode_list_data["items"], start=1): + if current_season_number == 0: + episode_number = special_episode_idx + special_episode_idx += 1 + else: + episode_number = idx + + episodes.append( + Episode( + id_=episode["episode_code"], + service=self.__class__, + title=season_info["name"], + season=current_season_number, + number=episode_number, + name=episode["episode_name"], + description=episode["introduction"], + year=season_info["year"], + language=Language.get("en"), + data=episode, + ) + ) + + return episodes + + def get_tracks(self, title: Title_T) -> Tracks: + self._refresh() # Safe Access + + play_mode = "caption" + if title.data["has_dub"] and self.dub_type == "dub": + play_mode = "dub" + title.language = Language.get("ja") + + fetched_ranges = set() + + def _fetch_variant(title: Title_T, codec: Optional[Video.Codec], range_: Video.Range) -> Tracks: + if codec == Video.Codec.AVC and range_ in (Video.Range.DV, Video.Range.HDR10, Video.Range.HDR10P): + return Tracks() + nonlocal fetched_ranges + + video_ranges = ["SDR"] + if range_ == Video.Range.DV: + video_ranges = ["VISION"] + elif range_ in (Video.Range.HDR10, Video.Range.HDR10P): + video_ranges = ["HDR10"] + + range_key = video_ranges[0] + if range_key in fetched_ranges: + return Tracks() + fetched_ranges.add(range_key) + + self.log.debug(f"Fetching {range_.name} manifest...") + return self._fetch_manifest_tracks(title, video_ranges, play_mode) + + tracks = self._get_tracks_for_variants(title, _fetch_variant) + + if thumb := title.data.get("thumbnail"): + url = f"https://{thumb['standard']}" + description = Path(url).stem + tracks.add(Attachment.from_url(url=url, name="thumbnail", description=description, session=self.session)) + + for track in tracks: + if isinstance(track, (Audio, Subtitle)): + track.name = track.language.display_name() + track.name += " [Original]" if track.is_original_lang else "" + + for audio in tracks.audio: + if audio.codec == Audio.Codec.EC3 and audio.bitrate > 448_000: + audio.joc = 16 # U-NEXT Bug... + + return tracks + + def _fetch_manifest_tracks(self, title: Title_T, video_ranges: List[str], play_mode: str) -> Tracks: + self.playback_data[title.id] = self._get_playlist(title.id, video_ranges, play_mode) + + if (res_code := self.playback_data[title.id]["result_status"]) != 200: + self.log.debug(f" - Get stream error({res_code})") + return Tracks() + + movie_profile = self.playback_data[title.id]["url_info"][0]["movie_profile"] + target_drm_key = "playready" if is_playready_cdm(self.cdm) else "widevine" + priority_protocols = ["dash", "smooth"] + + selected_protocol = next( + (proto for proto in priority_protocols if proto in movie_profile and target_drm_key in movie_profile[proto].get("license_url_list", {})), + None, + ) + + if not selected_protocol: + self.log.debug(f" - Unable to handle with invalid DRM type. {target_drm_key} info not found or license_url is empty in response.") + return Tracks() + + self.playback_data[title.id]["protocol"] = selected_protocol + base_url = movie_profile[selected_protocol].get("playlist_url") + u = urlparse(base_url) + query = parse_qs(u.query) + query["play_token"] = self.playback_data[title.id]["play_token"] + new_query = urlencode(query, doseq=True) + manifest_url = u._replace(query=new_query).geturl() + + self.log.debug(f" + Manifest URL: {manifest_url}") + if ".mpd/" in manifest_url: + tracks = DASH.from_url(url=manifest_url, session=self.session).to_tracks(title.language) + elif ".ism/manifest" in manifest_url: + tracks = ISM.from_url(url=manifest_url, session=self.session).to_tracks(title.language) + else: + self.log.debug(" - Manifest type cannot be handled.") + return Tracks() + + for video in tracks.videos: + if video.codec == Video.Codec.HEVC and "HDR10" in video_ranges: + video.range = Video.Range.HDR10 # U-NEXT Bug... + + return tracks + + def get_chapters(self, title: Titles_T) -> Chapters: + url_info = self.playback_data[title.id]["url_info"][0] + endroll_start_position = float(url_info["endroll_start_position"]) + movie_parts_list = url_info["movie_parts_position_list"] + + pre_chapter = [] + + has_intro = False + has_credits = False + + if movie_parts_list: + for part in movie_parts_list: + part_type = part.get("movie_parts_type") + start = float(part.get("from", 0)) + end = float(part.get("to", 0)) + + chapter_name = "Scene" + if part_type == "Opening": + if not has_intro: + chapter_name = "Intro" + has_intro = True + elif part_type == "Ending": + if not has_credits: + chapter_name = "Credits" + has_credits = True + + pre_chapter.append((chapter_name, start)) + + if end > start: + pre_chapter.append(("Scene", end)) + + if endroll_start_position > 0: + is_duplicate = any(abs(t - endroll_start_position) < 1.0 for _, t in pre_chapter) + + if not is_duplicate: + if has_credits: + pre_chapter.append(("Scene", endroll_start_position)) + else: + pre_chapter.append(("Credits", endroll_start_position)) + + pre_chapter.sort(key=lambda x: x[1]) + + if not pre_chapter or pre_chapter[0][1] > 0: + pre_chapter.insert(0, ("Scene", 0.0)) + + if len(pre_chapter) == 1 and pre_chapter[0] == ("Scene", 0): + return [] + + chapters: List[Chapter] = [] + for i, (chapter_title, time_sec) in enumerate(pre_chapter): + chapters.append( + Chapter( + timestamp=float(time_sec), + name=chapter_title if chapter_title != "Scene" else None, + ) + ) + + return chapters + + def get_widevine_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[Union[bytes, str]]: + protocol = self.playback_data[title.id]["protocol"] + license_url = self.playback_data[title.id]["url_info"][0]["movie_profile"][protocol]["license_url_list"]["widevine"] + params = {"play_token": self.playback_data[title.id]["play_token"]} + headers = {"Content-Type": "application/octet-stream"} + res = self.session.post(license_url, params=params, headers=headers, data=challenge) + res.raise_for_status() + return res.content + + def get_playready_license(self, *, challenge: bytes, title: Title_T, track: AnyTrack) -> Optional[Union[bytes, str]]: + protocol = self.playback_data[title.id]["protocol"] + license_url = self.playback_data[title.id]["url_info"][0]["movie_profile"][protocol]["license_url_list"]["playready"] + params = {"play_token": self.playback_data[title.id]["play_token"]} + headers = { + "Accept": "application/xml", + "Content-Type": "text/xml; charset=utf-8", + } + res = self.session.post(license_url, params=params, headers=headers, data=challenge) + res.raise_for_status() + return res.content + + def _get_search(self, title: str) -> dict: + endpoint = self.config["endpoints"]["search"] + data_payload = { + "searchString": title, + "numParPage": 32, + "pageNo": 1, + "order": "recommend", + "film_rating_code": "R15", + "need_fulldata": 1, + } + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["data"] + + def _get_stage_data(self, title_id: str) -> dict: + endpoint = self.config["endpoints"]["stage"] + data_payload = {"title_code": title_id} + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["data"] + + def _get_movie_data(self, title_id: str) -> dict: + endpoint = self.config["endpoints"]["movie"] + data_payload = {"title_code": title_id} + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["data"] + + def _get_title_relation(self, title_id: str) -> dict: + endpoint = self.config["endpoints"]["relation"] + data_payload = {"title_code": title_id} + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["data"] + + def _get_episode_list(self, season_id: str) -> dict: + endpoint = self.config["endpoints"]["episode"] + data_payload = { + "title_code": season_id, + "page_size": 1000, + "page_number": 1, + } + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["data"] + + def _get_playlist(self, title_id: str, video_ranges: List[str], play_mode: str) -> dict: + data_payload = { + "code": title_id, + "bitrate_low": 192, + "play_type": 2, + "play_mode": play_mode, + "keyonly_flg": 0, + "validation_flg": 0, + "codec": ["H264", "H265"], + "dynamic_range_list": video_ranges, + "audio_type_list": ["ac-3", "ec-3", "mp4a"], + } + endpoint = self.config["endpoints"]["playlist"] + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["data"] + + def _login_with_password(self, username: str, password: str) -> dict: + endpoint = self.config["endpoints"]["auth"] + data_payload = { + "loginId": username, + "password": password, + } + payload = self._build_payload(data_payload=data_payload) + data = self._request("POST", endpoint, payload=payload) + return data["common"]["userInfo"] + + def _get_account_info(self) -> dict: + endpoint = self.config["endpoints"]["account"] + payload = self._build_payload( + data_payload={}, + user_token=self.account_tokens["userToken"], + security_token=self.account_tokens["securityToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["common"]["userInfo"] + + def _refresh_token(self) -> dict: + endpoint = self.config["endpoints"]["auth"] + data_payload = {"securityToken": self.account_tokens["securityToken"]} + payload = self._build_payload( + data_payload=data_payload, + user_token=self.account_tokens["userToken"], + ) + data = self._request("POST", endpoint, payload=payload) + return data["common"]["userInfo"] + + def _build_payload(self, data_payload: dict, user_token: str = "", security_token: str = None) -> dict: + user_info = { + "userToken": user_token, + "service_name": "unext", + } + if security_token: + user_info["securityToken"] = security_token + device_info = { + "deviceType": "980", + "appVersion": "1", + "deviceUuid": self.device_id, + } + payload = { + "common": { + "userInfo": user_info, + "deviceInfo": device_info, + }, + "data": data_payload, + } + return payload + + def _request(self, method: str, endpoint: str, params: dict = None, headers: dict = None, payload: dict = None) -> Any[dict | str]: + _headers = self.session.headers.copy() + if headers: + _headers.update(headers) + + req = Request(method, endpoint, headers=_headers, params=params, json=payload) + prepped = self.session.prepare_request(req) + + try: + res = self.session.send(prepped) + res.raise_for_status() + data = res.json() + if error_code := data["common"]["result"]["errorCode"]: + raise ConnectionError(f"{error_code}: {data['common']['result']['errorMessage']}") + return data + except Exception as e: + self.log.error(f"API Request failed: {e}", exc_info=False) + sys.exit(1) diff --git a/packages/envied/src/envied/services/UNXT/config.yaml b/packages/envied/src/envied/services/UNXT/config.yaml new file mode 100644 index 0000000..6006dc6 --- /dev/null +++ b/packages/envied/src/envied/services/UNXT/config.yaml @@ -0,0 +1,12 @@ +endpoints: + auth: "https://napi.unext.jp/1/auth/login" + account: "https://napi.unext.jp/2/user/account/get" + search: "https://napi.unext.jp/1/cmscommon/freeword/video" + stage: "https://napi.unext.jp/1/cmsuser/stage" + movie: "https://napi.unext.jp/1/cmsuser/episode/current" + relation: "https://napi.unext.jp/1/cmsuser/titledetail/relation" + episode: "https://napi.unext.jp/1/cmsuser/episode" + playlist: "https://napi.unext.jp/3/cmsuser/playlisturl/file" + +device: + user_agent: "U-NEXT TV App Android16 5.61.0 AOSP TV" diff --git a/packages/vinefeeder/src/vinefeeder/services/BBC/config.yaml.save b/packages/vinefeeder/src/vinefeeder/services/BBC/config.yaml.save new file mode 100644 index 0000000..a478802 --- /dev/null +++ b/packages/vinefeeder/src/vinefeeder/services/BBC/config.yaml.save @@ -0,0 +1,22 @@ +service: BBC +loader_class: BbcLoader + +description: A UK Public Sevice broadcaster + +hlg_status: True + +options: -q 720 + +media_dict: + Film: 'https://www.bbc.co.uk/iplayer/categories/films/featured' + Documentary: 'https://www.bbc.co.uk/iplayer/categories/documentaries/featured' + Comedy: 'https://www.bbc.co.uk/iplayer/categories/comedy/featured' + Drama: 'https://www.bbc.co.uk/iplayer/categories/drama-and-soaps/featured' + Entertainment: 'https://www.bbc.co.uk/iplayer/categories/entertainment/featured' + Lifestyle: 'https://www.channel4.com/categories/lifestyle' + News: 'https://www.bbc.co.uk/iplayer/categories/news/featured' + Sport: 'https://www.bbc.co.uk/iplayer/categories/sport/featured' + Lifestyle: 'https://www.bbc.co.uk/iplayer/categories/lifestyle/featured' + History: 'https://www.bbc.co.uk/iplayer/categories/history/featured' + Science/Nature: 'https://www.bbc.co.uk/iplayer/categories/science-and-nature/featured' + diff --git a/uv.lock b/uv.lock index cec7fe2..e370008 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,6 @@ version = 1 revision = 3 -requires-python = ">=3.10, <3.13" +requires-python = ">=3.10, <=3.13" [manifest] members = [ @@ -93,6 +93,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9d/f2/a07a75173124f31f11ea6f863dc44e6f09afe2bca45dd4e64979490deab1/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a", size = 1722379, upload-time = "2026-01-03T17:30:41.081Z" }, { url = "https://files.pythonhosted.org/packages/3c/4a/1a3fee7c21350cac78e5c5cef711bac1b94feca07399f3d406972e2d8fcd/aiohttp-3.13.3-cp312-cp312-win32.whl", hash = "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046", size = 428253, upload-time = "2026-01-03T17:30:42.644Z" }, { url = "https://files.pythonhosted.org/packages/d9/b7/76175c7cb4eb73d91ad63c34e29fc4f77c9386bba4a65b53ba8e05ee3c39/aiohttp-3.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57", size = 455407, upload-time = "2026-01-03T17:30:44.195Z" }, + { url = "https://files.pythonhosted.org/packages/97/8a/12ca489246ca1faaf5432844adbfce7ff2cc4997733e0af120869345643a/aiohttp-3.13.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c", size = 734190, upload-time = "2026-01-03T17:30:45.832Z" }, + { url = "https://files.pythonhosted.org/packages/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9", size = 491783, upload-time = "2026-01-03T17:30:47.466Z" }, + { url = "https://files.pythonhosted.org/packages/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3", size = 490704, upload-time = "2026-01-03T17:30:49.373Z" }, + { url = "https://files.pythonhosted.org/packages/6d/40/a46b03ca03936f832bc7eaa47cfbb1ad012ba1be4790122ee4f4f8cba074/aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf", size = 1720652, upload-time = "2026-01-03T17:30:50.974Z" }, + { url = "https://files.pythonhosted.org/packages/f7/7e/917fe18e3607af92657e4285498f500dca797ff8c918bd7d90b05abf6c2a/aiohttp-3.13.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6", size = 1692014, upload-time = "2026-01-03T17:30:52.729Z" }, + { url = "https://files.pythonhosted.org/packages/71/b6/cefa4cbc00d315d68973b671cf105b21a609c12b82d52e5d0c9ae61d2a09/aiohttp-3.13.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d", size = 1759777, upload-time = "2026-01-03T17:30:54.537Z" }, + { url = "https://files.pythonhosted.org/packages/fb/e3/e06ee07b45e59e6d81498b591fc589629be1553abb2a82ce33efe2a7b068/aiohttp-3.13.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261", size = 1861276, upload-time = "2026-01-03T17:30:56.512Z" }, + { url = "https://files.pythonhosted.org/packages/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0", size = 1743131, upload-time = "2026-01-03T17:30:58.256Z" }, + { url = "https://files.pythonhosted.org/packages/04/98/3d21dde21889b17ca2eea54fdcff21b27b93f45b7bb94ca029c31ab59dc3/aiohttp-3.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730", size = 1556863, upload-time = "2026-01-03T17:31:00.445Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/da0c3ab1192eaf64782b03971ab4055b475d0db07b17eff925e8c93b3aa5/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91", size = 1682793, upload-time = "2026-01-03T17:31:03.024Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0f/5802ada182f575afa02cbd0ec5180d7e13a402afb7c2c03a9aa5e5d49060/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3", size = 1716676, upload-time = "2026-01-03T17:31:04.842Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8c/714d53bd8b5a4560667f7bbbb06b20c2382f9c7847d198370ec6526af39c/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4", size = 1733217, upload-time = "2026-01-03T17:31:06.868Z" }, + { url = "https://files.pythonhosted.org/packages/7d/79/e2176f46d2e963facea939f5be2d26368ce543622be6f00a12844d3c991f/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998", size = 1552303, upload-time = "2026-01-03T17:31:08.958Z" }, + { url = "https://files.pythonhosted.org/packages/ab/6a/28ed4dea1759916090587d1fe57087b03e6c784a642b85ef48217b0277ae/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0", size = 1763673, upload-time = "2026-01-03T17:31:10.676Z" }, + { url = "https://files.pythonhosted.org/packages/e8/35/4a3daeb8b9fab49240d21c04d50732313295e4bd813a465d840236dd0ce1/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591", size = 1721120, upload-time = "2026-01-03T17:31:12.575Z" }, + { url = "https://files.pythonhosted.org/packages/bc/9f/d643bb3c5fb99547323e635e251c609fbbc660d983144cfebec529e09264/aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf", size = 427383, upload-time = "2026-01-03T17:31:14.382Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e", size = 453899, upload-time = "2026-01-03T17:31:15.958Z" }, ] [[package]] @@ -117,13 +134,27 @@ version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frozenlist" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, ] +[[package]] +name = "animeapi-py" +version = "3.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "dacite" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/a2/f868bba3b6399e2c953f8796fa90c8de91f797ad0fe19c7e2c536cd0092f/animeapi_py-3.8.1.tar.gz", hash = "sha256:9ed10f8207f1ccd7949ee3728285f4aced9a5ec57f71d211594ca5dc356fdea5", size = 25663, upload-time = "2026-02-25T15:29:17.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/98/6775d71cf7d88d554e8394f5ce5cda90041c99fdf1b2b60af02001e8c790/animeapi_py-3.8.1-py3-none-any.whl", hash = "sha256:c29f6e633d17bb613f459aa6514c0baab7ae325881f8a109eb6e4b3be5c22827", size = 26983, upload-time = "2026-02-25T15:29:16.685Z" }, +] + [[package]] name = "anyio" version = "4.11.0" @@ -132,7 +163,7 @@ dependencies = [ { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "idna" }, { name = "sniffio" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c6/78/7d432127c41b50bccba979505f272c16cbcadcc33645d5fa3a738110ae75/anyio-4.11.0.tar.gz", hash = "sha256:82a8d0b81e318cc5ce71a5f1f8b5c4e63619620b63141ef8c995fa0db95a57c4", size = 219094, upload-time = "2025-09-23T09:19:12.58Z" } wheels = [ @@ -259,6 +290,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d8/63/1c1585b2aa554fe6dbce30f0c18bdbc877fa9a1bf5ff17677d9cca0ac122/Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839", size = 2930029, upload-time = "2024-10-18T12:32:33.293Z" }, { url = "https://files.pythonhosted.org/packages/5f/3b/4e3fd1893eb3bbfef8e5a80d4508bec17a57bb92d586c85c12d28666bb13/Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0", size = 333276, upload-time = "2023-09-07T14:04:16.49Z" }, { url = "https://files.pythonhosted.org/packages/3d/d5/942051b45a9e883b5b6e98c041698b1eb2012d25e5948c58d6bf85b1bb43/Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951", size = 357255, upload-time = "2023-09-07T14:04:17.83Z" }, + { url = "https://files.pythonhosted.org/packages/0a/9f/fb37bb8ffc52a8da37b1c03c459a8cd55df7a57bdccd8831d500e994a0ca/Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5", size = 815681, upload-time = "2024-10-18T12:32:34.942Z" }, + { url = "https://files.pythonhosted.org/packages/06/b3/dbd332a988586fefb0aa49c779f59f47cae76855c2d00f450364bb574cac/Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8", size = 422475, upload-time = "2024-10-18T12:32:36.485Z" }, + { url = "https://files.pythonhosted.org/packages/bb/80/6aaddc2f63dbcf2d93c2d204e49c11a9ec93a8c7c63261e2b4bd35198283/Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f", size = 2906173, upload-time = "2024-10-18T12:32:37.978Z" }, + { url = "https://files.pythonhosted.org/packages/ea/1d/e6ca79c96ff5b641df6097d299347507d39a9604bde8915e76bf026d6c77/Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648", size = 2943803, upload-time = "2024-10-18T12:32:39.606Z" }, + { url = "https://files.pythonhosted.org/packages/ac/a3/d98d2472e0130b7dd3acdbb7f390d478123dbf62b7d32bda5c830a96116d/Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0", size = 2918946, upload-time = "2024-10-18T12:32:41.679Z" }, + { url = "https://files.pythonhosted.org/packages/c4/a5/c69e6d272aee3e1423ed005d8915a7eaa0384c7de503da987f2d224d0721/Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089", size = 2845707, upload-time = "2024-10-18T12:32:43.478Z" }, + { url = "https://files.pythonhosted.org/packages/58/9f/4149d38b52725afa39067350696c09526de0125ebfbaab5acc5af28b42ea/Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368", size = 2936231, upload-time = "2024-10-18T12:32:45.224Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5a/145de884285611838a16bebfdb060c231c52b8f84dfbe52b852a15780386/Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c", size = 2848157, upload-time = "2024-10-18T12:32:46.894Z" }, + { url = "https://files.pythonhosted.org/packages/50/ae/408b6bfb8525dadebd3b3dd5b19d631da4f7d46420321db44cd99dcf2f2c/Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284", size = 3035122, upload-time = "2024-10-18T12:32:48.844Z" }, + { url = "https://files.pythonhosted.org/packages/af/85/a94e5cfaa0ca449d8f91c3d6f78313ebf919a0dbd55a100c711c6e9655bc/Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7", size = 2930206, upload-time = "2024-10-18T12:32:51.198Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f0/a61d9262cd01351df22e57ad7c34f66794709acab13f34be2675f45bf89d/Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0", size = 333804, upload-time = "2024-10-18T12:32:52.661Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c1/ec214e9c94000d1c1974ec67ced1c970c148aa6b8d8373066123fc3dbf06/Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b", size = 358517, upload-time = "2024-10-18T12:32:54.066Z" }, ] [[package]] @@ -316,6 +359,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, ] [[package]] @@ -375,6 +430,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, + { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, + { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, + { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, + { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, + { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, + { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, + { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, + { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, ] @@ -493,25 +559,32 @@ wheels = [ [[package]] name = "curl-cffi" -version = "0.14.0" +version = "0.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9b/c9/0067d9a25ed4592b022d4558157fcdb6e123516083700786d38091688767/curl_cffi-0.14.0.tar.gz", hash = "sha256:5ffbc82e59f05008ec08ea432f0e535418823cda44178ee518906a54f27a5f0f", size = 162633, upload-time = "2025-12-16T03:25:07.931Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/3d/f39ca1f8fdf14408888e7c25e15eed63eac5f47926e206fb93300d28378c/curl_cffi-0.13.0.tar.gz", hash = "sha256:62ecd90a382bd5023750e3606e0aa7cb1a3a8ba41c14270b8e5e149ebf72c5ca", size = 151303, upload-time = "2025-08-06T13:05:42.988Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/aa/f0/0f21e9688eaac85e705537b3a87a5588d0cefb2f09d83e83e0e8be93aa99/curl_cffi-0.14.0-cp39-abi3-macosx_14_0_arm64.whl", hash = "sha256:e35e89c6a69872f9749d6d5fda642ed4fc159619329e99d577d0104c9aad5893", size = 3087277, upload-time = "2025-12-16T03:24:49.607Z" }, - { url = "https://files.pythonhosted.org/packages/ba/a3/0419bd48fce5b145cb6a2344c6ac17efa588f5b0061f212c88e0723da026/curl_cffi-0.14.0-cp39-abi3-macosx_15_0_x86_64.whl", hash = "sha256:5945478cd28ad7dfb5c54473bcfb6743ee1d66554d57951fdf8fc0e7d8cf4e45", size = 5804650, upload-time = "2025-12-16T03:24:51.518Z" }, - { url = "https://files.pythonhosted.org/packages/e2/07/a238dd062b7841b8caa2fa8a359eb997147ff3161288f0dd46654d898b4d/curl_cffi-0.14.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c42e8fa3c667db9ccd2e696ee47adcd3cd5b0838d7282f3fc45f6c0ef3cfdfa7", size = 8231918, upload-time = "2025-12-16T03:24:52.862Z" }, - { url = "https://files.pythonhosted.org/packages/7c/d2/ce907c9b37b5caf76ac08db40cc4ce3d9f94c5500db68a195af3513eacbc/curl_cffi-0.14.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:060fe2c99c41d3cb7f894de318ddf4b0301b08dca70453d769bd4e74b36b8483", size = 8654624, upload-time = "2025-12-16T03:24:54.579Z" }, - { url = "https://files.pythonhosted.org/packages/f2/ae/6256995b18c75e6ef76b30753a5109e786813aa79088b27c8eabb1ef85c9/curl_cffi-0.14.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b158c41a25388690dd0d40b5bc38d1e0f512135f17fdb8029868cbc1993d2e5b", size = 8010654, upload-time = "2025-12-16T03:24:56.507Z" }, - { url = "https://files.pythonhosted.org/packages/fb/10/ff64249e516b103cb762e0a9dca3ee0f04cf25e2a1d5d9838e0f1273d071/curl_cffi-0.14.0-cp39-abi3-manylinux_2_28_i686.whl", hash = "sha256:1439fbef3500fb723333c826adf0efb0e2e5065a703fb5eccce637a2250db34a", size = 7781969, upload-time = "2025-12-16T03:24:57.885Z" }, - { url = "https://files.pythonhosted.org/packages/51/76/d6f7bb76c2d12811aa7ff16f5e17b678abdd1b357b9a8ac56310ceccabd5/curl_cffi-0.14.0-cp39-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e7176f2c2d22b542e3cf261072a81deb018cfa7688930f95dddef215caddb469", size = 7969133, upload-time = "2025-12-16T03:24:59.261Z" }, - { url = "https://files.pythonhosted.org/packages/23/7c/cca39c0ed4e1772613d3cba13091c0e9d3b89365e84b9bf9838259a3cd8f/curl_cffi-0.14.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:03f21ade2d72978c2bb8670e9b6de5260e2755092b02d94b70b906813662998d", size = 9080167, upload-time = "2025-12-16T03:25:00.946Z" }, - { url = "https://files.pythonhosted.org/packages/75/03/a942d7119d3e8911094d157598ae0169b1c6ca1bd3f27d7991b279bcc45b/curl_cffi-0.14.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:58ebf02de64ee5c95613209ddacb014c2d2f86298d7080c0a1c12ed876ee0690", size = 9520464, upload-time = "2025-12-16T03:25:02.922Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/78900e9b0833066d2274bda75cba426fdb4cef7fbf6a4f6a6ca447607bec/curl_cffi-0.14.0-cp39-abi3-win_amd64.whl", hash = "sha256:6e503f9a103f6ae7acfb3890c843b53ec030785a22ae7682a22cc43afb94123e", size = 1677416, upload-time = "2025-12-16T03:25:04.902Z" }, - { url = "https://files.pythonhosted.org/packages/5c/7c/d2ba86b0b3e1e2830bd94163d047de122c69a8df03c5c7c36326c456ad82/curl_cffi-0.14.0-cp39-abi3-win_arm64.whl", hash = "sha256:2eed50a969201605c863c4c31269dfc3e0da52916086ac54553cfa353022425c", size = 1425067, upload-time = "2025-12-16T03:25:06.454Z" }, + { url = "https://files.pythonhosted.org/packages/19/d1/acabfd460f1de26cad882e5ef344d9adde1507034528cb6f5698a2e6a2f1/curl_cffi-0.13.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:434cadbe8df2f08b2fc2c16dff2779fb40b984af99c06aa700af898e185bb9db", size = 5686337, upload-time = "2025-08-06T13:05:28.985Z" }, + { url = "https://files.pythonhosted.org/packages/2c/1c/cdb4fb2d16a0e9de068e0e5bc02094e105ce58a687ff30b4c6f88e25a057/curl_cffi-0.13.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:59afa877a9ae09efa04646a7d068eeea48915a95d9add0a29854e7781679fcd7", size = 2994613, upload-time = "2025-08-06T13:05:31.027Z" }, + { url = "https://files.pythonhosted.org/packages/04/3e/fdf617c1ec18c3038b77065d484d7517bb30f8fb8847224eb1f601a4e8bc/curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06ed389e45a7ca97b17c275dbedd3d6524560270e675c720e93a2018a766076", size = 7931353, upload-time = "2025-08-06T13:05:32.273Z" }, + { url = "https://files.pythonhosted.org/packages/3d/10/6f30c05d251cf03ddc2b9fd19880f3cab8c193255e733444a2df03b18944/curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4e0de45ab3b7a835c72bd53640c2347415111b43421b5c7a1a0b18deae2e541", size = 7486378, upload-time = "2025-08-06T13:05:33.672Z" }, + { url = "https://files.pythonhosted.org/packages/77/81/5bdb7dd0d669a817397b2e92193559bf66c3807f5848a48ad10cf02bf6c7/curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8eb4083371bbb94e9470d782de235fb5268bf43520de020c9e5e6be8f395443f", size = 8328585, upload-time = "2025-08-06T13:05:35.28Z" }, + { url = "https://files.pythonhosted.org/packages/ce/c1/df5c6b4cfad41c08442e0f727e449f4fb5a05f8aa564d1acac29062e9e8e/curl_cffi-0.13.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:28911b526e8cd4aa0e5e38401bfe6887e8093907272f1f67ca22e6beb2933a51", size = 8739831, upload-time = "2025-08-06T13:05:37.078Z" }, + { url = "https://files.pythonhosted.org/packages/1a/91/6dd1910a212f2e8eafe57877bcf97748eb24849e1511a266687546066b8a/curl_cffi-0.13.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d433ffcb455ab01dd0d7bde47109083aa38b59863aa183d29c668ae4c96bf8e", size = 8711908, upload-time = "2025-08-06T13:05:38.741Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e4/15a253f9b4bf8d008c31e176c162d2704a7e0c5e24d35942f759df107b68/curl_cffi-0.13.0-cp39-abi3-win_amd64.whl", hash = "sha256:66a6b75ce971de9af64f1b6812e275f60b88880577bac47ef1fa19694fa21cd3", size = 1614510, upload-time = "2025-08-06T13:05:40.451Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0f/9c5275f17ad6ff5be70edb8e0120fdc184a658c9577ca426d4230f654beb/curl_cffi-0.13.0-cp39-abi3-win_arm64.whl", hash = "sha256:d438a3b45244e874794bc4081dc1e356d2bb926dcc7021e5a8fef2e2105ef1d8", size = 1365753, upload-time = "2025-08-06T13:05:41.879Z" }, +] + +[[package]] +name = "dacite" +version = "1.9.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/55/a0/7ca79796e799a3e782045d29bf052b5cde7439a2bbb17f15ff44f7aacc63/dacite-1.9.2.tar.gz", hash = "sha256:6ccc3b299727c7aa17582f0021f6ae14d5de47c7227932c47fec4cdfefd26f09", size = 22420, upload-time = "2025-02-05T09:27:29.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/35/386550fd60316d1e37eccdda609b074113298f23cef5bddb2049823fe666/dacite-1.9.2-py3-none-any.whl", hash = "sha256:053f7c3f5128ca2e9aceb66892b1a3c8936d02c686e707bee96e19deef4bc4a0", size = 16600, upload-time = "2025-02-05T09:27:24.345Z" }, ] [[package]] @@ -552,10 +625,12 @@ wheels = [ [[package]] name = "envied" -version = "3.0.0" +version = "4.0.0" source = { editable = "packages/envied" } dependencies = [ + { name = "aiohttp" }, { name = "aiohttp-swagger3" }, + { name = "animeapi-py" }, { name = "appdirs" }, { name = "brotli" }, { name = "chardet" }, @@ -564,6 +639,7 @@ dependencies = [ { name = "crccheck" }, { name = "cryptography" }, { name = "curl-cffi" }, + { name = "filelock" }, { name = "fonttools" }, { name = "httpx" }, { name = "isodate" }, @@ -614,47 +690,50 @@ dev = [ [package.metadata] requires-dist = [ - { name = "aiohttp-swagger3", specifier = ">=0.10.0,<1" }, + { name = "aiohttp", specifier = ">=3.13.3,<4" }, + { name = "aiohttp-swagger3", specifier = ">=0.9.0,<1" }, + { name = "animeapi-py", specifier = ">=0.6.0" }, { name = "appdirs", specifier = ">=1.4.4,<2" }, { name = "brotli", specifier = ">=1.1.0,<2" }, { name = "chardet", specifier = ">=5.2.0,<6" }, { name = "click", specifier = ">=8.1.8,<9" }, { name = "construct", specifier = ">=2.8.8,<3" }, { name = "crccheck", specifier = ">=1.3.0,<2" }, - { name = "cryptography", specifier = ">=45.0.6,<46.0.0" }, - { name = "curl-cffi", specifier = ">=0.14.0,<0.15" }, - { name = "fonttools", specifier = ">=4.61.1,<5" }, + { name = "cryptography", specifier = ">=45.0.0,<47" }, + { name = "curl-cffi", specifier = ">=0.7.0b4,<0.14" }, + { name = "filelock", specifier = ">=3.20.3,<4" }, + { name = "fonttools", specifier = ">=4.60.2,<5" }, { name = "httpx", specifier = ">=0.28.1,<0.29" }, { name = "isodate", specifier = ">=0.7.2,<0.8" }, - { name = "jsonpickle", specifier = ">=4.1.1,<5" }, - { name = "langcodes", specifier = ">=3.5.0,<4" }, + { name = "jsonpickle", specifier = ">=3.0.4,<5" }, + { name = "langcodes", specifier = ">=3.4.0,<4" }, { name = "language-data", specifier = ">=1.4.0" }, - { name = "lxml", specifier = ">=6.0.2,<7" }, + { name = "lxml", specifier = ">=5.2.1,<7" }, { name = "mypy", specifier = ">=1.19.1,<2" }, { name = "pproxy", specifier = ">=2.7.9,<3" }, - { name = "protobuf", specifier = ">=6.33.3,<7" }, + { name = "protobuf", specifier = ">=4.25.3,<7" }, { name = "pycaption", specifier = ">=2.2.6,<3" }, { name = "pycountry", specifier = ">=24.6.1" }, - { name = "pycryptodomex", specifier = ">=3.23.0,<4" }, + { name = "pycryptodomex", specifier = ">=3.20.0,<4" }, { name = "pyexecjs", specifier = ">=1.5.1,<2" }, - { name = "pyjwt", specifier = ">=2.10.1,<3" }, + { name = "pyjwt", specifier = ">=2.8.0,<3" }, { name = "pymediainfo", specifier = ">=6.1.0,<8" }, { name = "pymp4", specifier = ">=1.4.0,<2" }, { name = "pymysql", specifier = ">=1.1.0,<2" }, - { name = "pyplayready", specifier = ">=0.8.2,<0.9" }, + { name = "pyplayready", specifier = ">=0.8.3,<0.9" }, { name = "pysubs2", specifier = ">=1.7.0,<2" }, - { name = "pywidevine", extras = ["serve"], specifier = ">=1.9.0,<2" }, + { name = "pywidevine", extras = ["serve"], specifier = ">=1.8.0,<2" }, { name = "pyyaml", specifier = ">=6.0.1,<7" }, { name = "requests", extras = ["socks"], specifier = ">=2.32.5,<3" }, - { name = "rich", specifier = ">=14.2.0,<15" }, + { name = "rich", specifier = ">=13.7.1,<15" }, { name = "rlaphoenix-m3u8", specifier = ">=3.4.0,<4" }, - { name = "ruamel-yaml", specifier = ">=0.19.1,<0.20" }, + { name = "ruamel-yaml", specifier = ">=0.18.6,<0.19" }, { name = "scrapy", specifier = ">=2.14.0,<3" }, { name = "sortedcontainers", specifier = ">=2.4.0,<3" }, { name = "subby", git = "https://github.com/vevv/subby.git?rev=5a925c367ffb3f5e53fd114ae222d3be1fdff35d" }, { name = "subtitle-filter", specifier = ">=1.4.9,<2" }, { name = "unidecode", specifier = ">=1.3.8,<2" }, - { name = "urllib3", specifier = ">=2.6.2,<3" }, + { name = "urllib3", specifier = ">=2.6.3,<3" }, { name = "wasmtime", specifier = ">=41.0.0" }, { name = "webvtt-py", specifier = ">=0.5.1,<0.6" }, ] @@ -676,7 +755,7 @@ name = "exceptiongroup" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" } wheels = [ @@ -694,11 +773,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.19.1" +version = "3.25.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" }, ] [[package]] @@ -731,6 +810,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c8/8b/6391b257fa3d0b553d73e778f953a2f0154292a7a7a085e2374b111e5410/fonttools-4.61.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0", size = 5093598, upload-time = "2025-12-12T17:30:15.79Z" }, { url = "https://files.pythonhosted.org/packages/d9/71/fd2ea96cdc512d92da5678a1c98c267ddd4d8c5130b76d0f7a80f9a9fde8/fonttools-4.61.1-cp312-cp312-win32.whl", hash = "sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261", size = 2269060, upload-time = "2025-12-12T17:30:18.058Z" }, { url = "https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl", hash = "sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9", size = 2319078, upload-time = "2025-12-12T17:30:22.862Z" }, + { url = "https://files.pythonhosted.org/packages/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c", size = 2846454, upload-time = "2025-12-12T17:30:24.938Z" }, + { url = "https://files.pythonhosted.org/packages/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e", size = 2398191, upload-time = "2025-12-12T17:30:27.343Z" }, + { url = "https://files.pythonhosted.org/packages/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5", size = 4928410, upload-time = "2025-12-12T17:30:29.771Z" }, + { url = "https://files.pythonhosted.org/packages/b0/8d/6fb3494dfe61a46258cd93d979cf4725ded4eb46c2a4ca35e4490d84daea/fonttools-4.61.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd", size = 4984460, upload-time = "2025-12-12T17:30:32.073Z" }, + { url = "https://files.pythonhosted.org/packages/f7/f1/a47f1d30b3dc00d75e7af762652d4cbc3dff5c2697a0dbd5203c81afd9c3/fonttools-4.61.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3", size = 4925800, upload-time = "2025-12-12T17:30:34.339Z" }, + { url = "https://files.pythonhosted.org/packages/a7/01/e6ae64a0981076e8a66906fab01539799546181e32a37a0257b77e4aa88b/fonttools-4.61.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d", size = 5067859, upload-time = "2025-12-12T17:30:36.593Z" }, + { url = "https://files.pythonhosted.org/packages/73/aa/28e40b8d6809a9b5075350a86779163f074d2b617c15d22343fce81918db/fonttools-4.61.1-cp313-cp313-win32.whl", hash = "sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c", size = 2267821, upload-time = "2025-12-12T17:30:38.478Z" }, + { url = "https://files.pythonhosted.org/packages/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl", hash = "sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b", size = 2318169, upload-time = "2025-12-12T17:30:40.951Z" }, { url = "https://files.pythonhosted.org/packages/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371", size = 1148996, upload-time = "2025-12-12T17:31:21.03Z" }, ] @@ -791,6 +878,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1c/80/9a0eb48b944050f94cc51ee1c413eb14a39543cc4f760ed12657a5a3c45a/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43", size = 237785, upload-time = "2025-06-09T23:01:05.095Z" }, { url = "https://files.pythonhosted.org/packages/f3/74/87601e0fb0369b7a2baf404ea921769c53b7ae00dee7dcfe5162c8c6dbf0/frozenlist-1.7.0-cp312-cp312-win32.whl", hash = "sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3", size = 39487, upload-time = "2025-06-09T23:01:06.54Z" }, { url = "https://files.pythonhosted.org/packages/0b/15/c026e9a9fc17585a9d461f65d8593d281fedf55fbf7eb53f16c6df2392f9/frozenlist-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a", size = 43874, upload-time = "2025-06-09T23:01:07.752Z" }, + { url = "https://files.pythonhosted.org/packages/24/90/6b2cebdabdbd50367273c20ff6b57a3dfa89bd0762de02c3a1eb42cb6462/frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee", size = 79791, upload-time = "2025-06-09T23:01:09.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/2e/5b70b6a3325363293fe5fc3ae74cdcbc3e996c2a11dde2fd9f1fb0776d19/frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d", size = 47165, upload-time = "2025-06-09T23:01:10.653Z" }, + { url = "https://files.pythonhosted.org/packages/f4/25/a0895c99270ca6966110f4ad98e87e5662eab416a17e7fd53c364bf8b954/frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43", size = 45881, upload-time = "2025-06-09T23:01:12.296Z" }, + { url = "https://files.pythonhosted.org/packages/19/7c/71bb0bbe0832793c601fff68cd0cf6143753d0c667f9aec93d3c323f4b55/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d", size = 232409, upload-time = "2025-06-09T23:01:13.641Z" }, + { url = "https://files.pythonhosted.org/packages/c0/45/ed2798718910fe6eb3ba574082aaceff4528e6323f9a8570be0f7028d8e9/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee", size = 225132, upload-time = "2025-06-09T23:01:15.264Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e2/8417ae0f8eacb1d071d4950f32f229aa6bf68ab69aab797b72a07ea68d4f/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb", size = 237638, upload-time = "2025-06-09T23:01:16.752Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b7/2ace5450ce85f2af05a871b8c8719b341294775a0a6c5585d5e6170f2ce7/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f", size = 233539, upload-time = "2025-06-09T23:01:18.202Z" }, + { url = "https://files.pythonhosted.org/packages/46/b9/6989292c5539553dba63f3c83dc4598186ab2888f67c0dc1d917e6887db6/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60", size = 215646, upload-time = "2025-06-09T23:01:19.649Z" }, + { url = "https://files.pythonhosted.org/packages/72/31/bc8c5c99c7818293458fe745dab4fd5730ff49697ccc82b554eb69f16a24/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00", size = 232233, upload-time = "2025-06-09T23:01:21.175Z" }, + { url = "https://files.pythonhosted.org/packages/59/52/460db4d7ba0811b9ccb85af996019f5d70831f2f5f255f7cc61f86199795/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b", size = 227996, upload-time = "2025-06-09T23:01:23.098Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/f4b39e904c03927b7ecf891804fd3b4df3db29b9e487c6418e37988d6e9d/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c", size = 242280, upload-time = "2025-06-09T23:01:24.808Z" }, + { url = "https://files.pythonhosted.org/packages/b8/33/3f8d6ced42f162d743e3517781566b8481322be321b486d9d262adf70bfb/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949", size = 217717, upload-time = "2025-06-09T23:01:26.28Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e8/ad683e75da6ccef50d0ab0c2b2324b32f84fc88ceee778ed79b8e2d2fe2e/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca", size = 236644, upload-time = "2025-06-09T23:01:27.887Z" }, + { url = "https://files.pythonhosted.org/packages/b2/14/8d19ccdd3799310722195a72ac94ddc677541fb4bef4091d8e7775752360/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b", size = 238879, upload-time = "2025-06-09T23:01:29.524Z" }, + { url = "https://files.pythonhosted.org/packages/ce/13/c12bf657494c2fd1079a48b2db49fa4196325909249a52d8f09bc9123fd7/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e", size = 232502, upload-time = "2025-06-09T23:01:31.287Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8b/e7f9dfde869825489382bc0d512c15e96d3964180c9499efcec72e85db7e/frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1", size = 39169, upload-time = "2025-06-09T23:01:35.503Z" }, + { url = "https://files.pythonhosted.org/packages/35/89/a487a98d94205d85745080a37860ff5744b9820a2c9acbcdd9440bfddf98/frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba", size = 43219, upload-time = "2025-06-09T23:01:36.784Z" }, + { url = "https://files.pythonhosted.org/packages/56/d5/5c4cf2319a49eddd9dd7145e66c4866bdc6f3dbc67ca3d59685149c11e0d/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d", size = 84345, upload-time = "2025-06-09T23:01:38.295Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/ec2c1e1dc16b85bc9d526009961953df9cec8481b6886debb36ec9107799/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d", size = 48880, upload-time = "2025-06-09T23:01:39.887Z" }, + { url = "https://files.pythonhosted.org/packages/69/86/f9596807b03de126e11e7d42ac91e3d0b19a6599c714a1989a4e85eeefc4/frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b", size = 48498, upload-time = "2025-06-09T23:01:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cb/df6de220f5036001005f2d726b789b2c0b65f2363b104bbc16f5be8084f8/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146", size = 292296, upload-time = "2025-06-09T23:01:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/83/1f/de84c642f17c8f851a2905cee2dae401e5e0daca9b5ef121e120e19aa825/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74", size = 273103, upload-time = "2025-06-09T23:01:44.166Z" }, + { url = "https://files.pythonhosted.org/packages/88/3c/c840bfa474ba3fa13c772b93070893c6e9d5c0350885760376cbe3b6c1b3/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1", size = 292869, upload-time = "2025-06-09T23:01:45.681Z" }, + { url = "https://files.pythonhosted.org/packages/a6/1c/3efa6e7d5a39a1d5ef0abeb51c48fb657765794a46cf124e5aca2c7a592c/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1", size = 291467, upload-time = "2025-06-09T23:01:47.234Z" }, + { url = "https://files.pythonhosted.org/packages/4f/00/d5c5e09d4922c395e2f2f6b79b9a20dab4b67daaf78ab92e7729341f61f6/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384", size = 266028, upload-time = "2025-06-09T23:01:48.819Z" }, + { url = "https://files.pythonhosted.org/packages/4e/27/72765be905619dfde25a7f33813ac0341eb6b076abede17a2e3fbfade0cb/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb", size = 284294, upload-time = "2025-06-09T23:01:50.394Z" }, + { url = "https://files.pythonhosted.org/packages/88/67/c94103a23001b17808eb7dd1200c156bb69fb68e63fcf0693dde4cd6228c/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c", size = 281898, upload-time = "2025-06-09T23:01:52.234Z" }, + { url = "https://files.pythonhosted.org/packages/42/34/a3e2c00c00f9e2a9db5653bca3fec306349e71aff14ae45ecc6d0951dd24/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65", size = 290465, upload-time = "2025-06-09T23:01:53.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/73/f89b7fbce8b0b0c095d82b008afd0590f71ccb3dee6eee41791cf8cd25fd/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3", size = 266385, upload-time = "2025-06-09T23:01:55.769Z" }, + { url = "https://files.pythonhosted.org/packages/cd/45/e365fdb554159462ca12df54bc59bfa7a9a273ecc21e99e72e597564d1ae/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657", size = 288771, upload-time = "2025-06-09T23:01:57.4Z" }, + { url = "https://files.pythonhosted.org/packages/00/11/47b6117002a0e904f004d70ec5194fe9144f117c33c851e3d51c765962d0/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104", size = 288206, upload-time = "2025-06-09T23:01:58.936Z" }, + { url = "https://files.pythonhosted.org/packages/40/37/5f9f3c3fd7f7746082ec67bcdc204db72dad081f4f83a503d33220a92973/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf", size = 282620, upload-time = "2025-06-09T23:02:00.493Z" }, + { url = "https://files.pythonhosted.org/packages/0b/31/8fbc5af2d183bff20f21aa743b4088eac4445d2bb1cdece449ae80e4e2d1/frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81", size = 43059, upload-time = "2025-06-09T23:02:02.072Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ed/41956f52105b8dbc26e457c5705340c67c8cc2b79f394b79bffc09d0e938/frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e", size = 47516, upload-time = "2025-06-09T23:02:03.779Z" }, { url = "https://files.pythonhosted.org/packages/ee/45/b82e3c16be2182bff01179db177fe144d58b5dc787a7d4492c6ed8b9317f/frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e", size = 13106, upload-time = "2025-06-09T23:02:34.204Z" }, ] @@ -1013,6 +1134,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/87/8202c9bd0968bdddc188ec3811985f47f58ed161b3749299f2c0dd0f63fb/librt-0.7.7-cp312-cp312-win32.whl", hash = "sha256:1bcd79be209313b270b0e1a51c67ae1af28adad0e0c7e84c3ad4b5cb57aaa75b", size = 43189, upload-time = "2026-01-01T23:51:26.799Z" }, { url = "https://files.pythonhosted.org/packages/61/8d/80244b267b585e7aa79ffdac19f66c4861effc3a24598e77909ecdd0850e/librt-0.7.7-cp312-cp312-win_amd64.whl", hash = "sha256:4353ee891a1834567e0302d4bd5e60f531912179578c36f3d0430f8c5e16b456", size = 49462, upload-time = "2026-01-01T23:51:27.813Z" }, { url = "https://files.pythonhosted.org/packages/2d/1f/75db802d6a4992d95e8a889682601af9b49d5a13bbfa246d414eede1b56c/librt-0.7.7-cp312-cp312-win_arm64.whl", hash = "sha256:a76f1d679beccccdf8c1958e732a1dfcd6e749f8821ee59d7bec009ac308c029", size = 42828, upload-time = "2026-01-01T23:51:28.804Z" }, + { url = "https://files.pythonhosted.org/packages/8d/5e/d979ccb0a81407ec47c14ea68fb217ff4315521730033e1dd9faa4f3e2c1/librt-0.7.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f4a0b0a3c86ba9193a8e23bb18f100d647bf192390ae195d84dfa0a10fb6244", size = 55746, upload-time = "2026-01-01T23:51:29.828Z" }, + { url = "https://files.pythonhosted.org/packages/f5/2c/3b65861fb32f802c3783d6ac66fc5589564d07452a47a8cf9980d531cad3/librt-0.7.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5335890fea9f9e6c4fdf8683061b9ccdcbe47c6dc03ab8e9b68c10acf78be78d", size = 57174, upload-time = "2026-01-01T23:51:31.226Z" }, + { url = "https://files.pythonhosted.org/packages/50/df/030b50614b29e443607220097ebaf438531ea218c7a9a3e21ea862a919cd/librt-0.7.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b4346b1225be26def3ccc6c965751c74868f0578cbcba293c8ae9168483d811", size = 165834, upload-time = "2026-01-01T23:51:32.278Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e1/bd8d1eacacb24be26a47f157719553bbd1b3fe812c30dddf121c0436fd0b/librt-0.7.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a10b8eebdaca6e9fdbaf88b5aefc0e324b763a5f40b1266532590d5afb268a4c", size = 174819, upload-time = "2026-01-01T23:51:33.461Z" }, + { url = "https://files.pythonhosted.org/packages/46/7d/91d6c3372acf54a019c1ad8da4c9ecf4fc27d039708880bf95f48dbe426a/librt-0.7.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:067be973d90d9e319e6eb4ee2a9b9307f0ecd648b8a9002fa237289a4a07a9e7", size = 189607, upload-time = "2026-01-01T23:51:34.604Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ac/44604d6d3886f791fbd1c6ae12d5a782a8f4aca927484731979f5e92c200/librt-0.7.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:23d2299ed007812cccc1ecef018db7d922733382561230de1f3954db28433977", size = 184586, upload-time = "2026-01-01T23:51:35.845Z" }, + { url = "https://files.pythonhosted.org/packages/5c/26/d8a6e4c17117b7f9b83301319d9a9de862ae56b133efb4bad8b3aa0808c9/librt-0.7.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6b6f8ea465524aa4c7420c7cc4ca7d46fe00981de8debc67b1cc2e9957bb5b9d", size = 178251, upload-time = "2026-01-01T23:51:37.018Z" }, + { url = "https://files.pythonhosted.org/packages/99/ab/98d857e254376f8e2f668e807daccc1f445e4b4fc2f6f9c1cc08866b0227/librt-0.7.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8df32a99cc46eb0ee90afd9ada113ae2cafe7e8d673686cf03ec53e49635439", size = 199853, upload-time = "2026-01-01T23:51:38.195Z" }, + { url = "https://files.pythonhosted.org/packages/7c/55/4523210d6ae5134a5da959900be43ad8bab2e4206687b6620befddb5b5fd/librt-0.7.7-cp313-cp313-win32.whl", hash = "sha256:86f86b3b785487c7760247bcdac0b11aa8bf13245a13ed05206286135877564b", size = 43247, upload-time = "2026-01-01T23:51:39.629Z" }, + { url = "https://files.pythonhosted.org/packages/25/40/3ec0fed5e8e9297b1cf1a3836fb589d3de55f9930e3aba988d379e8ef67c/librt-0.7.7-cp313-cp313-win_amd64.whl", hash = "sha256:4862cb2c702b1f905c0503b72d9d4daf65a7fdf5a9e84560e563471e57a56949", size = 49419, upload-time = "2026-01-01T23:51:40.674Z" }, + { url = "https://files.pythonhosted.org/packages/1c/7a/aab5f0fb122822e2acbc776addf8b9abfb4944a9056c00c393e46e543177/librt-0.7.7-cp313-cp313-win_arm64.whl", hash = "sha256:0996c83b1cb43c00e8c87835a284f9057bc647abd42b5871e5f941d30010c832", size = 42828, upload-time = "2026-01-01T23:51:41.731Z" }, ] [[package]] @@ -1071,6 +1203,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456, upload-time = "2025-09-22T04:01:48.243Z" }, { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793, upload-time = "2025-09-22T04:01:50.042Z" }, { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836, upload-time = "2025-09-22T04:01:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77", size = 8648494, upload-time = "2025-09-22T04:01:54.242Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f", size = 4661146, upload-time = "2025-09-22T04:01:56.282Z" }, + { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932, upload-time = "2025-09-22T04:01:58.989Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060, upload-time = "2025-09-22T04:02:00.812Z" }, + { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000, upload-time = "2025-09-22T04:02:02.671Z" }, + { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496, upload-time = "2025-09-22T04:02:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779, upload-time = "2025-09-22T04:02:06.689Z" }, + { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072, upload-time = "2025-09-22T04:02:08.587Z" }, + { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675, upload-time = "2025-09-22T04:02:10.783Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171, upload-time = "2025-09-22T04:02:12.631Z" }, + { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175, upload-time = "2025-09-22T04:02:14.718Z" }, + { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688, upload-time = "2025-09-22T04:02:16.957Z" }, + { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655, upload-time = "2025-09-22T04:02:18.815Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695, upload-time = "2025-09-22T04:02:20.593Z" }, + { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841, upload-time = "2025-09-22T04:02:22.489Z" }, + { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700, upload-time = "2025-09-22T04:02:24.465Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347, upload-time = "2025-09-22T04:02:26.286Z" }, + { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248, upload-time = "2025-09-22T04:02:27.918Z" }, { url = "https://files.pythonhosted.org/packages/e7/9c/780c9a8fce3f04690b374f72f41306866b0400b9d0fdf3e17aaa37887eed/lxml-6.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6", size = 3939264, upload-time = "2025-09-22T04:04:32.892Z" }, { url = "https://files.pythonhosted.org/packages/f5/5a/1ab260c00adf645d8bf7dec7f920f744b032f69130c681302821d5debea6/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba", size = 4216435, upload-time = "2025-09-22T04:04:34.907Z" }, { url = "https://files.pythonhosted.org/packages/f2/37/565f3b3d7ffede22874b6d86be1a1763d00f4ea9fc5b9b6ccb11e4ec8612/lxml-6.0.2-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5", size = 4325913, upload-time = "2025-09-22T04:04:37.205Z" }, @@ -1115,6 +1265,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/58/da/244d9d4e414ce6c73124cba4cc293dd140bf3b04ca18dec64c2775cca951/marisa_trie-1.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0b9816ab993001a7854b02a7daec228892f35bd5ab0ac493bacbd1b80baec9f1", size = 2256104, upload-time = "2025-08-26T15:12:20.168Z" }, { url = "https://files.pythonhosted.org/packages/c4/f1/1a36ecd7da6668685a7753522af89a19928ffc80f1cc1dbc301af216f011/marisa_trie-1.3.1-cp312-cp312-win32.whl", hash = "sha256:c785fd6dae9daa6825734b7b494cdac972f958be1f9cb3fb1f32be8598d2b936", size = 115624, upload-time = "2025-08-26T15:12:21.233Z" }, { url = "https://files.pythonhosted.org/packages/35/b2/aabd1c9f1c102aa31d66633ed5328c447be166e0a703f9723e682478fd83/marisa_trie-1.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:9868b7a8e0f648d09ffe25ac29511e6e208cc5fb0d156c295385f9d5dc2a138e", size = 138562, upload-time = "2025-08-26T15:12:22.632Z" }, + { url = "https://files.pythonhosted.org/packages/46/a2/8331b995c1b3eee83aa745f4a6502d737ec523d5955a48f167d4177db105/marisa_trie-1.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9de573d933db4753a50af891bcb3ffbfe14e200406214c223aa5dfe2163f316d", size = 172272, upload-time = "2025-08-26T15:12:24.016Z" }, + { url = "https://files.pythonhosted.org/packages/97/b8/7b9681b5c0ea1bb950f907a4e3919eb7f7b7b3febafaae346f3b3f199f6f/marisa_trie-1.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f4bae4f920f2a1082eaf766c1883df7da84abdf333bafa15b8717c10416a615e", size = 154671, upload-time = "2025-08-26T15:12:25.013Z" }, + { url = "https://files.pythonhosted.org/packages/ca/16/929c1f83fdcff13f8d08500f434aaa18c21c8168d16cf81585d69085e980/marisa_trie-1.3.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf9f2b97fcfd5e2dbb0090d0664023872dcde990df0b545eca8d0ce95795a409", size = 1238754, upload-time = "2025-08-26T15:12:26.217Z" }, + { url = "https://files.pythonhosted.org/packages/0f/0a/b0e04d3ef91a87d4c7ea0b66c004fdfc6e65c9ed83edaebecfb482dfe0ed/marisa_trie-1.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecdb19d33b26738a32602ef432b06cc6deeca4b498ce67ba8e5e39c8a7c19745", size = 1262653, upload-time = "2025-08-26T15:12:27.422Z" }, + { url = "https://files.pythonhosted.org/packages/de/1f/0ecf610ddc9a209ee63116baabb47584d5b8ecd01610091a593d9429537e/marisa_trie-1.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7416f1a084eb889c5792c57317875aeaa86abfe0bdc6f167712cebcec1d36ee", size = 2172399, upload-time = "2025-08-26T15:12:28.926Z" }, + { url = "https://files.pythonhosted.org/packages/ac/74/6b47deff3b3920449c135b9187c80f0d656adcdc5d41463745a61b012ea1/marisa_trie-1.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee428575377e29c636f2b4b3b0488875dcea310c6c5b3412ec4ef997f7bb37cc", size = 2255138, upload-time = "2025-08-26T15:12:30.271Z" }, + { url = "https://files.pythonhosted.org/packages/bd/fa/3dbcbe93dfaa626a5b3e741e7bcf3d7389aa5777175213bd8d9a9d3c992d/marisa_trie-1.3.1-cp313-cp313-win32.whl", hash = "sha256:d0f87bdf660f01e88ab3a507955697b2e3284065afa0b94fc9e77d6ad153ed5e", size = 115391, upload-time = "2025-08-26T15:12:31.465Z" }, + { url = "https://files.pythonhosted.org/packages/3b/ce/ddfab303646b21aef07ff9dbc83fba92e5d493f49d3bc03d899ffd45c86f/marisa_trie-1.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:a83f5f7ae3494e0cc25211296252b1b86901c788ed82c83adda19d0c98f828d6", size = 139130, upload-time = "2025-08-26T15:12:32.4Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1e/734b618048ad05c50cb1673ce2c6e836dc38ddeeeb011ed1804af07327a4/marisa_trie-1.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a850b151bd1e3a5d9afef113adc22727d696603659d575d7e84f994bd8d04bf1", size = 175131, upload-time = "2025-08-26T15:12:33.728Z" }, + { url = "https://files.pythonhosted.org/packages/d3/78/c7051147cc918cb8ff4a2920e11a9b17d9dcb4d8fc122122694b486e2bfe/marisa_trie-1.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:9dc61fb8f8993589544f6df268229c6cf0a56ad4ed3e8585a9cd23c5ad79527b", size = 163094, upload-time = "2025-08-26T15:12:35.312Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b8/3b904178d7878319aacaabae5131c1f281519aaac0f8c68c8ed312912ccf/marisa_trie-1.3.1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4bd41a6e73c0d0adafe4de449b6d35530a4ce6a836a6ee839baf117785ecfd7", size = 1279812, upload-time = "2025-08-26T15:12:36.831Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bf/e77a1284247b980560b4104bbdd5d06ed2c2ae3d56ab954f97293b6dbbcd/marisa_trie-1.3.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8c8b2386d2d22c57880ed20a913ceca86363765623175671137484a7d223f07a", size = 1285690, upload-time = "2025-08-26T15:12:38.754Z" }, + { url = "https://files.pythonhosted.org/packages/48/82/f6f10db5ec72de2642499f3a6e4e8607bbd2cfb28269ea08d0d8ddac3313/marisa_trie-1.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c56001badaf1779afae5c24b7ab85938644ab8ef3c5fd438ab5d49621b84482", size = 2197943, upload-time = "2025-08-26T15:12:40.584Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d0/74b6c3011b1ebf4a8131430156b14c3af694082cf34c392fff766096fd4b/marisa_trie-1.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83a3748088d117a9b15d8981c947df9e4f56eb2e4b5456ae34fe1f83666c9185", size = 2280132, upload-time = "2025-08-26T15:12:42.059Z" }, + { url = "https://files.pythonhosted.org/packages/28/b2/b8b0cb738fa3ab07309ed92025c6e1b278f84c7255e976921a52b30d8d1b/marisa_trie-1.3.1-cp313-cp313t-win32.whl", hash = "sha256:137010598d8cebc53dbfb7caf59bde96c33a6af555e3e1bdbf30269b6a157e1e", size = 126446, upload-time = "2025-08-26T15:12:43.339Z" }, + { url = "https://files.pythonhosted.org/packages/b6/c6/2381648d0c946556ef51c673397cea40712d945444ceed0a0a0b51a174d2/marisa_trie-1.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:ec633e108f277f2b7f4671d933a909f39bba549910bf103e2940b87a14da2783", size = 153885, upload-time = "2025-08-26T15:12:44.309Z" }, ] [[package]] @@ -1210,6 +1376,42 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/86/a2/8022f78f041dfe6d71e364001a5cf987c30edfc83c8a5fb7a3f0974cff39/multidict-6.6.4-cp312-cp312-win32.whl", hash = "sha256:8c2fcb12136530ed19572bbba61b407f655e3953ba669b96a35036a11a485793", size = 41888, upload-time = "2025-08-11T12:07:15.904Z" }, { url = "https://files.pythonhosted.org/packages/c7/eb/d88b1780d43a56db2cba24289fa744a9d216c1a8546a0dc3956563fd53ea/multidict-6.6.4-cp312-cp312-win_amd64.whl", hash = "sha256:047d9425860a8c9544fed1b9584f0c8bcd31bcde9568b047c5e567a1025ecd6e", size = 46072, upload-time = "2025-08-11T12:07:17.045Z" }, { url = "https://files.pythonhosted.org/packages/9f/16/b929320bf5750e2d9d4931835a4c638a19d2494a5b519caaaa7492ebe105/multidict-6.6.4-cp312-cp312-win_arm64.whl", hash = "sha256:14754eb72feaa1e8ae528468f24250dd997b8e2188c3d2f593f9eba259e4b364", size = 43222, upload-time = "2025-08-11T12:07:18.328Z" }, + { url = "https://files.pythonhosted.org/packages/3a/5d/e1db626f64f60008320aab00fbe4f23fc3300d75892a3381275b3d284580/multidict-6.6.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f46a6e8597f9bd71b31cc708195d42b634c8527fecbcf93febf1052cacc1f16e", size = 75848, upload-time = "2025-08-11T12:07:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/4c/aa/8b6f548d839b6c13887253af4e29c939af22a18591bfb5d0ee6f1931dae8/multidict-6.6.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:22e38b2bc176c5eb9c0a0e379f9d188ae4cd8b28c0f53b52bce7ab0a9e534657", size = 45060, upload-time = "2025-08-11T12:07:21.163Z" }, + { url = "https://files.pythonhosted.org/packages/eb/c6/f5e97e5d99a729bc2aa58eb3ebfa9f1e56a9b517cc38c60537c81834a73f/multidict-6.6.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5df8afd26f162da59e218ac0eefaa01b01b2e6cd606cffa46608f699539246da", size = 43269, upload-time = "2025-08-11T12:07:22.392Z" }, + { url = "https://files.pythonhosted.org/packages/dc/31/d54eb0c62516776f36fe67f84a732f97e0b0e12f98d5685bebcc6d396910/multidict-6.6.4-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:49517449b58d043023720aa58e62b2f74ce9b28f740a0b5d33971149553d72aa", size = 237158, upload-time = "2025-08-11T12:07:23.636Z" }, + { url = "https://files.pythonhosted.org/packages/c4/1c/8a10c1c25b23156e63b12165a929d8eb49a6ed769fdbefb06e6f07c1e50d/multidict-6.6.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae9408439537c5afdca05edd128a63f56a62680f4b3c234301055d7a2000220f", size = 257076, upload-time = "2025-08-11T12:07:25.049Z" }, + { url = "https://files.pythonhosted.org/packages/ad/86/90e20b5771d6805a119e483fd3d1e8393e745a11511aebca41f0da38c3e2/multidict-6.6.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:87a32d20759dc52a9e850fe1061b6e41ab28e2998d44168a8a341b99ded1dba0", size = 240694, upload-time = "2025-08-11T12:07:26.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/49/484d3e6b535bc0555b52a0a26ba86e4d8d03fd5587d4936dc59ba7583221/multidict-6.6.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:52e3c8d43cdfff587ceedce9deb25e6ae77daba560b626e97a56ddcad3756879", size = 266350, upload-time = "2025-08-11T12:07:27.94Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b4/aa4c5c379b11895083d50021e229e90c408d7d875471cb3abf721e4670d6/multidict-6.6.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ad8850921d3a8d8ff6fbef790e773cecfc260bbfa0566998980d3fa8f520bc4a", size = 267250, upload-time = "2025-08-11T12:07:29.303Z" }, + { url = "https://files.pythonhosted.org/packages/80/e5/5e22c5bf96a64bdd43518b1834c6d95a4922cc2066b7d8e467dae9b6cee6/multidict-6.6.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:497a2954adc25c08daff36f795077f63ad33e13f19bfff7736e72c785391534f", size = 254900, upload-time = "2025-08-11T12:07:30.764Z" }, + { url = "https://files.pythonhosted.org/packages/17/38/58b27fed927c07035abc02befacab42491e7388ca105e087e6e0215ead64/multidict-6.6.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:024ce601f92d780ca1617ad4be5ac15b501cc2414970ffa2bb2bbc2bd5a68fa5", size = 252355, upload-time = "2025-08-11T12:07:32.205Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a1/dad75d23a90c29c02b5d6f3d7c10ab36c3197613be5d07ec49c7791e186c/multidict-6.6.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a693fc5ed9bdd1c9e898013e0da4dcc640de7963a371c0bd458e50e046bf6438", size = 250061, upload-time = "2025-08-11T12:07:33.623Z" }, + { url = "https://files.pythonhosted.org/packages/b8/1a/ac2216b61c7f116edab6dc3378cca6c70dc019c9a457ff0d754067c58b20/multidict-6.6.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:190766dac95aab54cae5b152a56520fd99298f32a1266d66d27fdd1b5ac00f4e", size = 249675, upload-time = "2025-08-11T12:07:34.958Z" }, + { url = "https://files.pythonhosted.org/packages/d4/79/1916af833b800d13883e452e8e0977c065c4ee3ab7a26941fbfdebc11895/multidict-6.6.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:34d8f2a5ffdceab9dcd97c7a016deb2308531d5f0fced2bb0c9e1df45b3363d7", size = 261247, upload-time = "2025-08-11T12:07:36.588Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/d1f84fe08ac44a5fc7391cbc20a7cedc433ea616b266284413fd86062f8c/multidict-6.6.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:59e8d40ab1f5a8597abcef00d04845155a5693b5da00d2c93dbe88f2050f2812", size = 257960, upload-time = "2025-08-11T12:07:39.735Z" }, + { url = "https://files.pythonhosted.org/packages/13/b5/29ec78057d377b195ac2c5248c773703a6b602e132a763e20ec0457e7440/multidict-6.6.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:467fe64138cfac771f0e949b938c2e1ada2b5af22f39692aa9258715e9ea613a", size = 250078, upload-time = "2025-08-11T12:07:41.525Z" }, + { url = "https://files.pythonhosted.org/packages/c4/0e/7e79d38f70a872cae32e29b0d77024bef7834b0afb406ddae6558d9e2414/multidict-6.6.4-cp313-cp313-win32.whl", hash = "sha256:14616a30fe6d0a48d0a48d1a633ab3b8bec4cf293aac65f32ed116f620adfd69", size = 41708, upload-time = "2025-08-11T12:07:43.405Z" }, + { url = "https://files.pythonhosted.org/packages/9d/34/746696dffff742e97cd6a23da953e55d0ea51fa601fa2ff387b3edcfaa2c/multidict-6.6.4-cp313-cp313-win_amd64.whl", hash = "sha256:40cd05eaeb39e2bc8939451f033e57feaa2ac99e07dbca8afe2be450a4a3b6cf", size = 45912, upload-time = "2025-08-11T12:07:45.082Z" }, + { url = "https://files.pythonhosted.org/packages/c7/87/3bac136181e271e29170d8d71929cdeddeb77f3e8b6a0c08da3a8e9da114/multidict-6.6.4-cp313-cp313-win_arm64.whl", hash = "sha256:f6eb37d511bfae9e13e82cb4d1af36b91150466f24d9b2b8a9785816deb16605", size = 43076, upload-time = "2025-08-11T12:07:46.746Z" }, + { url = "https://files.pythonhosted.org/packages/64/94/0a8e63e36c049b571c9ae41ee301ada29c3fee9643d9c2548d7d558a1d99/multidict-6.6.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:6c84378acd4f37d1b507dfa0d459b449e2321b3ba5f2338f9b085cf7a7ba95eb", size = 82812, upload-time = "2025-08-11T12:07:48.402Z" }, + { url = "https://files.pythonhosted.org/packages/25/1a/be8e369dfcd260d2070a67e65dd3990dd635cbd735b98da31e00ea84cd4e/multidict-6.6.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0e0558693063c75f3d952abf645c78f3c5dfdd825a41d8c4d8156fc0b0da6e7e", size = 48313, upload-time = "2025-08-11T12:07:49.679Z" }, + { url = "https://files.pythonhosted.org/packages/26/5a/dd4ade298674b2f9a7b06a32c94ffbc0497354df8285f27317c66433ce3b/multidict-6.6.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3f8e2384cb83ebd23fd07e9eada8ba64afc4c759cd94817433ab8c81ee4b403f", size = 46777, upload-time = "2025-08-11T12:07:51.318Z" }, + { url = "https://files.pythonhosted.org/packages/89/db/98aa28bc7e071bfba611ac2ae803c24e96dd3a452b4118c587d3d872c64c/multidict-6.6.4-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f996b87b420995a9174b2a7c1a8daf7db4750be6848b03eb5e639674f7963773", size = 229321, upload-time = "2025-08-11T12:07:52.965Z" }, + { url = "https://files.pythonhosted.org/packages/c7/bc/01ddda2a73dd9d167bd85d0e8ef4293836a8f82b786c63fb1a429bc3e678/multidict-6.6.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc356250cffd6e78416cf5b40dc6a74f1edf3be8e834cf8862d9ed5265cf9b0e", size = 249954, upload-time = "2025-08-11T12:07:54.423Z" }, + { url = "https://files.pythonhosted.org/packages/06/78/6b7c0f020f9aa0acf66d0ab4eb9f08375bac9a50ff5e3edb1c4ccd59eafc/multidict-6.6.4-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:dadf95aa862714ea468a49ad1e09fe00fcc9ec67d122f6596a8d40caf6cec7d0", size = 228612, upload-time = "2025-08-11T12:07:55.914Z" }, + { url = "https://files.pythonhosted.org/packages/00/44/3faa416f89b2d5d76e9d447296a81521e1c832ad6e40b92f990697b43192/multidict-6.6.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7dd57515bebffd8ebd714d101d4c434063322e4fe24042e90ced41f18b6d3395", size = 257528, upload-time = "2025-08-11T12:07:57.371Z" }, + { url = "https://files.pythonhosted.org/packages/05/5f/77c03b89af0fcb16f018f668207768191fb9dcfb5e3361a5e706a11db2c9/multidict-6.6.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:967af5f238ebc2eb1da4e77af5492219fbd9b4b812347da39a7b5f5c72c0fa45", size = 256329, upload-time = "2025-08-11T12:07:58.844Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e9/ed750a2a9afb4f8dc6f13dc5b67b514832101b95714f1211cd42e0aafc26/multidict-6.6.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a4c6875c37aae9794308ec43e3530e4aa0d36579ce38d89979bbf89582002bb", size = 247928, upload-time = "2025-08-11T12:08:01.037Z" }, + { url = "https://files.pythonhosted.org/packages/1f/b5/e0571bc13cda277db7e6e8a532791d4403dacc9850006cb66d2556e649c0/multidict-6.6.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7f683a551e92bdb7fac545b9c6f9fa2aebdeefa61d607510b3533286fcab67f5", size = 245228, upload-time = "2025-08-11T12:08:02.96Z" }, + { url = "https://files.pythonhosted.org/packages/f3/a3/69a84b0eccb9824491f06368f5b86e72e4af54c3067c37c39099b6687109/multidict-6.6.4-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:3ba5aaf600edaf2a868a391779f7a85d93bed147854925f34edd24cc70a3e141", size = 235869, upload-time = "2025-08-11T12:08:04.746Z" }, + { url = "https://files.pythonhosted.org/packages/a9/9d/28802e8f9121a6a0804fa009debf4e753d0a59969ea9f70be5f5fdfcb18f/multidict-6.6.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:580b643b7fd2c295d83cad90d78419081f53fd532d1f1eb67ceb7060f61cff0d", size = 243446, upload-time = "2025-08-11T12:08:06.332Z" }, + { url = "https://files.pythonhosted.org/packages/38/ea/6c98add069b4878c1d66428a5f5149ddb6d32b1f9836a826ac764b9940be/multidict-6.6.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:37b7187197da6af3ee0b044dbc9625afd0c885f2800815b228a0e70f9a7f473d", size = 252299, upload-time = "2025-08-11T12:08:07.931Z" }, + { url = "https://files.pythonhosted.org/packages/3a/09/8fe02d204473e14c0af3affd50af9078839dfca1742f025cca765435d6b4/multidict-6.6.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e1b93790ed0bc26feb72e2f08299691ceb6da5e9e14a0d13cc74f1869af327a0", size = 246926, upload-time = "2025-08-11T12:08:09.467Z" }, + { url = "https://files.pythonhosted.org/packages/37/3d/7b1e10d774a6df5175ecd3c92bff069e77bed9ec2a927fdd4ff5fe182f67/multidict-6.6.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a506a77ddee1efcca81ecbeae27ade3e09cdf21a8ae854d766c2bb4f14053f92", size = 243383, upload-time = "2025-08-11T12:08:10.981Z" }, + { url = "https://files.pythonhosted.org/packages/50/b0/a6fae46071b645ae98786ab738447de1ef53742eaad949f27e960864bb49/multidict-6.6.4-cp313-cp313t-win32.whl", hash = "sha256:f93b2b2279883d1d0a9e1bd01f312d6fc315c5e4c1f09e112e4736e2f650bc4e", size = 47775, upload-time = "2025-08-11T12:08:12.439Z" }, + { url = "https://files.pythonhosted.org/packages/b2/0a/2436550b1520091af0600dff547913cb2d66fbac27a8c33bc1b1bccd8d98/multidict-6.6.4-cp313-cp313t-win_amd64.whl", hash = "sha256:6d46a180acdf6e87cc41dc15d8f5c2986e1e8739dc25dbb7dac826731ef381a4", size = 53100, upload-time = "2025-08-11T12:08:13.823Z" }, + { url = "https://files.pythonhosted.org/packages/97/ea/43ac51faff934086db9c072a94d327d71b7d8b40cd5dcb47311330929ef0/multidict-6.6.4-cp313-cp313t-win_arm64.whl", hash = "sha256:756989334015e3335d087a27331659820d53ba432befdef6a718398b0a8493ad", size = 45501, upload-time = "2025-08-11T12:08:15.173Z" }, { url = "https://files.pythonhosted.org/packages/fd/69/b547032297c7e63ba2af494edba695d781af8a0c6e89e4d06cf848b21d80/multidict-6.6.4-py3-none-any.whl", hash = "sha256:27d8f8e125c07cb954e54d75d04905a9bba8a439c1d84aca94949d4d03d8601c", size = 12313, upload-time = "2025-08-11T12:08:46.891Z" }, ] @@ -1244,6 +1446,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8", size = 13620847, upload-time = "2025-12-15T05:03:39.633Z" }, { url = "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a", size = 13834976, upload-time = "2025-12-15T05:03:08.786Z" }, { url = "https://files.pythonhosted.org/packages/6f/63/e7493e5f90e1e085c562bb06e2eb32cae27c5057b9653348d38b47daaecc/mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13", size = 10118104, upload-time = "2025-12-15T05:03:10.834Z" }, + { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, + { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, + { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, + { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, + { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, ] @@ -1408,6 +1616,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/7c/3f539fcae630408d0bd8bf3208b9a647ccad10976eda62402a80adf8fc34/propcache-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1", size = 222142, upload-time = "2025-06-09T22:54:50.424Z" }, { url = "https://files.pythonhosted.org/packages/7c/d2/34b9eac8c35f79f8a962546b3e97e9d4b990c420ee66ac8255d5d9611648/propcache-0.3.2-cp312-cp312-win32.whl", hash = "sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1", size = 37711, upload-time = "2025-06-09T22:54:52.072Z" }, { url = "https://files.pythonhosted.org/packages/19/61/d582be5d226cf79071681d1b46b848d6cb03d7b70af7063e33a2787eaa03/propcache-0.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c", size = 41479, upload-time = "2025-06-09T22:54:53.234Z" }, + { url = "https://files.pythonhosted.org/packages/dc/d1/8c747fafa558c603c4ca19d8e20b288aa0c7cda74e9402f50f31eb65267e/propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945", size = 71286, upload-time = "2025-06-09T22:54:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/61/99/d606cb7986b60d89c36de8a85d58764323b3a5ff07770a99d8e993b3fa73/propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252", size = 42425, upload-time = "2025-06-09T22:54:55.642Z" }, + { url = "https://files.pythonhosted.org/packages/8c/96/ef98f91bbb42b79e9bb82bdd348b255eb9d65f14dbbe3b1594644c4073f7/propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f", size = 41846, upload-time = "2025-06-09T22:54:57.246Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ad/3f0f9a705fb630d175146cd7b1d2bf5555c9beaed54e94132b21aac098a6/propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33", size = 208871, upload-time = "2025-06-09T22:54:58.975Z" }, + { url = "https://files.pythonhosted.org/packages/3a/38/2085cda93d2c8b6ec3e92af2c89489a36a5886b712a34ab25de9fbca7992/propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e", size = 215720, upload-time = "2025-06-09T22:55:00.471Z" }, + { url = "https://files.pythonhosted.org/packages/61/c1/d72ea2dc83ac7f2c8e182786ab0fc2c7bd123a1ff9b7975bee671866fe5f/propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1", size = 215203, upload-time = "2025-06-09T22:55:01.834Z" }, + { url = "https://files.pythonhosted.org/packages/af/81/b324c44ae60c56ef12007105f1460d5c304b0626ab0cc6b07c8f2a9aa0b8/propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3", size = 206365, upload-time = "2025-06-09T22:55:03.199Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/88549128bb89e66d2aff242488f62869014ae092db63ccea53c1cc75a81d/propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1", size = 196016, upload-time = "2025-06-09T22:55:04.518Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3f/3bdd14e737d145114a5eb83cb172903afba7242f67c5877f9909a20d948d/propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6", size = 205596, upload-time = "2025-06-09T22:55:05.942Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ca/2f4aa819c357d3107c3763d7ef42c03980f9ed5c48c82e01e25945d437c1/propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387", size = 200977, upload-time = "2025-06-09T22:55:07.792Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4a/e65276c7477533c59085251ae88505caf6831c0e85ff8b2e31ebcbb949b1/propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4", size = 197220, upload-time = "2025-06-09T22:55:09.173Z" }, + { url = "https://files.pythonhosted.org/packages/7c/54/fc7152e517cf5578278b242396ce4d4b36795423988ef39bb8cd5bf274c8/propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88", size = 210642, upload-time = "2025-06-09T22:55:10.62Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/abeb4a896d2767bf5f1ea7b92eb7be6a5330645bd7fb844049c0e4045d9d/propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206", size = 212789, upload-time = "2025-06-09T22:55:12.029Z" }, + { url = "https://files.pythonhosted.org/packages/b3/db/ea12a49aa7b2b6d68a5da8293dcf50068d48d088100ac016ad92a6a780e6/propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43", size = 205880, upload-time = "2025-06-09T22:55:13.45Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e5/9076a0bbbfb65d1198007059c65639dfd56266cf8e477a9707e4b1999ff4/propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02", size = 37220, upload-time = "2025-06-09T22:55:15.284Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f5/b369e026b09a26cd77aa88d8fffd69141d2ae00a2abaaf5380d2603f4b7f/propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05", size = 40678, upload-time = "2025-06-09T22:55:16.445Z" }, + { url = "https://files.pythonhosted.org/packages/a4/3a/6ece377b55544941a08d03581c7bc400a3c8cd3c2865900a68d5de79e21f/propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b", size = 76560, upload-time = "2025-06-09T22:55:17.598Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/64a2bb16418740fa634b0e9c3d29edff1db07f56d3546ca2d86ddf0305e1/propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0", size = 44676, upload-time = "2025-06-09T22:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/36/7b/f025e06ea51cb72c52fb87e9b395cced02786610b60a3ed51da8af017170/propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e", size = 44701, upload-time = "2025-06-09T22:55:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/a4/00/faa1b1b7c3b74fc277f8642f32a4c72ba1d7b2de36d7cdfb676db7f4303e/propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28", size = 276934, upload-time = "2025-06-09T22:55:21.5Z" }, + { url = "https://files.pythonhosted.org/packages/74/ab/935beb6f1756e0476a4d5938ff44bf0d13a055fed880caf93859b4f1baf4/propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a", size = 278316, upload-time = "2025-06-09T22:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9d/994a5c1ce4389610838d1caec74bdf0e98b306c70314d46dbe4fcf21a3e2/propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c", size = 282619, upload-time = "2025-06-09T22:55:24.651Z" }, + { url = "https://files.pythonhosted.org/packages/2b/00/a10afce3d1ed0287cef2e09506d3be9822513f2c1e96457ee369adb9a6cd/propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725", size = 265896, upload-time = "2025-06-09T22:55:26.049Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a8/2aa6716ffa566ca57c749edb909ad27884680887d68517e4be41b02299f3/propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892", size = 252111, upload-time = "2025-06-09T22:55:27.381Z" }, + { url = "https://files.pythonhosted.org/packages/36/4f/345ca9183b85ac29c8694b0941f7484bf419c7f0fea2d1e386b4f7893eed/propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44", size = 268334, upload-time = "2025-06-09T22:55:28.747Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ca/fcd54f78b59e3f97b3b9715501e3147f5340167733d27db423aa321e7148/propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe", size = 255026, upload-time = "2025-06-09T22:55:30.184Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/8e6a6bbbd78ac89c30c225210a5c687790e532ba4088afb8c0445b77ef37/propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81", size = 250724, upload-time = "2025-06-09T22:55:31.646Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b0/0dd03616142baba28e8b2d14ce5df6631b4673850a3d4f9c0f9dd714a404/propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba", size = 268868, upload-time = "2025-06-09T22:55:33.209Z" }, + { url = "https://files.pythonhosted.org/packages/c5/98/2c12407a7e4fbacd94ddd32f3b1e3d5231e77c30ef7162b12a60e2dd5ce3/propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770", size = 271322, upload-time = "2025-06-09T22:55:35.065Z" }, + { url = "https://files.pythonhosted.org/packages/35/91/9cb56efbb428b006bb85db28591e40b7736847b8331d43fe335acf95f6c8/propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330", size = 265778, upload-time = "2025-06-09T22:55:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/b0fe775a2bdd01e176b14b574be679d84fc83958335790f7c9a686c1f468/propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394", size = 41175, upload-time = "2025-06-09T22:55:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ff/47f08595e3d9b5e149c150f88d9714574f1a7cbd89fe2817158a952674bf/propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198", size = 44857, upload-time = "2025-06-09T22:55:39.687Z" }, { url = "https://files.pythonhosted.org/packages/cc/35/cc0aaecf278bb4575b8555f2b137de5ab821595ddae9da9d3cd1da4072c7/propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f", size = 12663, upload-time = "2025-06-09T22:56:04.484Z" }, ] @@ -1494,6 +1734,17 @@ version = "3.23.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/04/5d/bdb09489b63cd34a976cc9e2a8d938114f7a53a74d3dd4f125ffa49dce82/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:0011f7f00cdb74879142011f95133274741778abba114ceca229adbf8e62c3e4", size = 2495152, upload-time = "2025-05-17T17:20:20.833Z" }, + { url = "https://files.pythonhosted.org/packages/a7/ce/7840250ed4cc0039c433cd41715536f926d6e86ce84e904068eb3244b6a6/pycryptodome-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:90460fc9e088ce095f9ee8356722d4f10f86e5be06e2354230a9880b9c549aae", size = 1639348, upload-time = "2025-05-17T17:20:23.171Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f0/991da24c55c1f688d6a3b5a11940567353f74590734ee4a64294834ae472/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4764e64b269fc83b00f682c47443c2e6e85b18273712b98aa43bcb77f8570477", size = 2184033, upload-time = "2025-05-17T17:20:25.424Z" }, + { url = "https://files.pythonhosted.org/packages/54/16/0e11882deddf00f68b68dd4e8e442ddc30641f31afeb2bc25588124ac8de/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb8f24adb74984aa0e5d07a2368ad95276cf38051fe2dc6605cbcf482e04f2a7", size = 2270142, upload-time = "2025-05-17T17:20:27.808Z" }, + { url = "https://files.pythonhosted.org/packages/d5/fc/4347fea23a3f95ffb931f383ff28b3f7b1fe868739182cb76718c0da86a1/pycryptodome-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d97618c9c6684a97ef7637ba43bdf6663a2e2e77efe0f863cce97a76af396446", size = 2309384, upload-time = "2025-05-17T17:20:30.765Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d9/c5261780b69ce66d8cfab25d2797bd6e82ba0241804694cd48be41add5eb/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9a53a4fe5cb075075d515797d6ce2f56772ea7e6a1e5e4b96cf78a14bac3d265", size = 2183237, upload-time = "2025-05-17T17:20:33.736Z" }, + { url = "https://files.pythonhosted.org/packages/5a/6f/3af2ffedd5cfa08c631f89452c6648c4d779e7772dfc388c77c920ca6bbf/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:763d1d74f56f031788e5d307029caef067febf890cd1f8bf61183ae142f1a77b", size = 2343898, upload-time = "2025-05-17T17:20:36.086Z" }, + { url = "https://files.pythonhosted.org/packages/9a/dc/9060d807039ee5de6e2f260f72f3d70ac213993a804f5e67e0a73a56dd2f/pycryptodome-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:954af0e2bd7cea83ce72243b14e4fb518b18f0c1649b576d114973e2073b273d", size = 2269197, upload-time = "2025-05-17T17:20:38.414Z" }, + { url = "https://files.pythonhosted.org/packages/f9/34/e6c8ca177cb29dcc4967fef73f5de445912f93bd0343c9c33c8e5bf8cde8/pycryptodome-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:257bb3572c63ad8ba40b89f6fc9d63a2a628e9f9708d31ee26560925ebe0210a", size = 1768600, upload-time = "2025-05-17T17:20:40.688Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1d/89756b8d7ff623ad0160f4539da571d1f594d21ee6d68be130a6eccb39a4/pycryptodome-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6501790c5b62a29fcb227bd6b62012181d886a767ce9ed03b303d1f22eb5c625", size = 1799740, upload-time = "2025-05-17T17:20:42.413Z" }, + { url = "https://files.pythonhosted.org/packages/5d/61/35a64f0feaea9fd07f0d91209e7be91726eb48c0f1bfc6720647194071e4/pycryptodome-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9a77627a330ab23ca43b48b130e202582e91cc69619947840ea4d2d1be21eb39", size = 1703685, upload-time = "2025-05-17T17:20:44.388Z" }, { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" }, { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" }, { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" }, @@ -1518,6 +1769,17 @@ version = "3.23.0" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/c9/85/e24bf90972a30b0fcd16c73009add1d7d7cd9140c2498a68252028899e41/pycryptodomex-3.23.0.tar.gz", hash = "sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da", size = 4922157, upload-time = "2025-05-17T17:23:41.434Z" } wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/00/10edb04777069a42490a38c137099d4b17ba6e36a4e6e28bdc7470e9e853/pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886", size = 2498764, upload-time = "2025-05-17T17:22:21.453Z" }, + { url = "https://files.pythonhosted.org/packages/6b/3f/2872a9c2d3a27eac094f9ceaa5a8a483b774ae69018040ea3240d5b11154/pycryptodomex-3.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d", size = 1643012, upload-time = "2025-05-17T17:22:23.702Z" }, + { url = "https://files.pythonhosted.org/packages/70/af/774c2e2b4f6570fbf6a4972161adbb183aeeaa1863bde31e8706f123bf92/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa", size = 2187643, upload-time = "2025-05-17T17:22:26.37Z" }, + { url = "https://files.pythonhosted.org/packages/de/a3/71065b24cb889d537954cedc3ae5466af00a2cabcff8e29b73be047e9a19/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8", size = 2273762, upload-time = "2025-05-17T17:22:28.313Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0b/ff6f43b7fbef4d302c8b981fe58467b8871902cdc3eb28896b52421422cc/pycryptodomex-3.23.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5", size = 2313012, upload-time = "2025-05-17T17:22:30.57Z" }, + { url = "https://files.pythonhosted.org/packages/02/de/9d4772c0506ab6da10b41159493657105d3f8bb5c53615d19452afc6b315/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314", size = 2186856, upload-time = "2025-05-17T17:22:32.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/ad/8b30efcd6341707a234e5eba5493700a17852ca1ac7a75daa7945fcf6427/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006", size = 2347523, upload-time = "2025-05-17T17:22:35.386Z" }, + { url = "https://files.pythonhosted.org/packages/0f/02/16868e9f655b7670dbb0ac4f2844145cbc42251f916fc35c414ad2359849/pycryptodomex-3.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462", size = 2272825, upload-time = "2025-05-17T17:22:37.632Z" }, + { url = "https://files.pythonhosted.org/packages/ca/18/4ca89ac737230b52ac8ffaca42f9c6f1fd07c81a6cd821e91af79db60632/pycryptodomex-3.23.0-cp313-cp313t-win32.whl", hash = "sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328", size = 1772078, upload-time = "2025-05-17T17:22:40Z" }, + { url = "https://files.pythonhosted.org/packages/73/34/13e01c322db027682e00986873eca803f11c56ade9ba5bbf3225841ea2d4/pycryptodomex-3.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708", size = 1803656, upload-time = "2025-05-17T17:22:42.139Z" }, + { url = "https://files.pythonhosted.org/packages/54/68/9504c8796b1805d58f4425002bcca20f12880e6fa4dc2fc9a668705c7a08/pycryptodomex-3.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4", size = 1707172, upload-time = "2025-05-17T17:22:44.704Z" }, { url = "https://files.pythonhosted.org/packages/dd/9c/1a8f35daa39784ed8adf93a694e7e5dc15c23c741bbda06e1d45f8979e9e/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6", size = 2499240, upload-time = "2025-05-17T17:22:46.953Z" }, { url = "https://files.pythonhosted.org/packages/7a/62/f5221a191a97157d240cf6643747558759126c76ee92f29a3f4aee3197a5/pycryptodomex-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545", size = 1644042, upload-time = "2025-05-17T17:22:49.098Z" }, { url = "https://files.pythonhosted.org/packages/8c/fd/5a054543c8988d4ed7b612721d7e78a4b9bf36bc3c5ad45ef45c22d0060e/pycryptodomex-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587", size = 2186227, upload-time = "2025-05-17T17:22:51.139Z" }, @@ -1610,7 +1872,7 @@ version = "25.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, - { name = "typing-extensions" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/80/be/97b83a464498a79103036bc74d1038df4a7ef0e402cfaf4d5e113fb14759/pyopenssl-25.3.0.tar.gz", hash = "sha256:c981cb0a3fd84e8602d7afc209522773b94c1c2446a3c710a75b06fe1beae329", size = 184073, upload-time = "2025-09-17T00:32:21.037Z" } wheels = [ @@ -1619,7 +1881,7 @@ wheels = [ [[package]] name = "pyplayready" -version = "0.8.2" +version = "0.8.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -1632,9 +1894,9 @@ dependencies = [ { name = "pyyaml" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1a/15/981d49d82a1d1bea9d1bdc334bfe31c0f920fc2481eb0311ef812882e1ef/pyplayready-0.8.2.tar.gz", hash = "sha256:8f58364fcba64e0c57dfb170888e0067db45da9e131a220ab9c8415e65d14aed", size = 67385, upload-time = "2026-01-04T08:32:28.966Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7b/19939e4075c6a54058cea2451240e07ff13dee1561aadad03bd8b6170df1/pyplayready-0.8.4.tar.gz", hash = "sha256:ea3110c5179e96d271bebcf6c9e6ee221024dd1e6a0ca1070add429a1a9eba92", size = 67519, upload-time = "2026-03-12T16:31:51.671Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/6d/bb8c0cdaa8dcce3097269fb8182723d6d8446b3aacffef248f9ad1cd9890/pyplayready-0.8.2-py3-none-any.whl", hash = "sha256:d5b43170b1aee9eaf057b1b0a1be97e8678e2fba5d4f25964210fb4ceaf8d10f", size = 77891, upload-time = "2026-01-04T08:32:27.745Z" }, + { url = "https://files.pythonhosted.org/packages/3a/69/40d03b8e4f0b9a84f2c8d96ba0d03c3af837a061e4f6215b2d68469c399e/pyplayready-0.8.4-py3-none-any.whl", hash = "sha256:b8a64b1e4e9e70da6fe40dede485a7e3010d584cf8d37f1d19444143ee68e441", size = 78021, upload-time = "2026-03-12T16:31:50.565Z" }, ] [[package]] @@ -1693,6 +1955,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/21/40/de9491213f480a27199690616959a17a0f234962b86aa1dd4ca2584e922d/pyqt6_sip-13.10.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:37af463dcce39285e686d49523d376994d8a2508b9acccb7616c4b117c9c4ed7", size = 304251, upload-time = "2025-05-23T12:26:35.66Z" }, { url = "https://files.pythonhosted.org/packages/02/21/cc80e03f1052408c62c341e9fe9b81454c94184f4bd8a95d29d2ec86df92/pyqt6_sip-13.10.2-cp312-cp312-win_amd64.whl", hash = "sha256:c7b34a495b92790c70eae690d9e816b53d3b625b45eeed6ae2c0fe24075a237e", size = 53519, upload-time = "2025-05-23T12:26:36.797Z" }, { url = "https://files.pythonhosted.org/packages/77/cf/53bd0863252b260a502659cb3124d9c9fe38047df9360e529b437b4ac890/pyqt6_sip-13.10.2-cp312-cp312-win_arm64.whl", hash = "sha256:c80cc059d772c632f5319632f183e7578cd0976b9498682833035b18a3483e92", size = 45349, upload-time = "2025-05-23T12:26:37.729Z" }, + { url = "https://files.pythonhosted.org/packages/a1/1e/979ea64c98ca26979d8ce11e9a36579e17d22a71f51d7366d6eec3c82c13/pyqt6_sip-13.10.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8b5d06a0eac36038fa8734657d99b5fe92263ae7a0cd0a67be6acfe220a063e1", size = 112227, upload-time = "2025-05-23T12:26:38.758Z" }, + { url = "https://files.pythonhosted.org/packages/d9/21/84c230048e3bfef4a9209d16e56dcd2ae10590d03a31556ae8b5f1dcc724/pyqt6_sip-13.10.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad376a6078da37b049fdf9d6637d71b52727e65c4496a80b753ddc8d27526aca", size = 322920, upload-time = "2025-05-23T12:26:39.856Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/c6a28a142f14e735088534cc92951c3f48cccd77cdd4f3b10d7996be420f/pyqt6_sip-13.10.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3dde8024d055f496eba7d44061c5a1ba4eb72fc95e5a9d7a0dbc908317e0888b", size = 303833, upload-time = "2025-05-23T12:26:41.075Z" }, + { url = "https://files.pythonhosted.org/packages/89/63/e5adf350c1c3123d4865c013f164c5265512fa79f09ad464fb2fdf9f9e61/pyqt6_sip-13.10.2-cp313-cp313-win_amd64.whl", hash = "sha256:0b097eb58b4df936c4a2a88a2f367c8bb5c20ff049a45a7917ad75d698e3b277", size = 53527, upload-time = "2025-05-23T12:26:42.625Z" }, + { url = "https://files.pythonhosted.org/packages/58/74/2df4195306d050fbf4963fb5636108a66e5afa6dc05fd9e81e51ec96c384/pyqt6_sip-13.10.2-cp313-cp313-win_arm64.whl", hash = "sha256:cc6a1dfdf324efaac6e7b890a608385205e652845c62130de919fd73a6326244", size = 45373, upload-time = "2025-05-23T12:26:43.536Z" }, ] [[package]] @@ -1797,6 +2064,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, + { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, + { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, + { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, + { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, + { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, + { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, + { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, + { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, ] [[package]] @@ -1892,11 +2169,62 @@ wheels = [ [[package]] name = "ruamel-yaml" -version = "0.19.1" +version = "0.18.17" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/3b/ebda527b56beb90cb7652cb1c7e4f91f48649fbcd8d2eb2fb6e77cd3329b/ruamel_yaml-0.19.1.tar.gz", hash = "sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993", size = 142709, upload-time = "2026-01-02T16:50:31.84Z" } +dependencies = [ + { name = "ruamel-yaml-clib", marker = "platform_python_implementation == 'CPython'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/2b/7a1f1ebcd6b3f14febdc003e658778d81e76b40df2267904ee6b13f0c5c6/ruamel_yaml-0.18.17.tar.gz", hash = "sha256:9091cd6e2d93a3a4b157ddb8fabf348c3de7f1fb1381346d985b6b247dcd8d3c", size = 149602, upload-time = "2025-12-17T20:02:55.757Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/0c/51f6841f1d84f404f92463fc2b1ba0da357ca1e3db6b7fbda26956c3b82a/ruamel_yaml-0.19.1-py3-none-any.whl", hash = "sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93", size = 118102, upload-time = "2026-01-02T16:50:29.201Z" }, + { url = "https://files.pythonhosted.org/packages/af/fe/b6045c782f1fd1ae317d2a6ca1884857ce5c20f59befe6ab25a8603c43a7/ruamel_yaml-0.18.17-py3-none-any.whl", hash = "sha256:9c8ba9eb3e793efdf924b60d521820869d5bf0cb9c6f1b82d82de8295e290b9d", size = 121594, upload-time = "2025-12-17T20:02:07.657Z" }, +] + +[[package]] +name = "ruamel-yaml-clib" +version = "0.2.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/97/60fda20e2fb54b83a61ae14648b0817c8f5d84a3821e40bfbdae1437026a/ruamel_yaml_clib-0.2.15.tar.gz", hash = "sha256:46e4cc8c43ef6a94885f72512094e482114a8a706d3c555a34ed4b0d20200600", size = 225794, upload-time = "2025-11-16T16:12:59.761Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/5a/4ab767cd42dcd65b83c323e1620d7c01ee60a52f4032fb7b61501f45f5c2/ruamel_yaml_clib-0.2.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:88eea8baf72f0ccf232c22124d122a7f26e8a24110a0273d9bcddcb0f7e1fa03", size = 147454, upload-time = "2025-11-16T16:13:02.54Z" }, + { url = "https://files.pythonhosted.org/packages/40/44/184173ac1e74fd35d308108bcbf83904d6ef8439c70763189225a166b238/ruamel_yaml_clib-0.2.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b6f7d74d094d1f3a4e157278da97752f16ee230080ae331fcc219056ca54f77", size = 132467, upload-time = "2025-11-16T16:13:03.539Z" }, + { url = "https://files.pythonhosted.org/packages/49/1b/2d2077a25fe682ae335007ca831aff42e3cbc93c14066675cf87a6c7fc3e/ruamel_yaml_clib-0.2.15-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4be366220090d7c3424ac2b71c90d1044ea34fca8c0b88f250064fd06087e614", size = 693454, upload-time = "2025-11-16T20:22:41.083Z" }, + { url = "https://files.pythonhosted.org/packages/90/16/e708059c4c429ad2e33be65507fc1730641e5f239fb2964efc1ba6edea94/ruamel_yaml_clib-0.2.15-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f66f600833af58bea694d5892453f2270695b92200280ee8c625ec5a477eed3", size = 700345, upload-time = "2025-11-16T16:13:04.771Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/0e8ef51df1f0950300541222e3332f20707a9c210b98f981422937d1278c/ruamel_yaml_clib-0.2.15-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da3d6adadcf55a93c214d23941aef4abfd45652110aed6580e814152f385b862", size = 731306, upload-time = "2025-11-16T16:13:06.312Z" }, + { url = "https://files.pythonhosted.org/packages/a6/f4/2cdb54b142987ddfbd01fc45ac6bd882695fbcedb9d8bbf796adc3fc3746/ruamel_yaml_clib-0.2.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9fde97ecb7bb9c41261c2ce0da10323e9227555c674989f8d9eb7572fc2098d", size = 692415, upload-time = "2025-11-16T16:13:07.465Z" }, + { url = "https://files.pythonhosted.org/packages/a0/07/40b5fc701cce8240a3e2d26488985d3bbdc446e9fe397c135528d412fea6/ruamel_yaml_clib-0.2.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:05c70f7f86be6f7bee53794d80050a28ae7e13e4a0087c1839dcdefd68eb36b6", size = 705007, upload-time = "2025-11-16T20:22:42.856Z" }, + { url = "https://files.pythonhosted.org/packages/82/19/309258a1df6192fb4a77ffa8eae3e8150e8d0ffa56c1b6fa92e450ba2740/ruamel_yaml_clib-0.2.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f1d38cbe622039d111b69e9ca945e7e3efebb30ba998867908773183357f3ed", size = 723974, upload-time = "2025-11-16T16:13:08.72Z" }, + { url = "https://files.pythonhosted.org/packages/67/3a/d6ee8263b521bfceb5cd2faeb904a15936480f2bb01c7ff74a14ec058ca4/ruamel_yaml_clib-0.2.15-cp310-cp310-win32.whl", hash = "sha256:fe239bdfdae2302e93bd6e8264bd9b71290218fff7084a9db250b55caaccf43f", size = 102836, upload-time = "2025-11-16T16:13:10.27Z" }, + { url = "https://files.pythonhosted.org/packages/ed/03/92aeb5c69018387abc49a8bb4f83b54a0471d9ef48e403b24bac68f01381/ruamel_yaml_clib-0.2.15-cp310-cp310-win_amd64.whl", hash = "sha256:468858e5cbde0198337e6a2a78eda8c3fb148bdf4c6498eaf4bc9ba3f8e780bd", size = 121917, upload-time = "2025-11-16T16:13:12.145Z" }, + { url = "https://files.pythonhosted.org/packages/2c/80/8ce7b9af532aa94dd83360f01ce4716264db73de6bc8efd22c32341f6658/ruamel_yaml_clib-0.2.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c583229f336682b7212a43d2fa32c30e643d3076178fb9f7a6a14dde85a2d8bd", size = 147998, upload-time = "2025-11-16T16:13:13.241Z" }, + { url = "https://files.pythonhosted.org/packages/53/09/de9d3f6b6701ced5f276d082ad0f980edf08ca67114523d1b9264cd5e2e0/ruamel_yaml_clib-0.2.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56ea19c157ed8c74b6be51b5fa1c3aff6e289a041575f0556f66e5fb848bb137", size = 132743, upload-time = "2025-11-16T16:13:14.265Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f7/73a9b517571e214fe5c246698ff3ed232f1ef863c8ae1667486625ec688a/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5fea0932358e18293407feb921d4f4457db837b67ec1837f87074667449f9401", size = 731459, upload-time = "2025-11-16T20:22:44.338Z" }, + { url = "https://files.pythonhosted.org/packages/9b/a2/0dc0013169800f1c331a6f55b1282c1f4492a6d32660a0cf7b89e6684919/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef71831bd61fbdb7aa0399d5c4da06bea37107ab5c79ff884cc07f2450910262", size = 749289, upload-time = "2025-11-16T16:13:15.633Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ed/3fb20a1a96b8dc645d88c4072df481fe06e0289e4d528ebbdcc044ebc8b3/ruamel_yaml_clib-0.2.15-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f", size = 777630, upload-time = "2025-11-16T16:13:16.898Z" }, + { url = "https://files.pythonhosted.org/packages/60/50/6842f4628bc98b7aa4733ab2378346e1441e150935ad3b9f3c3c429d9408/ruamel_yaml_clib-0.2.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b45498cc81a4724a2d42273d6cfc243c0547ad7c6b87b4f774cb7bcc131c98d", size = 744368, upload-time = "2025-11-16T16:13:18.117Z" }, + { url = "https://files.pythonhosted.org/packages/d3/b0/128ae8e19a7d794c2e36130a72b3bb650ce1dd13fb7def6cf10656437dcf/ruamel_yaml_clib-0.2.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:def5663361f6771b18646620fca12968aae730132e104688766cf8a3b1d65922", size = 745233, upload-time = "2025-11-16T20:22:45.833Z" }, + { url = "https://files.pythonhosted.org/packages/75/05/91130633602d6ba7ce3e07f8fc865b40d2a09efd4751c740df89eed5caf9/ruamel_yaml_clib-0.2.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:014181cdec565c8745b7cbc4de3bf2cc8ced05183d986e6d1200168e5bb59490", size = 770963, upload-time = "2025-11-16T16:13:19.344Z" }, + { url = "https://files.pythonhosted.org/packages/fd/4b/fd4542e7f33d7d1bc64cc9ac9ba574ce8cf145569d21f5f20133336cdc8c/ruamel_yaml_clib-0.2.15-cp311-cp311-win32.whl", hash = "sha256:d290eda8f6ada19e1771b54e5706b8f9807e6bb08e873900d5ba114ced13e02c", size = 102640, upload-time = "2025-11-16T16:13:20.498Z" }, + { url = "https://files.pythonhosted.org/packages/bb/eb/00ff6032c19c7537371e3119287999570867a0eafb0154fccc80e74bf57a/ruamel_yaml_clib-0.2.15-cp311-cp311-win_amd64.whl", hash = "sha256:bdc06ad71173b915167702f55d0f3f027fc61abd975bd308a0968c02db4a4c3e", size = 121996, upload-time = "2025-11-16T16:13:21.855Z" }, + { url = "https://files.pythonhosted.org/packages/72/4b/5fde11a0722d676e469d3d6f78c6a17591b9c7e0072ca359801c4bd17eee/ruamel_yaml_clib-0.2.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb15a2e2a90c8475df45c0949793af1ff413acfb0a716b8b94e488ea95ce7cff", size = 149088, upload-time = "2025-11-16T16:13:22.836Z" }, + { url = "https://files.pythonhosted.org/packages/85/82/4d08ac65ecf0ef3b046421985e66301a242804eb9a62c93ca3437dc94ee0/ruamel_yaml_clib-0.2.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:64da03cbe93c1e91af133f5bec37fd24d0d4ba2418eaf970d7166b0a26a148a2", size = 134553, upload-time = "2025-11-16T16:13:24.151Z" }, + { url = "https://files.pythonhosted.org/packages/b9/cb/22366d68b280e281a932403b76da7a988108287adff2bfa5ce881200107a/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f6d3655e95a80325b84c4e14c080b2470fe4f33b6846f288379ce36154993fb1", size = 737468, upload-time = "2025-11-16T20:22:47.335Z" }, + { url = "https://files.pythonhosted.org/packages/71/73/81230babf8c9e33770d43ed9056f603f6f5f9665aea4177a2c30ae48e3f3/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71845d377c7a47afc6592aacfea738cc8a7e876d586dfba814501d8c53c1ba60", size = 753349, upload-time = "2025-11-16T16:13:26.269Z" }, + { url = "https://files.pythonhosted.org/packages/61/62/150c841f24cda9e30f588ef396ed83f64cfdc13b92d2f925bb96df337ba9/ruamel_yaml_clib-0.2.15-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9", size = 788211, upload-time = "2025-11-16T16:13:27.441Z" }, + { url = "https://files.pythonhosted.org/packages/30/93/e79bd9cbecc3267499d9ead919bd61f7ddf55d793fb5ef2b1d7d92444f35/ruamel_yaml_clib-0.2.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4b293a37dc97e2b1e8a1aec62792d1e52027087c8eea4fc7b5abd2bdafdd6642", size = 743203, upload-time = "2025-11-16T16:13:28.671Z" }, + { url = "https://files.pythonhosted.org/packages/8d/06/1eb640065c3a27ce92d76157f8efddb184bd484ed2639b712396a20d6dce/ruamel_yaml_clib-0.2.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:512571ad41bba04eac7268fe33f7f4742210ca26a81fe0c75357fa682636c690", size = 747292, upload-time = "2025-11-16T20:22:48.584Z" }, + { url = "https://files.pythonhosted.org/packages/a5/21/ee353e882350beab65fcc47a91b6bdc512cace4358ee327af2962892ff16/ruamel_yaml_clib-0.2.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5e9f630c73a490b758bf14d859a39f375e6999aea5ddd2e2e9da89b9953486a", size = 771624, upload-time = "2025-11-16T16:13:29.853Z" }, + { url = "https://files.pythonhosted.org/packages/57/34/cc1b94057aa867c963ecf9ea92ac59198ec2ee3a8d22a126af0b4d4be712/ruamel_yaml_clib-0.2.15-cp312-cp312-win32.whl", hash = "sha256:f4421ab780c37210a07d138e56dd4b51f8642187cdfb433eb687fe8c11de0144", size = 100342, upload-time = "2025-11-16T16:13:31.067Z" }, + { url = "https://files.pythonhosted.org/packages/b3/e5/8925a4208f131b218f9a7e459c0d6fcac8324ae35da269cb437894576366/ruamel_yaml_clib-0.2.15-cp312-cp312-win_amd64.whl", hash = "sha256:2b216904750889133d9222b7b873c199d48ecbb12912aca78970f84a5aa1a4bc", size = 119013, upload-time = "2025-11-16T16:13:32.164Z" }, + { url = "https://files.pythonhosted.org/packages/17/5e/2f970ce4c573dc30c2f95825f2691c96d55560268ddc67603dc6ea2dd08e/ruamel_yaml_clib-0.2.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dcec721fddbb62e60c2801ba08c87010bd6b700054a09998c4d09c08147b8fb", size = 147450, upload-time = "2025-11-16T16:13:33.542Z" }, + { url = "https://files.pythonhosted.org/packages/d6/03/a1baa5b94f71383913f21b96172fb3a2eb5576a4637729adbf7cd9f797f8/ruamel_yaml_clib-0.2.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:65f48245279f9bb301d1276f9679b82e4c080a1ae25e679f682ac62446fac471", size = 133139, upload-time = "2025-11-16T16:13:34.587Z" }, + { url = "https://files.pythonhosted.org/packages/dc/19/40d676802390f85784235a05788fd28940923382e3f8b943d25febbb98b7/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:46895c17ead5e22bea5e576f1db7e41cb273e8d062c04a6a49013d9f60996c25", size = 731474, upload-time = "2025-11-16T20:22:49.934Z" }, + { url = "https://files.pythonhosted.org/packages/ce/bb/6ef5abfa43b48dd55c30d53e997f8f978722f02add61efba31380d73e42e/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3eb199178b08956e5be6288ee0b05b2fb0b5c1f309725ad25d9c6ea7e27f962a", size = 748047, upload-time = "2025-11-16T16:13:35.633Z" }, + { url = "https://files.pythonhosted.org/packages/ff/5d/e4f84c9c448613e12bd62e90b23aa127ea4c46b697f3d760acc32cb94f25/ruamel_yaml_clib-0.2.15-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf", size = 782129, upload-time = "2025-11-16T16:13:36.781Z" }, + { url = "https://files.pythonhosted.org/packages/de/4b/e98086e88f76c00c88a6bcf15eae27a1454f661a9eb72b111e6bbb69024d/ruamel_yaml_clib-0.2.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ab0df0648d86a7ecbd9c632e8f8d6b21bb21b5fc9d9e095c796cacf32a728d2d", size = 736848, upload-time = "2025-11-16T16:13:37.952Z" }, + { url = "https://files.pythonhosted.org/packages/0c/5c/5964fcd1fd9acc53b7a3a5d9a05ea4f95ead9495d980003a557deb9769c7/ruamel_yaml_clib-0.2.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:331fb180858dd8534f0e61aa243b944f25e73a4dae9962bd44c46d1761126bbf", size = 741630, upload-time = "2025-11-16T20:22:51.718Z" }, + { url = "https://files.pythonhosted.org/packages/07/1e/99660f5a30fceb58494598e7d15df883a07292346ef5696f0c0ae5dee8c6/ruamel_yaml_clib-0.2.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fd4c928ddf6bce586285daa6d90680b9c291cfd045fc40aad34e445d57b1bf51", size = 766619, upload-time = "2025-11-16T16:13:39.178Z" }, + { url = "https://files.pythonhosted.org/packages/36/2f/fa0344a9327b58b54970e56a27b32416ffbcfe4dcc0700605516708579b2/ruamel_yaml_clib-0.2.15-cp313-cp313-win32.whl", hash = "sha256:bf0846d629e160223805db9fe8cc7aec16aaa11a07310c50c8c7164efa440aec", size = 100171, upload-time = "2025-11-16T16:13:40.456Z" }, + { url = "https://files.pythonhosted.org/packages/06/c4/c124fbcef0684fcf3c9b72374c2a8c35c94464d8694c50f37eef27f5a145/ruamel_yaml_clib-0.2.15-cp313-cp313-win_amd64.whl", hash = "sha256:45702dfbea1420ba3450bb3dd9a80b33f0badd57539c6aac09f42584303e0db6", size = 118845, upload-time = "2025-11-16T16:13:41.481Z" }, ] [[package]] @@ -2084,6 +2412,14 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, + { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, + { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, + { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, + { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, + { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, + { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, + { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, ] @@ -2306,6 +2642,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/85/9363f77bdfa1e4d690957cd39d192c4cacd1c58965df0470a4905253b54f/yarl-1.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004", size = 374069, upload-time = "2025-06-10T00:44:12.834Z" }, { url = "https://files.pythonhosted.org/packages/35/99/9918c8739ba271dcd935400cff8b32e3cd319eaf02fcd023d5dcd487a7c8/yarl-1.20.1-cp312-cp312-win32.whl", hash = "sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5", size = 81249, upload-time = "2025-06-10T00:44:14.731Z" }, { url = "https://files.pythonhosted.org/packages/eb/83/5d9092950565481b413b31a23e75dd3418ff0a277d6e0abf3729d4d1ce25/yarl-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698", size = 86710, upload-time = "2025-06-10T00:44:16.716Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e1/2411b6d7f769a07687acee88a062af5833cf1966b7266f3d8dfb3d3dc7d3/yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a", size = 131811, upload-time = "2025-06-10T00:44:18.933Z" }, + { url = "https://files.pythonhosted.org/packages/b2/27/584394e1cb76fb771371770eccad35de400e7b434ce3142c2dd27392c968/yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3", size = 90078, upload-time = "2025-06-10T00:44:20.635Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9a/3246ae92d4049099f52d9b0fe3486e3b500e29b7ea872d0f152966fc209d/yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7", size = 88748, upload-time = "2025-06-10T00:44:22.34Z" }, + { url = "https://files.pythonhosted.org/packages/a3/25/35afe384e31115a1a801fbcf84012d7a066d89035befae7c5d4284df1e03/yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691", size = 349595, upload-time = "2025-06-10T00:44:24.314Z" }, + { url = "https://files.pythonhosted.org/packages/28/2d/8aca6cb2cabc8f12efcb82749b9cefecbccfc7b0384e56cd71058ccee433/yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31", size = 342616, upload-time = "2025-06-10T00:44:26.167Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/1312633d16b31acf0098d30440ca855e3492d66623dafb8e25b03d00c3da/yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28", size = 361324, upload-time = "2025-06-10T00:44:27.915Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/688cc99463f12f7669eec7c8acc71ef56a1521b99eab7cd3abb75af887b0/yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653", size = 359676, upload-time = "2025-06-10T00:44:30.041Z" }, + { url = "https://files.pythonhosted.org/packages/af/44/46407d7f7a56e9a85a4c207724c9f2c545c060380718eea9088f222ba697/yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5", size = 352614, upload-time = "2025-06-10T00:44:32.171Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/31163295e82b8d5485d31d9cf7754d973d41915cadce070491778d9c9825/yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02", size = 336766, upload-time = "2025-06-10T00:44:34.494Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8e/c41a5bc482121f51c083c4c2bcd16b9e01e1cf8729e380273a952513a21f/yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53", size = 364615, upload-time = "2025-06-10T00:44:36.856Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5b/61a3b054238d33d70ea06ebba7e58597891b71c699e247df35cc984ab393/yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc", size = 360982, upload-time = "2025-06-10T00:44:39.141Z" }, + { url = "https://files.pythonhosted.org/packages/df/a3/6a72fb83f8d478cb201d14927bc8040af901811a88e0ff2da7842dd0ed19/yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04", size = 369792, upload-time = "2025-06-10T00:44:40.934Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/4cc3c36dfc7c077f8dedb561eb21f69e1e9f2456b91b593882b0b18c19dc/yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4", size = 382049, upload-time = "2025-06-10T00:44:42.854Z" }, + { url = "https://files.pythonhosted.org/packages/19/3a/e54e2c4752160115183a66dc9ee75a153f81f3ab2ba4bf79c3c53b33de34/yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b", size = 384774, upload-time = "2025-06-10T00:44:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/200ae86dabfca89060ec6447649f219b4cbd94531e425e50d57e5f5ac330/yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1", size = 374252, upload-time = "2025-06-10T00:44:47.31Z" }, + { url = "https://files.pythonhosted.org/packages/83/75/11ee332f2f516b3d094e89448da73d557687f7d137d5a0f48c40ff211487/yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7", size = 81198, upload-time = "2025-06-10T00:44:49.164Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ba/39b1ecbf51620b40ab402b0fc817f0ff750f6d92712b44689c2c215be89d/yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c", size = 86346, upload-time = "2025-06-10T00:44:51.182Z" }, + { url = "https://files.pythonhosted.org/packages/43/c7/669c52519dca4c95153c8ad96dd123c79f354a376346b198f438e56ffeb4/yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d", size = 138826, upload-time = "2025-06-10T00:44:52.883Z" }, + { url = "https://files.pythonhosted.org/packages/6a/42/fc0053719b44f6ad04a75d7f05e0e9674d45ef62f2d9ad2c1163e5c05827/yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf", size = 93217, upload-time = "2025-06-10T00:44:54.658Z" }, + { url = "https://files.pythonhosted.org/packages/4f/7f/fa59c4c27e2a076bba0d959386e26eba77eb52ea4a0aac48e3515c186b4c/yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3", size = 92700, upload-time = "2025-06-10T00:44:56.784Z" }, + { url = "https://files.pythonhosted.org/packages/2f/d4/062b2f48e7c93481e88eff97a6312dca15ea200e959f23e96d8ab898c5b8/yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d", size = 347644, upload-time = "2025-06-10T00:44:59.071Z" }, + { url = "https://files.pythonhosted.org/packages/89/47/78b7f40d13c8f62b499cc702fdf69e090455518ae544c00a3bf4afc9fc77/yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c", size = 323452, upload-time = "2025-06-10T00:45:01.605Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2b/490d3b2dc66f52987d4ee0d3090a147ea67732ce6b4d61e362c1846d0d32/yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1", size = 346378, upload-time = "2025-06-10T00:45:03.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/ad/775da9c8a94ce925d1537f939a4f17d782efef1f973039d821cbe4bcc211/yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce", size = 353261, upload-time = "2025-06-10T00:45:05.992Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/0ed0922b47a4f5c6eb9065d5ff1e459747226ddce5c6a4c111e728c9f701/yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3", size = 335987, upload-time = "2025-06-10T00:45:08.227Z" }, + { url = "https://files.pythonhosted.org/packages/3e/49/bc728a7fe7d0e9336e2b78f0958a2d6b288ba89f25a1762407a222bf53c3/yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be", size = 329361, upload-time = "2025-06-10T00:45:10.11Z" }, + { url = "https://files.pythonhosted.org/packages/93/8f/b811b9d1f617c83c907e7082a76e2b92b655400e61730cd61a1f67178393/yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16", size = 346460, upload-time = "2025-06-10T00:45:12.055Z" }, + { url = "https://files.pythonhosted.org/packages/70/fd/af94f04f275f95da2c3b8b5e1d49e3e79f1ed8b6ceb0f1664cbd902773ff/yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513", size = 334486, upload-time = "2025-06-10T00:45:13.995Z" }, + { url = "https://files.pythonhosted.org/packages/84/65/04c62e82704e7dd0a9b3f61dbaa8447f8507655fd16c51da0637b39b2910/yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f", size = 342219, upload-time = "2025-06-10T00:45:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/91/95/459ca62eb958381b342d94ab9a4b6aec1ddec1f7057c487e926f03c06d30/yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390", size = 350693, upload-time = "2025-06-10T00:45:18.399Z" }, + { url = "https://files.pythonhosted.org/packages/a6/00/d393e82dd955ad20617abc546a8f1aee40534d599ff555ea053d0ec9bf03/yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458", size = 355803, upload-time = "2025-06-10T00:45:20.677Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ed/c5fb04869b99b717985e244fd93029c7a8e8febdfcffa06093e32d7d44e7/yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e", size = 341709, upload-time = "2025-06-10T00:45:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/24/fd/725b8e73ac2a50e78a4534ac43c6addf5c1c2d65380dd48a9169cc6739a9/yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d", size = 86591, upload-time = "2025-06-10T00:45:25.793Z" }, + { url = "https://files.pythonhosted.org/packages/94/c3/b2e9f38bc3e11191981d57ea08cab2166e74ea770024a646617c9cddd9f6/yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f", size = 93003, upload-time = "2025-06-10T00:45:27.752Z" }, { url = "https://files.pythonhosted.org/packages/b4/2d/2345fce04cfd4bee161bf1e7d9cdc702e3e16109021035dbb24db654a622/yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77", size = 46542, upload-time = "2025-06-10T00:46:07.521Z" }, ] @@ -2333,4 +2703,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/29/49effcff64ef30731e35520a152a9dfcafec86cf114b4c2aff942e8264ba/zope_interface-8.0.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35a1565d5244997f2e629c5c68715b3d9d9036e8df23c4068b08d9316dcb2822", size = 264696, upload-time = "2025-09-25T05:58:13.351Z" }, { url = "https://files.pythonhosted.org/packages/c7/39/b947673ec9a258eeaa20208dd2f6127d9fbb3e5071272a674ebe02063a78/zope_interface-8.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:029ea1db7e855a475bf88d9910baab4e94d007a054810e9007ac037a91c67c6f", size = 264229, upload-time = "2025-09-25T06:26:26.226Z" }, { url = "https://files.pythonhosted.org/packages/8f/ee/eed6efd1fc3788d1bef7a814e0592d8173b7fe601c699b935009df035fc2/zope_interface-8.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0beb3e7f7dc153944076fcaf717a935f68d39efa9fce96ec97bafcc0c2ea6cab", size = 212270, upload-time = "2025-09-25T05:58:53.584Z" }, + { url = "https://files.pythonhosted.org/packages/5f/dc/3c12fca01c910c793d636ffe9c0984e0646abaf804e44552070228ed0ede/zope_interface-8.0.1-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:c7cc027fc5c61c5d69e5080c30b66382f454f43dc379c463a38e78a9c6bab71a", size = 208992, upload-time = "2025-09-25T05:58:40.712Z" }, + { url = "https://files.pythonhosted.org/packages/46/71/6127b7282a3e380ca927ab2b40778a9c97935a4a57a2656dadc312db5f30/zope_interface-8.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fcf9097ff3003b7662299f1c25145e15260ec2a27f9a9e69461a585d79ca8552", size = 209051, upload-time = "2025-09-25T05:58:42.182Z" }, + { url = "https://files.pythonhosted.org/packages/56/86/4387a9f951ee18b0e41fda77da77d59c33e59f04660578e2bad688703e64/zope_interface-8.0.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6d965347dd1fb9e9a53aa852d4ded46b41ca670d517fd54e733a6b6a4d0561c2", size = 259223, upload-time = "2025-09-25T05:58:23.191Z" }, + { url = "https://files.pythonhosted.org/packages/61/08/ce60a114466abc067c68ed41e2550c655f551468ae17b4b17ea360090146/zope_interface-8.0.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9a3b8bb77a4b89427a87d1e9eb969ab05e38e6b4a338a9de10f6df23c33ec3c2", size = 264690, upload-time = "2025-09-25T05:58:15.052Z" }, + { url = "https://files.pythonhosted.org/packages/36/9a/62a9ba3a919594605a07c34eee3068659bbd648e2fa0c4a86d876810b674/zope_interface-8.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:87e6b089002c43231fb9afec89268391bcc7a3b66e76e269ffde19a8112fb8d5", size = 264201, upload-time = "2025-09-25T06:26:27.797Z" }, + { url = "https://files.pythonhosted.org/packages/da/06/8fe88bd7edef60566d21ef5caca1034e10f6b87441ea85de4bbf9ea74768/zope_interface-8.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:64a43f5280aa770cbafd0307cb3d1ff430e2a1001774e8ceb40787abe4bb6658", size = 212273, upload-time = "2025-09-25T06:00:25.398Z" }, ]

    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%0D1BB>#Z7KY@C#!;6>| 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%0Ac687w51vvT)m=eKt_SR2?>;m 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�rU?+6 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